Блоковані, неблоковані та асинхронні системні виклики

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

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

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

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