操作系统原理笔记(4)

操作系统第六七八章知识点总结

文件管理

文件和文件系统

数据项、记录和文件

  • 数据项
    • 基本数据项:描述以对象某种属性的字符集,如学号、姓名、年龄这些不能再细分的
    • 组合数据项:若干个基本数据项组成的,就是还可以细分的
  • 记录
    • 描述一个对象在某方面的属性,注意要有关键字key,方便查找
  • 文件
    • 多条记录组成文件

文件属性:类型、长度、物理位置、建立时间(即最后一次修改时间)

文件名和类型

  • 文件名和拓展名
  • 文件类型
    • 按用途分:系统文件、用户文件、库文件
    • 按文件数据形式:源文件、目标文件、可执行文件
    • 按存取控制属性:只执行文件、只读文件、读写文件
    • 按组织形式和处理方式分类:普通文件、目录文件、特殊文件

文件系统的层次结构

  • 对象及其属性
    • 管理对象:文件、目录、磁盘存储空间
  • 对对象操纵和管理的软件集合
    • I/O控制层、基本文件系统层、基本I/O管理程序、逻辑文件系统
  • 文件系统的接口
    • 命令接口、程序接口

文件操作

  • 最基本的文件操作
    • 创建、删除、读、写、设置读写位置
  • 文件的“打开”和“关闭”操作
  • 其他文件操作
    • 设置和获得文件的属性、查询文件状态

有关目录的,就是创建、删除、改变当前目录等

文件的逻辑结构

文件逻辑结构的类型

有结构文件:记录式文件
无结构文件:流式文件

  • 按文件是否有结构分类
    • 有结构文件(如数据库):定长记录、变长记录
    • 无结构文件(txt):源程序、可执行文件
  • 按文件的组织方式分类
    • 顺序文件:可以定长可以变长,一直按顺序下去(如犯人的记录)
    • 索引文件:加张索引表
    • 索引顺序文件:分组,组内是顺序,组头有索引

顺序文件

  • 顺序文件的排列方式
    • 串结构:要从头开始找
    • 顺序结构:有个关键字
  • 顺序文件的优缺点
    • 最高效、但交互应用中效率好差、而且增加删除一个记录困难
    • 所以要配置一个运行记录文件,按时合并

记录寻址

  • 隐式寻址方式
    • 一个一个读,读了(n-1)个才找到n
  • 显式寻址方式
    • 定长就方便,直接乘索引号即可
    • 变长就要加上Li,表示一段记录的长度
    • 或者利用关键字查找

索引文件

①按关键字建立索引
索引文件三要素:索引号、长度、指针
多个索引表的索引文件:从不同属性查找同一对象

索引顺序文件

  • 索引顺序文件的特征
    • 引入文件索引表,可以实现对索引顺序文件的随机访问;
    • 增加溢出文件,可以记录新增加、删除和修改的记录
  • 一级索引顺序文件
    • 分组,组首进入索引顺序文件
  • 两级索引顺序文件
    • 索引顺序表做组

直接文件和哈希文件

  • 直接文件
    • 关键字本身就决定记录的物理地址,所以可以直接查找,有键值转换
  • 哈希文件
    • A = H(K),通常是指向某一目录表相应表目的指针

文件目录

要求:
实现“按名存取”
提高对目录的检索速度
文件共享
允许文件重名

文件控制块和索引结点

  • 文件控制块FCB
    • 包含三类信息:基本信息、存取控制信息、使用信息
    • 基本信息:文件名、文件物理位置、文件逻辑结构、文件物理结构
    • 存取控制信息:各类人的存取权限
    • 使用信息类:建立时间、最近修改时间、当前使用信息
      ②索引结点
    • 引入:怕文件目录太大,只用文件名,轻量级文件目录
    • 磁盘索引结点:文件主标识符、文件类型、文件存取权限、文件物理地址、文件长度、文件连接计数、文件存取时间
    • 内存索引结点:索引结点编号、状态、访问计数、文件所属文件系统的逻辑设备号、链接指针

简单的文件目录

  • 单级文件目录
    • 整个文件系统只有,一张目录表,目录项有:文件名、文件扩展名、文件长度、文件类型、文件物理地址和其他属性
    • 每次创建都要搜索有没有相同的文件名
    • 优点是简单,但只实现了“按名存取”,其他三个要求没有实现
  • 两级文件目录
    • MFD→UFD
    • 会有隔离,这个结构可以有效将多个用户隔开,在各个用户完全无关时,这是一个优点。
    • 但如果要合作完成一个大任务时,这种隔离就会使诸多用户之间不便于共享

