第一章:操作系统引论

计算机系统概述

  • 计算机系统是由硬件和软件组成的

  • 硬件是软件建立活动的基础,软件是硬件功能的扩充

  • 计算机硬件结构:由CPU、内存和若干IO设备组成,他们由系统总线连接在一起,实现彼此通信

image-20220920163018481

处理器

1.CPU工作的基本周期

  • 从内存中提取指令
  • 对指令译码
  • 最后执行指令

每个CPU可以执行的指令集是专用的

2.所有CPU都包含某些寄存器

  • 通用寄存器

  • 专用寄存器

  • 程序计数器

  • 栈指针

  • PSW(程序状态字)

3.两种处理机执行状态

  • 核心态
  • 用户态

存储器

寄存器、高速缓存、内存、磁盘、磁带

image-20220920165451844

I/O设备

1.组成

通常由控制器和设备本身两部分组成

控制器、设备、设备驱动程序

2.输入和输出的工作方式

程序控制方式、 程序中断方式、DMA方式

总线

1.总线分类

数据总线、 地址总线、控制总线


什么是操作系统

操作系统概念

1.操作系统作为扩展机器

2.操作系统作为资源管理器

在这里插入图片描述

操作系统的主要功能

  1. 存储管理功能

    内存分配,地址映射,内存保护,内存扩充

  2. 处理机管理功能

    作业和进程调度,进程控制和进程通信

  3. 设备管理功能

    缓冲区管理,设备分配,设备驱动和设备无关性

  4. 文件管理功能

    文件存储空间的管理,稳健操作的一般管理,目录管理,文件的读写管理和存取控制

  5. 用户接口

    命令界面、程序界面、图形界面

操作系统的地位

计算机系统的层次关系

操作系统的服务与服务方式

1.操作系统提供的服务

2.操作系统的服务方式

(1)系统调用

系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口。它一般位于操作系统核心的最高层。系统调用类似于过程调用

(2)系统程序

它们本身并不属于操作系统的一部分

3.命令解释程序

(1)内置方式

(2)外置方式

操作系统的分类及其特征优劣

在这里插入图片描述

操作系统的发展历程

在这里插入图片描述

操作系统的特征

并发

  • 并发:两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,在微观上是交替发生的, 操作系统的并发性指系统中同时存在着多个运行的程序
  • 并行:两个或多个事件在同一时刻发生

共享

  • 共享是指计算机系统中的资源可以供内存中多个并发执行的进程共同使用
  • 共享分为两类:互斥共享和同时共享

(1)互斥共享

  • 计算机中的某个资源在一段时间内只能允许一个进程访问,别的进程没有使用权
  • 举个例子:比如QQ和微信视频。同一段时间内摄像头只能分配给其中一个进程

(2)同时共享

  • 计算机中的某个资源在在一段时间内可以同时允许多个进程访问

(3)并发性和共享性互为存在条件

在这里插入图片描述

不确定性(异步性)

  • 不确定性是指系统中各种事件发生顺序的不可预测性。
  • 只有进程在获得所需的资源后方能执行,所以进程的执行通常都不是“一气呵成”,而是以“停停走走”的方式运行。

虚拟

  • 虚拟是把一个物理实体映射为若干个对应的逻辑实体。

  • 虚拟是操作系统管理系统资源的重要手段,可提高资源利用率。

操作系统的结构

整体系统

  • 网状。
  • OS是为数众多的一组过程的集合,各过程之间可以相互调用。
  • 既庞大又杂乱。

层次式系统

上层调用下层。核心层

例如,作业调度模块须调用进程控制模块;在为某作业创建一进程时,进程控制模块又须调用内存管理模块为新进程分配内存空间,可见,进程控制模块应在内存管理模块之上; 而作业调度模块又应在更高层。 下层应用程序模块是操作系统的内核 。

模块化OS结构(增加内容)

image-20220922092849091

虚拟机

