Контрольная работа: Особливості багатозадачності в середовищі Windows

Вступ

Основні поняття багатозадачності в Windows 95 - процес (задача) і потік (нитка). Під процесом розуміється виконання програми в цілому (WinWord, Excel, Visual C++ і т.д.) Потоками у свою чергу є частини процесу, що виконуються паралельно.

Процесом звичайно називають екземпляр програми, що виконується.

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

- Структура даних, що включає в себе всю інформацію про процес, в тому числі список відкритих дескрипторів різних системних ресурсів, унікальний ідентифікатор процесу, різноманітну статистичну інформацію і т.д.;

- Адресний простір - діапазон адресів віртуальної пам‘яті, яким може користуватися процес;

- Програма, що виконується і дані, що проектуються на віртуальний адресний простір процесу.

Будь який процес має хоча б один потік (у цьому випадку його можна ототожнити з потоком). Це первинний потік створюється системою автоматично при створенні процесу. Далі цей потік може породити інші потоки, ті в свою чергу нові і т.д. Таким чином, один процес може володіти декількома потоками, і тоді вони одночасно виконують код в адресному просторі процесу.

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

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

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

Потоки повинні взаємодіяти один з одним в двох основних випадках:

1) спільно використовуючи один і той же ресурс (щоб не розрушити його);

2) коли треба повідомити інші потоки про завершення яких-небудь операцій

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


Механізми синхронізації

Найбільш простим механізмом синхронізації є використання Interlocked-функцій. Використання цих функцій гарантує “атомарне” виконання потрібних операцій, тобто потоки не будуть заважати один одному.

Пояснимо на прикладі:

// definition of global viriable lorig g_x = 0;

DWORD WINAPI ThreadFunc1(PVOID pvParam) {

g_x++;

return(0); }

DWORD WINAPI ThreadFunc2(PVOID pvParam} {

g_x++;

return(0); }

Нема ні якої впевненості, що отримаємо двійку, тому що ми не управляємо механізмом витіснення потоків.

// definition of global viriable long g_x = 0;

DWORD WINAPI ThreadFunc1(PVOID pvParam) {

InterlockedExchangeAdd(&g_x, 1);

--> ЧИТАТЬ ПОЛНОСТЬЮ <--

К-во Просмотров: 448
Бесплатно скачать Контрольная работа: Особливості багатозадачності в середовищі Windows