入出力
IOデバイス
「ブロックデバイス」と「キャラクタデバイス」に分けられる。
メモリマップドIO
IO制御レジスタを主メモリ空間に割り当てるため、IO処理専用のアセンブリ命令が不要なため、オーバーヘッドが小さい。
また、メモリに割り当てられているため、OSの保護機能が使える。
キャッシュがあると、デバイスからの変更の知らせを受け取るのが遅れるため、キャッシュの無効化機能が必要。
メモリマップすると、デバイスが参照しなければならない部分が増える。
(Pentiumはboot時にメモリが無い部分の計算を行い、PCIブリッジでメモリでない範囲をフィルタリングしている。)
DMA
DMAが無い場合の読み込みでは、ディスクコントローラのバッファに保存後、主メモリに保存する。
DMAがある場合、CPUがDMAコントローラに読み込み要求を出した後、コントローラが主メモリに書き込みを行い、全データを送信後、OSへの割り込みを行う。
DMAがメモリに直接データを置かず、ディスクコントローラのバッファにデータを置くことで、チェックサムの検証が行え、常にバスを使用する必要がなくなる。
DMAコントローラのモード
- サイクルスチール
CPUからバスを盗んで転送を行うため、遅延が少ない。
- バーストモード
バスを獲得して複数ワードを転送するため、サイクルスチールよりも効率が良い。
ただし、他のデバイスを長時間ブロックする可能性がある。
- フライバイモード
主メモリに対して直接転送。
割り込み
最近ではCPUがパイプライン化され、スーパースカラになっていることから、割り込み後の状態復帰が難しい。
マシンを明確に定義された状態にする割り込みを「正確な割り込み」と言う。(<->不正確な割り込み)
正確な割り込みを採用した場合、CPUのロジックは複雑化するが、OS側の処理を簡潔化できる。
Pentiumでは後方互換性のため、正確な割り込みを採用。
割り込み発生時の状態保存の場所
- 内部レジスタ
割り込み処理中は他の動作は不可
- スタック上
スタックポインタが不適切な時のエラー、ページフォールトの可能性がある
- カーネルスタック
全てのキャッシュとTLBの無効化
IOソフトウェアの重要な観点
- デバイス独立
上位レイヤは、デバイス非依存でコードを書けるようにする必要がある。
- エラー処理
- 同期/非同期
- バッファリング
- 共有/専用デバイスのサポート
IOの実行手段
- プログラムドIO
[概要] 全てのIO処理をCPUで行い、IO待ちはポーリングで行う。
[欠点] 全てのIOが終了するまで、CPU時間を消費
- 割り込み駆動IO
[概要] 割り込みを用いて、IO処理の完了を知る。IO待ちの間は、他のプロセスの実行が可能。
[欠点] 1回のIO(1byte)ごとに割り込みが発生し、割り込み処理によるCPU時間の消費が激しい。
- DMAを用いたIO
[概要] DMAにIO処理を全て任せる。DMA内のバッファサイズごとに割り込みが起こるため、割り込み回数を減らせる。
[欠点] DMAが遅いと、割り込み駆動IOよりも性能が悪化する。
IOソフトウェアの階層
- ハードウェア
[機能]
IO処理を実行する。
- 割り込みハンドラ
[機能]
IO処理後にデバドラを起こす。
- デバイスドライバ
[機能]
デバイスレジスタの設定と状態検査を行う。
抽象化された上位レイヤからの要求を解釈する。
デバイスの初期化を行う。
電源の管理やログの出力を行う。
[要求]
処理中に別の処理が入れるようにする(リエントラント)。
コンピュータが動作中にデバイスの抜き差しが可能(ホットプラグイン)。
- デバイス独立IOソフトウェア
[機能]
名前付け、保護、ブロック、バッファリング
[要求]
デバイスドライバ統一インターフェース(ドライバごとに上位レイヤのプログラムの変更をしないようにする)
バッファリング
エラー報告
占有デバイスの割り当てと解放(CDドライブなどは、1プロセスからのアクセスのみにする必要がある)
デバイス独立なブロックサイズ(ブロックサイズの統一化)
- ユーザ空間IOソフトウェア
[機能]
IO呼び出し、フォーマット、スプール
磁気ディスク
- オーバーラップシーク
2つ以上同時にシークを行う。
- 仮想ジオメトリ
最近の磁気ディスクは内側に比べて、外側のセクタ数が多い傾向があるため、セクタ数の違いを隠すために導入された。
- LBA
アドレッシングの制限を無くすために導入された。
RAID
RAIDへのアクセスは、ディスクコントローラをRAIDコントローラに置き換えたものとして考えれば良い。
RAIDと対をなすのは、SLED。
- RAID 0
ストライピング。
大きなファイルほど性能向上が見込めるが、1セクタごとに要求すると逆に性能が悪化する。
信頼性の無い構成。
- RAID 1
読み出しは書き込みの2倍の性能。
信頼性も○
- RAID 2
ワード単位のストリップ。
1つのdiskが壊れてもOK。
スループット◎。
RAIDコントローラに大きな負荷。
ディスクの同期が必要。
大量のドライブが必要。
- RAID 3
RAID2と異なるのは、データワードごとにパリティビットが用意される点。
- RAID 4
ストリップ単位でパリティを作成し、1つのディスクに保存。
ディスク間の同期は必要ない。
パリティドライブが性能のボトルネックになる可能性がある。
- RAID 5
パリティを各ディスクに分散して保存。
パリティを分散させるため、性能の低下を避けられる。
ディスク故障時の復旧処理が難しい。
CD
データ配置が螺旋状であるため、シークは線速度一定。(HDDのデータ配置は放射状なので、角速度一定)
先頭にVTOCと呼ばれる、データの目次を示す情報が書き込まれる。
ハイシェラ
CD用のファイルシステム。3レベルで構成され、レベルが高いほど動作しないマシンが増える。
- レベル1
ファイル名は8文字まで可能。
ファイル名は大文字、数字、下線のみ可能。
ディレクトリの深さは8まで可能。
連続したデータである必要がある。
- レベル2
ファイル名は32文字まで可能。
- レベル3(ロックリッジ拡張)
不連続なデータも可能。
長いファイル名のサポート。
UID/GIDのサポート。
シンボリックリンクも可能。
CD-R
追記のサポートをするため、トラック(1回に書き込まれた連続したセクタのグループ)の先頭ごとにVTOCを書き込んでいる。(セッション)
セッションに対応したCDを、「マルチセッションCD-ROM」と言う。
データコピー対策
- ECCに故意に異なる値を入力
- 故意にデータサイズが異なる値を入力
- トラック間の非標準なギャップ
- 物理的な欠陥
DVD
以下の3つの点を用いることで、CDに比べて大きな容量を得ている。
- より小さなビット
- より近接したスパイラル
- 赤色レーザを使用
最終更新:2013年04月24日 22:59