os
view markdown- 1 - introduction    
- 1.1 what operating systems do
 - 1.2 computer-system organization
 - 1.3 computer-system architecture
 - 1.4 operating-system structure
 - 1.5 operating-system operations
 - 1.6 process management
 - 1.7 memory management
 - 1.8 storage management
 - 1.9 protection & security
 - 1.10 basic data structures
 - 1.11 computing environments
 
 - 2 - OS Structures
 - 3 - processes
 - 4 - threads
 - 5 - process synchronization
 - 7 - main memory
 - 6 - cpu scheduling
 - 8 - virtual memory
 - 9 - mass-storage structure
 - 10 - file-system interface
 - 11 - file-system implementation
 - 11.5
 - 12 - i/o systems
 
1 - introduction
1.1 what operating systems do
- computer system - hierarchical approach = layered approach
    
- hardware
 - operating system
 - application programs
 - users
 
 - views
    
- user view - OS maximizes work user is performing
 - system view
        
- os allocates resources - CPU time, memory, file-storage, I/O
 - os is a control program - manages other programs to prevent errors
 
 
 - program types
    
- os is the kernel - one program always running on the computer
        
- only kernel can access resources provided by hardware
 
 - system programs - associated with OS but not in kernel
 - application programs
 
 - os is the kernel - one program always running on the computer
        
 - middleware - set of software frameworks that provide additional services to application developers
 
1.2 computer-system organization
- when computer is booted, needs bootstrap program
    
- initializes things then loads OS
 - also launches system processes
        
- ex. Unix launches “init”
 
 
 - events
    
- hardware signals with interrupt
 - software signals with system call
 - interrupt vector holds addresses for all types of interrupts
 - have to save address of interrupted instruction
 
 - memory
    
- von Neumman architecture - uses instruction register
 - main memory is RAM
        
- volatile - lost when power off
 
 - secondary storage is non-volatile (ex. hard disk)
 - ROM is unwriteable so static programs like bootstrap are ROM
 - access
        
- uniform memory access (UMA)
 - non-uniform memory access (NUMA)
 
 
 - I/O
    
- device driver for I/O devices
 - direct memory access (DMA) - transfers entire blocks of data w/out CPU intervention
        
- otherwise device controller must move data to its local buffer and return pointer to that
 
 
 - multiprocessor systems
    
- increased throughput
 - economies of scale (costwise)
 - increased reliability (fault tolerant)
 
 
1.3 computer-system architecture
- single-processor system - one main cpu
    
- usually have special-purpose processors (e.g. keyboard controller)
 
 - multi-processor system / multicore system
    
- multicore means multi-processor on same chip
        
- multicore is generally faster
 
 - multiple processors in close communication
 - advantages
        
- increased throughput
 - economy of scale
 - increased reliability = graceful degradation = fault tolerant
 
 - types
        
- asymmetric multiprocessing - boss processor controls the system
 - symmetric multiproccesing (SMP) - each processor performs all tasks
            
- more common
 
 - blade server - multiple independence multiprocessor systems in same chassis
 
 
 - multicore means multi-processor on same chip
        
 - clustered system - multiple loosely coupled cpus
    
- types
        
- asymmetric clustering - one machine runs while other monitors it (hot-standby mode)
 - symmetric clustering - both run something
 
 - parallel clusters
        
- require disributed lock manager to stop conflicting parallel operations
 - can share same data via storage-area-networks
 
 - beowulf cluster - use ordinary PCs to make cluster
 
 - types
        
 
1.4 operating-system structure
- multiprogramming - increases CPU utilization so CPU is always doing something
    
- keeps job pool ready on disk
 - time sharing / multitasking - multiple jobs switch so fast that both can be interacted with
        
- requires an interactive computer system
 
 - process - program loaded into memory
 - scheduling
        
- job scheduling - picking jobs from job pool (disk -> memory)
 - CPU scheduling - what to run first (memory -> cpu)
 
 - memory
        
- processes are swapped from main memory to disk
 - virtual memory allows for execution of process not in memory
 
 
 
1.5 operating-system operations
- trap / exception - software-generated interrupt
 - user-mode and kernel mode (also called system mode)
    
- when in kernel mode, mode bit is 0
 - separate mode for virtual machine manager (VMM)
 - this is built into hardware
 
 - kernel can use a timer to getting stuck in user mode
 
1.6 process management
- program is passive, process is active
 - process needs resources
    
- process is unit of work
 
 - single-threaded process has one program counter
 
1.7 memory management
- cpu can only directly read from main memory
 - computers must keep several programs in memory
    
