EE415: Operating Systems and System Programming
for Electrical Engineering (Fall 2024)

Syllabus

Class Overview
This course will deal with the design and implementation of the Operating System. Operating System is one of the most complex softwares. It is a software that manages hardware. It hides out the details of the hardware to the application. It allows the application to use the underlying hardware as if the hardware is exclusively allocated to it and sometimes it allows the multiple applications to share a certain object or hardware resource without any conflict. It also protects the system against unexpected system failure or against malicious attacks. Operating System is complex by nature. That is primarily because despite that it is a software, it needs to manage entirely different breed, the hardware. Operating System consists of several key concepts: process management, memory management, file system management and I/O subsystem. In this class, we will examine the details of each topic. Student will get exposed to implementation aspect of individual concepts. This course will be programming intensive.

Project Overview
We will use PintOS in the course project. There will be four projects in total. Two before mid term and two after mid term. Please do start early. Pintos is educational OS developed by the people in Stanford U. It is a good platform to implement the basic concepts of the operating systems. https://web.stanford.edu/class/cs140/projects/pintos/pintos.html. For the project, we need to submit the report and the link of your github (or bitbucket) to TA. The TA’s will clone your code and will run it if it runs well. Name your report file with the ‘student ID’_LastName_FirstName_Project#. (ex: 2016091111_Soonam_Kim_Project1.pdf)

Policies

  • There will be two exams (mid-term and final). Both of them are equally weighted.
  • There will be four course projects. The course projects can be done in group of maximum two. Communication skill is one of the most important skills for engineers. In practice, people work as a team with few exceptions. Sometimes, you need to listen to the others and sometimes you have to convince the others. When you turn in the code, you turn in the code individually and separately. The codes between the partners can be precisely identical or can be slightly different. Either way, you are required to turn in your own code.
  • Please do not post your code for the course project publicly. That will deprive other people from the opportunity to work on his own.

Textbooks and resources

  • Primary Textbook: “Operating Systems: Three Easy Pieces v1.0”, Remzi Arpaci-Duseau and Andrea C. Arpaci-Dusseau (http://ostep.org)
  • Korean version: “운영체제: 아주쉬운세가지이야기”, 역자: 원유집외 2명 (홍릉과학출판사)
  • Supplements:
    • Beginning Linux Programming 4th Ed., Neil Matthew and Richard Stones, July, 2008
    • Understanding the Linux Kernel, 3rd Ed.,Daniel Bovet and Marco Cesati, Nov, 2005
    • Linux Kernel Development, 3rd Ed., Robert Love, June, 2010
    • UNIX Internals: The New Frontiers, Uresh Vahalia, Oct. 1995
  • Prerequisite: C/C++, Introduction to Data Structures

Grading

  • Project & Homework(70%)
    • each project will be graded with 100 scale. (four projects sums up to 400 mark).
    • each homework will be graded with 20 point scale. (The total number of homeworks are not determined yet. If there are four homeworks, the total mark for homework will be 80.)
    • Total mark for project and homework for the above example will be 480. That will be scaled to 70% of the entire grade.
  • MidTerm (15%)
  • Final (15%)

Assignment Handout

  • Introduction Link
  • Project 1 (9/4~9/25) : Thread, Handout
  • Project 2 (9/25~10/20) : User program, Handout (Late submission is allowed by 10/27  with 20% score deduction)
  • Project 3 (10/20~11/20) : Virtual Memory, Handout
  • Project 4 (11/20~12/11) : Filesystem, Handout

Schedule (Tentative)

[Week1, 9/2] lecture: Introduction to Operating Systems, The Process, Process API
[Week1, 9/4] lab: Introduction to Pintos, Pintos Project configuration setup
[Week2, 9/9] lab: Alarm Clock
[Week2, 9/11] lab: Sequence Lock
[Week3, 9/16] No Class: National Holiday
[Week3, 9/18] No Class: National Holiday
[Week4, 9/23] lecture: Limited Direct Execution, Scheduling: Introduction, MLFQ
[Week4, 9/25] lecture: Scheduling – Proportion Share, Multiprocessor Scheduling, Address Spaces
[Week5, 9/30] lecture: Memory API, Address Translation, Segmentation
[Week5, 10/2] lab: Parameter Passing, System Call
[Week6, 10/7] lecture: Free-Space Management, Paging: Introduction
[Week6, 10/9] No class: National Holiday
[Week7, 10/14] lecture: Paging: Faster Translations, Smaller Tables, Mechanisms
[Week7, 10/16] lecture
[Week8, 10/21] Midterm 13:00 ~ 16:00
[Week9, 10/28] lecture: Swapping: Policies, Concurrency, Thread API
[Week9, 10/30] lecture
[Week10, 11/4] lecture: Locks, Lock-based Concurrent Data Structures
[Week10. 11/6] lab3: Paging & Stack Growth & Memory Mapped Files
[Week11, 11/11] lecture: Condition Variables, Semaphores
[Week11, 11/13] lecture
[Week12, 11/18] lecture: Common Concurrency Problems, I/O Devices
[Week12, 11/20] lab: Indexed and Extensible Files
[Week13, 11/25] lecture: Hard Disk Drives, RAIDs
[Week13, 11/27] lab: Subdirectories
[Week14, 12/2] lecture: File and Directories, File System Implementation
[Week14, 12/4] lab: Buffer cache
[Week15, 12/9] lecture: Locality and The Fast File System, Crash Consistency
[Week15, 12/11] lecture: Log-structured File Systems, Flash-based SSDs
[Week16, 12/16] Final Exam 13:00~16:00