EE415: Operating Systems and System Programming
for Electrical Engineering (Spring 2020)
Dept. of Electrical Engineering, KAIST

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)
Course will be lead via piazza (piazza.com/kaist.ac.kr/spring2020/ee415).
We will use this site as on-line discussion, Q/A and uploading all course materials. Please sign-up.

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%)

Schedule

• Week 1 lecture(3/16): Introduction to Operating Systems, The Process, Process API
lab(3/18): Introduction to Pintos, Pintos Project configuration setup, Alarm Clock
(Project 1 out: Thread, due on 4/8, 11:59 AM)
• Week 2 lecture(3/23): Limited Direct Execution, Scheduling: Introduction, MLFQ
lab(3/25): Priority scheduling
• Week 3 lecture(3/30): Scheduling: Proportion Share, Multiprocessor Scheduling, Address Spaces
lab(4/1): Advanced scheduler
• Week 4 lecture(4/6): Memory API, Address Translation, Segmentation
lab(4/8): Argument passing (Project 2 out: User program, due on 5/13, 11:59 AM)
• Week 5 lecture(4/13): Free-Space Management, Paging: Introduction
lab(4/15): Class Exempt (National Holiday)
• Week 6 lecture(4/20): Paging: Faster Translations, Smaller Tables, Mechanisms
lab(4/22): System call
• Week 7 lecture(4/27): Swapping: Policies, Concurrency, Thread API
lab(4/29): Denying write to executable files
• Week 8 Midterm (2020. 5. 4, 13:00 – 14:15) Monday (No lecture during midterm week)
• Week 9 lecture(5/11): Locks, Lock-based Concurrent Data Structures
lab(5/13): Paging (Project 3 out: Virtual Memory, due on 6/3, 11:59 AM)
• Week 10 lecture(5/18): Condition Variables, Semaphores
lab(5/20): Stack Growth
• Week 11 lecture(5/25): Common Concurrency Problems, I/O Devices
lab(5/27): Memory Mapped Files
• Week 12 lecture(6/1): Hard Disk Drives, RAIDs
lab(6/3): Indexed and Extensible Files (Project 4 out: Filesystem, due on 6/24, 11:59 AM)
• Week 13 lecture(6/8): File and Directories, File System Implementation
lab(6/10): Subdirectories
• Week 14 lecture(6/15): Locality and The Fast File System, Crash Consistency
lab(6/17): Buffer cache
• Week 15 lecture(6/22): Log-structured File Systems, Flash-based SSDs
lab(6/24): All questions answered, course summary
• Week 16 Final Exam (2020. 6. 29, 13:00 – 14:15) Monday (No lecture during Final week