[操作系统]文件管理 文件逻辑结构 物理结构 磁盘基础

文件管理

文件系统基础

数据项

基本数据项 :可命名的最小数据单位,原子数据,有数据类型。–数据库中的字段。如:学号、姓名、年龄等。

组合数据项:由若干数据项组成,如工资。

记录:

一组相关数据项集合,用于描述一个对象在某方面的属性。主关键字(关键字)用于标识一个记录。

文件

由创建者定义,具有文件名的一组相关元素的集合。文件名是文件的标识符号。

有结构文件由若干相关记录组成;无结构文件被看成是一个字符流。

文件属性

文件名:同一个目录下不允许有重名文件

标识符:一系统内各文件的标识符唯一,对用户而言没有可读性,因此标识符只是OS用于区分各个文件名的一种内部名称。

类型:表明文件类型

位置:文件存放的路径(让用户使用),在外存中的地址(操作系统使用,对用户不可见)

大小:指明文件大小

创建时间,上次修改时间,文件所有者信息

保护信息:对文件进行保护的访问控制信息

文件组织结构

在这里插入图片描述

无结构文件(流式文件)

有结构文件(记录式文件)

数据项是文件系统中最基本的数据单位

文件间组织结构

用户可以逐层创建目录,各层目录中存放相应的文件。系统中的各个文件通过层层目录合理有序组织起来。目录本身也是一种特殊的有结构文件(由记录组成)

在这里插入图片描述

操作系统应该为文件管理提供哪些功能

  1. 创建文件,create系统调用
  2. 读文件,read系统调用
  3. 写文件,write系统调用
  4. 删除文件,delete系统调用
  5. 打开文件
  6. 关闭文件

文件应如何放于外存

外存也由一个个存储单元组成,每个存储单元可以存储一定量的数据,每个存储单元对应一个物理地址。

外存会分为一个个块/磁盘块/物理块。每个磁盘块的大小是相等的。文件的逻辑地址也可分为(逻辑块号,块内地址),操作系统同样要将逻辑地址转换为外存的物理地址(物理块号,块内地址)的形式。块内地址的位数取决于磁盘块的大小。

在这里插入图片描述

文件共享

使多个用户可以共享使用一个文件

文件保护

如何保证不同的用户对文件有不同的操作权限

文件系统实现

文件逻辑结构

逻辑结构:用户角度,文件内部的数据应该是如何组织起来的。

物理结构:操作系统角度,文件数据应该如何存放在外存中。

在这里插入图片描述

无结构文件

文件内部数据是一系列二进制流或字符流组成。又称为流式文件

有结构文件

由一组相似的记录组成。又称为记录式文件。每条记录由若干个数据项组成。一般来说,每条记录由一个数据项可作为关键字

根据各条记录的长度(占用的存储空间)是否相等,可分为定长记录可变长记录两种。

有结构文件的逻辑结构

在这里插入图片描述

顺序文件

文件中记录一个接一个地顺序排列(逻辑上),记录可以是定长可变长。各个记录在物理上可以顺序存储链式存储

默认各记录在物理上顺序存储
在这里插入图片描述

  1. *串结构:*记录之间的顺序与关键字无关 按存入时间决定记录的顺序
  2. *顺序结构:*记录之间的顺序按关键字顺序排列

是否可以进行随机存取

链式存储:无论是定长还是可变长,都无法实现随机存取,每次只能从第一个记录开始依次向后查找

顺序存储

​ 可变长记录:无法实现随机存取,每次只能从第一个记录开始依次往后查找

​ 定长记录:

  1. 可实现随机存取。
  2. 若采用串结构,无法快速赵铎某关键字对应记录
  3. 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)

*考题中顺序文件:*物理上顺序存储的顺序文件。

顺序文件的缺点:增加/删除一个记录比较困难

结论:定长记录的顺序文件,若物理上采用顺序存储,则可实现随机存取;若再能保障记录的顺序结构,则可实现快速检索(根据关键字快速找到对应记录)

索引文件

为了解决可变长记录在查找第i个记录,必须先查找前i-1个记录

建立一张索引表以加快文件索引速度。每条记录对应一个索引项。索引表项物理上连续存放

文件中的记录在物理上可以离散存放。

索引表本身是定长记录的顺序文件。因此可以快速找到第i个记录对应的索引项。

