Advanced Operating Systems (Spring 2023) | SNU Systems Software & Architecture Laboratory

News

   Please upload your final term paper here by 11:55pm, June 18th (Sunday). Thanks and have a good vacation!

(Posted Jun 14, 2023)

   We will have a mini-conference from 7:00pm to 8:30pm on June 16th (Friday) at the lecture room #301-203. The presentation schedule is posted here. Some pizzas will be served from 6:30pm.

(Posted Jun 14, 2023)

   We plan to have the final exam from 11:00am to 12:15pm on June 13th (Tuesday). The scope is the lecture slides and the papers SSD1, SSD2, SSD3, SSD4, FS3, S1, MM1, and MM2 in the reading list.

(Posted Jun 6, 2023)

Schedule

The following schedule is tentative and subject to change without notice.

Day Topic Reading
3/2 Course Overview
3/7 Computer systems research I1
3/9 Introduction to operating systems H1
3/14 System calls
3/16 Storage
3/21
3/23 File systems FS1
3/28
3/30
4/4 LFS FS2
4/6
4/11 Flash memory
4/13 SSDs SSD1, SSD2
4/18 Invited Talk: NVMeVirt (by Jaehoon Shim @ SNU CSL) SSD4
4/20 Midterm Exam
4/25 New SSDs SSD3
4/27 F2FS FS3
4/30 Project Proposal Due
5/2 Processes and threads
5/4 Scheduler Activations S1
5/9
5/11 CPU scheduling
5/16 Cancelled
5/18 Cancelled
5/23 Virtual memory
5/25
5/30
5/31 Superpages (Make-up Class @ 9:30am) MM1
6/1 ARC MM2
6/6 National holiday
6/7 Linux virtual memory (Make-up Class @ 9:30am)
6/8 Virtual machines
6/13 Final Exam
6/16 Mini-Conference (7:00pm ~ 8:30pm @ 301-203)
6/18 Term Paper Due

Credit: Some of the slides are borrowed from the authors’ presentations.

Mini Conference

Time Title Team Name
7:00-7:10 Opening
7:10-7:20 Comparative Performance Evaluation of Neo4j and AgensGraph DBMSs under Various Storage Conditions DH_HY조 노효영
김대현
7:20-7:30 Analyzing Performance Characteristics of PostgreSQL and MariaDB on NVMeVirt 길조 한주희
최유진
7:30-7:40 Accelerating Graph-based Approximate Nearest Neighbor Search through Computational SSD GG조 심봉근
이하은
7:40-7:50 ROSE: Realistic Operational SSD Emulator 닮았조 김정훈
홍윤재
7:50-8:00 Break
8:00-8:10 Implementing Controller Memory Buffer (CMB) 셋이버티조 박큰산
오승택
최재원
8:10-8:20 Implementing SKHynix Gold P31 M.2 NVMe on NVMeVirt 많이느리조 김현수
심민규
8:20-8:30 NVMeVirt on M1/M2 사과먹조 김지환
이호용

Projects

Assignment #2: Implementing a new system call

Implement a new system call named getmemutil() whose system call number is 491. It returns an integer value n ranging from 0 to 10000 where n/100.0 represents the (physical) memory utilization in percentage.

The current memory usage information is already available via the special file /proc/meminfo. Using that information, you can compute the memory utilization as 1 - (the total amount of free memory / the total amount of memory). For more information on the /proc/meminfo, please refer to the kernel document in ./Documentation/filesystems/proc.rst. You may find the relevant code in the ./fs/proc/meminfo.c file useful during the implementation of the getmemutil() system call.

Also, you need to write a user-level program that prints the memory utilization every second by calling the getcmemutil() system call. Then, run an application of your choice (e.g., Firefox, Redis, RocksDB, or other memory-intensive application) along with the above program to obtain a graph that shows the variation in the memory utilization. Please attach the graph in your report with the explanation on your getmemutil() implementation.

  • Due: 11:55PM, April 2nd.
  • Submission: Upload your gzipped kernel patch file and your report file (in PDF) here

How to prepare your compressed patch file

