目录
1.文件系统的读写单位
文件系统的读写单位是块;
块的大小是2的n次方个扇区(每个扇区512字节),可以是1k,2k,4k或者4M等.
2.一个程序发出读写请求到数据的过程
用户通过write系统调用给文件中写数据的时候,
首先与用户态的I/O缓冲区打交道,然后逻辑文件中的写指针就进行了移动,此时真正的写入还没有发送,然后陷
入到内核态,用户态缓冲区中的数据被搬到内核态缓冲区中,这个缓冲区就是page cache,到最后到底是如何把
数据写入磁盘呢?我们继续探究下去.
从Buffer Cache到Page Cache
buffer cache是面向底层块设备的,所以它的力度是文件系统的块.
块设备和系统采用块进行交换,块再转换成磁盘的基本物理结构扇区,扇区和块之间是可以快速转换的,
这就涉及到页高速缓存,随着内核功能的日益强大,块粒度的缓存已经不能满足性能的要求,内核的内存
管理组件采用了比文件系统的块更高级别的抽象-页,页的大小一般是从4KB到2MB,粒度更大,处理的性能
更高,所以缓存组件为了和内存组件更好地交互,创建了也缓存page cache来代替原来的buffer cache.
页面缓存是面向文件,面向内存的.通过一系列的数据结构,比如inode,address_space,page等,将一个文件
映射到页的级别.
通过Page+offset就可以定位到文件的具体位置.
3.描述也缓存的address_space对象
host--每一个所有者可以理解成一个具体的文件,也就是一个inode指向的一个文件,它对应着一个
struct address_space对象;
页高速缓存的多个页可能属于一个所有者,从而可以链接到一个address_space对象,一个页怎么和与
address_space对象产生关联呢?
此时我们就要给出page对象.
通过page对象中的address_space和index这两个字段就可以实现在页高速缓存中进行查找.
4.page对象
5.索引节点,页和也缓存之间的关系
6.如何读取一个文件
7.如何写入文件
8.推荐书与思考问题