以操作系统作为底层基本平台,在它上面安装并运行虚拟机软件,划分硬盘、内存等资源为几部分,这样物理机器通过共享资源的复件实现多个虚拟机器给多个用户。CMS(内容管理程序)相当于联系代理。VMM(虚拟机监督程序)分开多道程序和扩展机器的功能。

image-20220922092941820

优点:

  • 可运行多个操作系统
  • 系统更安全
  • 方便软件研制、开发、测试
  • 组建虚拟网络

缺点:

  • 硬件要求高
  • 实现复杂
  • 运行任务速度受影响。

目前常用的虚拟机软件: VMware Workstation\

客户-服务器系统

操作系统被划分成的各个服务器运行在用户态,微内核,安全。

  • 所有这些服务器(进程)都运行在用户态。
  • 微内核,用来处理客户和服务器之间的通信, 即由内核来接收客户的请求,再将该请求送至相应的服务器;同时它也接收服务器的应答, 并将此应答回送给请求客户。

image-20220922093037332

第二章:进程和线程

进程的定义

进程的概念

程序就是一个指令序列

早期的计算机(只支持单道程序),同一时间内只允许一个程序执行。后来出现了多道程序技术

系统为每个运行额度程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息

PCB是程序存在的唯一标志

进程定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程

进程的特征

image-20221024193817836

进程的组成

进程(进程实体)由程序段、数据段、PCB三部分组成。

image-20221024193334912

进程的状态及转换

进程的状态

进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU服务,可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。

image-20221024194744107

另外两种状态

进程状态的转换

  1. 运行态→阻塞态是种进程自身做出的主动行为
  2. 阻塞态→就绪态是不是进程自身能控制的,是种被动行为
  3. 注意:不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态(因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求)

进程管理

进程的创建

  1. 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的)。若PCB申请失败,则创建失败。
  2. 为进程分配资源,为新进程的程序和数据及用户栈分配必要的内存空间(在PCB中体现)。注意,若资源不足(如内存空间),则并不是创建失败,而是处于阻塞态,等待内存资源。
  3. 初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
  4. 若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。

进程的中止

  1. 找到指定进程的PCB
  2. 终止该进程的运行
  3. 回收该进程所占用的全部资源
  4. 终止其所有子孙进程,回收它们所占用的全部资源。
  5. 将被终止进程的PCB从原来队列中摘走

进程的阻塞

  1. 立即停止当前进程的执行
  2. 现行进程的CPU现场保存
  3. 现行状态由“运行”改为“阻塞”
  4. 转到进程调度程序

进程的唤醒

  1. 把阻塞进程从相应的阻塞队列中摘下。
  2. 将现行状态改为就绪状态,然后把该进程插入就绪队列中。
  3. 如果被唤醒的进程比当前运行进程的优先级更高,则设置重新调度标志。

进程通信

  • 进程通信就是指进程之间的信息交换。
  • 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
  • 一个进程不能直接访问另一个进程的地址空间

低级通信

  • 低级通信:只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量和管程机制。
  • 优点:速度快
  • 缺点
    • 传送信息量小,效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。
    • 编程复杂,用户直接实现通信的细节,容易出错。

高级通信

  • 高级通信:能够传送任意数量的数据
  • 三种高级通信方式:共享存储器方式、消息传递方式、管道文件方式

共享存储

  • 两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。
  • 操作系统只负责提供共享空间和同步互斥工具(如P、V操作)
image-20221024203148392

基于数据结构的共享

基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

基于存储区的共享

基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。

管道通信

“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区

image-20221024203514453

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道

  2. 各进程要互斥地访问管道。

  3. 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞

  4. 如果没写满,就不允许读。如果没读空,就不允许写

  5. 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

消息传递

进程间的数据交换以格式化的消息(Message)为单位。

进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

方式 说明
直接通信方式 发送进程直接将消息挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中得到消息
间接通信方式 发送进程将消息送到称做信箱的中间设施上,接收进程从信箱中取得消息,也称为信箱通信方式。(有人往信箱放,有人从信箱取)

间接通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统。

