Rechnerarchitektur (RA)
7. Ein/Ausgabe
Extra: Memory Mapped I/O
Prof. Dr. Christian Plessl
RA.7 MMIO 2018 v1.0.0
1
Befehle an die I/O-Einheit (Wiederholung)
Spezielle Prozessorinstruktionen fur Ein/Ausgabe
Instruktionen beinhalten Gerateadressen und Daten (Befehle fur die I/O-Einheit)
diese Instruktionen konnen nur im kernel mode ausgefuhrt werden
Speicheradressierte Ein/Ausgabe (memory-mapped I/O)
Ein Teil des Speicher-Adressraums wird den I/O-Einheiten zugewiesen
Durch Schreiben an diese Adressen werden Befehle an die I/O-Einheit geschickt
Das Betriebssystem schutzt diesen Speicherbereich vor Anwenderprogrammen
Beispiele fur memory-mapped Systemarchitekturen:
Prozessor
Prozessor
Prozessor-Speicher Bus
Interface I/O-Einheit
Prozessor-Speicher Bus
Busadapter
I/O-Einheit
Speicher
Speicher
I/O Bus
RA.7 MMIO 2018 v1.0.0
2
I/O-Einheit informiert Betriebssystem (Wiederholung)
Polling
Die I/O-Einheit schreibt die Informationen fur das Betriebssystem in ein Status-
register innerhalb der I/O-Steuerung.
Der Prozessor liest dieses Statusregister periodisch aus (programmierte Ein/Ausgabe).
Prozessor
Nachteil:
Es kann viel Prozessorleistung in der Abfrageschleife verschwendet werden (der Prozessor betreibt busy waiting).
Speicher
Statusreg.
I/O-Steuerung
RA.7 MMIO 2018 v1.0.0
3
ReadReq
WriteReq
Address Data
Anbindung an Prozessor-Speicher Bus
Transmit Receive
zusatzliche Handshake Signale fur Flusskontrolle
Verbindungen zum Kommunikationspartner
Beispiel: Serielle Kommunikationsschnittstelle
Control / Statusregister
Im MARS Simulator integriert (Emulation eines Terminals)
Register werden mit lw bzw. sw Instruktionen gelesen/geschrieben
Adresse
Funktion
R/W
Erlauterung
0xFFFF 000C
Transmit Data
Write
Schreiben des zu sendenden Zeichens
0xFFFF 0008
Transmit Status
Read
Niederwertigstes Bit ist 1 sobald Empfanger bereit
0xFFFF 0004
Receive Data
Read
Lesen des empfangenen Zeichens, setzt Receive Status Bit zuruck
0xFFFF 0000
Receive Status
Read
Niederwertigstes Bit (LSB) wird auf 1 gesetzt, sobald Zeichen empfangen wurde
RA.7 MMIO 2018 v1.0.0
4
Nutzung des Addressraums
Adressen 0xFFFF 000C
0xFFFF 0008
0xFFFF 0004 0xFFFF 0000
0xFFFE FFFC
0x0000 0000
Transmit Data Reg
Transmit Status Reg
Receive Data Reg
Receive Status Reg
unused byte
unused byte
unused byte
data byte
31 unused bits
s
unused byte
unused byte
unused byte
data byte
31 unused bits
s
data byte
data byte
data byte
data byte
Regularer Speicher
data byte
data byte
data byte
data byte
Kontrollregister fur I/O werden im Adressraum des Prozessors eingeblendet, daher memory mapped I/O
RA.7 MMIO 2018 v1.0.0
5
Architektur mit einem Memory Mapped I/O Gerat
Prozessor
ReadReq WriteReq
Data Address
0x0000 0000 <= Addr < 0xFFFF 0000selectselect Serielle Kommunikationsschnittstelle SpeicherRA.7 MMIO 2018 v1.0.00xFFFF 0000 <= Addr < 0xFFFF 00106 volatile int * TRANSMIT_STATUS_REG = 0xFFFF0008; volatile int * TRANSMIT_DATA_REG = 0xFFFF000C;char hello[] = “Hello Rechnerarchitektur!”; char *c = hello;// solange String-Ende (NULL Zeichen) noch nicht erreicht istwhile (*c != 0) {// warte auf Freigabe zum Senden (Polling)while (true) {if ( (*TRANSMIT_STATUS_REG & 0x1) == 0x1 ) {break; }}// ubermittle Zeichen*TRANSMIT_DATA_REG = *c;c++;}C Code: Versenden einer Nachricht RA.7 MMIO 2018 v1.0.07 Assembler Code: Versenden einer Nachricht .datahello: .asciiz “Hello Rechnerarchitektur!”.textli $t1, 0xffff0000la $a0, hellonext:lb $t0, 0($a0)beqz $t0, endwait_ready: lw $t2,andi $t2, $t2, 1beqz $t2, wait_readysw $t0, 0xC($t1)addi $a0, $a0, 1j nextend: j end# MMIO base register register# 0x8($t1) transmitter control register # 0xC($t1) transmitter write register# load address of string# load current character of string# terminate when reaching end of string (NULL character)0x8($t1) # check ready register# extract value of last bit # loop until receiver is ready # advance to next characterCode fur MARS SimulatorRA.7 MMIO 2018 v1.0.08 v1.0.0 (2019-01-30) Initiale VersionRA.7 MMIO 2018 v1.0.0Anderungen 9
Reviews
There are no reviews yet.