CR: Stack I Topics Outline

From Soma-notes
Jump to navigation Jump to search

Title

  • Stack I: too opaque
  • Computer Systems
  • Introduction to Operating Systems
  • Fundamentals of Operating Systems
  • Principles of Computer Systems
  • Introduction to Computer Systems
  • Operating Systems I

Learning Objectives

  • Proficient in basic C programming
    • Understanding pointer syntax, pointer/array equivalence
    • basic facility in manipulating pointer-based data structures in C (assuming past experience in another language, should come in 1406)
    • able to do basic debugging, including tracking down memory leaks
    • create a moderate-sized program using dynamic memory allocation with no memory leaks
  • Facility with the UNIX command line
    • basic commands
    • pipes
    • text search and manipulation (grep, cat)
    • ability to use manpages
    • ability to compile, and link C programs manually and using Makefiles
    • ability to do basic analysis program behavior at runtime using tools such as gdb, strace, ltrace
  • Understand UNIX programming model
  • Understand basic computer architecture
  • Understand basic operating system concepts

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, basic scheduling & multicore
  5. dynamic buffers for file I/O, memory mapped I/O
  6. fork, clone, shared memory, basic locking, multicore programming
  7. sockets, netcat (TCP mainly, UDP optional)
  8. libraries, linking, C->assembly, function calling conventions, ltrace, strace