オペレーティングシステム　第7章 ファイルと入出力

キーワードのまとめです。

# 7. ファイルと入出力

### ファイル

- 二次記憶上に記憶される一連のデータ

### データセット

- ファイルのこと

### ニ次仮想アドレス空間

- 二次記憶の仮想イメージ
- ファイルまたはデータセットの集合からなる

### 仮想二次記憶

### プロセス間通信

- プロセス間の情報転送

### 二次記憶

- データを長期に保存するための場所

### 補助記憶

- 二次記憶のこと

### 磁気ディスク

- ディスク（円盤）上に、その回転に沿ってデータを記録する装置
- 読出し/書込みヘッドは各ディスク面に相対して1個ずつアームに装置され、櫛のようにひとかたまりで動き、読出し/書込み操作を実行する
- 読出し/書込みヘッドのうち、一時には一つしか動作させられない

### 磁気テープ

- BOTマーカからレコードが連続的に記憶される
- レコードはIRGで分割される
- レコードは連続的に読み書きされ、あるレコードが更新される場合は、そのレコードの後ろのレコードは全て書き直される必要がある
- レコードを読む場合には、レコードの存在するところまで読み取りヘッドが来るように、テープを進めたり巻き戻したりする必要があるため、逐次処理にのみ適している

### 光ディスク

- ディスク上にレーザー光線を当てて、情報を記憶・再生する装置
- 大容量性に優れており、物理的形状も小さい
- 情報伝達速度が必ずしも充分でなく、また書き換えにも問題がある

### フロッピーディスク

- フロッピーディスクのように安価なものは、ディスクの枚数も少なく（フロッピーディスクは1枚のみ）、シーク時間もかなり長い

### ファイルネーミング関数

- ユーザ定義名$(f, r)$を全システムでユニークな名前$(g, r)$に変換する

### アクセス関数

- 名前$(g, r)$を$(d, c, t, s)$など全システムでユニークな物理的記憶位置へ変換する

### 内容関数

- レコードまたはバイト$r$の値$v$を$(d, c, t, s)$から得る

### BOT

- Beginning of tape

### IRG

- interrecord gap
- レコードを分割する
- 3/4インチか3/5インチ程度

### EOT

- End of tape

### 逐次処理

### ランダムアクセス

- ディスクの重要な性質として、任意のセクタまたはレコードを、他のセクタやレコードをアクセスしたり破壊したりすることなく読み書きし、更新できる

### インデクス逐次処理

- まずインデクスで目的のセグメントへ行き、そこから逐次的にレコードを探す

### 分割ファイル

- 区分ファイル
    - 小さなファイルの集まり
    - オペレーティングシステムが直接管理するファイルの数を減らす
    - 共通の性質を有するファイルをまとめる

### プライマリトラック

- レコードは、初めディスクに書き込まれるとき、逐次的にプライマリトラックに書き込まれる

### オーバフロートラック

- レコードの挿入で、後続のレコードが一つずつ後ろにずれ、トラックから外にはみ出したレコードがある場合は、オーバーフロートラックに移される

### 入出力

### 入出力機器

### 論理的入出力機器

### 仮想入出力機器

- 論理的入出力機器と同じ意味

### レコード

- ある物に対する情報の集合
    - 学生のファイルのレコードは個々の学生に対して作られ、学生の名前、住所、学年、コース、成績などを含んでいる

### ブロック

### 論理レコード

- ユーザプログラムが扱う入出力データの単位

### 物理レコード

- 磁気テープへのデータ書込み、読取りの単位

### ボリューム

- 磁気テープのリール
- ユニークなボリューム番号が識別のために付けられる

### ボリュームヘッダ

### トラック

- ディスクの表面は論理的にトラックに分けられる

### シリンダ

- 各ディスクの同一の同心円上のトラックをまとめてシリンダという

### セクタ

- トラックを分割したもの
- 分け方は基本的には2種類あり、固定長のセクタに分ける方式と可変長の物理レコードに分ける方式がある

### シーク

- ヘッダを指定されたシリンダへ移すこと

### シークタイム

- シークに要する時間

### 回転待ち時間

- ヘッダが指定のセクタへ来るまで待つ時間のこと

### データ転送時間

### ファイルシステム

- 二次記憶装置と入出力機器を拡張子（抽象化し）、二次仮想アドレス空間と仮想入出力機器を作るプログラム

### アクセスメソッド

- 論理レコードの入出力操作を、入出力スーパバイザへの入出力操作に変換する
- 論理レコードから物理レコードへの変換

### ディレクトリ

