情報科学部2年
オペレーティングシステム演習
課題

2009/04/29 更新

総合INDEX
連絡事項・TOP   講義     課題   成績出席記録
  掲示     資料     Q&A  



演習報告課題

回数 日付 演習課題 提出期限 解答例 配点 採点基準 課題講評
第1回 2009/4/16 配布したアンケートに回答し、当日中に提出してください。 2009/4/16 なし 採点 講評
第2回 2009/4/23 自分専用のコマンドレファレンスを、以下の用語について作る。
cat, more, cd, pwd, ls, grep, mkdir, chmod, echo, tar
2009/4/30 10 採点 講評
第3回 2009/4/30 コンパイルとMake 2009/5/7 7+ 採点 講評
第4回 2009/5/7 割込み処理 2009/5/14 5+ 採点 講評
第5回 2009/5/14 プリント提出 2009/5/21 4(10点×0.4倍) 採点 講評
第6回 2009/5/21 プリント提出 2009/5/28 4(10点×0.4倍) 採点 講評
第7回 2009/5/28 プリント提出
ボーナス課題
プリントは5/28
ボーナスは6/11
プリント:4(10×0.4倍)
ボーナス:20?
採点 講評
第8回 2009/6/4 起動画面の修正
ボーナス課題
2009/6/11 6
Bonus:20?
採点 講評
第9回 2009/6/11 ポーリング 2009/6/18 11 採点 講評
第10回 2009/6/18 パイプ 2009/6/25 5 採点 講評
第11回 2009/6/25 仮想メモリ 2009/7/2 6 採点 講評
第12回 2009/7/2 ユーザとアクセス権 2009/7/9 9+3 採点 講評
第13回 2009/7/9 第12回が最終レポートです。 7/16に返却予定です。
第14回 2009/7/16 第12回が最終レポートです。 7/16に返却予定です。


ページTOPへ



   課題1(2008/04/17)

課題内容

配布したアンケートに回答し、当日中に提出してください。
 

採点基準

今回は、オペレーティングシステムの方でつけてしまいましたので、こちらでは課題としません。
 

講評


ページTOPへ



   課題2(2009/04/23)

課題内容

自分専用のコマンドレファレンスを、以下の用語について作る。
cat, more, cd, pwd, ls, grep, mkdir, chmod, echo, tar
 

採点基準

「コマンドレファレンス」って何ですか?という質問がありましたが、そのまんま「コマンドレファレンス」で検索して下さい。
この課題は、授業中にlsとかcat、grepとか、頻繁に使う際に「lsって何をするんですか?」という質問や、「grepの後の書き方がわかりません」という質問など、学生の皆さんからコマンドの機能や使い方の質問が多く出るために、「課題(宿題)」として出しました。まず、自分で調べて手元に持っていて(パソコンに入れておいて)下さい。
従って、ネットの丸写しであっても、文句は言いませんし、わかりにくい説明でも文句は言いません。使うのは皆さん自身ですから。何回か後の授業中では、「第2回の宿題で出したコマンドレファレンスで、自分で調べて下さい。」という「説明」になります。

その項目についての説明があれば、一項目について1点を出します。
コマンドの説明、書式、オプションの説明があるもの
  但し、pwd、cdはオプションの説明がなくても、1点とする。
1点
コマンドの説明のみのもの
  但し、pwdは1点、cdは0.7点
0.4点
コマンドの説明+書式0.6点
コマンドの説明+使用例0.6点
コマンドの説明+書式+オプション+使用例1.3点
コマンドの説明+オプションの説明0.7点

 

講評

 そもそも、「コマンドレファレンスとは」という部分がわからない人が多かったようです。
 書店で「コマンドレファレンス」という本は多数売られていますし、ネットで「コマンドレファレンス」と検索すると、今回の課題の答えはかなりが表示されますが、「最も簡単な答え(コマンドの機能)」しか書かない人が半数近くいました。

 定期試験前には、自分用のコマンドレファレンスをきちんと印刷して用意して欲しいと思います。

ページTOPへ



   課題3(2009/04/30)

課題内容

Makeコマンドの機能を説明しなさい。
 Makeコマンド本体の機能について(3点)
 Makefile(スクリプト)の指定方法についての説明:4点
 その他(Makefileの発展的な使用方法についてなど)もしあれば、適宜加点します。

 

採点基準

以下のキーワードの説明ごとに、加点しています。
ここまで、7点を上限に採点しました。さらに、拡張的な記述があれば、1点を出しました。(ボーナス加点2点以上は、該当レポートなし。)

 

講評

