Вопрос по virtual-address-space, linux, linux-kernel, paging – такое число фреймов = количество страниц (linux)?

3

Я изучаю драйвер устройства Linux и обнаружил, что количество страниц равно числу кадров. Каждая страница отображается в каждом кадре. Она говорит, что когда программе требуется память, она выделяет страницы.

Но в книгах по ОС я обнаружил, что виртуальный адрес делится на страницы, и эти страницы загружаются во фреймы. Тогда как число страниц может быть равно фрейму?

что из вышеперечисленного является правильным? как linux хранит информацию в таблице страниц относительно отображения виртуальных страниц, фреймов?

Я полностью сбит с толку.

Ваш Ответ

1   ответ
19

Physical pages называютсяpage frames (вы можете назвать их кадрами). Семестрpage зарезервировано дляpages in virtual memory.

Виртуальная память делится ядром на куски одинакового размера. Физическая память также делится на страницы (фреймы страниц) одинакового размера.

Например, если у нас 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

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

С уважением.

Спасибо, теперь я понял. Suri
@Suri: добро пожаловать.

Похожие вопросы