Grub はマルチブート対応のブートローダーです。オペレーティング システムを起動すると、利用可能なメモリを定義する構造を作成し、その構造へのポインタをメモリに残します。
ここでその情報を入手しました:
http://wiki.osdev.org/Detecting_Memory_(x86)#Memory_Map_Via_GRUB
これは私が興味を持っていると思う構造です:
typedef struct memory_map
{
unsigned long size;
unsigned long base_addr_low;
unsigned long base_addr_high;
unsigned long length_low;
unsigned long length_high;
unsigned long type;
} memory_map_t;
だから私はメモリマップ構造のコレクションを持っています。上記のページに記載されているように、grub プロンプトで「displaymem」と入力すると、メモリ マップを表示できます。これは私の出力です
でも構造がよくわからない…。
長さが 0 (0x0) に設定されているのはなぜですか? 低メモリと高メモリを組み合わせる必要がありますか?
値は64ビットであると言われているので、次のように「低メモリと高メモリ」を一緒にプッシュしました:
__int64 full_address = (low_mem_addr + high_mem_addr);
または、低アドレスと高アドレスの両方を排他的に含む 1 つのリストを取得していますか?
私は32ビットマシンを使用しているので、基本的に両方の値でそれぞれの一意のアドレスを参照しますか?
ショーのようなアドレスの単一のリストを期待してdisplaymem
いましたが、実際の長さのフィールドが入力されていましたが、それが表示されていません。わからないことがありますか?