可将关键字作为索引号内容,若关键字顺序排列,则还可以支持按照关键字折半查找。

因此主要用于对信息处理的及时性要求比较高的场合

此外,可以使用不同的数据项建立多个索引表

索引顺序文件

每个记录对应一个索引表项,因此索引表可能会很大。

比如:文件的每个记录平均只占8b,而每个索引项占32字节,那么索引表比文件内容本身大,降低了存储空间利用率。

索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样为文件建立一张索引表,但不像索引文件每个记录对应一个索引表项,而是一组记录对应一个索引表项

在这里插入图片描述

索引表示定长记录的串结构顺序文件。

若一个顺序文件有10000个记录,则根据关键字检索文件,只能从头开始顺序查找,平均查找5000个记录

若采用索引顺序文件结构,可把10000个记录分为100组,每组100个记录。则需要先顺序查找索引表找到分组(100个分组,平均查50次),找到分组后,再在分组中顺序查找记录(每组100个记录,平均查找50次)。可见使用索引顺序文件结构后,平均查找100次。

多级索引顺序文件

可以为顺序文件建立多级索引表

在这里插入图片描述

目录结构在这里插入图片描述

文件控制块

一个文件目录项就是一个FCB。多个FCB组成文件目录。

FCB中包含文件的基本信息(文件名,物理地址,逻辑结构,物理结构),存储控制信息(是否可读/写,禁止访问的用户名单等),使用信息(建立时间,修改时间)

最重要的是文件名,文件存放的物理地址。

FCB实现了文件名和文件之间的映射,使得用户可以实现按名存取

需要对目录进行哪些操作:

  1. 搜索:当用户要使用哪个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
  2. 创建文件:创建一个新文件时,需要在其所属的目录中增加一个新目录项
  3. 删除文件:删除一个文件时,需要在目录中删除对应的目录项
  4. 显示目录:用户可以请求显示目录的内容,如显示该目录中所有文件及相应属性。
  5. 修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改对应的目录项。
单级目录结构

早期OS不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。

单级目录实现了按名存取,但不允许文件重名。

创建文件时,需要先检查目录项中有无重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。

不使用与多用户操作系统

两级目录结构

早期的多用户操作系统,采用两级目录结构。分为主文件目录用户文件目录

允许不同用户的文件重名,但是对应不同的文件

可以在目录上实现访问限制(检查此时登陆的用户名是否匹配)。但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类。

多级目录结构

树形目录结构。

用户或用户进程要访问某个文件时需要用文件路径名标识文件,文件路径名是个字符串。各级目录之间以/隔开。从根目录出发的路径称为绝对路径

在这里插入图片描述
在这里插入图片描述

引入当前目录和相对路径后,磁盘I/O次数减少,提升了访问文件的效率。

缺点:可以很方便地对文件进行分类,层次结构清晰,也能有效地进行文件的管理和保护。单树形结构不便于实现文件结构的共享。为此,提出了无环图目录结构

无环图目录结构

在树形结构的基础上,增加一些指向同一结点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享。

可以使用不同的文件名指向同一个文件,甚至指向同一个目录(共享同一目录下所有内容)

需要为每个共享结点设置一个共享计时器,用于记录此时有多少个地方在共享该结点。用户提出删除结点请求时,只是删除该用户的FCB,并使共享计数器减1,并不会直接删除共享结点。

当且仅当共享计时器减为0时,才删除结点

在这里插入图片描述

差别:

共享文件不同于复制文件。在共享文件中,由于各用户指向同一个文件,因此只要其中一个用户修改文件数据,那么所有用户都可以看到文件数据变化。

索引结点(FCB的改进)

实际查找过程中,只需要用到文件名信息,文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表瘦身来提升效率。

索引结点:除了文件名之外的文件描述信息都放到索引结点中。每个文件都存在唯一索引结点

在这里插入图片描述

当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据存放位置即可找到文件。

在这里插入图片描述

文件物理结构

文件分配方式

即文件数据应该如何存放在外存中。

操作系统决定

在这里插入图片描述

文件块、磁盘块

在外存管理中,为了方便对文件数据的管理,文件逻辑地址空间也被分为了一个一个的文件块。于是文件的逻辑地址也可以分为*(逻辑块号,块内地址)*的形式。

