文件系统与块设备
来源:互联网 发布:java代码格式化工具 编辑:程序博客网 时间:2024/05/18 03:05
1.高速缓冲区位于VFS与具体文件系统之间。
2.磁盘中文件节点中含有strcut address_space字段,该结构与磁盘文件节点对应
3.一个struct address_space含有一个或多个缓存页,缓存页的组织方式是通过基树组织起来的便于搜索
4.每个缓存页中包含多个缓存块,缓存页的内容在磁盘上不一定连续,但缓冲块中的内容在磁盘上连续
5.每个缓冲块对应一个缓冲区首部的结构体,该结构体中主要包含了缓冲块内容对应磁盘的物理位置,缓冲区首部自形成链表
6.内核首先判断要读写的inode的磁盘块在不在该inode的缓存块中,如果在,直接对其读写,不在,创建新的缓存页和缓存块及缓冲区首部,把他们加入对应的address_space,
如果address_space不存在,为该节点创建address_space(具体怎么判断是否在缓存区需要进一步研究,查缓存区首部链表?)
7.同步刷新磁盘或pdflush周期调度将缓冲区的数据提交个磁盘,提交的手段是通过struct bio,调用submit_bio
8.bio分为两种,实时的和非实时的,实时的直接提交,大部分都是非实时的,要将bio插入到合适的request中,bio包含一个或多个缓存块中的数据,一个request包含一个或
多个bio,request中请求的数据在磁盘上是连续的
9.磁盘上连续的request可能被合并成一个request,磁盘上顺序的request被重新排序(36采用NOP调度算法,只进行合并,不进行排序)
10..排序好的请求被发送给AHCI
待续。。。
一下对几个重要的函数解析:
对文件的读写通过generic_file_write进行,初始化一些数据结构之后,调用__generic_file_aio_write_nolock,其中,实际对缓存页进行读写的函数是
static ssize_t generic_perform_write(struct file *file, struct iov_iter *i, loff_t pos);该函数执行如下:
1.获得该文件节点的address_space,调用块设备文件节点address_space的write_begain方法。该方法主要
- 文件系统与块设备
- 块设备--块设备文件系统
- 文件系统,块设备
- 文件系统之块设备文件
- Linux文件系统与设备文件系统
- 字符设备与块设备
- 块设备与字符设备
- 字符设备与块设备
- 符设备与块设备
- 块设备与字符设备
- 通过losetup虚拟出块设备(文件系统)
- Linux块设备/文件系统/分区查看
- 块设备与软中断
- bio 与块设备驱动
- bio与块设备驱动
- linux文件系统与设备文件系统的关系?
- Linux 文件系统与设备文件系统(3)
- Linux 块设备与字条设备
- Radio 控制日期文本框
- 某电力企业数据备份方案解析
- 常用正则表达式收录【待续】
- 用jquery获取提交了的表单的单选按钮的值呢?
- windows nt 5.0 kernel architecture
- 文件系统与块设备
- 哈工大操作系统实验 6 字符显示的控制
- Oracle 估算数据库大小的方法
- C++中建立对象间消息连接的系统方法
- 月日年中 日的动态添加
- 谜题1.1 基本算术操作符
- java插入排序
- asp.net高级应用之站点导航SiteMapPath控件
- 我曾经得到的一个最好的编程建议