Memory-mapped I/O (MMIO) and port-mapped I/O (PMIO) are two complementary methods of performing input/output (I/O) between the central processing unit (CPU) and peripheral devices in a computer. An alternative approach is using dedicated I/O processors, commonly known as channels on mainframe computers, which execute their own instructions.
- Elexim Port Devices Drivers
- Elexim Port Devices Driver
- Elexim Port Devices Driver License Test
- Elexim Port Devices Driver Updater
- Elexim Port Devices Driver Device
Memory-mapped I/O uses the same address space to address both memory and I/O devices. The memory and registers of the I/O devices are mapped to (associated with) address values. So when an address is accessed by the CPU, it may refer to a portion of physical RAM, or it can instead refer to memory of the I/O device. Thus, the CPU instructions used to access the memory can also be used for accessing devices. Each I/O device monitors the CPU's address bus and responds to any CPU access of an address assigned to that device, connecting the data bus to the desired device's hardware register. To accommodate the I/O devices, areas of the addresses used by the CPU must be reserved for I/O and must not be available for normal physical memory. The reservation may be permanent, or temporary (as achieved via bank switching). An example of the latter is found in the Commodore 64, which uses a form of memory mapping to cause RAM or I/O hardware to appear in the 0xD000-0xDFFF
range.
In the search box on the taskbar, enter device manager, then select Device Manager. Select a category to see names of devices, then right-click (or press and hold) the one you’d like to update. Select Search automatically for updated driver software. Cimirazieva 65 Minsk, Bělorusko. Info@elexim.net +375 017 209 61 83. Bank Account: 305414001 / 5500 IBAN: CZ66 5500 0000 0003 0541 4001 SWIFT Code: RZBC CZ PP. Raiffeisenbank a.s. Hvězdova 1716/2b, 140 78 Praha 4, Czech Republic Phone: +420 225 541 111 Fax: +420 225 542 111.
Port-mapped I/O often uses a special class of CPU instructions designed specifically for performing I/O, such as the in
and out
instructions found on microprocessors based on the x86 and x86-64 architectures. Different forms of these two instructions can copy one, two or four bytes (outb
, outw
and outl
, respectively) between the EAX register or one of that register's subdivisions on the CPU and a specified I/O port which is assigned to an I/O device. I/O devices have a separate address space from general memory, either accomplished by an extra 'I/O' pin on the CPU's physical interface, or an entire bus dedicated to I/O. Because the address space for I/O is isolated from that for main memory, this is sometimes referred to as isolated I/O.[1]
Overview[edit]
Different CPU-to-device communication methods, such as memory mapping, do not affect the direct memory access (DMA) for a device, because, by definition, DMA is a memory-to-device communication method that bypasses the CPU.
Hardware interrupts are another communication method between the CPU and peripheral devices, however, for a number of reasons, interrupts are always treated separately. An interrupt is device-initiated, as opposed to the methods mentioned above, which are CPU-initiated. It is also unidirectional, as information flows only from device to CPU. Lastly, each interrupt line carries only one bit of information with a fixed meaning, namely 'an event that requires attention has occurred in a device on this interrupt line'.
I/O operations can slow memory access if the address and data buses are shared. This is because the peripheral device is usually much slower than main memory. In some architectures, port-mapped I/O operates via a dedicated I/O bus, alleviating the problem.
One merit of memory-mapped I/O is that, by discarding the extra complexity that port I/O brings, a CPU requires less internal logic and is thus cheaper, faster, easier to build, consumes less power and can be physically smaller; this follows the basic tenets of reduced instruction set computing, and is also advantageous in embedded systems. The other advantage is that, because regular memory instructions are used to address devices, all of the CPU's addressing modes are available for the I/O as well as the memory, and instructions that perform an ALU operation directly on a memory operand (loading an operand from a memory location, storing the result to a memory location, or both) can be used with I/O device registers as well. In contrast, port-mapped I/O instructions are often very limited, often providing only for simple load-and-store operations between CPU registers and I/O ports, so that, for example, to add a constant to a port-mapped device register would require three instructions: read the port to a CPU register, add the constant to the CPU register, and write the result back to the port.
As 16-bit processors have become obsolete and replaced with 32-bit and 64-bit in general use, reserving ranges of memory address space for I/O is less of a problem, as the memory address space of the processor is usually much larger than the required space for all memory and I/O devices in a system. Therefore, it has become more frequently practical to take advantage of the benefits of memory-mapped I/O. However, even with address space being no longer a major concern, neither I/O mapping method is universally superior to the other, and there will be cases where using port-mapped I/O is still preferable.
Memory-mapped I/O is preferred in x86-based architectures because the instructions that perform port-based I/O are limited to one register: EAX, AX, and AL are the only registers that data can be moved into or out of, and either a byte-sized immediate value in the instruction or a value in register DX determines which port is the source or destination port of the transfer.[2][3] Since any general-purpose register can send or receive data to or from memory and memory-mapped I/O devices, memory-mapped I/O uses fewer instructions and can run faster than port I/O. AMD did not extend the port I/O instructions when defining the x86-64 architecture to support 64-bit ports, so 64-bit transfers cannot be performed using port I/O.[4]
Memory barriers[edit]
Since the caches mediate accesses to memory addresses, data written to different addresses may reach the peripherals' memory or registers out of the program order, i.e. if software writes data to an address and then writes data to another address, the cache write buffer does not guarantee that the data will reach the peripherals in that order.[5] It is the responsibility[clarification needed] of the software to include memory barrier instructions after the first write, to ensure that the cache buffer is drained before the second write is executed.
Memory-mapped I/O is the cause of memory barriers in older generations of computers, which are unrelated to memory barrier instructions. The 640 KB barrier is due to the IBM PC placing the Upper Memory Area in the 640–1024 KB range within its 20-bit memory addressing. The 3 GB barrier and PCI hole are manifestations of this with 32-bit memory addressing; with 64-bit memory addressing these are usually no longer problems on newer architectures.
Examples[edit]
Address range (hexadecimal) | Size | Device |
---|---|---|
0000–7FFF | 32 KiB | RAM |
8000–80FF | 256 bytes | General-purpose I/O |
9000–90FF | 256 bytes | Sound controller |
A000–A7FF | 2 KiB | Video controller/text-mapped display RAM |
C000–FFFF | 16 KiB | ROM |
A simple system built around an 8-bitmicroprocessor might provide 16-bit address lines, allowing it to address up to 64 kibibytes (KiB) of memory. On such a system, the first 32 KiB of address space may be allotted to random access memory (RAM), another 16 KiB to read only memory (ROM) and the remainder to a variety of other devices such as timers, counters, video display chips, sound generating devices, etc.
The hardware of the system is arranged so that devices on the address bus will only respond to particular addresses which are intended for them, while all other addresses are ignored. This is the job of the address decoding circuitry, and that establishes the memory map of the system. As a result, system's memory map may look like in the table on the right. This memory map contains gaps, which is also quite common in actual system architectures.
Assuming the fourth register of the video controller sets the background colour of the screen, the CPU can set this colour by writing a value to the memory location A003 using its standard memory write instruction. Using the same method, graphs can be displayed on a screen by writing character values into a special area of RAM within the video controller. Prior to cheap RAM that enabled bit-mapped displays, this character cell method was a popular technique for computer video displays (see Text user interface).
Basic types of address decoding[edit]
Address decoding types, in which a device may decode addresses completely or incompletely, include the following:
- Complete (exhaustive) decoding
- 1:1 mapping of unique addresses to one hardware register (physical memory location). Involves checking every line of the address bus.
- Incomplete (partial) decoding
- n:1 mapping of n unique addresses to one hardware register. Partial decoding allows a memory location to have more than one address, allowing the programmer to reference a memory location using n different addresses. It may also be done to simplify the decoding hardware by using simpler and often cheaper logic that examines only some address lines, when not all of the CPU's address space is needed. Commonly, the decoding itself is programmable, so the system can reconfigure its own memory map as required, though this is a newer development and generally in conflict with the intent of being cheaper.
- Synonyms: foldback, multiply mapped, partially mapped, address aliasing.[6][7]
- Linear decoding
- Address lines are used directly without any decoding logic. This is done with devices such as RAMs and ROMs that have a sequence of address inputs, and with peripheral chips that have a similar sequence of inputs for addressing a bank of registers. Linear addressing is rarely used alone (only when there are few devices on the bus, as using purely linear addressing for more than one device usually wastes a lot of address space) but instead is combined with one of the other methods to select a device or group of devices within which the linear addressing selects a single register or memory location.
Port I/O via device drivers[edit]
In Windows-based computers, memory can also be accessed via specific drivers such as DOLLx8KD which gives I/O access in 8-, 16- and 32-bit on most Windows platforms starting from Windows 95 up to Windows 7. Installing I/O port drivers will ensure memory access by activating the drivers with simple DLL calls allowing port I/O and when not needed, the driver can be closed to prevent unauthorized access to the I/O ports.
Linux provides the pcimem utility to allow reading from and writing to MMIO addresses. The Linux kernel also allows tracing MMIO access from kernel modules (drivers) using the kernel's mmiotrace debug facility. To enable this, the Linux kernel should be compiled with the corresponding option enabled. mmiotrace is used for debugging closed-source device drivers.
See also[edit]
- mmap, not to be confused with memory-mapped I/O
- Early examples of computers with port-mapped I/O
- PDP-11, an early example of a computer architecture using memory-mapped I/O
- Unibus, a dedicated I/O bus used by the PDP-11
- Advanced Configuration and Power Interface (ACPI)
References[edit]
- ^'I/O - input/output'(PDF). people.cs.clemson.edu.
- ^'Intel 64 and IA-32 Architectures Software Developer's Manual: Volume 2A: Instruction Set Reference, A-M'(PDF). Intel 64 and IA-32 Architectures Software Developer’s Manual. Intel Corporation. June 2010. pp. 3–520. Retrieved 2010-08-21.
- ^'Intel 64 and IA-32 Architectures Software Developer's Manual: Volume 2B: Instruction Set Reference, N-Z'(PDF). Intel 64 and IA-32 Architectures Software Developer’s Manual. Intel Corporation. June 2010. pp. 4–22. Retrieved 2010-08-21.
- ^'AMD64 Architecture Programmer's Manual: Volume 3: General-Purpose and System Instructions'(PDF). AMD64 Architecture Programmer's Manual. Advanced Micro Devices. November 2009. pp. 117, 181. Retrieved 2010-08-21.
- ^ARM Cortex-A Series Programmer's Guide. Literature number ARM DEN0013D. pp. 10–3.
- ^Microsoft (December 4, 2001). 'Partial Address Decoding and I/O Space in Windows Operating Systems'.
- ^HP. 'Address aliasing'.
Elexim Port Devices Drivers
Having trouble with a device? Make sure everything is connected properly, the device has power, and that it’s set up correctly.
First, try checking your hardware
Unplug USB cables and wait for a little while for the device driver to be unloaded by Windows, and then plug the device back in.
Try using a different USB port on your PC.
If you use a USB hub between the device and the PC, make sure the hub has power. If it’s still not working, try removing the USB hub and plugging the device directly into a USB port on the PC.
Make sure that the cables on your device aren't damaged in any way.
Check any battery-powered devices to see if they are fully charged or have fresh batteries.
Make sure there’s no dirt blocking keys or sensors.
Check your wireless connections
Elexim Port Devices Driver
Look on the bottom of the wireless device for a Reset button. Resetting the device will disconnect and then reconnect the wireless connection. There might also be a Reset button on the USB receiver for your device.
For USB wireless devices, this might be as simple as unplugging the USB wireless receiver, waiting for about 10 seconds, and then plugging the USB wireless receiver back into the USB port. The wireless connection should be reestablished.
Check the device
If the device doesn't appear to work at all (no lights appear on the device when it’s plugged in, or the cursor doesn't move or doesn't appear on the screen), connect the device to another PC and make sure the device works on that PC. If the device doesn't work on the other PC, you might need to replace it.
Note: Some devices won't work without installing a driver. When testing the device on another PC, make sure that you have the correct driver installed for the device.
Try the Windows 7 Troubleshooter
Elexim Port Devices Driver License Test
To run the Hardware and Devices troubleshooter in Windows 7:
Open the Hardware and Devices troubleshooter by clicking the Start button, and then clicking Control Panel.
In the search box, enter troubleshooter, then select Troubleshooting.
Under Hardware and Sound, select Configure a device.
Elexim Port Devices Driver Updater
Hardware Troubleshooter Drivers
Elexim Port Devices Driver Device
Update a device driver using Windows Update
In the search box on the taskbar, type check for updates, then select Check for updates from the list of results.
Under Windows Update, select Check for updates. Windows Update will tell you if you need any updates or not, and whether the latest updates were successfully installed.
There might not be any driver updates available.
Download and install a driver yourself
In the search box on the taskbar, type device manager, then select Device Manager from the list of results.
In the list of hardware categories, find the device that you want to update, and then double-click the device name.
Click the Driver tab, click Update Driver, and then follow the instructions.