代写 C Rechnerarchitektur (RA)

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 für Ein/Ausgabe
– Instruktionen beinhalten Geräteadressen und Daten (Befehle für die I/O-Einheit)
– diese Instruktionen können nur im kernel mode ausgeführt 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 schützt diesen Speicherbereich vor Anwenderprogrammen
– Beispiele für 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 für 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
zusätzliche Handshake Signale für 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
Erläuterung
0xFFFF 000C
Transmit Data
Write
Schreiben des zu sendenden Zeichens
0xFFFF 0008
Transmit Status
Read
Niederwertigstes Bit ist 1 sobald Empfänger bereit
0xFFFF 0004
Receive Data
Read
Lesen des empfangenen Zeichens, setzt Receive Status Bit zurück
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
Regulärer Speicher
data byte
data byte
data byte
data byte
Kontrollregister für 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 Gerät
Prozessor
ReadReq WriteReq
Data Address
0x0000 0000 <= Addr < 0xFFFF 0000 select select Serielle Kommunikationsschnittstelle Speicher RA.7 MMIO 2018 v1.0.0 0xFFFF 0000 <= Addr < 0xFFFF 0010 6 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 ist while (*c != 0) { // warte auf Freigabe zum Senden (Polling) while (true) { if ( (*TRANSMIT_STATUS_REG & 0x1) == 0x1 ) { break; } } // übermittle Zeichen *TRANSMIT_DATA_REG = *c; c++; } C Code: Versenden einer Nachricht RA.7 MMIO 2018 v1.0.0 7 Assembler Code: Versenden einer Nachricht .data hello: .asciiz "Hello Rechnerarchitektur!" .text li $t1, 0xffff0000 la $a0, hello next: lb $t0, 0($a0) beqz $t0, end wait_ready: lw $t2, andi $t2, $t2, 1 beqz $t2, wait_ready sw $t0, 0xC($t1) addi $a0, $a0, 1 j next end: 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 character Code für MARS Simulator RA.7 MMIO 2018 v1.0.0 8 • v1.0.0 (2019-01-30) – Initiale Version RA.7 MMIO 2018 v1.0.0 Änderungen 9