OMSCS 2026 Spring (春学期) では Introduction to Operating Systems を受講した。
Overall
OMSCS の中でも特に有名で評価の高いコースの一つとして知られている Introduction to Operating Systems (GIOS) を、8 つ目の授業として受講した。受講当初から候補として考えていたが、難易度・負荷ともに高いというレビューを多く目にしていたため、実際に受講するまでは躊躇していた。しかし受講を終えてみると、OS に関して非常に深く学ぶことができ、満足度の高い授業となった。
CS 6200: Introduction to Operating Systems
Content
講義の内容は、文字通り OS の基礎を体系的に学んでいくものであった。スレッドとプロセスの違い、 それらをどうスケジューラで実行していくか、IO 処理を効率化するためのメモリ管理といった、普段利用しているシステムの根幹となる OS の概念を前半で扱った。後半は分散システムに移行し、分散ファイルシステムを中心として、昨今の様々なシステムで活用されている分散技術の導入部分を学んだ。 課題はプログラミング課題が 3 つ (Project 1、3、4) と、中間試験・期末試験であった。なお、Project 2 が存在しないのは過去の経緯によるものとのことである。
Assignment
課題に関しては、指定された言語で要件に沿って実装を行うものに加え、レポートの作成が求められた。それぞれの課題で、実装方法・設計選択の理由・テスト中の発見と修正といった内容をレポートとしてまとめた。
Project 1
C 言語を用いたクライアント・サーバー構成の課題であり、C 言語の導入も兼ねた内容となっていた。ファイルシステムを模した形でクライアントとサーバーを構成し、その後マルチスレッドで動作するよう拡張していくという流れであった。 あらかじめある程度構成されたコードが提供されていたが、ハンドラの仕組みに慣れておらず、提供されたプログラムがどのように実行されるか、どこを修正すべきかを把握するのに時間を要した。また、マルチスレッド化に伴う競合状態の管理にも気を配る必要があり、慎重に実装を進めた。Project 3
こちらもクライアント・サーバー構成が基本となっており、Project 1 と近しいベースを持つ課題であった。そのため、Project 1 でハンドラなど構成をしっかりと理解したことで、スタートはスムーズであった。 Project 1 との大きな違いは、IPC (Inter-Process Communication: プロセス間通信) を用いてプロセス同士がどのように通信するかといったアーキテクチャ設計に自由度がある点であった。それぞれの特徴を考慮し、どの IPC 方式を採用するかを検討するところから課題が始まっていた。 本課題では、サーバーが大きなデータを扱う性質から、共有メモリ (Shared Memory) を IPC 方式として採用し実装した。Project 4
他の課題とは毛色が異なり、gRPC を用いた課題であった。gRPC は Google が開発したリモートプロシージャコールの一つで、HTTP/2 をベースとし高速な通信が特徴である。gRPC を初めて触れる中で、定義ファイルからスタブが自動生成される仕組みを理解しながら、実装すべき箇所を特定して進めていった点が他の課題と異なる部分であった。実装するものとしては分散サーバーシステムの形をとっており、また本課題は他と異なり C++ での実装が求められた。gRPC は昨今の分散システムでも広く活用されているため、実際に手を動かして体験できた点は非常に価値があった。
Exam
試験は中間テストと期末テストの 2 回行われた。この授業は、試験の成績が最終評価に占める比重が高いため、試験対策が重要であった。
Midterm Exam
問題数は 10 問程度で、Closed Book 形式であった。問題数が少ない分、1 問あたりの影響が大きく、慎重に取り組む必要があった。事前にサンプル問題が共有されるが、本番もサンプルから大きく外れない形での出題であったため、サンプルをしっかりと解くことが重要であった。計算問題も含まれており、一部計算ミスにより、減点となったことが残念である。しかし、全体的な成績調整が行われたため、その点では助けられた。Final Exam
中間テストよりも問題数が多く、サンプル問題から一捻り加えられた形での出題であり、中間テストよりもスムーズにはいかなかった。後半の方が試験範囲が広いことから、問題数が多く、幅広いトピックへの対策が求められた。形式は計算問題や選択問題が中心であった点は中間テストと共通していた。 ちなみに、他の授業でも同様の傾向を感じたが、中間テストがシンプルであっても期末テストで難易度が上がるケースがあり、以前それで悔しい思いをした。そのため、今回は油断せずに念入りに対策を行った。
Paper
講義に関しては、以下の論文を中心に構成されていた。
Birrell, Andrew. An Introduction to Programming with Threads.
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-birrell-paper.pdfEykholt, J.R., et. al. “Beyond Multiprocessing: Multithreading the Sun OS Kernel.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-eykholt-paper.pdfStein, D. and D. Shah. Implementing Lightweight Threads.
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-stein-shah-paper.pdfPai, Vivek S., et. al. Flash: An Efficient and Portable Web Server.
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-pai-paper.pdfFedorova, Alexandra, et. al. “Chip Multithreading Systems Need a New Operating System Scheduler.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-fedorova-paper.pdfAnderson, Thomas E. “The Performance of Spin Lock Alternatives for Shared-Memory Multiprocessors.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-anderson-paper.pdfPopek, Gerald and Robert Goldberg. “Formal Requirements for Virtualizable Third Generation Architectures.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-popek-goldberg-paper.pdfRosenblum, Mendel and Tal Garfinkel. “Virtual Machine Monitors: Current Technology and Future Trends.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-rosenblum-garfinkel-paper.pdfBirrell, Andrew, and Bruce Nelson. “Implementing Remote Procedure Calls.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-birrell-nelson-paper.pdfNelson, Michael N., et. al. “Caching in the Sprite Network File System.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-nelson-paper.pdfProtic, Jelica, et al. “Distributed Shared Memory: Concepts and Systems.”
https://s3.amazonaws.com/content.udacity-data.com/courses/ud923/references/ud923-protic-paper.pdf
Reflection
評判通り、非常に学びの多い授業であった。OS はクラウドや仮想化など昨今の基盤技術とも密接に関係しており、それらをゼロから体系的に学べたことは大きな収穫であった。直前に受講した CS 6422 (Database System Implementation) でも、Mutex などを用いた並列化の実装に触れていたが、本授業ではその知識がさらに活きる場面が多かった。データベースに関しても OS の上で実装されるものなので、GIOS を受けて、DBI を受ける方が自然な流れだったかもしれないと思った。また、gRPC のような実際の分散システムでも使われている技術を実装まで体験できたことは、非常に良い経験となった。 分散システムをより深く学ぶには、発展的な授業として Advanced OS (CS 6210) などが位置づけられているようである。他の受講者のレビューを見ると、より高度な分散システムを扱っていく内容のようであるが、難易度はさらに高いと思われるため、受講には覚悟が必要そうである。 OMSCS を始める上で最初から選択肢に挙がるほど有名な授業ではあるが、簡単な授業ではないため、相応の準備は必要である。
まったくの余談ではあるが、Georgia Tech には架空の生徒として George P. Burdell という生徒がいるらしい。Wiki に記載されるぐらい有名な話のようではある。Copilot に聞いてみたところ、以下の回答が得られた。
| |