matzryo / mynotes

自分の学習メモ帳
0 stars 0 forks source link

オペレーティングシステム 設計と実装 #11

Open matzryo opened 6 years ago

matzryo commented 6 years ago
  1. OSの2つの主機能とは何か。 マシンの拡張と資源管理
  2. カーネルモードとユーザモードの違いはなにか。OSにとってこの違いはなぜ重要なのか。 ユーザーに変更などの操作を許すかどうか。ハードウェアレベルで保護される。根幹部を下手に変更されると、動作しなくなるから?
  3. マルチプログラミングとは何か。 あるジョブのI/O待ち時間でも他のジョブのためにCPUを活用する技術。従来はひとつのジョブしかメモリに保持していなかったので、そのジョブのI/O待ち中はCPUが遊んでいた。実際、商用コンピューターなどは待ち時間が全処理時間のかなりの割合になることもあった。高価なCPUをより効率よく動かしたいという要求があった。それを解決する技術としてマルチプログラミングが生まれた。
  4. スプーリングとは何か。将来標準機能としてパソコンにスプーリング機能は有効と思うか。 カードからディスクにジョブを読み込む機能。従来はカードを磁気テープにコピーする処理を挟んでいた。また、前のジョブ終了後、新しい磁気テープをセットする必要があった。 すでに標準機能となっている。プリンタなどの低速はI/O装置とのやりとりに活用する。
  5. 初期のコンピュータでは、読み書きする1バイトづつがCPUによって直接処理されていた。(つまり、DMA: Direct Memory Access機構はなかった)。この機構がマルチプログラミングにもたらした意味は何か。
  6. 第二世代のコンピュータにタイムシェアリングが普及しなかった理由はなにか。 バッチシステムにより、入出力の待ちが無かったから?
  7. 以下の命令はカーネルモードにだけ許されるべきか。 (a)すべての割り込みを禁止する (b)TOD(Time Of Day clock)の読み込み (c)TODの設定 (d)メモリマップの変更
  8. パソコン用OSとメインフレーム用OSの違いをリストアップせよ。 マルチプログラミングが可能
  9. Windowsのように非公開でソースコードの所有権を保有しているOSのほうが、LInuxのように公開された オープンソースコードよりも品質が良いと言う理由を一つあげてみよ。逆に、LinuxのようなオープンソースのOSのほうが、Windowsのような非公開のソースコードよりも品質が良いという理由を一つ挙げてみよ。 既知の脆弱性が攻撃者に見つけづらい 未知の脆弱性が開発者に発見されづらい
  10. ファイル保有者がUID=12でGID=1のMINIX3ファイルが、モードrwxr-x---であったとする。そこに、UID=6,GID=1のユーザがこのファイルを実行しようとしていた。何が起こるのか。 UIDが異なり、GIDが同じなので、groupの実行権限がチェックされる。権限が付与されているため、実行される。
  11. 単に、スーパーユーザが存在するだけであらゆるセキュリティの問題が発生するという考えがあるが、どう思うか。 たしかに。rootとられるから危険なんだもんな。でもrootなかったら、システム全体の設定ができない?まあそれはそれで割り切ればいいのか?
  12. すべてのUNIXのバージョンは、(ルートから開始する)絶対パス名と(ワーキングディレクトリから開始する)相対パス名を提供している。それでは、この一方を捨てて、他の一方の代替えができるか。もし可能なら、どちらを残すのか。 どちらでも、単独で成立するように思えるが…chrootが加わるとおかしくなる? いや、相対パスでもルートの上にはいけないか。
  13. タイムシェアリングシステムにはプロセステーブルはどうして必要か。そのプロセスが完了するまでマシンの全リソースを独占するたった一つのプロセスしか存在しないパソコンでは、プロセステーブルは必要か。 ないと、プログラムが途中から再開できなくなるから。後者の場合は不要。
  14. ブロックスペシャルファイルとキャラクタスペシャルファイルとの基本的な違いは何か。 どちらもデバイスの読み書きに使う点では同じ。指定の場所を直接読めるのがブロックスペシャルファイル。切れ目のない文字ストリームを読むのがキャラ蔵スペシャルファイル。
  15. MINIX3において、もしユーザ2がユーザ1所有のファイルにリンクしたときに、ユーザ1がこのファイルを消去する。このとき、ユーザ2がこのファイルを読もうとすると何が起きるのか。 いままでと変わらず読み取れる。両者からの参照がなくなったら、はじめてファイルはディスクから消去されうる。
  16. パイプは基本的な機能だろうか。これが使えなくなったとき、主機能が失われるだろうか。 基本機能ではない。主機能は失われない。ファイルを作成すればよい。
  17. ステレオやデジタルカメラのような近代的な家電用品はコマンド(操作司令)を入れるディスプレイを備えていて、入れたコマンドを見ることができる。この種の装置は原始的なOSを内部に持っている。そこで、パソコンソフトのどの部品が、ステレオやデジカメのディスプレイに類似なコマンド処理をしているのか。 ちょっとよく意味がわからないが…シェル?
  18. Windowsは新しいプロセスを生成するforkのようなシステムコールをまだ持っていない。そこで、Windowsが新しいプロセスを生成するために使用するシステムコールの方法論について、本書を読んだ教養に基づいて述べてみよ。 プログラムが保持するデータごと、リソースをコピーする。コピーされたプロセスで、新たにプロセスを走らせる。(なんでコピーする?それが一番てっとりばやくツリーを作れる?)
  19. なぜchrootシステムコールの使用権限はスーパーユーザに限定されているのか。(ヒント:保護の問題を考えてみよ。) もし一般ユーザーがchroot可能だと、
  20. 図1-9に示されたシステムコールのリストを調べてみよ。つまり、最も高速に実行されるコールが何か。また、その理由を述べよ。
  21. コンピュータが10億(1 billion)命令を一秒で実行でき、システムコールは割り込み並びにコンテックストスイッチなどすべてを含めて1,000命令を実行すると仮定してみる。このとき、アプリケーションコードの実行にCPUの半分を使うとして、1秒間に館内のシステムコールが実行できるのか。
  22. 図1-16でシステムコールmknodが実行されるがrmnodコールはなされない。これは、ノードを作成するに当たり、ノードを消去する手段がないので、極めて慎重にしなくてはならないことを意味しているのか。
  23. MINIX 3は常にupdateのプログラムを実行しているが、その理由は何か。
  24. SIGALRMシグナルを無視する意味とはどのような意味があるのか。
  25. クライアントサーバモデルは分散システムでは一般的である。1台のコンピュータシステム環境でこれが使えると思うか。
  26. Pentiumの初期バージョンはバーチャルマシンモニタを提供していなかった。マシンを仮想化するために必要な基本的な機構は何か。
  27. MINIX3システムコールをテストするプログラム(あるいは一連のプログラム)を書いてみよ。各々のコールに対して、各種のパラメータの集合を試し、その中には、誤ったパラメータを含ませ、それらが検出されるかなどを確かめてみよ。
  28. 図1-10と類似なシェルのプログラムを書いてみよ、。ただし、そのシェルをテストできて、現実的な使用に耐えるコードとせよ。また、入出力のリダイレクト、パイプ、バックグラウンドジョブ、などのような機能を追加してみよ。
matzryo commented 6 years ago

子プロセスを直接作らずforkする理由。execveの前にファイルディスクリプタを操作できるからとのこと