Физическите страници се наричат page frames
(можете да ги наричате рамки). Терминът page
е запазен за страници във виртуалната памет.
Виртуалната памет е разделена на парчета с еднакъв размер от ядрото. Физическата памет също е разделена на страници (рамки на страници) с еднакъв размер.
Например, ако имаме 4GB RAM, на 32-битова архитектура, това означава: 1048576 рамки за страници с размер 4KB
Да продължим,
за всеки кадър на страница (физическа страница) ядрото поддържа структура 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
Надявам се това да помогне.
За разбирането.
person
TOC
schedule
03.08.2012