Дослідження моделі пам’яті Linux, Linux, Операційні системи, статті

Розуміння моделей пам’яті, використовуваних в Linux, – це перший крок до освоєння на більш високому рівні структури операційної системи Linux та її реалізації. У цій статті моделі пам’яті Linux і керування пам’яттю розглядаються на ознайомлювальному рівні.


Операційна система Linux використовує монолітний підхід, при якому визначається набір примітивів або системних викликів для реалізації служб операційної системи, таких як управління процесами, паралельна робота і управління пам’яттю, в кількох модулях, що працюють в режимі супервізора. І хоча Linux в цілях сумісності підтримує модель модуля управління сегментами (segment control unit) як символічне уявлення, вона використовує цю модель на мінімальному рівні.


Основними завданнями управління пам’яттю є:



Дана стаття покликана допомогти вам в освоєнні внутрішнього устрою Linux з точки зору управління пам’яттю операційної системи. Розглядаються наступні теми:



У даній статті не розглядаються детально питання управління пам’яттю в ядрі Linux, але інформація з загальної моделі пам’яті і по роботі з нею повинна дати вам основу для подальшого вивчення. Увага у статті приділяється архітектурі x86, але ви можете використовувати ці матеріали і з іншими апаратними реалізаціями.


Архітектура пам’яті x86


В x86-архітектури пам’ять поділяється на три типи адрес:



CPU використовує два модулі для перетворення логічного адреси в його фізичний еквівалент. Перший називається модулем сегментації (segmented unit), а другий – модулем поділу на сторінки (paging unit).


Рисунок 1. Два модуля перетворять адресний простір

Зона верхній області пам’яті з’явилася в системі управління пам’яттю ядра тоді, коли були реалізовані розширення віртуальної пам’яті Pentium II (для доступу до 64 GB пам’яті засобами PAE – Physical Address Extension – на 32-бітних системах) та підтримка 4 GB фізичної пам’яті (знову ж таки, на 32-бітних системах). Ця концепція застосовна до платформ x86 і SPARC. Зазвичай ці 4 GB пам’яті роблять доступними відображення ZONE_HIGHMEM в ZONE_NORMAL за допомогою kmap(). Зверніть увагу, будь ласка, на те, що не бажано мати більше 16 GB RAM на 32-бітної архітектури навіть при дозволеному PAE.


(PAE – розроблене Intel розширення адрес пам’яті, що дозволяє процесорам збільшити кількість бітів, які можуть бути використані для адресації фізичної пам’яті, з 32 до 36 через підтримку в операційній системі додатків, що використовують Address Windowing Extensions API.)


Управління цією зоною фізичної пам’яті виконується розподільником (allocator) зони. Він відповідає за поділ пам’яті на кілька зон і розглядає кожну зону як одиницю для розподілу. Будь-який конкретний запит на розподіл використовує список зон, в яких розподіл може бути зроблено, в порядку від найбільш кращою до найменш кращою.


Наприклад:



Список зон для такого розподілу складається з зон ZONE_NORMAL, ZONE_HIGHMEM і ZONE_DMA в зазначеному порядку. З іншого боку, запит DMA-сторінки може бути виконаний із зони DMA, тому список зон для таких запитів містить тільки зону DMA.


 


Висновок


Управління пам’яттю – це великий, комплексний і трудомісткий набір завдань, один з тих, в яких розібратися непросто, тому що створення моделі поведінки системи в реальних умовах в багатозадачному середовищі є важкою роботою. Такі компоненти як планування, розбивка на сторінки і взаємодія процесів пред’являють серйозні вимоги. Я сподіваюся, що ця стаття допоможе вам розібратися в основних поняттях, необхідних для оволодіння завданнями управління пам’яттю в Linux, і забезпечить вас початковою інформацією для подальших досліджень.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*