
- •"Програмне забезпечення автоматизованих систем"
- •1. Оперативна пам'ять
- •2. Регістри
- •3. Прапори
- •1. Переходи
- •2. Безумовні переходи
- •3. Умовні переходи
- •4. Команди керування циклом
- •1. Подання даних арифметичні операції
- •2. Цілі числа без знака
- •3. Цілі числа зі знаком
- •4. Особливості виконання арифметичних операцій
- •5. Подання символів і рядків
- •6. Подання адрес
- •7. Директиви визначення даних
- •1. Структура команд. Виконавчі адреси
- •2. Формати команд
- •3. Запис команд в masm
- •1. Сегменти пам’яті, сегментні регістри
- •2. Сегментні регістри по домовленості
- •3. Сегментування, базування й індексування адрес
- •4. Програмні сегменти. Директива assume
- •5. Початкове завантаження сегментних регістрів
- •6. Посилання вперед
- •1. Строкові операції
- •1. Стек
- •2. Основні стекові команди
- •1. Організація процедур та переривань
- •2. Передача параметрів процедурам через регістри, через стек, через таблиці, через глобальні області
- •3. Передача параметрів по ссылке
- •4. Передача параметрів по повернутому значенню
- •5. Передача параметрів в стеку
- •6. Локальні змінні
- •1. Процеси і потоки
- •1.1 Розподіл часу між потоками
- •1.2 Динамічна зміна рівня пріоритету потоку
- •2. Робота із процесами й потоками в Win32 api
- •1. Адресний простір процесу
- •2. Керування віртуальною пам'яттю. Vmm
- •3. Файли даних, що проектуються на згадку
- •4. Взаємодія процесів через загальну область даних. Когерентність
- •5. Купи
- •1. Визначення вікна. Компоненти й параметри вікон
- •2. Клас вікна
- •3. Ієрархія вікон
- •1. Обмін даними між процесами
- •2. Вилучений виклик процедур (rpc - Remote Procedure Call)
- •3. Синхронізація потоків
- •1. Загальний порядок обробки виключень
- •2. Фільтри й оброблювачі виключень
- •1. Загальна структура системного реєстру
- •2. Робота додатків із системним реєстром
- •1. Файлові структури
- •2. Робота з томами й каталогами
- •3. Синхронна робота з файлами
- •4. Асинхронна робота з файлами
- •1. Системні файли ntfs
- •2. Master File Table (mft)
- •3. Цілісність даних і здатність до самовідновлення.
- •4. Організація й керування дисками
4. Взаємодія процесів через загальну область даних. Когерентність
Два процеси можуть спільно використати об'єкт «проектований файл». При цьому, за допомогою функції MapViewOfFile кожен процес проектує цей об'єкт на свій адресний простір і використають цю частину адресного простору як поділювану область даних. Загальний механізм такий: один процес створює об'єкт «проектований файл» за допомогою функції CreateFileMapping і породжує інший процес, передаючи йому в спадщину описувачем цього об'єкта. Дочірній процес може користуватися цим описувачем нарівні з батьківським. Проблема складається тільки в тім, як повідомити дочірньому процесу, який з переданих йому в спадщину описувачів є описувачем «проецируемого файлу». Це можна зробити будь-яким способом. Наприклад передачею параметрів при запуску процесу, через змінні середовища, передачею повідомлення в головне вікно процесу й так далі.
Загальна область даних може бути створена не тільки шляхом проектування файлу, але й шляхом проектування частини файлу підкачування. Для цього у функцію CreateFileMapping необхідно передати як параметр не описувач раніше відкритого файлу, а -1. У цьому випадку необхідно задати розміри виділюваної області. Крім того, у параметрі IpName можна задати ім'я об'єкта, що є глобальним у системі. Якщо це ім'я задається в системі вперше, то процесу виділяється нова область даних, а якщо ім'я було вже задане, те іменована область даних надається для спільного використання.
Рис 10.2 - Взаємодія процесів через загальну область даних. Когерентність.
Якщо один процес міняє поділювану область даних, то вона міняється й для іншого процесу. Операційна система забезпечує когерентність поділюваної області даних для всіх процесів. Але для забезпечення когерентності процеси повинні працювати з одним об'єктом «проектований файл», а не з одним файлом.
5. Купи
Купи (heaps) - області, що розподіляють динамічно, даних. При породженні процесу йому надається купа «за замовчуванням», розміром 1Mb. Розмір цієї купи може змінюватися параметром /HEAP при побудові модуля, що виконує. CRT - функції (malloc. free і т.д.) використають функціональність куп (див. 4.3)
Для одержання описувача купи «за замовчуванням» використається функція
HANDLE GetProcessHeap( VOID )
Використовуючи поверта цією функцією описатель (handle) можна здійснювати роботу з купою. Для цього призначені функції:
LPVOID HeapAlloc( HANDLE hHeap, DWORD dwFlags, DWORD dwSize )
виділяє блок пам'яті заданого розміру з купи й повертає покажчик на цей блок;
LPVOID HeapReAlloc( HANDLE hHeap, DWORD dwFlags, LPVOID IpOldBlock, DWORD dwSize)
змінює розмір виділеного блоку пам'яті. При цьому вона може переміщати блок, якщо в купі немає місця для простого розширення.
BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID IpMem )
звільняє виділений блок пам'яті з купи.
Існує ще ряд функція роботи з купами, повний опис яких утримується в документації.
Іноді має сенс користуватися додатковими купами. Для їхнього створення використається функція
HANDLE HeapCreate(DWORD dwFlags, DWORD dwInitialSize, DWORD dwMaximumSize )
Причин доцільності використання додаткових куп може бути трохи:
1. Для захисту друг від друга різних структур даних.
Рис 10.3 - Структури.
2. Для підвищення ефективності керування пам'яттю.
У системах зі сторінковою організацією відсутня проблема фрагментації фізичної пам'яті1. Однак існує проблема фрагментації адресного простору. В 4Gb адресному просторі ця проблема не актуальна, але вона має значення в 1Mb купі. Якщо елементи якої-небудь структури мають один розмір, а елементи іншої структури - інший розмір, то корисно розміщати ці структури в різних купах.
3. Для зменшення робочої безлічі процесу.
Відповідно до принципу локальності, робота з різними структурами, найчастіше, відбувається не одночасно. Границі елементів різних структур не вирівняні на границю сторінки. Звертання до елементів однієї структури викликає підкачування всієї сторінки, а, значить й елементів іншої структури. Це збільшує робочу безліч процесу.
Рис 10.4 - Кучі.
Лекція 12
Тема: Вікна