■Y-I OS自作ゼミ 応募課題 「OS自作ゼミ」の応募課題は、3問の共通課題と、3問の選択課題から成ります。共通課題は当ゼミに応募する方は全員回答してください。選択課題は、後で示す通りに回答してください。回答は、ソースコードを除いて全体が2,000字に収まるようにしてください。英数字や記号、改行文字も1文字とカウントします。複数の選択課題に回答する場合も字数制限は変わらないので、注意してください。 今年のOS自作ゼミは、3人の講師、怒田、hikalium、内田が皆さんをサポートします。講師それぞれ、ちょっとずつ得意分野が違います。どの講師のもとで学びたいかを考えて、学びたい講師に対応する選択課題に回答してください。選考に通過した場合、回答した選択課題に対応する講師の班に配属されます。選択課題は複数回答可能です。複数回答した場合の講師選択は講師側で決めるため、応募者は選べません。 課題に回答する際は「選考のポイント」というページを読んで回答すると、より良い回答になるでしょう。回答作成にあたり文献やWebページを利用した場合は、適切に出典や引用元を明記してください。 A. 共通課題:OS自作ゼミで挑戦してみたいことを教えてください。また、それを実現するために必要となる実装や調査することを想像して書いてください。間違っていても大丈夫です。 トピック例:コンテキストスイッチやページング、ネットワーク通信の実装など。もちろんこの他のトピックも歓迎します。講師によって得意分野が違いますので、詳しい情報は https://uchan.hateblo.jp/entry/seccamp2021-osdev-seminar を読んでください。 B. 共通課題:"http://osdev.jp/" とWebブラウザのアドレスバーに入力してから、その内容が画面に表示されるまでの間には、コンピューターの中でさまざまな処理が行われています。そのなかで、あなたが大事だと思うOSの処理について、いくつか取り上げて説明してください。 C. 共通課題:C言語で連想配列を実装してください。連想配列のキーは文字列、値は整数とします。最低限、連想配列に要素を挿入する関数map_put、要素を検索する関数map_find、要素を削除する関数map_removeを作ってください。C標準ライブラリのみを利用して実装してください。 D. 怒田に対応する選択課題:あなたが知らないOSを探して、気になったOSを1つ紹介してください。文献を探したり、大枠を理解したりする力を見る課題です。 OSの例:ToaruOS,HelenOS,Singularity,IncludeOS,... E. hikaliumに対応する選択課題:「わたしの自作OSには絶対にこれを実装したい!」という機能や仕組みについて、その概要を説明するとともに、なぜそれが必要なのか・実装したいのか、理由も含めて語ってください。その理由が一般に広く受け入れられなさそうなものでも全く構いませんし、もちろんそうであっても構いません。 F. 内田に対応する選択課題:PCIバスの概要と、現代のパソコンにおいて果たす役割を調査し、説明してください。加えて、PCIバスに接続されたデバイスをすべて列挙する方法を説明してください。 共通課題:その他、書ききれなかったことを好きなだけ書いてください。 ■Y-II データベースゼミ 応募課題 以下の設問 (1)(2)(3)(4) に回答してください。 (1) あなたの好きなプログラミング言語について、どういうところが好きなのか教えてください。 (2) トランザクション処理やそれに関する技術のどんなところに興味を持ったのか教えてください。 (3) 次の (3a)?(3g) の中から 2 つ選んで説明してください。 たくさん時間をかけて完璧な回答を作る必要はありません(目安はひとつにつき 5?30 分くらい)。 調べる過程で分かったことだけでなく、分からなかったことや疑問に思ったことも書いてください。 また、参考にした書籍や Web ページの情報があれば全て書いてください。 (3a) 永続(不揮発)ストレージの種類とそれらの特性の違いについて。 (3b) POSIX thread の mutex と condition variable について。 (3c) Write-ahead Logging (WAL) における redo log と undo log の違いについて。 (3d) Serializability を実現する仕組みのひとつである 2PL (Two phase locking) について。 (3e) Write-through cache と Write-back cache の違いについて。 (3f) インデクス構造としての Hash table と Balanced tree の違いについて。 (3g) デッドロックが発生する理由とその防止について。 (4) アピールしたいことがあれば自由に書いてください。この設問は未回答でも構いません。 ■Y-III 故障を乗り越えて動くシステムのための分散合意ゼミ 応募課題 皆さんの多くは直接的に分散システムを意識した経験,あるいは実装した経験が少ないと思います. したがって本応募課題では,分散システムそのものに密接に関連する技術よりは,むしろ皆さんのモチベーションや基礎的なプログラミング技術,わからないことを調べる力について教えていただこうと考えております. 各設問の回答について字数制限は特に設けませんが,要点が明確であることを期待します. (1) 分散システムと聞いて,どういったものを想像しますか. 特にメリットやデメリットについて,自分なりの考えを記述してください. (2) 身近なITサービスなどの中から分散システムで構築されているであろうものを一つ挙げ,どういった機能を分散システムで実現しているのか,なぜ分散システムである必要があるのかを説明してください. ここでの説明は自分なりに考察したものであっても,調べた結果わかったことをまとめたものでも構いません. (3) これまでのプログラミング歴について,以下の問いに回答してください. (3.1) プログラミング経験のある方は好きなプログラミング言語を,経験のない方は興味のあるプログラミング言語を,理由とともに教えてください. (3.2) なにか作ったものがあれば,作ったものの簡単な説明と実装時に苦労した点を教えてください.作ったものがない場合は,作ってみたいものの説明と,それを作るために必要な技術を調べてまとめてください. (4) 以下の単語から (できれば知らないものを) 2つを選び,調査した結果わかったことをそれぞれまとめてください. 単語集: メッセージパッシング, 非同期システム, ビザンチン将軍問題, FLP不可能性 (5) その他,意気込みなどがあれば自由に記述してください.