Добрый день! Заметил что Memtest86+ при тестировании памяти свыше 2-х гб, тестирует ее кусками например 4 гб 184K-2048M (~2GB) 2048M - 3096M (~1GB) 4096M - 5120M (~1GB) в диапазоне 3096-4096 находится зарезервированная память. об этом также сообщает функция E820 биос (мемтест так же берет информацию из этой функции) А как обратиться к участку 4096M - 5120M адреса которого находятся за пределом 4-х ГБ из защищенного режима? Ковырял исходники мемтеста, но так и не понял, при получении информации из e820 начало и размер блока памяти сохраняет в long long переменной, функции тестирования обращаются уже к 4-х байтовым переменным. GDT имеет следующий вид: Код (Text): gdt: .word 0,0,0,0 # dummy .word 0,0,0,0 # unused .word 0x7FFF # limit 128mb ;<------------ ПОЧЕМУ ЛИМИТ СЕГМЕНТА ВСЕГО 128 MB??? .word 0x0000 # base address=0 .word 0x9A00 # code read/exec .word 0x00C0 # granularity=4096, 386 .word 0x7FFF # limit 128mb .word 0x0000 # base address=0 .word 0x9200 # data read/write .word 0x00C0 # granularity=4096, 386
GLEB Либо включать страничную адресацию и разбираться с PAE Как второй вариант перейти в длинный режим. Там вам будет все 64ГБ адресного пространства доступны.
Код (Text): Либо включать страничную адресацию Memtest получается исрользует страничную адресацию? Покопался еще нашел такой код: Код (Text): unsigned long long start; //тут получается данные из e820 unsigned long long end; ... v->pmap[n].start = (start + 4095) >> 12; // вот это преобразование мне пока непонятно v->pmap[n].end = end >> 12; //v->pmap[n].start и v->pmap[n].end уже unsigned long