今回は、「コマンドレファレンス」の課題ではなく、make自体の機能や、makefileの記述方法を問う設問でしたが、「コマンドレファレンス」として書いてきた人が何人かいました。
思い込みで課題を決め付けないで、どのような設問になっているか、設問の文章をよく読んで、出題の意図に沿うような答えを出すようにして下さい。
ページTOPへ



   課題4(2009/05/7)

課題内容

割り込み処理とは何か、調べてください。
できるだけ、自分の言葉で解説してください。
インターネットのサイトの引用を貼り付ける場合には、それを読んでどう考えた、「考察」を加えてください。また、URLも明記して下さい。
標準点:5点
ボーナス課題
・「Windowsへのファイルの書き出し方法」について、拡張子がCのファイルだけではなく、拡張子がHのファイルを書き出すコマンドを調べて下さい。(1点)
・起動カーネルの「背景色」を切り替えた際、その数値が持つ意味を調べて、報告してください。(報告内容によっては、点数高いです。)

 

採点基準

以下の項目の解説に対して、それぞれ1点を出しています。
ただ、書き方などで、微妙に二つにカウントしたり、一つにカウントしたりしていますので、キーワードがあればとにかく点になっている、という訳ではありません。
※ ボーナス課題(ファイルの書き出し)では、
tar cvf /dev/fd0 *.[ch]
が理想的な解答ですが、一人もいませんでした。拡張子がcの他にhのファイルも書き出す(MINIXでは、大文字と小文字を区別するため、問題文で拡張子Hと書いたのは不適切でしたが)その部分は*.[ch]です。([]の表記は、どれか一つを適用する場合に使う。)ただ、コマンドとしては、全部を書いて完全です。ただ、「*.[ch]と書く。」というだけの解答でも1点としました。
tar cvf /dev/fd0 *.hも、正解です。(この答えで1点を出す予定の問題でしたが、[ch]の報告があったので、そちらを2点にする、つもりで正解を拡大しました。)

 ※ ボーナス課題(背景色)
0xは16進表記の記号で、最初の二つの文字が、背景色と文字色の指定です。
  16進数一桁ずつなので、MINIXでは指定可能な色数は16色です。最後の二桁は、書き直しすると大幅に文字化けしますが、これが何を意味するか調べた場合には10点台の大量加点をするつもりでした。(3段階くらいのトレースで、答えが出てきます。)


 

講評

「試す」⇒「調べる」という反復で、標準16色に言及したレポートが数通ありました。
こうした方法が、「課題」を出した本来の目的です。実際に試してみないと、意味がありません。実際に試すと動作しないコマンドをボーナスの「解答」と書いた人が、かなりの人数いました。

ページTOPへ



   課題5(2009/05/14)

課題内容

printfから、システムコールまでのトレースについて、配布プリントの空欄部分を埋めて、提出してください。

 

採点基準

掲示では、10点満点のスコアをつけましたが、合計する際に×0.4倍して合算します。
また、プリント提出があって、「実習課題」を二つクリアした計算にしています。
通常のレポートと同様に、5月21日に提出がなかった場合は、「週遅れ」でカウントします。

 

講評

まだ、「トレースする」ということがよくわかっていなかった人もいたようでした。
また、「トレースする」だけでいいのか、個々の関数などの意味も理解する必要があるのか、戸惑ってしまった人もいたような気がしますが、この日の課題では、「トレースする」やり方を理解すれば、それで良い、という立場で採点しました。

grepなどを用いたやり方は、UNIX系のOSでも使えますし、何よりも「名前」でプログラムの内容を追跡するという方法は、他の人の書いたプログラムを読む際にしばしば行う手法です。このやり方で「流れを辿る」という方法を身につければ、プログラムを読む能力は格段に上達すると思います。
5月28日まで、3回連続でトレースを行います。「プログラムの中身を理解する」のは「副産物」として、何よりもまず「トレースのやり方」、「辿り方」を身につけて欲しいと思います。

ページTOPへ



   課題6(2009/05/21)

課題内容

call_vecから、DEV_WRITEでのカーネル再突入(reenter)までのトレースについて、配布プリントの空欄部分を埋めて、提出してください。

 

採点基準

当日中に提出があり、要求した内容に記載があれば2点を加点します。期限は、当日中から「5月28日まで」に1週間延長しました。「5月28日まで」が期限内提出です。
プリント提出があって、「実習課題」を二つクリアした計算にしています。
掲示では、10点満点のスコアをつけましたが、合計する際に×0.4倍して合算します。

 

講評


ページTOPへ



   課題7(2009/05/28)

