4.1 初识文件
文件的属性
-
文件名:相同目录不可重名
-
标识符:各文件标识符唯一,对用户无可读性
-
类型
-
位置:存放路径,在外存中地址(对用户地址不可见)
-
保护信息:对文件进行保护的控制信息
无结构文件:由一些二进制或字符流组成,又称“流水文件”(如文本文件)
有结构文件:由一组相似的记录组成,又称“记录式文件”,记录是一组相关数据项的集合,每条记录有一个数据项可作为关键字,根据各条记录的长度是否相等,又可分为定长记录和可变长记录
操作系统应该向上提供的功能
4.2 文件的逻辑结构
顺序文件
文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的;各个记录在物理上可以顺序存储或链式存储
串结构:记录之间的顺序与关键字无关;通常按照记录存入的时间决定记录的顺序;
顺序结构:记录之间的顺序按关键字顺序排列;增/删比较麻烦
一般来说,考试题目中所说的顺序文件指的是物理上顺序存储的顺序文件
索引文件
索引顺序文件
查找的顺序再次降低的话可以使用多级索引顺序文件
4.3 文件目录
文件控制块
目录结构
多级目录结构(树形目录结构)
记录当前路径,可以从当前目录出发,节省I/O访问次数
缺点:不便于实现文件的共享
无环图目录结构
删除文件时,每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点,只有共享计数器为0时,才删除结点
索引结点
使用索引结点机制可以减少存储磁盘的数量(每次磁盘I/O只读入一块),可以大大提升文件检索速度
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”,通常内存索引结点中需要增加一些信息,比如文件是否被修改等
4.4 文件的物理结构
文件块、磁盘块
磁盘中的存储单元会被分为一个个“块/磁盘块/物理块”,很多操作系统中,磁盘块的大小与内存块、页面的大小相同;内存与磁盘之间的数据交换都是以“块”为单位进行
同理,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”,于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式;文件块与磁盘块大小相等
文件分配方式
连续分配
连续分配方式要求每个文件在磁盘上占有一组连续的块
物理块号 = 起始块号 + 逻辑块号
优点:支持随机访问;顺序读/写时速度最快
缺点:拓展比较困难;会产生难以利用的磁盘碎片
隐式链接方式(默认)
缺点:只支持顺序访问,不支持随机访问
优点:不会产生碎片,利用率高
显式链接方式
把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表
一个磁盘仅设置一张FAT,开机时,将FAT读入内存,并常驻内存;物理块号连续可省略
优点:可以随机访问,同时内存利用率提高
缺点:文件分配表需要占用一定的内存
索引分配
系统为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块;索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块
当文件很大,索引表太大时
-
链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放(前面的索引块存放下一个索引块的指针)
-
多层索引(还可根据要求建立三层、四层索引块)
K层索引结构,需要K+1读磁盘操作
-
混合索引:既包含直接地址索引(数据块),又包含一级、二级间接索引
4.5 文件存储空间管理(空闲空间)
空闲表法
空闲链表法
空闲盘块链
-
操作系统保存着链头、链尾指针
-
分配:若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针;
-
回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针
-
分配多个时有可能会重复操作
空闲盘区链
-
操作系统保存着链头、链尾指针;
-
分配:若某文件申请K个盘块,则可以采用相应的算法分配一个大小合适的空闲块,若没有合适的,可以将不同盘区的盘块分配给一个文件,注意分配后要修改相应的链指针、盘区大小等数据
-
回收:若相邻则合并;若不相邻,作为单独的一个空闲区挂到链尾
位示图法
-
分配:若文件需要K个块:顺序扫描位示图,找到K个相邻或不相邻的”0“;根据字号、位号算出对应的盘块号,将相应盘块分配给文件;将相应位设置为”1“
-
回收:根据回收的盘块号计算出对应的字号、位号;将相应的二进制位设为”0“
成组链接法
前两者不适用大型文件系统;UNIX系统使用
文件卷的目录区中专门用一个磁盘块作为”超级块“,当系统启动时需要将超级块读入内存,并且要保证内存与外存中的”超级块“数据一致
-
分配:
-
需要1个空闲块
检查第一个分组的块数是否足够,足够;分配第一个分组中的1个空闲块,并修改数据
-
需要100个空闲块
检查第一个分组的块数是否足够,足够;分配第一个分组中的100个空闲块,包括300号空闲块,所以需要将300号块的数据复制到超级块中
-
-
回收
-
第一组分组没满,直接将插入第一个空闲块,修改数据
-
第一组分组满了,超级块的信息复制给回收的新块,并修改超级块的内容
-
4.6 文件的基本操作
创建文件
分配外村空间,创建目录项
删除文件
回收外存空间,删除目录项
打开文件
-
从目录表中找到文件名对应的目录项,并检查该用户是否有制定的操作权限
-
将目录项复制到内存中的打开文件表中,并将对应表目的编号(索引号、文件描述符)返回给用户,之后用户使用打开文件表的编号来指明要操作的文件
关闭文件
-
将进程的打开文件表相应表项删除
-
回收分配给该文件的内存空间等资源
-
系统打开文件表的打开计数器count减1,若count = 0,则删除对应表项
读文件
指明文件表中的索引号,读入多少数据、内存中的位置
写文件
指明文件表中的索引号,写回多少数据、写回外存中的位置(写指针)
4.7 文件共享
基于索引结点的共享方式(硬链接)
基于符号链的共享方式(软链接)
Link 类型的文件名可以不同
当文件1删除时,通过文件2的软链接找到的路径失效
4.8 文件保护
口令保护
为文件设置一个“口令”,用户请求访问该文件时必须提供“口令”
优点:保存口令的空间开销不多,验证口令的时间开销小
缺点:口令放入内存,不安全
加密保护
使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”,才能对文件进行正确解密
加密和解密的方式相同的话,结果是相同的
优点:保密性强,不需要在系统中存储“密码”
缺点:加密/解密需要耗费一定时间
访问控制
在每个文件的FCB(或索引结点)中增加一个访问控制列表,该表中记录各个用户可以对该文件执行哪些操作
精简的访问列表:以“组”为单位,标记各“组”用户对文件执行哪些操作
4.9 文件系统的层级结构
文件基本操作 -> 文件目录 -> 文件保护 -> 文件逻辑结构 ->文件物理结构 ->文件存储空间管理 -> 磁盘管理
4.10 磁盘
4.10.1 磁盘结构
磁盘:表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据
在磁盘中读/写数据:需要将“磁头”移动到想要读/写的扇区所在的磁道,磁盘会转动,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作
盘面、柱面
可用(柱面号,盘面号,扇区号)来定位任意一个“磁盘块”
-
指定柱面
-
激活磁头
-
磁盘旋转读取
磁盘分类
活动头磁盘:磁头可以移动
固定头磁盘:磁头不可以移动,但是一个盘面有很多个磁头分别对应不同的磁道
可换盘磁盘:盘片可以更换
固定盘磁盘:盘片不可以更换
4.10.2 磁盘调度算法
一次磁盘读/写操作需要的时间
寻找时间Ts:在读/写数据前,将磁头移动到指定磁道所花的时间
-
启动磁头臂:s
-
移动磁头:假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道,则寻道时间 Ts = s + m * n
延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间,设磁盘转速为r(单位:转/秒或转/分),则平均所需的延迟时间 Tr = (1/2)*(1/r )
传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,假设读/写的字节数为b,每个磁道上的字节数为N,则传输时间 Tt = (1/r)*(b/N)
各磁盘调度算法
先来先服务算法(FCFS)
根据进程请求访问磁盘的先后顺序进行调度
最短寻找时间优先(SSTF)
优先处理磁道是与当前磁头最近的磁道;类似贪心算法,可以保证每次的寻道时间最短,但是不能保证总的寻道时间最短
缺点:可能产生“饥饿”现象
扫描算法(SCAN)
只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动
LOOK调度算法
在扫描算法的基础上(优化缺点1),如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向
循环扫描算法(C-SCAN)
在扫描算法的基础上(优化缺点2),返回时直接快速移动至起始端而不处理任何请求
C-LOOK调度算法
在扫描算法的基础上(优化缺点1,2),如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,并且返回第一个需要访问的位置
减少磁盘延迟时间的方法
交替编号
问题:由于磁头读入一个扇区数据后需要一段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”(磁盘转多一圈)
省下多转一圈的时间
为什么是(柱面号,盘面号,扇区号)
错位命名
问题:若相邻的盘面相对位置相同处扇区编号相同,则盘面交换的时候,由于处理时间,要多转一圈
4.10.3 磁盘的管理
磁盘初始化
引导块
开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的;
很小的自举装入程序存放在ROM中(只读),完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置;拥有启动分区的磁盘称为启动磁盘或系统磁盘
开机时计算机先运行“自举装入程序”,通过执行该程序找到引导块,并将完整的自举程序读入内存,完成内存。
坏块的管理
简单的磁盘,在逻辑格式化时,对整个磁盘进行坏块检查,标明哪些扇区是坏扇区
复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表,低级格式化时将坏块链进行初始化
扇区备用:保留一些“备用扇区”,用于替换坏块,坏块对操作系统透明
标签:文件,操作系统,管理,扇区,索引,磁头,磁盘,内存 From: https://www.cnblogs.com/eecsCodeStar/p/16980829.html