Якщо запущений процес блокується на i / o
Блокування IO - це майже рівнозначно призупиненню процесу. У контексті ядра Linux виконання деяких системних викликів вводу-виводу, таких як read()
, викликає sysenter
обробник або переривання, щоб викликати догляд за цим IO, викликаючи в do_sys_read()
кінцевому рахунку. Тут, якщо поточний запит не може бути задоволений негайно, функція викликає, sched()
яка потім може виконати інший процес.
У контексті кооперативної системи я б очікував, що коли ви робите системний виклик з якоїсь причини IO, якщо запит не може бути задоволений, ядро вибирає інше завдання і виконує це. Цей документ містить деяку інформацію - в основному, якщо ви чекали на IO, ви могли б повічно вішати, чекаючи цього IO. Ідея планування кооперативного планування полягає в тому, що ви часто дзвоните sched()
або еквівалентним методом відмовитися від процесора, якщо ви виконуєте завдання, що вимагають процесора.
Міркування в режимі ядра стають цікавішими. У архітектурах, де вони доступні, такі як певні вбудовані платформи , обробники перерв все ще будуть викликатися у відповідь на апаратні чи програмні переривання. Зазвичай, можливо, для впровадження відключити обробку переривань , але це також має недоліки.