Processes and Threads in Operating Systems

Processes and Threads in Operating Systems
Slide Note
Embed
Share

Processes and threads play a crucial role in operating systems. They represent execution flows, with the operating system allocating CPU time to them. While conceptually different, in reality, processes are similar to threads with added OS state. In Linux, everything is managed as kernel threads. Learn about process creation methods in different systems and how signals control processes. Explore how Linux and Windows handle application launching by setting up execution context and memory.

  • Processes
  • Threads
  • Operating Systems
  • OS State
  • Signals

Uploaded on Mar 08, 2025 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. Processes 1

  2. Processes/Threads User level execution takes place in a process context OS allocates CPU time to processes/threads Process context: CPU and OS state necessary to represent a thread of execution Processes and threads are conceptually different Reality: processes == threads + some extra OS state Linux: everything managed as a kernel thread Kernel threads are mostly what you would think of as a process from Intro to OS User level threads are really just processes with a shared address space But different stacks As you can see the terminology becomes blurry

  3. Processes/Threads New processes/threads created via system call Linux: clone() Creates a new kernel thread Used for both processes and user level threads What about fork()? FreeBSD: fork() + thr_create() Windows: CreateProcess() + CreateThread() Addressing processes and threads Processes are assigned a pid Threads share pid, but are assigned unique tids Processes can be externally controlled using signals Signals are fundamental Unix mechanism designed for processes (operate on PIDs) Combining signals and threads can be really scary

  4. Linux Example Linux clone() takes a lot of arguments jarusl@gander> man clone /* Prototype for the raw system call */ long clone(unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs); fork() is a wrapper with a fixed set of args to clone() int pid = fork(); if (pid == 0) { // child code } else if (pid > 0) { // parent code } else { // error (pid == -1) }

  5. Launching Applications Request OS to setup execution context and memory Allocate and initialize memory contents Initialize execution state Registers, stack pointer, etc Set %rip (instruction pointer) to application entry point Memory layout Process memory organized into segments Segments stored in program executable file Binary format organizing data to load into memory Linux + most Unices: ELF Windows: PE OS just copies segments from executable file into correct memory location

  6. Launching applications Linux: exec*() system calls All take a path to an executable file Replaces (overwrites) the current process state But what about scripts? Scripts are executed by an interpreter A binary executable program OS launches interpreter and passes script as argv[1] OS scans file passed to exec*() to determine how to launch it Elf binaries: binary header at start of file specifying format Scripts: #!/path/to/interpreter https://elixir.bootlin.com/linux/v4.12.14/source/fs/binfmt_s cript.c

  7. Processes vs Programs

  8. What is in a Process? A process consists of (at least): an address space the code for the running program the data for the running program an execution stack and stack pointer (SP) traces state of procedure calls made the program counter (PC), indicating the next instruction a set of general-purpose processor registers and their values a set of OS resources open files, network connections, sound channels, The process is a container for all of this state a process is named by a process ID (PID) just an integer

  9. Process States Each process has an execution state, which indicates what it is currently doing ready: waiting to be assigned to CPU could run, but another process has the CPU running: executing on the CPU is the process that currently controls the CPU pop quiz: how many processes can be running simultaneously? waiting: waiting for an event, e.g. I/O cannot make progress until event happens As a process executes, it moves from state to state UNIX: run ps, STAT column shows current state which state is a process is most of the time?

  10. Process States

  11. Process Data Structures How does the OS represent a process in the kernel? At any time, there are many processes, each in its own particular state The OS data structure that represents each is called the process control block (PCB) PCB contains all info about the process OS keeps all of a process hardware execution state in the PCB when the process isn t running Program Counter (%RIP on x86_64) Stack Pointer (%RSP on x86_64) Other registers When process is unscheduled, the state is transferred out of the hardware into the PCB

  12. Process Control Block The PCB is a data structure with many, many fields: process ID (PID) execution state program counter, stack pointer, registers memory management info UNIX username of owner scheduling priority accounting info pointers into state queues PCB is a large data structure that contains or points to all information about the process Linux: struct task_struct; ~100 fields defined in <include/linux/sched.h> NT: defined in EPROCESS It contains about 60 fields

  13. PCBs and Hardware State When a process is running, its hardware state is inside the CPU RIP, RSP, other registers CPU contains current values When the OS stops running a process (puts it in the waiting state), it saves the registers values in the PCB when the OS puts the process in the running state, it loads the hardware registers from the values in that process PCB The act of switching the CPU from one process to another is called a context switch timesharing systems may do 100s or 1000s of switches/s takes about 5 microseconds on today s hardware

  14. CPU Switch From Process to Process

  15. Context Switch vs Mode Switch

  16. Process Queues You can think of the OS as a collection of queues that represent the state of all processes in the system typically one queue for each state e.g., ready, waiting, each PCB is queued onto a state queue according to its current state as a process changes state, its PCB is unlinked from from queue, and linked onto another Job queue set of all processes in the system Ready queue set of all processes residing in main memory, ready and waiting to execute Device queues set of processes waiting for an I/O device

  17. Switching between processes When should OS switch between processes, and how does it make it happen? Want to switch when one process is running Implies OS is not running! Solution 1: cooperation Wait for process to make system call into OS E.g. read, write, fork Wait for process to voluntarily give up CPU E.g. yield() Wait for process to do something illegal Divide by zero, dereference zero Problem: what if process is buggy and has infinite loop? Solution 2: Forcibly take control

  18. Preemptive Context Switches How can OS get control while a process runs? How does OS ever get control? Traps: exceptions, interrupts (system call = exception) Solution: force an interrupt with a timer OS programs hardware timer to go off every x ms On timer interrupt, OS can decide whether to switch programs or keep running How does the OS actually save/restore context for a process? Context = registers describing running code Assembly code to save current registers (stack pointer, frame pointer, GPRs, address space & load new ones) Switch routine: pass old and new PCBs Enter as old process, return as new process

  19. Context Switch Design Issues Context switches are expensive and should be minimized Context switch is purely system overhead, as no useful work accomplished during context switching The actual cost depends on the OS and the support provided by the hardware The more complex the OS and the PCB -> longer the context switch The more registers and hardware state -> longer the context swich Some hardware provides multiple sets of registers per CPU, allowing multiple contexts to be loaded at once A full process switch may require a significant number of instruction execution.

  20. Context Switch Implementation # void swtch(struct context *old, struct context *new); # # Save current register context in old # and then load register context from new. .globl swtch swtch: # Save old registers # put old ptr into eax movl 4(%esp), %eax popl 0(%eax) # save the old IP and stack and other registers movl %esp, 4(%eax) movl %ebx, 8(%eax) movl %ecx, 12(%eax) movl %edx, 16(%eax) movl %esi, 20(%eax) movl %edi, 24(%eax) movl %ebp, 28(%eax) pushl 0(%eax) # put new ptr into eax # restore other registers movl 4(%esp), %eax movl 28(%eax), %ebp movl 24(%eax), %edi movl 20(%eax), %esi movl 16(%eax), %edx movl 12(%eax), %ecx movl 8(%eax), %ebx # stack is switched here # return addr put in place # finally return into new ctxt movl 4(%eax),%esp Ret Note: do not explicitly switch IP; happens when return from switch function

  21. Role of Dispatcher vs. Scheduler Dispatcher Low-level mechanism Responsibility: Context-switch Change mode of old process to either WAITING or BLOCKED Save execution state of old process in PCB Load state of new process from PCB Change mode of new processes to RUNNING Switch to user mode privilege Jump to process instruction Scheduler Higher level policy Responsibility: Decide which process to dispatch to CPU could be allocated Parallel and Distributed Systems

  22. Scheduling The scheduler is the module that moves jobs from queue to queue the scheduling algorithm determines which job(s) are chosen to run next, and which queues they should wait on the scheduler is typically run when: a job switches from running to waiting when an interrupt occurs especially a timer interrupt when a job is created or terminated There are two major classes of scheduling systems in preemptive systems, the scheduler can interrupt a job and force a context switch in non-preemptive systems, the scheduler waits for the running job to explicitly (voluntarily) block

  23. CPU Scheduler Selects from among the processes in memory that are ready to execute, and allocates the CPU to one of them CPU scheduling decisions may take place when a process: 1. Switches from running to waiting state 2. Switches from running to ready state 3. Switches from waiting to ready 4. Terminates Scheduling under 1 and 4 is nonpreemptive All other scheduling is preemptive

  24. Dispatcher Dispatcher module gives control of the CPU to the process selected by the short-term scheduler; this involves: switching context switching to user mode jumping to the proper location in the user program to restart that program Dispatch latency time it takes for the dispatcher to stop one process and start another running

  25. Process Model Workload contains collection of jobs (processes) Process alternates between CPU and I/O bursts CPU bound jobs: (e.g. HPC applications) Matrix Multiply I/O bound: (e.g. Interactive applications) emacs emacs emacs read() read() read() write() I/O burst = process idle, switch to another for free Problem: don t know job s type before running Need job scheduling for each ready job Schedule each CPU burst

  26. Scheduling Goals Scheduling algorithms can have many different goals (which sometimes conflict) maximize CPU utilization maximize job throughput (#jobs/s) minimize job turnaround time (Tfinish Tstart) minimize job waiting time (Avg(Twait): average time spent on wait queue) minimize response time (Avg(Tresp): average time spent on ready queue) Maximize resource utilization Keep expensive devices busy Minimize overhead Reduce number of context switches Maximize fairness All jobs get same amount of CPU over some time interval Goals may depend on type of system batch system: strive to maximize job throughput and minimize turnaround time interactive systems: minimize response time of interactive jobs (such as editors or web browsers)

More Related Content