- hardware design is impmortant
 
 
1.8 storage management
- defines file as logical storage unit
 - most programs stored on disk until loaded
 - in addition to secondary storage, there is tertiary storage (like DVDs)
 - caching - save frequent items on faster things
    
- cache coherency - make sure cache coherency is properly updated with parallel processes
 
 
1.9 protection & security
- process can execute only within its address space
 - protection - controlling access to resources
 - security - defends a system from attacks
 - maintain list of user IDs and group IDs
    
- can temporarily escalate priveleges to an effective UID - setuid command
 
 
1.10 basic data structures
- bitmap - string of n binary digits
 
1.11 computing environments
- network computers - are essentially terminals that understand web-based computing
 - distributed system - shares resources among separate computer systems
    
- network - communication path between two or more computers
 - TCP/IP is most common network protocol
 
 - networks
    
- PAN - personal-area network (like bluetooth)
 - LAN - local-area network connects computers within a room, building, or campus
 - WAN - wide-area network
 - MAN - metropolitan-area network
 - network OS provides features like file sharing across the network
 - distributed OS provides less autonomy - makes it feel like one OS controls entire network
 
 - client-server computing
    
- compute-server - performs actions for user
 - file-server - stores files
 
 - peer-to-peer computing
    
- all clients w/ central lookup service, ex. Napster
 - no centralized lookup service
        
- uses discovery protocol - puts out request and other peer must respond
 
 
 - virtualization - allows OS to run within another OS
    
- interpretation - run programs as non-native code (ex. java runs on JVM)
 - BASIC can be compiled or interpreted
 
 - cloud-computing - computing, storage, and applications as a service accross a network
    
- public cloud
 - private cloud
 - hybrid cloud
 - software as a service (SAAS)
 - platform as a service (PAAS)
 - infrastructure as a service (IAAS)
 - cloud is behind a firewall, can only make requests to it
 
 - embedded systems - like microwaves / robots
    
- specific tasks
 - have real-time OS - fixed time constraints
 
 
2 - OS Structures
2.1 os services
- for the user
    
- user interface - command-line interface and graphical user interface
 - program execution - load a program and run it
 - I/O operations - file or device
 - File-system manipulation
 - communications - between processes / computer systems
 - error detection
 
 - for system operation
    
- resource allocation
 - accounting - keeping stats on users / processes
 - protection / security
 
 
2.2 user and os interface
- command interpreter = shell - gets and executes next user-specified command
    
- could contain the code to execute the command
 - command interpreter could have code to execute commands
 - more often, executes system programs, such as “rm”, that are executed
 
 - GUI
 
2.3 system calls
- system calls - provide an interface to os services
 - API usually wraps system calls (ex. java)
    
- libc - provided by Linux/Mac OS for C
 - system-call interface links API calls to system calls
 
 - passing parameters
    
- pass parameters in registers
 - parameters stored in block of memory and address passed in register
 - parameters pushed onto stack
 
 
2.4 system call types
- process control - halting, ending
    
- lock shared data - no other process can access until released
 
 - file manipulation
 - device manipulation
    
- similar to file manipulation
 
 - information maintenance - time, date, dump()
    
- single step is CPU mode which throws trap for CPU after every instruction for a debugger
 
 - communications
    
- message-passing model
        
- each computer has host name and network identifier (IP address)
 - each process has process name
 - daemons - system programs for receiving connections (like servers waiting for a client)
 
 - shared-memory model
 
 - message-passing model
        
 - protection
 
2.5 system programs
- system programs = system utilities
 - some provide interfaces for system calls
 - other uses
    
- file management
 - status info
 - file modification
 - programming-language support
 - program loading and execution
 - communications
 - background services
 
 
2.6 os design and implementation
- mechanism - how to do something
    
- want this to be general so only certain parameters change
 
 - policy - what will be done
 - os mostly in C, low-level kernel in assembly
    
- high-level is easier to port but slower
 
 
2.7 os structure
- want modules but current models aren’t very modularized
    
- monolithic system has performance advantages - very little overhead
 - in practice everything is a hybrid
 
 - system can be modularized with a layered approach
    
- layers: hardware, …, user interface
 - easy to construct and debug
 - hard to define layers, less efficient
 
 - microkernel approach - used in os Mach
    
- move nonessential kernel components to system / user-level
 - smaller kernel, everything communicates with message passing
 - makes extending os easier, but slower functions due to system overhead
 
 - loadable kernel modules
    
- more flexible - kernel modules can change
 
 - examples (see pics)
 
