Graded assignments

Due dates for assignments that require work to be turned in are posted on the calendar.  Use the ICAL address to add this to a personal calendar if you wish.

  1. Demonstrate C or C++ proficiency.  This assignment is due January 30th for students enrolled in the class as well as anyone that is added from the waitlist.  For this assignment, there are no late submissions, no extensions.  Your output must match the sample output precisely (use the UNIX command diff to compare).
    General questions that students have been having

    Code design

    The purpose of this assignment is for you to learn about pointers.  We specifically indicated that you should use an array of 27 pointers in your dictionary nodes and we expect you to follow this design.  As you will see later in the semester, this is very relevant to data structures that are used in modern operating systems.  In general, we specify interfaces as it helps to prepare you for working in large teams where interfaces between subsystems may be negotiated and failing to follow an interface can lead to program faults.  If you don’t follow the interface precisely in this assignment, you will not lose points for it if the alternative is a good design, but you must implement the pointer tree data structure.

    Connecting to Edoras and using graphical tools

    Remember that there is a course FAQ that addresses many questions that you might have about he course.  Please consult it.  In particular, if you do not know how to connect to edoras, you need to read about secure shell clients in the FAQ.  If you would like to use graphical user interface editors, you will need a windowing client that supports X11.  If you have a linux system (and I would assume MacOs, but I do not  have a machine to test this), this should work out of the box and when you secure shell to edoras, use the -Y option:  ssh -Y which enables the forwarding of X11 windows.  For  Windows machines, see the entry on X-Win 32 that is in the FAQ.  Trying to use graphical user interface editors such as gedit or debuggers such as cdtdebug will not function unless you do this.  Please note that X11 was never designed to run over wide area networks, and if you are not on campus you are likely to see some lag.  On a slow network, you should probably turn on compression when you connect by ssh:  ssh -Y -C

  2. Read the article on pair programming on Blackboard in course documents.  Then take the assignment 2 quiz available on blackboard.  You may look at the article or any notes that you took on the article.  You may even take the quiz in tandem with your pair programming partner.
  3. Overview of operating systems and processes
  4. Scheduling and memory
  5. Page replacement & interprocess communication
  6. File systems and devices

The grader for this class is Mr. Saumil Shah <sshah7 “at”>.  He has office hours M 12-1 and Th 1-2 in GMCS 403 .

There is a frequently asked question list for this course that addresses many issues that students have with respect to this class.  Please check the list when you experience problems, the answer may be in there.


I have noticed that some students learn better when the course is taught from slides whereas other students benefit from the slower pace of using the board.  We will use a combination of techniques in this course.  When slides are used, they will be posted here.

Please note that all dates except the final exam are tentative.  My primary concern is that you master the material and the schedule may be adjusted in either direction to optimize comprehension and scope of material.

Week of:

  • Thu Jan 23 – Introduction (1.1 – 1.8)
  • Tue Jan 28 – Programs:  generation, linking, user & system space
  • Tue Feb 4 – Programs contd., Processes and threads (2.1-2.2): states, process switching and preemption, blocking and interrupt handlers, scheduling
  • Tue Feb 11 – Processes and threads contd.
  • Tue Feb 18 – Memory management (3.1-3.2): fixed & dynamic sized partitions.  Virtual Memory: paging (traditional and inverted 3.3), segmentation (3.7).
  • Tue Feb 25 – Virtual memory (3.4-3.6): Demand paging, page faults and replacement strategies, Belady’s anomaly, principle of locality, working sets, thrashing, etc.
  • Tue Mar 3 – Virtual memory contd.
  • Tue Mar 10 – Synchronization (2.3): Race conditions, deadlock, critical sections, etc.  Exam I: Thursday, March 12th
  • Tue Mar 17 – Synchronization contd.
  • Tue Mar 24 – Interprocess communication:  Shared memory and messaging (2.3.8).
  • Tue Mar 31 – SPRING BREAK 3/30 to 4/3
  • Tue Apr 7  – File systems (4.1-4.4):  allocation, free space management, organization, links, etc.
  • Tue Apr 14 – File systems contd.
  • Tue Apr 21 –  I/O Management (5.1-5.6) – Synchronous vs. asynchronous, secondary storage scheduling and structure
  • Tue Apr 28 – I/O Management continued
  • Tue Cinco de Mayo (May 5) – Catch up, optional topics, May 7th is the last day of classes.

