Внешние устройства и ввод/вывод
Устройства компьютера возожно разделить на два вида:
- внутренние (процессор, ОЗУ);
- внешние (периферийные).
Вычислительная система состоящая только из процессора и памяти мало полезна. Для повышения практической полезности ЭВМ снабжается периферийными устройствами(ПУ).
Внешние(периферийные) устройства ЭВМ, - устройства, предназначенные для внешней машинной обработки информации (в отличие от преобразований информации, осуществляемых центральным процессором). По роду выполняемых операций П. у. подразделяются на след. группы: устройства подготовки данных, служащие для занесения информации на промежуточные носители данных (перфорационные карты, перфорационные ленты, магнитные ленты, магнитные диски и др.); устройства ввода - для считывания информации и её преобразования в кодовую последовательность электрических сигналов, подлежащих передаче в центральный процессор; устройства вывода - для регистрации результатов обработки информации или их отображения (дисплей, принтер, графопостроитель и др.); устройства хранения больших объёмов информации (запоминающие устройства на магнитных дисках ...); устройства передачи информации на большие расстояния, обеспечивающие взаимодействие многих пользователей с ЭВМ (аппаратура передачи данных и др.).
ПУ имеют регистры. На программном уровне всё управление ПУ сводится к чтению/записи регистров устройства.
CPU
r/w
ПУ
<->
Data registers
-->
Control registers
<--
Status registers
При работе с ПУ процессор выполняет функции, к числу которых относится:
- арбитраж (выбор устройств по приоритету);
- поиск периферийного устройства по заданному адресу;
- передача периферийному устройству команды на исполнение;
анализ состояния ПУ (получение от ПУ информации об его состоянии);
поискПУ, запрашивающего обслуживание;
прием и передача данных от ПУ;
- управление памятью.
Порт(многозначность и связанная с этим путаница). IN, OUT.
- Отображение регистров на память("MMIO").
Программный опрос ПУ, как способ организации взаимодействия.
- Пример терминала в Mars:
Tools -> Keyboard adn Display MMIO Simulator
1 # Memory mapped address of device registers. 2 # 0xFFFF0000 rcv contrl 3 # 0xFFFF0004 rcv data 4 # 0xFFFF0008 tx contrl 5 # 0xFFFF000c tx data 6 7 .text 8 main: 9 loop: 10 jal getc 11 beq $v0,0x32, exit 12 ori $a0, $v0, 0 13 jal putc 14 15 nop 16 nop 17 nop 18 nop 19 nop 20 j loop 21 exit: 22 li $v0, 10 23 syscall 24 25 getc: 26 # v0 = received byte 27 lui $t0,0xffff 28 gcloop: 29 lw $t1,0($t0) # read rcv ctrl 30 andi $t1,$t1,0x0001 # extract ready bit 31 beq $t1,$0,gcloop # keep polling till ready 32 lw $v0,4($t0) # read data and rtn 33 jr $ra 34 35 putc: 36 # a0 = byte to trransmit 37 lui $t0,0xffff 38 pcloop: 39 lw $t1,8($t0) # read tx ctrl 40 andi $t1,$t1,0x0001 # extract ready bit 41 beq $t1,$0,pcloop # wait till ready 42 sw $a0, 0xc($t0) # write data 43 jr $ra 44 45 .data
- Примечания:
- Keyboard adn Display MMIO Simulator использует для управления и передачи данных четыре регистра:
- 0xFFFF0000 rcv contrl
bits
31-2
1
0
target
unused
Int
ready
- 0xFFFF0004 rcv data
bits
31-8
7-0
target
unused
Resived Byte
- 0xFFFF0008 tx contrl
bits
31-2
1
0
target
unused
Int
ready
- 0xFFFF000c tx data
bits
31-8
7-0
target
unused
Transmitted Byte