类似于内存分页,磁盘中的存储单元也会被分为一个个"块/磁盘块/物理块"。很多操作系统中,磁盘块的大小与内存块、页面的大小相同

内存与磁盘之间的数据交换(即I/O)都是以为单位进行的。即每次读入一块,或每次写出一块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnKOYtRq-1598621942727)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200823224536926.png)]

操作系统为文件分配存储空间都是以块为单位。

用户通过逻辑地址来操作自己的文件,OS要负责实现从逻辑地址到物理地址的映射。

在这里插入图片描述

连续分配

要求每个文件在磁盘上占有一组连续的块。

(逻辑块号,块内地址) -> (物理块号,块内地址)。只需要转换块号就行,块内地址保持不变。

用户给出要访问的逻辑块号,OS找到该文件对应的目录项FCB

物理块号 = 起始块号 + 逻辑块号

当然,还要检查用户提供的逻辑块号是否合法(逻辑块号>=长度 就不合法)

优点

  1. 连续分配方式支持顺序访问和直接访问(随机访问)

读取某个磁盘块时,需要移动磁头。访问两个磁盘块相隔越远,移动磁头所需的时间就越长。

  1. 连续分配的文件在顺序读/写时速度最快

缺点

  1. 物理上采用连续分配的文件不方便扩展

  2. 采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片

    可以使用紧凑来处理碎片,但是要耗费很大的时间代价。

链接分配

采取离散分配的方式,可以为文件分配离散的磁盘块,分为显式链接隐式链接两种。

题目中未指明显式或隐式则默认链接为隐式链接分配

隐式链接

目录中记录了文件存放的起始块号和结束块号。也可增加一个字段来表示文件的长度。

除了文件的最后一个磁盘块外,每个磁盘块中都会保存指向像一个盘块的指针。这些指针对用户是透明的。

实现文件逻辑块号到物理块号的转变

  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)

  2. 从目录项中找到起始块号(即0号块),将0号逻辑块读入内存,由此知道1号块存放的物理块号,以此类推。

    读入i号逻辑块,总共需要i+1次磁盘I/O

在这里插入图片描述

*结论:*只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量存储空间。

需要扩展文件时,随便找到一空闲盘块,挂到文件的磁盘块链尾,并修改文件的FCB。

显式链接

把用于链接文件各物理块的指针显式地存放在一章表中。即 文件分配表(FAT File Allocation Table)

目录中只需要记录文件的起始块号。

一个磁盘仅设置一张FAT。开机时将FAT读入内存,并常驻内存。FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此物理块号字段可以是隐藏的。

在这里插入图片描述

实现文件的逻辑块号到物理块号的转变

  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)。。

  2. 从目录项中找到起始块号,若i>0则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。逻辑块号转换为物理块号的过程不需要读磁盘文件

结论:采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问,想访问i号块时无需访问之前的0 - i-1号逻辑块,由于块号转换的过程不需要访问磁盘,因此相较于隐式链接,访问速度快很多

优点

  1. 方便进行文件扩展,不会有碎片问题,外存利用率高,并且支持*随机访问。*相较于隐式链接而言,地址转换时不需要访问磁盘,因此文件的访问效率更高

缺点

  1. 文件分配表需要占用一定的存储空间。
    在这里插入图片描述
索引分配

允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表–建立逻辑页面到物理页面之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块

在这里插入图片描述

可以使用固定长度表示物理块号(如:假设磁盘总容量为1TB = 240B,磁盘大小为1KB,共有230个磁盘块,则可用4B表示磁盘块号),因此索引表中的逻辑块号是隐含的。

实现文件的逻辑块号到物理块号的转换

  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
  2. 从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可知i号逻辑块在外存中的存放位置。

*索引分配方式可以支持随机访问。文件扩展也很容易实现,(只需要给文件分配一个空闲块,并增加一个索引表项即可)*但是索引表需要占用一定的存储空间。

若每个磁盘块1KB,一个索引表项4B,则一个磁盘块只能存放256个索引项。

若一个文件的大小超过了256块,那么一个磁盘块时装不下文件的整张索引表的,解决问题方法。

  1. 链接方案
  2. 多层方案
  3. 混合索引

链接方案

若索引表太大,一个索引块装不下,那么可以将多个索引表链接起来存放。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THsz1MXp-1598621942730)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200824101341598.png)]

多级索引

