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 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. |