酒居敬一(sakai.keiichi@kochi-tech.ac.jp) オペレーティングシステム (ファイル) 2006年11月16日 酒居敬一(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2006/
クオータ末試験について 日時: 2006年11月27日 1時限(9:00~10:30) 場所: C102 学生証持参 日時: 2006年11月27日 1時限(9:00~10:30) 場所: C102 学生証持参 持ち込めるもの: 筆記用具、教科書、自筆ノート、印刷したプレゼンテーション資料、配布資料 次回(11月20日@A-WS)の予定 11月9日の演習の解答・説明 演習(仮想記憶とファイル)と自己採点
2つ以上の状態間で遷移でき、状態維持にエネルギーを消費しないものを利用して記録する 二次記憶 2つ以上の状態間で遷移でき、状態維持にエネルギーを消費しないものを利用して記録する 磁化を利用する HDDやフロッピーやDAT(磁界を変調して書く、磁界を読む) 光磁気ディスクやMD(磁界を変調して書く、カー効果で読む) 電荷を利用する フラッシュROM(電荷を注入して書く、閾値の変化で読む) 結晶構造を利用する CD-RW(加熱による相変化で書く、相変化を読む) 入出力命令で装置上のデータを読み書きする CPUがメモリを参照するのとは少し違う
入出力機器 バイト単位で入力と出力できる装置 読み書きする位置が設定(シーク)できるもの 読み書きする位置が設定できないもの シーク可能デバイス DAT HDD シークが比較的速いので二次記憶装置として使われる ランダムにアクセスできるが、アクセス位置を示すポインタは装置側に存在する(メモリと異なる点) 読み書きする位置が設定できないもの シーク不可能デバイス キーボード プリンタ スキャナ 狭い意味での入出力装置
二次記憶装置などの、装置を抽象化したもの データやプログラムといった情報を記録できるもの ファイルとは? 二次記憶装置などの、装置を抽象化したもの データやプログラムといった情報を記録できるもの バイト単位で読み書きできるもの、として抽象化 基本的には記録媒体+ポインタという構成で使える 所有者やアクセス権や参照カウントなどを保持 統一されたAPIをもつ open/close read/write/seek/readdir ioctl ファイルそのものには構造化する仕組みがない 情報を記録するしくみであり、整理するしくみではない
ディレクトリを指し示すことで構造化できる ディレクトリ(フォルダ)とは? ファイルに関する情報を複数記録したもの 情報はディレクトリエントリに記録 ディレクトリエントリの中でファイルを指し示す 指し示すようにすること → リンクする ディレクトリもファイルの一種である 記録するしくみとしてファイルを使用 ディレクトリエントリがディレクトリを指すこともできる ディレクトリを指し示すことで構造化できる 原理的には有向グラフにできる ただし、一般には木構造とする
各ディレクトリには特別な名前のディレクトリがある . ディレクトリそれ自身 .. 親ディレクトリ(rootに近いほうのディレクトリ) 親子関係により木構造としている 原理上、ディレクトリどおしの関係をグラフにすることもできるが、やらない。
ファイル4が、ディレクトリ Dir. DとDir. Eにリンクされている ファイル6が、ディレクトリ Dir. BとDir. Fにリンクされている ファイル8が、ディレクトリ rootとDir. Fにリンクされている UNIXでは通常ファイルを複数のディレクトリからリンクすることができる ファイルは番号で参照され、ファイルの名前と番号はディレクトリで対応付け
ファイルを、実際の記憶装置に写像するもの 記憶装置はバイト単位のデータを読み書きできる装置として仮想的に扱う スーパーブロック ファイルシステム(FS)とは? ファイルを、実際の記憶装置に写像するもの 記憶装置はバイト単位のデータを読み書きできる装置として仮想的に扱う スーパーブロック FSの大きさ、空きブロックの情報などを保持 ファイルが置かれる領域 所有者、時刻、種類、リンク数、使用データブロック データブロック 一定の大きさのブロックに分割されている 例: FAT、i-nodeなどが有名
データブロックの割当て技法 連続割当て 非連続割当て 空き領域の断片化が発生しやすい 空き領域のコンパクションが必要 リンク割当て リンクを逐次たどらないと参照できない。二次記憶装置の性質を考えると、参照するのに時間がかかる。 索引割当て 参照すべき領域は索引(index)を参照すればわかるので、データ領域を参照するのに時間がかからないようにできる。
非連続割当てでは原理的には問題ないが、なぜ問題となるか? フラグメンテーション フラグメンテーション(断片化)とは? 使用しているデータブロックが連続していない状態 非連続割当てでは原理的には問題ないが、なぜ問題となるか? リンク割当てにせよ索引割当てにせよ、データブロックが非連続に配置されていると参照に時間がかかる。 32MB/秒のデータ転送速度と8ミリ秒のシーク速度を持つデバイスでは、たとえば、32KBのデータ転送には1ミリ秒しかかからない。シークがいかに遅いか。
例: i-nodeファイルシステム 二次記憶上に置かれるもの スーパーブロック i-node領域 データブロック領域 FSの大きさ 空き領域の管理表 i-node領域 i-nodeの数がファイル数上限 ファイル データブロック領域 ファイルに含まれる情報
該当ファイルのディレクトリエントリを削除 i-node FSにおけるファイルの削除 該当ファイルのディレクトリエントリを削除 該当ファイルの名前は消える。 名前はディレクトリエントリに入ってる アンリンクするという。 アンリンクしたファイルの参照カウントを減らす 参照カウントが0でなければファイルは消さない。 他のディレクトリからリンクされている場合 実行中の場合(後で説明) mmapされている場合(後で説明) 参照カウントが0ならファイルを消す。
ファイルの種類 通常ファイル デバイススペシャルファイル ソケットやパイプ(次回) 外部装置を抽象化したもの ブロック型とキャラクタ型がある バイト単位で送受信できる通信路を抽象化 UNIXでは、ファイルシステムの構築されたブロック型デバイスをマウントという操作を通じて、木構造の一部に接ぎ木することができる。 すべてのデバイスをファイルとして扱えるようにし、それらすべてのファイルを木構造の階層ディレクトリを通して参照できる。もちろん同じAPIにより参照できる。巨大なシステムをうまく単純化している。
デバイススペシャルファイル キャラクタ型 ブロック型(マウントできるデバイス) キーボードやマウス HDDやフロッピー DAT(テープ) バイト単位で入出力できればすべてキャラクター型 DAT(テープ) バイト単位なら読み書きできる ブロック型(マウントできるデバイス) ファイルシステムを作ることできる装置 ファイルというものは、バイト単位で読み書きできる
プログラムのDemand Loadingができるということ プロセスとファイルシステム プログラムのDemand Loadingができるということ プロセスと実行可能形式ファイルの関連付け ファイルには参照カウントがある プロセスは当該ファイルを実行中ということで参照カウントを+1 プロセスは実行可能形式ファイルのi-node番号を保持 ここでファイルの実体を知ってるから、ロードできる ファイルは、ディレクトリからリンクされて参照されるだけとは限らない 実際にロード作業を行うのはVMMの仕事である
VMM(仮想記憶管理)とファイルシステム 仮想記憶とファイルの関係は一般化してある 仮想記憶では領域を分けて、ファイルと関連付けるしくみがある Demand Loadingのために、実行形式ファイル中のTEXTやDATA領域と該当仮想記憶領域を対応付け そのしくみの一般化 → メモリのマッピング 通常ファイルを仮想記憶空間に写像できる ファイルをメモリのように参照 デバイス中のメモリすらファイルとして仮想化できるが… デバイスファイルをマッピングすることもでる そういうデバイスは、メモリとして参照するのが自然 ファイルとの対応無しにマッピングもできる 単に仮想記憶をプロセスに割当てただけ ファイルの実体と対応がなく、プロセス消滅とともに消えるのみ…