2.8 os debugging
- errors are written to log file and core dump (memory snapshot) is written to file
 - if kernel crashes, must save its dump to s special area
 - performance tuning - removing bottlenecks
    
- monitor trace listings - log if interesting events with times / parameters
 
 - SolarisDTrace is a tool to debug and tune the os
 - profiling - periodically samples instruction pointer to determine which code is being executed
 
2.9 generation
- system generation - configuring os on a computer
    
- usually on a CD-ROM
 - lots of things must be determined (like what CPU to use)
 
 
2.10 system boot
- bootstrap program
 
3 - processes
3.1 process concept
- process - program in execution
    
- batch system executes jobs = processes
 - time-shared system has user programs or tasks
 - program is passive while process is active
 
 - parts
    
- program code - text section
 - program counter
 - registers
 - stack
 - data section
 - heap
 
 - same program can have many processes
 - process can be execution environment for other code (ex. JVM)
 - process state
    
- new
 - running
 - waiting
 - ready
 - terminated
 
 - process control block (PCB) = task control block - repository for any info that varies process to process
    
- process state
 - program counter
 - CPU registers
 - CPU-scheduling information
 - memory-management information
 - accounting information
 - I/O status information
 - could include information for each thread
 
 - parent - process that created another process
 
3.2 process scheduling
- process scheduler - selects available process for multi-tasking
    
- processes begin in job queue
 - processes that are ready and waiting are in the ready queue until they are dispatched - usually stored as a linked list
 - lots of things can happen here (fig 3_6)
        
- ex. make I/O request and go to I/O queue
 
 - I/O-bound process - spends more time doing I/O
 - CPU-bound process - spends more time doing computations
 - each device has a list of process waiting in its device queue
 
 - scheduler - selects processes from queues
    
- long-term scheduler - selects from processes on disk to load into memory
        
- controls the degree of multiprogramming = number of processes in memory
 - has much more time than short-term scheduler
 - want good mix of I/O-bound and CPU-bound processes
 - sometimes this doesn’t exist
 
 - short-term / CPU scheduler - selects from processes ready to execute and allocates CPU to one of them
 - sometimes medium-term scheduler
        
- does swapping - remove a process from memory and later reintroduce it
 
 
 - long-term scheduler - selects from processes on disk to load into memory
        
 - context switch - occurs when switching processes
    
- when interrupt occurs, kernel saves context of old process and loads saved context of new process
 - context is in the PCB
 - might be more or less work depending on hardware
 
 
3.3 operations on processes
- usually each process has unique process identifier (pid)
 - linux everything starts with init process (pid=1)
 - restricting a child process to a subset of the parent’s resources prevents system overload
    
- parent may pass along initialization data
 
 - after creating new process
    
- parent continues to execute concurrently with children
 - parent waits until some or all of its children terminate
 
 - two address-space possibilities for the new process:
    
- child is duplicate of parent (it has the same program and data as the parent).
 - child loads new program
 
 - forking
    
- when call fork() continue operation but returns 0 for parent process and nonzero for child
        
- child is a copy of the parent
 
 - after fork, usually one process calls exec() to load binary file into memory
        
- overrides program, doesn’t return unless error occurs
 
 - parent can call wait() until child finishes (moves itself off ready queue until child finishes)
 
 - when call fork() continue operation but returns 0 for parent process and nonzero for child
        
 - on Windows, uses CreateProcess() which requires loading a new program rather than sharing address space
    
- STARTUPINFO -
 - PROCESSINFORMATION -
 
 - process termination
    
- exit() kills process (return in main calls exit)
 - process can return status value
 - parent can terminate child if it knows its pid
 - cascading termination - if parent dies, its children die
 - zombie process - terminated but parent hasn’t called wait() yet
        
- remains because parent wants to know what exit status was
 - if parent terminates without wait(), orphan child is assigned init as new parent (init periodically invokes wait())
 
 
 
3.4 interprocess communication
- process cooperation
    
- information sharing
 - computation speedup
 - modularity
 - convenience
 
 - interprocess communication (IPC) - allows exchange of data and info
    
- shared memory - shared region of memory is established
        
- one process establishes region
 - other process must attach to it (OS must allow this)
 - less overhead (no system calls)
 - suffers from cache coherency
 - ex. producer consumer
            
- producer fills buffer and consumer empties it
 - unbounded buffer - producer can keep producing indefinitely
 - bounded buffer - consumer waits if empty, producer waits if full
 - in points to next free position
 - out points to first full position
 
 
 - message passing - messages between coordinating processes
        
