Нитки

Матеріал з Вікі ЦДУ
Версія від 22:25, 8 січня 2012; Stanislav chigirev (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Нитки

Багатозадачність є найважливішою властивістю ОС. Для підтримки цієї властивості ОС визначає й формує для себе ті внутрішні одиниці роботи, між якими і будуть розділятися ресурси комп'ютера.

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

При мультипрограмуванні підвищується пропускна здатність системи, але окремий процес ніколи не може бути виконаний швидше, ніж якби він виконувався в однопрограмному режимі. Однак задача, розв'язувана в рамках одного процесу, може мати внутрішній паралелізм, що у принципі дозволяє прискорити її вирішення. Для цих цілей сучасні ОС пропонують використовувати порівняно новий механізм багатониттєвої обробки (multithreading). При цьому вводиться нове поняття "нитка" (thread), а поняття "процес" у значній мірі змінює зміст.

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

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

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

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

  • ВИКОНАННЯ,
  • ЧЕКАННЯ,
  • ГОТОВНІСТЬ.

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

  • програмний лічильник,
  • стек,
  • регістри,
  • нитки-нащадки,
  • стан.

Нитки розділяють:

  • адресний простір,
  • глобальні змінні,
  • відкриті файли,
  • таймери,
  • семафори,
  • статистичну інформацію.

Багатониттєва обробка підвищує ефективність роботи системи в порівнянні з багатозадачною обробкою. Широке застосування знаходить багатониттєва обробка в розподілених системах.

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