Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Основні поняття багатозадачності в Windows 95 процес (задача)

Скачати 271.89 Kb.

Основні поняття багатозадачності в Windows 95 процес (задача)




Скачати 271.89 Kb.
Сторінка1/3
Дата конвертації13.03.2017
Розмір271.89 Kb.
ТипКонтрольна робота
  1   2   3


Контрольна робота

з інформатики

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

Вступ
Основні поняття багатозадачності в Windows 95 - процес (задача) і потік (нитка).

Багатозадачність (англ. multitasking) - властивість операційної системи або середовища програмування забезпечувати можливість паралельної (або псевдопаралельною) обробки декількох процесів. На комп'ютерах із одним одноядерним процесором одночасно може виконуватись лише одна задача, тому багатозадачність організовується через розподілення часу виконання задачі на процесорі.
Під процесом розуміється виконання програми в цілому (WinWord, Excel, Visual C і т.д.) Потоками у свою чергу є частини процесу, що виконуються паралельно.

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

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

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

Компонент (англ. component, нім. Komponente f) - різновид, складова частина чогось.
Стати́стика - наука, що вивчає методи кількісного охоплення і дослідження масових, зокрема суспільних, явищ і процесів. А також власне кількісний облік масових явищ. Зокрема, облік у будь-якій галузі господарства, суспільного життя, що здійснюється методами цієї науки, а також дані цього обліку.
Ідентифіка́тор (identifier) - 1. Ознака, яка служить для ідентифікації особи чи предмета, що розпізнається. // Захисна ознака для встановлення справжності банкноти чи цінного папера.
Структура даних В програмуванні та комп'ютерних науках структу́ри да́них - це способи організації даних в комп'ютерах. Часто разом зі структурою даних пов'язується і специфічний перелік операцій, що можуть бути виконаними над даними, організованими в таку структуру.
;

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

Користува́ння - добування з речей їхніх корисних властивостей (наприклад, збирати врожай, вживати продукти харчування, носити одяг і взуття). Одна з трьох класичних правомочностей власника (нарівні з володінням і розпорядженням).

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

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

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

Пра́ця - цілеспрямована діяльність людей зі створення матеріальних і духовних благ, необхідних для задоволення потреб кожного індивіда і суспільства в цілому.

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

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

Монопо́лія (від грецьких слів «mono» - один, «poleo» - продаю) - виключне право (виробництва, торгівлі, промислу тощо), що належить одній особі, групі осіб чи державі.
А с другої сторони, просто недопустимо, щоб потоки безконтрольно користувались ресурсами. Інакше може статися так, що один потік пише в блок пам‘яті, з якого інший щось зчитує.

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

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

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

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

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


Найбільш простим механізмом синхронізації є використання Interlocked-функцій.
Механі́зм (грец. μηχανή mechané - машина) - система тіл, що призначена для перетворення руху одного або декількох тіл у потрібний рух інших тіл. Механізм складає основу більшості машин і застосовується в різноманітних технічних об'єктах.
Використання цих функцій гарантує “атомарне” виконання потрібних операцій, тобто потоки не будуть заважати один одному.
Підпрограма (англ. subroutine) - частина програми, яка реалізує певний алгоритм і дозволяє звернення до неї з різних частин загальної (головної) програми. В термінах мов програмування: функції (С), процедури (Pascal), методи (в термінології об'єктно-орієнтованого програмування в мовах C++, Java, С# та ін.).

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


// 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);

return(0); }

DWORD WINAPI ThreadFunc2(PVOID pvPararr) {

InterlockedExchangeAdd(&g_x, 1);

return(0); }

Тут вже можна бути впевненим, що значення g_x=2.


Розглянемо ці функції більш детально

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

LONG InterlockedIncrement (LPLONG lpAddend) - збільшує значення за адресою lpAddend на одиницю;

LONG InterlockedDecrement (LPLONG lpAddend) - зменшує значення за адресою lpAddend на одиницю;

LONG InterlockedExchange (LPLONG Target, LONG Value) - заміняє значення, що знаходиться за адресою Target, на значення, передане в параметрі Value;

LONG InterlockedExchangeAdd (PLONG Addend, LONG Increment) - додає до значення за адресою Addend значення Increment;

PVOID InterlockedCompareExchange (PVOID *Destination, PVOID Exchange, PVOID Comperand) - порівнює значення за адресою Destination зі значенням, переданим у параметрі Comperand, і якщо ці значення рівні, то за адресою Destination міститься значення, передане в параметрі Exchange.

Іншими словами, якщо в тексті програми є загальна змінна, те її зміна повинна вироблятися в такий спосіб:


{ long Val;

....


Val ; // неправильно

InterlockedIncrement(&Val); // правильно

...

}

Усі спроби зробити щось, що вимагає моментальної реакції на зовнішні події, у середовищі Windows 3.x приводили до більш ніж скромних результатів, тому що подібні програми здобували відносно стандартизований, але неповороткий графічний інтерфейс, і більше нічого. Windows 95 у принципі дозволяє розробляти критичне вчасно реакції ПО типу систем керування.

Результат, пі́дсумок, (заст. ску́ток, вислід) - кінцевий наслідок послідовності дій. Можливі результати містять перевагу, незручність, вигоду, збитки, цінність і перемогу. Результат є етапом діяльності, коли визначено наявність переходу якості в кількість і кількості в якість.
Стандартиза́ція - діяльність, що полягає в установленні положень для загального та неодноразового використання щодо наявних чи потенційних завдань і спрямована на досягнення оптимального ступеня впорядкованості в певній сфері.
Система керування Система керування, також Система управління (англ. control system) - систематизований набір засобів впливу на підконтрольний об'єкт для досягнення цим об'єктом певної мети. Об'єктом системи керування можуть бути як технічні об'єкти так і люди.



Цей метод хороший для дуже простих речей, для більш складної синхронізації він не допоможе. На щастя у Windows передбачено п'ять стандартних механізмів для синхронізації процесів і потоків:

семафор

критична секція

м’ютекс


подія

таймер


Розглянемо кожний з цих механізмів.
Критична секція

Критична секція - це частина коду, доступ до якого тепер має тільки один потік. Інший потік може звернутися до критичного розділу, тільки коли перший вийде з нього.

Для роботи з критичними секціями використовуються наступні функції:

VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - ініціалізація синхронізатора типу критичний розділ.

Критика - розгляд якогось явища, предмета, особи; його аналіз та оцінка згідно з існуючими нормами, масштабами, цінностями.[Джерело?] Аналіз і оцінка когось чи чогось із метою виявлення та усунення вад, хиб.
Критична секція (англ. critical section) - об'єкт синхронізації нитей у Windows, що дозволяє запобігти одночасному виконанню деякого критичного набору операцій (зазвичай пов'язаних з доступом до даних) кількома нитями.

lpCriticalSection - покажчик на змінну типу CRITICAL_SECTION.

VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - запит на вхід у критичну секцію(розділ)

lpCriticalSection - покажчик на змінну типу CRITICAL_SECTION.

VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - вихід із критичного розділу (звільнення семафора).

lpCriticalSection - покажчик на змінну типу CRITICAL_SECTION.

VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) - видалення критичного розділу (звичайно при виході з програми).

lpCriticalSection - покажчик на змінну типу CRITICAL_SECTION.

Отже, для створення критичного розділу необхідно ініціалізувати структуру CRITICAL_SECTION. Що Windows у цій структурі зберігає, нас не стосується - важливо, що покажчик на цю структуру ідентифікує наш

  1   2   3


Скачати 271.89 Kb.