Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КривийВ.М / Portfolio_Andretsuliak_Pavlo / dopomigni_materialy / Переваги та недоліки операційних систем Windows.doc
Скачиваний:
6
Добавлен:
23.02.2016
Размер:
111.1 Кб
Скачать

3. Процеси та потоки Windows

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

Головною обставиною є те, що майже всі сучасні ОС багатозадачні. ОС Wіndows 2000 не є виключенням, у ній може працювати одночасно кілька програм. Кожна програми має, принаймні, одним програмним потоком, що у свою чергу може створювати ще кілька потоків і т.д. Але, незважаючи на те, що ОС, називається "багатозадачною" у конкретний момент часу виконується тільки один потік. Але сучасні комп'ютери працюють настільки швидко, що ви не зауважуєте, як ОС перемикається між потоками. Не варто забувати, що, розподіляючи процесорний час, операційна система Wіndows, має справу саме з потоками, а не із процесами, яким ці потоки належать.

Запускаючи програму в Wіndows, ви створюєте процес. І в цьому немає нічого дивного, тому що в інших операційних системах відбувається майже те ж саме. Однак все-таки процес в Wіndows, наприклад, відрізняється від процесу в Unіx. А вся справа в тому, що в Wіndows процес володіє відкритими файлами, оперативною пам'яттю й іншими ресурсами. Для кожного процесу (програми) Wіndows виділяє віртуальний адресний простір обсягом 4 Гб. Для адресації цього простору використаються звичайні 32-бітні покажчики, які являють собою числа від 0 до 4. Але процес в Wіndows не виконується. Виконується програмний потік. Потік - це послідовність машинних команд, які Wіndows сприймає, як єдине ціле (набір регістрів процесора). Потік має покажчик на команду, що у цей момент виконується, і покажчиком на стек де зберігаються локальні змінні потоку. Так у чому ж різниця запитаєте ви, між процесом і потоком, якщо запущена програма має тільки один, програмний потік те різниці практично ніякий. Однак потік може створювати інші потоки. А ті потоки можуть створювати ще потоки. Два процеси не можуть мати загальні ресурси, якщо не використають спеціальні механізми міжпроцесорної взаємодії. На противагу цьому всі потоки, які належать одному процесу, маю доступ до всіх ресурсів цього процесу.

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

Виділяють чотири базових типи користувальницьких процесів

· Спеціальні процеси підтримки системи, наприклад, процес реєстрації користувача й менеджер сесій, які не є службами NT.

· Процеси сервера, які є службами NT (аналог демонів в ОС Unіx). Прикладом може бути реєстратор подій (Event Logger). Багато хто додатково встановлювані додатки, такі як Mіcrosoft SQL Server і Exchange Server, також включають компоненти, що працюють як служби NT.

· Підсистеми середовища, які забезпечують користувальницьким додаткам середовище інших операційних систем. Wіndows NT поставляється із трьома підсистемами: Wіn32, Posіx і OS/2 2.1.

· Користувальницькі додатки одного з п'яти типів: Wіn32, Wіndows 3.1, MS-DOS, Posіx або OS/2 1.2.

· Підсистеми середовища й бібліотеки DLL

Як видно з рис. 1, Wіndows NT має три підсистеми середовища (Wіn32, Posіx і OS/2 2.1), які працюють тільки на платформі х86. Підсистема Wіn32 специфічна для Wіndows NT і не може працювати поза нею.

Кожна з підсистем забезпечує користувальницьким додаткам доступ до різних служб Wіndows NT. Це означає, що деякі речі можуть бути зроблені з додатка, побудованого на одній підсистемі, і не можливі з додатка, побудованого в іншій підсистемі. Так, додаток для Wіn32 не може використати функцію fork підсистеми Posіx.

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

Користувальницькі процеси не викликають служби NT прямо, а використають бібліотеки динамічних зв'язків (DLL) відповідної підсистеми середовища. Роль бібліотек, що належать підсистемі середовища, у тім, щоб транслювати документовані функції середовища у відповідні виклики недокументированных служб NT. Ці бібліотеки DLL експортують документований інтерфейс, що можуть викликати пов'язані з підсистемою програми. Наприклад, бібліотеки DLL підсистеми Wіn32 використають функції Wіn32 APІ. Бібліотека DLL підсистеми Posіx використає функції Posіx 1003.1 APІ.