操作系统 第六章 文件管理

目录

0x00 文件的定义

0x01 文件的逻辑结构

0x02 文件的存取方式

0x03 文件的目录

文件目录实现的功能:

文件目录结构分类:

1.一级目录

2.二级目录

3.多级目录

0x04 文件共享

(1)基于索引结点的共享方式

<1>动态共享:

内存INode 和 磁盘iNode 之间的关系:

系统打开文件表:

用户(用户进程)打开文件表:

0x05 文件保护

0x06 文件控制

0x07 文件的物理结构

全章的重点!

#文件系统的一致性检查

0x08 外存空间管理

#1.空闲区表

#2.位示图

#3.空闲块链:

#4.成组链接法

0x09 磁盘管理

#循环电梯调度算法

#信息的优化分布:


0x00 文件的定义

文件的组成部分:

1.文件体:文件的真实内容

2.文案说明(FCB ):操作系统为了管理文件所用到的信息

文件系统:

0x01 文件的逻辑结构

(1)无结构的 流式文件:文件体为字节流,利用读写指针指出下一个要访问的字符。

(2)有结构的 记录式文件: 文件体由若干记录组成

例如:excel表

分为:定长记录文件 和变长记录文件

 定长记录支持 顺序存取 和随机存取

变长记录支持顺序存取 ,但是随机存取困难

0x02 文件的存取方式

顺序存取

随机存取(直接存取):用户可以随意存取文件中的任何一个记录

例如 数组 就支持 随机存取 arr[3] ,这是因为每个数组项 的大小相同。

所以,流式文件 和 定长记录文件 容易支持这种 随机存取

0x03 文件的目录

文件目录:各种文件的FCB的集合

将文件目录存在 磁盘上就构成了一个目录文件,说白了就是 文件夹。

胖目录和瘦目录:

胖目录:文件名和文件说明绑在一起

瘦目录:文件名 和 文件说明(inode)分离

文件目录实现的功能:

1.实现按名存取

2.提高对目录的检索速度

3.实现文件共享

4.解决文件重名问题

文件目录结构分类:

1.一级目录

2.二级目录

每个用户都有自己的用户文件目录

然后建立一个主文件目录,存每个用户的 用户文件目录的名称和地址

优点:

1.树形结构,提高了检索目录的速度

2.在不同的用户目录下 可以有相同的文件名

3.不同用户可以访问系统中同一个共享文件,例如上图中test指向同一个

文件地址。

缺点:不能对文件分类管理

3.多级目录

问题:查找/usr/dir需要启动磁盘几次

2次。第一启动磁盘,将/下的文件目录 装入内存中

第二次启动磁盘,将/usr/下的文件目录装入内存中

这个问题,说白了就是问 要打开几次文件夹。

0x04 文件共享

为什么要共享文件?

就是为了只保留一个文件副本,节约存储空间。

文件名 和文件说明(inode)分离有利于实现 文件共享

(1)基于索引结点的共享方式

<1>动态共享:

往往出现在进程之间共享文件(多个进程之间可以以不同的或者相同的方式同时打开同一个文件)时,

进程终止则共享终止。

打开文件机构:

文件打开后 由 “打开文件机构管理”,关闭时退出 打开文件机构

"打开文件机构"的结构:

  1. 内存文件控制块(内存iNode)
  2. 系统打开文件表
  3. 用户打开文件表
  4. 磁盘iNode(内存iNode只是 磁盘iNode一个副本)

 

注意:

i_count 记录该文件被多少个进程共享

i_number 指向 该内存INode 对应的磁盘INode的地址

i_p 或者 i_addr 指向 该文件 在磁盘中的地址

磁盘iNode

内存INode 和 磁盘iNode 之间的关系:

磁盘INode存储在磁盘上

内存INode存储在内存上

当打开文件时,如果发现内存中不存在该文件的内存INode,就会将磁盘中对应的INode

拷贝一份到内存作为内存INode,如果打开文件过程中,内存INode被修改,那么当关闭

文件时,修改的内存INode将会被写入磁盘INode

当我们需要读写文件时,直接查内存INode就可以知道文件在磁盘中地址。

系统打开文件表:

f_inode 指向该文件的内存inode,

该文件的内存inode 中的i_addr 指向 磁盘中的文件

用户(用户进程)打开文件表:

用户打开文件表的表项 指向 系统打开文件表

系统打开文件表的inode 指向 内存inode

内存inode 指向 磁盘中的文件

例题:

我们在编程时, open()函数返回的文件描述符, 其实就保存在 用户进程

打开文件表中,一个进程打开多个文件就得到多个 文件描述符,这些描述

符,就规规矩矩的存在 该进程的 用户打开文件表中

文件描述符 并不是 直接文件地址

而是指向该文件对应的 系统打开文件表

由上图可以看出:用户进程打开文件表 由 进程自己维护, 可以有多个

而系统打开文件表只能有一个,由操作系统维护。

