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

IO读写原理与IO模型

发布网友 发布时间:2022-10-09 06:45

我来回答

1个回答

热心网友 时间:2023-12-15 01:15

为了保护操作系统安全,操作系统按照特权等级将将虚拟空间划分为两个部分,内核空间与用户空间。内核空间(Ring 0)是操作系统内核访问的区域,具有最高权限,可以直接访问所有资源。用户空间(Ring 3)是普通应用程序可访问的内存区域,只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。只能访问用户空间也就是运行在Ring 3上的程序我们称为用户程序,而运行在Ring 0上的程序我们称为内核程序。

用户程序不能访问内核空间,如果想要调用内核程序进行IO操作,必须从用户态切换为内核态,等到内核处理完之后再切换为用户态。

用户程序进行IO操作时需要进行两次状态切换:用户态->内核态->用户态,具体流程如下:

用户程序每进行一次系统调用都会进行两次状态切换,频繁的状态切换会影响程序运行效率,缓冲区的作用就是为了减少系统调用。缓冲区分为两种:内核缓冲区与用户缓冲区:

用户程序进行IO读写操作会发起系统调用,操作系统内核将磁盘数据读取到内核缓冲区,然后从内核缓冲区拷贝到用户缓冲区,流程如下:

举例来说,如果要读取一个文件并通过网络发送它,传统方式下每个读/写周期都需要复制两次数据和切换两次上下文,而数据的复制都需要依靠CPU。通过零复制技术完成相同的操作,上下文切换减少到两次,并且不需要CPU复制数据。

不使用零拷贝

不适用零拷贝需要经历四次数据拷贝+三次状态切换

mmap + write

mmap + write方式减少了一次CPU拷贝

sendfile

sendfile方式不涉及CPU拷贝

在讲解IO模型前,先了解下几个概念:阻塞与非阻塞、同步与异步:

阻塞IO

用户进程发起系统调用,如果数据还未准备完成,用户进程一直等待,直到数据准备完成,从内核缓冲区拷贝到用户缓冲区才返回成功提示,此次IO操作,称之为阻塞IO。缺点:如果数据没有准备好,则用户进程一直处于阻塞状态,如果想要同时处理很多请求,则需要为每个请求分配线程进行处理,系统开销较大。

非阻塞IO

用户进程发起系统调用,如果数据还未准备好,立刻返回状态标识,用户进程后续可以通过轮询的方式查看结果。缺点:虽然用户进程不阻塞了,但需要频繁的轮询获取结果,这样会导致频繁的系统调用,消耗大量的CPU资源。

IO多路复用

将IO事件注册到IO多路复用器(select/poll/epoll)上,select调用进程将一直阻塞直至注册在其上的任意一个IO时间数据准备完成时,才会返回。

信号驱动IO

用户进程发起系统调用,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。

异步IO

用户进程发起系统调用后直接返回,等到处理完成,主动通知进程结果。

对本文做个回顾:

用户进程运行在用户空间,只能访问受限资源,如果需要访问磁盘等硬件设备需要发起系统调用,从用户态切换为用户态;

为了减少频繁的系统调用,降低CPU消耗,讲解了内核缓冲区与用户缓冲区的作用;

IO读写流程,需要经历两次状态切换与两次数据拷贝;

零拷贝原理;

阻塞与非阻塞、同步与异步概念,四种同步IO模型,一种异步IO模型。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么追求单亲家庭的女孩子 怎么追一个单亲家庭的女孩子 为什么英雄联盟闪退 求帮助谢谢? win7电脑开lol就崩win764位系统为什么我的电脑一玩lol就闪退 windows7LOL win7闪退怎么办 选完区后闪退解决办法 win7英雄联盟为什么闪退_win7英雄联盟闪退解决办法 微信收款码刚寄过来还没激活,微信就被同行举报封掉了,收款二维码还有用... 平行四边形的面积公式用字母表示是__ win7电源设置在哪里 win7电源设置怎么设置 伤心英语单词是什么 锦州的商场 香港哪里有卖花旗牌海参 山东圣海集团公司怎么样? 老是想着自己有病,不想工作这样是不是精神有问题了? 惰性造句-用惰性造句 求传奇天下表情包最热资源嘛,高清免费谢谢!! 丘壑造句-用丘壑造句 地铁跑酷牛津版内置菜单破解版怎么下载 辛酸造句-用辛酸造句 学校开展安全生产月主题班会活动方案(两篇) 打除草剂多久可以种菜(除草剂用后多久能种植) 车身稳定控制系统怎么看是开了还是关了? 笑傲江湖ol恒山堆什么技能最好 外地人在威海买的房子,请问威海装修几月份比较好?有什么需要注意的问题吗? 威海高区装修100平米的房子要多少钱? 打杂造句-用打杂造句 在学校经常有人管我叫大哥,我一近班就有人叫大哥好,虽然我不是什么大哥,大哥是什么含义? 男生向你鞠躬说大哥好什么意思? 山东寿光的进来,请问从羊口镇到海边怎么去? 正方形的周长等于它边长的什么 香港夺金牌为什么升紫荆花旗而不是国旗? 清明果的花边怎么捏好看 清明果有什么形状 我想养一只猫咪,养猫咪要注意什么 服务器常见I/O模型 库拉索芦荟生长在哪里,库拉索芦荟的养殖方法 盆栽 潍坊森瑞黑山羊养殖有限公司怎么样? 锦州有哪些商场。卖珠宝的 马蹄莲发芽后基本不长 汽车蓝牙钥匙怎么用 有什么方法 湖南省长沙市岳麓区含浦镇的邮政编码是多少? 编导手记丨化屋村:悬崖之下 苗歌悠扬 寿光市羊口镇和台头镇各村赶集的时间是多少啊? 编导手记丨黄岗村:千年侗寨 踏歌而行 一切皆是映射:浅谈操作系统内核的缺页异常(Page Fault) 旧瓷砖做美缝怎么开缝 瓷砖保养技巧有哪些 编导手记|茶坑村:岭南人家 陈皮飘香 膝盖摔紫了怎么才能快速好 “toshiya"是什么意思啊??? 马蹄莲出芽后怎么不长叶子 幼儿园小故事(适合在幼儿园讲的故事)