Umgekehrt kann der Prozessor Geräte steuern, in dem er die sogenannten I/O-Ports (engl. Input/Output-Ports) verwendet. Daneben können Geräte auch Platz im Adressraums des Hauptspeichers fürs ROM und zur Steuerung belegen. Den für die Steuerung belegten Speicher bezeichnet man auch auch als I/O-memory. Normalerweise erfolgt der Datentransfer innerhalb der Rechner über die CPU und die I/O-Ports. Bei großen Datenmengen führt das dazu, daß der Prozessor nur mit dem Schaufeln von Daten beschäftig ist. Dies macht sich z. B. beim Abspielen von Videos negativ bemerkbar. Um das Nadelöhr Prozessor zu umgehen, wurde DMA (engl. Direct Memory Access) entwickelt. Bestimmte ISA-Geräte, die mit großem Datenaufkommen zu kämpfen haben, können durch dieses Verfahren die Daten direkt im Hauptspeicher lesen und schreiben. PCI-Geräte beherrschen dieses Verfahren nicht. Das klingt komisch, macht aber nichts, denn sie beherrschen ein besseres System. Durch das Konzept des bus mastering kann das PCI-Gerät temporär den Bus selbst übernehmen und so tun, als wäre es die CPU. Um die Details kümmert sich dabei der Chipsatz auf der Hauptplatine.
Im Laufe der Jahre haben sich feste IRQs und I/O-Ports für bestimmte Peripheriegeräte eingebürgert. So liegt z. B. die beiden IDE-Controller auf den IRQs 14 und 15. Auch die parallele Schnittstelle hält schon seit Jahren die I/O-Ports 0x378 bis 0x37a besetzt. Welcher Interrupt welchem Gerät zugeordnet ist, können Sie der virtuellen Datei /proc/interrupts entnehmen.
ole@enterprise:~> cat /proc/interrupts CPU0 0: 14118492 XT-PIC timer 1: 36197 XT-PIC keyboard 2: 0 XT-PIC cascade 5: 0 XT-PIC usb-uhci, usb-uhci 8: 2 XT-PIC rtc 10: 72616 XT-PIC eth0, VIA686A 12: 301546 XT-PIC PS/2 Mouse 14: 54053 XT-PIC ide0 15: 144890 XT-PIC ide1 NMI: 0 LOC: 0 ERR: 0 MIS: 0
In jeder Zeile werden die Informationen zu einem IRQ angegeben. Die ersten Spalte enthält den IRQ. Die zweite Spalte zeigt an, wie oft der Interrupt aufgetreten ist. Diese Spalte wird für jeden Prozessor wiederholt. In der letzten Spalte steht dann, für welches Gerät der Prozessor zuständig ist.
Auch die Informationen zu den I/O-Ports finden Sie im Verzeichnis /proc wieder. Hierfür müssen Sie nur die virtuelle Datei /proc/ioports befragen.
ole@enterprise:~> cat /proc/ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02f8-02ff : serial(auto) 0376-0376 : ide1 0378-037a : parport0 ... d800-d80f : VIA Technologies, Inc. VT82C586B PIPC Bus Master IDE d800-d807 : ide0 d808-d80f : ide1 e400-e4ff : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] e800-e80f : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI]
Letztendlich sollten Sie sich noch die virtuelle Datei /proc/dma anschauen. Hier finden Sie die Liste der verwendeten DMA-Kanäle. Bei den heutigen PCI-Systemen sind die Informationen aber eher spärlich. Die DMA-Einstellungen der IDE-Festplatten werden übrigens hier nicht miterfaßt.
ole@enterprise:~> cat /proc/dma 4: cascade
Beim Einsatz von ISA-Geräten, wenn Sie noch welche haben, stehen meist die Ressourcen schon fest. Entweder sind sie durch Jumper und Schalter auf der Karte hardwaremäßig einzustellen oder sie benötigen dazu eine entsprechende Software. Das böse Wort in diesem Zusammenhang ist oft Jumperless. In den meisten Fällen liegt die Software auf einer Diskette bereit und läuft natürlich nur unter DOS. Daher ist es auch für Linux-Puristen ratsam eine DOS/Windows-Startdiskette zu besitzen.