Prerequisites
Cmp Sc 2700, Cmp Sc 2750, and Cmp Sc 3130

Textbooks
Bill Stallings. Operating Systems: Internals and Design Principles. Prentice-Hall , Englewood Cliffs, NJ. 2017.
Robbins/Robbins. Unix Systems Programming -- Communication, Concurrency, and Threads. Prentice-Hall. 2003.

Welcome

This is a course about operating systems and system programming. You will learn the algorithms to manage the internals of operatings systems, for example, interprocess communications, process scheduling, resource management, memory management, file systems, and I/O scheduling. The course will make you understand the iternals of operating systems and improve your programming skills through large projects. I use the lessons learned in operating systems in my research and consulting work to optimize the code that I write. I’ll like for you to improve your understanding of programming in C for tasks involving interactions with the system. We’ll do all programming in Linux using Gnu C compiler.

Teaching Philosophy

I believe in learning by doing things. Thus, I’ll be assigning a number of projects to simulate the algorithms you learn for operating systems. I’ll be happy to help any student who gets stuck while working on the project. You are welcome to get in touch with me via Zoom at any time, or send me a message to meet over zoom to discuss any issue related to class, or even related to your career.

Course Description

This course covers the structure of a generic operating system, considering in detail the algorithms for interprocess communications, process scheduling, resource management, memory management, file systems, and device management. It presents examples from contemporary operating systems. This course also requires practical projects implemented within a modern operating system or simulator environment.

Goals of the course

This course will deepen your understanding of system programming, building on the foundation acquired in CMP SCI 2750. You will use your programming skills to design and implement data structures and algorithms used in the innards of an operating system. The overall goals of the course are:

Topics

We'll discuss the structure of a generic operating system, with an emphasis on the algorithms and data structures needed to perform various tasks to manage processes, resources, memory, files, and I/O devices. We'll touch on the security aspects of the operating systems throughout the course. There will be extensive programming in C under Linux environment. The sequences of topics will be as follows (in that order):

Outcomes

At the end of this course, you are expected to be able to proficiently perform system programming tasks. You should also be able to explain different operating systems topics as outlined above. You should know the algorithms to achieve various tasks in operating systems and use the knowledge to improve the performance of your programs.

Online Learning

This is a fully online asynchronous course, meaning that there is no requirement for you to meet face-to-face or virtually. The course was designed this way to allow for maximum flexibility, so you can integrate learning course content into your busy lives. That said, this is not a self-paced course, meaning that you do have to turn in assignments and participate in discussions by specific due dates. These due dates will require good time management on your part. You will notice that with the magnitude of projects, you may get stuck on some point/bug and end up wasting a lot of time; so it is prudent to start on your projects early.

Time Requirements

This is an active class with online instruction complemented with extensive programming projects. Our course is a 3-credit hour course and requires 3 hours of your time each week to imbibe the online lectures in addition to the time it takes you to read the required materials, watch the videos, and complete the projects, with the programming projects taking up a lot of your time. That means that you need to plan to spend a minimum of 8 hours every week (possibly up to 10-12 hours a week) on activities related to this course. If you would like to explore how the online Canvas activities work, please consult the Online Canvas Overview course in Canvas where you can practice posting to a discussion board, take a practice quiz and more.

All correspondence shhould be made through your UMSL-provided email. Please use the class email list on Canvas for communications. Any unsigned email and email not in plain text will go unanswered by me. Please do no send me any attachments without talking to me first.

Projects

You will be given programming assignments, typically a set of programs every two weeks. Assignments will be due at 11:59pm on the day noted on the assignment. Assignments should be submitted on hoare and must execute properly on hoare for credit. You should start working on the projects as soon as they get assigned as some of them may get tricky. In the past, the students who have asked a lot of questions have scored better grades. Do not hesitate to ask a question in class, in my office, or over email, especially if you do not have an idea on how to start working on the project.

Grading

The grade will be based on programming assignments and three tests. All tests will be open book and open notes. Tests are non-comprehensive but may have a small overlap of material from one test to next. Each assignment must be meticulously documented and clearly identify its purpose, author, and date. I will like to read your submitted code; I should not have to figure it out. It will do you good if you peruse the Gnu Coding Standards. When you come to me for help with the code, or when you submit the code, make sure that you follow good indentation practices. If you miss any test or assignment without making prior arrangements, you will have a zero. When making such arrangements, please stop by my office instead of sending me an email. I will not give any make up tests. The distribution of grades will be as follows:

Programming assignments 40%
Three tests 20% each

Students taking the course in graduate standing will be required to show a greater mastery of the material. This can be shown by additional work and additional mastery shown in exams.

Anyone desiring an EXC grade after March 31, 2020 must be passing the course at that point to get EXC.

Failure to hand in any assignment will result in an automatic zero for that assignment. If some student is unable to hand in an assignment by the deadline, he/she must discuss it with me before the deadline. I'll encourage you to talk to other students regarding homework but you should not collaborate to the extent that two submissions are copies of each other. If you are found copying an assignment (from another student or internet), or if your submission has unreasonable similarity to another submission, you get a zero for that assignment automatically. A second offense will be reported to the University officials and students involved will face serious consequences. I may ask you to come to my office and explain your code to me; in case you are not able to explain the code to my satisfaction, I'll assign you a zero in that project.

Instructional Strategies

The instruction will follow the standard lectures using PDF notes as an aid. You are encouraged to ask questions if something is not clear or if you start to get lost in the lectures. If a project is not clear to you, you should ask questions to clarify that in class, in my office, or via email. If you do not have any idea on how to start working on a project, say so and I’ll try my best to help you. However, I’ll expect that you will ask project-related questions early on and not at the last minute when the project is due.

Miscellaneous

If you have any disability that requires an accommodation (as per UMSL policy), you must notify me in advance. If you cannot attend the class due to a religious holiday or a university-sanctioned event, please let me know in advance as well. For religious holiday, please also fill in this form. In case you are down with flu, stay absent from the class till you recover, and contact me via phone or email. I'll try my best to make accommodation for you in that case.

You will have an account on the Linux machine hoare.cs.umsl.edu in the CS department and you should use it for all assignments. All programs must be done in C. Any assignment that fails to run on hoare automatically gets a zero. You can access hoare from home by signing on to campus VPN, or by logging on to admiral and then, ssh'ing from there.

Exam Dates

Test 1 February 22, 2021
Test 2 March 26, 2021
Test 3 May 07, 2021

In case of class cancellation due to weather-related or other campus emergency on the day of a test, the test will be held in the following class period. For the third test, if the campus is closed on the scheduled date, the alternative date will be the day after the scheduled date; possibly in the conference room in the department.

Other important dates

January 27, 2020 Last day to enroll in the course
February 17, 2020 Last day to drop without receiving a grade
March 16, 2020 Last day to drop the course with instructor approval
April 20, 2020 Last day to drop the course with instructor approval

Anyone desiring an EXC grade after March 31, 2020 must be passing the course at that point to get EXC.

UMSL Course Policies

Participation (expectations)

Academic Integrity/Plagiarism

Mandatory Reporting

Access, Disability and Communication

Student Support and Services

Technical Support

Academic Support

Student Services

Departmental Tutoring

OS-related links