http://learnlinuxconcepts.blogspot.in/2014/02/linux-addressing.html

чаю внутреннее ядро ​​Linux и, читая «Понимание ядра Linux», меня поразило немало вопросов, связанных с памятью. Одним из них является то, как ядро ​​Linux обрабатывает отображение памяти, если в моей системе установлена ​​физическая память, скажем, всего 512 МБ.

Как я читал, карты ядра0 (или 16) МБ-896 МБ физическое ОЗУ в линейный адрес 0xC0000000 и может напрямую адресовать его. Итак, в описанном выше случае, когда у меня есть только 512 МБ:

Как ядро ​​может сопоставить 896 МБ с 512 МБ? В описанной схеме ядро ​​настроено так, чтобы таблицы страниц каждого процесса отображали виртуальные адреса от 0xC0000000 до 0xFFFFFFFF (1 ГБ) непосредственно на физические адреса от 0x00000000 до 0x3FFFFFFF (1 ГБ). Но когда у меня всего 512 МБ физической ОЗУ, как я могу сопоставить виртуальные адреса от 0xC0000000-0xFFFFFFFF до физических 0x00000000-0x3FFFFFFF? Дело в том, что у меня есть физический диапазон только 0x00000000-0x20000000.

Как насчет процессов пользовательского режима в этой ситуации?

Каждая статья объясняет только ситуацию, когда вы установили 4 ГБ памяти, а ядро ​​отображает 1 ГБ в пространство ядра, а пользовательские процессы используют оставшийся объем ОЗУ.

Буду признателен за любую помощь в улучшении моего понимания.

Спасибо..!

Ответы на вопрос(0)

Ваш ответ на вопрос