Skip to content

The implementation of a simple operating system bases on the os161 template.

Notifications You must be signed in to change notification settings

nguyenduchien1994/os161

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

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

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.

About

The implementation of a simple operating system bases on the os161 template.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published