树形结构目录

  • 树形目录
    • 一个目录文件中的目录项,可以既作为目录文件的FCB,又是数据文件的FCB
  • 路径名和当前目录
    • 路径名:唯一通路,用/连接
    • 当前目录,相对路径名,绝对路径名
  • 目录操作
    • 创建、删除、不删除非空目录、可删除非空目录
    • 改变、移动、链接目录、查找目录
  • 目录查询技术
    • 线性检索法:在单级目录中,用用户提供的文件名,顺序查找;在树形目录中,就按路径名查找
    • Hash方法:建立一张Hash索引文件目录,利用Hash方法查询——利用用户提供的文件名,转换为文件目录索引值,再用索引值在目录中查找
    • 注:如果使用了通配符,就无法用Hash方法检索了
    • “冲突”:1.看目录项是否空 2.看文件名是否匹配 3. 如果不匹配,就要在Hash值加上一个常数,形成新的索引值

文件共享

基于有向无循环图实现文件共享

  • 有向无循环图DAG
    • 由附加操作Append来完成,而新增加的盘块只会出现在执行了操作的目录中,新增加的部分不能被共享
  • 利用索引结点
    • 用索引结点,任何用户对共享文件所进行的Append操作或修改,都将引起相应结点内容的改变
    • 还增加一个count链接计数
    • 其他用户在使用,拥有者删了,文件依然存在

利用符号链接实现文件共享

  • 利用符号链接的基本思想
    • 即允许一个文件或子目录有多个父目录,但只有一个是“主”父目录
  • 如何利用符号链实现共享
    • 由系统创建一个LINK类型的新文件,取名为F,并将F写入链接父目录D5中,就可以实现D5与F8的链接。新文件只有被链接文件F8的路径名——所以叫做“符号链接”——新文件的路径名被看做“符号链”
  • 利用符号链实现共享的优点
    • 用户删了链接文件,也不会删掉本来的文件;文件主删了文件,其他用户访问不了,自然会删掉符号链
  • 利用符号链的共享方式存在的问题
    • 读盘需时、符号链太多,琐碎

第八章 磁盘存储器的管理

外存的组织方式

连续组织方式、链接组织方式、索引组织方式

连续组织方式

位于同一磁道,读写不用移动磁头
优点:顺序访问容易、顺序访问速度快
缺点:要求为一个文件分配连续的存储空间、要事先知道文件长度、不够灵活删除和插入、对于动态增长的文件,很难分配空间

链接组织方式

优点:消除外部碎片,提高外存利用率;对插入、删除修改记录都非常容易;能够适应动态增长
隐式链接:一个跟一个,如同链表;碎片多;万一一个错,整个文件用不了
显式链接:将各物理块的指针显式存在内存的一个表内,每个FCB对应一个字段,因为在内存查找,所以大大提高检索速度,还减少访问磁盘的次数,而这叫做FAT

索引组织方式

  • 单级索引组织方式
    • 不支持高效直接存取,要对一个较大的文件进行存取,就要顺序地查找许多盘块号
    • FAT需要占用较大内存空间
    • 所以创造“表中表”——索引分配图
  • 多级索引组织方式
    • 就是多级,如同“全语言字典”
    • 优点:大大加快对大型文件的查找速度
  • 增量式索引组织方式
    • 增量式索引组织方式的基本思想
    • 小的用直接寻址、中的用单级索引组织方式、大的用两三级索引组织方式
    • Unix System V的组织方式:索引结点有13个地址项,前十个是直接地址,最大放40KB;第十一个是一次间接地址,1K个盘块号,允许文件长达4MB;如果还超过4MB+40KB,就放二次间接地址,有4GB;还超过,就放3次间接地址,有4TB

文件存储空间的管理

空闲表法和空闲链表法

  • 空闲表法
    • 即在外存所有空闲区建立一张空闲表,每个空闲区对于一个表项,记录序号、第一空闲盘块号、空闲盘块数
    • 分配和回收与内存相似,但在外存为加快分配速度,连续分配依然有用。小的连续分配,大的离散分配,多媒体文件依然连续分配
  • 空闲链表法
    • 空闲盘块链:一直分配,按链表分配。如果删除文件就挂在链尾
    • 优点:简单,缺点:但为一个文件分配时可能重复操作多次,分配和回收效率较低,而且盘块链会很长
    • 空闲盘区链:优点:分配回收效率较高,盘区链短;缺点复杂

位示图法

  • 位示图
    • 利用二进制的一位来表示磁盘中一个盘块的使用情况,也可以是二维数组
  • 盘块的分配
    • 扫描位示图,找到一个或一组0,之后计算盘块号: b = n(i -1)+j,修改位示图=1
  • 盘块的回收
    • 从盘块号转换为行列号:
    • i = (b-1) DIV n +1
    • j = (b-1) MOD n + 1

成组链接法

  • 空闲盘块的组织
    • 每组含有盘块总数N和该组所有盘块号记入前一组的第一个盘块的S.free(0)~S.free(99),这样各组第一个盘块可链接成一条链
  • 空闲盘块的分配与回收
    • 当栈中空闲盘块号已达100时,表示栈已满,便将先有栈中100个盘块号记入新回收的盘块中,将盘块号作为新栈底