Operating System Lecture Exercises

content

2008年度の問題です。過年度は夏休みに提出してください。(もう締め切ってます)


宿題

問題に関しては、問題ごとに別なメールで、以下のタイトルで
    Subject: Lecture on Operating System Lecture Exercise 1.1

kono@ie.u-ryukyu.ac.jp まで送ること。

学籍番号をメールの中に記述すること。問題番号は正確に記述すること。出席しない場合でも、問題解答を送れば出席扱いとします。

学科のメールアカウント及び、学科のメールサーバ経由で提出すること。それ以外は受け付けません。

ソースコードは最低限引用すること。

ソースコード自体は、学科の Mercurial repository に置き、そのRepository のURL をレポートに含めること。

コンパイルエラーは、gcc なら -O2 -Wall で確認し、エラー及びウォーニングを、すべてなくすこと。Eclipse でも、エラー及びウォーニングはすべ取ること。

C では Makefile、Java では build.xml を含めること。

他人のレポートのコピペ、WWW上の公開された情報からのコピペは、3回で不可とします。


問題1 Linux の Install

問題1


課題 ファイル管理

「課題 1. ファイル操作とファイル・システム」と、その
  Java version

レポートはメールで

    Subject: Practice on Operating System Lecture Practice File
    Subject: Practice on Operating System Lecture Practice File Java

というサブジェクトのメールで提出して下さい。

今回は、Java と C 言語があります。Java は、Eclipse で行うこと。両方やってください。


問題2.1

ハードディスクとファイルシステムに関して調べる。

問題2.1


問題2.2 MTBF

MTBF とは Mean Time Between Failures (平均故障間隔) の略で、故障発生までの時間の平均値のこと。

MTBF について調べてみよう。

問題2.2


問題3.1

システムコールの実装について調べよう。

Linux Kernel Source


問題3.2

プロセスが使用しているファイルディスクリプタを調べる。

プロセスの ファイルディスクリプタ


問題3.3

シェルスクリプトを実行した時に、どのようなプロセスの状態遷移が起きるかをUMLで、記述してみよ。

問題 3.3

UMLはなんで書いても良いが、OmniGraffle などで書いても良い。(手書きも良いがコンピュータ上ではちょっと...)

Judeを使ってみよう。


課題

「UNIX のプロセスの観察と簡単な操作」と「プロセスの生成」を2週間で、おこなうこと。

    Subject: Practice on Operating System Lecture Practice Process

というサブジェクトで提出して下さい。なお、実験の時間は特に決めませんが、レポートの締め切りは守ること。


問題4.2

Gantt Charts


問題4.3 シミューレータ

プロセスシミュレータ


問題4.4-4.7教科書の問題

 割り当てられた教科書の問題を解け。
    Subject: Lecture on Operating System Lecture Exercise 4.4

として、4つ個別のメールで出して下さい。

割り当ては、8月末時点で、課題を10以上出した人に対して行ないます。

英語の問題を英語で書き写して、その後に解答すること。(問題の訳は必要ありません)


問題5.2

pathfinderと gnuplot/grapherを使って、Interleaving の様子を視覚化して見よう。

Interleaving の視覚化


問題5.3

PathFinder を使って、Thread を用いたプログラムが要求仕様を満たしていることを検証しよう。

PathFinder の問題


問題5.4

DeadLock の問題

さまざまな言語とAPIでデッドロックを実際に確認してみよう。


課題

「Java Thread」「Java ThreadPool」を、さ来週までに、おこなうこと。レポートはメールで

    Subject: Practice on Operating System Lecture Practice Thread Java
    Subject: Practice on Operating System Lecture Practice ThreadPool

というサブジェクトに入れたメールで提出して下さい。サブジェクトを間違えないこと!


問題6.1

Kernel 内部の同期の実現方法

Linux のkernel source の中で同期を実現している、もっとも、基本的なアセンブラ命令が記述してある部分を示せ。


課題

情報工学実験Iのプロセスの同期プロセスの同期(Java)を2週間で行うこと。レポートはメールで

    Subject: Practice on Operating System Lecture Practice Synchronization
    Subject: Practice on Operating System Lecture Practice Synchronization Java

というサブジェクトを付けたメールで提出して下さい。


問題7.1 Busy Wait

Busy Wait の問題


問題7.2 Signal の動作

Loop と signal

Signal の動作を確認してみよう。


問題7.3

簡単なIPv6/IPv6サーバ

(どこが簡単なんねん....)


問題7.4 (keyrecord/keyplay)

real-time application を作ってみよう。キーボードの入力を時間を含めて忠実に再現する。

keyrecord/keyplay


問題7.5 kqueue, epoll

select は、ファイルディスクリプタの配列のコピーを伴うので、実行パフォーマンスに問題があるとされていて、
    Linux では epoll
    FreeBSD/Mac OS X では kqeueue

が提案されている。

学籍番号が奇数の人は、epoll を使って、kbhit() の例題を行なうこと (Mac OS X にはepoll はない)

学籍番号が偶数の人は、kqueue を使って、tail -f に相当するプログラムを作成せよ (Linux には kqueue )はない。timeout を使う場合と、使わない場合の両方のCPU usageを計測せよ。

Kqueue tutorial

参考のソース(Mercurial)


問題8.1

仮想記憶を理解するための計算練習


問題8.2

malloc/ free を繰り返して、 fragmentation を実際に見てみる。

fragmentation の 観察


問題8.3

GUI によるPage table のデモ


問題9.1 Perfomance of Demand Paging

平均Page fault 処理時間


問題10.1 メモリの大量消費とスワップ

swapの観察


問題10.2 mlock

mlockの観察


問題10.3 mmap によるコピー

mmap によるコピー


問題11.1

バックアップに関する考察

良く使われているバックアップツールに関して調べてみよう。


問題11.2

sudoに関する考察


問題11.3

トロイの木馬に関する考察


問題11.4

WWWページの証明、証明書


問題12.1

記述問題

Content

  1. 宿題
  2. 問題1 Linux の Install
  3. 課題 ファイル管理
  4. 問題2.1
  5. 問題2.2 MTBF
  6. 問題3.1
  7. 問題3.2
  8. 問題3.3
  9. 課題
  10. 問題4.2
  11. 問題4.3 シミューレータ
  12. 問題4.4-4.7教科書の問題
  13. 問題5.2
  14. 問題5.3
  15. 問題5.4
  16. 課題
  17. 問題6.1
  18. 課題
  19. 問題7.1 Busy Wait
  20. 問題7.2 Signal の動作
  21. 問題7.3
  22. 問題7.4 (keyrecord/keyplay)
  23. 問題7.5 kqueue, epoll
  24. 問題8.1
  25. 問題8.2
  26. 問題8.3
  27. 問題9.1 Perfomance of Demand Paging
  28. 問題10.1 メモリの大量消費とスワップ
  29. 問題10.2 mlock
  30. 問題10.3 mmap によるコピー
  31. 問題11.1
  32. 問題11.2
  33. 問題11.3
  34. 問題11.4
  35. 問題12.1