Title: Input and Output How things get into and out of the CPU
1Input and OutputHow things get into and out of
the CPU
2Computer System
3I/O Devices
- Keyboard
- User presses A key -gt 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
4I/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.
5I/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?
6I/O Devices
- Questions
- How does CPU ask for a char to be printed?
- Which printer?
- Which display? Whos?
- When is printer ready for the next char?
- When does keyboard have the next char?
- What about the million times slower?
7MAL 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
8MAL I/O
- Dont use jal because
- OS doesnt 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 others keyboards
- Users to send infinite jobs to printers (well,
actually)
9MAL 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
10Memory 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.
11Memory 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
12Memory 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?
13Device Status
- Need I/O device status to coordinate
- Set up some more labels
- KeyboardStatus equ 0xffff000c
- DisplayStatus equ 0xffff0014
- Assume Status is word where MSB1 means ready.
0x00000000
Real Memory - RAM
0xffff0000
DATA from keyboard
0xffff0008
STATUS from keyboard
0xffff000c
DATA to Display
0xffff0010
0xffff0014
STATUS from Display
14Device 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
15Device 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
16Device 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
17Polling 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?