授業中の課題内容

KERNEL内部でDEV_WRITEを受け取って、do_write()から、phys_copyまでのトレースについて、配布プリントの空欄部分を埋めて、提出してください。

 

採点基準

プリント提出があって、「実習課題」を二つクリアした計算にしています。
成績掲示では、10点満点のスコアを表示しますが、合計する際に×0.4倍して合算します。

 

講評


   ボーナス課題(2009/05/28)

課題内容

キーボードから入力があった場合、キーボードからの入力が、どうプログラムに手渡されるか。
キーが押されると、キーボード割り込みが発生し、kbd_hw_int()がコールされる、というところからスタートして、OSのメッセージ配列に値が代入されるところまでを、トレースして下さい。(標準点:5点)
kbd_hw_int()が、どこで「割り込みベクトルテーブル」に設定されているかを探す。(発展課題:3点)
ユーザプログラムのscanf()が、どうシステムコールを呼び出すか、トレースする。(発展課題:標準点15点)
OSからのデータ受け渡し部と、ユーザライブラリでのデータ受け取り部の、つなぎの部分を探す。(発展課題:7点)

3回に渡って、プリントでトレースの主だった部分を抜き出しました。printf()(出力の関数)の場合から類推して、scanf()(入力の関数)の場合の処理を辿ってみて下さい。

報告の様式は、これまで配布したプリントような書き方で、どのファイルの何行目で何と言う関数を呼び出しているか、あるいは、何と言う引数を渡して関数を間接参照しているか、などを記し、CPUがプログラムを実行している順に辿ってください。
 

採点基準

基本的に、ソースコードを読まないとならない訳ですが、「重要そうな関数」をうまく見つけられるかが、課題を解く鍵となります。逆に言えば、一つ「アイテム」を見つけて次のステップにつなげることが出来た場合、その「アイテム」ごとに1点ずつ加点していったとして、合計すると40点を超える大ボーナスになります。
 途中には、キャッシュバッファがあり、パイプとの分岐があり、「どのプロセスの入力か」を結びつける部分があり、大冒険になるはずです。

 

講評


ページTOPへ



   課題8(2009/06/04)

課題内容

(1)起動時のメッセージを、画面コピーなどでレポートに貼り付けて、印刷してください。
(2)psコマンドでプロセスの状態を表示し、OSが起動したプロセスの一覧を記してください。
プロセスが分岐生成されたことを、プロセスのプロセスIDで調べ、具体的に親子関係のあるプロセスを記して下さい。
 

採点基準

  (1)メッセージ変更:2点(コンパイルの必要なもの)、/etc中 のファイルを使用する方法、1点
  (2)プロセス一覧1点、親子関係の記述2点。
  その他、適宜加点します。

 

講評

(-11)など、プロセスIDが括弧に囲まれているものは、OSそのものです。(これは、授業中も説明を忘れてはいません。)これらの「親プロセスID」が0になっていますが、「親」はOSの初期化プロセスそのもの(起動時に生成された)と解釈して下さい。
  つまり、「親子関係」を辿る際に、「一番の親」(授業中に、アダムとイブだと説明しましたが、)に相当するのは、INITです。INITが全てのプロセスの大元の「親」です。この部分を、間違えた人が結構いました。

   ボーナス課題8(2009/06/04)

課題内容

ブート時のエントリーポイントから、ジャンプ元のファイル名・行番号と、ジャンプ先のファイル名・行番号を示しながら、C言語のkernelのmain()が起動するまでを辿りなさい。
アセンブラのソースもありますが、基本的に「名前」で辿っていくとmainまでたどり着くことができます。
 

採点基準

一つのジャンプ(1ステップ)を1点でカウントします。

 

講評


ページTOPへ



   課題9(2009/06/11)

課題内容

MINIXシステムでポーリングしているのは、主にはOSの待機タスクです。
 (1)どのファイルの何行目で定義されているか?
 (2)何を行うためのタスクか?

  ファイルのコメントなどを読み、MINIXでのそのタスクの構造や、特徴、特記事項などを調べる。
 

採点基準

一つの待機タスクについて、ファイル・行番号、タスクの説明が正しくて1点。
  その他、コメントなどから、そのタスクについての「構造」や「特徴」などの補足説明があり、内容が正しい場合には、適宜加点します。
  ファイル名+行番号 ⇒ 0.4点/1項目
  (タスク名)+ファイル名+行番号 ⇒ 0.6点/1項目
  (タスク名)+ファイル名+行番号+関数名 ⇒ 0.8点/1項目
  (タスク名)+ファイル名+行番号+関数名+説明 ⇒ 1点/一項目


 

