Как BIOS определяет объем доступной оперативной памяти?

1564
PositronicBrain

Если BIOS представляет собой 16-разрядную программу, работающую в реальном режиме, и в этом режиме возможно обращение только к 1 МБ, как BIOS определяет объем доступной оперативной памяти, например, 1 ГБ?

3
Это домашний вопрос? Xavierjazz 8 лет назад 1
Если так, я хочу взять этот класс. dsolimano 8 лет назад 1
Я изучаю ассемблер, как хобби, и хочу изучить основы и то, как работает ПК. Я не студент колледжа, просто любопытно. Спасибо за ваше время в любом случае =) PositronicBrain 8 лет назад 0

1 ответ на вопрос

7
DavidPostill

The BIOS is a 16-bit program running in real mode, and in this mode it is possible to address only 1MB.

This is incorrect.

16-bit real mode does not limit the processor to 1MB of memory.

While it's true that an x86 processor starts out in real mode, and defaults to the 16-bit 8086 instruction set, there are extensions in the 80286 instrution set. If you prefix an 8086 instruction with the byte 0x67, this will allow that instruction access to a 32-bit register, which has access to 232 bytes, or 4GiB of memory.

If you are using a 64-bit processor, the processor can use PAE (Physical Address Extension), which gives the processor access to 252 bytes of memory, more than can be physically installed on any modern motherboard.

Source How BIOS can detect full extended memory size


How does the BIOS determine the amount of available RAM, like 1 GB for example?

It uses methods that are documented in the datasheets for the memory controller (northbridge).

Most BIOSes can't use any RAM until they detect the type of RAM installed, then detect the size of each memory module, then configure the chipset to use the detected RAM.

All of this depends on chipset specific methods, and is usually documented in the datasheets for the memory controller (northbridge).

The RAM is unusable for running programs during this process. The BIOS initially is running from ROM, so it can play the necessary games with the RAM chips. But it is completely impossible to do this from inside any other program.

Source Detecting Memory (x86)

Большое спасибо, мужик. Спасибо, что нашли время ответить на мой вопрос. На самом деле, мне еще нужно многому научиться. PS: на мой вопрос ответили очень очень быстро LOL. PositronicBrain 8 лет назад 0
Об обнаружении памяти: у модулей DIMMS есть небольшая СППЗУ, в которой указано, что они из себя представляют, и какие значения времени следует использовать. https://en.wikipedia.org/wiki/Serial_presence_detect pjc50 8 лет назад 0
Первая цитата не является правильной и не имеет отношения к вопросу. Во-первых, есть опечатка, которая говорит «80286», когда она должна быть «80386». Во-вторых, возможность использовать 32-битные регистры не имеет ничего общего с возможностью адресации памяти. При работе в реальном режиме вы по-прежнему ограничены 20-битными адресными строками независимо от размера регистра. В-третьих, PAE доступен на многих процессорах, которые не поддерживают 64-битные расширения. В-четвертых, смысл цитаты также неверен. Реальный режим * ограничен * адресацией только 1 МБ; просто не нужно * обращаться * к памяти, чтобы * считать * это. Cody Gray 6 лет назад 3

Похожие вопросы