コースレビュー: CS 6210 Advanced Operating Systems @Georgia Tech

1. CS 6210 - Advanced Operating Systems

2021年春学期にCS 6210 - AOS: Advanced Operating Systemsのコースを修了したので、ここに コースレビューを残しておこうと思う :)

ちなみに、基礎的なクラスはGIOS – Graduate Intro to OS の授業が カバーしている。 このAdvanced OS(AOSとよく略す)の授業はより発展的で、論文をベースに 幅広いトピックについて学ぶ授業だ。

2. Course Contents

OS Structures

最初は、border crossingのオーバーヘッドを減らすことができる SPIN OSについて学んだ。 つぎにExoKernelに触れたあと、Microkernelのアプローチについて説明が進む。

Microkernelは当初は懐疑的に思われていたというのが興味深い。 Machの論文に基づいて非常に遅いと信じられていたようだ。 しかし、実際にははるかに優れたパフォーマンスを発揮するのだ。 Machのmicrokernelは、border crossing に約900プロセッササイクルを必要とするが、 正しくパフォーマンスを目的として開発された場合、実際にはたったの 123プロセッササイクルで border crossingが可能となったのだ。

OS Virtualization

授業では、2つの主要な仮想化を取り上げた。 Full VirtualizationPara Virtualizationだ。

OSはそれぞれのOSのページテーブルをどのように管理するのか? シャドウページテーブルとは? 効率的なマッピングはどのように実行できるのか? それぞれのVMへのメモリ割り当てはどのように管理されるのか? 講義では、こういったことに焦点を当てていく。

Parallel Systems(並列システム)

共有メモリマシン、SMPアーキテクチャ、DSM: Distributed Shared Memoryなどのさまざまなアーキテクチャについてカバーしている。 メモリの一貫性のモデルやハードウェアキャッシュの整合性(write-invalidate、write-updateなど)もこのトピックで取り上げられている。

別の重要なトピックは、同期(Synchronization)についてだ。 Spinlock, Spin locks with Delay, Ticket Lock, Array-based queueing lock (ABQL), Linked list based queueing lock など、それぞれの長所と短所を理解できる。

Barrier synchronization も多様なアルゴリズムが存在する。 例えば、Sense reversing barrier、Tree barrier、MCS Tree barrier、Tournament barrier、Dissemination barrierなどだ。

Lightweight RPCは、A-stackという共有メモリを作成することでオーバーヘッドを削減する手法だ。これにより、RPCにかかる負担を減らすことができる。

Distributed Systems (分散システム)

分散サーバ間で同期が必要な場合、 Lamportの分散相互排他アルゴリズム が検討できる。

また、RPCの遅延をどのように削減できるかについての遅延制限のアイデアもカバーしている。 Active Networkのコンセプトは、SDN: Software Defined Networkと非常に似ている。

分散オブジェクト技術はSpring OS, Java RMI, Enterprise JavaBeansについて説明する。 これらの分散コンセプトが商用ソフトウェアにどのように提供されているかを理解できる。

Distributed Subsystems

  • GMS: How can we use peer memory for paging across LAN?
  • DSM: Can we make the cluster appear like a shared memory machine?
  • DFS: How to use cluster memory for cooperative caching of files?

Failures and Recovery

Internet Computing

Security

  • Private key infrastructure を使用したセキュリティと認証

3. Tests & Projects

合計4つの課題プロジェクトがあった。

  • Project 1: Virtual Machine Scheduling in KVM
  • Project 2: Barrier Synchronization
  • Project 3: Distributed Service using gRPC
  • Project 4: Implement MapReduce Framework

どの課題も難しく、時間がかかるものだった。 しかし、かけた時間や労力の分だけ、自分の身になったように思う。

テストは3回あった。 とてもユニークだった点は、テストの問題がテスト前に公開されているのだ。 さらに、学生同士で答えを議論することが許可されている。 学生同士で議論することで理解が深まるだろうという趣旨だったと記憶している。

テストで点を取るという目的においては、基本的には答えを覚えてテスト中に書き出すというスタイルになってしまう。 これが本当に良いのかどうかは議論が別れていた。 とにかくテスト範囲が広い上に、結構専門的なことをやっているので、 ある程度は暗記に頼らないとテストで点数を取るのは難しいだろう。

4. Overall

このクラスは、最も難しいクラスの一つだったが、素晴らしいクラスだった。 Kishore教授がクラスの最初から最後まで主体的に関わっていたことに感銘を受けた。 毎週1時間のオフィスアワーを開き、学生からの質問に真摯に答えていたことが印象的だ。 他のクラスでは、TAにまかせっきりで教授は一度も姿を見せないこともある。 それに比べると、Kishore教授の姿勢は素晴らしかった。

最終的に、Aの成績を獲得できた。 課題とテストの両方で90%以上のスコアを取れたが、 採点が優しかったおかげだ。 めちゃくちゃカバー範囲の広い授業なので、ついていくのが大変ではあるが、 ちゃんと努力すれば良いスコアが取れる授業だと思う。

ちなみに、OSについて学ぶのであれば、まずは CS 6200 - Introduction to OSのクラス受講をおすすめする。 コースレビューを書いていないが、このクラスは自分が最初に受けたクラスで、 最も満足度が高い授業の一つだ。 受講前から、OSについて基礎的なことは理解していたが、深く理解できるようになった。 授業内容も良かったし、課題もとても良かった。

このAdvanced OSについては、幅広いトピックと関連論文に興味がある人にはおすすめだ。 とにかくトピックが広いので、スピードが早い、まだ未消化でも次に進まないといけないという側面はあった。 それでも、こんなトピックがあるのか、こんな手法が提案されていたのかというのを知れるのは楽しみだった。 ちょっと大変だけど、ぜひ。

References:

by @takp