Operating System Concepts 11,12,13章練習問題

恐竜本11,12,13章練習問題を解きました。問題演習は今回で終わりです。次はパタヘネですかね~

11.1 前者:ディスクの容量をOSが入る程度まで小さくできる。 後者:ユーザーが次回ログイン時に作業を再開できる。
11.2 OSとしてファイル操作を行うAPIを提供している場合は、対象ファイルの種類を特定できる必要がある。ファイルシステムに種類を保持しておけばAPIで種類を指定する必要がなくユーザーフレンドリー。トラッキングしない場合は種類を保存する領域が削減できるのでどちらが良いとも限らないというのが昔の考えだと思うが、現代のシステムでファイルの種類を保存する領域をケチるほどカツカツな環境はないと思うので前者のほうが良い
11.3 前者のアドバンテージはユーザープログラムが自分で実装すべきコードが減り、OSが解析を行ってくれる。一方OSのコードが増え、保守工数や価格に返ってくる。後者のアドバンテージはOSがシンプルになる。一方ユーザーがやることが増える。
11.4 シミュレートの意味合いが不明だが、パス名をファイル名として保持させればシミュレートできる(hoge/foo/barというファイル名を許可する)。文字種が制限された場合、区切り文字に必ず1文字いるので、マルチレベルで使えた文字種のうち、シングルレベルでのシミュレーションでは1種類が使えなくなる。
11.5 open:ディスク上のファイル実体の位置特定、ファイル内の現在位置、開いているプロセスを管理するデータをOSのテーブルに追加する
close: openされているファイルを管理するテーブルからデータを削除する
11.6 a. 下位ディレクトリに別のユーザーにアクセス制限されたディレクトリを作れない b. 上位ディレクトリの権限を持っていてもサブディレクトリの権限を得られないシステムにする
11.7 a. 各ユーザーに関してchmodでアクセス権限を付与する b. ファイアウォールのような方式でファイルアクセス権を管理する。
11.8 ユーザーaclのメリット:ファイル作成時にaclが必要ない。 ファイルaclのメリット:特定ファイルのアクセス権を管理する際に全ユーザーのaclを変更する必要がなく、そのファイルaclだけ触れば良い

12.1 a. contiguous:201(既存100ブロックの読み/書き+新規書き込み) linked:1(末尾への追加とポインタ作成) indexed:1(ブロック書き込み)
b. contiguous:101(既存50ブロック読み/書き+新規書き込み) linked:52 (新規書き込み+ポインタ巡り50読み+書き換え1) indexed:1 (新規書き込み)
c. contiguous:1(新規書き込み) linked:102 (新規書き込み+ポインタ巡り100読み+書き換え1) indexed:1
d. contiguous:198(既存99ブロック読み/書き) linked:0 indexed:0
e: contiguous:100 (既存50ブロック読み/書き) linked:51 (消すブロック直後までのポインタ読み50+ポインタ書き換え1) indexed:0
f: contiguous:1 linked:99 indexed:0
12.2
12.3 揮発性のメモリにおいておくと突然の電源断でブロック割当状態が不明となりファイル破損につながるから
12.4 ファイルサイズがブロックサイズと比較して十分大きいか小さいかを基準とする。小さい場合はcontiguousを選び、中くらいの場合はlinked、大きい場合はindexを使用する。ファイルサイズに対してインデックスのサイズのほうが大きいこともあるため。
12.5 contiguousの利点を得ながら柔軟なファイルサイズを実現できる。ただ、initial contigous areaを使ってしまった後はたんなるlinkedになるので、contigous areaを用意するオーバーヘッドが掛かっただけになる。基本的にファイルサイズが拡大しないと想定される場合に向く。
12.6 CPUからメインメモリに取りに行くよりキャッシュから読んだほうが遥かにデータの取得が早いので、実行メモリアクセス速度を向上できる。ただ、高いのであまり大容量は確保できない。
12.7
12.8 共通のインターフェースでファイルを操作できるので、それを介した操作をOS上に実装しておけば、各ファイルシステムのサポートはファイルシステム開発者がVFSを実装することでOS開発側の工数が削減できる。
13.1 利点:CPUを使わずIOができるのでIO中OSは別のことができる、OSがデバイスに個別対応しなくて良い、
欠点:デバイスにプロセッサをつける必要があり値段が上がる、
13.2 OSは自分が立てたcommand-readyビットを立てるが、デバイスコントローラはbusyの意味で同じビットを立てようとする。結果ビットが常に立ち続け、意味をなさなくなる。当然command-readyなのかbusyなのか区別がつかない。そのため不十分である。
→busyが終わったときクリアすれば良い(解答より)
13.3 すぐに対応しないとデータが上書きされてロストするものは割り込み、キューイングされるものについてはポーリング
→頻繁で小刻みなものはポーリング、それ以外は割り込み(システム効率観点 解答より)
13.4 IOがコンテキストスイッチと比較してすぐ終わるものはビジーウェイトでポーリングを使う。長いIOにはsleepと割り込みを使う。pollingが有利となるのはすぐ終わるIOが頻繁に発生する環境。割り込みが有利なのは長いIOが頻繁に発生する環境。ハイブリッドはどちらか読めない場合。
13.5 デバイスコントローラが直接メモリに結果を書き込むのでCPUと同時実行できる。デバイスとメモリを直接つなぐ回路が必要。
13.6 バスの速度がIO速度を決め、システム全体の律速となるから。
13.7

コメント

タイトルとURLをコピーしました