首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >慢系统调用和快速系统调用的区别

慢系统调用和快速系统调用的区别
EN

Unix & Linux用户
提问于 2011-06-03 01:51:44
回答 1查看 20.9K关注 0票数 13

慢系统调用和快速系统调用有什么区别?我已经了解到,如果进程捕获了一些信号,慢系统调用可能会阻塞,因为捕获的信号可能会唤醒被阻塞的系统调用,但我不能确切地理解这种机制。如有任何例子,将不胜感激。

EN

回答 1

Unix & Linux用户

发布于 2011-06-03 16:11:17

慢系统调用类似于TCP套接字read() --如果您没有设置O_ASYNC (或其他什么),它可以永远等待。

快速系统调用类似于gettimeofday()或getpid(),两者都将信息返回到内核立即可用的进程。

磁盘读取属于慢系统调用的范畴。如果进程对真正的磁盘文件(文件描述符)执行read()操作,内核可能必须在一个或多个磁盘块中读取以满足读取的要求。根据底层文件系统的磁盘结构,这可能意味着读取磁盘上的inode以获取“间接块”的磁盘块号,读取间接块以获取数据块,然后读取数据块本身。非常耗时,至少就每次磁盘访问的CPU周期而言,今天的情况可能比过去好的时候更糟。

我已经很久没有见过这种情况了,但是旧的Unix磁盘驱动器驱动程序代码的“下半部分”会阻止信号/中断,从而更容易维护磁盘文件系统的完整性。偶尔,buggy驱动程序或失败的磁盘将永远不会交付进程所要求的磁盘块,并且进程将永远处于休眠状态。即使是杀了-9也无济于事。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/14293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档