文件系统相关

  • OS内核为每个进程维护一个打开文件表, 当open一个文件时, 将该文件的文件控制块(inode)加载到内存中,作为打开文件表的一项,并返回该项的索引作为文件描述符,之后可以通过文件描述符对文件进行操作
文件控制块的各种信息:![打开文件后对其做一些操作](https://img-blog.csdnimg.cn/20210603210955514.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppdXJpMTAwNQ==,size_16,color_FFFFFF,t_70)

1.文件指针: 指向最近的依次读写位置, 每个打开了此文件的进程都可以使用该指针
2.文件打开计数:类似于shared_ptr的引用计数,记录了当前共有多少个进程打开了此文件,只有当最后一个进程关闭了此文件后,才允许将其从打开文件表中删除
3.文件磁盘位置:记录了本文件位于磁盘的具体位置,例如位于哪个扇区
4.访问权限:允许程序以何种方式访问(open的时候,可以指定多种flag)
  • 虚拟文件系统:向上屏蔽不同文件系统的差异,上层统一使用open,read,write,close等接口即可
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 文件分配:文件可大可小,对文件可能进行读,写,扩充,删除等操作,那么如何分配文件才可以满足要求
顺序存储:不方便扩展,适用于只读的情况
链式存储:不会有碎片,易于扩展,但需要维护磁盘块之间的链接关系,万一链断掉会导致文件系统崩溃
索引:使用类似页表的思路,在磁盘上头专门用一个磁盘块记录该文件所用到的所有磁盘块;缺点:当文件很大时,存索引的磁盘块可能不够用,可以采用类似多级页表的思路
  • 空闲空间管理:
位图:每bit表示该磁盘块是否空闲
链式:把空闲磁盘块链起来
  • 磁盘调度算法:读写一个磁盘块的时间 = 寻道时间(前后移动磁臂找到目标磁道) + 旋转时间(旋转一定角度,使磁头找到目标扇区的起始位置) + 数据传输时间(磁头从起始位置一直读写到结束位置); 其中寻道时间占主要部分,因此磁盘调度目的是减少磁盘的寻道时间
背景:磁盘I/O请求序列的不确定性
1.先来先服务:简单
	缺点:当I/O请求序列随机时,平均寻道时间往往很长
2.最短寻道时间:从序列中选择离当前磁臂最近的磁道,可以达到最短寻道时间
	缺点:访问不公平性,由于永远选择离当前最近的磁道请求来处理,可能导致比较远的磁道请求产生饥饿
3.电梯扫描算法:按一个方向开始处理,直到处理完这个方向上的最后一个请求,再调转方向。 这样所有的磁盘请求都会满足,更加公平,不会出现饥饿现象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值