在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Linux的I/O子系统知识点有哪些

127次阅读
没有评论

共计 2057 个字符,预计需要花费 6 分钟才能阅读完成。

这篇“Linux 的 I / O 子系统知识点有哪些”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux 的 I / O 子系统知识点有哪些”文章吧。

I/O write 

I/O read:

 read 系统调用的处理分为用户空间和内核空间处理两部分。其中,用户空间处理只是通过 0x80 中断陷入内核,接着调用其中断服务例程,即 sys_read 以进入内核处理流程。

对于 read 系统调用在内核的处理,如上图所述,经过了 VFS、具体文件系统,如 ext2、页高速缓冲存层、通用块层、IO 调度层、设备驱动层、和设备层。其中,VFS 主要是用来屏蔽下层具体文件系统操作的差异,对上提供一个统一接口,正是因为有了这个层次,所以可以把设备抽象成文件。具体文件系统,则定义了自己的块大小、操作集合等。引入 cache 层的目的,是为了提高 IO 效率。它缓存了磁盘上的部分数据,当请求到达时,如果在 cache 中存在该数据且是最新的,则直接将其传递给用户程序,免除了对底层磁盘的操作。通用块层的主要工作是,接收上层发出的磁盘请求,并最终发出 IO 请求(BIO)。IO 调度层则试图根据设置好的调度算法对通用块层的 bio 请求合并和排序,回调驱动层提供的请求处理函数,以处理具体的 IO 请求。驱动层的驱动程序对应具体的物理设备,它从上层取出 IO 请求,并根据该 IO 请求中指定的信息,通过向具体块设备的设备控制器发送命令的方式,来操纵设备传输数据。设备层都是具体的物理设备。

VFS 层:

内核函数 sys_read 是 read 系统调用在该层的入口点。

它根据文件 fd 指定的索引,从当前进程描述符中取出相应的 file 对象,并调用 vfs_read 执行文件读取操作。

vfs_read 会调用与具体文件相关的 read 函数执行读取操作,file- f_op.read。

然后,VFS 将控制权交给了 ext2 文件系统。(ext2 在此作为示例,进行解析)

Ext2 文件系统层的处理

通过 ext2_file_operations 结构知道,上述函数最终会调用到 do_sync_read 函数,它是系统通用的读取函数。所以说,do_sync_read 才是 ext2 层的真实入口。

该层入口函数 do_sync_read 调用函数 generic_file_aio_read,后者判断本次读请求的访问方式,如果是直接 io(filp- f_flags 被设置了 O_DIRECT 标志,即不经过 cache)的方式,则调用 generic_file_direct_IO 函数;如果是 page cache 的方式,则调用 do_generic_file_read 函数。它会判断该页是否在页高速缓存,如果是,直接将数据拷贝到用户空间。如果不在,则调用 page_cache_sync_readahead 函数执行预读(检查是否可以预读),它会调用 mpage_readpages。如果仍然未能命中(可能不允许预读或者其它原因),则直接跳转 readpage,执行 mpage_readpage,从磁盘读取数据。

在 mpage_readpages(一次读多个页) 中,它会将连续的磁盘块放入同一个 BIO,并延缓 BIO 的提交,直到出现不连续的块,则直接提交 BIO,再继续处理,以构造另外的 BIO。

文件的 page cache 结构

图 5 显示了一个文件的 page cache 结构。文件被分割为一个个以 page 大小为单元的数据块, 这些数据块(页)被组织成一个多叉树(称为 radix 树)。树中所有叶子节点为一个个页帧结构(struct page),表示了用于缓存该文件的每一个页。在叶子层最左端的第一个页保存着该文件的前 4096 个字节(如果页的大小为 4096 字节),接下来的页保存着文件第二个 4096 个字节,依次类推。树中的所有中间节点为组织节点,指示某一地址上的数据所在的页。此树的层次可以从 0 层到 6 层,所支持的文件大小从 0 字节到 16 T 个字节。树的根节点指针可以从和文件相关的 address_space 对象(该对象保存在和文件关联的 inode 对象中)中取得。

mpage 处理机制就是 page cache 层要处理的问题。

通用块层

在缓存层处理末尾,执行 mpage_submit_bio 之后,会调用 generic_make_request 函数。这是通用块层的入口函数。

它将 bio 传送到 IO 调度层进行处理。

IO 调度层

对 bio 进行合并、排序,以提高 IO 效率。然后,调用设备驱动层的回调函数,request_fn,转到设备驱动层处理。

设备驱动层

request 函数对请求队列中每个 bio 进行分别处理,根据 bio 中的信息向磁盘控制器发送命令。处理完成后,调用完成函数 end_bio 以通知上层完成。

块设备驱动

以上就是关于“Linux 的 I / O 子系统知识点有哪些”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2057字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 少妇高潮流白浆在线观看 | 国产精品视频一区二区三区四 | 一二三四在线播放视频国语观看 | 无码av波多野结衣久久 | 亚洲美女激情视频 | 精品国产1000部91麻豆 | 亚洲入口无毒网址你懂的 | 午夜福利在线永久视频 | 中文国产成人精品久久久 | 午夜激情网站 | 亚洲成av人片在线播放无码 | 国内亚州视频在线观看 | 久久日本精品一区二区免费 | 久久精品人人做人人爽 | 五月亭亭免费高清在线 | 一区二区不卡在线观看 | 女人寂寞偷人视频a级 | 思99re久久这里只有精品首页 | 无码专区天天躁天天躁在线 | 色婷婷成人 | 久久国产成人亚洲精品影院老金 | 中文人妻熟妇乱又伦精品 | 伊人久久综合精品无码av专区 | 国产亚洲色婷婷久久99精品 | 女人高潮抽搐喷液30分钟视频 | 老司机免费在线观看视频 | 亚洲免费大片 | 日韩欧美不卡 | 日韩欧美中文字幕在线播放 | 亚洲性夜色噜噜噜在线观看不卡 | 日韩一区二区三区四区区区 | 麻豆黄色仓库 | 中文字幕乱妇无码av在线 | 18禁无码永久免费无限制网站 | 色综合久久88色综合天天 | 九九视频只有精品 | 久久爱噜噜噜噜久久久网 | 一区二区三区内射美女毛片 | 国产在线19禁在线观看 | 麻豆网站 | 亚洲国产精品无码久久 |