因为两个进程的操作方式不同,所以系统打开文件表中就需要有两个表项

如果两个进程都是以读的方式打开同一个文件,因为操作方式相同

那么系统打开文件表中 只需要有一个表项,该表项的f_count =2

<2>静态共享

一个文件同时属于多个文件目录项(例如被多个用户共享)

并且这种关系不管文件此时是否在被使用,都存在。

硬连接共享:

两个文件目录中文件名 都指向 同一个INode,

INode指向 文件在磁盘中的地址。

例如下图中ls 和 usr 指向的都是INode 10

此时di_nlink = 2

硬链接共享的缺点:

1.文件主删除文件困难,文件主删除的只是链接,不见得能删除文件本身

2.文件共享不能跨文件系统

(2)软链接(利用符号链实现文件共享)

下图中INode 11 指向的文件体 中保存的内容 其实 INode 10指向的文件的 文件路径

这样一来INode 10 和INode 11 的count 都是 1,文件主可以直接删除INode 对应的文件。

上题中 的 文件的引用计数 指的就是该文件名 指向的INode  的 count 计数。

0x05 文件保护

缺点:用户如果很多的话,表会非常大

0x06 文件控制

 

0x07 文件的物理结构

 

将磁盘分成若干个物理块,

将文件分成若干个相同大小的逻辑块

将逻辑块装入 物理块中

几种常见的物理存储方式:

1.连续存储:

逻辑上连续的逻辑块 放到编号连续的 物理块上

2.链接结构:

缺点:

可靠性不好,如果有一个磁盘块坏了,后面其他的文件块就找不到了

不能随机访问,比如从链表头开始往下找。

3.索引结构:

存在的问题:

如果一个物理块 大小为1K(1024字节) ,一个索引表项 3字节

那么一个物理块只能 放341个表项,对应341个物理块 ,对应341K 也就是说如果一个

文件的大小大于341K,那么它生成的表项 将 不能装入一个 物理块中。

解决方法:

(1)将索引表 以链表的形式组织起来

(2)多级索引方式

unix系统采用的文件物理结构:三级索引结构

unix 中分配一个 文件的文件索引表的大小只有40个字节,一个表项 3个字节

也就说只能 有13个表项

全章的重点!

一个磁盘数据块 (256/4) = 64 个表项

4*256 + 2 * 64 * 256 + 1*64 *64 *256 = 1057KB

冲突: 多个值对应同一个键

拉链法: 将对应同一个键的值用链表串起来

#文件系统的一致性检查

 

表一中:1表示 该块正在使用

表二中:1表示该块处于空闲状态

所以,正常情况下 不能一个物理块 既是空闲 又 在使用。

下图中,物理块2,即没有在使用 又 不是空闲状态, 说明该物理块没有被登记,即已经丢失

上图中第5块,两张表中都是1,表一中的1表示 该物理块 正在被使用

表2中的块表示 该物理块 可以被 分配给 其他文件,这样就可能导致两个文件同时向

该物理块写入数据。

0x08 外存空间管理

文件系统 对外存 空间的管理: 实际上 就是 对空闲块的组织和管理问题

常用的空闲空间管理方法:

1.空闲区表

2.位示图

3.空闲块链

#1.空闲区表

#2.位示图

例题:

注意:从1开始编号

3

#3.空闲块链:

#4.成组链接法

空闲链表法导致 链表很长, 一块丢失就可能造成 整个链条断裂,不利于维护

成组链接法,先将空闲块100块分成一组,然后每个组用链表链接起来。

(每组的第一个空闲块 用于记录下一组的 物理盘块号 和 本组的空闲块数)

空闲盘块号栈:这个要读入内存

分配算法:

首相将一组空闲块 读入 到 内存中的 空闲盘块号栈中

当系统需要 空闲块 时,就从 此栈  pop  一个 元素,该元素指向一个 物理块

如果 栈中只有 一个 元素了,就检查该元素是否为0

如果为0则表示没有空闲块了

否则,就读取该元素指向的 一组空闲块 ,将其push 到 空闲盘块号栈中

释放算法:

当系统产生新的空闲块时,

首先看 栈 中空闲块是否小于100,如果是,则将 新的空闲块直接push到栈中即可

否则,说明栈已经满了,因此将栈中现有块 作为一组,存入磁盘,在栈中保留一个指向

该组的元素即可。

例题:

(1)2+100+100+99= 301

注意:最后一组的0不算空闲盘块,这里问的是空闲盘块数,而不是物理盘块数

每组的第一个空闲盘块也是指向物理盘块的,但是该物理块中保存了下一组的地址 和 空闲盘块的总数

(2)

分配3个空闲盘块,299,300,301

注意:第300块也被分配了

回收5块:

0x09 磁盘管理

磁盘高速缓存:

磁盘:

磁盘的构造:

一个盘面上下 两个 磁头

要确定一个物理块的地址:

