121 lines
3.6 KiB
Plaintext
121 lines
3.6 KiB
Plaintext
The (potential) OS/161 assignments
|
|
----------------------------------
|
|
|
|
OS/161 is used by a wide variety of courses at a wide variety of
|
|
schools, no two of which have the exact same set of assignments and
|
|
assignment requirements. The code base has been (to the extent
|
|
reasonably possible) structured to allow this and not assume any
|
|
particular structure or (particularly) numbering of assignments.
|
|
|
|
That said, in various places comments and documentation must (to be
|
|
helpful, at least) refer to particular assignments and things that are
|
|
(typically) done in particular assignments. These are written in
|
|
fairly general terms. This file is provided as an index for those
|
|
terms.
|
|
|
|
*** Always refer to the course materials provided by your ***
|
|
*** instructors when trying to figure out what functionality ***
|
|
*** you are and are not required to implement. ***
|
|
|
|
Note that the OS/161 code base you are given may include solutions for
|
|
some parts of the assignments described below, or even some whole
|
|
assignments.
|
|
|
|
Also note that the text below refers to assorted technical terms and
|
|
OS concepts without much or any explanation; you may not be familiar
|
|
with most of them at first and that's perfectly ok.
|
|
|
|
|
|
OS/161 is intended to support six basic assignments, most of which can
|
|
be divided into smaller pieces. These six assignments are:
|
|
|
|
- synchronization;
|
|
- basic system calls;
|
|
- virtual memory;
|
|
- basic file system functionality;
|
|
- file system recovery via journaling;
|
|
- some additional piece of OS functionality.
|
|
|
|
|
|
Synchronization.
|
|
|
|
This assignment has (potentially) three parts:
|
|
- Implement (sleep) locks and condition variables.
|
|
- Implement reader-writer locks.
|
|
- Solve some synchronization problems of the dining-philosophers
|
|
variety.
|
|
|
|
|
|
Basic system calls. (And processes.)
|
|
|
|
This assignment has (potentially) up to six parts:
|
|
- Implement file tables and open-file objects.
|
|
- Implement the basic system calls for files, normally:
|
|
- open()
|
|
- dup2()
|
|
- read()
|
|
- write()
|
|
- lseek()
|
|
- close()
|
|
- chdir()
|
|
- __getcwd()
|
|
- Implement processes, process IDs, and the basic process system
|
|
calls, normally:
|
|
- getpid()
|
|
- fork()
|
|
- _exit()
|
|
- waitpid()
|
|
- Implement the execv() system call.
|
|
- Implement a scheduler.
|
|
|
|
|
|
Virtual memory.
|
|
|
|
This assignment entails replacing a provided very simple virtual
|
|
memory system with a real one. This possibly includes providing the
|
|
sbrk() system call. It does not split into parts readily.
|
|
|
|
|
|
Basic file system functionality.
|
|
|
|
This assignment has (potentially) up to five parts:
|
|
- Add more system calls for file system operations, typically taken
|
|
from these:
|
|
- sync()
|
|
- mkdir()
|
|
- rmdir()
|
|
- remove()
|
|
- link()
|
|
- rename()
|
|
- getdirentry()
|
|
- fstat()
|
|
- fsync()
|
|
- ftruncate()
|
|
- flock()
|
|
although others may be chosen.
|
|
- Implement a buffer cache.
|
|
- Replace a biglock with fine-grained locking in the VFS layer
|
|
and/or the SFS file system.
|
|
- Add support for subdirectories to SFS.
|
|
- Implement cross-directory rename in SFS.
|
|
- Implement larger files in SFS.
|
|
|
|
|
|
File system recovery via journaling.
|
|
|
|
This assignment has (potentially) five parts:
|
|
- Implement an on-disk container for a file system journal.
|
|
- Instrument the buffer cache to support write-ahead journaling.
|
|
- Design a system of journal records suitable for recovering the
|
|
file system after a crash.
|
|
- Add code to SFS to issue these journal records.
|
|
- Implement code to read the on-disk journal and recover from a
|
|
crash.
|
|
|
|
|
|
Additional projects.
|
|
|
|
There is a wide variety of things that can be done to build on the
|
|
above assignments. None are listed here, because this file is not
|
|
the place for it.
|