PowerPoint プレゼンテーション

OS輪講 11.5-11.6
sada
11.5 メモリ管理
• Windows2000でどのようにメモリを管理し
ているか
11.5.1 基本概念
• 各プロセスは4GBの仮想アドレス空間を持つ
– 下位2GB-256MBをプロセスのコードとデータが使用可能
• 256MBは読み出し専用で全てのユーザ間で共有するいくつかのシステムカ
ウンタやタイマ
– 上位2GBが保護されたカーネルメモリにマップ
• コード,データ,およびオブジェクトなどに使うページ化(或いは非ページ化)さ
れたプール
• 書込み禁止
• ユーザプロセスは読み出しも禁止
• スレッドがシステムコールを呼び出したときに,メモリ空間が延長線上にある
から
• 高速だがプライベートアドレススペースが窮屈
• 一部のモードでユーザ空間を3GBに可能
– 最上部と最下部64KBは通常マップされない
• プログラムエラーを捕まえる助けとするため
• 多くの無効なポインタは0とか-1とかだから
•
仮想ページの状態
– フリー
• 参照するとページフォールトが起きる
– コミット
• ページがメモリにあれば成功する
• なければページフォールト
– 予約
• 解除されるまでマップできない
•
コミットページへの補助記憶の割り当て
– 各コミットページがコミットされたとき,それをバックアップするページングファイル
に1ページを割り当てる
• 単純だがディスク領域を浪費
– スタック領域のようにもともとディスク上に実体を持っていないようなコミットページ
領域には,ページアウトの時点までディスクページを割り当てない
• Windows2000で使われている手法
• ディスク浪費はないが複雑
• シャドーページ(ディスク上で対応するページ)
– 性能向上のため16個までのページングファイルに分
散することもある
• Windows2000ではUNIXと同様に,ファイルを仮
想アドレス空間の領域に直接マップすることを許
している
– シャドーページがページングファイルの代わりにユー
ザのファイルになっているだけ
– 二つ以上のプロセスが同時に同じファイルの同じ部分
を明示的にマップすることを許している
– データをコピーしなくていいので,高速アクセス可能
• コピーオンライト(図11-24)
– 複数のプロセスが同一のDLLを読み込んで,そのDLLにデータ
をおく場合,そのデータを自分のプロセス内に保持する
• 共有コードのアドレス
– 絶対仮想アドレスを用いると他のプロセスのアドレスを読んでし
まう
– 相対仮想アドレスを使う(位置独立コードとも言う)
• 絶対仮想アドレスを使うより遅くなるので,明示的にコンパイラに相
対仮想アドレスを使う
• メモリ空間の限界を乗り越える
– バンク切替
– Address Windowing Extensions
11.5.2 メモリ管理システム
• APIいろいろ
– VirtualAlloc, VirtualFree, VirtualProtect, VirtualQuery
• 領域のコミット,解除,権限変更,状態問い合わせ
– VirtualLock, VirtualUnlock
• ページング不可にする,解除する
– CreateFileMapping, MapViewOfFile,
UnmapViewOfFile, OpenFileMapping
• メモリマップドファイルを管理する
• 作成,マップ,アンマップ,他のプロセスによってマップされて
いるファイルへのマップ
11.5.3 メモリ管理の実装
• ページサイズ
– 理論的に64KBまでの2のべき乗
– Pentiumでは4KB,Itaniumでは8KBか16KBか選択可能
• メモリマネージャはスレッド単位ではなくプロセス単位で
管理
– スケジューラと逆
• VAD (Virtual Address Descriptor)
– 中身
• マップされたアドレスの範囲
• 補助記憶ファイルとそれがマップされている場所のオフセット
• 保護コード
– アドレス空間はVADのリストによって完璧に定義されている
● ページフォールトの扱い
• プリページングしない
– 予測してページングしない,常にページフォールト
• ページテーブルエントリ(図11-26)
– 大事な状態はA (Active) & D (Dirty)
– ページフォールトの原因の分類
• 参照されたページはコミットされていない(致命的!)
• 保護違反が発生した(致命的!!)
• 共有ページに書き込まれた
– コピーオンライトの可能性を調べ,復旧可能な場合がある
• スタックは成長しなければいけない
– セキュリティ上,新しいプロセスへのメモリはゼロクリアされている必要あり
• 参照されたページがコミットされているが現在はマップされていない
– 普通のページフォールト
• Windows2000の戦略
– ディスク転送の回数を最小にする
• 孤立したページを読み込まない
• 隣接したページも読み出しておく
● ページ置換アルゴリズム
• ページフォールトが発生したとき
– 最初に他のページをディスクに書くことなく,すぐに空きページを維持し
ようと試みる
– →1回当たりのディスク操作が1回で済む
• Windows2000はどうやってプロセスからページを奪ってフリーにする
か?
– ページングシステム全体で各プロセスが保有するワーキングセットの概
念を使用している
• ワーキングセット=特定のプロセス専用の物理的なメモリページ群
– ワーキングセットのパラメータ
• 最小サイズと最大サイズ
• 厳密ではない
• でも限界はある(最後の512ページは獲得できない)
– バランスセットマネージャ(カーネルデーモンスレッド)
• 十分な空きページがあるかどうかを見極める,もし十分でな
ければ・・・
– ワーキングセットマネージャ(カーネルデーモンスレッ
ド)
• が回収しにいく
• いろいろパラメータを勘案しつつ,全てのページを検査する
–
–
–
–
検査するたびに未参照カウンタを増やしていく
参照ビットがセットされていたら未参照カウンタを0にする
未参照カウンタが大きいページを優先的にページアウト
ただしマルチプロセッサだと難しい...
● 物理メモリ管理
• メモリ中の全てのページは1つ以上のワーキングセットか
4つのリストのどれかに属する
– 変更ページリスト
• ダーティなページ
– 待機ページリスト
• クリーンなページ
– フリーページリスト
• どのプロセスにも関連していないクリーンページ
– ゼロページリスト
• どのプロセスにも関連していなく,ページがゼロクリアされている
– 不良RAMページリスト
• 物理的に欠陥がある
• 遷移の状況(図11-27)
– スワッパスレッド
• 4秒ごとに起動される
• 全スレッドがアイドルのプロセスを探す→待機リストか変更リ
ストに変える
– マップドページライター・変更ページライター
• 定期的にウェイクアップ
• 変更ページを待機リストへ
• 探索・書き込みの2種類の処理があるので,スレッドを分けて
いる
– ゼロページスレッド
• フリーリストを選んでゼロクリア
• 一番最低の優先度
– 処理の戦略いろいろ
• 例:ページアウトしてゼロクリアしたのに,すぐにそのページ
が必要になったらもったいない
– CPUがアイドルのときは優先的にゼロページからとる
– CPUがビジーの時は待機リストから優先的にとる
• 例:積極的に待機ページリストに変更するとI/O処理が増える
– Windows2000の場合
• Heuristics, guess work, historical precedent, rules of thumb,
administrator controlled などを通じて解決
• 図11-28のようなRAMページの各々に対応したエントリを持ち,
ページフレームデータベースを維持している
11.6 Windows2000における入
出力
• 今はたくさんデバイスがある
• これからもデバイスはたくさんでるだろう
• Windows2000は新しいデバイスを容易に
接続することが出来る一般的なフレーム
ワークとして設計された
11.6.1 基本概念
•
I/Oマネージャ
– 多くのバスがある
• PCカード,PCI,USB,IEEE1394,SCSIなど
– 認識手順
• プラグアンドプレイマネージャがそれぞれのスロットに要求を送り,デバイスの種類を発
見
• 割り込みレベルなどのハードウェアリソースを割り当て
• ドライバをロード→ドライバオブジェクトを作成
– SCSIは起動時,USBやIEEE1394はいつでも認識
– 電力マネージャとも密接に連携
• 状態は6つある
•
•
全てのファイルシステムはI/Oデバイスとして実装される
ダイナミックディスクのサポート
– 論理ボリュームが物理的にいろいろまたがっていてもOK
•
非同期I/Oのサポート
– スレッドがI/Oと並列に実行を続けることが可能
– サーバで特に重要
11.6.2 入出力APIコール
• 図11-29:Win32APIコールのカテゴリ
– 特にグラフィック周りが多い!
– クリップボードのサポート
– GUIアプリケーションはイベント駆動のため,
入力はメッセージで行われる
11.6.3 I/Oの実装
• I/Oマネージャがどう実装されているか
– 異なるI/Oデバイスを操作できる共通フレーム
ワークを作ること
– フレームワークの基本構造
• あるI/O機能に対してデバイスに独立なコールの集
合をユーザに与えることと
• デバイスドライバの集合をユーザに与えること
11.6.4 デバイスドライバ
• WDM (Windows Driver Model) の規定
– 適合ドライバは少なくとも下記の要求を満たす
こと
• 標準形式で到着するI/O要求を扱うこと
• Windows2000のドライバ以外の部分と同じく,オブ
ジェクトベースであること
• 動的に追加,削除できるプラグアンドプレイデバイ
スを可能にすること...
• ほか色々
• I/O要求=IRP (I/O Request Packet)
– 標準化されたパケットの形式でドライバに渡される
• ドライバの要件
– 自身以外からも呼べるようオブジェクトベースである必要がある
– プラグアンドプレイをサポートする
– あらゆる状況を想定する必要あり
• 電力供給が突然なくなった,など
– 割り込み線やI/Oポートを仮定してはいけない
• プリンタポートを0x378と仮定するドライバは不適合
– マルチプロセッサを想定する
– Windows98もサポート
• ドライバの場所の決定
– UNIXのようなメジャー番号を用いない
– プラグアンドプレイマネージャは製造業者とも
出る番号を知るためにデバイスに問い合わせ,
ディスク内にドライバがあるか検索
• ドライバの動作手順
– DriverEntry
• ドライバの初期化(まだデバイスには触れない)
• デバイスオブジェクトが作られる
– AddDevice
• デバイスを加える
• IRPを伴ってドライバが呼び出される
• ドライバはスタックになっているものも
– バス管理とデバイス制御の分離
– フィルタの実装
• データの暗号,圧縮など