Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS(методичка).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
403.88 Кб
Скачать

5.8.4. Файли, відображувані на пам'ять

Неважко зрозуміти, що ті ж засоби, які використовуються для відображення виконуваного файлу на віртуальну пам'ять, можуть бути застосовані і до будь-якого іншого файлу. У Windows програмістам надається можливість створювати і використовувати об'єкти типу «відображення файлу» (file mapping).

Робота з таким об'єктом вимагає попередньої підготовки. Спочатку програма повинна створити об'єкт, викликавши функцію CreateFileMapping. Серед параметрів цієї функції можна відзначити:

· Хендл попередньо відкритого файлу, який буде відображатися на пам'ять;

· Тип доступу до об'єкту (тільки для читання або і для запису);

· Розмір об'єкта;

· Ім'я об'єкта, яке може використовуватися для того, щоб різні процеси могли працювати з одним і тим же об'єктом «відображення файлу».

Функція повертає хендл створеного чи відкритого об'єкта.

Чи не другому етапі процес викликає функцію MapViewOfFile, передаючи їй як параметри хендл об'єкта «відображення файлу», а також розмір ділянки файлу, який має бути відображений, і зміщення початку цієї ділянки від початку файлу.

Ця функція повертає віртуальну адресу, відповідний початку відображеного ділянки файлу в пам'яті процесу. Іншими словами, виявляється, що заданий ділянку файлу якимось чином уже опинився в пам'яті, хоча функція читання з файлу не викликалася.

Насправді, звичайно, дані з файлу ще не знаходяться в пам'яті. Просто в таблиці сторінок зазначено, що за такими-сторінками віртуальної пам'яті закріплені блоки файлу. Цього разу не сторінкового файлу і не EXE-файлу програми, а того файлу, який використовувався при створенні об'єкта «відображення файлу». Далі починає діяти все той же стандартний механізм завантаження сторінок на вимогу, тобто реальне читання з файлу станеться тоді, коли програма звернеться до віртуальних адресах, відповідним відображеному ділянці файлу.

Зі сказаного випливає, що відображення файлу на пам'ять являє собою оригінальний спосіб роботи з файлами, при якому замість явного читання і запису даних програма веде себе так, як якщо б файл вже знаходився в пам'яті. Це дійсно так, але це ще не все.

Якщо два процеси працюють з одним і тим же об'єктом «відображення файлу» і ділянки файлу, які вони відображають у свою пам'ять, хоча б частково перетинаються, то Windows гарантує, що будь-які зміни даних, зроблені на цій ділянці одним процесом, зараз же стають доступними іншому процесу. Таким чином, два процеси фактично працюють із загальною областю пам'яті, як показано на рис. 5-5.

Рис. 5‑24

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

Найцікавіше, що файл-то тут і не обов'язковий. Якщо при створенні об'єкта «відображення файлу» в якості хендл файлу зазначено спеціальне значення FFFFFFFF16, то Windows пов'язує сторінки пам'яті з блоками сторінкового файлу. У цьому випадку об'єкт може використовуватися тільки як засіб обміну даними між процесами, без прив'язки до конкретного файлу. При закритті об'єкта «відображення файлу» його дані в цьому випадку не зберігаються.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]