Сегментно-сторінкова модель
Сегментна модель пам'яті орієнтована більшою мірою на програміста, а сторінкова - на ОС. Програмістові зручно компонувати команди і дані свого процесу в блоки змінної довжини (сегменти). ОС же зручніше управляти пам'яттю, розбитою на блоки постійної довжини (сторінки). Природним чином розвитку моделей пам'яті з'явилося об'єднання достоїнств цих двох моделей в одній - сегментно-сторінковою.
Віртуальна адреса тепер складається з трьох частин - номери сегменту, номери сторінки в сегменті і зсуву в сторінці. Апарат трансляції адрес, представлений на рисунку 4.1, принаймні, трьохкроковий:
регістр адреси дескриптора указує на таблицю сегментів, з неї вибирається дескриптор сегменту, а з останнього - адреса таблиці сторінок;
з таблиці сторінок вибирається дескриптор сторінки, а з нього - номер сторінкового кадру;
реальна адреса виходить складанням базової адреси сторінкового кадру із зсувом в сторінці.
|
Серйозним недоліком цієї моделі є багатоступінчатість трансляції адрес. Ця проблема вирішується на апаратному рівні шляхом застосування надшвидкодіючої пам'яті для зберігання частини таблиць.
Оскільки в моделі, приведеній на рис.4.1, кожен сегмент має власну таблицю сторінок, самі таблиці сторінок можуть займати значний об'єм в пам'яті. Просте вирішення цієї проблеми представляє Windows 3.x: у системі існує єдина таблиця сторінок.
Черги повідомлень
Ч
ерги
використовують модель взаємодії процесів
"багато відправників - один одержувач".
Цю модель часто називають поштовою
скринькою (mailbox). Процес-одержувач
є власником черги, він створює чергу, а
решта процесів дістає до неї доступ,
"відкриваючи" її. Передача даних
в черзі відбувається завжди повідомленнями,
причому кожне повідомлення має заголовок
і тіло. Заголовок завжди має фіксований
для даної системи формат. У нього
обов'язково входить довжина повідомлення,
а інша інформація залежить від специфікацій
конкретної системи: це може бути пріоритет
повідомлення, тип повідомлення,
ідентифікатор процесу, що послав
повідомлення і тому подібне. Тіло
повідомлення інтерпретується по
правилах, що встановлюються самими
процесами - відправником і одержувачем.
Власне черга ОС складає із заголовків
повідомлень. У елементи черги включаються
покажчики на тіла повідомлень, розташовані
в пам'яті системи або процесів. Істотним
питанням при конструюванні механізму
черг є питання про включення або
невключення в ОС системної буферизації
повідомлень. При включенні
такого засобу (рис.11.3)
тіло відправленого
повідомлення копіюється в системну
область пам'яті, а при читанні - копіюється
з неї в адресний простір процесу-одержувача.
За відсутності системної буферизації
тіла повідомлень зберігаються в загальній
для відправника і одержувача пам'яті,
а передається тільки покажчик на тіло
повідомлення (рис.11.4).
У першому випадку виконуються додаткові
пересилки, витрачається додаткова
пам'ять і вводяться жорсткіші обмеження
на об'єм повідомлень, але досягається
надійність передачі і значно більш
простій інтерфейс процесів. У другому
випадку значно економиться пам'ять, але
самі процеси повинні піклуватися про
управління спільно використовуваною
пам'яттю і про збереження повідомлень
в ній. За відсутності системної буферизації
повідомлень застосовуються зазвичай
два методи передачі тіла повідомлення:
або процес-відправник поміщає тіло
повідомлення в окремий сегмент, що
розділяється, отримує у ОС маніпулятор
цього сегменту для процесу-одержувача
і передає цей маніпулятор у складі
повідомлення; або для всіх повідомлень
виділяється одна загальна область
пам'яті із загальним маніпулятором, і
для розміщення повідомлення в ньому
використовуються системні виклики
виділення пам'яті цілком.
