0

JOS (xv6-rev7) の GDT (Global Descriptor Table) を理解するのは非常に難しい

例えば

.word (((lim) >> 12) & 0xffff), ((base) & 0xffff); 

なぜ右に 12 シフトするのですか? なぜ AND 0xffff?
これらの数字は何を意味するのでしょうか?
式の意味は?

リソース、チュートリアル、ヒントを教えてもらえますか?

ここでは、私の問題について次のようにスニペット コードの 2 つの部分を示します。

第一部

0654 #define SEG_NULLASM \
0655 .word 0, 0; \
0656 .byte 0, 0, 0, 0
0657
0658 // The 0xC0 means the limit is in 4096−byte units
0659 // and (for executable segments) 32−bit mode.
0660 #define SEG_ASM(type,base,lim) \
0661 .word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \
0662 .byte (((base) >> 16) & 0xff), (0x90 | (type)), \
0663 (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff)
0664
0665 #define STA_X 0x8 // Executable segment
0666 #define STA_E 0x4 // Expand down (non−executable segments)
0667 #define STA_C 0x4 // Conforming code segment (executable only)
0668 #define STA_W 0x2 // Writeable (non−executable segments)
0669 #define STA_R 0x2 // Readable (executable segments)
0670 #define STA_A 0x1 // Accessed

第二部

8480 # Bootstrap GDT
8481 .p2align 2 # force 4 byte alignment
8482 gdt:
8483 SEG_NULLASM # null seg
8484 SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
8485 SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg
8486
8487 gdtdesc:
8488 .word (gdtdesc − gdt − 1) # sizeof(gdt) − 1
8489 .long gdt # address gdt

完全な部分: http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

4

2 に答える 2

2

まあ、それは実際の式ではありません。Gビットが設定されている場合、制限は12ビット右にシフトされます。これは2 ^ 12による除算に相当し4096、GDTエントリベースの粒度です(コードでは、Gビットはマクロで使用する定数にエンコードされます) . アドレスが対応するセレクターを使用してアクセスされる場合は常に、上位 20 ビットのみが limit と比較され、それらが大きい場合は #GP がスローされます。また、標準ページのサイズは 4KB であるため、制限を超えて 4 キロバイト未満の数値は、ページに対応するセレクタ制限によって処理されることに注意してください。0xFFFFランディングは、オペランドが単一ワード (16 ビット) の最大値であるため、数値オーバーフローに関するコンパイラの警告を抑制するために部分的に存在します。

他のシフトと AND にも同じことが当てはまります。他の式では、数値をさらにシフトして別の部分を取得できます。

于 2013-08-14T15:50:35.203 に答える
0

GDT 記述子

GDT記述子の構造は上記を参照してください。

((lim) >> 12) & 0xffff)セグメント制限 (ビット 0 ~ 15) に対応します。右シフトは、最小単位が 2^12 バイト (GDT エントリ ベースの粒度) であることを意味します。&& 0xffffの下位 16 ビットが必要であることを意味しますlim) >> 12。これは、GDT 記述子の 16 ビットの最下位部分に適合します。

「式」の残りの部分は同じです。

GTD記述子を学習するための良い資料です

于 2018-03-21T13:45:23.477 に答える