Exercise List os 2023
Menu2023年度の問題です。過年度生は全部解答すれば、それで2023年度合格とします。 〆切は、2024/10/11 とします。
宿題
問題に関しては、問題ごとに別なメールで、以下のタイトルでSubject: Operating System Lecture Exercise 1.1kono@ie.u-ryukyu.ac.jp まで送ること。
学籍番号をメールの中に記述すること。問題番号は正確に記述すること。出席しない場合でも、問題解答を送れば出席扱いとします。
学科のメールアカウント及び、学科のメールサーバ経由で提出すること。それ以外は受け付けません。
ソースコードは最低限引用すること。
ソースコード自体は、学科の Mercurial repository に置き、そのRepository のURL をレポートに含めること。
Repository は、*問題ごと*に作成し、
ssh://urasoe.ie.u-ryukyu.ac.jp/net/home/hg/y07/e075737/os/ex1.1という形式で示してください。Web URL は参照以外には使わないこと。
コンパイルエラーは、gcc なら -O2 -Wall で確認し、エラー及びウォーニングを、すべてなくすこと。Eclipse でも、エラー及びウォーニングはすべ取ること。
C では Makefile、Java では build.xml を含めること。
他人のレポートのコピペ、WWW上の公開された情報からのコピペは、3回で不可とします。
英語の教科書の使い方
学科のサーバの設定
問題1.2API の位置付け
実際には、ユーザの行うことと、ハードウェアでそれを実行するところの間には、さまざまな段階がある。OS は、その各段階での標準化を提供する。
library (static, dynamic) 、あるいは、kernel trap 、さらに、サーバ(daemon)などが、様々な機能を実現する焦点となる。これを API (Application Program Inteface )と呼んでも良い。
問題1.4 Web page の課題
問題1.4問題2.1
(注意: gitlab ci の失敗例は、compiler error とか file not found ではだめ。テストを実行してテストが失敗している例を示す)
Golang/Rust/Java/TypeScript のどれかで、プロジェクトを作る。
go lang は brew install go でもよいが、サーバ上で singularity で動かしてもよい
Buffered と Unbuffered な書き出し
Buffer を使う場合と使わない場合での書き出し速度の実験を行う。実験結果をレポートにまとめる。綺麗なグラフを作成する。
gitlab での merge 、pullreq
複数人で作業する時に行われる merge と pull request を試してみる。問題2.3 読み込みの実験を pull equest で作る
問題2.4
find の使い方問題2.5
zsh の使い方問題2.6
C のAPIは、構造体を用いることが多い。構造体の扱いに気をつけながら、API の使い方を勉強しよう。C/C++/Rust/Go の ファイルシステムに関して調べる
問題2.7 MTBF
MTBF とは Mean Time Between Failures (平均故障間隔) の略で、故障発生までの時間の平均値のこと。MTBF について調べてみよう。
問題 2.8 df command
df command を使って、自分がどこにいるかを調べよう。学科のサーバの構成は?
User
/etc/passwd , /etc/master.passwd で管理されている。Uid は数字で16bitのシステムが多かったが、今では32bitが普通。パスワード自体は/etc/master.passwd にあり直接検索できない。また見ることができたとしても、encode されているので解析は不可能ではないが難しい。昔は、crypt されたパスワードが、/etc/shadow などに格納されていて、元のパスワードに復号することが出来なかった。この方法では、CHAPなどの challenge 型の認証には対応できない。現在では、パスワード自体が暗号化されて、復号化可能な状態で格納されているのが普通である。
Mac OS X には、KeyRing というパスワードの管理システムが使われている。
問題3.1
Kernel 側の実装について調べる。問題3.2
プロセスが使用しているシステムコールを調べる。問題3.3
Perl による shell の実行で、どのようなプロセスの状態の時間的遷移をUMLの sequence diagram で、記述してみよう。問題3.4
プロセスが使用しているファイルディスクリプタを調べる。問題4.1 シミューレータ
プロセスシミュレータ Rust問題4.2-4.3教科書の問題
割り当てられた教科書の問題を解け。
Subject: Lecture on Operating System Lecture Exercise 4.2 Subject: Lecture on Operating System Lecture Exercise 4.3として、2つ個別のメールで出して下さい。
レポートを、まだ一つも出してない人には割り当てられません。
英語の問題を英語で書き写して、その後に解答すること。(問題の訳は必要ありません)
解答は日本語とします。
ChatGPTで自己採点(400文字以内)してから提出すること
ChatGPTの自己採点もレポート含めること
Web 上から写したものを見付けた場合は失格としてます。
問題5.1 Amdal 則を実測し可視化する
Amdahl 則の実装問題5.2
PathFinder を使って、Thread を用いたプログラムが要求仕様を満たしていることを検証しよう。golang のモデル検査器があればそれを使っても良い。
問題6.1
Rustの並行実行問題6.2
golang で Semaphor を実装してみる問題6.3
flock_test.pl などのソース問題7.1 Busy Wait
OSに時間を渡さないと不必要に CPU を食ってしまう。しかし、応答性は Buy wait が良い。そのバランスを考えよう。問題7.2 getaddrinfo
コンピュータ上の使用可能なアドレスを探す。getaddr.pl getaddr.py.pl getaddrinfo の問題
問題7.3-4 様々な API
以下の問題を2つ選択して、API を調べる簡単なプログラムを作成し動作を調べよ。ここに載ってない Unix / Mac OS X の API を調べてもよい
Rust Cargoを使うこと Go module にすること C cmake を使うこと Java gradle を使うことGitlab CI として適切な test を用意し実行すること
test の glitlab CI のURLを提出する
Subject: Lecture on Operating System Lecture Exercise 7.3 Subject: Lecture on Operating System Lecture Exercise 7.4
問題8.1
malloc/ free を繰り返して、 fragmentation を実際に見てみる。問題8.2
GUI によるPage table のデモ問題8.3 Perfomance of Demand Paging
平均Page fault 処理時間
問題8.4 Perfomance of Demand Paging
mlock
問題8.5 mmap によるコピー
mmap したファイルを write することにより、memory copy を減らすことができる。(今は、あまり使われない)問題9.1
バックアップに関する考察問題9.2
セキュリティに関する考察と s/mime問題10.1
記述問題問題10.2
アンケート岡崎先生のアンケートに答えて下さい。
解答したことをメールで所定の形式で報告すること。サブジェクトのみで良い。