问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux 中的read系统调用到底是阻塞还是非阻

发布网友 发布时间:2022-04-23 18:18

我来回答

1个回答

热心网友 时间:2023-10-12 16:08

所谓阻塞,即当内核发现请求条件不满足时(可能需要产生IO)将调用进程挂起,让出CPU给需要的进程执行,提高效率,调用者进程被阻塞至条件满足时再被唤醒。
我们来深入跟踪read/write系统调用,因为Linux内核中对文件的读写采用了缓存,文件数据按照页面(默认大小为4096字节)为单位缓存在内存中,对于read系统调用,内核会根据应用程序发出的读偏移在缓存中查找所读位置对应的缓存页面是否存在,如果存在,那么万事大吉,只需将数据从缓存页面copy至用户缓冲区即可,但如果此页面尚未被缓存,那么没有别的办法,只能从磁盘上读出该页面数据并缓存在内存中,所谓的读过程,其实文件系统所需做的只是锁定页面,然后构造一个读请求,并将请求发送给底层的IO子系统即可。文件系统发送完请求并不代表该页面已经从磁盘中读出,如果此时read系统调用返回,那就意味着该调用是非阻塞,不等IO完成即返回至调用者,但阅读内核代码发现,文件系统在发送完IO请求后并不立即返回,而是在接下来的流程中去尝试锁定该读页面,因为在前面文件系统发IO请求时页面已经被锁定,因此,如果页面尚未被读出的话,此时锁定的话必然会阻塞,至此,我们就清楚了Linux内核中的read系统调用默认实现是阻塞方式。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 杭州东站到濮院最晚的一班车是几点? linux中read,write和recv,send的区别 微信中@是什么意思? 如何使用linux read命令 linux 中 read 命令是什么意思 没三十怎么贴对联 贴对联时没地方贴横批怎么办? 初七可以贴春联,大年三十忙着接亲戚,以致忘了贴春联,明天初七可以贴吗? 三十忘贴对联后,正月初几可以贴对联吗? 春联怎么贴,以前学过,现在忘记了 三十忘记贴对联了出一能贴吗 今天都初五了由于去老人家过年自己房子忘贴对联了,都买好了今天能贴上吗?过了三十还能贴吗? 今年过春节忘贴对联有啥说发吗? 2020除夕之前没有贴春联怎么办? 老公的奶奶2020年去世了我一下忘了把对联贴上了那现在初二了要不要把对联撕下?_百度问一问 三十早上忘记贴春联了怎么办? 问:搬新家太忙后门对联忘记贴了!怎么办?跪求懂的人求指点!谢谢 结婚忘贴对联可以补吗 搬新家忘记贴对联了,后面可以补贴吗 过年忘记贴对联了怎么办立春可补吗? 请问从 杭州萧山机场 到 桐乡濮院 具体怎么走?多谢! 杭走南站和杭州东站哪个离濮院近、怎么走? linux 中$,read分别是什么意思 linux read的第一个参数为什么不使用文件名打开 到杭州下了火车后怎么去濮院! linux read读取问题 杭州萧山机场到嘉兴濮院羊毛衫市场怎么坐车? 关于linux下read函数问题 咨询下linux中read的用法,使用管道 杭州萧山机场到濮大巴车票多少? linux read命令从管道读不到数据的问题 Linux下read函数默认到底是阻塞的还是非阻塞的 Linux中解释read i<f1命令含义? 杭州萧山国际机场到嘉兴市桐乡市濮院镇永联村联越路怎么坐车 gtx660装win7还是win10? linux while中使用read的问题 关于linux里面的read函数 低配置电脑升级WIN10会比WIN7强吗? 杭州到桐乡要几个小时? 这个电脑配置装win7还是win10?