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 ГБ в пространство ядра, а пользовательские процессы используют оставшийся объем ОЗУ.
Буду признателен за любую помощь в улучшении моего понимания.
Спасибо..!