You can prepare a compressed patch file as follows. Assume that the vanilla 6.1.14 kernel is in the ./linux-6.1.14-vanilla directory, while your modified kernel is in the ./linux-6.1.14 directory.

$ (cd linux-6.1.14-vanilla; make distclean)
$ (cd linux-6.1.14; make distclean)
$ diff -uprN linux-6.1.14-vanilla linux-6.1.14 > studentID.patch
$ gzip studentID.patch

Please double-check your patch file whether it contains some unnecessary materials. Also, please make sure that you should build your kernel with the default Ubuntu kernel configuration.

For more details on generating a patch file, please refer to here.

Assignment #1: Modifying Linux Kernel

Setup your Ubuntu environment in your own machine or in the Virtual Machine, and replace its kernel with the latest longterm support version of the Linux kernel, 6.1.14. You need to submit the screenshots of the booting message where you print your student ID and name, and also the result of the cat /proc/version command.

  • Due: 11:55PM, March 19th.
  • Submission: Upload your PDF file here

How to setup your Linux kernel

  • Install the latest VirtualBox 7.0.6 from https://virtualbox.org on your x86_64 machine

  • Download the Ubuntu Desktop 22.04 LTS Desktop version here and install it in your VirtualBox.

  • Download the reference Linux kernel 6.1.14 as follows:

    $ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.14.tar.xz
    $ tar xvf linux-6.1.14.tar.xz
    
  • Install prerequisite packages for kernel compiling

$ sudo apt install build-essential ncurses-dev libssl-dev flex bison libelf-dev zstd dwarves
  • Configure the new kernel using Ubuntu kernel’s config file

    $ cd linux-6.1.14
    $ cp /boot/config-$(uname -r) .config
    $ scripts/config --disable SYSTEM_TRUSTED_KEYS
    $ scripts/config --disable SYSTEM_REVOCATION_KEYS
    
  • Compile the Linux kernel

$ make all -j n   (replace n with the number of cores)
$ sudo make INSTALL_MOD_STRIP=1 modules_install
$ sudo make install

FYI: The tutorial video is available at https://youtube.com/c/openssds

How to submit your screenshots

  • Modify the Linux kernel to print your student ID and name in the middle of booting message and take a screenshot during booting. Please be creative when you print your name.

  • After the booting, please execute the following command and take a screenshot of its output.

    $ cat /proc/version
    
  • Paste those two screenshots into a word file or a powerpoint file, and upload the file using the Google Form.

Reference Platform

The following shows the reference platform used in this course.

Linux Kernel Resources

Reading List

Historical Perspective

Computer Systems Research

File Systems

SSDs

CPU Scheduling

Virtual Memory

Virtual Machines

OS Design

Course Information

When 11:00 - 12:15 (Tuesday / Thursday)
Where Lecture room #301-101
Instructor Jin-Soo Kim
Professor, Dept. of Computer Science and Engineering, SNU
Language English
Course Description This course covers advanced operating system concepts as well as a broad spectrum of research topics in computer systems. Quality research papers from SOSP, OSDI, ASPLOS, USENIX ATC, FAST, NSDI, EuroSys, etc. will be used as class materials. Students must be actively involved in reading, presenting, and discussing selected papers to understand the recent trends in operating systems and computer systems research. In addition, students are required to write up a term paper by the end of the semester as a result of their own study on a particular research topic.
References • Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces, Apraci-Dusseau Books, March 2015 (Version 1.00).
• Thomas Anderson and Michael Dahlin, Operating Systems: Principles and Practice, 2nd Edition, Recursive Books, August 2014.
• Andrew S. Tanenbaum and Herbert Bos, Modern Operating Systems, 4th Edition, Pearson Education, Inc., 2015.
Prerequisites • M1522.000800 Undergraduate Systems Programming or equivalent
• 4190.307 Undergraduate Operating Systems or equivalent
• 4190.308 Undergraduate Computer Architecture or equivalent
Grading Assignments: 10%
Exams: 60%
Term project: 30%
* Grading policy is subject to change
Teaching Assistant TBD