exceptions and processes con t
play

Exceptions and Processes (cont) time multiplexing: operating system - PowerPoint PPT Presentation

Exceptions and Processes (cont) time multiplexing: operating system alternates which mechanism for operating system to run: exceptions thread runs on the processor time multiplexing: operating system alternates which CPU: ssh.exe loop.exe


  1. Exceptions and Processes (con’t) time multiplexing: operating system alternates which mechanism for operating system to run: exceptions thread runs on the processor time multiplexing: operating system alternates which CPU: ssh.exe loop.exe firefox.exe ssh.exe loop.exe Recall: thread 3 mechanism for operating system to run: exceptions 1 thread runs on the processor 3 CPU: Recall: Process illusion of dedicated machine thread + address space thread = illusion of dedicated processor address space = illusion of dedicated memory 2 Recall: thread loop.exe ssh.exe firefox.exe loop.exe ssh.exe illusion of dedicated processor illusion of dedicated processor programs run concurrently on same CPU programs run concurrently on same CPU

  2. Recall: thread processes can’t interfere with other processes Program B data OS data … real memory trigger error = kernel-mode only 4 Recall: protection processes can’t interfere with operating system Program B code … except as allowed by OS mechanism 1: kernel mode and privileged instructions mechanism 2: address spaces 5 protection and sudo programs always run in user mode extra permissions from OS do not change this sudo, superuser, root, SYSTEM, … operating system may remember extra privileges Program A data Program A code loop.exe 3 ssh.exe firefox.exe loop.exe ssh.exe CPU: time multiplexing: operating system alternates which thread runs on the processor (set by OS) mechanism for operating system to run: exceptions Recall: address space illuision of dedicated memory Program A addresses Program B addresses mapping (set by OS) mapping 6 illusion of dedicated processor programs run concurrently on same CPU mechanism 3: exceptions for controlled access

  3. OS process information 9 interrupts — externally-triggered timer — keep program from hogging CPU I/O devices — key presses, hard drives, networks, … faults — errors/events in programs memory not in address space (“Segmentation fault”) divide by zero invalid instruction traps — intentionally triggered exceptions system calls — ask OS to do something aborts types of exceptions 8 interrupts — externally-triggered timer — keep program from hogging CPU I/O devices — key presses, hard drives, networks, … faults — errors/events in programs memory not in address space (“Segmentation fault”) divide by zero invalid instruction traps — intentionally triggered exceptions system calls — ask OS to do something aborts types of exceptions syscall context: registers, condition codes, address space .globl _start OS tracks extra information, too: process ID — identify process in system calls user ID — who is running the process? what fjles can it access? current directory open fjles …and more CPU doesn’t know about this extra information 7 Recall: Linux x86-64 hello world .data movq $0, %rdi hello_str: .asciz "Hello, World!\n" .text _start: movq $1, %rax # 1 = "write" movq $1, %rdi # file descriptor 1 = stdout movq $hello_str, %rsi movq $15, %rdx # 15 = strlen("Hello, World!\n") syscall movq $60, %rax # 60 = exit 9 ␣

  4. aborts save_old_pc save_pc ... handle_keyboard_interrupt: movq %rax, save_rax movq %rbx, save_rbx movq %rcx, save_rcx ... solution: disallow this! 11 exceptions in exceptions handle_timer_interrupt: movq %rax, save_rax something is wrong with the hardware /* key press here */ movq %rbx, save_rbx ... handle_keyboard_interrupt: save_old_pc save_pc movq %rax, save_rax movq %rbx, save_rbx movq %rcx, save_rcx ... solution: disallow this! movq %rbx, save_rbx /* key press here */ movq %rax, save_rax movq %rbx, save_rbx example: memory chip failed, has junk value tell OS so it can do something do what??? reboot? 10 exceptions in exceptions handle_timer_interrupt: save_old_pc save_pc movq %rax, save_rax /* key press here */ ... handle_keyboard_interrupt: save_old_pc save_pc movq %rax, save_rax movq %rbx, save_rbx movq %rcx, save_rcx ... solution: disallow this! 11 exceptions in exceptions handle_timer_interrupt: 11 save_old_pc save_pc save_old_pc save_pc

  5. save_old_pc save_pc interrupt disabling handle_timer_interrupt: /* key press here */ movq %rsp, save_rsp ... call move_saved_state enable_interrupts /* interrupt happens here! */ ... handle_keyboard_interrupt: ... call move_saved_state 13 exceptions in exceptions /* interrupts automatically disabled here */ save_old_pc save_pc save_old_pc save_pc movq %rax, save_rax /* key press here */ movq %rsp, save_rsp ... call move_saved_state enable_interrupts /* interrupt happens here! */ ... handle_keyboard_interrupt: save_old_pc save_pc ... call move_saved_state movq %rax, save_rax /* interrupts automatically disabled here */ CPU supports disabling (most) interrupts save_old_pc save_pc CPU has extra state: interrupts enabled? keyboard interrupt pending? timer interrupt pending? . . . exception logic 12 exceptions in exceptions handle_timer_interrupt: /* interrupts automatically disabled here */ movq %rax, save_rax handle_timer_interrupt: /* key press here */ movq %rsp, save_rsp ... call move_saved_state enable_interrupts /* interrupt happens here! */ ... handle_keyboard_interrupt: save_old_pc save_pc ... call move_saved_state 13 exceptions in exceptions 13 interrupts will wait until it is reenabled

  6. can we make that closer to the real machine? disabling interrupts privileged mode 15 a note on terminology (2) we use the term “kernel mode” some additional terms: supervisor mode difgerent sets of priviliged operations work ring 0 ‘trap’ meaning what we call ‘fault’ 16 on virtual machines process can be called a ‘virtual machine’ programmed like a complete computer… but weird interface for I/O, memory — system calls … and more ‘hard fault’ meaning what we call ‘abort’ automatically disabled when exception handler starts ... also done with privileged instruction: change_keyboard_parameters: disable_interrupts ... /* change things used by handle_keyboard_interrupt here */ enable_interrupts ‘exception’ meaning what we call ‘fault’ 14 a note on terminology (1) real world: inconsistent terms for exceptions we will follow textbook’s terms in this course the real world won’t you might see: ‘interrupt’ meaning what we call ‘exception’ (x86) 17 some systems have multiple levels of privilege

  7. on virtual machines }; } } 19 trap-and-emulate: write-to-screen struct Process { AddressSpace address_space; SavedRegisters registers; void handle_protection_fault(Process *process) { } else { // normal: would crash if (was_write_to_screen()) { do_write_system_call(process); WRITE_TO_SCREEN_LENGTH; } else { ... } } ... WRITE_TO_SCREEN_LENGTH; process can be called a ‘virtual machine’ trap-and-emulate: write-to-screen programmed like a complete computer… but weird interface for I/O, memory — system calls 17 trap-and-emulate privileged instructions trigger a protection fault we assume operating system crashes what if OS pretends the privileged instruction works? 18 struct Process { AddressSpace address_space; SavedRegisters registers; }; void handle_protection_fault(Process *process) { // normal: would crash if (was_write_to_screen()) { do_write_system_call(process); 19 can we make that closer to the real machine? process − >registers − >pc += process − >registers − >pc +=

  8. was_write_to_screen() ... AddressSpace address_space; SavedRegisters registers; }; void handle_protection_fault(Process *process) { // normal: would crash if (was_write_to_screen()) { do_write_system_call(process); WRITE_TO_SCREEN_LENGTH; } else { } how does OS know what caused protection fault? } 21 system virtual machines turn faults into system calls emulate machine that looks more like ‘real’ machine what software like VirtualBox, VMWare, etc. does more complicated than this: on x86, some privileged instructions don’t cause faults dealing with address spaces is a lot of extra work struct Process { trap-and-emulate: write-to-screen 21 } option 1: hardware “type” register option 2: check instruction: if (opcode == WRITE_TO_SCREEN_OPCODE) ... 20 trap-and-emulate: write-to-screen struct Process { AddressSpace address_space; SavedRegisters registers; }; void handle_protection_fault(Process *process) { // normal: would crash if (was_write_to_screen()) { do_write_system_call(process); WRITE_TO_SCREEN_LENGTH; } else { ... } 22 int opcode = (*process − >registers − >pc & 0xF0) >> 4; process − >registers − >pc += process − >registers − >pc +=

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend