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

4.5. Управління процесами в Windows

На відміну від «полуторазадачной» MS-DOS, яка залишає прикладному програмісту всю роботу (і весь ризик) організації паралельного функціонування процесів, багатозадачні ОС надають програмісту більш-менш зручний і багатий набір системних функцій, що дозволяють запустити кілька паралельних процесів і організувати їх взаємодія ( синхронізацію процесів, обмін даними, взаємне виключення і т.п.). При цьому ОС зобов'язана гарантувати коректну і ефективну організацію перемикання процесів, поділу між ними процесорного часу, пам'яті та інших ресурсів.

Складність проблеми організації взаємодії паралельних процесів істотно різна для систем, що використовують Невитісняючаі витісняюча диспетчеризацію процесів. При витісняючої диспетчеризації процес може бути перерваний диспетчером практично в будь-який момент. Крім завдання збереження і подальшого відновлення контексту процесу (див. п. 4.2.5), яка повинна вирішуватися самою ОС, виникають ще й завдання забезпечення взаємного виключення при виконанні критичних секцій в багатозадачних додатках. Тільки розробник програми може вирішити, які частини тексту його програми є критичними секціями і повинні бути захищені семафорами.

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

Всі версії Windows від 1.0 до 3.11 представляли собою досить потужні багатозадачні системи з невитесняющей диспетчеризацією. Версії, починаючи з Windows NT і Windows 95, використовують витісняючу диспетчеризацію.

4.5.1. Поняття об'єкта у Windows

В ОС Windows широко використовується поняття системного об'єкта. По суті, будь-який об'єкт являє собою деяку структуру даних, розташовану у адресному просторі системи. Оскільки програми не можуть мати доступу до цієї пам'яті, то для роботи з об'єктом додаток повинен отримати хендл об'єкта - деяке умовне число, яке буде представляти даний об'єкт при зверненні до API-функцій. Процес отримує хендл, як правило, при виклику функції CreateXxx (тут Xxx - назва об'єкта), яка може або створити новий об'єкт, або відкрити існуючий об'єкт, створений іншим процесом. Функції виду OpenXxx дозволяють тільки відкрити існуючий об'єкт.

Об'єкти Windows діляться на об'єкти ядра (KERNEL), що дозволяють керувати процесами, об'єкти USER, що описують роботу з вікнами, і об'єкти GDI, що задають графічні ресурси Windows. В даному курсі розглядаються тільки об'єкти ядра. Процеси, нитки і відкриті файли є прикладами об'єктів ядра.

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

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

Якщо хендл об'єкта більше не потрібен даному процесу, його слід закрити за допомогою функції CloseHandle, загальною для різних типів об'єктів.

Об'єкт існує до тих пір, поки не будуть закриті всі хендл, що вказують на нього.

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