Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Архітектура ПЕОМ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
237.56 Кб
Скачать

27.Керування пам`яттю. Сегментація пам`яті.

Планувальник ядра слідкує за поділом часу між процесами. Ваша оператційна система також має поділити їх у просторі, щоб процеси не могли «наступати» чужу область оперативної пам’яті. Навіть якщо припустити, що всі програми зроблені так, щоб працювати в купі із «сусідами», ви ж не хочете, щоб помилка в одній з них призвела до неправильної роботи інших. Все, що робить операційна система для вирішення цих проблем називається керуванням пам’яттю 

Робоча пам’ять процесу складається з двох областей: область коду із сегментом коду програми, що виконується (доступна процесові тільки для читання) та область даних (доступна як для читання, так і для запису). Кожен процес має свою окрему область даних, але кілька процесів будуть використовувати ту саму область коду, якщо всі ці процеси — одна і та ж програма на диску (наприклад, дві чи три запущені переглядалки *.pdf, або кілька емуляторів терміналу). Така оптимізація — дуже ефективне рішення в роботі з оперативною пам’яттю.

Модуль керування пам’яттю

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

Ця таблиця використовується для передачі команд до спеціалізованої апаратної одиниці, що називається модуль керування пам’яттю або MMU8 . У сучасних процесорах цей модуль вмонтований всередину самих процесорів. Він має специфічну властивість виставляти «огорожі» навколо використовуваних ділянок пам’яті, отож недозволені запити програм у чужі ділянки пам’яті натикаються на ці огорожі, і MMU генерує перепин.

Якщо Ви коли-небудь бачили повідомлення «Segmentation fault» або «core dumped» після того, як котрась із програм «зависла», відбулось саме те, про що ішлося — звертання програмою у пам’ять поза межами її власного сегменту. Це свідчить про помилку у програмі — перед тим, як використовувати пам’ять потрібно попросити про новий сегмент у ядра.

Є також і інший аспект для захисту процесів від «перетину інтересів». Можна, наприклад, контролювати їхні можливості доступу до файлів чи пристроїв (котрі у Юнікс’ах теж відображаються у вигляді файлів), що унеможливить погано чи зумисне шкідливо написаним програмам пошкодити важливі частини системи. Ось чому усі Юнікси мають так звані «права доступу до файлів», про що описується в наступних розділах.

Сегмента́ція па́м'яті

Технологія сегментації дозволяє поділити адресний простір процесу на кілька сегментів. Довільна адреса програми містить ідентифікатор сегмента (segment ID) і зсув від його початку. Кожен сегмент може мати власні налаштування захисту. Сегменти завантажуються в оперативну пам'ять цілком, кожний з них описується за допомогою дескриптора, що містить фізичну адресу, за яким завантажений сегмент (базова адреса), розмір і інформація про захист. Апаратна частина перевіряє границі сегмента при кожній операції доступу, що виключає факти ушкодження процесом сусіднього сегмента. Завантаження і вивантаження (свопінг) можуть бути проведені на рівні окремих сегментів, а не всієї програми. Сегментація в інших випадках використовується разом з розбиттям на сторінки, що в результаті дає гнучкий гібридний механізм керування пам'яттю. У таких системах сегменти не обов'язково повинні розташовуватися у пам'яті неперервно.