Медленный системный вызов - это что-то вроде TCP-сокета read () - если у вас не установлен O_ASYNC (или что-то еще), он может ждать вечно.
Быстрый системный вызов - это что-то вроде gettimeofday () или getpid (), которые возвращают информацию процессу, который ядро сразу же доступно.
Дисковые чтения попадают в категорию медленных системных вызовов. Если процесс выполняет read () для истинного файла на диске, дескриптора файла, ядру, возможно, придется прочитать один или несколько дисковых блоков, чтобы удовлетворить чтение. В зависимости от структуры файловой системы на диске, это может означать чтение in-disk-inode для получения номера блока диска «косвенного блока», чтение косвенного блока для получения блока данных и последующее чтение самого блока данных. , Довольно много времени, по крайней мере, с точки зрения циклов ЦП на доступ к диску, вероятно, хуже сегодня, чем в старые добрые времена.
Я не видел этого годами, но «нижняя половина» старого кода драйвера дискового устройства Unix блокировала сигналы / прерывания, чтобы было проще поддерживать целостность файловой системы на диске. Иногда, глючный драйвер или сбойный диск никогда не доставят дисковый блок, о котором просил процесс, и процесс спит вечно. Даже убийство -9 ничего не сделало.