Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Input and Output How things get into and out of the CPU Computer System CMPE12c 2 Cyrus Bazeghi 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 CMPE12c 3 Cyrus Bazeghi 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. CMPE12c 4 Cyrus Bazeghi 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 Queuing Seek Rotation Transfer Depends 10ms 10ms 1ms •Electronic speeds are in the nanoseconds (10-9 sec) •Disk speeds are in the milliseconds (10-3 sec) •Why use a disk? CMPE12c 5 Cyrus Bazeghi 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? CMPE12c 6 Cyrus Bazeghi 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 CMPE12c 7 Cyrus Bazeghi 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 things are 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…) CMPE12c 8 Cyrus Bazeghi 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 CMPE12c 9 Cyrus Bazeghi 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. CMPE12c 10 Cyrus Bazeghi Memory Mapped I/O Design hardware and software to recognize certain addresses 0x00000000 Real Memory - RAM 0xffff0000 0xffff0008 From keyboard 0xffff0010 To display Set some labels and use those to access devices keyboardData displayData CMPE12c equ equ 0xffff0008 0xffff0010 11 Cyrus Bazeghi Memory Mapped I/O CPU MEM Keyboard Buffer 0xffff0008 System bus Display Buffer 0xffff0010 •Devices on bus watch for their address •getc operating_system_function_12: lw $2, KeyboardData “return from syscall” # getc char and put it in $2 operating_system_function_11: sw $2, DisplayData “return from syscall” # putc char, where char is in $4 •putc •But is there a new char to read? •But is the display done with the last char? CMPE12c 12 Cyrus Bazeghi Device Status Need I/O device status to coordinate 0x00000000 Real Memory - RAM 0xffff0000 DATA from keyboard STATUS from keyboard 0xffff0008 0xffff000c DATA to Display 0xffff0010 0xffff0014 STATUS from Display Set up some more labels KeyboardStatus DisplayStatus equ equ 0xffff000c 0xffff0014 Assume Status is word where MSB==1 means ready. CMPE12c 13 Cyrus Bazeghi 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: WaitLoop12: lw $14, DisplayStatus bgez $14, WaitLoop11 sw $4, DisplayData “return from syscall” CMPE12c 14 # putc char, where char is in $4 # keep waiting if $14 non-negative # same as before Cyrus Bazeghi Device Status HC11 Polling (non-interrupt) I/O GETCHAR GETCHAR: LDAA ANDA BEQ LDAA RTS SCSR #$20 GETCHAR SCDR ; status register ; rdrf bit mask ; loop if rdrf = 0 ; read data SCSR #$80 OUTCHAR SCDR ; load sci status register ; tdre bit ; loop intil tdre = 0 ; write character to port OUTCHAR OUTCHAR: LDAB BITB BEQ STAA RTS CMPE12c 15 Cyrus Bazeghi 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 CMPE12c 16 Cyrus Bazeghi 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? CMPE12c 17 Cyrus Bazeghi