Exam II – Tuesday, May 12, 15:30 – 17:30 (3:30 PM – 5:30 PM) in our usual class room.  No makeup exams will be given for students leaving town early without an excused absence.

Frequently Asked Questions

There is a frequently asked question list for this course that addresses many issues that students have with respect to this class.  Please check the list when you experience problems, the answer may be in there.



  • Tanenbaum, A. S. and Bos, H. (2015). Modern Operating Systems. Boston, MA: Pearson.

If you need to brush up on C or C++, the following books are good, but assume that you know a bit about programming already (as you should, or you would not be in an upper-division computer science course):

  • Stroustrup, Bjarne (2018).  A tour of C++.  Boston, MA: Addison-Wesley.
  • Kernighan, Brian W. and Ritchie, Dennis M. (1988).  The C Programming Language, 2nd ed. Englewood Cliffs, NJ: Prentice Hall.  This book is a bit long in the tooth and does not cover modern variants such as C11.  For a more modern book, try: Deitel, P. and Deitel, H. (2013). C for Programmers with an Introduction to C11.   Englewood Cliffs, NJ: Prentice Hall.   Deitel and Deitel is freely available through the SDSU library as a Safari e-book.

There are many other programming resources, many of which are in our library.

Programming environment 

Programming exercises will be implemented using either C or C++ on  Edoras accounts will be  issued to you via e-mail or in class. Edoras is a CentOS 7 linux server.  You can connect to it via a secure shell or X Window client (see FAQ).  If you prefer to develop on your own machine, you are welcome to do so, but your program must execute correctly on edoras.  Excuses of “but it worked on my machine” will not be accepted, so if you develop elsewhere, plan to leave time for any migration problems that might arise.

You will be using the GNU C or C++ compiler (gcc or g++).  If you wish to edit from a command line shell (not a windowing environment), emacs, vim, and nano, are your best bets with nano being the simplest editor.  If you are using an X11 environment, you can use emacs, gedit, or nedit.  See the edoras web site for a list of installed software.

It is highly recommended to take the time to learn how to use a symbolic debugger as it will make your life simpler.  The GNU debugger (gdb) is available on edoras.  A tutorial by Manasij Mukherjee is available. If you would like to use a graphical interface, I have installed the eclipse stand-alone debugger in my account:

> ~mroch/cdt-stand-alone-debugger/cdtdebug -e executable-name followed by command line options for the program (if any).

About the course:

Course meets Tu and Th from 4:00 to 5:15 in COM-207.

This is a required course for computer science majors that teaches you how to design, implement, and understand essential software services that interface between underlying hardware and application programs.

Upon successful completion of this class, students should be able to:

Afer successful completion of the course, students will be able to:

  • Understand the role of operating systems as resource managers for computer hardware and describe the fundamental structure and design of these systems.
  • Implement, apply and/or evaluate algorithms associated with resource management such as coordinated access to shared memory buffers, protection of user and system data, and ensuring system stability.
  • Develop more complex programs in C or C++ by applying advanced techniques such as making function calls through variables pointing to functions.
  • Work collaboratively using pair programming techniques.
  • Comprehend and reflect on the impact of computer software on the health and well-being of society through discussion of system-critical applications and the need for more comprehensive testing  (e.g. fly by wire aviation systems, pace-makers).
  • Engage in operating systems design projects.

The prerequisites for this course are: CS 310, CS 370, and demonstrated programming competency in C or C++.

Please see syllabus for detailed course policies.  Your grader for this class is Saumil Shah.  He may be contacted via e-mail at sshah7 with the standard following it.