Operating Systems 2019F Lecture 11

From Soma-notes
Jump to navigation Jump to search

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