CR: Stack I Topics Outline

From Soma-notes

Weekly Topics

  • History of computer architecture: basic programming models
    • CPU-Memory-I/O model (stored programs)
    • overlays, multiprogramming, time sharing
    • supervisor versus user mode
    • multicore issues, Moore's law
  • Processes & Threads (2 weeks)
    • Address spaces, schedulers
    • pointers, memory layout
  • Concurrency (2 weeks)
    • spinlocks, semaphores, monitors
    • producer/consumer
    • deadlock
  • I/O and File Systems (2 weeks)
    • I/O performance, latency vs. bandwidth
    • VFS (pointers to functions)
    • block storage
    • filesystem layout, journaling
    • flash storage
  • Virtual Memory (2 weeks)
    • page tables, MMU, TLB
    • page table entries, memory protection
    • page replacement algorithms (Optimal, LRU, Clock)
    • memory hierarchy
  • Virtual Machines
    • Language, OS, para, and hardware virtualization
    • Cloud computing

Assignments

Assignments would all be divided into two parts:

  • Part A must be attempted in lab and checked by a TA or instructor. Slow students can continue to work during office hours which should run after lab; however, part A is not explicitly graded in lab, more it is used to make sure students don't get stumped early. This part should be doable by good students in 10-15 minutes.
  • Part B has more extensive exercises but still should be doable by good students in an hour or so.

Part A and B are turned in within one week. There should also be optional exercises that are not graded, but that could occupy good students for multiple hours.

Note that all assignments should include skeleton code for Part A that runs out of the box and requires only minor modifications. (Students thus get the confidence of playing with working code.) Part B exercises will require students to make more extensive modifications and/or write code from scratch.

Potential assignments:

  1. command line basics: standard in/out, command line pipes, standard commands, job control
  2. basic strings and pointers (printf, scanf), pointer/array equivalence, gdb
  3. Command line arguments, pointer arithmetic, C preprocessor
  4. running programs with execve, PATH, environment variables, basic malloc
  5. dynamic buffers for file I/O, memory mapped I/O
  6. fork, clone, shared memory, basic locking
  7. sockets, netcat (TCP mainly, UDP optional)
  8. libraries, linking, C->assembly, function calling conventions, ltrace, strace