Threads, SMP, and Microkernels 1 Processes vs. Threads • Traditional process characteristics: – Resource ownership • Has a virtual address space to hold the process image • Is allocated resources, as needed: I/O devices, files, etc. – Scheduling/execution • Follows an execution path through one or more programs • Has an execution state and a priority • Is the entity that is scheduled and dispatched by the OS • Modern OSs treat these characteristics independently – Unit of resource of ownership is referred to as a process or task – Unit of dispatching is referred to as a thread or lightweight process CS-550: Threads, SMP, and Microkernels 2 Multithreading • The OS supports multiple threads of execution within a single process • A process in a multithreaded environment has: – A virtual address space that holds the process image – Protected access to processors, other processes, files, and I/O resources • Within a process, there may be one or more threads and each thread has: – A thread execution state (Running, Ready, etc.) – A saved thread context when not running – An execution stack – Per-thread static storage for local variables – Access to the memory and resources of its process, shared with other threads • Examples: W2K, Solaris, Linux, Mach, OS/2 CS-550: Threads, SMP, and Microkernels 3 Multithreading (Cont.) • Benefits of threads: – Takes less time to create a new thread in an existing process than a new process – Takes less time to terminate a thread than a process – Takes less time to switch between two threads within the same process – Since threads within the same process share memory and files, they can communicate with each other without invoking the kernel • Actions that affect all threads of a process – Suspending a process involves suspending all threads of the process (a suspended process is swapped out of main memory) – Termination of a process, terminates all threads within the process CS-550: Threads, SMP, and Microkernels 6 Examples of use of Threads in a Single-User Multiprocessing System • Foreground and background work – Example: spreadsheet program • One thread displays menus and reads user input • Other thread executes user commands and updates spreadsheet • Asynchronous processing – Example: word processor that saves to disk once every minute • A second thread does periodic backups • Speed execution – Example: • One thread computes one batch of data • Other thread reads next batch from a device • Modular program structure – Example: programs that use a variety of sources and destinations CS-550: Threads, SMP, and Microkernels 7 Thread States and Operations • Thread states: – Running, Ready, and Blocked • Operations associated with a change in thread state – Spawn • Spawn a thread for a new process • A thread in an existing process spawns another thread – Block • Thread blocks waiting on an event – Unblock • Event occurred, thread is unblocked – Finish • Thread completes, deallocate register context and stacks CS-550: Threads, SMP, and Microkernels 8 Remote Procedure Call Using Threads CS-550: Threads, SMP, and Microkernels 9 Remote Procedure Call Using Threads (Cont.) CS-550: Threads, SMP, and Microkernels 10 User-Level Threads (ULT) • All thread management is done by the application, the kernel is not aware of the existence of threads • An application is programmed by using a threads library, which contains code for: – – – – Creating and destroying threads Passing messages and data between the threads Scheduling thread execution Saving and restoring thread contexts • Operation: – Application starts as a single thread running within a process managed by kernel – Application spawns a new thread using Spawn in threads library – Threads library creates new thread and passes control to one of the threads in Ready state using some scheduling algorithm CS-550: Threads, SMP, and Microkernels 11 User-Level Threads (Cont.) • Advantages of using User Level Threads instead of Kernel Level Threads – Thread switching does not require kernel mode privileges – Scheduling can be application specific – User Level Threads can run on any OS • Disadvantages of User Level Threads: – Many system calls are blocking: when a ULT executes a system call, all threads within the process are blocked – A multithreaded application cannot take advantage of multiprocessing: kernel assigns one processor to one process (I.e, all threads within that process) CS-550: Threads, SMP, and Microkernels 12 Kernel-Level Threads (KLT) • In a pure Kernel-Level Thread implementation all thread management is done by the kernel • All the threads within an application are in a single process • Kernel maintains context information for the process and the threads • Scheduling is done on a thread basis • Advantages: – Kernel can simultaneously schedule multiple threads from the same process on multiple processors – If one thread is blocked, the kernel can schedule another thread of the same process – The kernel routines themselves can be multithreaded • Disadvantages: – Transfer of control between threads within same process requires switch to the kernel • Examples: W2K, Linux, and OS/2 CS-550: Threads, SMP, and Microkernels 13 Combined Approaches • Multiple ULTs from a single application are mapped onto some (smaller or equal) number of KLTs • Thread creation done in the user space • Most of scheduling and synchronization of threads within an application are done in the user space • Advantages: – Multiple threads within the same application can run in parallel on multiple processors – A blocking system call does not block the entire process • Example: Solaris CS-550: Threads, SMP, and Microkernels 14 Relationship Between Threads and Processes Threads:Process 1:1 M:1 1:M M:M Description Each thread of execution is a unique process with its own address space and resources. Example Systems Traditional UNIX implementations A process defines an address space and dynamic resource ownership. Multiple threads may be created and executed within that process. Windows NT, Solaris, OS/2, OS/390, MACH A thread may migrate from one process environment to another. This allows a thread to be easily moved among distinct systems. Ra (Clouds), Emerald Combines attributes of M:1 and 1:M cases CS-550: Threads, SMP, and Microkernels TRIX 16 Symmetric MultiProcessing (SMP) • Categories of Computer Systems – Single Instruction Single Data (SISD) • Single processor executes a single instruction stream to operate on data stored in a single memory – Single Instruction Multiple Data (SIMD) • Each instruction is executed on a different set of data by the different processors – Multiple Instruction Single Data (MISD) • A sequence of data is transmitted to a set of processors, each of which executes a different instruction sequence. Never implemented – Multiple Instruction Multiple Data (MIMD) • A set of processors simultaneously execute different instruction sequences on different data sets CS-550: Threads, SMP, and Microkernels 17 Symmetric MultiProcessing (Cont.) • OS implementation – Kernel can execute on any processor – Typically each processor does self-scheduling from the pool of available processes or threads – Kernel can be constructed as multiple processes or multiple threads that can execute in parallel • OS must prevent – Two processors choosing the same process – A process getting lost from the queue CS-550: Threads, SMP, and Microkernels 19 Multiprocessor Operating System Design Issues • Simultaneous concurrent processes or threads – Several processors can execute the same kernel code simultaneously: kernel routines must be reentrant – Management of kernel tables must avoid deadlock • Scheduling – With scheduling done by each processor, kernel-level multithreading must avoid conflicts in scheduling multiple threads from the same process simultaneously • Synchronization – Mutual exclusion and event ordering must by provided for multiple active processes accessing shared memory and I/O • Memory Management – Paging on different processors must be coordinated when several processors share a page or segment and decide on page replacement • Reliability and Fault Tolerance – Graceful degradation in case of processor failure CS-550: Threads, SMP, and Microkernels 21 Microkernels • Microkernel is a small operating system core containing only essential operating systems functions • All other OS services are implemented as server processes, execute in user mode, and communicate through messages (device drivers, file systems, virtual memory manager, windowing system, and security services) • The microkernel architecture replaces the traditional vertical layered architecture and leads to a client/server architecture within a single computer – Example: • An application opens a file by sending a message to the file system server, creates a process or thread by sending a message to the process server • Each of the servers can send messages to other servers (through the kernel) and can invoke the primitive operations in the kernel CS-550: Threads, SMP, and Microkernels 22 Benefits of a Microkernel Organization • Uniform interface on requests made by a process – Both kernel-level and user-level services are provided by means of message passing • Extensibility – Allows the addition of new services and provision of multiple services in the same functional area • Flexibility – New features added, existing features can be subtracted • Portability – Most of the processor-specific code is in the microkernel • Reliability – A small microkernel can be rigorously tested • Distributed system support, including clusters controlled by a distributed operating system – The client/server architecture within a single computer maps easily into a distributed architecture CS-550: Threads, SMP, and Microkernels 23 Windows 2000 (W2K) Thread and SMP Management • Process design driven by the need to provide support for a variety of operating system environments • Native process structures and services are relatively simple and general purpose, allowing each operating system subsystem to emulate a particular process structure and functionality • Process characteristics – Processes implemented as objects – An executable process may contain one or more threads – Both process and thread objects have built-in synchronization capabilities CS-550: Threads, SMP, and Microkernels 24 W2K Process Object CS-550: Threads, SMP, and Microkernels 26 W2K Thread Object CS-550: Threads, SMP, and Microkernels 27 W2K Thread States • Ready: – May be scheduled for execution • Standby: – Has been selected to run on a particular processor and waits until processor is available • Running – Has been allocated a processor and is executing • Waiting – Blocked on an event or waits for synchronization purposes • Transition – Ready to run but resources not available • Terminated – Terminated by itself, by another thread, or when the parent process terminates CS-550: Threads, SMP, and Microkernels 28 W2K SMP Support • The threads of any process, including those of the executive, can run on any processor • Microkernel assigns a ready thread to the next available processor, except for – Soft affinity: dispatcher tries to assign a ready thread to the same processor it last ran on – Hard affinity: application can restrict its thread execution to certain processors • Benefits – No processor is idle or is executing a lower-priority thread when a higher priority thread is ready – Multiple threads from the same process can be executing simultaneously on multiple processors CS-550: Threads, SMP, and Microkernels 30 Solaris Thread Management • Four separate thread-related concepts: – Process: • Normal UNIX process, includes the user’s address space, stack, and process control block – User-Level Threads (ULTs) • Implemented through a threads library in the address space of a process • Invisible to the OS – Lightweight processes (LWPs) • • • • A mapping between ULTs and kernel threads Each LWP supports one or more ULTs and maps to one kernel thread Scheduled by the kernel independently May execute in parallel on multiprocessors – Kernel threads • Fundamental entities that can be scheduled and dispatched to run on one of the system processors CS-550: Threads, SMP, and Microkernels 31 Linux Process and Thread Management • A process or task in Linux is represented by a task_struct data structure. It contains the following information about the process: – State: executing, ready, suspended, stopped, and zombie – Scheduling information: a process can be normal or real-time and has a priority – Identifiers: unique process identifier, and user and group identifiers – Interprocess communication: IPC mechanisms – Links: a link to its parent process, links to its siblings, and links to all its children – Times and timers: process creation time and the amount of processor time so far consumed by the process – File system: pointers to any files open by this process – Virtual memory: virtual memory assigned to this process – Processor-specific context: registers and stack information that represent the context of this process CS-550: Threads, SMP, and Microkernels 35