- useful for smaller data
 - easier in a distributed system
            
- direct or indirect communication
 
- direct requires knowing the id of process to send / receive
                
- can be asymmetrical - need to know id of process to send to, but not receive from
 - results in hard-coding
 
 - indirect - messages are sent / received from mailboxes
                
- more flexible, can send message to whoever shares mailbox
 - mailbox owned by process - owner receives those messages
 - mailbox owned by os - unclear
                    
- synchronous or asynchronous communication
 
 
 - synchronous = blocking
 - when both send and recieve are blocking = rendezvous 3. automatic or explicit buffering
 - queue for messages can have 3 implementations
                
- zero capacity (must be blocking)
 - bounded capacity
 - unbounded capacity
 
 
 
 
 - shared memory - shared region of memory is established
        
 
3.5 examples of IPC systems
- POSIX - shared memory
 - Mach - message passing
 - Windows - shared memory for message passing
 
3.6 communication in client-server systems
- sockets - endpoint for communication
    
- IP address + port number
 - connecting
        
- server listens on a port
 - client creates socket and requests connection to server’s port
 - server accepts connection (then usually writes data to socket)
 
 - all ports below 1024 are well known
 - connection-oriented=TCP
 - connectionless = UDP
 - special IP address 127.0.0.1 - loopback - refers to itself
 - sockets are low-level - can only send unstructured bytes
 
 - remote procedure calls (RPCs) - remote message-based communication
    
- like IPC, but between different computers
 - message addressed to an RPC daemon listening to a port
 - messages are well-structured
 - specifies a port - a number included at the start of a message packet
        
- system has many ports to differentiate different services
 
 - uses stubs to hide details
        
- they marshal the parameters
 - might have to convert data into external data representation (XDR) (to avoid issues like big-endian vs. little-endian)
 
 - must make sure each message is acted on exactly once
 - client must know port
        
- binding info (port numbers) may be predetermined and unchangeable
 - binding can be dynamic with rendezvous deaemon (matchmaker) on a fixed RPC port
 
 
 - pipes - conduit allowing 2 processes to communicate
    
- four issues
        
- bidirectional?
 - full duplex (data can travel in both directions at same time?) or half duplex (only one way)?
 - parent-child relationship?
 - communicate over a network?
 
 - ordinary pipe - write at one end, read at the other
        
- unix function 
pipe(int fd[])- fd[0] is read-end and fd[1] is write-end
 
 - only exists while a child and parent process are communicating
            
- therefore only on same machine
 
 - parent and child should both close unused ends of the pipe
 - on windows, called anonymous pipes
            
- requires security attributes
 
 
 - unix function 
 - named pipe - can be bidirectional
        
- called FIFOs in Unix
            
- only half-duplex, requires same machine
 
 - Windows - fulll-duplex and can be different machines
 - many processes can use them
 
 - called FIFOs in Unix
            
 
 - four issues
        
 
4 - threads
- thread - basic unit of CPU utilization
    
- program counter
 - register set
 - stack
 
 - making a thread is quicker and less resource-intensive than making a process
 - used in RPC and kernels
 - benefits
    
- responsiveness
 - resource sharing
 - economy
 - scalability
 
 
4.2 - multicore programming (skipped)
- amdahl’s law: $speedup \leq \frac{1}{S+(1-S)/N_{cores}}$
    
- S is serial portion
 
 - parallelism
    
- data parallelism - distributing subsets of data across cores and performing same operation on each core
 - task parallelism - distribution tasks across cores
 
 
4.3 - multithreading models
- need relationship between user threads and kernel threads
    
- many-to-one model - maps user-level threads to one kernel thread
        
- can’t be parallel on multicore systems
 - ex. used by Green threads
 
 - one-to-one model
        
- small overhead for creating each thread
 - used by Linux and Windows
 
 - many-to-many model
        
- less than or equal number of kernel threads
 - two-level model mixes a one-to-one model and a many-to-many model
 
 
 - many-to-one model - maps user-level threads to one kernel thread
        
 
4.4 - thread libraries
- thread library - provides programmer with an API for creating/managing threads
 - asynchronous v. synchronous threading
 
1 - POSIX Pthreads
/* get the default attributes */
pthread attr init(&attr);
/* create the thread */
pthread create(&tid,&attr,runner,argv[1]);  // runner is a func to call
/* wait for the thread to exit */
pthread join(tid,NULL);
- shared data is declared globally
 
2 - Windows
3 - Java - uses Runnable interface
4.5 - implicit threading (skipped)
- implicit threading - handle threading in run-time libraries and compilers
    
