Please note that schedule dates are tentative. Our primary concern is that you master the material and the schedule may be adjusted to optimize comprehension and scope of material.
- Jan 18 – Overview of operating systems (1.1-1.8): definition, history, hardware, architectures and concepts, system calls, structure, C/C++ loading & linking.
- Jan 25 – Overview continued.
- Feb 1 – Processes and threads: (2 – 2.2, 2.4): states, process switching and preemption, blocking, interrupt handlers, scheduling, implementation. Feb 4: Quiz 1.
- Feb 8 – Processes and thread continued (Fri 2/12 R&R Day).
- Feb 15 – Memory management on bare hardware using fixed and dynamic sized partitions (3.1), abstraction (3.2).
- Feb 22 – Virtual memory (3.3), overcommitting memory and page faults and replacement algorithms (3.4). Feb 25: Quiz 2.
- Mar 1 – Design and implementation issues (3.5-3.6) and segmentation (3.7).
- Mar 8 – Synchronization (2.3-): Race conditions and deadlocks (2.3.1), critical regions (2.3.2, 2.3.3), semaphores (2.3.5), producers and consumers problem (2.3.4-2.3.5), monitors (2.3.7), barriers (2.3.9), message passing (2.3.8). (Mon 3/8 R&R Day).
- Mar 15 – Synchronization contd. Mar 18: Quiz 3.
- Mar 22 – Synchronization contd., Deadlocks: resources (6.1), conditions (6.2), ostrich (6.3), dining philosophers problem (2.5.1).
- Mar 29 – Disks (5.4). (Tue 3/30 No class – R&R Day, Wed 3/31 Campus closed: César Chávez day)
- Apr 5 – File systems: files (4.1) directories (4.2), implementation (4.3).
- Apr 12 – File systems contd: management and optimization (4.4). Apr 13: Quiz 4 (Thu 4/15 No class – R&R Day).
- Apr 19 – I/O Management: principles of hardware (5.1) and software (5.2).
- Apr 26 – I/O Management: software layers (5.3), clocks (5.5), user interfaces (5.6).
- May 3 – The last week will either cover new material or catch up as needed. If time permits, elements of security will be covered: Security: Environment and OS security (9.1-9.2), access control (9.3), cryptography basics (9.5), authentication (9.6), exploits (9.7), insider attacks (9.8), malware (9.9), defense (9.10). May 6: Quiz 5.
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 exercises will be implemented using either C or C++ on edoras.sdsu.edu. 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++). Your programs must compile on linux with the version 4.8.5 compiler which is the default compiler on edoras and on gradescope which is where your programs will be executed once you have submitted them.
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, be sure to compile your files with the -g option to include debugging information. If you would like to use a graphical debugging interface, the eclipse stand-alone debugger has been installed:
> 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 via Zoom. The link for accessing the class can be found on Canvas.
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 @sdsu.edu following it.