Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Планування потоків у ядрі

Реалізація планування у Windows ХР

Програмний інтерфейс планування

 

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

Для зміни базового пріоритету процесу використовують виклик setpriority(): linclude <sys/resource.h>

int setpriority(int which, int who. int priority);

Зокрема, параметр which може набувати значення PRI0PR0CESS або PRIOUSER, відповідно показуючи, що параметр who буде інтерпретований як ідентифікатор процесу чи ідентифікатор користувача. У першому випадку задають пріоритет для конкретного процесу (або для поточного процесу, якщо who дорівнює нулю), у другому — для всіх процесів цього користувача.

Параметр priority задає новий пріоритет. Пріоритет може варіюватися в ме­жах від -20 до 20, менші значення свідчать про вищий пріоритет. Значенням за замовчуванням є 0. Негативні значення priority можуть задавати лише користу­вачі з правами адміністратора.

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

int getpriority(int which, int who):

Цей виклик повертає значення пріоритету, параметри which і who для нього ма­ють той самий зміст, що й для функції setpriorityO. Розглянемо приклад використання цих викликів:

// задати пріоритет для поточного процесу

setpriority(PRI0_PR0CESS. 0. 10):

// довідатися про поточне значення пріоритету

printf ("поточний пріоритет: Sd\n". getpriогіty(PRI0PR0CESS. 0));

Для відносної зміни базового пріоритету поточного процесу можна також ви­користати системний виклик пісеО: finclude <unistd.h>

int nicetint inc): // змінює пріоритет поточного процесу на іпс

 

 

Ядро Windows ХР розв'язує під час планування дві основні задачі:

♦ облік відносних пріоритетів, присвоєних кожному потокові;

♦ мінімізацію часу відгуку інтерактивних застосувань.

Базовою одиницею планування є потік. Під час планування ядро не розрізняє потоки різних процесів, воно має справу з пріоритетами потоків, готових до вико­нання в певний момент часу.

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

 

Пріоритети потоків і процесів

Для визначення порядку виконання потоків диспетчер ядра використовує систе­му пріоритетів. Кожному потокові присвоюють пріоритет, заданий числом у діа­пазоні від 1 до 31 (що більше число, то вище пріоритет). Пріоритети реального часу — 16-31; їх резервує система для дій, час виконання яких є критичним чин­ником. Динамічні пріоритети — 1 15; вони можуть бути присвоєні потокам за­стосувань користувача.

Ядро системи може надати потоку будь-який динамічний пріоритет. Win32 АРІ не дає можливості зробити це з цілковитою точністю, у ньому використову­ють дворівневу систему, яка зачіпає як процес, так і його потоки: спочатку проце­су присвоюють клас пріоритету, а потім потокам цього процесу - відносний пріоритет, який відраховують від класу пріоритету процесу (називаного ще базо­вим пріоритетом). Під час виконання відносний пріоритет може змінюватися.

Розрізняють такі класи пріортчяу процесів: реального часу (real-time, приблиз­но відповідає пріоритету потоку 24); високий (high, 13); нормальний (normal, 8); невикористовуваний (idle, 4).

Відносні пріоритети потоку бувають такі: найвищий (+2 до базового); вище за нормальний (+1 до базового); нормальний (дорівнює базовому); нижче за нор­мальний (-1 від базового); найнижчий (2 від базового).

Є два додаткових модифікатори відносного пріоритету: критичний за часом (time-critical) і невикористовуваний (idle). Перший модифікатор тимчасово за­дає для потоку пріоритет 15 (найвищий динамічний пріоритет), другий аналогіч­ним чином задає пріоритет 1.

Особливості задання кванта часу

Важливою характеристикою системи є довжина кванта часу. Розрізняють короткі й довгі кванти, для яких можна задати змінну та фіксовану довжину.

У Windows ХР інтерактивно можна задавати таку довжину кванта (вибира­ють Settings (Параметрьі) у групі Performance (Бьістродействие) на вкладці Advanced (Дополнительно) вікна властивостей My Computer (Свойства системи)):

♦ короткі кванти змінної довжини (вкладка Advanced (Дополнительно), переми­кач Programs (Программ) у групі властивостей Processor Scheduling (Распределе-ние времени процесора)). Можлива довжина кванта — 10 або ЗО мс, при цьому застосування, з яким починає і працювати користувач, автоматично переходить до використання довших квантів. Ця установка надає перевагу інтерактивним процесам;

♦ довгі кванти фіксованої довжини (вкладка Advanced (Дополнительно), переми­кач Background services (Служб, работающих в фоновом режиме) у групі властиво­стей Processor Scheduling (Распределение времени процесора)). Довжина кванта фіксована й дорівнює 120 мс. Ця установка надає перевагу фоновим процесам.

Пошук потоку для виконання

Для виконання новий потік вибирається, коли:

♦ минув квант часу для потоку (з використанням алгоритму пошуку готового потоку);

♦ потік перейшов у стан очікування події (потік сам віддає квант часу і дає ко­манду планувальникові запустити алгоритм пошуку готового потоку);

♦ потік перейшов у стан готовності до виконання (використовують алгоритм розміщення готового потоку).

Планувальник підтримує спеціальну структуру даних - список готових пото­ків (dispatcher ready list). У цьому списку зберігається 31 елемент — по одному для кожного рівня пріоритету. З кожним елементом пов'язана черга готових по­токів, всі потоки з однаковим пріоритетом перебувають у черзі, яка відповідає їх­ньому рівню пріоритету.

Під час виконання алгоритму пошуку готового потоку планувальник перегля­дає всі черги потоків, починаючи з черги найвищого пріоритету (31). Як тільки під час цього перегляду трапляється потік, його відразу вибирають для виконання. За допомогою цього алгоритму вибирають перший потік непустої черги з найви­щим пріоритетом. Можна сказати, що в межах однієї черги використовують алго­ритм кругового планування, якщо не враховувати динамічну корекцію пріорите­тів, яку ми розглянемо далі.

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

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

♦ потік перейшов у стан очікування;

♦ минув квант часу потоку;

♦ потік із вищим пріоритетом перейшов у стан готовності до виконання;

♦ змінився пріоритет потоку або пріоритет іншого потоку. Динамічна зміна пріоритету і кванта часу

Під час виконання потоків динамічний пріоритет і довжина кванта часу можуть бути скориговані ядром системи. Розрізняють два види такої динамічної зміни: підтримка (boosting) і ослаблення (decay).

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

♦ Під час завершення операції введення-виведення підвищення пріоритету залежить від типу операції. Наприклад, після виконання дискових операцій пріоритет збільшують на одиницю, після введення із клавіатури або обробки події від миші на 6.

♦ Під час зміни стану синхронізаційного об'єкта (докладніше такі об'єкти бу­дуть розглянуті пізніше) пріоритет потоку, який очікує цієї зміни, збільшують на одиницю.

♦ Вихід з будь-якого стану очікування для потоків інтерактивних застосувань призводить до підвищення пріоритету на 2, таке саме підвищення відбувається під час переходу в стан готовності потоків, пов'язаних із відображенням інтер­фейсу користувача.

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

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

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

Ще одним видом підтримки є зміна кванта часу для інтерактивних застосу­вань. Якщо під час налаштування системи задано використання квантів змінної довжини, можна вказати, що для інтерактивних застосувань довжина кванта бу­де збільшуватися (це називають підтримкою кванта для інтерактивних застосу­вань). Якщо така підтримка задана, то коли інтерактивне застосування захоплює фокус, всі його потоки отримують квант часу, який дорівнює значенню підтрим­ки (дозволене одне з можливих значень кванта, наприклад, 40 або 60 мс).

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

Для потоків із пріоритетом реального часу динамічна зміна пріоритету або довжини кванта ніколи не відбувається. Єдиний спосіб змінити пріоритет таких потоків — викликати відповідну функцію із прикладної програми.

 

Запобігання голодуванню

Якщо в системі постійно є потоки з високим пріоритетом, може виникати голоду­вання потоків, пріоритет яких нижчий. Для того щоб уникнути голодування, спеці­альний потік ядра один раз за секунду обходить чергу готових потоків у пошуках тих, які перебували у стані готовності досить довго (понад 3 с) і жодного разу не отримали шансу на виконання. Коли такий потік знайдено, то йому присвоюють пріоритет 15 (і він дістає змогу негайного виконання); крім того, довжину його кванта часу подвоюють. Після того, як два кванти часу минають, пріоритет пото­ку і його квант повертаються до вихідних значень.

Цей алгоритм не враховує причин голодування і не розрізняє потоків інтерак­тивних і фонових процесів.

 

 


Читайте також:

  1. Абстрактна модель оптимального планування виробництва
  2. Алгоритм планування податкових платежів. Вибір оптимального варіанту оподаткування та сплати податків.
  3. Аналіз руху та ефективності формування грошових потоків
  4. Аналіз та планування витрат організації на професійне навчання персоналу
  5. Бар’єри стратегічного планування та заходи щодо їх подолання
  6. Бізнес-план як один із головних інструментів редакційного планування
  7. Бізнес-планування
  8. Бізнес-планування інвестиційного проекту. Розробка планів фінансового проекту
  9. Бізнес-планування, його суть та призначення
  10. Бюджетне планування
  11. Бюджетне планування та прогнозування.
  12. Бюджетне планування.




Переглядів: 1862

<== попередня сторінка | наступна сторінка ==>
Сучасні підходи до реалізації планування | Структури даних процесу

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.017 сек.