Реалізація багатозадачності в Windows Vista

Автор работы: Пользователь скрыл имя, 26 Сентября 2013 в 21:57, курсовая работа

Краткое описание

Таким чином, метою даної роботи є розгляд реалізації багатозадачності в Windows Vista. Для досягнення поставленої мети необхідно вирішити наступні завдання:
Висвітлити сутність багатозадачності.
Вивчити модель режиму багатозадачності.
Приділити особливу увагу розгляду реалізації багатозадачності в Windows Vista.
Об'єктом дослідження в даній роботі є операційна система Windows Vista. Предметом дослідження - реалізація багатозадачності в Windows Vista.

Содержание

Вступ 3
Розділ 1. Теоретична частина 4
1.1.Суть багатозадачності 4
1.1.1. Властивості багатозадачного середовища 4
1.1.2.Типи псевдопаралельної багатозадачності 6
1.2. Моделювання режиму багатозадачності 12
1.2.1.Процеси і потоки 12
1.2.2.Стан процесу 15
1.3. Реалізяція багатозадачності в Windows Vista 21
1.3.1.Фундаментальні концепції 21
1.3.2. Реалізація процесів і потоків в Windows Vista 27
1.3.3. Планування 30
Розділ 2. Практична частина 38
Висновки 43
Список використаної літератури 44

Вложенные файлы: 1 файл

Realizatsiya_bagatozadachnosti.docx

— 538.43 Кб (Скачать файл)

Якщо комп'ютер має декілька процесорів, то системи Windows NT/2000 можуть дійсно поєднувати виконання декількох  додатків. Якщо процесор один, то поєднання  залишається ілюзією. Коли закінчується квант часу, відведений поточній програмі, система її перериває, зберігає контекст і віддає управління іншій програмі, яка чекає своєї черги. Величина кванта часу (time slice) залежить від ОС і типу процесора, в Windows NT вона в середньому дорівнює 20 мс. Слід зазначити, що домогтися дійсно одночасного виконання потоків можна тільки на машині з декількома процесорами і лише під управлінням Windows, ядра яких підтримують розподіл потоків між процесорами і процесорного часу між потоками на кожному процесорі. Наприклад, Windows 95 працювала тільки з одним процесором. Навіть якщо у комп'ютера декілька процесорів, під управлінням Windows 95 міг бути задіяний лише один з них, а інші повинні .

 

 

 

 

 

 

 

 

 

1.2. Моделювання режиму багатозадачності

1.2.1.Процеси і потоки

Розрізняють два способи  реалізації багатозадачності:

- Створити один процес, що має кілька потоків виконання  (threads);

- Створити декілька процесів, кожен з яких має один або  декілька потоків виконання.

Багатозадачна (multi-process) система дозволяє двом або більше програмам виконуватися одночасно.

Багатопотокова (multi-threaded) система дозволяє одній програмі виконувати відразу декілька потоків одночасно.

Сучасні операційні системи поєднують в собі обидві ці властивості. Додаток Win32 може складатися з одного або більше процесів. Наприклад, додаток за розрахунком параметрів турбогенератора може складатися з зручної оболонки, написаної на мові C++ (головний процес), і обчислювальних модулів, написаних на мові FORTRAN і запускаються у вигляді окремих (породжених) процесів. При цьому можливий варіант, коли один процес (модуль програми) зайнятий виведенням геометрії розрахункової області, а інший одночасно виробляє розрахунок електромагнітного поля.

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

З кожним процесом система  пов'язує такі ресурси, як: віртуальний  адресний простір; виконані код і  дані; базовий пріоритет; описувачі  об'єктів; змінні оточення.

Кожен процес обов'язково створює  первинний потік (primary thread) виконання. Він робить це автоматично і, якщо програміст не робить якихось спеціальних зусиль по створенню другого потоку, то первинний потік і породивший його процес зазвичай ототожнюються в свідомості користувача, а, часто і в свідомості програміста. Але останній може створити ще один або декілька потоків, які розміщуються в одному і тому ж адресному просторі, що належить процесові. Коли вони створюються, батьківський процес починає виконуватися не послідовно, а паралельно. Так реалізується потокова багатозадачність. Кажуть, що потоки виконуються в контексті процесу.

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