建立多层索引(类似于多级页表)。使第一层索引块指向第二层索引块。还可根据经文件大小的要求再建立第三层,第四层索引块。

若采用多层索引,各层索引表大小不能超过一个磁盘块

在这里插入图片描述

若某文件采用2层索引,则该文件的最大长度可以达到 256X256X1KB = 64MB

可根据逻辑块号算出应该查找索引表中的哪个表项。

如:要访问1026号逻辑块,则

1026/256 = 4 ,1026%256 = 2

因此可先将一级索引表调入内存,查询4号表项,将其对应的二级索引表调入内存,再查询二级索引表的2号表项即可知道1026号逻辑块存放的磁盘块号。访问目标数据块,需要3次磁盘I/O

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URUrxnzt-1598621942731)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200824194419680.png)]

结论:若采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。

缺点:即使是小文件也需要K+1次读磁盘。

混合索引

包含多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表),还包含两级间接索引(指向两层索引表)

在这里插入图片描述

顶级索引表还未读入内存

访问0-7号逻辑块:读2次磁盘

访问8-263号逻辑块:读3次磁盘

访问264-65799号逻辑块:读4次磁盘

对于小文件,只需要较少的读磁盘次数就可以访问目标数据块。

在这里插入图片描述

总结

在这里插入图片描述

在这里插入图片描述

文件的逻辑结构VS物理结构

逻辑结构:用户角度,文件内部的数据应该是如何组织起来的。 用户决定文件如何存储。

物理结构:操作系统角度,文件数据应该如何存放在外存中。**OS决定文件内容如何存在盘块上。

在这里插入图片描述

顺序文件可采用顺序存储/链式存储。

链式存储的顺序文件采用链接分配

对OS而言,盘块内容无意义。按照盘块大小拆分后,进行数据读取即可。

在这里插入图片描述

在这里插入图片描述

文件存储空间管理

存储空间的划分与初始化

将物理磁盘划分为一个个的文件卷(逻辑卷,逻辑盘)。

存储空间的初始化:将各个文件卷划分为目录区,文件区。

目录区主要存放文件目录信息FCB,用于磁盘存储空间管理的信息。

文件区用于存放文件数据

管理方法
空闲表法

适用于连续分配方式

如何分配磁盘块:与内存管理中的动态分区分配类似,为一个文件分配连续的存储空间。同样可以采用首次适应,最佳适应,最坏适应等算法来决定要为文件分配哪个区间。

在这里插入图片描述

如何回收磁盘块:与内存管理中的动态分区分配类似,当回收某个存储区时有4种情况。

  1. 前后都无相邻空闲区
  2. 前有后无
  3. 前无后有
  4. 前后都有

注意表项合并问题

空闲链表法

空闲盘块链

以盘块为单位组成一条空闲链

适用于离散分配的物理结构。为文件分配多个盘块时可能要重复多次操作。

在这里插入图片描述

由操作系统保存链头,链尾指针

如何分配:若文件申请K个盘块,则从头开始依次摘下K个盘块分配,并修改空闲链的链头指针。

如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。

空闲盘区链

以盘区为单位组成一条空闲链

盘区:连续的空闲盘块

离散,连续分配都适用。为一个文件分配多个盘块时效率更高

在这里插入图片描述

由操作系统保存链头,链尾指针

如何分配:

若某文件申请K个盘块,则可以采用首次适应,最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘块区,分配给文件。

若没有合适的连续空闲块,也可将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针,盘区大小等数据。

如何回收:

若会收区与某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若会收取没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。

位示图法

每个二进制位对应一个盘块。本例中,0代表盘块空闲,1代表盘块已分配。位示图一般用连续的来表示,如本例中一个字的长度为16位。字中每个位对应一个盘块。因此可以用*(字号,位号)对应一个盘块号。有些题目中也称为(行号,列号)*

一个字长一行

连续分配,离散分配都适用

在这里插入图片描述
在这里插入图片描述

需要自己能推出盘块号与(字号,位号)相互转换的公式

*注意:*盘块号,字号,位号到底是从0开始还是1开始。

如何分配:

若文件需要K个块

  1. 顺序扫描位示图,找到K个相邻或不相邻的0;
  2. 根据字号、位号算出对应盘块号,将对应盘块号分配给文件;
  3. 将相应位设置为1。