- ファイル階層構造（木構造）においてのルートおよび途中のノード
- すぐ下のレベルの情報を保持する

### ディレクトリシステム

- ファイル作成、削除、保持、スペース割り当てなどを行う

### 入出力スーパバイザ

- 物理的機器のスケジュリングと実際の入出力操作を実行する

### パス名

### アクセス制御リスト

### ワーキングディレクトリ

- オペレーティングシステムがジョブ開始時に割り当てる特定のディレクトリ
- ジョブはこの割り当てられたディレクトリより下のファイルにしかアクセス出来ない
    - 割り当てられたディレクトリはそのプログラムが動作できる領域を定めることとなる

### ファイルディスクリプタ

- 記憶位置、大きさ、作成日時、所有者名、ファイル構造、アクセス制御リストなど、ファイルの特性を保持しておく場所

### ファイル制御ブロック

- FCB（File Control Block）
- ファイルに関するすべての情報を含むデータ構造
- ファイルが起動（OPEN）されると、主記憶に入れられ、アクセスメソッドで参照される
- ファイル名、ファイル形式、レコード長、ブロック長、現在のレコード位置、ファイルの現在の大きさ、作成日時、アクセス権、領域割り当て、バッファ記憶位置などの情報が含まれる
- ユーザプログラムによる破壊から保護するため、オペレーティングシステム制御下に置かれる
- プロセスが削除されるとFCBもともになくなるが、その情報はファイルディスクリプタに保持される（そのため既存のファイルのFCBはファイルディスクリプタから作ることができる）

### 大容量記憶装置

- 二次記憶の容量を拡張する機器
    - 多くのカードリッジ式磁気テープを装填する方式や光ディスク
- ディスクボリュームのバックアップに用いられる

### ステージング

- ページングと同様、磁気ディスクと大容量記憶装置の間をユーザトランスペアレントな方法でデータを転送する方式
- 大容量記憶装置をあたかもディスクのように見せかける操作

### ディスクキャッシュ

### OPEN

- ファイル初期化のための命令
- これによりファイルはGET/PUT命令を受け付けられるようになる
- GET/PUT命令で用いられるバッファを用意する
- もしファイルが磁気テープ上にあれば、磁気テープを巻き戻す
- 逐次処理入力ファイルに対しては、最初のレコードの先読みを行う
    - そのためファイルが入力ファイルであるか出力ファイルであるかをOPEN命令で指定する必要がある

### GET

- レコードを読み出し、bufferパラメタで指定されたバッファに置く命令

### PUT

- 指定されたファイルに論理レコードを書き込む命令

### CLOSE

- バッファ内に残っているレコードを二次記憶に出力し、必要ならテープを巻き戻し、そしてファイルに割り当てられているバッファを解放する

### 固定長

- 各（論理）レコードが同じ大きさ

### 可変長

- 各（論理）レコードの大きさは可変

### 不定長

- 一つの論理レコードが一つの物理レコードに対応し、レコード長は可変

### ブロッキング

- 入出力の効率を高めるため、いくつかの論理レコードをまとめて一つの物理レコード（ブロック）として入出力操作を行うこと

### デブロッキング

- ブロッキングの逆の働き
- 一つの物理レコードを論理レコードに分解する
- アクセスメソッドが論理レコードの大きさとブロッキング係数を知っているため、容易に可能

### ブロッキング係数

- b個の論理レコードを一つの物理レコードにまとめるとき、bをブロッキング係数という

### RCW

- レコード制御語（Record Control Word）
- 可変長レコードの場合には、ブロッキング係数と物理レコードの大きさは一定にはならないため、各論理レコードの大きさをRCWに記録する

### BCW

- ブロック制御語（Block Control Word）
- 各ブロックの大きさ（RCWとBCW自身を含む）

### バッファリング

- CPUとデータチャネル間の同時処理を実現するための技法
    - 読込みに対しては、レコードをバッファに先取りし、レコードが要求されるとただちにプログラムに転送する
    - CPUがレコードを処理している間に、次のレコードが他のバッファに読み込まれる
    - バッファを切り替えることにより、CPUとデータチャネルの同時処理が実現できる

### 転送方式

- 主記憶内のレコード転送が必要になる
- GET(FCB, W)
    - 読み出したレコードをバッファから作業領域へと実際に転送する
- PUT(FCB, W)
    - 作業領域にある論理レコードを出力バッファに転送する

### 番地指定方式

- レコードそのものの代わりにアドレスを渡すことで、主記憶内のレコード転送を不要にする方式

### 交換方式

