Такое число фреймов = количество страниц (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

Надеюсь, это поможет.

С уважением.

Другие вопросы по тегам