Системні виклики для управління планувальником

Операційна система Linux надає сімейство системних викликів для управління параметрами планувальника Ці системні виклики дозволяють маніпулювати пріоритетом процесу, стратегією планування і процесорної привязкою, а також надають механізм, за допомогою якого можна явнопередати процесор (yield)  у використання інших завдань

Існують різні книги, а також дружні сторінки системного керівництва (man pages), які надають інформацію про ці системних викликах (реалізованих у бібліотеці С без особливих інтерфейсних оболонок, а прямим викликом системної функції) У табл 43 наведено список цих функцій з коротким описом Про те, як системні виклики реалізовані в ядрі, розповідається в розділі 5, Системні виклики .

Таблиця 43

sched_get_priority_max () Отримати максимальне значення пріоритету реального часу Eched_get_priority_min () Отримати мінімальне значення пріоритету реального часу sched_rr_get_interva l () Отримати тривалість кванта часу sched_setaffinity () Встановити процесорну привязку

sched_getaffinit y () Отримати процесорну привязку

sched_yiel d () Тимчасово передати процесор інших завдань

Системні виклики, повязані з управлінням стратегією і пріоритетом

Системні виклики sched_setschedule r () і sched_getchedule r () дозволяють відповідно встановити і отримати значення стратегії планування і пріоритету реального часу для зазначеного процесу Реалізація цих функцій, так само як і для більшості інших системних викликів, включає велику кількість різноманітних перевірок, ініціалізацій та очистку значень аргументів Корисна робота включає в себе тільки читання або запис полів polic y і rt_priorit y структури task_struc t зазначеного процесу

Системні виклики sched_setparam () і sched_getparam () дозволяють встановити і отримати значення пріоритету реального часу для зазначеного процесу Остання функція просто повертає значення поля rt_priority, інкапсульоване в спеціальну структуру sched_param Виклики sched_get_priority_max ()

і sched_get_priority__min () повертають відповідно максимальне і мінімальне значення пріоритету реального часу для зазначеної стратегії планування Максимальне значення пріоритету для стратегій планування реального часу дорівнює (MAX_USER_RT_PRIO-1), а мінімальне значення 1

Для звичайних завдань функція nic e () збільшує значення статичного пріоритету викликає процесу на зазначену в аргументі величину Тільки користувач root може вказувати негативні значення, тобто зменшувати значення параметра nice і відповідно збільшувати пріоритет Функція nic e () викликає функцію ядра set_user_nic e (), яка встановлює значення полів static_pri a і pri o структури task_struct

Системні виклики управління процесорної привязкою

Планувальник ОС Linux може забезпечувати жорстку процесорну привязку (processor affinity) Хоча планувальник намагається забезпечувати мяку або природну привязку шляхом утримання процесів на одному і тому ж процесорі, він також дозволяє користувачам сказати: Ці завдання повинні виконуватися тільки на зазначених процесорах незалежно ні від чого. Значення жорсткої привязки зберігається у вигляді бітової маски в поле cpus_allowed структури task_struct Ця бітова маска містить один біт для кожного можливого процесора в системі За замовчуванням всі біти встановлені в значення 1, і тому процес потенційно може виконуватися на всіх процесорах в системі Користувач за допомогою функції sched_setaffinit y () може вказати іншу бітову маску з будь-якою комбінацією встановлених бітів Аналогічно функція sched_getaffinit y () повертає Ткання значення бітової маски cpus_allowed

Ядро забезпечує жорстку привязку дуже простим способом По-перше, тільки що створений процес успадковує маску привязки від батьківського процесу Оскільки батьківський процес виконується на дозволене процесорі, то і породжений процес також буде виконуватися на дозволеному процесорі По-друге, коли привязка процесу змінюється, ядро ​​використовує міграційні потоки (migration threads) для проштовхування завдання на дозволений пессор Отже, процессвсегдавыполняетсятольконатомпроцессоре,которомусроцоответствуе т новлення біт в поле cpus_allowed дескриптора процесу

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*