Я изучаю внутренность ядра Linux и, читая "Understanding Linux Kernel", меня поразило немало вопросов, связанных с памятью. Одним из них является то, как ядро Linux обрабатывает отображение памяти, если в моей системе установлена физическая память, скажем, всего 512 МБ.
Как я читал, ядро отображает 0 (или 16) MB-896MB физическое ОЗУ в линейный адрес 0xC0000000 и может напрямую обращаться к нему. Итак, в описанном выше случае, когда у меня есть только 512 МБ:
-
Как ядро может отображать 896 МБ всего 512 МБ? В описанной схеме ядро настраивает все так, чтобы каждая таблица страниц процесса отображала виртуальные адреса от 0xC0000000 до 0xFFFFFFFF (1GB) непосредственно на физические адреса от 0x00000000 до 0x3FFFFFFF (1 ГБ). Но когда у меня есть только 512 МБ физической памяти, как я могу сопоставить, виртуальные адреса от 0xC0000000-0xFFFFFFFF до физического 0x00000000-0x3FFFFFFF? Точка: у меня есть физический диапазон только 0x00000000-0x20000000.
-
Как насчет процессов пользовательского режима в этой ситуации?
-
В каждой статье объясняется только ситуация, когда вы установили 4 ГБ памяти, а ядро отображает 1 ГБ в пространство ядра, а пользовательские процессы используют оставшийся объем оперативной памяти.
Буду признателен за любую помощь в улучшении моего понимания.
Спасибо!..