総合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に返却予定です。 |
課題1(2008/04/17) |
ページTOPへ採点基準
今回は、オペレーティングシステムの方でつけてしまいましたので、こちらでは課題としません。
講評
課題2(2009/04/23) |
ページTOPへ採点基準
「コマンドレファレンス」って何ですか?という質問がありましたが、そのまんま「コマンドレファレンス」で検索して下さい。
この課題は、授業中に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点
講評
そもそも、「コマンドレファレンスとは」という部分がわからない人が多かったようです。
書店で「コマンドレファレンス」という本は多数売られていますし、ネットで「コマンドレファレンス」と検索すると、今回の課題の答えはかなりが表示されますが、「最も簡単な答え(コマンドの機能)」しか書かない人が半数近くいました。
定期試験前には、自分用のコマンドレファレンスをきちんと印刷して用意して欲しいと思います。
課題3(2009/04/30) |
ページTOPへ採点基準
以下のキーワードの説明ごとに、加点しています。
ここまで、7点を上限に採点しました。さらに、拡張的な記述があれば、1点を出しました。(ボーナス加点2点以上は、該当レポートなし。)
- スクリプトを実行して、ターゲットを生成する(コンパイルなどを行う)コマンドである。(1点)
- 修正された必要最小限のコンパイル・リンクなどの動作だけを行うため、効率的。(1点)
- 「必要最小限」であることを判定するために、タイムスタンプを参照する。(1点)
- デフォルトでmakefileという名前のスクリプトファイルがなければならない。(1点)
- ファイルの「依存関係」を調べる。(1点)
- 拡張子から、生成方法を推測するサフィックス・ルールを記述できる。(1点)
- マクロ定義により、生成方法の変更などに柔軟に対応できる。(1点)
- コマンドの記述方法は、ターゲット:ソース名(コロン)(改行)(タブ)コマンドである。(1点)
講評
今回は、「コマンドレファレンス」の課題ではなく、make自体の機能や、makefileの記述方法を問う設問でしたが、「コマンドレファレンス」として書いてきた人が何人かいました。
思い込みで課題を決め付けないで、どのような設問になっているか、設問の文章をよく読んで、出題の意図に沿うような答えを出すようにして下さい。
課題4(2009/05/7) |
ページTOPへ採点基準
以下の項目の解説に対して、それぞれ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色に言及したレポートが数通ありました。
こうした方法が、「課題」を出した本来の目的です。実際に試してみないと、意味がありません。実際に試すと動作しないコマンドをボーナスの「解答」と書いた人が、かなりの人数いました。
課題5(2009/05/14) |
ページTOPへ採点基準
掲示では、10点満点のスコアをつけましたが、合計する際に×0.4倍して合算します。
また、プリント提出があって、「実習課題」を二つクリアした計算にしています。
通常のレポートと同様に、5月21日に提出がなかった場合は、「週遅れ」でカウントします。
講評
まだ、「トレースする」ということがよくわかっていなかった人もいたようでした。
また、「トレースする」だけでいいのか、個々の関数などの意味も理解する必要があるのか、戸惑ってしまった人もいたような気がしますが、この日の課題では、「トレースする」やり方を理解すれば、それで良い、という立場で採点しました。
grepなどを用いたやり方は、UNIX系のOSでも使えますし、何よりも「名前」でプログラムの内容を追跡するという方法は、他の人の書いたプログラムを読む際にしばしば行う手法です。このやり方で「流れを辿る」という方法を身につければ、プログラムを読む能力は格段に上達すると思います。
5月28日まで、3回連続でトレースを行います。「プログラムの中身を理解する」のは「副産物」として、何よりもまず「トレースのやり方」、「辿り方」を身につけて欲しいと思います。
課題6(2009/05/21) |
ページTOPへ採点基準
当日中に提出があり、要求した内容に記載があれば2点を加点します。期限は、当日中から「5月28日まで」に1週間延長しました。「5月28日まで」が期限内提出です。
プリント提出があって、「実習課題」を二つクリアした計算にしています。
掲示では、10点満点のスコアをつけましたが、合計する際に×0.4倍して合算します。
講評
課題7(2009/05/28) |
採点基準
プリント提出があって、「実習課題」を二つクリアした計算にしています。
成績掲示では、10点満点のスコアを表示しますが、合計する際に×0.4倍して合算します。
講評
ボーナス課題(2009/05/28) |
ページTOPへ採点基準
基本的に、ソースコードを読まないとならない訳ですが、「重要そうな関数」をうまく見つけられるかが、課題を解く鍵となります。逆に言えば、一つ「アイテム」を見つけて次のステップにつなげることが出来た場合、その「アイテム」ごとに1点ずつ加点していったとして、合計すると40点を超える大ボーナスになります。
途中には、キャッシュバッファがあり、パイプとの分岐があり、「どのプロセスの入力か」を結びつける部分があり、大冒険になるはずです。
講評
課題8(2009/06/04) |
採点基準
(1)メッセージ変更:2点(コンパイルの必要なもの)、/etc中 のファイルを使用する方法、1点
(2)プロセス一覧1点、親子関係の記述2点。
その他、適宜加点します。
講評
(-11)など、プロセスIDが括弧に囲まれているものは、OSそのものです。(これは、授業中も説明を忘れてはいません。)これらの「親プロセスID」が0になっていますが、「親」はOSの初期化プロセスそのもの(起動時に生成された)と解釈して下さい。
つまり、「親子関係」を辿る際に、「一番の親」(授業中に、アダムとイブだと説明しましたが、)に相当するのは、INITです。INITが全てのプロセスの大元の「親」です。この部分を、間違えた人が結構いました。
ボーナス課題8(2009/06/04) |
ページTOPへ採点基準
一つのジャンプ(1ステップ)を1点でカウントします。
講評
課題9(2009/06/11) |
採点基準
一つの待機タスクについて、ファイル・行番号、タスクの説明が正しくて1点。
その他、コメントなどから、そのタスクについての「構造」や「特徴」などの補足説明があり、内容が正しい場合には、適宜加点します。
ファイル名+行番号 ⇒ 0.4点/1項目
(タスク名)+ファイル名+行番号 ⇒ 0.6点/1項目
(タスク名)+ファイル名+行番号+関数名 ⇒ 0.8点/1項目
(タスク名)+ファイル名+行番号+関数名+説明 ⇒ 1点/一項目
講評
説明が英語であっても、点を出していますが、翻訳がおかしいところは減点しています。
例:library は、ライブラリで構いません。これを「図書館」と訳した人がいますが、図書館などと書くと説明の日本語がおかしくなります。
また、無限ループはあるが、タスクではないものがありみあす。これらは、タスクに準じるものの場合には、0.8点としました。説明がおかしいものは、適宜減点しています。または、説明がないものは、0.8点/1項目を上限としています。
ボーナス課題9(2009/06/11) |
ページTOPへ採点基準
調べ方、着眼点は一人一人異なると思います。難度の高い課題なので、レポートを読んでみて、アプローチの着眼点や、調べた結果などに個別に点を出します。
講評
課題10(2009/06/18) |
ページTOPへ採点基準
「結果」を出すまでは、それほど難しくないと思いますが、「意味」を正しく解釈できているかどうかが、問題となります。「親」から出ているメッセージなのか、課題内容で書いたとおり、「何を試そうとしている課題なのか」を、正しく理解していることが、伝わるようにレポートをまとめて下さい。
あるいは、自分でプログラムに改良を加えて、「親」なのか「子」なのか、わかりやすくして報告にまとめたら、それは「良い評価」の対象になります。
(どんな工夫でも、「工夫」したら加点するようにします。)
結果の画面コピーに1点、添え字の1が入口、0が出口という記述に1点、pipeがデータの受け渡し用であることの説明に1点、forkがプロセスの分岐命令であることに1点、一方の口を閉じることによってパイプが一方通行になることの記述に1点、などを出しています。
講評
予想外に、「何を試した演習なのか」がわかっていない学生が多かったような気がします。
forkは、親プロセスが子プロセスを分岐する機能であり、fork自体はpipeとは関係ありません。が、forkが親子間にパイプを通すと勘違いしていた学生が少なくありません。
pipeを通すのは、pipe関数です。パイプを通してから、「親子」が分離独立するため、一つの入り口、一つの出口だったパイプが、二つに分かれます。
課題11(2009/06/25) |
ページTOPへ採点基準
(1)と(2)の配点は各3点で、OSについての基本的な知識を元に報告をまとめれば、それでOKとしますが、いくつかのキーワードが正しく説明されているかをチェックポイントとします。
講評
「仮想」メモリは「架空のメモリ」ではない、という説明を逆に解釈して、「仮想メモリは架空のメモリ」という説明がありましたが、これは完全な誤りです。
「仮想的」という語には「実質的」という意味があることを説明しています。また、「ハードディスクをメモリの代用にするために仮想メモリを使用する」のも、間違いとは言い切れませんが、かなり誤解があります。ハードディスクをメモリの代用にしているのは、主目的とは言えません。
スワップファイルの説明に1点、物理メモリでは物理的な素子があることの説明に1点、仮想メモリはアドレス空間が広いことに1点、などをキー・ワードとしています。
セグメントについては、メモリ管理方式の一つであることに1点、セグメントは可変長であることに1点、あまりマルチタスクに向いていないなどに1点、roll in/roll outなどの説明に1点、相対アドレス(オフセット)が変化しないため、移動が容易であることなどに1点を出しています。
課題12(2009/07/02) |
ページTOPへ採点基準
課題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は、いずれもよく使われるデバイスファイルですが、それぞれ、スプーラ、「ごみ箱」、ログイン端末、フロッピー装置に対応します。ここでは、ブロックデバイスや、文字型デバイスの違いが書いてあれば良かったのですが、それぞれのデバイスが何かまで調べた学生はほとんどいませんでした。