講評

 説明が英語であっても、点を出していますが、翻訳がおかしいところは減点しています。
例:library は、ライブラリで構いません。これを「図書館」と訳した人がいますが、図書館などと書くと説明の日本語がおかしくなります。

 また、無限ループはあるが、タスクではないものがありみあす。これらは、タスクに準じるものの場合には、0.8点としました。説明がおかしいものは、適宜減点しています。または、説明がないものは、0.8点/1項目を上限としています。

   ボーナス課題9(2009/06/11)

課題内容

Watchdog Timerがどこで定義されているか探す。
Watchdog が起きた時の処理を、コメントなどから調べて、どんな処理が行われるか、調べる。
 

採点基準

調べ方、着眼点は一人一人異なると思います。難度の高い課題なので、レポートを読んでみて、アプローチの着眼点や、調べた結果などに個別に点を出します。

 

講評


ページTOPへ



   課題10(2009/06/18)

課題内容

授業中行った実習課題2について、報告しなさい。
「課題」内容(pipe)
この課題で何を試そうとしたか。
作成したプログラム(画面コピーがあると良い)
課題の結果
結果についての考察

 

採点基準

「結果」を出すまでは、それほど難しくないと思いますが、「意味」を正しく解釈できているかどうかが、問題となります。「親」から出ているメッセージなのか、課題内容で書いたとおり、「何を試そうとしている課題なのか」を、正しく理解していることが、伝わるようにレポートをまとめて下さい。
あるいは、自分でプログラムに改良を加えて、「親」なのか「子」なのか、わかりやすくして報告にまとめたら、それは「良い評価」の対象になります。
(どんな工夫でも、「工夫」したら加点するようにします。)

  結果の画面コピーに1点、添え字の1が入口、0が出口という記述に1点、pipeがデータの受け渡し用であることの説明に1点、forkがプロセスの分岐命令であることに1点、一方の口を閉じることによってパイプが一方通行になることの記述に1点、などを出しています。

 

講評

予想外に、「何を試した演習なのか」がわかっていない学生が多かったような気がします。
  forkは、親プロセスが子プロセスを分岐する機能であり、fork自体はpipeとは関係ありません。が、forkが親子間にパイプを通すと勘違いしていた学生が少なくありません。
  pipeを通すのは、pipe関数です。パイプを通してから、「親子」が分離独立するため、一つの入り口、一つの出口だったパイプが、二つに分かれます。


ページTOPへ



   課題11(2009/06/25)

課題内容

(1)「仮想メモリ」と「物理メモリ」の違いをまとめなさい。
(2) プログラム中に、segmentという概念が扱われている。どのような目的でセグメントが使用されているか、まとめなさい。

ボーナス課題
(3) (1)と(2)で記述した内容を、うまく説明するようなMINIXのソースコードがどこに書かれているか、探して示しなさい。

 

採点基準

(1)と(2)の配点は各3点で、OSについての基本的な知識を元に報告をまとめれば、それでOKとしますが、いくつかのキーワードが正しく説明されているかをチェックポイントとします。


 

講評

  「仮想」メモリは「架空のメモリ」ではない、という説明を逆に解釈して、「仮想メモリは架空のメモリ」という説明がありましたが、これは完全な誤りです。
 「仮想的」という語には「実質的」という意味があることを説明しています。また、「ハードディスクをメモリの代用にするために仮想メモリを使用する」のも、間違いとは言い切れませんが、かなり誤解があります。ハードディスクをメモリの代用にしているのは、主目的とは言えません。
 スワップファイルの説明に1点、物理メモリでは物理的な素子があることの説明に1点、仮想メモリはアドレス空間が広いことに1点、などをキー・ワードとしています。

 セグメントについては、メモリ管理方式の一つであることに1点、セグメントは可変長であることに1点、あまりマルチタスクに向いていないなどに1点、roll in/roll outなどの説明に1点、相対アドレス(オフセット)が変化しないため、移動が容易であることなどに1点を出しています。

ページTOPへ



   課題12(2009/07/02)

課題内容

課題1
/etc/groupを編集して、team1というグループを、グループ番号51で、登録してください。
次に、/etc/passwdを編集してあなたの好きなログイン名でユーザを1名登録し、そのログインディレクトリを作成する。
作成したログイン名で、ログインする。

報告:ログインプロンプトに、作成したログイン名でログインし、pwdでログインディレクトリを表示し、cat /etc/passwdで、passwdの中身を表示した画面のコピーをレポートに添付してください。

