オペレーティングシステム

オペレーティングシステムJ/K
2004年11月1日
酒居敬一([email protected])
http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS2004/
二次記憶
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ファイルシステム
二次記憶上に置かれるもの
スーパーブロック
FSの大きさ
空き領域の管理表
i-node領域
i-nodeの数がファイル数上限
ファイル
データブロック領域
ファイルに含まれる情報
i-node FSにおけるファイルの削除
• 該当ファイルのディレクトリエントリを削除
– 該当ファイルの名前は消える。
• 名前はディレクトリエントリに入ってる
– アンリンクするという。
• アンリンクしたファイルの参照カウントを減らす
– 参照カウントが0でなければファイルは消さない。
• 他のディレクトリからリンクされている場合
• 実行中の場合(後で説明)
• mmapされている場合(後で説明)
– 参照カウントが0ならファイルを消す。
ファイルの種類
• 通常ファイル
• デバイススペシャルファイル
– 外部装置を抽象化したもの
– ブロック型とキャラクタ型がある
• ソケットやパイプ(次回)
– バイト単位で送受信できる通信路を抽象化
UNIXでは、ファイルシステムの構築されたブロック型デバイスをマウ
ントという操作を通じて、木構造の一部に接ぎ木することができる。
すべてのデバイスをファイルとして扱えるようにし、それらすべての
ファイルを木構造の階層ディレクトリを通して参照できる。もちろん同じ
APIにより参照できる。巨大なシステムをうまく単純化している。
デバイススペシャルファイル
• キャラクタ型
– キーボードやマウス
– HDDやフロッピー
• バイト単位で入出力できればすべてキャラクター型
– DAT(テープ)
• バイト単位なら読み書きできる
• ブロック型(マウントできるデバイス)
– HDDやフロッピー
• ファイルシステムを作ることできる装置
– ファイルというものは、バイト単位で読み書きできる
プロセスとファイルシステム
• プログラムのDemand Loadingができるということ
– プロセスと実行可能形式ファイルの関連付け
• ファイルには参照カウントがある
– プロセスは当該ファイルを実行中ということで参照カウントを+1
• プロセスは実行可能形式ファイルのi-node番号を保持
– ここでファイルの実体を知ってるから、ロードできる
• ファイルは、ディレクトリからリンクされて参照され
るだけとは限らない
• 実際にロード作業を行うのはVMMの仕事である
VMM(仮想記憶管理)とファイルシステム
• 仮想記憶とファイルの関係は一般化してある
– 仮想記憶では領域を分けて、ファイルと関連付けるしく
みがある
• Demand Loadingのために、実行形式ファイル中のTEXT
やDATA領域と該当仮想記憶領域を対応付け
– そのしくみの一般化 → メモリのマッピング
• 通常ファイルを仮想記憶空間に写像できる
– ファイルをメモリのように参照
• デバイス中のメモリすらファイルとして仮想化できるが…
– デバイスファイルをマッピングすることもでる
– そういうデバイスは、メモリとして参照するのが自然
• ファイルとの対応無しにマッピングもできる
– 単に仮想記憶をプロセスに割当てただけ
– ファイルの実体と対応がなく、プロセス消滅とともに消えるのみ…