
В книгах по операционным системам обычно упоминается, что размер страницы определяется архитектурой процессора, например, Intel x86 поддерживает размер страницы 4 КБ. У меня есть ощущение, что когда мы устанавливали операционную систему на наше оборудование, ОС считывала размер страницы 4 КБ с оборудования и логически разделяла виртуальное адресное пространство на страницы размером 4 КБ, а память на фреймы соответственно.
Если мое восприятие верно, откуда или из какого места в оборудовании операционная система считывает это значение 4 КБ с процессора? Какой механизм использует ОС для определения размера страницы, предоставляемого оборудованием? Может ли кто-нибудь просветить меня по этому поводу? Как (на каком основании) Intel решает сохранить размер страницы 4 КБ.
решение1
Операционные системы жестко кодируют размер страницы в зависимости от архитектуры (и в некоторых случаях конфигурации ядра во время сборки). Например, на x86 базовый размер страницы всегда 4 КБ — это свойство архитектуры ЦП; на Linux вы увидите это определенноевinclude/asm/page_types
. На 64-битном ARM размер страницы может быть настроен во время сборки как 4 КБ, 16 КБ или 64 КБ. Некоторые архитектуры поддерживают несколько размеров страниц во время выполнения (напримерогромные страницы на x86), но все размеры известны заранее, а базовый размер фиксирован.
В Linux каноническое определение размера страницы — PAGE_SIZE
, и вы получаете его, включая asm/page.h
, что зависит от архитектуры (что может включать другие заголовки, как это происходит на x86). Elixir предоставляет удобный списоквсе PAGE_SIZE
определения.
Большинство архитектур, поддерживаемых ядром Linux, поддерживают страницы размером 4 КБ; исключениями являются Alpha, ARC, некоторые системы Motorola 68k, OpenRISC и 64-битный SPARC, которые все используют страницы размером 8 КБ. Многие архитектуры можно настроить на использование других размеров страниц.