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;
Итак, у меня есть коллекция структур карты памяти.Как упоминалось на предыдущей странице, вы можете увидеть карту памяти, набрав «displaymem» в приглашении grub.Это мой вывод
Но я не совсем понимаю структуру ....
Почему длины установлены в 0 (0x0)?Нужно ли объединять малую и верхнюю память?
Он говорит, что значения представлены в 64-битном формате, поэтому он объединял "low mem и high mem" вместе следующим образом:
__int64 full_address = (low_mem_addr + high_mem_addr);
или я получаю 1 список, содержащий исключительно низкие и высокие адреса?
и, поскольку я использую 32-битную машину, я в основном называю каждый уникальный адрес с обоими значениями?
Я ожидал один список адресов, например, displaymem
, но с заполненными полями фактической длины, но я этого не вижу.Есть что-то, чего я не понимаю?