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

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

■連絡事項

2024/04/23
電子メールで連絡します。 @coins.tsukuba.ac.jp の電子メールを読んで下さい。 コンピューティング環境/mail環境 参照。 https://www.coins.tsukuba.ac.jp/webmail/ も使えます。
2024/04/23
この実験では、Manaba のコース 「 情報システム実験A K-12 カーネルハック 」 を使います。 レポート提出に使います。 このテーマを選択した人を、新城が登録します。
2024/04/23
2024 年度は、4月24日水曜日 13:45 から説明会を行います。 3C206実習室 の dahlia PC の近くに集まりなさい。 12:15から13:45 も、実験を進めなさい。 TA から SSD を受け取り、 以下の Wiki も含めて、Linux カーネルのコンパイル、お よび、VMware Workstation の使い方に関する様々な資料を収集しなさい。
2024/04/20
この実験では UEFI ブート可能な SSD を貸し出します。これは、3C206 に ある dahlia PC (Dell Optiplex) で動作しますが、自宅にある PC でも、UEFI ブート可能ならば使えると思います。 (3C206 azalea PC では、使えません。)
2024/04/20
Wiki を作成しました。

■出席(K-12)

実習室に来て着席した時に「出席」、退席する時に「退席」ボタンを押しなさい。 「一覧」で、過去の出席が確認ができます。

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

■実験課題

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

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

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

レポートには、同じことを再び行う場合に必要な情報を含めなさい。

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

gdb のリモート・デバッグ機能を用いて、カーネルのプログラムをデバッグ可 能な状態にしなさい。次の機能を利用しなさい。 ブレークポイントやステップ実行には、まず、利用頻度が低いシステム・コー ルを選び、それを利用するユーザ・プログラムを記述するか実行しなさい。レ ポートには、その選択したシステム・コールをステップ実行した結果を含めな さい。また、ステップ実行の結果、そのシステム・コールの動作を理解しなさ い。そして、そのシステム・コールの動作の簡単な説明をレポートに含めなさ い。

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

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

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

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

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

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

read() と write() に大きなバッファを与えて1度に読み書きした時と、小さ なバッファを与えて繰り返し呼び出した時と、同じ内容が読み書きできること。

lseek() システム・コールに対応すること。

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

◆課題6 定期的な仕事

次の2つの方法で、カーネル内で定期的に動作するプログラムを作成しなさい。 両者の利点を比較しなさい。

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

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

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

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

◆課題9 トレース機能の利用

次のようなカーネルが持っているトレース機能を1つ1上利用しなさい。

◆課題10 その他

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

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

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

■ヒント

■レポート作成の注意

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

◆プログラムの仕様

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

◆実行結果

◆開発環境

◆参考文献,感想


Last updated: 2024/04/23 14:38:57
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>