Una llamada lenta al sistema es algo así como un socket TCP read (): si no tiene O_ASYNC (o lo que sea) configurado, puede esperar para siempre.
Una llamada rápida al sistema es algo así como gettimeofday () o getpid (), los cuales devuelven información al proceso que el núcleo tiene disponible de inmediato.
Las lecturas de disco pertenecen a la categoría de llamadas lentas al sistema. Si un proceso hace una lectura () en un archivo de disco verdadero, un descriptor de archivo, el núcleo puede tener que leer en uno o más bloques de disco para satisfacer la lectura. Dependiendo de la estructura en disco del sistema de archivos subyacente, esto puede significar leer el inodo en disco para obtener el número de bloque de disco de un "bloque indirecto", leer el bloque indirecto para obtener el bloque de datos y luego leer el bloque de datos en sí . Bastante lento, al menos en términos de ciclos de CPU por acceso al disco, probablemente peor hoy que en los viejos tiempos.
No he visto esto en años, pero la "mitad inferior" del antiguo código de controlador de dispositivo de la unidad de disco Unix bloquearía las señales / interrupciones para que fuera más fácil mantener la integridad del sistema de archivos en el disco. Ocasionalmente, un controlador defectuoso o un disco defectuoso nunca entregarían el bloque de disco que un proceso había solicitado, y el proceso durmió para siempre. Incluso un kill -9 no le hizo nada.