客户-服务器系统中的通信

socket

  • 好像一条通信线两端的接插口。
  • 一对进程通过网络进行通信要用一对socket,每个进程一个。
  • 三个要素:
    1. 网络地址表明一个socket用于哪种网络。
    2. 连接类型表明网络通信所遵循的模式,主要分为“有连接”和“无连接”模式。
    3. 网络规程表明具体网络的规程。一般,网络地址和连接类型结合在一起就基本上确定了适用的规程。
image-20221028202329068

远程过程调用(RPC)

  • 远程过程调用(Remote Procedure Call, RPC)是远程服务的一种最常见的形式。

  • 远程过程调用的思想:

    允许程序调用另外机器上的过程。

具体步骤:

  1. 客户过程调用客户代理
  2. 客户代理构造一个消息,并且陷入内核
  3. 本地内核发送消息给远程内核
  4. 远程内核把消息送给服务器代理
  5. 服务器代理从信包中取出参数,并调用服务器
  6. 服务器完成相应的服务,并将结果送给服务器代理
  7. 服务器代理将结果打包形成消息,并且陷入内核
  8. 远程内核发送消息给客户机内核
  9. 客户机内核把消息传给客户代理
  10. 客户代理取出结果,返回给客户的调用程序

线程

  • 线程必须在某个进程内执行
  • 一个进程可以包含一个线程或多个线程

线程(thread)是一个基本的CPU执行单元,也是程序执行流的最小单位。

线程结构

代码和数据来自进程。

各类资源来自进程。

线程控制块(Thread Control Block, TCB)

  • 线程ID
  • 程序计数器PC
  • 寄存器集
  • 栈空间

线程和进程对比

项目 进程 线程
代码 进程包含线程 线程是进程中的一段代码
资源 进程是资源分配的基本单位 线程不拥有资源,共享使用进程的资源
调度 同一进程中的线程切换不会引起进程切换 线程是基本的调度单位
切换 进程用于重量级上下文切换,代价大 线程用于轻量级切换,代价小
生命周期 进程撤销会导致它的所有线程被撤销 线程撤销不会影响进程
  • 进程是资源(包括内存、打开的文件等)分配的单位,线程是 CPU 调度的单位;
  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈;
  • 线程同样具有运行、阻塞、就绪、终止四种基本状态,同样具有状态之间的转换关系;
  • 线程能减少并发执行的时间和空间开销;

线程的管理

  • 线程创建
  • 线程终止
  • 线程等待
  • 线程让权

进程的同步与互斥

第三章:死锁

死锁概念

死锁、饥饿、死循环的区别

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。(可以利用FCFS资源分配策略来避免饥饿)

死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑bug导致的,有时是程序员故意设计的。

image-20220928214350079

死锁的条件

当计算机系统同时具备下面4个必要条件时,会发生死锁。

1.互斥条件

2.占有且等待条件(请求并保持)

3.不可抢占条件(不可剥夺)

4.循环等待条件(环路等待)

处理死锁的方法

1.预防死锁。破坏死锁产生的四个必要条件中的一个或几个。

2.避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)

3.死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措
施解除死锁。

死锁的预防

破坏互斥条件

如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。

缺点

并不是所有的资源都可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。

破坏占有且等待条件

image-20220928223255670

破坏非抢占条件

image-20220928222739939

破坏循环等待条件

image-20220928223220047

死锁的避免

安全状态

系统至少能够按照某种次序分配资源(直至最大需求),并且使它们依次成功地运行完毕,这种进程序列{P1,P2,……,Pn}就是安全序列。

资源分配图

image-20221003101716908

示例

  • 如果系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时是不会阻塞的,可以顺利地执行下去。

  • 如果这个进程执行结束了把资源归还系统,就可能使某些正在等待资源的进程被激活,并顺利地执行下去。

  • 相应的,这些被激活的进程执行完了之后又会归还一些资源.这样可能又会激活另外一些阳塞的讲程.

银行家算法

概念

image-20221003101037536

例题

