CIS-4020 (Operating Systems) Home Page
This is the home page for Peter Chapin's CIS-4020 course notes for the Fall 2024 semester. Here
you will find class handouts, slides used during the lectures, homework assignments, and links
to other references of interest.
The lectures will be via Zoom.
- The course syllabus gives an overview of the course and
its content, lists course resources, and describes the grading policy and related issues.
- The texts are in a curated
playlist in the O'Reilly Collection. Use your VSC credentials to access it.
- The homework submission area and grade book are on Canvas. All other course resources are
here.
- I have prepared a document that gives hints about how to work effectively with a Linux terminal.
- DevBox and HackBox. These are Linux virtual machines
running Ubuntu 24.04 that support this course. Download links are below. The virtual machines
below are known to work with VirtualBox 7.0.20 and its associated
extension pack. They are likely to work fine with other versions of VirtualBox close to that.
- During part of this class, you will work with a file system driver for Linux called GenericFS.
Topics
The lectures for this course will be taught via Zoom. The labs are face-to-face.
- 2024-08-26.
Introduction to the class. Overview of DevBox & HackBox. Described the distinction between
monolithic kernels and microkernels.
- 2024-08-28.
Described more details about networking in DevBox & HackBox. Demonstrated
cscope and gave a whirlwind tour of the Linux kernel source.
- 2024-09-04.
Discussed system calls, the /proc file system, and the strace command.
- 2024-09-09.
Discussed Lab #3 on counting system
calls. Demonstrated the skeleton module.
- 2024-09-11.
Reviewed selected C features of interest to OS developers.
- 2024-09-16.
Discussed processes. Talked about the importance of multiprogramming.
- 2024-09-18.
Continued discussing processes.
- 2024-09-23.
Discussed the Lab #4 slides. Introduced locking.
- 2024-09-25.
Finished discussing locking. Discussed the producer/consumer problem.
- 2024-09-30.
Discussed the fork_demo.c sample. Introduced scheduling.
- 2024-10-02.
Reviewed revised fork watcher slides. Described
the scheduling simulation lab and its
simulation results.
- 2024-10-07. No class (Vacation).
- 2024-10-09. No class (Vacation).
- 2024-10-14.
Introduced memory management.
- 2024-10-16.
Continued discussion of memory management.
- 2024-10-21.
Demonstrated the memory_demo.c program and discussed
various tools on Linux for measuring and monitoring memory consumption. Also introduced GenericFS.
- 2024-10-23.
Demonstrated the shared_memory_server.c and
shared_memory_client.c programs. Started
discussing the structure of POSIX-like file systems.
- 2024-10-28.
Described the organization of the GenericFS project. Started discussing the GenericFS file
system layout (overall partition organization, inodes, free maps).
- 2024-10-30.
Demonstrated the memory_mapped_file.c program.
- 2024-11-04.
Demonstrated the FileVector.hpp library unit. Started
describing the main file of the driver (super.c).
- 2024-11-06.
Discussed the upgrade of the GenericFS driver from kernel 5.x support to kernel 6.9.3 support.
Introduced the correspondence between the GenericFS driver and the ext2 driver.
- 2024-11-11. No class.
- 2024-11-13.
Discussed various advanced file system features and how they might be implemented.
- 2024-11-18.
Discussed file system consistency checking at both the block and inode levels.
- 2024-11-20.
Discussed the GenericFS lab. Introduced microkernels, QNX, and distributed operating systems.
- 2024-11-25. No class (Vacation).
- 2024-11-27. No class (Vacation).
- 2024-12-02.
Discussed Homework #10 and real-time operating systems.
- 2024-12-04.
Further discussion about the GenericFS lab.
- 2024-12-09.
Described several QNX samples.
- 2024-12-11.
Gave an overview of Phoenix.
Slides
Samples
- The "Hello, World" program in assembly language demonstrating the use of raw system calls:
x86_64 Linux, arm64
Linux, arm64 macOS.
- The fork_demo.c sample demonstrates how the
fork
function can be used in application space to create a new process.
- The memory_demo.c sample demonstrates how a C program
can allocate more memory than is physically available. The comments in the file mention which
tools you can use (on Linux) to view the effects of the program when it pauses.
- The shared_memory_server.c and shared_memory_client.c samples demonstrate how
to use POSIX-style shared memory in C programs.
- The memory_mapped_file.c sample demonstrates
how to use the
mmap
function to make the contents of a file appear in a range of
virtual memory locations.
- The FileVector.hpp sample demonstrates memory-mapped
files using the Windows API. The code is in C++ and attempts to make a memory-mapped file of
"plain old data" (POD) structures behave as an ordinary C++ library vector.
- In class, I discussed several small QNX sample programs that you might
find interesting to explore.
Homework
- Homework #01. (Due: 2024-09-06) System Calls
- Homework #02. (Due: 2024-09-27) The Sequence File API
- Homework #03. (Due: 2024-10-25) Selected C Topics.
- Homework #10. (Due: 2024-12-13) File System Layout
Labs
The lab set is summarized in the lab summary document, along with links
to specific lab handouts and supporting code samples.
Resources/Articles
The following are links to relevant resources for this class.
LaTeX Resources
For this class, you will be required to use the LaTeX typesetting system to prepare your lab
reports. I encourage you to consider using LaTeX for your other formal writing needs even in
other classes. This section includes references to materials you can use to help learn the
system.
- Lab Report Template. This is a LaTeX document with
appropriate sections for CIS-4020 lab reports. To create your own report, copy this document
and fill in the sections as needed.
- The Not So Short Introduction to
LaTeX2e gives a good overview of LaTeX for beginning and intermediate users.
- Using LaTeX at VTC. This archive contains a document
describing how to install LaTeX and giving examples of how to format various constructs of
interest to the documents you will prepare for this class.
- This mini-lecture on using LaTeX describes the
demonstration document in the sample archive and how to use
VSCode for LaTeX development.
- The MiKTeX website. From here you can download the MiKTeX
installer for Windows. If you use Linux you can almost certainly install LaTeX from your
distribution's package manager (look for the "texlive" and/or "latex" packages).
- The Intel64/IA-32 Software
Developer's Manual provides detailed information about the Intel x86_64 processors.
Last Revised: 2024-12-12
© Copyright 2024 by Peter Chapin <peter.chapin@vermontstate.edu>