- thread pool - number of threads at startup that sit in a pool and wait for work
 - OpenMP - set of compiler directives / API for parallel programming
        
- identifies parallel regions
 - uses #pragma
 
 - Grand central dispatch - extends C
        
- uses dispatch queue
 
 
 
4.6 - threading issues
- fork/exec need to know if should fork all threads / when to replace program
 - signal notifies a process that a particular event has occurred
    
- has a default signal handler
 - user-defined signal handler
        
- delivering a signal to a process: 
kill(pid_t pid, int signal) - delivering a signal to a thread: 
pthread_kill(pthread_t tid, int signal) 
 - delivering a signal to a process: 
 
 - thread cancellation - terminating target thread before it has completed
    
- asynchronous cancellation - one thread immediately terminates target thread
 - deferred cancellation - target thread periodically checks whether it should terminate
        
- pthread_cancel(tid)
 
- uses deferred cancellation
 - cancellation occurs only when thread reaches cancellation point
 
 
 - thread-local storage - when threads need separate copies of data
 - lightweight process = LWP - between user thread and kernel thread
 - scheduler activation - kernel provides application with LWPs
    
- upcall - kernel informs application about certain events
 
 
4.7 - linux (skipped)
- linux process / thread are same = task
 - uses clone() system call
 
5 - process synchronization
- cooperating process can effect or be affected by other executing processes
 - ex. consumer/producer
    
- if counter++ and counter– execute concurrently, don’t know what will happen
 - this is a race condition
 
 
5.2 - critical-section problem
- each process has critical section where it updates common variables
 - 3 requirements
    
- mutual exclusion - 2 processes can’t concurrently do critical section
 - progress - things should be in critical selection
 - bounded waiting - every process should eventually get to critical selection
 
 - kernels
    
- preemptive kernels
        
- more responsive
 
 - nonpreemptive kernels
        
- no race conditions
 
 
 - preemptive kernels
        
 
5.3 - peterson’s solution
- peterson’s solution
    
- not guaranteed to work
 
 
5.4 - synchronization hardware
- locking - protecting critical regions using locks
 - single-processor solution
    
- prevent interrupts while shared variable is being modified
 - ex. 
test_and_set() 
 - instructions do things like swapping atomically - as one uninterruptable unit
    
- these are basically locked instructions
 - ex. 
compare_and_swap() 
 
5.5 - mutex locks
- mutex
    
- simplest synchronization tool
 - this type of mutex lock is called spinlock because requires busy waiting - processes not in critical section are continuously looping
 - good when locks are short
 
 
5.6 - semaphores
- semaphore S - integer variable accessed through wait() (like trying to execute) and signal() (like releasing)
    
- counting semaphore - unrestricted domain
 - binary sempahore - 0 and 1
 
 
wait(S) {
	while(S<=0)
		// busy wait
	S--;
}
signal(S) {
	S++;
}
- to improve performace, replace busy wait by process blocking itself
    
- places itself into a waiting queue
 - restarted when other process executes a signal() operation
 
 
typedef struct{ 
	int value;
	struct process *list;
} semaphore;
wait(semaphore *S) { 
	S->value--;
	if (S->value < 0)
		add this process to S->list;
}
signal(semaphore *S) { 
	S->value++;
	if (S->value <= 0){
		remove a process P from S->list; 
		wakeup(P); // resumes execution
	}
}
- deadlocked - 2 processes are in waiting queues, can’t wakeup unless other process signals them
 - indefinite blocking=starving - could happen if we remove processes from waiting queue in LIFO order
    
- bottom never gets out
 
 - priority inversion
    
- only occurs when processes have > 2 priorities
 - usually solved with a priority-inheritance protocol
        
- when a process accesses resources needed by a higher-priority process, it inherits the higher priority until they are finished with the resources in question
 
 
 
5.7 - classic synchronization problems
- bounded-buffer problem
 - readers-writers problem
    
- writers must have exclusive access
 - readers can read concurrently
 
 - dining-philosophers problem
 
5.8 - monitors
- monitor - highl-level synchronization construct
    
- only 1 process can run at a time
 - abstract data type which includes a set of programmer-defined operations with mutual exlusion
 - has condition variables
        
- these can only call wait() or signal()
 - when a signal is encountered, 2 options
            
- signal and wait
 - signal and continue
 
 
 
 - can implement with a semaphore
    
