Y-I OS開発ゼミ このゼミでは、OSの面白さや奥深さを学生の皆さんに沢山伝えたくて、いろいろな講義を計画しています。 恐らく皆さんも、こういった講師の熱い思いに惹かれて、このゼミに興味を持ってくれたのではないでしょうか。 設問の多くは皆さんの知識や技術力を問うのではなく(その辺りは事前学習で講師がフォローします!)、 皆さんのOSに対する興味やモチベーションを聞いてます。それを意識して回答してみてください。 回答は、最低限のことだけでなく、膨らませて沢山書いていただいて大丈夫です(むしろ歓迎!) 問題AからEすべてに回答してください。 ■問題A 我々講師は、普段いくつかのOSを使っていますが、使い込むうちに色々な発見をします。 皆さんもきっとそういう体験があると思います。 あなたが普段使っているOSで、好きな機能と改善してほしい部分について、思いのたけを聞かせてください。 この問では、皆さんが普段どの程度興味を持って既存OSを観察しているかを評価します。 ■問題B 皆さんが仮にOSを作るとしたら、「どんなOS(やOSの機能)を作ってみたい」でしょうか? (既にOSを作った事がある人は、その特徴を書いてくれても構いません。) そして、なぜそれを作ってみたいと思ったのでしょうか? 皆さんが心の中で夢描いているであろう、ワクワクするようなOS像を教えてください。 ■問題C OSを実装する上で基礎となるC言語の力を見る問題です。 C.1. C言語で双方向リンクリストとそれを操作する関数を作り、ソースコードを提出してください。 リンクリストを生成する関数、要素を任意の場所に挿入する関数、全ての要素を順に標準出力に印字する関数、の3つがあれば十分です。 やる気があればもっとたくさんの機能を実装しても構いません! C.2. 設計・実装で工夫した点を述べてください。 ■問題D OSを作る過程で様々な調べものをする必要が出てきます。 皆さんに必要な調査力があるかどうかを知りたいです。 単語集:PCI、ACPI、ASLR、スピンロック、コンテキストスイッチ、バディシステム D.1. 上記の単語集から知らない単語を 1 つ選んでください。何を選びましたか? D.2. その単語について、調べて分かった事実をなるべくたくさん教えてください。 D.3. 判明した事実に対して、あなたなりの解釈をしてみてください。例えば… - 「Aという機能はXをやるために追加されたのではないか」 - 「類似のBと比べて、Yの場合にとても効率が良さそう」 ※調べる、という行為は、書籍やウェブサイトを読むことはもちろんですが、 実験や観察を自分でやるということも含みます。 ■問題E その他、書ききれなかったことを好きなだけ書いてください。 Y-II データベースゼミ 設問 以下の設問 (1)(2)(3)(4) に回答してください。 (1) あなたの好きなプログラミング言語について、どういうところが好きなのか教えてください。 (2) トランザクション処理やそれに関する技術のどんなところに興味を持ったのか教えてください。 (3) 次の (3a)〜(3g) の中から 2 つ選んで説明してください。 たくさん時間をかけて完璧な回答を作る必要はありません(目安はひとつにつき 5〜20 分くらい)。 調べる過程で分かったことだけでなく、分からなかったことや疑問に思ったことも書いてください。 参考にした書籍や Web ページの情報があれば全て書いてください。 (3a) インデクス構造としての Hash table と Balanced tree の違いについて。 (3b) Write-ahead Logging (WAL) における redo log と undo log の違いについて。 (3c) Serializability を実現する仕組みのひとつである 2PL (Two phase locking) について。 (3d) データキャッシング (data caching) の目的と主な手法について。 (3e) 永続(不揮発)ストレージの種類とそれらの特性について。 (3f) POSIX thread の mutex と condition variable について。 (3g) デッドロックが発生する理由とその防止について。 (4) アピールしたいことがあれば自由に書いてください。この設問は未回答でも構いません。 Y-III Cコンパイラを自作してみよう!ゼミ コンパイラの出力と同様に、回答は長ければ長いほどよいというわけではありません。あなたの伝えたいことを書ける範囲で、適切な最適化を施した回答をいただけると講師陣はとても助かります。各問に対する回答は、長くても800字を上限とします(それより短くても減点することはありません)。 [問1] これまでのプログラミング歴(C言語に限りません)について自由に語ってください。何か作ったものがあれば、それについても教えてください。 [問2] コンパイラがソースコードから実行バイナリを生成する過程について、現在知っている範囲で説明してください。ソースコードの言語については、好きなものでかまいません。 [問3] C言語のコンパイラを書く際に、最も難しいポイントはどこだと思いますか?考えたことや、これまでのプログラミング経験をもとに、具体的に教えてください。 [問4] コンパイラが行うことのできるプログラムの最適化について、あなたの知っていることや、考えたことを教えてください。Cコンパイラ以外についてでも大丈夫です。 [問5] 何か他にアピールしたいことがあれば、自由に書いてください。この設問も含め、誤ったことを書いていても減点はしません。書いておきたいことはなんでも書いてください。