Такое число фреймов = количество страниц (linux)?
Я изучаю драйвер устройства Linux и обнаружил, что количество страниц равно числу кадров. Каждая страница отображается в каждом кадре. Она говорит, что, когда программе требуется память, она выделяет страницы.
Но в книгах по ОС я обнаружил, что виртуальный адрес делится на страницы, и эти страницы загружаются во фреймы. Тогда как число страниц может быть равно фрейму?
что из вышеперечисленного является правильным? Как Linux хранит информацию в таблице страниц относительно виртуального, страницы, сопоставления кадров?
Я полностью сбит с толку.
1 ответ
Физические страницы называются page frames
(вы можете назвать их кадрами). Семестр page
зарезервировано для страниц в виртуальной памяти.
Виртуальная память делится ядром на куски одинакового размера. Физическая память также делится на страницы (фреймы страниц) одинакового размера.
Например, если у нас 4 ГБ ОЗУ на 32-битной архитектуре, это означает: 1048576 фреймов страниц размером 4 КБ
Давай продолжим,
для каждого фрейма страницы (физической страницы) ядро поддерживает структуру struct page
, Эта структура определена в linux/mm_types.h
( https://github.com/torvalds/linux/blob/master/include/linux/mm_types.h), эта структура содержит член с именем mapping
(struct address_space *mapping
) который указывает адресное пространство, в котором расположен фрейм страницы. Там также член по имени index
которые представляют смещение внутри этого отображения.
Все страницы структуры хранятся в глобальном mem_map
массив этот массив используется ядром, чтобы узнать все ассоциации между виртуальной и физической памятью.
Наконец, для преобразования виртуального адреса в физический ядро использует макрос virt_to_page()
определяется в asm-i386/page.h
которые указывают на pfn_to_page
( https://github.com/torvalds/linux/blob/master/include/asm-generic/memory_model.h).
Перед примером давайте посмотрим расположение адреса в 32-битной архитектуре
| 10 бит - Справочник | 10 бит - таблица страниц | 12 бит - смещение |
Давайте рассмотрим пример перевода виртуального адреса памяти в физический:
http://img11.imageshack.us/img11/9426/pagingexample.png
Надеюсь, это поможет.
С уважением.