- 1st semaphore: 
mutex- process must wait before entering and signal after leaving the monitor - 2nd semaphore: 
next- signaling processes use next to suspend themselves - 3rd semaphore: 
next_count= number of suspended processes 
 - 1st semaphore: 
 
 wait(mutex);
// body of F
if (next count > 0) 
	signal(next);
else
	signal(mutex);
- conditional-wait construct can help with resuming
    
x.wait(c);- priority number c stored with name of process that is suspended
 - when 
x.signal()is executed, process with smallest priority number is resumed next 
 
5.9.4 - pthreads synchronization
#include <pthread.h> 
pthread mutex t mutex;
/* create the mutex lock */ 
pthread mutex init(&mutex,NULL) // null specifies default attributes
pthread mutex lock(&mutex); // acquire the mutex lock
/* critical section */
pthread mutex unlock(&mutex); // release the mutex lock
- these functions return 0 w/ correct operation otherwise error code
 - POSIX specifies named and unnamed semaphores
    
- name has name and can be shared by different processes
 
 
#include <semaphore.h> sem t sem;
/* Create the semaphore and initialize it to 1 */ sem init(&sem, 0, 1);
/* acquire the semaphore */ 
sem wait(&sem);
/* critical section */
/* release the semaphore */ 
sem post(&sem);
5.10 - alternative approaches (skip)
5.11 - deadlocks
- resource utilization
    
- request
 - use
 - release
 
 - deadlock requires 4 simultaneous conditions
    
- mutual exclusion
 - hold and wait
 - no preemption
 - circular wait
 
 - deadlocks can be described by system resource-allocation graph
    
- request edge - directed edge from process P to resource R means P has requested instance of resource type R
 - assignment edge - R-> P
 - if the graph has no cycles, not deadlocked
 - if cycle, possible deadlock
 
 - three ways to handle
    
- use protocol to never enter deadlock
 - enter, detect, recover
 - ignore the problem
        
- developers must write code that avoids deadlocks
 
 
 
7 - main memory
7.1 - background
- CPU can only directly access main memory and registers
 - 
    
accessing memory is slower than registers
- processor must stall or use cache
 
 - processes need separate memory spaces
    
- base register - holds smallest usable address
 - limit register - specifies size of range
        
- os / hardware check these, throw a trap if there was error
 
 
 - input queue holds processes waiting to be be brought into memory
 - 
    
compiler binds symbolic addresses to relocatable addresses
- linkage editor binds relocatable addresses to absolute addresses
 
 - CPU uses virtual address=logical address
    
- memory-management unit (MMU) maps from virtual to physical address
        
- simple ex. add virtual address to a process’s base register = relocation register
 
 
 - memory-management unit (MMU) maps from virtual to physical address
        
 - dynamic loading - don’t load whole process, only load things when called
 - 
    
dynamically linked libraries - system libraries linked to user programs when the programs are run
- stub - tells how to load / locate library routine
 
 - shared libraries - all use same library
 
7.2 (skipped)
7.3 - contiguous memory allocation
- contiguous memory allocation - each process has a section
    
- put OS in low memory and process memory in higher
 
 - transient OS code - not often used
    
- ex. drivers
 - can remove this and change OS memory usage by decreasing val in OS limit register
 
 - split mem into partitions
    
- each partition can only have 1 process
 - multiple-partition method - free partitions take a new process
 - variable-partition scheme - OS keeps table of free mem
        
- all available mem = hole
 - holes are divided between processes
            
- first-fit - allocate first hole big enough
 - best-fit - allocate smallest hole that is big enough
 - worst-fit - allocate largest hole (largest leftover hole)
                
- worst
 
 
 
 
 - external fragmentation - there is enough free mem, but it isn’t contiguous
    
- 50-percent rule - 1/3 of mem is unusable
 - solved with compaction - shuffle mem to put free mem together
        
- can be expensive to move mem around
 
 
 - internal fragmentation - extra mem a proc is allocated but not using (because given in block sizes)
 - 2 types of non-contiguous solutions
    
- segmentation
 - paging
 
 
7.4 - segmentation (skip)
- segments make up logical address space
    
- name (or number)
 - length
 
 - logical address is a tuple
    
- (segment-number, offset)
 
 - segment table
    
- each entry has segment base and segment limit
 
 - doesn’t avoid external fragmentation
 
7.5 - paging (skip)
- break physical mem into fixed-size frames and logical mem into corresponding pages
 - 
    
CPU address = [page number page offset] - page table contains base address of each page in physical mem
 - usually, each process gets a page table
 
 - frame table keeps track of which frames are available / who owns them
 - paging is prevalent
 - avoids external fragmentation, but has internal fragmentation
 - small page tables can be stored in registers
    
