2011-07-10 3 views
0

は:OS X、OSX、GCC、現代のx86の場合はgcc、x86の、セグメンテーション、ページング、ワンセグ障害、バスエラー

のx86セグメンテーションH/WとページングH/Wはどのように使用されていますか?

+2

同じ質問で複数の質問をしないでください。複数の質問がある場合は、複数の質問をしてください。 1つの質問で複数のことを尋ねることは、あなたが複数の質問の一部に対する答えを知っているだけであれば人々が答えるのを妨げ、1つの受け入れられた答えがあることを難しくします。 – bdonlan

+0

OK、1つの質問を除いてすべて削除しました。 – grok12

答えて

1

の場合、セグメンテーションハードウェアは使用されません。大部分の現在のOSは、CS、DS、SS、およびESをすべてのメモリ(すべてのメモリを指すように設定します。ベースアドレスは0、上限は4Gig)。それぞれは、そのすべてのメモリへのフルアクセスを許可するように設定されています(CS->実行、DS、ES、SS->読み書き)。

つまり、ほとんどすべての実際のアクセス制御はページングユニットで行われます。基本的な考え方は、特定のプロセスによってアクセス可能なページがそのプロセスにマッピングされるということです。仮想メモリ内にあるページはマップされますが、存在しないとマークされているため、読み書きを試みると例外が発生します。 OSはページングファイルからRAMにデータを読み込み、そのデータに現在のマークを付け、命令を再開します。

ページにマークを付ける限り、ほとんどの実行可能コードは読み取り専用とマークされ、プロセス間で共有されます。ほとんどのデータとスタックは読み書き可能とマークされ、共有されません。正確なシステムに応じて、スタックスペースにはNXビットが設定されているため実行されません。

少し異なるビットとピースがいくつかあります。たとえば、ほとんどのOS(メモリが使用されている場合はOS/Xを含む)はスタックガードページを設定します。 /にアクセスしようとすると、OSは例外をキャッチし、スタックスペースの別のページを割り当て、命令を再開します。つまり、スタックに4メガバイトのアドレス空間を割り当てることができますが、実際に使用されている領域(実際にはページサイズ単位)にのみ実際のRAMを割り当てます。

ハードウェアは、「大」(4メガバイト)ページもサポートしています。これらは主に、CPUが直接見ることのできるグラフィックカード上のメモリのような、連続した大きなメモリチャンクをマッピングするために使用されます。

これは、唯一非常にという高水準の表示ですが、気にすることがなくても詳細を提供するのは難しいです。 OS全体のページングの使用をすべてカバーしようとすると、(大きな)書籍全体を占有する可能性があります。


のWindows(他のほとんどのシステムとは異なり)セグメンテーションの最小限の使用を作るん - それはに関するいくつかの基本的な情報へのアクセスを提供しますスレッド情報ブロック(TIB)、へのポインタとしてFSを設定します現在のスレッドこれは、特にWindowsの構造化例外処理(およびベクタ型の例外処理)によって便利です(および使用されます)。

+0

Thx、Jerry。あなたは私が知りたいと思ったものを打ちました。 – grok12

関連する問題