課題2
二つのグループ(team1, team2など)と、3人のユーザを設定して下さい。
team1に所属するのは、AさんとBさん、team2に所属するのは、Cさん
Aさん、Bさんなどには、各自で名前を設定して下さい。
 名前は、中村さんでも、田中さんでも・・・
各ユーザのログインディレクトリを忘れずに作成してください。

報告:この3人を登録した後の、/etc/groupと/etc/passwdの内容を、報告してください。

課題3
異なるユーザが、作成した異なるアクセス権設定のファイルに、それぞれ
 自分
 自分以外のグループメンバー
 他のグループのメンバー
がアクセスした場合に、catでの読み出し、viで編集した後の書き込みなどが、どう変化するか、調べて下さい。

調査方法、組み合わせは、各自で工夫してください。
(調べ方、組み合わせも、評価対象です。)

発展課題0:rootでログインしたら、何ができるか確認する。

発展課題1:/usr/ikuoなどの、ホームディレクトリのアクセス権を設定した場合、どんな動作をするか調べる。(この設定は、rootでしかできない)

発展課題2:コマンドプロンプトを、自分専用に書き換える。

ボーナス課題
/dev/の下の
 /dev/lp
 /dev/console
 /dev/null
 /dev/fd0
などの「属性」の意味を調べる。
それぞれのファイルが、どんなデバイスを指し示しているのか、調べる。
 

採点基準

 課題1の配点が2点、課題2の配点が3点、課題3の配点が5点(いずれも標準点)

 それぞれ、発展課題は適宜加点します。

 課題1では、画面コピーと、登録内容が正しくて2点。ユーザIDが重複していてエラーが出た人がいましたが、これは1点としています。
 課題2では、グループファイルに記述するユーザ名が、passwdファイルで登録されたユーザ名でなければならないのですが、無関係の名前を書いた人がいて、これも1点だけとしています。

 課題3では、重要な点が基準となっています。
それは、「動作テストとしての手順を理解しているか」という点です。
 詳細は講評に書きます。

 

講評

 動作テストを行うときには、「網羅的」に組み合わせを調べますが、条件分岐がかかると、通常は2の階乗など、掛け算で「組み合わせ数」が増えていきます。

 しかし、すべての組み合わせ(大きいプログラムで、数百万通り)などを調べることは不可能です。したがって、「すべてのパスを通る」ように調べることになります。
 ここでは、「読み」と「書き」のそれぞれの動作が確認できる方法を記述していること(実際にやったことが、「読み」と「書き」のテストであることがわかるように記述していること、が、まず重要で、ここでフラグの意味と合わせて2点を出しています。
 次に、調べる対象が、「自分」か「自分以外のグループメンバ」か、「それ以外」か、この三通りについて、調べているか、それがポイントになります。結果、最も簡略化したテストでは、2通り+3通りで、5通り調べればいいことになります。ただし、この程度の組み合わせ数でしたら、2通り×3通りで、6通りを調べてもいいかも知れません。
 この6通りの組み合わせについて、「できる」場合と「できない」場合とを調べるとしたら12通りですが、これが「完璧なテスト」になります。

 ここで、考えてほしいのは、「自分」にはできないが、「他人」には許可するというような使い方は、通常しない、という点と、気づいた人がほとんどいませんでしたが、「読み」はできないが「書き」ができる、ということは有り得ない、という点です。今年がこの課題は初年度なので、どれだけ多くの学生がこの点に気づくか、興味深かったですが・・・。(来年になると、語り継がれて、「自分で気づいた」数を把握することはできなくなると思いますが。)
 「書き込む」ためには、最初に開いて、すでに存在しているファイルを読まなければなりません。したがって、「書き込みはできるが読み込みできない」ということにはならず、せっかくの演習なので、実際に試してみれば、この点はすぐに結果がでたはずなのです。自分で気づいた人とほぼ同数の人が、試さずに、こうした組み合わせの存在をレポートに書いていました。

 ルートは、ほとんど「オールマイティ」です。何でもできます。

 ディレクトリにアクセス権を設定すると、そのディレクトリの中にあるファイルそのものが見えなくなったりします。

 /dev/lp, /dev/null, /dev/console, /dev/fd0は、いずれもよく使われるデバイスファイルですが、それぞれ、スプーラ、「ごみ箱」、ログイン端末、フロッピー装置に対応します。ここでは、ブロックデバイスや、文字型デバイスの違いが書いてあれば良かったのですが、それぞれのデバイスが何かまで調べた学生はほとんどいませんでした。

ページTOPへ