image-20221003144043179

image-20221003144124594

image-20221003144143468

image-20221003144205962

image-20221003144213806

优缺点

优点:

  • 允许存在死锁必要条件的前三个,即互斥条件、占有且申请条件、不可抢占条件;

  • 限制条件少了,资源利用率提高了。

缺点:

  • 要求进程数保持不变,在多道程序系统中难以做到;

  • 算法仅保证所有进程在有限的时间内得到满足,不一定能够快速响应(如实时进程);

  • 要寻找安全序列,增加了系统开销。

死锁的检测和恢复

死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,且能通过外力破坏死锁发生的必要条件,从而使并发进程从死锁状态中解脱出来.

算法:

  • 对单体资源类的死锁检测——等待图

  • 对多体资源类的死锁检测——检测算法(与安全性算法类似)

对单体资源类的死锁检测

等待图:它是从资源分配图中去掉表示资源类的节点,且把相应边折叠在一起得到的。

检测依据:当且仅当等待图中有环路,系统存在死锁。

image-20221003153737948

对多体资源类的死锁检测

  • 检测算法采用若干随时间变化的数据结构,与银行家算法中所用的结构相似。

    • Available是一个长度为m的向量

    • Allocation是一个n×m的矩阵

    • Request是一个n×m的矩阵

  • 检测算法只是简单地调查尚待完成的各个进程所有可能的分配序列。

image-20221008171112116

死锁检测的时机

  • 取决两个因素:

    • 死锁出现的频繁程度

    • 有多少个进程受死锁的影响

  • 检测时机

    • 有资源请求时就检测

    • 定时检测

    • CPU使用率低于规定下限值时,进行检测

      • 死锁涉及较多进程时,CPU经常闲置

从死锁中恢复

主要有三种恢复方式:

  • 通过抢占资源实现恢复

  • 通过回退执行实现恢复

  • 通过杀掉进程实现恢复

通过抢占资源实现恢复

  • 挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程,直至死锁环路被打破。

  • 注意:要防止被挂起的进程长时间得不到资源

通过回退执行实现恢复

  • 让一个或多个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。

  • 注意:要求系统保持进程的历史信息,设置还原点。

通过杀掉进程实现恢复

  • 杀掉进程,回收资源:

    • 终止所有的死锁进程。

    • 一次终止一个进程,直至消除死锁环路。

  • 终止进程的选择依据:

    • 进程优先级;

    • 已运行时间,剩余时间;

    • 使用资源及资源类型;

    • 还需要多少资源?

    • 进程是交互式的,还是批处理程序?

处理死锁的综合方式

  • 把以前介绍的基本方法组合起来,使得系统中各级资源都以最优的方式加以利用。

  • 针对不同资源类采用不同策略。

操作系统处理死锁的三种方法比较

image-20221003162236660

第四章:调度

第五章:存储器管理

分页技术

分页存储管理的基本概念

第六章:文件系统

概述

文件分类

按文件的内部构造和处理方式分类

  • 普通文件——由ASCII码或二进制码组成的字符文件

    包括:源程序文件、数据文件、目标代码文件、系统文件、库文件等。一般存放在外存上。

  • 特别文件——特指各种外部设备

    • 特别文件分为字符特别文件和块特别文件。
    • 字符特别文件是有关输入输出的设备,如终端、打印机等;
    • 块特别文件是存储信息的设备,如硬盘、软盘和磁带等。
  • 目录文件—— 由下属文件的目录项构成

    • 用来管理和实现文件系统功能的系统文件,通过目录文件可以对其他文件的信息进行检索
    • 目录文件类似于人事管理方面的花名册,本身不记录个人的档案信息,仅仅列出姓名和档案分类编号

文件的逻辑结构

从逻辑结构上看,文件可分为有结构的记录式文件无结构的流式文件两种形式。

无结构文件

  • 指文件内部不再划分记录,是由一组相关信息组成的有序字符流。又称流式文件。
  • 长度按字节计算。大量源程序、可执行程序、库函数都是流式文件。
  • 在UNIX系统中所有文件都被视为流式文件,系统不对文件进行格式处理。