首先要确定 磁头号,然后确定 磁道号,然后确定扇区号

磁盘调度算法:

数据传输时间可以忽略。

#磁盘移臂调度算法:

例如:

答案:建议考试时带上计算器

#最短寻道时间优先 Shortest Seek Time First

#电梯调度算法

#scan算法

例如65 ,这时,磁头正在往 0 方向走,虽然65距离53很近,但是需要等很久。

#look算法

到最远请求就折返

#循环电梯调度算法

例题:

 

总结:

#旋转调度算法:

当移动臂找到磁道后,移动臂就不动了,依靠磁盘的旋转来找到对应的扇区

例题:

当移动 臂已经移动到一个磁道后,影响时间花费就只有 访问扇区号 的先后了

本地从小到大访问扇区号即可,因为 有两个6号扇区,可以随机选一个先访问。

因为先下压那个磁头并不会造成花费时间的不同,但是没有被选中的那个

就需要下一圈时才能访问了。

访问顺序:1 2 4 3  或者 13 42

因为第一圈 2 和 3 只能选一个访问,下一个必须留到第二圈访问

#信息的优化分布:

磁盘调度算法可以减少访问时间,优化数据的分布 也可以减少访问时间

物理块分布优化

索引节点分布优化

磁盘转一周20ms ,一共8个扇区,转过一个扇区需要2.5s

但是磁盘处理一个扇区的信息需要5ms

所以按照第一种信息排布方式,磁头在读取1号扇区后,需要等待5ms才能继续读2号,

但是磁盘这时并不会停下来等5ms,而是会继续转动,这样一来,磁头就不得不等到

磁盘转第二圈才能读取2号扇区。

所以优化为第二种信息分布方式,磁头在读取1号扇区后,5ms中处理信息的时间 正好

可以用来滑过 4,7两个扇区。

优化方法:处理信息时间能转几个扇区,就在相邻扇区之间间隔几个扇区

第五章测试讲解:1:18 5-14

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 概述 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。 本次实验我们实现了多级目录下的文件管理系统,具备文件系统的文件创建、删除、读写以及目录的创建、删除等操作,并在内存中开辟一块空间,模拟虚拟磁盘,成功地展示出文件系统的功能和属性。 2 课程设计的任务和要求 2.1 设计任务 在下列内容中任选其一: 1、多用户、多级目录结构文件系统的设计与实现; 2、WDM驱动程序开发; 3、存储管理系统的实现,主要包括虚拟存储管理调页、缺页统计等; 4、进程管理系统的实现,包括进程的创建、调度、通信、撤消等功能; 5、自选一个感兴趣的与操作系统有关的问题加以实现,要求难度相当。 2.2 设计要求 1、在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案; 2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理; 3、编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果; 4、确定测试方案,选择测试用例,对系统进行测试; 5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问; 6、提交课程设计报告。 集体要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录文件系统。 2.文件物理结构可采用显式链接或其他方法。 3.磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。 4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。 5.设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作: (1)具有login (用户登录) (2)系统初始化(建文件卷、提供登录模块) (3)文件的创建: create (4)文件的打开:open (5)文件的读:read (6)文件的写:write (7)文件关闭:close (8)删除文件:delete (9)创建目录(建立子目录):mkdir (10)改变当前目录:cd (11)列出文件目录:dir (12)退出:logout ................................................
《现代操作系统》第四版第六章主要讨论了操作系统的内存管理和存储管理的相关内容。在这一章中,我们学习了操作系统如何管理计算机的内存资源,包括内存分配、虚拟内存和内存映射等技术。此外,我们也了解了存储管理的相关概念,包括文件系统、存储设备和磁盘管理等内容。 首先,我们学习了内存管理的重要性,以及操作系统是如何管理和分配内存资源的。内存分配是指操作系统如何将计算机的内存空间分配给不同的程序或进程,以便它们能够正常运行。虚拟内存则是指操作系统如何利用磁盘空间来扩展内存,以便能够运行更多的程序或进程。内存映射则是指操作系统如何将虚拟内存映射到物理内存,以便程序能够访问和操作内存资源。 其次,我们学习了存储管理的相关内容,包括文件系统的组织和管理、存储设备的管理以及磁盘管理的技术。文件系统是操作系统用来组织和管理存储设备上的文件目录的一种技术,它能够帮助用户方便地存储和访问文件。存储设备管理则是指操作系统如何管理计算机上的存储设备,包括硬盘、固态硬盘和光盘等设备。磁盘管理则是指操作系统如何管理磁盘上的存储空间,以便能够高效地存储和访问数据。 综上所述,《现代操作系统》第四版第六章涵盖了操作系统的内存管理和存储管理的相关内容,帮助我们更好地理解和掌握操作系统的相关技术和原理。这些知识不仅对我们理解计算机系统和性能优化有重要意义,也能够帮助我们在实际工作中更好地使用和管理计算机系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值