ECE421 T, Operating Systems, Spring 2021
Tues, Thurs at 6:00 p.m. in LC 170

The Book

Documentation

Assignments

1 due: Fri 5th February. A simple program in BCPL.
2 due: Sun 21st February. A program that uses the heap.
3a due: Sun 14th March. Fully functional newvec and freevec, without chunk merging.
3b due: Sun 21st March. Fully functional newvec and freevec, with merging of neighbouring free chunks.
4 due: Sat 10th April. Disc operations.
5a due: Sat 1st May. Processes, part 1.
5b due: Sat 8th May. Processes, part 2.

Class History

Class 1  ‑ Tue 26‑1‑2021   Quick introductions, Syllabus, policies, etc.
BCPL documentation, we got up to section 15.
Class 2  ‑ Thur 28‑1‑2021 More BCPL, we're on point 34.
Class 3  ‑ Tue 2‑2‑2021 The end of studying BCPL
A little bit about the heap; remembering why we don't use gets() and why we do use strdup().
Class 4  ‑ Thur 4‑2‑2021 A picture and some out-of-date calculations.
Concurrency, Persistence, and Virtualisation.
Working out how malloc and free could work.
Class 5  ‑ Tue 9‑2‑2021 A scheme for newvec and freevec.
An alternative: the Buddy system.
Class 6  ‑ Thur 11‑2‑2021 The creation and destruction of stack frames: how functions are compiled.
Class 7  ‑ Tue 16‑2‑2021 Stack frames and worms.
Garbage collection.
Class 8  ‑ Thur 18‑2‑2021 Magnetic tapes as an introduction to disc technology: A single magnetic tape unit, and a bunch of them in a typical large installation.
A reminder about probability theory for disc and tape drives.
Blocks, checksums, the inter-block gap.
Magnetic drums, and one of them opened up, 1957 specs.
A disc drive from 1965, with specs.
Writing output to a "magnetic tape" in BCPL.
And reading from one, almost finished.
Class 9  ‑ Tue 23‑2‑2021 Finishing the tape-reading program.
ios.b: a proper files library,
(TTY = teletype = user's terminal).
Operations allowed on a disc.
Contiguous allocation - an unsatisfactory scheme for organising a disc.
Class 10  ‑ Thur 25‑2‑2021 Extending our files library to cover disc files (using contiguous allocation).
Class 11  ‑ Tue 2‑3‑2021 The program for assignment number 4.
Linked lists of blocks.
Single level index file format.
Partitions and clusters.
Access times, trade-offs with memory usage.
Two level indexes.
Class 12  ‑ Thur 4‑3‑2021 3 and 4 level indexes without and with clusters,
Variable level indexes,
I-nodes, hard and soft links,
NTFS runs,
A quick look at FAT-16.
Class 13  ‑ Tue 9‑3‑2021 A realistic modern approach to I-nodes.
What fsck does.
Journalling file systems.
Class 14  ‑ Thur 11‑3‑2021 ReiserFS - a quick look.
A quick exploration of RAID, disc failure modes, and SSDs.
Class 15  ‑ Tue 16‑3‑2021 Device drivers.
Handling interrupts, the first example.
Handling keyboard interrupts properly: a little program.
Class 16  ‑ Thur 18‑3‑2021 A problem with kbbadd and kbbremove.
Shared resources and critical sections.
The mutex, P( ) and V( ).
Implementing P and V, the atomic test and set operation.
Single user devices: card reader, (codes), line printer, graph plotter.
An example of deadlock.
Class 17  ‑ Tue 23‑3‑2021 The dining philosophers.
Some more thoughts on implementing newvec and freevec.
Class 18  ‑ Thur 25‑3‑2021 "Off-line" processing, ordering resources, the butler is a semaphore.
Intel's x86 interlocked instructions.
Mutual exclusion through software: A, B, C, D, E = Dekker's algorithm, F = Peterson's algorithm.
Monitors.
Mercury delay lines, again, Nickel delay line.
Class 19  ‑ Tue 30‑3‑2021 Core Memory: C2, C3, C4, C5, C6, C7.
Base and limit address translation, segmented memory.
Page tables, either too big or too small, difficult to get right.
Class 20  ‑ Thur 1‑4‑2021 A two level index for page tables gets the sizes just right.
Introducing Intel's paged virtual memory method.
Illustrations of a system running with virtual memory.
Under the emulator, making VM really happen, here's the plan.
Class 21  ‑ Tue 6‑4‑2021 Now the big thing, Build the page tables, turn on VM, and run something in user mode.
Reminder about programming with processes under unix.
Class 22  ‑ Thur 8‑4‑2021 Looking at a real memory map on rabbit.
The life-cycle of a process under unix.
A hint at a way of starting a process.
Timesharing between two threads.
Class 23  ‑ Tue 13‑4‑2021 A serious page map, and its implementation: vm5.b, os5.b, usr5.b.
os5.b improved, dealing with page faults in the stack area.
Class 24  ‑ Thur 15‑4‑2021 Creating a virtual machine, part one.
Class 25  ‑ Tue 20‑4‑2021 Virtual machines part 2: interrupts, system mode, virtual memory.
Class 26  ‑ Thur 22‑4‑2021 Code generation, our starting point,
and where we got to.
Class 27  ‑ Tue 27‑4‑2021 Two more programs to work on: one, two.
Nested lets: where we got with that, and here it is corrected.
loops and conditionals, the switch statement.
Here is the final version of the program.
Class 28  ‑ Thur 29‑4‑2021 Code generation for whole functions.
A little bit about distributed file systems.