有结构文件

  • 文件是由若干相关记录组成,且对每个记录编上号码。又称记录式文件。
  • 数据库文件就是有结构文件。
    • 定长记录文件
    • 变长记录文件
  • 树形文件是一种有结构的文件。

文件的物理结构

物理结构主要依赖于文件存储器(磁带、磁盘、光盘等)的物理特性及用户对文件的访问方式。

  • 顺序存取:基于磁带的存取模式。读操作按照文件指针指示的位置读取文件内容,文件指针自动向前推进。写操作把信息附加到文件的末尾。
  • 随机存取:基于磁盘的存取模式。允许以任意顺序读取文件,主要用于对大批数据的立即访问。
  • 索引存取:建立在随机存取之上。

顺序结构

  • 逻辑文件在辅存上连续存储,其物理结构即为顺序结构。
  • 顺序结构适合对文件的顺序访问。
  • 对文件执行增补或删除只能在文件末端进行
img

链接结构

文件在辅存中是散布在非连续的若干物理块中的,用向前指针把每个记录依次链接起来。
空间利用率高,文件操作(增加、删除)灵活。

img

索引结构

文件的全部逻辑记录散存于辅存的各物理块中,为文件建立一张索引表,存放逻辑记录编号、长度、在辅存的位置。

img

文件系统的功能和结构

文件系统的功能

操作系统中负责操纵和管理文件的一整套设施

文件系统应具备以下功能

  1. 文件管理
  2. 目录管理
  3. 文件存储空间管理
  4. 文件的共享和保护
  5. 提供方便的接口

文件系统的结构

文件系统的层次结构

img

逻辑文件系统

最上层是逻辑文件系统,它管理元数据信息。

  • 元数据包括除实际数据(文件内容)以外的所有文件系统结构。
  • 创建文件控制块。
  • 管理目录结构。
  • 实现按名存取。
  • 负责文件的保护和安全。
  • 提供文件组织模块需要的信息。

文件组织模块

文件组织模块把文件的逻辑块地址转换成物理块地址,传送给基本文件系统。负责管理空闲盘空间,记载文件系统中未分配的盘块。

基本文件系统

基本文件系统只需向相应的设备驱动程序发出通用命令,令其读/写盘上的物理块。

IO控制

包括设备驱动程序和中断处理程序,实现内存和磁盘系统之间的信息传送。接收高级命令,输出低层的硬件专用指令,传送给控制器使用。

目录结构和目录查询

文件控制块

  • 为了便于对文件进行控制和管理,在文件系统内部,给每个文件唯一地设置一个文件控制块。
  • 文件控制块存储:文件名、文件类型、大小、属性、保护信息、位置、使用计数、时间
  • 核心利用这种结构对文件实施各种管理。按名存取时,先找到文件控制块,验证权限,合法时才能取得存放文件信息的盘块地址。

单级目录结构

单级目录结构

优点

简单,能够实现按名存取

缺点

  • 查找速度慢
  • 不允许重名
  • 不便于共享
    • 这里的共享指的是相同的文件只存储一次,使用不同的文件名(不同的路径)访问这个文件。
    • 单级目录要求所有用户用同一名字来访问同一个文件

二级目录结构

二级目录结构

优点

  • 不同用户可以有相同的文件名

  • 提高了检索目录的速度

  • 不同用户可以用不同的文件名访问系统中相同的文件,但该文件要各自存储

缺点

不便于多个用户对某些盘区共同操作,不利于文件共享。

树形目录结构

image-20221027211444566

在这里插入图片描述

优点

文件层次和隶属关系很清晰,便于实现不同级别的存取保护和文件系统的动态装卸。

缺点

  • 只能在用户级对文件进行临时共享。
    • 文件主创建一个文件并指定对其共享权限后,有权共享的用户可以利用相同的路径名对其实施限定操作。
    • 当文件主删除文件后,其他用户就无法再使用该文件。

