Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всі білети.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
696 Кб
Скачать
☆

Взаємодія потоків. Умовні змінні.

Умовною змінною називають синхронізаційний примітив, який дає змогу органі­зувати очікування виконання умови всередині критичної секції, заданої м’ютексом. Умовна змінна завжди пов’язана із конкретним м’ютексом і даними, захищеними цим м’ютексом.Для умовної змінної визначено такі операції.Очікування (wait). Додатковим вхідним параметром ця операція приймає м’ютекс, який повинен перебувати в закритому стані. Виклик wait відбувається в ситуації, коли не виконується деяка умова, потрібна потоку для продовжен­ня роботи. Внаслідок виконання wait потік (позначатимемо його 7V) припи­няється (кажуть, що він «очікує на умовній змінній»), а м’ютекс відкриваєть­ся (ці дві дії відбуваються атомарно). Так інші потоки отримують можливість увійти в критичну секцію і змінити там дані, які вона захищає, можливо, вико­навши умову, потрібну потоку Tw. На цьому операція wait не завершується її інший потік, викликавши операцію signal після того, як умову буде виконано.Сигналізація (signal). Цю операцію потік (назвемо його Ts) має виконати пі­сля того, як увійде у критичну секцію і завершить роботу з даними (виконав­ши умову, яку очікував потік, що викликав операцію wait). Ця операція пере­віряє, чи немає потоків, які очікують на умовній змінній, і якщо такі потоки є, переводить один ІЗ НИХ (7V) у стан готовності (цей потік буде поновлено, ко­ли відповідний потік Ts вийде із критичної секції). Внаслідок поновлення по­тік 7Vзавершує виконання операції wait - блокує м’ютекс знову (поновлення і блокування теж відбуваються атомарно). Якщо немає жодного потоку, який очікує на умовній змінній, операція signal не робить нічого, і інформацію про її виконання в системі не зберігають. Широкомовна сигналізація (broadcast) відрізняється від звичайної тим, що пе­реведення у стан готовності і, зрештою, поновлення виконують для всіх пото­ків, які очікують на цій умовній змінній, а не тільки для одного з них.Отже, виконання операції wait складається з таких етапів: відкриття м’ютекса, очікування (поки інший потік не виконає операцію signal або broadcast), закрит­тя м’ютекса. По суті, це перша неатомарна операція, визначена для синхронізаційного при­мітива, але така відсутність атомарності цілком контрольована (завжди відомо, де потік 7V перейшов у стан очікування і що його з цього стану виведе).

Основи технології віртуальної пам'яті. Сегментація пам'яті. Особливості сегментації пам'яті. Реалізація сегментації в архітектурі іа-32.

Віртуальна пам'ять — це технологія, в якій вводиться рівень додаткових

перетворень між адресами пам'яті, використовуваних процесом, і адресами фізичної пам'яті комп'ютера. Такі перетворення мають забезпечувати захист пам'яті та відсутність прив'язання процесу до адрес фізичної пам'яті.

Сегментація пам'яті дає змогу зображати логічний адресний простір як сукупність незалежних блоків змінної довжини, які називають сегментами. Кожний сегмент звичайно містить дані одного призначення, наприклад в одному може бути стек, в іншому. Програмний код і т. д. У кожного сегмента є ім'я і довжина (для зручності реалізації поряд з іменами використовують номери). Логічна адреса складаєтьс номера сегмента і зсуву всередині сегмента; з такими адресами працює прикладна програма. Компілятори створюють окремі сегменти для різних даних

програми (сегмент коду, сегмент даних, сегмент стека). Під час завантаження програми у пам'ять створюють таблицю дескрипторів сегментів процесу, кожни елемент якої відповідає одному сегменту і складається із базової адреси, значення межі та прав доступу. Архітектура ІА-32 використовує дворівневу сторінкову організацію. В архітектурі ІА-32 логічні адреси в програмі формуються із використанням сег­ментації й мають такий вигляд: «селектор-зсув». Значення селектора завантажу­ють у спеціальний регістр процесора (сегментний регістр) і використовують як індекс у таблиці дескрипторів сегментів, що перебуває в пам’яті та є аналогом таблиці сегментів, описаної раніше. В архітектурі ІА-32 підтримуються шість сег­ментних регістрів. Це означає, що виконуваний код в один і той самий час може адресувати шість незалежних сегментів.

Селектор містить індекс дескриптора в таблиці, біт індикатора локальної або глобальної таблиці та необхідний рівень привілеїв.Для системи задають спільну глобальну таблицю дескрипторів (Global Descr­iptor Table, GDT), а для кожної задачі — локальну таблицю дескрипторів (Local Descriptor Table, LDT). Дескриптори в ІА-32 мають довжину 64 біти. Вони визначають властивості програмних об’єктів (наприклад, сегментів пам’яті або таблиць дескрипторів). Дескриптор містить значення бази (base), яке відповідає адресі об’єкта (на­приклад, початок сегмента); значення межі (limit); тип об’єкта (сегмент, таблиця дескрипторів тощо); характеристики захисту. Звертання до таблиць дескрипторів підтримується апаратно. Якщо задані в де­скрипторі характеристики захисту не відповідають рівню привілеїв, визначеному селектором, отримати доступ до пам’яті за його допомогою буде неможливо. Так забезпечують захист пам’яті.Проте жодного разу не було згадано, що в дескрипторі зберігають фізичну ад­ресу. Річ у тому, що для архітектури ІА-32 внаслідок перетворення логічної адре­си отримують не фізичну адресу, а ще один вид адреси, який називають лінійною адресою. У розділі 8.4 розглянемо таке дворівневе перетворення адреси.

БІЛЕТ № 18