Повільний системний виклик - це щось на зразок зчитування TCP-сокета () - якщо у вас немає O_ASYNC (або будь-якого іншого), він може чекати назавжди.
Швидкий системний виклик - це щось на зразок gettimeofday () або getpid (), обидва вони повертають інформацію до процесу, який ядро одразу доступне.
Читання диска потрапляє до категорії повільних системних дзвінків. Якщо процес читає () на справжньому файлі диска, дескрипторі файлу, ядро, можливо, доведеться читати в одному або декількох блоках дисків, щоб задовольнити прочитане. Залежно від структури дискової файлової системи, що лежить в основі, це може означати зчитування диска-inode для отримання номера блоку диска "непрямого блоку", зчитування непрямого блоку для отримання блоку даних, а потім зчитування самого блоку даних . Досить забирає багато часу, принаймні, з точки зору циклу процесора на доступ до диска, ймовірно, сьогодні гірше, ніж це було в «Добрі старі дні».
Я цього не бачив у віках, але "нижня половина" старого коду драйвера пристрою диска Unix блокувала б сигнали / переривання, щоб було легше підтримувати цілісність файлової системи на диску. Іноді помилковий драйвер або несправний диск ніколи не доставлятиме блок дисків, про який вимагав процес, і процес спав назавжди. Навіть вбивство -9 нічого не зробило.