EEN521 T, Operating Systems, Spring 2014
Tues, Thurs at 5:00 p.m. in LC130

The Book

Documentation

Assignments

email to grader521 at rabbit.eng.miami.edu, include typescript/screenshot.
     1   due   Thursday 30th January 11:59:59.9 p.m.      A recursive function properly using stack frames.     
2   due   Thur 20th February An interrupt based input system.
3   due   Tues 4th March Basic data structures in BCPL.
4   due   Tues 25th March newvec and freevec.
5   due   Tues 15th April Simple file system.
6   due   Mon 31st March Design for full file system.
Tues 22nd April - Last day for submitting assigments already due.
7   due   Sat 26th April Full file system.
8   due   Mon 5th May Multiprocessing.
The grader's reminders page.

Class History

Class 1  ‑ Tue 14‑1‑2014   Quick introductions, and a taste of two of the mysteries to be addressed: disc file systems and virtual memory.
Class 2  ‑ Thur 16‑1‑2014 How computers work.
All the instruction set, in detail.
Tiny example of entering, assembling, and single-stepping through a program
Class 3  ‑ Tue 21‑1‑2014 Effective assembly language programming - keep it high level until the last minute.
Big expressions and global variables are easy,
So are just about all the statements you could want.
Class 4  ‑ Thur 23‑1‑2014 How functions work. The stack, stack frames, the frame pointer.
Recursion is automatic, you don't need to do anything to allow it.
Class 5  ‑ Tue 28‑1‑2014 Reading documentation is good.
Interrupts. System/user mode controlling everything. Two stacks.
Class 6  ‑ Thur 30‑1‑2014 Being practical with interrupts: first step - just a repeating timer,
now the added complication of interacting with a peripheral device.
Class 7  ‑ Tue 4‑2‑2014 Playing with packed strings.
Things to learn from magnetic tapes (picture A, B), a reminder about probability,
Blocks, CRCs, inter-block gaps: all very necessary, even for modern discs.
Class 8  ‑ Thur 6‑2‑2014 An interesting article on the unreliability of tape backups.
Magnetic drums, the next technological step: one, two, specs from 1957.
A disc from from 1963.
Contiguous allocation file systems, easy to implement, maybe viable for very small systems, but condense takes too long for anything large.
Partitions and clusters, the parable of the bigger disc with the smaller capacity.
Class 9  ‑ Tue 11‑2‑2014 Other file system structures, working out sequential and random access times, and costs of creating and enlarging files. Linked-list file organisation is quite bad. Meta-data: what goes in a header block; considering representations for dates and times. One Level Index is good and efficient, but only has a 51,200 byte maximum file size.
Class 10  ‑ Thur 13‑2‑2014 Clusters, effect on file capacity, effect of secret disc geometry. 2-, 3-, 4-, etc level indexes, analysing access times. The unix I-node way, variable level indexes, even zero is useful. Bad FAT-16.
Class 11  ‑ Tue 18‑2‑2014 Managing free space on discs: Bitmaps are terrible, Linked lists are terrible. One giant empty file is a good reuse of programmer resources. List of block numbers accessed like a stack with moving window copied into memory works well. Make it a circular queue with a window at each end and decovering accidentally deleted files is possible.
The rest of the story of the I-node, recovery when things go wrong.
Class 12  ‑ Thur 20‑2‑2014 BCPL documentation.
Class 13  ‑ Tue 25‑2‑2014 What primitive arrays are really like. Why you must never let a pointer to a local variable, array, or object escape. newvec, freevec, and data structures.
Class 14  ‑ Thur 27‑2‑2014 samples, in preparation for file system construction.
Class 15  ‑ Tue 4‑3‑2014 Dynamic (heap) memory management systems.
Class 16  ‑ Thur 6‑3‑2014 More advanced dynamic memory management methods.
Various kinds of memory: Mercury, again, Nickel, Ferrite one, two, three, four, five, six, seven.
Break
Class 17  ‑ Tue 18‑3‑2014 primitive memory segmentation. Four segments was a popular plan.
Paged Virtual Memory, each 4K page of memory individually translated to its own physical page. Swapping pages out to disc when memory is tight, individual page protection settings, no fragmentation, but associative memory is too expensive.
Class 18  ‑ Thur 20‑3‑2014 Fixes for second assembly language assignment due Sunday.
A little program that will be used to experiment with vm.
1: turn VM on, but make address translation have no effect.
2: just add one "unnatural" extra stack page,
Class 19  ‑ Tue 25‑3‑2014 3: Really examining the memory map, and working out how to handle a page fault.
How unix processes are created.
Class 20  ‑ Thur 27‑3‑2014 All about fork, creating processes, and the life cycle of a process. Process states, paging out, swapping out, killing zombies, COWs.
Class 21  ‑ Tue 1‑4‑2014 Cache basics: lines, partial associative addressing. TLB, how cache makes virtual memory efficient, the dirty bit, the accessed bit. Locality of access increases cache hits (matrix example).
The fork bomb. Copying /bin/sh and the setuid bit. Buffer overrun worms.
Class 22  ‑ Thur 3‑4‑2014 4: We realised that there is also a system frame pointer.
5: Now we're in user mode, HALT is restricted.
6: Perfect for one page of stack. Now we need a page fault handler.
7: An attempt. Oh no, page table entries are all physical addresses.
8: That did the trick.
and our first thoughts on inter-process communications. Shared memory causes troubles.
Class 23  ‑ Tue 8‑4‑2014 The exact nature of the race condition, critical sections, atomic operations, the basic semaphore (now usually called a mutex), a selection of interlocked instructions (atomic test and set) that are used to implement semaphores. The mostly pointless derivative counting semaphores. Card readers and line printers, Deadlock.
Class 24  ‑ Thur 10‑4‑2014 The dining philosophers as a model of sharing resources within an operating system. Only with complete knowledge of the software can deadlock sometimes be predicted. Butler, Footman, Forkboy, Fork Monster, Murderer, T.A., off-line processing.
Class 25  ‑ Tue 15‑4‑2014 Monitors little, big.
Java's synchroniZed.
Coroutines.
Threads, a basic pthreads example.
Class 26  ‑ Thur 17‑4‑2014 Tiny little low-power processors: graphics transformations and sorting networks.
Linking: static (the files we explored - mylib.b and useit.b) and dynamic (dlls, etc).
Class 27  ‑ Tue 22‑4‑2014 Latest possible submission date for anything already due.
Making multi-processing work.
Class 28  ‑ Thur 24‑4‑2014 More about multiprocessing, and 15 minutes on ReiserFS, the file system muderers prefer.

Here are all the source files in .zip format. Read "readme.txt" before trying to do anything.
My scripts use CC and cc for compiling, your system may use g++ and gcc or something else, and if "." isn't in your path, you'll need "./" in front of some commands.