如何回收

  1. 根据要回收的盘块号计算出对应的字号、位号;
  2. 将相应的二进制位设为0。
成组链接法

空闲表法,空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采取了成组链接法对磁盘空闲块进行管理。

空闲盘块的组织

  1. 空闲盘块号栈。用于存放当前可用的一组空闲盘块号,以及栈中尚有的空闲盘块数。最多100个。
  2. 所有空闲盘块分为若干组。每组最多100个空闲盘块。
  3. 将每一组含有的盘块总数N和该组的所有盘块号,记入其前一组的第一个盘块中,这样,由各组的第一个盘块链成一个链。
  4. 第一组的盘块总数和盘块号,记入空闲盘块栈中,作为当前可分配盘块。
  5. 最后一组只有99个盘块号,最后一个盘块号为0,代表链表结束。

文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存。并且保持内存与外存中的超级块数据一致。
在这里插入图片描述

每个超级块第一个位置存放下一个空闲盘块的盘块号;每个超级块内的空闲盘块号可不连续

最后一个超级块的容量比其他的少

如何进行磁盘块分配:

需要一个空闲块

  1. 检查第一个分组的块树是否足够 1 < 100 是足够的。
  2. 分配第一个分组中的1各空闲块,并修改相应数据。

需要100个空闲块

  1. 检查第一个分组的块数是否足够。 100=100 足够
  2. 分配第一个分组中的100个空闲块。但是由于300号块内存放了下一组的信息,因此300号块的数据需要复制到超级块中。

如何回收

假设每个分组最多100个空闲块,此时第一个分组已经有99个块,还要回收一块。

将空闲块插到第一组中

假设此时第一个分组已满,还要再回收一块。

需要将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组。

文件的基本操作(知道即可)

创建文件

调用Create系统调用

需要提供的参数:

  1. 所需的外存空间大小
  2. 文件存放路径
  3. 文件名

OS在处理Create系统调用时的主要操作:

  1. 在外存中找到文件所需的空间
  2. 根据文件存放路径的信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项
删除文件

调用delete系统调用

需要提供的参数:

  1. 文件存放路径
  2. 文件名

操作系统在处理Delete系统调用时的主要操作:

  1. 根据文件存放路径找到对应的目录文件,从目录中找到文件名对应的目录项
  2. 根据该目录项记录的文件在外存的存放位置,文件大小信息,回收文件占用的磁盘块
  3. 从目录表中删除文件对应的目录项
打开文件

需要提供的参数:

  1. 文件存放路径
  2. 文件名
  3. 要对文件的操作类型

操作系统在处理Open系统调用时的主要操作:

  1. 根据文件存放路径找到对应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限。
  2. 将目录项复制到内存中的打开文件表中,并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件

打开文件时,并不会吧文件数据直接读入内存。索引号也称为文件描述符

在这里插入图片描述

关闭文件

操作系统在处理Close系统调用时的主要操作:

  1. 将进程的打开文件表相应的表项删除;
  2. 回收分配给该文件的内存空间等资源
  3. 系统打开文件表的打开计数器count减1,若count = 0,则删除对应表项。
读文件

需要指明是哪个文件,还需指明要读入多少数据,指明读入的数据要放在内存中的什么位置。

操作系统在处理Read系统调用时的主要操作:

  1. 会从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中。
写文件

需要指明是哪个文件,还需要指明要写出多少数据,写回外存的数据要放在内存中的什么位置。

操作系统在处理Write系统调用时的主要操作:

  1. 会从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存。

文件共享

操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件。

基于索引结点的共享方式(硬连接)

基于符号链的共享方式(软连接)

多个用户共享同一个文件,意味着系统中只有一份文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。

多个用户都复制了同一个文件,那么系统中会有好几份文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。

硬连接

基于索引结点的共享方式。

索引结点是一种文件目录瘦身策略。由于检索文件时只需要用到文件名,因此可以将处理文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名,索引结点和指针。

索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。

若count = 2,说明此时有两个用户目录项链接到该索引结点上,或说有两个用户在此共享此文件。

在这里插入图片描述

若某个用户决定删除该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count值-1。

若count > 0 ,说明还有别的用户要使用该文件,暂时不能吧文件数据删除,否则会导致指针悬空。

若 count=0时,系统负责删除文件。

软链接

