慢系统调用和快速系统调用有什么区别?我已经了解到,如果进程捕获了一些信号,慢系统调用可能会阻塞,因为捕获的信号可能会唤醒被阻塞的系统调用,但我不能确切地理解这种机制。如有任何例子,将不胜感激。
发布于 2011-06-03 16:11:17
慢系统调用类似于TCP套接字read() --如果您没有设置O_ASYNC (或其他什么),它可以永远等待。
快速系统调用类似于gettimeofday()或getpid(),两者都将信息返回到内核立即可用的进程。
磁盘读取属于慢系统调用的范畴。如果进程对真正的磁盘文件(文件描述符)执行read()操作,内核可能必须在一个或多个磁盘块中读取以满足读取的要求。根据底层文件系统的磁盘结构,这可能意味着读取磁盘上的inode以获取“间接块”的磁盘块号,读取间接块以获取数据块,然后读取数据块本身。非常耗时,至少就每次磁盘访问的CPU周期而言,今天的情况可能比过去好的时候更糟。
我已经很久没有见过这种情况了,但是旧的Unix磁盘驱动器驱动程序代码的“下半部分”会阻止信号/中断,从而更容易维护磁盘文件系统的完整性。偶尔,buggy驱动程序或失败的磁盘将永远不会交付进程所要求的磁盘块,并且进程将永远处于休眠状态。即使是杀了-9也无济于事。
https://unix.stackexchange.com/questions/14293
复制相似问题