Книга: Разработка ядра Linux
Размер страницы памяти
Размер страницы памяти
При работе со страницами памяти никогда нельзя привязываться к конкретному размеру страницы. Программисты, которые разрабатывают для аппаратной платформы x86, часто делают ошибку, считая, что размер страницы всегда равен 4 Кбайта. Хотя это справедливо для платформы x86, для других аппаратных платформ размер станицы может быть другим. Некоторые аппаратные платформы поддерживают несколько размеров страниц! В табл. 19.1 приведен список размеров страниц памяти для всех поддерживаемых аппаратных платформ.
Таблица 19.4. Размеры страниц памяти для разных аппаратных платформ
Аппаратная платформа | Значение PAGE_SHIFT | Значение PAGE_SIZE |
---|---|---|
alpha | 13 | 8 Кбайт |
arm | 12, 14, 15 | 4 Кбайт, 16 Кбайт, 32 Кбайт |
cris | 13 | 8 Кбайт |
h8300 | 12 | 4 Кбайт |
i386 | 12 | 4 Кбайт |
ia64 | 12, 13, 14, 16 | 4 Кбайт, 8 Кбайт, 32 Кбайт, 64 Кбайт |
m68k | 12, 13 | 4 Кбайт, 8 Кбайт |
m86knommu | 12 | 4 Кбайт |
mips | 12 | 4 Кбайт |
mips64 | 12 | 4 Кбайт |
parisc | 12 | 4 Кбайт |
ppc | 12 | 4 Кбайт |
ppc64 | 12 | 4 Кбайт |
s390 | 12 | 4 Кбайт |
sh | 12 | 4 Кбайт |
spare | 12,13 | 4 Кбайт, 8 Кбайт |
sparc64 | 13 | 8 Кбайт |
v850 | 12 | 4 Кбайт |
x86_64 | 12 | 4 Кбайт |
При работе со страницами памяти необходимо использовать константу PAGE_SIZE
, которая содержит размер страницы памяти в байтах.
Значение макроса PAGE_SHIFT
— это количество битов, на которое необходимо сдвинуть влево значение адреса, чтобы получить номер соответствующей страницы памяти. Например, для аппаратной платформы x86, для которой размер страницы равен 4 Кбайт, макрос PAGE_SIZE
равен 4096, а макрос PAGE_SHIFT
— 12. Эти значения содержатся в заголовочном файле <asm/page.h>
.
- Статическое выделение памяти в стеке
- Вычисление размера кэша
- Файлы, отображаемые в памяти
- Страницы памяти
- Информация заголовочной страницы (Database header)
- Размер страницы базы данных
- Уменьшение размера, занимаемого индексами
- Дополнительные национальные кодовые страницы и порядки сортировки
- 3.2.1.2. Начальное выделение памяти: malloc()
- Как уменьшить размер документа Microsoft Word?
- Физический размер матрицы
- Страницы веб-частей