其他分享
首页 > 其他分享> > read/write系统调用过程

read/write系统调用过程

作者:互联网

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