GIOS CS6200
2023秋から始まったセメスタが先週終了した。大学側のおすすめ通り、最初のセメスタはコースを一つだけ取ることにしていたので、前々から興味があったCS 6200: Introduction to Operating Systems(GIOS)を履修した。内容としては、OSに関連する基礎知識をリフレッシュするものであり、主に下記について学んでいく。
- Processes And Process Management
- Threads And Concurrency
- Scheduling
- Memory Management
- Inter-Process Communication
- Synchronization Constructs
- I/O Management
- Virtualization
- Remote Procedure Calls
- Distributed File Systems
- Distributed Shared Memory
- Datacenter Technologies
シラバスに書かれているように、3回の課題提出と中間・期末試験の結果で成績が決まる。 自分の場合、期末試験で思ったより成績が取れず最終的には80後半のポイントだったけれど、curveがありAの成績を取ることができた。Slackのコメントを見る限り、例年82-86あたりでcutoffされるそう。正確には計測してないけれど、およそ毎週15-20時間を何かしらこのコースのために費やしていた気がする。特に課題提出やテスト前は割とプレッシャーを感じていたので、初めてのセメスタを無事終えることができてそれなりの開放感を感じている。
課題について
課題は3つあって、最初の2つはC, 最後の課題はC++で実装が必要。具体的な内容は書かないが、multi threaded server/client, IPC, RPC and distributed file systemを実装する。個人的にはIPCの実装が一番面白くて、実装アプローチにも割と選択肢があり楽しく考え・実装することができた。
一方で、distributed file systemの実装は決められたものを実装する感が強くて、仕事感を感じてしまいそこまでのめり込むことができなかった。
いずれのプロジェクトもreadmeを書く必要があり、そこにはデザインの背景、code flow、テストについての説明が求められるのだけれど、これが割と骨の折れる作業で大変だった。それでも、プロジェクト理解の解像度が増したし、読み手に分かりやすい英語の説明文を書くという技術は多少なり上達した気がする。総じて学ぶことが多かったと思う。
読んだもの
論文
一通りシラバスに書かれている論文に目を通した。どれも古典的なもので、よく書かれていると思うものばかりだった気がする。Caching in the Sprite Network File Systemは実際のアプリケーションの振る舞いを解析して最適なキャッシュ法を見出す手法・思考プロセスが説明されており、読んでいて面白かった。
- An Introduction to Programming with Threads
- Beyond Multiprocessing: Multithreading the Sun OS Kernel
- Implementing Lightweight Threads
- Flash: An Efficient and Portable Web Server
- Chip Multithreading Systems Need a New Operating System Scheduler
- The Performance of Spin Lock Alternatives for Shared-Memory Multiprocessors
- Formal Requirements for Virtualizable Third Generation Architectures
- Virtual Machine Monitors: Current Technology and Future Trends
- Implementing Remote Procedure Calls
- Caching in the Sprite Network File System
- Distributed Shared Memory: Concepts and Systems
本
シラバスでおすすめされている3冊に加えてThe LINUX Programming InterfaceとBeej’s Guide to Network Programmingを課題のために読んだ。Beej’s Guide以外はどの本も分厚いので正直全部は読めていない。時間があるときに再度OSTEPあたりから読み返したいと思う。
- Operating System Concepts
- Modern Operating Systems
- Operating Systems Three Easy Pieces
- The LINUX Programming Interface
- Beej’s Guide to Network Programming
良かったところ
最初のコースだっただけに、試行錯誤しながら取り組んでいた。まず、OSについて体系だって勉強することができたのは良かった。実際に勉強してみると、これまで何となく理解していたことも、あーそこまで考えたことはなかったなと思うことが多かった。例えば、message-basedとshared-memory-based communicationのトレードオフ、仮想化におけるbare-modelとhosted modelの違いとか、consistency model strict, sequential, causal, weakの違いとか。普段仕事では高次元のレイヤーしか触ってないので、これらの知識をおさらいするという意味でもいい機会だった。
それ以外にはドロップせずに無事単位を貰えたのは大きな収穫だったと思う。仕事と子育てがあり、勉強のためだけのまとまった時間は取れない中で、毎日コツコツと勉強することを習慣化できたのは自信につながったし、隙間時間を最大限利用する工夫、例えば休日のお出かけ中に電車の中で論文を読むとか、そういったことが実施できたのも良かったと思う。家族と過ごす週末の時間は損ないたくないので、少なくともGIOSくらいのハードさであれば、勉強とプライベートを両立できると分かったのは嬉しい発見だった。また、GIOSはSlackが活発で、そこでの投稿を読むだけでも勉強になることが多く刺激になった。
反省点
セメスタの後半から少しずつ集中力を欠いていたと思う。仕事が忙しくなったこともあるが、一部内容を理解しないまま講義を進めてしまい、結果として期末テスト前に再度勉強し直すという非効率なやり方をしてしまった。勉強の進め方については講義の聞き方・論文の読み方含めて改善の余地が大いにありそうだなと思っている。あとは、黙々と1人で勉強・作業することが多かったので、もっと他の生徒・TAとコミュニケーションをとっていくべきだったなとも思う。
まとめ
はじめのコースとしてGIOSを履修できたのは良かったと思う。omscentralによれば、GIOSはOMSCSの中ではそれなりのworkloadを要するコースらしい。実際に取り組んでみて社会人学生業の負荷がどれだけかかるか肌感として分かったし、今後のコース選択の基準ができたというのは大きい。課題含めコースもよく設計されていたし、OSに関する知識を体系立ててリフレッシュすることができて満足度が高いものだった。三週間の冬休みが終わったら、次はもう少し低レベルな内容を扱う”High-Performance Computer Architecture CS-6290”を履修する予定である。