记录某个文件的存放路径。类似快捷方式。 Link类型

在一个Link型的文件中记录共享文件的存放路径

操作系统根据路径层层查找,最终找到共享文件。

即使软链接指向的共享文件已删除,Link类型文件依然存在,只是通过Link型文件中的路径去查找共享文件会失败。

由于用软链接的方式共享文件时要查询多级目录,会有多次磁盘I/O

文件保护

保护文件数据安全

文件不受物理损坏

避免文件被非法访问

口令保护

为文件设置一个口令,用户请求访问该文件时必须提供口令。

口令存放于系统中

口令一般存放在文件对应的FCB或者索引结点中。用户访问文件前需要先输入口令,操作系统会将用户提供的口令与FCB中存储的口令进行对比,若正确,则允许该用户访问文件。

优点:保存口令的空间开销不多,验证口令的时间开销也小。

缺点:正确的口令存放在系统内部,不够安全。

加密保护

使用某个密码对文件进行加密,在访问文件时需要提供正确的密码才能对文件进行正确的加密。
在这里插入图片描述

*优点:*保密性强,不需要再系统中存储密码

*缺点:*编码/译码,或者说加密/解密需要花费一定时间。

访问控制

在每个文件的FCB(或所有结点)中增加一个访问控制表(Access-Control List,ACL),该表中记录各个用户可以对该文件执行哪些操作。

在这里插入图片描述

计算机中可能有多个用户,因此访问控制列表可能会很大,可以使用精简的访问列表解决该问题。

精简的访问列表:以为单位,标记各用户可以对文件执行哪些操作。

如:分为系统管理员,文件主,文件主的伙伴,其他用户 几个分组

当某用户想要访问文件时,系统就会检查该用户所属的分组是否有相应的访问权限。

在这里插入图片描述

需要非本组权限,则修改该文件分组。

*优点:*实现灵活可以实现复杂的文件保护功能。

若对某个目录进行了访问权限的控制,那也要对目录下的所有文件进行相同的访问权限控制

文件系统的层次结构

在这里插入图片描述

**用户接口:**需要向上层的用户提供一些简单易用的功能接口。该层就是用于处理用户发出系统调用的请求(Read,Write等)。

**文件目录系统:**用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到对应的FCB或缩印结点。所有和目录、目录项相关的管理工作都在本层完成。如:管理活跃的文件目录表,管理打开文件表等。

**存取控制模块:**为了保证文件数据安全,还需要验证用户是否有访问权限。这一层主要完成了文件保护相关功能。

**逻辑文件系统与文件信息缓冲区:**用户指明要访问的文件记录号,这层需要将记录号转换为对应的逻辑地址。

**物理文件系统:**该层需要把上层提供的文件逻辑地址转换为实际的物理地址。

磁盘组织与管理

磁盘的结构

磁盘、磁道、扇区的概念

磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。

磁道是一圈一圈的。

每个磁道被划分为扇区,每个扇区就是一个磁盘块。每个扇区的数据量相同。对应的每个磁道的数据量相同。越靠近内侧磁道密度越大。

在这里插入图片描述

如何在磁盘中读/写数据
  1. *磁头移动时间:*移动磁头到所需要扇区所在的磁道
  2. *旋转延迟时间:*在对应磁道上找到扇区的时间
  3. *数据读取时间:*对扇区进行读写的时间
盘面与磁盘物理地址

所有盘面中相对位置相同的磁道组成柱面。

每个磁盘片的一面称为一个盘面。

可用*(柱面号,盘面号,扇区号)来定位任意一个磁盘块*,在文件的物理结构中,提到的文件数据存放在外存的几号块,就可以转换成(柱面号,盘面号,扇区号)。

在这里插入图片描述

磁盘的分类

在这里插入图片描述

可更换盘磁盘

固定盘磁盘

磁盘调度算法

一次磁盘读/写操作需要的时间

寻道时间:在读/写数据前,将磁头移动到指定磁道所花的时间。

  1. 启动磁头臂需要时间,假设耗时为s;

  2. 移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。

    寻道时间 = s + mn

延迟时间:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。假设磁盘转速为r(转/s),则

平均旋转延迟时间 = (1/2)*(1/r) = 1/2r

传输时间:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘的转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。

传输时间 = (1/r)*(b/N)

