4.データ構造
2644 ワード
システムプラットフォームにおける2つの最も重要なデータ構造は、PCB(
これらは
注:PCBとSDA構造内のすべてのアドレス値は64ビット幅であり、構造が32ビットと64ビットの環境に容易に適応できるように設計されている.
PCB構造
各論理プロセッサは1つのPCB構造に対応しています.つまり、各論理プロセッサは独立したPCB構造を持っています.
PCB構造内の主なデータについて説明します.
アクセスGSセグメント
私たちはPCB構造の基本アドレスをGSセグメントのベースアドレスとして使用します.したがって、コードは常にGSセグメントを使用してPCB構造内のデータにアクセスします.
参照する他のエリアのアドレス
PCB構造内では、参照された他の領域のアドレスを保存するために、いくつかの64ビット幅のアドレス値が定義されています.以下はPCB構造の一部の定義です.
PCB構造内の部分管理記録は説明書と関連しています.
コードは以下の通りです
プロセッサ情報
PCB構造の大きな部分の値は、プロセッサに関する情報を維持し記録するために使用されます.コードは以下の通りです.
プロセッサのcontext情報
この部分には汎用レジスタcontext情報とx 87 FUSBとXMMユニットのイメージ情報が含まれています.この本コードの中で、この部分の情報は実際的な用途ではありません.
VMXに関する管理記録
PCB構造にはVMXに関する管理記録情報が含まれています.彼らはよく使います.
コードは以下の通りです
Processor Control Block
、プロセッサ制御ブロック)およびSDA(System Data Area
、システムデータ領域)である.これらは
inc/system_manage_region.inc
ファイルに定義されている.注:PCBとSDA構造内のすべてのアドレス値は64ビット幅であり、構造が32ビットと64ビットの環境に容易に適応できるように設計されている.
PCB構造
各論理プロセッサは1つのPCB構造に対応しています.つまり、各論理プロセッサは独立したPCB構造を持っています.
PCB構造内の主なデータについて説明します.
アクセスGSセグメント
私たちはPCB構造の基本アドレスをGSセグメントのベースアドレスとして使用します.したがって、コードは常にGSセグメントを使用してPCB構造内のデータにアクセスします.
common/protected.asm
モジュールでは32ビットのPCB.Base
値をGS.base
に書き込みます.コードは以下の通りです.
common/long.asm
モジュールでは、64ビットのPCB.base
値をGS.base
に書き込む.;;
;; GS base ,
;;
mov esi, [gs: PCB.Base]
mov edi, [gs: PCB.Base + 4]
... ...
PCB.base
は64ビットのPCBベースアドレスを格納し、WRMSR
命令書IA32_GS_BASE
レジスタを書くことによってのみ64ビットGS.base
値を書き込むことができる.stage1
段階では、GS.base
は、PCBの物理的なアドレスを保存し、stage2
(改ページの保護モード)またはstage3
段階(64-bit
モード)に入る前に、線形アドレスを書き込みます.参照する他のエリアのアドレス
PCB構造内では、参照された他の領域のアドレスを保存するために、いくつかの64ビット幅のアドレス値が定義されています.以下はPCB構造の一部の定義です.
PCB構造のオフセットはGS.base
であり、PCBブロック自体を指す0
であり、したがって、コード内の任意の使用は、PCBブロックのアドレスを次の命令で読み出すことができる.%ifdef __X64
LoadGsBaseToRbp
%else
mov ebp, [gs:PCB.Base]
%endif
PCB.Base
は大域のSDAエリアを指しています.ソースコードの中では、通常は下記のようにSDAベースアドレスを読み取ります.%ifdef __X64
LoadGsBaseToRbp
%else
mov ebp, [gs:PCB.base]
%endif
REX.Wrxb ; x64
Mov ebx, [ebp + PCB.SdaBase] ; SDA
キャプション管理記録PCB構造内の部分管理記録は説明書と関連しています.
コードは以下の通りです
プロセッサ情報
PCB構造の大きな部分の値は、プロセッサに関する情報を維持し記録するために使用されます.コードは以下の通りです.
プロセッサのcontext情報
この部分には汎用レジスタcontext情報とx 87 FUSBとXMMユニットのイメージ情報が含まれています.この本コードの中で、この部分の情報は実際的な用途ではありません.
VMXに関する管理記録
PCB構造にはVMXに関する管理記録情報が含まれています.彼らはよく使います.
コードは以下の通りです
struct PCB
{
... ...
;;
;; domain
;;
.Domain RESQ 1 ; domain
.DomainTop RESQ 1 ; domain
... ...
;;
;; VMX VMXON pointer
;;
.VmxonPointer RESQ 1
.VmxonPhysicalPointer RESQ 1
;;
;; VMCS region pointer
;;
.VmcsPointer RESQ 1
.VmcsPhysicalPointer RESQ 1
;;
;; 4 VMCS , VMXS_MANAGE_BLOCK
;;
.VmcsA
}