Windowsはセグメントレジスタを
どう使っているのか
x86アーキテクチャーでは、メモリーをアクセスする命令はすべて、暗黙に特定のセグメントレジスターを仮定している。例えば、メモリーから汎用レジスターに値を入れる場合にはセグメントレジスター「DS」が、ジャンプ命令ではコードセグメントレジスター「CS」が仮定されている。仮定されるセグメントレジスターはCS、SS、DS、ES(ストリング命令用)となっている。一方FSとGSは仮定されていない。
セグメントの大きさや位置(ベース・アドレス)を設定する「セグメントディスクリプタ」は、OSカーネルのみが設定可能なデータである。アプリケーション側ではこれを操作することはできず、またどのようなセグメントセレクタが用意されているのかも、あらかじめ情報として与えられない限りわからない。そのため、アプリケーションプログラムからは、セグメントレジスターを操作することは事実上できない。しかし、x86命令ではプログラムがリニアアドレスを直接指定できるので、セグメントレジスターを操作する必要もない。
Windowsでは利用目的を限定しないFSとGSは、OSカーネル側がセグメントディスクリプタを設定して、アプリケーションからのシステム関連情報などへのアクセスに利用している。例えば、ひとつのスレッドには固有の情報(TIB。Thread Information Block)や、スレッド自身が独立して持つ記憶領域として「TLS」(Thread Local Storage)がある。これらのアクセスには、スレッドが起動するときにOSカーネル側でその位置を示すセグメントディスクリプタを用意し、セグメントレジスターFSがセグメントディスクリプタを指定するように設定される。
セグメントレジスターはタスク切り替え時に、CPU内部情報としてメモリーへと保存される。そのため、このようにスレッドごとに異なるデータを指すようにしておくと、スレッドが切り替わってもアクセスが簡単になるわけだ。GSも同じように、汎用的に利用されているようだ(カーネル内部でも利用しているらしい)。
タスクマネージャーから
Windowsのメモリー使用状況を読み解く
x86 CPUの機能を使ってメモリーを管理しているWindowsだが、ユーザーからはその挙動は、タスクマネージャーやリソースモニターでしか確認できない。しかもこれらに表示されるグラフは、メモリーの利用量が多いか少ないか、スワップが多いか少ないかといった程度の情報でしかなく、数値表示は意味がわかりにくい。
そこで、タスクマネージャーやリソースモニターの表示と、パラメーターの意味などを説明しよう。
まずタスクマネージャーのメモリー関連情報は、「パフォーマンス」タブにある「物理メモリ」の、「カーネルメモリ」および「システム」の表示にある。
Windowsのメモリー管理で言う「コミット」とは、仮想メモリーでメモリーが割り当てられた量のことだ。ひとつのプロセスの場合、そのプロセスに割り当てられたメモリー量を示す。以下の表で、タスクマネージャーのメモリー欄の意味を説明しよう。
項目 | 意味 | |
---|---|---|
物理メモリ | 合計 | 搭載されたメモリーの総量 |
キャッシュ済み | ファイルキャッシュや高速起動用のキャッシュなどに割り当てたメモリー量 | |
利用可能 | 空きメモリーとキャッシュ済みメモリーのうち、すぐに利用可能なメモリーの合計量 | |
空きメモリー | 何も使われていないメモリーの合計量 | |
カーネルメモリ | ページ | カーネルが利用しているメモリーのうち、スワップが可能な領域 |
非ページ | カーネルが利用していてスワップできない固定領域 | |
システム | ハンドル | ハンドルオブジェクトの総数 |
スレッド | 起動しているスレッド数 | |
プロセス | 起動しているプログラム(プロセス)数 | |
起動時間 | 起動してからの時間 | |
コミット | 仮想記憶として割り当てられている量/仮想記憶として割り当て可能な物理メモリー+スワップ領域のサイズ |
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第9回
PC
マルチコアCPUを賢く使いこなす スケジューリングの秘密 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