[概要][詳細][実験トップ]

担当教員
新城 靖 <yas@cs.tsukuba.ac.jp>
実施学期
春ABC
実験の概要
オペレーティング・システムのカーネル内で動作するプログラムの作成する。 新しいシステム・コールやデバイス・ドライバを追加する。VMware 等の仮想計 算機を用いる。
注意:この実験の課題は簡単そうに見えるかもしれないが、実際にはかなり難 しい。難しい課題に挑戦したい人、自分の腕前に自信がありそれを試したい人 に勧めるが、一般的には勧められない。

■連絡事項

2021/04/04
電子メールで連絡します。 必ず @coins.tsukuba.ac.jp の電子メールを読んで下さい。
2021/04/04
この実験では、Manaba のコース 「 情報システム実験A K-12 カーネルハック 」 を使います。 レポート提出に使います。
2021/04/04
この実験では、Microsoft Teams のチーム 「 GB36403_情報システム実験A_K-12_カーネルハック_2021 」 を使います。 説明会、質疑応答に使います。 教員が受講生をチームに登録します。
2021/04/04
この実験ではUEFI ブート可能な SSD を貸し出します。これは、3C205 に ある iMac (27inch) で動作しますが、自宅にある PC でも、UEFI ブート可能 ならば使えると思います。
2021/04/15
2021 年度は、4月16日金曜日 16:30 から説明会を行います。 3C205実習室(2階のiMacの部屋) の crocus17 の近くに集まりなさい。 4月19日金曜日の15:15から16:30 も、実験を進めなさい。 TA から SSD を受け取り、 以下の Wiki も含めて、Linux カーネルのコンパイル、お よび、VMware Workstation の使い方に関する様々な資料を収集しなさい。
2021/04/15
Wiki を作成しました。

■出席(K-12)

授業時間中に次のボタンを押しなさい。
次のボタンで、過去の出席が確認ができます。

いずれも、coins のユーザ名とパスワードが必要です。ユーザ名とパスワード を打つ時には、SSL が有効になっていることを確認してください。また、URL が https://idp.coins.tsukuba.ac.jp/で始まっ ていることを目で確認して下さい。

■実験課題

課題1-4を必須とする。課題5以降から2つ以上選択して回答しなさい。

◆課題1 カーネルのコンパイルとパラメタの設定

選択したカーネルのソース・プログラムを入手する。いくつかのパラメタを設 定し、コンパイルする。特に不要なデバイス・ドライバを外すことが、コンパ イル時間を短縮し、実習を円滑に進めるために重要となる。

◆課題2 カーネルのリモート・デバッグ

gdb のリモート・デバッグ機能を用いて、カーネルのプログラムをデバッグ可 能な状態にする。簡単で、利用頻度が低いシステム・コールを選び、それを利 用するユーザ・プログラムを記述する。そして、そのプログラムを実行し、カー ネル内をステップ実行で実行することで、そのシステム・コールの動作を理解 する。

◆課題3 システムコールの追加

最終的には、次のような条件をみたすシステムコールを追加する。 次のような手順でプログラムを作成するとよい。
  1. システム・コールの番号を割り当てる。
  2. 他のシステム・コールにならい、エントリ関数を定義し、登録する。 最初は、何もしない関数、または、コンソールにメッセージを表示する を登録する。最初は、引数がなくてもよい。
  3. ユーザ・プログラムからシステム・コールを発行するプログラムを 作成する。
  4. 4. を実行し、デバッガ等で動作を確認する。
  5. システム・コールの簡単なロジックを、ユーザ・レベルのプログラムで 記述し、動作を確認する。この時、カーネル内のAPIを利用する場合は、 ダミーの関数を定義する。
  6. ユーザ空間から引数を取り込む部分を記述する。
  7. 6. のロジックをカーネルに移動させる。
  8. 結果をユーザ空間に返す部分を記述する。

◆課題4 デバイス・ドライバの作成

次のような条件をみたすデバイス・ドライバを追加しなさい。

◆課題5 /proc ファイル・システムの作成

/proc ファイル・システムを通じてアクセス可能なモジュールを作成しなさい。 提供する内容は、カーネル内にある動的に変化する可能性があるものとする。 読み込みのみ対応すればよい。

ファイルの読み書きは、一般ユーザの権限でも実行できるようにすること。

◆課題6 定期的な仕事

カーネル内で定期的に動作するプログラムを作成しなさい。

◆課題7 ファイルシステムの追加

VFS層に新たなモジュールを追加し、ファイル・システムを追加しなさい。

◆課題8 ユーザレベルでのファイルシステムの追加

FUSE、または、NFS RPCを用いて、ユーザレベルのプログラムで新たなファイル・ システムを追加しなさい。

◆課題9 特権命令の利用

カーネル内でしか実行できない特権命令を使うプログラムを作成しなさい。

◆課題10 その他

その他、課題4-9と同等の難易度を持つ課題を設定し、取り組む。設定する課 題については、担当教員と相談して決定すること。

◆課題11 別のオペレーティングシステムでの実験

課題3-10を、それとは別のオペレーティング・システムで実施しなさい。たと えば、課題3を Linux で行なったならば、課題3 を FreeBSD で行いなさい。

■ヒント

■レポート作成の注意

レポートには、次の項目を含めなさい。

◆プログラムの仕様

◆データ構造とアルゴリズム

◆実行結果

◆開発環境

◆参考文献,感想


Last updated: 2021/04/15 08:17:06
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>