ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

read/write系统调用过程

2022-06-16 09:33:19  阅读:143  来源: 互联网

标签:调用 https read write 具体 IO 请求 设备


X86 系统结构中,所有系统调用都从用户空间中汇聚到 0x80 中断点,同时保存具体的系统调用号。当read系统调用调用发生时,库函数在保存read系统调用号以及参数后,陷入0x80 中断。0x80 中断处理程序将根据系统调用号对不同的系统调用分别处理(调用不同的内核函数处理)。也就是说,陷入 0x80 中断。这时IO库函数工作结束。Read 系统调用在用户空间中的处理也就完成了,后面交给内核处理。

在内核空间中的处理过程


对于read系统调用在内核的处理,如上图所述,经过了VFS、具体文件系统,如ext2、页高速缓冲存层、通用块层、IO调度层、设备驱动层、和设备层。
  1. 其中,VFS主要是用来屏蔽下层具体文件系统操作的差异,对上提供一个统一接口,正是因为有了这个层次,所以可以把设备抽象成文件。具体文件系统(ext4、xfs等),则定义了自己的块大小、操作集合等。

  2. 引入cache层的目的,是为了提高IO效率。它缓存了磁盘上的部分数据,当请求到达时,如果在cache中存在该数据且是最新的,则直接将其传递给用户程序,免除了对底层磁盘的操作。

  3. 通用块层的主要工作是,接收上层发出的磁盘请求,并最终发出IO请求(BIO)。提供了一套具体设备的抽象接口,用来访问多种不同的存储设备的模块接口。

  4. IO调度层则试图根据设置好的调度算法对通用块层的bio请求合并和排序,回调驱动层提供的请求处理函数,以处理具体的IO请求。

  5. 驱动层的驱动程序对应具体的物理设备,它从上层取出IO请求,并根据该IO请求中指定的信息,通过向具体块设备的设备控制器发送命令的方式,来操纵设备传输数据。

  6. 设备层都是具体的物理设备。

ref

https://lwn.net/Articles/736534/
https://www.modb.pro/db/128893
https://zhuanlan.zhihu.com/p/39721251
https://developer.aliyun.com/article/374897
https://bbs.huaweicloud.com/forum/thread-37695-1-1.html
https://spongecaptain.cool/SimpleClearFileIO/1. page cache.html
https://spongecaptain.cool/SimpleClearFileIO/
https://www.cnkirito.moe/file-io-best-practise/

标签:调用,https,read,write,具体,IO,请求,设备
来源: https://www.cnblogs.com/skpupil/p/16363428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有