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

Міжпроцесова взаємодія на основі інтерфейсу файлової системи. Файли, що відображаються у пам'ять.

Файли, що відображаються у пам’ять

Цей розділ буде присвячено реалізації відображуваної пам’яті на основі інтерфейсу файлової системи. Після відображення доступ до відображуваної пам’яті спричиняє виконання операцій доступу до вмісту відображеного файла. Таку технологію широко застосовують у сучасних операційних системах -- в UNIX вона визначена стандартом POSIX [24,37, 52], у лінії Windows ХР її реалізація доступна через Win32 АРІ [31, 50].

Принципи дії відображуваної памяті. Інтерфейс відображуваної памяті posix

Відображення файлів у нам’ять відбувається за допомогою спеціального системного виклику; у POSIX такий виклик визначений як mmapO. Він призводить до того, що у визначену частину адресного простору процесу відображають заданий файл або його частину. Після виконання цього системного виклику доступ до такої пам’яті спричинятиме прямий доступ до вмісту цього файла.

Міжпроцесорна взаємодія на основі відображуваної памяті posix

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

Особливості інтерфейсу відображуваної памяті Win32 API.

Як параметр у функцію відображення файла в пам’ять (у Win32 АРІ її називають MapViewOfFileO) передають не дескриптор відкритого файла, як у тгсарО, а дескриптор спеціального об’єкта відображення, що створюється заздалегідь за допомогою функції CreateFilеМарріng(). Під час створення об’єкта відображення вказують дескриптор відкритого файла; далі цей об’єкт можна використовувати для відображення кількох регіонів одного файла.

Особливоті реалізації відображуваної

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

Взаємодія потоків.Базові механізми синхронізації потоків.

Механізмами синхронізації є засоби операційної системи, які допомагають розв'

язувати основне завдання синхронізації — забезпечувати координацію потоків,

котрі працюють зі спільно використовуваними даними. Якщо такі засоби — це мінімальніблоки для побудови багатопотокових програм, їх називають синхронізаційнимипримітивами.Синхронізаційні механізми поділяють на такі основні категорії:

універсальні, низького рівня, які можна використовувати різними способами

(семафори);

прості, низького рівня, кожен з яких пристосований до розв'язання тільки однієї

задачі (м'ютекси та умовні змінні);

універсальні високого рівня, виражені через прості; до цієї групи належить

концепція монітора, яка може бути виражена через м'ютекси та умовні змінні;

високого рівня, пристосовані до розв'язання конкретної синхронізаційної задачі(блокування читання-записування і бар'єри).Розглянемо різні механізми і дамо оцінку перевагам, які має кожен з них, а такожможливі їхні недоліки.

Для подальшої ілюстрації матеріалу цього розділу візьмемо класичний приклад,

який демонструє необхідність синхронізації - задачу виробників-спожива-

чів (producer-consumer problem) або задачу обмеженого буфера (bounded buffer).

Формулювання задачі просте. Припустимо, що в нас є потоки-виробники і по-

токи-споживачі. Виробник створює об'єкти, споживач їх отримує. Завданням є таксинхронізувати їхню роботу, щоб споживач не міг намагатися отримувати ще нестворені об'єкти, а виробник не міг зробити більше об'єктів, ніж зможе отриматиспоживач.Для синхронізації потоків помістимо між виробником і споживачем буферфіксованої довжини п. Виробник може поміщати об'єкти у буфер, споживач – забиратиїх звідти. Якщо споживач забирає об'єкт, його вилучають із буфера. Необхіднозабезпечити кілька вимог.1. Коли виробник або споживач працює із буфером, решта потоків повинна чекати,поки він завершить свою роботу.

Коли виробник намагається помістити об'єкт у буфер, а буфер повний (у ньому

п об'єктів), він має дочекатися, поки в ньому з'явиться місце.

Коли споживач намагається забрати об'єкт із буфера, а буфер порожній, він

має дочекатися, поки в ньому з'явиться об'єкт.

Алгоритми планування

Як ми вже знаємо, алгоритм планування дає змогу короткотерміновому планувальниковівибирати з готових до виконання потоків той, котрий потрібно виконуватинаступним. Можна сказати, що алгоритми планування реалізують політикупланування.Залежно від стратегії планування, яку реалізують алгоритми, їх поділяють навитісняльні та невитісняльні. Витісняльні алгоритми переривають потоки під часїхнього виконання, невитісняльні — не переривають. Деякі алгоритми відповідаютьлише одній із цих стратегій, інші можуть мати як витісняльний, так і невитіс-няльний варіанти реалізації.A