最近在做文件系统时粗看了下linux和windows对缓存不同的处理,做下笔记
Linux:
linux中提出了虚拟的文件系统vfs和page table以及cache manage的概念
1.vfs负责与应用程序打交道,当应用程序需要数据交换时,其负责从page table中获取cache buf,并建立cache的映射,底层的文件系统(VFS、NTFS、EXT2\3...)只需要同cache打交道即可,从外围设备中读写数据映射到cache。
2.cache manage主要是针对cache buf中cache管理,linux使用了基数树(一种搜索树)来实现cache的快速定位,以及双链表来实现内存的释放。
3.page table主要是管理已叶为单位的内存,使用了body和slub算法,budy算法主要是管理叶,而slub把叶又拆分了很多不同大小的内存提供给应用程序,称为零售商。
Windows:
微软使用内存映射文件来映射文件(磁盘上的物理文件),内存映射文件的三种使用场景
1.载入并运行exe和dll
2.映射磁盘上的数据文件
3.同一台pc机的不同进程共享数据
只针对2说明:
a.当要读写文件时,创建文件内核,目的高速文件映射物理存储器文件所在位置、文件大小等。
b.创建文件映射器,预定一块内存供文件映射。dwMsximumSizeHigh、dwMsximumSizeLow,在64位操作系统里内存映射文件的最大长度是64位,在32位操作系统里,dwMsximumSizeHigh为0,即最大映射长度为32位。当文件过大时采用分段映射的方法来处理。
c.数据映射到内存中,告之映射字节和映射长度,映射部分称为view.
d.撤销映射关系,关闭映射对象和文件对象。
PS.唉!!windows的看的很咩意思~有时间详细写下radix tree以及active、inactive list和slub,以及最终在嵌入式fs中我的使用。
附:拿fat32举例,我很好奇,windows上来就把fat表做映射了吗?要是能有大牛能给我这个菜菜在详细交流指点下就更好了。。