2019 Yトラック トラックYの応募課題 トラックYには2つのゼミがあります。 Y-I OS開発ゼミ Y-II Cコンパイラ自作ゼミ 以下のゼミ別の設問をよく読んで、自由記載解答欄に回答を書いてください。 ================================================================================ Y-I OS開発ゼミ このゼミでは、OSの面白さや奥深さを学生の皆さんに沢山伝えたくて、いろいろな講義を計画しています。 恐らく皆さんも、こういった講師の熱い思いに惹かれて、このゼミに興味を持ってくれたのではないでしょうか。 設問の多くは皆さんの知識や技術力を問うのではなく(その辺りは事前学習で講師がフォローします!)、 皆さんのOSに対する興味やモチベーションを聞いてます。それを意識して回答してみてください。 回答は、最低限のことだけでなく、膨らませて沢山書いていただいて大丈夫です(むしろ歓迎!) 共通問題A、B、C、D、選択問題S1-3について回答してください。 ■共通問題A 我々講師は、普段いくつかのOSを使っていますが、使い込むうちに色々な発見をします。 皆さんもきっとそういう体験があると思います。 あなたが普段使っているOSで、好きな機能と改善してほしい部分について、思いのたけを聞かせてください。 この問では、皆さんが普段どの程度興味を持って既存OSを観察しているかを評価します。 ■共通問題B 皆さんが仮にOSを作るとしたら、「どんなOS(やOSの機能)を作ってみたい」でしょうか? (既にOSを作った事がある人は、その特徴を書いてくれても構いません。) そして、なぜそれを作ってみたいと思ったのでしょうか? 皆さんが心の中で夢描いているであろう、ワクワクするようなOS像を教えてください。 ※「Linux開発者を目指そう!」テーマを受講したいと思っている方は「どんなLinuxカーネルの機能を作ってみたいか」を答えてください。 ※「Raspberry Pi向け組み込みOSを作ろう!」テーマを受講したいと思っている方は「どんな組み込みシステムを作ってみたいか」を答えてください。 ■共通問題C OSを実装する上で基礎となるC言語の力を見る問題です。 - C.1. C言語で双方向リンクリストとそれを操作する関数を作り、ソースコードを提出してください。 リンクリストを生成する関数、要素を任意の場所に挿入する関数、全ての要素を順に標準出力に印字する関数、の3つがあれば十分です。 やる気があればもっとたくさんの機能を実装しても構いません! - C.2. 設計・実装で工夫した点を述べてください。 ■選択問題について 受講したいテーマすべての選択問題に回答してください。 (合格した場合、回答したテーマのいずれかに配属されます) ■選択問題S1 テーマ「フルスクラッチOSを書こう!」(内田講師) 現代のパソコンではPCIバス(ソフトウェア互換性のあるPCIeバスも含む)を使ってほとんどの周辺機器が接続されており、PCIバスはとても重要な存在になっています。 PCIバスが制御できるようになると、SATAやNVMeの読み書き、USBの制御などができるようになります。 以下3つについて詳しく答えてください。 1. 今現在、あなたがPCIバスについて知っていること(PCIバスについて何も知らなくても問題ないので、その場合はそう書いてくださいね!) 2. PCIバスについて知識を深めるために調べて分かったこと 3. どうやってその情報を調べたか(○○の記事を検索して見つけた、Linux上で実験コマンドを使った、とか) 調べる取っ掛かりになるキーワードを挙げておきます。いくつかを調べてみると良いと思います。 PCIe、PCIコンフィギュレーション空間、BAR、IRQ、MSI、APIC、SATA、xHCI ■選択問題S2 テーマ「最先端OS談義」(粟本講師) 世の中には、発想が面白かったり、アプリケーションの性能を大幅に向上させるような「独創的かつ実用的なOS」が沢山あります。 皆さんも何時か、こういった「凄いOS」を作れるようになりたいですよね! そこで、 http://raphine.hatenablog.com/entry/seccamp2019_exercise を読み、ここに書かれている内容について思った事や、皆さん自身でこれらを更に膨らませたアイディア等を自由に書いてください! ■選択問題S3 テーマ「Linux開発者を目指そう!」(武内講師) Linuxカーネルについて知りたいこと、それについてこれまで調べたこと、 つまづいたことを教えてください。最終的に解決しなかったとしてもOKです。 技術力が優れているかではなく、どれだけ試行錯誤したかという観点で採点をします。 「この機能のこのコードの意味がわからなかった」という高度なものでもいいですし、 「そもそも何から手を付けていいのかもわからなかった」というものでも構いません。 ■選択問題S4 テーマ「Raspberry Pi向けOSを作ろう!」(西永講師) 今まであなたがおこなったものづくり(プログラムや電子工作、Webサービスなど)を、以下の点を含めつつ好きなだけ私に語ってください。 * 作った理由 * 作り方はどのように調べたか * 躓いたことがあれば、躓いた部分と解決方法 ■共通問題D その他、書ききれなかったことを好きなだけ書いてください。 ================================================================================ Y-II Cコンパイラ自作ゼミ [問1] これまでのプログラミング歴(C言語に限りません)について好きなだけ語ってください。何か作ったものがあれば、それについても教えてください。 [問2] コンパイラがソースコードから実行バイナリを生成する過程について、現在知っている範囲で説明してください。ソースコードの言語については、好きなものでかまいません。 [問3] C言語のコンパイラを書く際に、最も難しいポイントはどこだと思いますか?考えたことや、これまでのプログラミング経験をもとに、具体的に教えてください。 [問4] 何か他にアピールしたいことがあれば、自由に書いてください。この設問も含め、誤ったことを書いていても減点はしません。書いておきたいことはなんでも書いてください。