poll_schedule_timeout
poll()
- це системний виклик 1, який використовується для обробки вводу / виводу. Це схоже на select()
. 2
Програми, які використовують неблокуючий ввід / вивід, використовують ці дзвінки, щоб побачити, чи можуть вони читати або записувати у файл, без необхідності блокувати його. Вони часто використовуються для введення / виведення потоків, які можуть не бути заблоковані (інакше, можливо, ваша миша перестане рухатися).
Канал очікування poll_schedule_timeout
вказує на те, що на введення / вивід чекає завдання, або обладнання, наприклад клавіатури та миші, звукові пристрої або навіть мережеві розетки.
- Функція в ядрі
- Вони визначені в
<linux/poll.h>
. poll
була реалізацією, вперше поміченою у System V, select
є еквівалентом BSD UNIX.
futex_wait_queue_me
:
Щоб пояснити це, ми повинні подивитися на Замки. Блокування - це збережений стан у системі, який вказує на те, що завдання працює з ресурсом. Наприклад, може бути лише одне завдання, яке читає файл. Це завдання заблокує файл, будь-яке інше завдання 1, яке намагається прочитати файл, знало б, що він заблокований, і чекати, коли замок відійде, перш ніж він матиме доступ до нього. Те саме відбувається з процесорним часом.
Сучасна версія Linux (у більшості архітектур) використовує блокування Futex (швидкий mutex простору користувачів) у ядрі. Mutex, взаємне виключення, посилається на думку про те, що до загального ресурсу можна отримати доступ лише одним завданням у будь-який час. Для цього встановлюються прапори в системі.
Якщо процес чекає заблокованого ресурсу, це називається зайнятим очікуванням
або "спінінг", посилаючись на той факт, що він намагається отримати доступ до нього знову і знову, поки не зможе. Кажуть, що завдання блокується, коли воно крутиться.
Блокування Futex можна розглядати як число в просторі користувачів, яке може збільшуватися або зменшуватися завданням (у випадках, коли ресурс можна отримати за допомогою декількох завдань, це число може стати більше одиниці). Це число, показане на схемі 4 .
Ці завдання вписуються в чергу очікування , просту чергу завдань, яким потрібно виконати певну роботу, коли час обробки буде доступний, завдання виконують свою роботу і видаляються з черги.
futex_wait_queue_me
задає завдання. Потім він чекає сигналу, тайм-ауту або пробудження. Завдання, які перебувають на цьому каналі очікування , чекають не в черзі очікування, вони чекають, коли їх запустить.
- Завданням може бути або Процес 3, або Нитка 2
- Нитка - це підрозділ Процесу. Багато потоків можуть працювати паралельно
- Процес - це повномасштабна програма, вона складається з однієї або декількох ниток, хоча програма може також складатися з декількох процесів.
- Пам'ятайте, це все ще дуже високий рівень речей, це не враховує деталі реалізації