This course introduces students to the programming aspects of operating systems. Topics covered include implementation of storage management, resource allocation, multi–processing, scheduling, synchronization, inter–process communication, and terminal I/O. Programming assignments are designed to enhance subject understanding, problem solving, and programming skills through hands–on experience on real–life–like problems.
Students who successfully complete this course will be able to
ICSI/ICEN 333 or equivalent with a grade of at least C.
You are expected to have a good understanding of programming basics, C, and Assembly.
There is no single textbook that covers everything discussed in this course. Therefore, we rely on multiple online resources (books, articles, and tutorials) which are available publicly or via the University’s network. You are required to read each session’s readings listed on the schedule before attending the class. Schedule of readings is given in the course schedule.
The course syllabus and schedule is available on the course webpage. Most of the tasks in this class will be handled via course GitHub organization including distribution of notes and homework assignments, assignment submission, and feedback. We will also use Blackboard for communication and for your grades.
If you have general questions about an assignment you should post it as an issue in the repository corresponding to the assignment. If have a question about your current solution and want us to take a look, you should create an issue in your individual assignment repository instead. Include a screenshot of your runtime environment as well as references to places in your code that you want us to check.
Your assignments will be automatically collected from your GitHub repositories at the time of the deadline. This helps you keep working and improving your submissions up until the deadline. Just make sure that you continuously keep your GitHub repository synced with your local version.
This course provides several opportunities for students to develop advanced writing, critical thinking, information literacy, and oral communication skills. Specifically, (i) students are required to provide proper documentation of their project in English using complete sentences, observing the usual rules of grammar, spelling, and punctuation, (ii) frequent interactive discussions in a variety of communication contexts (i.e., students–instructor and student–student interactions in teams) stimulate critical thinking, and promote oral communication skills, and (iii) students learn various ways in which information is organized and structured and the process of finding and using information. By examining information from resources available on the Internet, students learn to evaluate the quality of information and to use information ethically and professionally.
The following schedule is tentative and will be regularly updated. It is your responsibility to check the schedule regularly.
Note: “+” indicates an optional reading.
Date | Topic/Reading | Assignment Due |
---|---|---|
Jan 24 | Course Overview, Required Setup for Assignments | |
Module #1: Shell/Git | ||
Jan 29 |
Git
|
hw00 due Jan.28 (on Blackboard) |
Jan 31 |
Shell Basics, Unix File Structure & Permissions
|
hw01 due Feb.01 |
Feb 05 |
Shell Redirection, Expansion, Processes, & Environment
|
|
Feb 07 | Scripting the Shell | hw02 due Feb.11 |
Feb 12 |
File Search and Text Processing
|
|
Feb 14 | Exam #1 | |
Module #2: C Programming | ||
Feb 19 |
C Types, Operations, Control Structures, & Complex Data Types
|
|
Feb 21 |
C Functions, Advanced Pointer Concepts, & cmd line arguments
|
|
Feb 26 | C I/O | |
Feb 28 |
Multi-File Programs, GCC, & Make
|
hw03 due Mar.4 |
Mar 05 |
Debugging
|
|
Mar 07 |
Compiling, Assembling, & Linking
|
hw04 due Mar.11 |
Mar 12 | Recap & Review | |
Mar 14 | Exam #2 | |
Mar 19 | Spring Break | |
Mar 21 | Spring Break | |
Module #3: POSIX/Linux Programming | ||
Mar 26 | System Calls | |
Mar 28 | File I/O | |
Apr 02 |
Processes
|
|
Apr 04 |
Executing Programs & Signals
|
|
Apr 09 |
Pipes & FIFOs
|
hw05 due Apr.08 |
Apr 11 |
Basic Networking
|
|
Apr 16 |
Advanced Networking
|
|
Apr 18 |
Threads
|
hw06 due Apr.22 (optional) |
Apr 23 |
Threads (cont.)
|
Project progress report due Apr.23 |
Apr 25 | Recap & Review | |
Apr 30 | Exam #3 | |
Module #4: Misc./Advanced Topics | ||
May 02 |
Rust
|
|
May 07 | Project Demos | Project submission and demo, scheduled May 6-16 |
For all assignments and papers, you must submit your own work, except where collaboration is explicitly permitted or required. Also, you must properly cite any resources from which you borrow ideas and clearly distinguish them from your contributions.
Please do not disrupt the class by entering late or leaving early without instructor’s approval.