- usually page-table base register points to page table in mem
 - has translation look-aside buffer - stores some page-table entries
        
- some entries are wired down - cannot be removed from TLB
 - some TLBS store address-space identifiers (ADIDs)
            
- identify a process
 - otherwise hard to contain entries for several processes
 
 - want high hit ratio
 
 
 - page-table often stores a bit for read-write or read-only
    
- valid-invalid bit sets whether page is in a process’s logical address space
 - OR page-table length register - says how long page table is
 
 - can share reentrant code = pure code
    
- non-self-modifying code
 
 
7.6 - page table structure (skip)
- page tables can get quite large (total mem / page size)
    
- hierarchical paging - ex. two-level page table
 
- also called forward-mapped page table
 - unused things aren’t filled in
 - for 64-bit, would generally require too many levels
    2. hashed page tables
        
- virtual page number is hash key -> physical page number
 - clustered page tables - each entry stores everal pages, can be faster
            
- inverted page tables
 
 - only one page table in system
 - one entry for each page/frame of memory
 - takes more time to lookup
            
- hash table can speed this up
 
 - difficulty with shared memory
 
 
 
7.7-9 (skipped)
6 - cpu scheduling
- preemptive - can stop and switch a process that is currently running
 
6.3 - algorithms
- first-come, first-served
 - shortest-job-first
    
- can be preemptive or non preemptive
 
 - priority-scheduling
    
- indefinite blocking / starvation
 
 - round-robin
    
- every process gets some time
 
 - multilevel queue scheduling
    
- ex. foreground and background
 
 - multilevel feedback queues
    
- allows processes to move between queues
 
 
6.4 - thread scheduling
- process contention scope - competition for CPU takes place among threads belonging to same process
    
- PTHREAD_SCOPE_PROCESS - user-level threads onto available LWPs
 - PTHREAD_SCOPE_SYSTEM - binds LWP for each user-level thread
 
 
6.5 - multiple-processor scheduling
- asymmetric vs. symmetric
    
- almost everything is symmetric (SMP)
 - processor affinity - try to not switch too much
 - load balancing - try to make sure all processes share work
 - multithreading
        
- coarse-grained - thread executes until long-latency event, such as memory stall
 - fine-grained - switches between instruction cycle
 
 
 
6.6 - real-time systems
- event latency - amount of time that elapses from when an event occurs to when it is serviced
    
- interrupt latency - period of time from the arrival of an interrupt at the CPU to the start of the routine that services the interrupt
 - dispatch latency
 
- Preemption of any process running in the kernel
 - Release by low-priority processes of resources needed by a high-priority process
 
 - rate-monotonic scheduling - schedules periodic tasks using a static priority policy with preemption
 
6.7 - SKIP
8 - virtual memory
8.1 - background
- lots of code is seldom used
 - virtual mem allows the execution of processes that are not completely in
 - benefits
    
- programs can be larger than physical mem
 - more processes in mem at same time
 - less swapping programs into mem
 
 - sparse address space - virtual address spaces with hole (betwen heap and stack)
 
8.2 - demand paging
- demand paging - load pages only when they are needed
    
- lazy pager - only swaps a page into memory when it is needed
 - can use valid-indvalid bit in page table to signal whether a page is in memory
 
 - memory resident - residing in memory
 - accessing page marked invalid causes page fault
    
- must restart after fetching page
        
- don’t let anything change while fetching
 - use registers to store state before fetching
 
 
 - must restart after fetching page
        
 - 
    
pure demand paging - never bring a page into memory until it is required
- programs tend to have locality of reference, so we bring in chunks at a time
 
 - extra time when there is a page fault
    
- service the page-fault interrupt
 - read in the page
 - restart the process
        
- effective access time is directly proportional to page-fault rate
 
 
 - anonymous memory - pages not associated with a file
 
8.3 - copy-on-write
- copy-on-write - allows parent and child processes intially to share the same pages
    
- if either process writes, copy of shared page is created
 - new pages can come from a set pool
 
 - zero-fill-on-demand - zeroed out before being allocated
 - virtual memory fork - not copy-on-write
    
- child uses adress space of parent
 - parent suspended
 - meant for when child calls exec() immediately
 
 
8.4 - page replacement - select which frames to replace
- 
    
multiprogramming might over-allocate memory
- all programs might need all their mem at once
 
 - buffers for I/O also use a bunch of mem
 - when over-allocated, 3 options
    
