OSがどのようにファイルを管理しているかのまとめ
#ファイルシステム
ファイルを使ってデータを管理するプログラムの集まりはファイルシステムと呼ばれる。ファイルシステムは1つのファイルに関して、「保存すべきデータそのもの」と「ファイルの属性」の2種類の情報を管理する。
#ファイルディスクリプタ
プロセスがファイルにアクセスする際はファイルディスクリプタを介して上述の2種類の管理情報にアクセスする。
プロセスは、ファイルシステムが提供したシステムコールでのみファイルにアクセスでき、基本的なシステムコールは
・CREATE/DELETE (作成と削除)
・OPEN/CLOSE (オープンクローズ)
・READ/WRITE (読み込み書き込み)
・SEEK (アクセス位置の変更)<=READ/WRITEじゃなくて、データの読み書きを伴わないでアクセス位置を変更したいとき
・GET/SET ATTRIBUTES (属性の取得と設定)
・RENAME (ファイル名の変更)
#通常ファイルと特殊ファイル(略)
#シーケンシャルアクセスとランダムアクセス
##デバイス側から見た差異
シーケンシャルアクセス:磁気テープなどでは、連続したすべてのデータを順番に読み込んでいって比較するしか道はない。EOFフラグを最初から見ていって見つけ出す必要がある。
ランダムアクセス:一方で、位置を指定することで一意にデータを特定する。
##アプリケーション側から見た差異
シーケンシャルアクセス:1バイト単位のアクセスを必要とするファイル(改行コードを先頭から集計していくため)
ランダムアクセス:レコード番号をインデックスとしてアクセスする。
#ブロック単位のデータ管理方法
##連結リスト
インデックスでブロックデータのブロック位置を特定する。
##可変長インデックス
管理データファイルの属性値としてブロックデータのブロック番号を可変長列として保持する。
##固定長インデックス
ロックの開始番号だけ管理ファイルの属性値として持っている。あとの順番はデータ自身に任せる。
#5章
OSが管理する入出力のまとめ。プロセスはOSが提供するシステムコールを呼び出すことで(システムコールが界面)入出力機器にアクセスし、一方OSはハードウェアインターフェースの抽象化を行っている。
#入出力デバイスの種類
デバイスの種類は
・入力のみ
・出力のみ
・入出力
に大別される。キーボードなどは任意のタイミングでデータを出力しつづけ、生成されるデータ量を測れないし、アドレスも存在しない:ストリームデータという
#入出力ソフトウェアの階層構造
上流からは、上位層(プロセス)→非依存ソフトウェア→デバイスドライバ→割り込みハンドラ→ハードウェアの順の処理が流れる。
非依存ソフトウェア・・・プロセスからの入出力要求を管理する(e.g. ファイルシステム)
デバイスドライバ・・・ハードウェアを直接制御する
割り込みハンドラ・・・入出力機器からの要求があった時にどのような処理を行うかを示す(デバイスドライバの一部)
ブロッキング処理・・・プロセスが下位の情報を待たされるか。あとで受け取るようにして、継続処理が可能なものはノンブロック処理という
#入出力ハードウェア
ハードウェアインターフェース・・・物理的な接続仕様