180 likes | 301 Views
Input and Output How things get into and out of the CPU. Computer System. I/O Devices. Keyboard User presses ‘A’ key - > ‘a’ ASCII code is 0x61 Keyboard sends this on wires 1 for start, 8-bits of data, 0 for stop ‘a’ is: 1011000010 Buffer at computer catches these bits. I/O Devices.
E N D
I/O Devices • Keyboard • User presses ‘A’ key -> ‘a’ • ASCII code is 0x61 • Keyboard sends this on wires • 1 for start, 8-bits of data, 0 for stop • ‘a’ is: 1011000010 • Buffer at computer catches these bits 3
I/O Devices • Displays • Character display works with the reverse process (sort of) • Most displays are “bit mapped” • Printers • Just like a display but now being “printed” to paper, not a screen. • Again, most printers are now “bit mapped” verses character. 4
I/O Devices • Hard Disk • A spinning disk (4600, 5200, 7200, 10000+ RPM) • 2 – 240 GB and growing FAST • Magnetic and read/write (like tape) • Both sides • Usually a stack of platters • Disk access • Electronic speeds are in the nanoseconds (10-9 sec) • Disk speeds are in the milliseconds (10-3 sec) • Why use a disk? 5
I/O Devices • Questions • How does CPU ask for a char to be printed? • Which printer? • Which display? Who’s? • When is printer ready for the next char? • When does keyboard have the next char? • What about the million times slower? 6
MAL I/O • putc $s0 is • # address of char is in $s0 • lb $4, ($s0) # $4 char to be printed • addi $2, $0, 11 # this syscall is like: • syscall # jal operating_system_function • getc $s0 is • addi $2, $0, 12 # this syscall is like: • syscall # jal operating_system_function • # returns with char read in $2 7
MAL I/O • Don’t use “jal” because • OS doesn’t trust user to provide the correct address • Want to switch into OS mode, where more thingsare allowed • Allowed by what? • OS catches “syscall” and uses value in $2 to determine what to do • OS will not allow (or should not) • Users to read each other’s keyboards • Users to send infinite jobs to printers (well, actually…) 8
MAL I/O • How does the OS do I/O? • What instructions cause an I/O? • Could have special instructions • Hard to anticipate all possibilities • Solutions • overload load and store • Memory-mapped I/O 9
Memory Mapped IO • Idea is to place devices other than RAM chips at physical address locations. • This way to access IO devices you use the same load and store instructions. 10
Memory Mapped I/O Design hardware and software to recognize certain addresses 0x00000000 Real Memory - RAM 0xFFFF0000 From keyboard 0xFFFF0008 To display 0xFFFF0010 • Set some labels and use those to access devices • keyboardData equ 0xFFFF0008 • displayData equ 0xFFFF0010 11
Memory Mapped I/O CPU MEM System bus Keyboard Buffer0xFFFF0008 Display Buffer0xFFFF0010 • Devices on bus watch for their address • getc • operating_system_function_12: # getc char and put it in $2 • lw $2, KeyboardData • “return from syscall” • putc • operating_system_function_11: # putc char, where char is in $4 • sw $2, DisplayData • “return from syscall” • But is there a new char to read? • But is the display done with the last char? 12
Device Status • Need I/O device status to coordinate • Set up some more labels • KeyboardStatus equ 0xFFFF000c • DisplayStatus equ 0xFFFF0014 • Assume Status is word where MSB==1 means ready. 0x00000000 Real Memory - RAM 0xFFFF0000 DATA from keyboard 0xFFFF0008 STATUS from keyboard 0xFFFF000c DATA to Display 0xFFFF0010 0xFFFF0014 STATUS from Display 13
Device Status MAL OS calls GETC Operating_system_function_12: # getc char and put it in $2 WaitLoop12: lw $14, KeybaordStatus bgez $14, WaitLoop12 # keep waiting if $14 non-negative lw $2, KeyboardData # same as before “return from syscall” PUTC Operating_system_function_11: # putc char, where char is in $4 WaitLoop12: lw $14, DisplayStatus bgez $14, WaitLoop11 # keep waiting if $14 non-negative sw $4, DisplayData # same as before “return from syscall” 14
Device Status HC11 Polling (non-interrupt) I/O GETCHAR GETCHAR: LDAA SCSR ; status register ANDA #$20 ; rdrf bit mask BEQ GETCHAR ; loop if rdrf = 0 LDAA SCDR ; read data RTS OUTCHAR OUTCHAR: LDAB SCSR ; load sci status register BITB #$80 ; tdre bit BEQ OUTCHAR ; loop intil tdre = 0 STAA SCDR ; write character to port RTS 15
Device Status • How much time is spent spinning? • A putc or getc is less than 10 instructions, or 10ns on a modern processor • Mechanical devices take milliseconds • Almost all time is spent spinning • Must do useful work while waiting • Periodically poll devices and send characters when ready 16
Polling I/O • The OS must check regularly (poll) for ready devices • Perhaps once a millisecond • If ready, then OS services device • Keyboard: transfer character and put on queue • Display: transmit character to the graphics HW • Problems: • How often to poll? • How does the OS code get run? • What happens to the user program? • Is there a better solution? 17
Questions? 18