Transcript General
: Operating System ecs150 Fall 2006 #1: OS Architecture, Kernel, & Process Dr. S. Felix Wu Computer Science Department University of California, Davis http://www.cs.ucdavis.edu/~wu/ [email protected] 09/29/2006 ecs150 Fall 2006 1 VM/MVS, DOS, Win95/98/ME/2000/XP, Freebsd/Linux, MacOS-10, Mach, Minix, PalmOS, uCOS, TinyOS, … 09/29/2006 ecs150 Fall 2006 2 ….where applications meet Hardware!!! Applications…….. OS Hardware: CPU/Memory/HD/DVD/Wireless… 09/29/2006 ecs150 Fall 2006 3 “Information Router” One NIC a process’s user-level memory One file another file – OS kernel layer – Hardware layer 09/29/2006 ecs150 Fall 2006 4 ….where applications meet Hardware!!! Applications…….. OS Hardware: CPU/Memory/HD/DVD/Wireless… 09/29/2006 ecs150 Fall 2006 5 This quarter…. The internals of OS The basic design principles of OS The skills to modify or implement an OS. 09/29/2006 ecs150 Fall 2006 6 Operating System An interesting balance between: – Theories and Practical Experiences/Experiments – Architectural Concept and Detailed Design – Formal Verification and Empirical Validation 09/29/2006 ecs150 Fall 2006 7 About the Instructor S. Felix Wu – [email protected] – [email protected] – [email protected] Office: 3057 Engineering II Phone: 530-754-7070 Office Hours: – 1-2 p.m. on Tuesday and Friday – by appointment 09/29/2006 ecs150 Fall 2006 8 Why 3 email addresses? – [email protected] – [email protected] – [email protected] 09/29/2006 ecs150 Fall 2006 9 Why 3 email addresses? – [email protected] – [email protected] – My main email contact for everything all the time. – [email protected] 09/29/2006 ecs150 Fall 2006 10 Why 3 email addresses? – [email protected] – [email protected] – My main email contact for everything all the time. – [email protected] – Read only once in the past three months… 09/29/2006 ecs150 Fall 2006 11 Why 3 email addresses? – [email protected] read/response during the quarters, especially before the homework deadlines. – [email protected] – My main email contact for everything all the time. – [email protected] – Read only once in the past three months… 09/29/2006 ecs150 Fall 2006 12 Anti-Spam [email protected] subject: [0xFE527804D204BA67]… 0xFE527804D204BA67 is the cyber social link between the instructor and the students in ecs150, fall 2006. 09/29/2006 ecs150 Fall 2006 13 Anti-Spam [email protected] subject: [0xFE527804D204BA67]… 0xFE527804D204BA67 is the cyber social link between the instructor and the students in ecs150, fall 2006. Let’s see by the end of quarter whether this little secret will be known to the spammers… 09/29/2006 ecs150 Fall 2006 14 About the TA TA Daniel Wu ([email protected]) – Office Hours: TBA – Discussion: Monday 09/29/2006 ecs150 Fall 2006 15 about Web site http://www.cs.ucdavis.edu/~wu/ecs150/ all lectures, notes, announcements, homework assignments, tools, papers will be there. 09/29/2006 ecs150 Fall 2006 16 Textbook Reading this book itself may be a major challenge. But, you really learn when you go through this process! "The Design and Implementation of the FreeBSD Operating Systems" by Marshall Kirk McKusick and George V. Neville-Neil Addison Wesley Professional, 2005, ISBN 0-201-70245-2. http://www.freebsd.org/ 09/29/2006 ecs150 Fall 2006 17 Prerequisites Programming Languages: C and assembly (ecs50) Date Structure (ecs110) and basic Computer Architecture (ecs154a/eec70). ecs40 Please talk to me if you have any concern. 09/29/2006 ecs150 Fall 2006 18 Syllabus Process/Kernel Memory Management midterm IO & File Systems Others final 09/29/2006 ecs150 Fall 2006 (09) (06) (10) (03) 19 OS Principles/Concepts What is “kernel”? What is the difference between a process and a thread? What is the difference between user-level and kernel-level threads? What is the difference between a system call and a library function call? What are SJF, RR, Lottery, LRU, TLB, Second Chance? How to do Mutual Exclusion? What is the difference between deadlock prevention and avoidance? What are the differences among hardware interrupt, hardware trap, and software trap? 09/29/2006 ecs150 Fall 2006 20 OS Let’s examine OS concepts in a realistic context: “FreeBSD” Then, we can re-think those concepts…. – And, maybe you will realize later that some of the concepts are either “misleading” or “irrelevant” in certain context. 09/29/2006 ecs150 Fall 2006 21 Principles vs. Practice Ideas and Theories first, then we will go over some FreeBSD code segments. You will need to learn FreeBSD internals for programming assignments!! The first few discussion sessions will be dedicated to FreeBSD internals. – Most of the discussion sessions are very important and they will appear in the exams and homeworks. 09/29/2006 ecs150 Fall 2006 22 Course Requirements 48%: Programming Assignments – teamwork: 1~2 students (no more than 2!) – 4 Assignments (10%, 18%, 12%, 8%) – HW#1 is out (check the website). 16%: In-class open-book midterm 32%: open-book final 04%: Participation of Lectures and Discussion sessions. – Deducted if missed more than TWO sessions. 09/29/2006 ecs150 Fall 2006 23 Grading I will give +/- grades. possible grading : – – – – 09/29/2006 A: >= 92 B: >= 82 C: >= 72 D: >= 62 A-: >= 89 B-: >= 79 C-: >= 69 D-: >= 59 ecs150 Fall 2006 B+: >= 85 C+: >= 75 D+: >= 65 24 FreeBSD You need to have access to a FreeBSD environment – I386, QEMU, VMware, VirtualPC 09/29/2006 ecs150 Fall 2006 25 virtualization Unmodified Applications Unmodified OS (XP, Linux, Solaris, or, FreeBSD) VirtualPC Standard Full Virtualization e.g., WindowXP Hardware 09/29/2006 ecs150 Fall 2006 26 09/29/2006 ecs150 Fall 2006 27 FreeBSD Unmodified OS (XP, Linux, Solaris, or, FreeBSD) API Unmodified Applications Virtual PC or VMware Hardware 09/29/2006 ecs150 Fall 2006 28 Programmable Virtualization Unmodified Applications “Programmable” Full Virtualization DLVM API Unmodified OS (XP, Linux, Solaris, or, FreeBSD) DLVM Hardware 09/29/2006 ecs150 Fall 2006 29 The Structure of OS The Kernel Processes and Threads The System Call Interface 09/29/2006 ecs150 Fall 2006 30 What is “kernel”? 09/29/2006 ecs150 Fall 2006 31 Kernel The basic OS services Which services? What is it doing? Let’s check a couple examples 09/29/2006 ecs150 Fall 2006 32 ….what are the basic services? OS 09/29/2006 ecs150 Fall 2006 33 FreeBSD Kernel: Services Timer/clock, descriptor, process Memory Management: paging/swapping I/O control and terminal File System Inter-process communication Networking 09/29/2006 ecs150 Fall 2006 34 09/29/2006 ecs150 Fall 2006 35 Kernel of SVR2 of AT&T Unix user User programs trap Libraries System Call Interface File subsys kernel Buffer cache Process Control Subsys. Inter-Process Communication Scheduler Character block device drivers Memory Management Hardware Control hardware 09/29/2006 ecs150 Fall 2006 36 Kernel & Processes The concept of “application process” 09/29/2006 ecs150 Fall 2006 37 Kernel and User Space Process FOO Memory space for this process System call (or trap into the kernel) program conceptually Process FOO in the Kernel System Call Kernel Resources (disk or IO devices) 09/29/2006 ecs150 Fall 2006 38 Processes > ps PID TTY TIME CMD 2910 pts/4 0:00 tcsh > ps -ef UID PID PPID C root 0 0 0 root 1 0 0 root 2 0 0 root 3 0 0 root 223 1 0 root 179 1 0 root 273 1 0 root 56 1 0 root 58 1 0 root 106 1 0 root 197 1 0 root 108 1 0 root 168 1 0 root 118 1 0 root 159 1 0 09/29/2006 STIME TTY Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? Sep 25 ? TIME CMD 0:01 sched 0:00 /etc/init 0:00 pageout 0:01 fsflush 0:00 /usr/lib/utmpd 0:00 /usr/sbin/cron 0:00 /usr/lib/saf/sac -t 300 0:00 /usr/lib/devfsadm/devfseventd 0:00 /usr/lib/devfsadm/devfsadmd 0:00 /usr/sbin/rpcbind 0:01 /usr/sbin/nscd 0:00 /usr/sbin/keyserv 0:00 /usr/sbin/syslogd 0:00 /usr/lib/netsvc/yp/ypbind 0:00 /usr/lib/autofs/automountd ecs150 Fall 2006 39 09/29/2006 ecs150 Fall 2006 40 09/29/2006 ecs150 Fall 2006 41 Memory Structure High Arguments Return address String Growth Prev. frame pointer Local variables Stack Pointer Low 09/29/2006 Stack Growth ecs150 Fall 2006 42 Memory Structure High foo Arguments bar Return address String Growth Prev. frame pointer Local variables Stack Pointer Low 09/29/2006 Stack Growth ecs150 Fall 2006 bar( ) {……} foo( ) { …… call bar( ); …… } 43 Per-process Kernel Stack User-stack Procedure Call on the same User Stack Disk Heap Initialized data Initialized data text a.out header text Memory a.out magic number 09/29/2006 ecs150 Fall 2006 44 Per-process Kernel Stack User-stack System Call on a different stack Disk Heap Initialized data Initialized data text a.out header text Memory a.out magic number 09/29/2006 ecs150 Fall 2006 45 System Calls Not a “normal” procedure call It is a software trap “into” the kernel – Hardware interrupt – Hardware trap – Software trap 09/29/2006 ecs150 Fall 2006 46 System Entry Hardware interrupt – Asynchronous, might not relate to the context of the executing process Hardware trap – Related to the current executing process, e.g., divided by zero Software-initiated trap – Instructions, int 09/29/2006 ecs150 Fall 2006 47 System Entry Vector fork() Trap : : 09/29/2006 ecs150 Fall 2006 48 System Entry Vector fork() Trap Reserved for loadable system calls : : XYZ() 09/29/2006 ecs150 Fall 2006 49 kldload fork() Trap XYZ() : : 09/29/2006 ecs150 Fall 2006 50 Announcement This Friday discussion Next Monday two regular lectures Office hour on Friday cancelled… Felix is flying tomorrow to Pittsburgh to attend a NSF meeting 09/29/2006 ecs150 Fall 2006 51 OS Architecture 09/29/2006 ecs150 Fall 2006 52 Process Process – a program in execution A process includes: – program counter – stack – data section 09/29/2006 ecs150 Fall 2006 53 Context Switching 09/29/2006 ecs150 Fall 2006 54 Scheduling & Context Switching Running Blocked 09/29/2006 Running Ready Blocked Running Ready Blocked ecs150 Fall 2006 Running Ready Blocked Ready 55 States of a Process Running, Blocked, and Ready Running Waiting 09/29/2006 Ready ecs150 Fall 2006 56 09/29/2006 ecs150 Fall 2006 57 1 RR 0 0 : : . 1 0 1 09/29/2006 256 different priorities 64 scheduling classes 0~63 64~127 128~159 160~223 224~255 ecs150 Fall 2006 bottom-half kernel (interrupt) top-half kernel real-time user timeshare idle 58 Kernel Processes idle, swapper, vmdaemon, pagedaemon, pagezero, bufdaemon, syncer, ktrace, vnlru, random, g_event, g_up, g_down /usr/src/sys/kern/kern_idle.c /usr/src/sys/kern/init_main.c /usr/src/sys/vm/vm_zeroidle.c /usr/src/sys/kern_ktrace.c /usr/src/sys/dev/random/randomsoft_dev.c 09/29/2006 ecs150 Fall 2006 59 09/29/2006 ecs150 Fall 2006 60 1 RR 0 0 : : . 1 0 1 09/29/2006 256 different priorities 64 scheduling classes 0~63 64~127 128~159 160~223 224~255 ecs150 Fall 2006 bottom-half kernel (interrupt) top-half kernel real-time user timeshare idle 61 Running Waiting 09/29/2006 Ready ecs150 Fall 2006 62 4.4BSD Process Structure (/usr/src/sys/sys/proc.h) Process Structure process group session process credential user credential VM space region list file descriptors file entries resource limits statistics signal actions machine-dependent process information 09/29/2006 process control block process kernel stack ecs150 Fall 2006 } user structure 63 FreeBSD User Structure /* * Per process structure containing data that isn’t needed in core when the * process isn’t running (esp. when swapped out). This structure may or may not * be at the same kernel address in all processes. */ struct user { struct pcb u_pcb; struct sigacts u_sigacts; /* p_sigacts points here (use it!) */ struct pstats u_stats; /* p_stats points here (use it!) */ /* Remaining fields only for core dump and/or ptrace— not valid at other times! */ struct kinfo_proc u_kproc; /* proc + eproc */ struce md_coredump u_md; /* machine dependent glop */ } 09/29/2006 ecs150 Fall 2006 64 5.x Kernel 09/29/2006 ecs150 Fall 2006 65 1 RR 0 KSE: Kernel Scheduling Entity kernel-level thread 0 : : . 1 0 1 09/29/2006 256 different priorities 64 scheduling classes 0~63 64~127 128~159 160~223 224~255 ecs150 Fall 2006 bottom-half kernel (interrupt) top-half kernel real-time user timeshare idle 66 09/29/2006 ecs150 Fall 2006 67 What is a thread? 09/29/2006 ecs150 Fall 2006 68 Process and Thread (abstraction and abstraction) An execution instance of a program. Threads and resources – a thread is a control entity of the logical flow in the program. – A sequential program needs only one single thread because it only need to be controlled by one entity. – Can you distinguish a process and a thread? User mode versus (trap into the) Kernel mode. 09/29/2006 ecs150 Fall 2006 69 A Program and Threads J=0; (shared) variables If (j==0) J=100 09/29/2006 ecs150 Fall 2006 70 Threads Heavy-weight Process versus Light-weight Thread User-level versus Kernel-level 09/29/2006 ecs150 Fall 2006 71 a Process and a Thread A tradition process contains one thread (i.e, one flow of control) and the resources (user or kernel). Resources No obvious concurrency within a process 09/29/2006 ecs150 Fall 2006 72 Process and Threads A Process can contain more than one threads sharing the resources (user or kernel). Resources 09/29/2006 ecs150 Fall 2006 73 Threads User-level Kernel-level 09/29/2006 ecs150 Fall 2006 74 Threads Blocking/Synchronous I/O – One thread blocks all others??? – “Block one block all” 09/29/2006 ecs150 Fall 2006 75 CPU chip register file ALU system bus memory bus main memory I/O bridge bus interface I/O bus USB controller mouse keyboard 09/29/2006 graphics adapter disk controller Expansion slots for other devices such as network adapters. monitor ecs150 Fall 2006 disk 76 CPU chip register file CPU initiates a disk read by writing a command, logical block number, and destination memory address to a port (address) associated with disk controller. ALU main memory bus interface I/O bus USB controller mouse keyboard 09/29/2006 graphics adapter disk controller monitor ecs150 Fall 2006 disk 77 CPU chip register file Disk controller reads the sector and performs a direct memory access (DMA) transfer into main memory. ALU main memory bus interface I/O bus USB controller mouse keyboard 09/29/2006 graphics adapter disk controller monitor ecs150 Fall 2006 disk 78 CPU chip When the DMA transfer completes, the disk controller notifies the CPU with an interrupt (i.e., asserts a special “interrupt” pin on the CPU) register file ALU main memory bus interface I/O bus USB controller mouse keyboard 09/29/2006 graphics adapter disk controller monitor ecs150 Fall 2006 disk 79 Asynchronous I/O How to deal with multiple I/O operations concurrently? For example: wait for a keyboard input, a mouse click and input from a network connection. Select system call int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Poll system call (same idea, different implementation) int poll(struct pollfd *ufds, unsigned int nfds, int timeout); struct pollfd { int fd; short events; short revents; }; /* file descriptor */ /* requested events */ /* returned events */ For more info see http://www.kegel.com/c10k.html 09/29/2006 ecs150 Fall 2006 80 /usr/src/sys/kern/vfs_aio.c Solaris, Linux 2.6, FreeBSD pp230~231 POSIX P1003.4 Asynchronous I/O interface functions: – aio_cancel:cancel asynchronous read and/or write requests – aio_error:retrieve Asynchronous I/O error status – aio_fsync:asynchronously force I/O completion, and sets errno to ENOSYS – aio_read:begin asynchronous read – aio_return:retrieve return status of Asynchronous I/O operation – aio_suspend:suspend until Asynchronous I/O Completes – aio_write:begin asynchronous write – lio_listio:issue list of I/O requests 09/29/2006 ecs150 Fall 2006 81 Security Problem!! 09/29/2006 ecs150 Fall 2006 82 User-Level Threads Now, you should get the basic idea about how to avoid “block one block all”…. 09/29/2006 ecs150 Fall 2006 83 Threads User-level – Kernel is unaware of multiple threading within the same process. (Conceptually, the kernel pretends one “kernel” thread per process.) Kernel-level – Kernel is fully aware of multiple kernel threads within the same process, and therefore, it will provide “related kernel services”. 09/29/2006 ecs150 Fall 2006 84 User and Kernel Threads One thread per process or multiple thread per process UTS UserLevelTs KTS 09/29/2006 Which approach is better??? ecs150 Fall 2006 KernelTs KTS 85 User-Level Threads A small OS in the user-space to manage the threads. The kernel is totally unaware how many threads the process currently has. 09/29/2006 ecs150 Fall 2006 86 09/29/2006 ecs150 Fall 2006 87 Why Multiple Threads?? 09/29/2006 ecs150 Fall 2006 88 Responsiveness Resource Sharing Economy Utilization of MP Architectures 09/29/2006 ecs150 Fall 2006 89 fork() Process A Global Variables fork() Process B Code Global Variables Stack Code Stack 09/29/2006 ecs150 Fall 2006 90 Parent fork() execve() Global Variables Child Code Stack 09/29/2006 Child Global Variables Global Variables Code Code Stack Stack ecs150 Fall 2006 91 pthread_create() Process A Thread 1 Global Variables pthread_create() Code Process A Thread 2 Stack Stack 09/29/2006 ecs150 Fall 2006 92 Creation Time Difference Because threads are by definition lightweight, they can be created more quickly that “heavy” processes: – Sun Ultra5, 320 Meg Ram, 1 CPU 94 forks()/second 1,737 threads/second (18x faster) – Sun Sparc Ultra 1, 256 Meg Ram , 1 CPU 67 forks()/second 1,359 threads/second (20x faster) – Sun Enterprise 420R, 5 Gig Ram, 4 CPUs 146 forks()/second 35,640 threads/second (244x faster) – Linux 2.4 Kernel, .5 Gig Ram, 2 CPUs 1,811 forks()/second 227,611 threads/second (125x faster) 09/29/2006 ecs150 Fall 2006 93 09/29/2006 ecs150 Fall 2006 94 User Threads Thread management done by user-level threads library Examples - POSIX Pthreads - Mach C-threads - Solaris threads 09/29/2006 ecs150 Fall 2006 95 Kernel Threads Supported by the Kernel Examples - Windows 95/98/NT/2000 - Solaris - Linux 09/29/2006 ecs150 Fall 2006 96 Solaris 2 Threads 09/29/2006 ecs150 Fall 2006 97 Linux Threads Linux refers to them as tasks rather than threads. Thread creation is done through clone() system call. clone() allows a child task to share the address space of the parent task (process) 09/29/2006 ecs150 Fall 2006 98 Open new connection Application (Web Server) Thread class: run Programming Language (Java) Lib call: pthread_create Programming Library (POSIX thread) System call: Clone 09/29/2006 Operating System (Linux Native Thread) ecs150 Fall 2006 99 KT vs. UT pros and cons? BTW, how about FreeBSD? 09/29/2006 Threads ecs150 Fall 2006 100 09/29/2006 ecs150 Fall 2006 101 UTS + KTS Two independent schedulers: User Space Process Process Scheduler Process Scheduler Scheduler OS Kernel processor 09/29/2006 processor ecs150 Fall 2006 processor 102 KTS One single scheduler: User Space Process Process Process Scheduler OS Kernel processor 09/29/2006 processor ecs150 Fall 2006 processor 103 KT vs. UT UTS Kernel Interface KTS 09/29/2006 ecs150 Fall 2006 104 Solaris 2 Threads mapping but NOT coordinating 09/29/2006 ecs150 Fall 2006 105 Questions to ask Why do we need “coordination”? – kernel-support user-level threads What do we need in this “K/U coordination”? – extended system call API Is this only good for SMP? – How about single processor? – How about NPU? (e.g., IXP-2400) 09/29/2006 ecs150 Fall 2006 106 UTS Library Notify I/O events Notify new decision Kernel KTS 09/29/2006 ecs150 Fall 2006 107 Is this a problem? User Space Kernel Space syscall I/O request interrupt Hardware I don’t know how many UT’s you have up there? I can guess but I am not sure that is exactly what you want! 09/29/2006 ecs150 Fall 2006 108 Scheduler Activations CPU time wasted User Space Kernel Space syscall I/O request interrupt I don’t know how many UT’s you have up there? Hardware CPU used User Space Kernel Space upcall upcall Hardware 09/29/2006 ecs150 Fall 2006 109 Scheduler Activations First proposed by [Anderson et al. 91] Idea: cooperation between schedulers should take place in both directions User scheduler uses system calls Kernel scheduler should use upcalls! Upcalls – Notify the user-level of kernel scheduling events Activations – A new structure to support upcalls (~kernel thread) – As many running activations as processors – Kernel controls activation creation and destruction 09/29/2006 ecs150 Fall 2006 110 One Model (FreeBSD 5.x) UTS - threads Library SA SA Notify I/O events Notify new decision SA SA KTS – virtual CPU’s 09/29/2006 ecs150 Fall 2006 Kernel 111 09/29/2006 ecs150 Fall 2006 112 I/O happens for Thread User Program (2) User-Level Runtime System (3) (1) (A) (4) (B) Add Processor Add Processor Operating System Kernel Processors 09/29/2006 ecs150 Fall 2006 113 A’s Thread has blocked on an I/O request User Program (2) User-Level Runtime System (3) (1) (4) B (A) (B) Operating System Kernel (C) A’s thread has blocked Processors 09/29/2006 ecs150 Fall 2006 114 A’s Thread I/O completed User Program (2) (3) User-Level Runtime System (1) (1) (A) (B) Operating System Kernel (C) (4) (D) A’s thread and B’s Thread can continue Processors “the upcall stack problem” 09/29/2006 ecs150 Fall 2006 115 A’s Thread resumes on Scheduler Activation D User Program (2) (3) (1) User-Level Runtime System (C) Operating System Kernel (1) (4) (D) A’s thread and B’s Thread can continue Processors 09/29/2006 ecs150 Fall 2006 116 09/29/2006 ecs150 Fall 2006 117 One Model (FreeBSD 5.x) UTS - threads Library SA SA Notify I/O events Notify new decision SA SA KTS – virtual CPU’s 09/29/2006 ecs150 Fall 2006 Kernel 118 FreeBSD 5.x Kernel Scheduling Entity (KSE) – a virtual CPU – When “anything” changes regarding the service of this KSE to the process, this KSE is “unassigned” as the kernel doesn’t know what other threads might be there!! – Upcall to the UTS (via KSE mailbox). – UTS uses both KSE mailbox and Thread mailbox to handle/decide. 09/29/2006 ecs150 Fall 2006 119 09/29/2006 ecs150 Fall 2006 120 09/29/2006 ecs150 Fall 2006 121 #include <sys/types.h> #include <sys/kse.h> int kse_create(struct kse_mailbox *mbx, int newsgroup); int kse_exit(void); int kse_release(struct timespec *timeout); int kse_wakeup(struct kse_mailbox *mbx); int kse_thr_interrupt(struct kse_thr_mailbox *tmbx); 09/29/2006 ecs150 Fall 2006 122 struct kse_mailbox { int km_version; struct kse_thr_mailbox *km_curthread; struct kse_thr_mailbox *km_completed; sigset_t km_sigscaught; unsigned int km_flags; kse_func_t *km_func; /* UTS function */ stack_t km_stack; /* UTS context */ void *km_udata; /* For use by the UTS */ struct timespec km_timeofday; /* Time of day */ int km_quantum; int km_spare[8]; }; 09/29/2006 ecs150 Fall 2006 123 struct kse_thr_mailbox { ucontext_t unsigned int struct kse_thr_mailbox void unsigned int unsigned int int }; 09/29/2006 tm_context; tm_flags; *tm_next; *tm_udata; tm_uticks; tm_sticks; tm_spare[8]; ecs150 Fall 2006 /* /* /* /* User and machine context */ Thread flags */ Next thread in list */ For use by the UTS */ 124 upcalls ksec_new ksec_preempt ksec_block ksec_unblock 09/29/2006 ecs150 Fall 2006 125 UTS Library ksec_new ksec_preempt ksec_block ksec_unblock kse_create kse_exit kse_release kse_wakeup kse_thr_interrupt Kernel KTS 09/29/2006 ecs150 Fall 2006 126 KSE Internal KSE KSEG KSEC 09/29/2006 ecs150 Fall 2006 127 09/29/2006 ecs150 Fall 2006 128 09/29/2006 ecs150 Fall 2006 129 09/29/2006 ecs150 Fall 2006 130 09/29/2006 ecs150 Fall 2006 131 Linux VPI (Virtual Processor Interface) Experimental/Research Prototype – Benson/Butner/Padden/Fedosov – Scheduler activation in Linux Kernel 2.4.18 09/29/2006 ecs150 Fall 2006 132 09/29/2006 ecs150 Fall 2006 133 One Model (FreeBSD 5.x) UTS - threads Library SA SA Notify I/O events Notify new decision SA SA KTS – virtual CPU’s 09/29/2006 ecs150 Fall 2006 Kernel 134 Kernel Processes (table 3.1 page 50) idle, swapper, vmdaemon, pagedaemon, pagezero, bufdaemon, syncer, ktrace, vnlru, random, g_event, g_up, g_down “Kernel processes execute code that is complied into the kernel’s load image and operate with the kernel’s privileged execution code.” 09/29/2006 ecs150 Fall 2006 135 FreeBSD Kernel 09/29/2006 ecs150 Fall 2006 136 FreeBSD Kernel 09/29/2006 ecs150 Fall 2006 137 Kernel and User Space Process FOO Memory space for this process System call (or trap into the kernel) program conceptually Process FOO in the Kernel System Call Kernel Resources (disk or IO devices) 09/29/2006 ecs150 Fall 2006 138 What is “micro-kernel”? 09/29/2006 ecs150 Fall 2006 139 ….what are the basic services? OS 09/29/2006 ecs150 Fall 2006 140 An Alternative: Micro-Kernel Message Passing versus Optimized Procedure Calls 09/29/2006 ecs150 Fall 2006 141 Midterm November 1st of 2006 in class. 09/29/2006 ecs150 Fall 2006 142 09/29/2006 ecs150 Fall 2006 143 TA Office Hours Wed 12-1 Thu 4-5:30 This week: Wed 12-1 (3104), 3:30-4:30 (2231 Kemper) Thu 3-5 (3104) 09/29/2006 ecs150 Fall 2006 144 System calls (HW#1) int 80h *.s (not in /usr/src/sys/kern/*) *.c (not in /usr/src/sys/kern/*) sysent/sysvec function pointer lkmnosys() 09/29/2006 ecs150 Fall 2006 145 /usr/src/sys/i386/i386/*.* 09/29/2006 ecs150 Fall 2006 146 Micro versus Monolithic What is the real difference between these two models?? First Brainstorming!! 09/29/2006 ecs150 Fall 2006 147 Micro versus Monolithic Is this really relevant? Advantages of Micro Kernels – Modules (Architectural Cleanness), Adaptive, Small/Quick-to-Boot,… We did learn some lessons – We have to consider the “users” & “applications”, and make a new engineering design decision. 09/29/2006 ecs150 Fall 2006 148 FreeBSD Kernel: Size 689794 machine independent LOC 108346 machine dependent LOC 846525 device driver LOC Comparing: – – – – Windows 3.1 ~ 6M LOC Windows 2000 ~ 30-50M LOC Windows XP ~ 45M LOC Netscape ~ 7M LOC 09/29/2006 ecs150 Fall 2006 149 OS Design Architectural Design – how to organize the user and kernel resources? Module Control Design – how to design a control mechanism to protect the OS resource integrity? Interface Design – how to let user programs access the resources easier? (e.g., system call interface, multi-threaded interface). 09/29/2006 ecs150 Fall 2006 150 What is “Process”? What is “System Call”? What is “Kernel”? 09/29/2006 ecs150 Fall 2006 151