总的平均存取时间 = 寻道时间 + 平均旋转延迟时间 + 传输时间

延迟和传输时间 操作系统无法优化

磁盘调度算法
先来先服务FCFS

根据进程请求访问磁道的先后顺序进行调度
在这里插入图片描述

*优点:*公平,如果请求访问的磁道比较集中的话,算法性能还可。

*缺点:*如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。

最短寻找时间优先SSTF

优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。贪心算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dw2XhzqB-1598621942744)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200825220029019.png)]

*优点:*性能较好,平均寻道时间短;

*缺点:*可能产生饥饿现象。产生饥饿原因:磁头在一个小区域内来回地移动

扫描算法SCAN

SCAN算法思想:只有磁头移动到最外侧磁道时候才能往内移动,移动到最内侧磁道的时候才能往外移动。也叫电梯算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEzaH9Pk-1598621942744)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200825220744037.png)]

*优点:*性能较好,平均寻道时间较短,不产生饥饿现象

缺点:

  1. 只有达到最边上的磁道时才能转变磁头移动方向;
  2. SCAN对于各个位置磁道的响应频率不平均

在这里插入图片描述

Look调度算法

如果在移动方向上已经没有别的请求,就可以立即改变磁头方向。(边移动边观察)。

在这里插入图片描述

*优点:*使得寻道时间进一步缩短。

循环扫描算法C-SCAN

解决对于各个磁道的响应频率不平均。

只有磁头朝特定方向移动时候才处理磁道访问请求,返回时直接快速移动至起始端而不处理任何请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxHDSeFc-1598621942746)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200825222347749.png)]

优点:比起SCAN来,对于各个位置磁道的响应频率很平均

缺点: 只有到达最边上的磁道时才能改变磁头方向;并且返回时候不需要返回到最边缘的磁道。比起SCAN,平均寻道时间更长。

C-LOOK算法

在C-SCAN算法的基础上,若磁头移动方向上已经无磁道访问请求,则立即让磁头返回。并且磁头只需要返回到有磁道访问请求的位置即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnLqUxYk-1598621942746)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200825222951559.png)]

若无特别说明:SCAN就是LOOK算法 C-SCAN 就是 C-LOOK算法

减少磁盘延迟时间的方法(了解即可)

在这里插入图片描述

交替编号

采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。

问题:

在这里插入图片描述

结论:磁头读入一个扇区数据后需要1小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的延迟时间

磁盘结构的设计

磁盘的物理地址是(柱面号,盘面号,扇区号)的原因是:减少磁头移动消耗的时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRyZqakk-1598621942748)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200826092635461.png)]

若物理地址是(盘面号,柱面号,扇区号),且需要连续读物理地址(00,000,000) - (00,001,111)的扇区;

(00,000,000) - (00,000,111) 转2圈可读完

之后再读取物理地址相邻的区域,即

(00,001,000) - (00,001,111) 需要启动磁头臂,将磁头移动到下一个磁道

错位命名

若相邻盘面的相对位置相同处扇区编号相同

在这里插入图片描述

会增加延迟时间。

采用错位命名时

在这里插入图片描述

磁盘管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4IkMSDN-1598621942750)(D:\StudyData\Notes[其他]计算机通用知识\OSpics\image-20200826095248107.png)]

磁盘初始化
  1. 低级格式化:将磁盘的各个磁道划分为扇区。一个扇区通常可分为头,数据区域(如512B大小)、尾 三个部分。管理扇区所需要的各种数据结构一般存放在头,尾两个部分,包括扇区校验码,校验码用于校验扇区中的数据是否发生错误。
  2. 将磁盘分区:每个分区由若干个柱面组成
  3. 进行逻辑格式化,创建文件系统。包括创建文件系统的根目录,初始化存储空间管理所用的数据结构(如 位示图,空闲分区表),

在这里插入图片描述

引导块

计算机开机工作时,需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的。

初始化程序可以存放在ROM中。ROM中的数据在出厂时候就写入了,并且以后不能再修改

在这里插入图片描述

完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置。

坏块的管理

无法正常使用的扇区就是坏块。属于硬件故障,操作系统无法修复。应将坏块标记出来,以免错误的使用到它。

简单的磁盘,进行逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区。比如在FAT上标明。(坏块对OS不透明)

对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。

并保留一些备用扇区,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对OS透明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire-From

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值