Всі потоки (threads) одного процесу користуються ресурсами породжувача їх процесу. Крім того, кожному потоку система і / або програміст приписує пріоритет виконання і набір структур мови С, що описують контекст потоку. Система використовує їх для запам'ятовування контексту потоку, коли його виконання уривається. У контекст входять:

  • Стан регістрів;
  • Системний стек ядра ОС (kernel stack);
  • Стек користувача розташований в адресному просторі процесу;
  • Блок змінних оточення потоку.

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

Перерахуємо найбільш типові випадки, коли слід застосовувати багатопоточність:

  • Керування вводом в різні документи МШ-інтерфейсу. Введення даних кожного документа додатка організований у вигляді окремого потоку;
  • Управління введенням даних з декількох пристроїв телекомунікації;
  • Розмежування пріоритетів виконання завдань. Потокам, що вимагає високої швидкості реакції, присвоюється високий пріоритет, а іншим потокам більш низький;
  • Зниження часу реакції на дії користувача по вводу даних при одночасному виконанні фонових обчислень.

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

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

 

 

 

 

 

 

 

 

 

 

 

1.2.2.Стан процесу

Будь-який процес у багатозадачній ОС багаторазово відчуває перехід з одного стану в інший.

Основних станів всього три.

  • Робота (running) - в цьому стані знаходиться процес, програму якого в даний момент виконує процесор. Працюючий процес іноді зручно називати також поточним процесом.
  • Готовність (ready) - стан, процес якого може бути переведений в стан роботи, як тільки це визнає потрібним зробити ОС.
  • Блокування або, що те ж саме, сон (sleeping, waiting) - стан, в якому процес не може продовжувати виконання, поки не відбудеться деяка зовнішня по відношенню до процесу подія.

Перші два стани часто  об'єднують поняттям активного стану  процесу.

Для станів готовності і  сну спільне те, що процес не працює. У чому різниця між цими двома  «способами не працювати»?

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

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

Чого він може чекати? Ну, наприклад:

  • Завершення розпочатої операції синхронного вводу / виводу (тобто, наприклад, процес чекає натискання клавіші Enter або закінчення запису на диск);
  • Звільнення запитаного у системи ресурсу (наприклад, додаткової області пам'яті або відкритого файлу);
  • Закінчення заданого інтервалу часу («посплю-но я хвилин десять!») Або досягнення заданого моменту часу («розбудіть мене рівно опівночі!»)     (В обох випадках процес чекає сигналу від запрограмованого таймера);
  • Сигналу на продовження дій від іншого, взаємопов'язаного процесу;
  • Повідомлення від системи про необхідність виконати певні дії (наприклад, перемалювати вміст вікна).

У будь-якому з названих (і багатьох неназваних) випадків має статися деяка подія, джерело якої лежить поза даним процесом.

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

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

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

 

1.2.3. Модель режиму багатозадачності

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

Краще вибудовувати модель на основі імовірнісного погляду  на використання центрального процесора. Припустимо, що процес проводить частину  свого часу p в очікуванні завершення операцій введення-виведення. При одночасній присутності в пам'яті n процесів ймовірність того, що всі n процеси очікують завершення вводу-виводу (в разі чого процесор простоює), дорівнює рn. Тоді час задіяння процесора обчислюється за формулою:

Час задіяння ЦП = 1 - рn.

Рис. 1.2.3.1. Час задіяння ЦП у вигляді функції від кількості процесів

 

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

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

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

Припустимо, наприклад, що пам'ять  комп'ютера становить 512 Мбайт, операційна система займає 128 Мбайт, а кожна  програма користувача також займає до 128 Мбайт. Цей об'єм дозволяє одночасно розмістити в пам'яті три користувацькі програми. При середньому очікуванні введення-виведення в 80% ми маємо завантаженість центрального процесора (якщо ігнорувати витрати на роботу операційної системи), рівну 1 - 0,83, або близько 49%. Збільшення обсягу пам'яті ще на 512 Мбайт дозволить системі перейти від трикратної багатозадачності до семикратної, що підвищить завантаженість центрального процесора до 79%. Іншими словами, додаткові 512 Мбайт пам'яті збільшать його продуктивність на 30%.

Збільшення пам'яті ще на 512 Мбайт підніме рівень продуктивності всього лише з 79 до 91%, тобто додатковий приріст продуктивності складе тільки 12%. Використовуючи цю модель, власники комп'ютерів можуть прийти до висновку, що перше нарощування обсягу пам'яті  стане, на відміну від другого, непоганим  внеском у підвищення продуктивності процесора.

Информация о работе Реалізація багатозадачності в Windows Vista