非循环图目录结构

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

在这里插入图片描述

image-20221027211809951

目录查询方法

  • 为了实现用户对文件的按名存取,系统要对文件目录进行查询,找出该文件的文件控制块或索引节点,进而找到该文件的物理地址,对其进行读写操作。

  • 如何查询目录涉及目录管理算法,它对文件系统的效率、性能和可靠性有很大的影响。

线性检索法

又称顺序检索法。目录文件由目录项构成一个线性表,每个目录项包括文件名和指向数据块的指针

特点:简单易行,速度慢

image-20221027213000148

散列法

  • 散列法需要有散列表和目录文件,每个散列值是由文件名计算出来的,并且散列表项中有指向线性表中文件名的指针。利用线性表存放目录项,利用散列表进行检索。

  • 维护和控制困难,容易造成目录混乱。

image-20221027212315734

文件和目录操作

文件操作

  1. 创建文件create
  2. 删除文件delete
  3. 打开文件open
  4. 关闭文件close
  5. 读文件read
  6. 写文件write
  7. 附加文件append
  8. 读写定位seek
  9. 取文件属性get_attributes
  10. 置文件属性set_attributes
  11. 重新命名文件rename

目录操作

  1. 创建目录create
  2. 删除目录delete
  3. 打开目录opendir
  4. 关闭目录closedir
  5. 读目录readdir
  6. 重新命名目录rename
  7. 链接文件link
  8. 解除链接unlink

文件系统的实现

文件存储分配

详情参考:https://blog.csdn.net/weixin_43914604/article/details/106303759,内容非常清晰,同时这里可能会考计算题。

连续分配

连续分配方法要求把逻辑文件中的信息顺序地存放到一组邻接的物理盘块中

image-20221028203425532

优点

  • 在顺序存取时速度较快,一次可以存取多个盘块,改进了I/O性能;
  • 很容易直接存取文件中的任意一块,如文件的起始块是b,则访问第i块的地址是b+i。

缺点

  • 要求建立文件时就确定它的长度(预先说明文件的大小),依此分配存储空间,很难实现;
  • 不便于文件的动态扩充;
  • 可能出现外部碎片,有时需要紧缩

链接分配

为了克服连续分配的缺点,把一个逻辑上连续的文件分散存放在不同的物理块中,这些物理块用指针链接起来

image-20221028203549760

优点

  • 解决了连续分配的缺点,便于文件动态增长;

  • 不会产生磁盘的外部碎片,不需要紧缩磁盘空间。

缺点

  • 适于对信息的顺序访问,不利于对文件的随机存取。
    • 如为了存取第i块,必须从头向后顺序检索。
  • 每个物理块上增加一个链接字,增加空间开销。
  • 一旦中间的链接字丢失,则后面的内容找不到,可靠性低。
    • 可以考虑双向指针

索引分配

为每个文件创建一个索引表,索引表中存放文件所在磁盘的物理块号。索引表本身也放在盘块中

image-20221028203757070

优点

  • 索引分配结合了顺序分配和链接分配的优点,并克服了它们的缺点。
  • 文件可动态增长;没有外部碎片,不需要紧缩。
  • 方便进行随机存取,可靠性高。

缺点

  • 索引表增加了空间的开销;
  • 两次访盘,存取速度下降。
  • 解决办法:可以把索引表部分或全部放入内存。以内存空间代价换取存取速度

多重索引文件分配

采用间接索引方式

空闲存储空间的管理

参考链接:https://blog.csdn.net/weixin_43914604/article/details/106373112

文件系统的可靠性

造成数据丢失或数据损坏的原因有多种:

  1. 用户误操作,强行删除或覆盖一些重要文件
  2. 硬件发生故障
  3. 软件本身存在故障而造成数据丢失

为了提高文件系统的可靠性,常用的方法有:

  1. 磁盘坏块管理
  2. 后备
  3. 盘块一致性检查和文件一致性检查

第七章:输入输出系统