Operating Systems 2019F Lecture 11
Video
The video from the lecture given on October 9, 2019 is now available.
Topics
- UNIX pipes
- Assembly language, try 2
- CPU registers: general, stack, base, condition
- CPU stack, stack allocation
- function calling conventions
Notes
Lecture 11 ---------- Assembly language In UNIX, a process is one or more execution contexts plus an address space Address space: range of memory, parts that may or may not be allocated execution context: set of CPU registers, state of a core - instruction pointer - stack pointer - general registers - condition register modern systems multiplex the CPU between processes - saving and restoring CPU registers, switching address spaces the stack is important because that's how we do the cheap memory management associated with functions To call a function, you - gather arguments <--- pushed onto the stack or put in registers - save where you are <--- save instruction pointer (IP) to the stack (push) - run the function <--- call - continue on <--- function call ret, popping IP from the stack When a function runs, you - save registers <--- the caller may care about state of registers, so push them on stack - allocate local variables <--- change stack pointer - do work - restore registers <--- pop them - return <--- pop return address (IP of caller) Make sure you understand push, pop, call, ret Midterm review, part 1 ---------------------- How does a shell work? Key system calls for managing processes * fork * execve * wait (+ exit) * sigaction * kill File I/O * open/openat * read * write * lseek * mmap * close Directory I/O * opendir/open * readdir/getdents64 * closedir/close Signals - messages your process can receive at any time - when your process has a signal, the signal handler *will be called* - the instruction pointer will be changed to the signal handler mmap - normal file I/O is read/write - mmap allows us to map file data into a process's address space - accessing memory is equivalent to doing read/write to file Couple of key variations - read-only mmap of file, normaly with PROT_EXEC * load code (executable, libraries) * read-only data (no PROT_EXEC) - read-write mmap, shared, of file * modifying file on disk - read-write mmap, private, of file * copy file to memory, modify memory - read-write mmap, anonymous, shared * allocate memory shared between processes - read-write mmap, anonymous, private * allocate memory private to process File permissions, hard links, symbolic links * file data versus metadata inodes contain - file owner, group, perms - size of file - modification times - data or references to other data blocks hard link is a filename that refers to an inode lseek - associated with every open file is a file position - lseek lets you change it - lseek past the end of a file and then write - create a "hole" - all zeros are filled in - space in between not allocated