- terminate user process
 - swap out a process
 - page replacement
 
 - want lowest page-fault rate
 - test with reference string, which is just a list of memory references
 - if no frame is free, find one not being used and free it
 - write its contents to swap space
 - 
    
modify bit=dirty bit reduces overhead
- if hasn’t been modified then don’t have to rewrite it to disk
 
 - page replacement examples
    
- 
        
FIFO
- Belady’s anomaly - for some algorithms, page-fault rate may increase as number of allocate frames increases
 
 - 
        
optimal (OPT / MIN)
- replace the page that will not be used for the longest period of time
 
 - LRU - least recently used (last used)
        
- implement with counters since each use
 - stack of page numbers (whenever something is used, put it on top)
            
- stack algorithms - set of pages in memory for n frames is always a subset of the set of pages that would be in memory with n + 1 frames
 
- don’t suffer from Belady’s anomaly
 
 
 - LRU-approximation
        
- reference bit - set whenever a page is used
 - can keep additional reference bits by recording reference bits at regular intervals1
 - second-chance algorithm - FIFO, but if ref bit is 1, set ref bit to 0 and move on to next FIFO page
 - can have clock algorithm
 - enhanced second-chance - uses reference bit and modify bit
            
- give preference to pages that have been modified
 
 
 - counting-based - count and implement LFU (least frequently used) or MFU (most frequently used)
 
 - 
        
 - page-buffering algorithms
    
- pool of free frames - makes things faster
 - list of modified pages - written to disk whenever paging device is idle
 - som algorithms, like databases perform better when they get their own memory capability called raw disk instead of being managed by OS
 
 
8.5 frame-allocation algorithms - how many frames to allocate to teach process in memory (skipped)
8.6 - thrashing
- if low-priority process gets too few frames, swap it out
    
- thrashing - process spends more time paging than executing
        
- CPU utilization stops increasing
 
 
 - thrashing - process spends more time paging than executing
        
 - local replacement algorithm = priority replacement algorithm - if one process starts thrashing, cannot steal frames from another
    
- locality model - each locality is a set of pages actively used together
 - give process enough for its current locality
 
 - working-set model - still based on locality
    
- defines working-set window $\delta$
 - defines working set as pages in most recent $\delta$ refs
 - OS adds / suspends processes according to working set sizes
 - approximate with fixed-interval timer
 
 - page-fault frequency - add / decrease pages based on targe page-fault rate
 
8.8.1 - buddy system
- memory allocated with power-of-2 allocator - requests are given powers of 2
    
- each page is split into 2 buddies and each of those splits again recursively
 - coalescing - buddies can be combined quickly
 
 
9 - mass-storage structure
9.4 - disk scheduling
- bandwidth - total number of bytes transferred, divided by time
 - first-come first-served
 - shortest-seek-time-frist
 - SCAN algorithm - disk swings side to side servicing requests on the way
    
- also called elevator algorithm
 - also has circular-scan
 
 
9.5 - disk management
- low-level formatting - dividing disk into sectors that controller can read/write
    
- blocks have header / trailer with error-correcting codes
 
 - bad blocks are corrupted - need to replace them with others = sector sparing = forwarding
    
- sector slipping - just renumbers to not index bad blocks
 
 
10 - file-system interface
10.1
- os maintains open-file table
 - might require file locking
 - must support different file types
 
10.2 - access methods
- simplest - sequential
 - direct access = relative access
    
- uses relative block numbers
 
 
10.3
- disk can be partitioned
 - two-level directory
    
- users are first level
 - directory is 2nd level
 
 - extend this into a tree
    
- acyclic makes it faster to search
 - cycles require very slow garbage collection
 
 - link - pointer to another thing
 
11 - file-system implementation
11.1
- file-control block (FCB) contains info about file ownership, etc.
 
11.4
- contiguous allocation
 - linked allocation
    
- FAT
 
 - indexed allocation - all the pointers in 1 block
 
11.5
- keep track of free-space list
    
- implemented as bit map
 
 - keep track of linked list of free space
 - grouping - block stores n-1 free blocks and 1 pointer to next block
 - counting - keep track of ptr to next block and the number of free blocks after that
 
12 - i/o systems
- bus - shared set of wires
 - registers
    
- data-in - read by the host
 - data-out
 - status
 - control
 
 - interrupt chaining - each element in the interrupt vector points to the had of a list of interrupt handlers
 - system calls use software interrupt
 - direct memory access - read large chunks instead of one byte at a time
 - device-status table
 - spool - buffer for device (ex. printer) that can’t hold interleaved data