- バッファのセグメントを作業領域と交換する方式
- 交換はポインタの交換で行われ、レコード転送を含まない
- GETex(FCB, W)
    - Wで指定された作業領域と入力バッファのセグメントを交換する
- PUTex(FCB, W)
    - Wで指定された領域と次の」出力バッファのセグメントを交換する

### 二重バッファリング

- 各ファイルに対して1組のバッファが用意されていると仮定する方式

### バッファプール

- ファイル間、プログラム間で共用するバッファ

### ストリーム

- 入出力を文字（バイト）の流れと考える（ストリーム型入出力機器）
    - ↔入出力をブロック単位とする（ブロック型入出力機器）

### パイプ

- UNIXのプロセス間のデータのやりとりに使われる機能

### パイプライン

### FCFS

- First-Come-First-Served
- 要求の到着順に処理が行われる
- 平均のアクセス時間は最小にはならない

### SSTF

- Shortest-Seek-Time-First
- 現在のヘッドの位置に一番近いシリンダ番号の要求を選択する
- シーク時間が最小となる要求を先にサービスする方式
- 欠点としては
    - 両端に近いシリンダ上のデータに対する要求を後回しにしがち
    - アクセス時間の変動が大きい
        - 対話型システムには適用が困難

### SCAN

- ヘッドを一方高に動かし、要求をシリンダ順に処理する
- 端に到達すると逆方向に動かす
- SSTFを適用しながら、両端のシリンダに対する差別を減らす方式
- （SSTFもだが）スループットは高く、平均待ち時間は小さい
    - SSTFの方がより効率的
    - SCANの方がアクセス時間の変動は小さい

### FSCAN

- N-Step SCAN
- SCANとの違いは、走査中に新しく到着した要求は処理せずに、次の走査まで待ち行列に保持するという点
    - 両端のシリンダのサービスを悪化させない工夫
- FSCANはシリンダ番号にかかわらずアクセス時間は一定（ただしSCANよりヘッドを移すために必要な時間は大きい）
- FSCANはSSTFやSCANよりもアクセス時間の変動は小さい

### CSCAN

- Circular SCAN
- 最後のトラックと最初のトラックが隣接して円状に配置されているかのように扱う
- 最後のシリンダから最初のシリンダへのヘッドの移動時間が比較的大きいために、サービスは完全に一様にはならないが、CSCANはSCANほどシリンダ番号による差はない

### ESCHENBACH

- 非常に負荷が高い場合のアクセス効率を高めるために考えられた方式
- 各シリンダに対しE回転（オーダE）のアクセスを行う
    - 1回転する間に、E個のセクタのうち1個をアクセスすることでシリンダ全体を処理できることとなる
- 各シリンダに対してはCSCANのようにシリンダを循環してサービスする
- 負荷が大きい場合、SSTFやSCANよりも効率よく実行する

### 仮想入出力

- 厳密な定義はないが、以下のような意味で用いられる
    - アプリケーションプログラムを入出力機器の物理的特性から独立させる
    - 入出力機器がコンピュータシステムまたはことなるオペレーティングシステム間で共有される場合、それは仮想デバイスと呼ぶことがある
    - 大容量記憶装置の記憶容量に匹敵する数の”仮想”ディスクボリュームが存在している、というように用いる
    - 新しい機能が導入されたとき、それを古い型のデバイスと同じように使えるようにするため機器のエミュレーションをするが、このエミュレーションによって作られた機器を仮想デバイスと呼ぶ
    - スプールデバイス（一般的にはディスク）が仮想デバイスと呼ばれることもある
    - ページングやセグメンテーションによって作られるメモリのイメージを仮想記憶と呼ぶ
    - ページングはページフォールトにより、主記憶と二次記憶に物理的な入出力操作を引き起こす（メモリマップド入出力）
    - 二次アドレス空間を主アドレス空間に含め、単一で一様なアドレス空間を作ることを可能にする（ページングの概念の拡張）

### メモリマップド入出力

- プログラムがプロセスのアドレス空間を参照するだけで入出力を起動する形の入出力

### 入出力プロセッサ

- データチャネルを強化したもの
- 固有のメモリを持ち、アクセスメソッドの機能を実行できる
- ホストコンピュータのCPUが本来の演算に集中できるよう、入出力機能の大半は入出力プロセッサに移される

### データベースマシン

- 入出力プロセッサをさらに発展させたもの
- アクセスメソッド機能だけでなく、データベース管理機能を実行する
- ホストコンピュータのCPUとデータベースマシンの間のインターフェースは、アクセスメソッドのインターフェースより高く、一般に高レベルのデータ処理言語で定義される

### ファイルサーバ

### LAN