操作系统文件管理及IO机制

1. 硬盘

磁盘参数:

  • 磁头
  • 磁柱/磁道
  • 扇区(磁盘读写的最基本单位)
  • 扇区大小(常见的有512byte,4096byte)

磁盘大小计算:磁头数 x 磁道数 x 扇区数 x 扇区大小

2. 文件系统

文件系统有多种格式:FAT32、NTFS等等
操作系统中文件读写以簇(windows)或块(linux)为单位分配磁盘空间,通常一个簇/块由多个扇区组成。一个扇区只属于一个簇/块,一个簇/块只能由一个文件占用,一个文件可能占用多个簇/块。

所以有时候我们看到一个文件,不管写1000还是2000个字节,占用的磁盘空间还是相同的。甚至还有下面这种,占用空间为0的:
在这里插入图片描述
实际并不是不占用磁盘空间,而是数据太少,和文件名写在同一个区域了,内容没有单独占用磁盘。

如果往这个文件里写2k字节的数据:
在这里插入图片描述
然后删除,再看看是什么情况:
在这里插入图片描述
还是占用4K,因为最小就是占用4k,且没有把数据复制回文件地址区域。

3. 文件读写

在程序中读写文件的过程:
在这里插入图片描述
应用程序不管是读和写文件,都不是直接访问磁盘,而是访问文件缓存(linux叫page cache,windows下叫File Cache)。

有几个问题:

  1. 何时会将文件写入文件缓存?
  2. 同一个文件会有多分缓存吗?
  3. 单个文件缓存有大小限制吗?
  4. 系统内存不足时,文件缓存如何处理?
  5. 文件缓存占用的内存何时会被释放?
  6. 写入文件缓存后,何时回写文件?

Linux:Page Cache、Buffer Cache、Swap Cache
Windows:File Cache、File Buffer、Virtual Memory

4. 页高速缓冲存储器(文件高速缓冲器)

文件高速缓冲的作用:提高文件读写速度,减少磁盘IO。

  • Cache Manager
    当文件被应用程序引用,Cache Manager会将文件映射至内存。

  • 文件缓存、减少磁盘I/O

  • 延迟写入:定时写入/空闲写入、页满写入/阈值触发写入、直写(同步写入缓存)

  • 缓存性能指标:缓存命中率

  • 文件高速缓存的大小:RAM大小(Virtual Memory + Real Memory),与其他应用程序竞争RAM,优先级更低,不活动的页面将可能从内存中移除

  • 文件缓存是以文件段/块的方式缓存,一个文件可能有多个File Cache(linux叫Page Cache)

通常操作系统提供两类文件操作接口:

  1. 以拷贝方式操作
  2. 以地址映射方式操作

两者都离不开页高速缓存。

标准的文件缓存复制接口在效率方面有明显的缺点:需要从系统缓存中到用户缓存区来回复制。一种更有效的方法是允许应用程序直接访问系统缓存中的数据(File Mapping/mmap或MDL)。

在我们需要将一个文件通过socket发送给其他用户时,我们需要在从系统文件缓存复制到用户缓存,然后从用户缓存复制到socket缓冲区,再由系统发送出去。更好的方式是使用TransmitFile(windows)\sendfile(linux),无需占用CPU。

参考:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值