Oversimplified Picture of a printf() operation +---------------------------------------------------------------------------------------+ | User Mode Programs | | | | your program | | +------------+ | | |main() { | | | | ... | | | | printf(); |-------+ | | | ... |<--+ | | | +------------+ | | printf() function | | | | +--------------+ | | | +-->|printf() { | | | | | create string| | | | | from args | | | | | write(string)|-------+ | | +-------| return; |<--+ | | | +--------------+ | | fs/read_write.c | | | | +---------------+ | | | +-->|write() { | | | | | ... | | | | | movl 4,%eax | | | | | int $0x80 | | | | | ... | | | +-------| return; | | | +---------------+ | | | ^ | |----------------------------------------------------------|-------|--------------------- | Kernel Mode Programs | | | | v | | | int 80 +---------------+ | | handler |syscall(0, ...)| | | | ... | | | |syscall(4, ...)| | | We have ignored the software | set up printer| | | for the various busses (e.g. USB) | with HP driver| | | +---------------+ | | | ^ | | <-----------+---------------------------+ | | | | | | | | ------------|-------+-------------------|------>| | | v | v | | | Screen +---------------+ HP +---------------+ | | Device | send commands | Device | send commands | | | Driver | and string to | Driver | and string to | | | | device, wait | | device, wait | | | | for interrupt | | for interrupt | | | +---------------+ +---------------+ | | | ^ | ^ | +------------------------------|-------|-------------------|-------|--------------------| | Hardware V | v | | | Display +---------------+ HP +---------------+ | | Hardware | | Printer | output string | | | | | | generate | | | | | | interrupt | | | | | | when done | | | +---------------+ +---------------+ | | | +---------------------------------------------------------------------------------------|