全国计算机四级——操作系统原理笔记

学习建议:结合书和笔记把知识过一遍 —> 买题库刷试卷 —> 始终学不明白的题目去刷章节题目 —> 背新增试卷题目

关于本笔记:写者参加2022年5月的考试,参考《全国计算机等级考试四级教程操作系统原理(2021年版)》和网上的一些资源,在看书的过程中写下本笔记,基于markdown。笔记中黄色高亮的都是试卷中出现过的或者比较重要的概念,可以重点记忆一下。读者可以通过浏览本笔记,了解操作系统原理大致内容以及重点位置,然后一直刷题。备考时间仓促,笔记中难免有错误的地方,读者可以自行加以修改。

zhzeng

2022-05-29

百度网盘链接:PDF格式笔记
提取码:1234

其他学习资源:知乎的两篇题目类型总结和解析,写的很不错!

  1. 知乎——操作系统1
  2. 知乎——操作系统2

文章目录

  • 第一章 操作系统概论
    • 操作系统的概念
      • 计算机系统
      • 操作系统的定义
      • 操作系统的特征
      • 研究操作系统的观点
      • 操作系统的功能
    • 操作系统发展
    • 操作系统的分类
      • 批处理操作系统
      • SPOOLing技术
      • 分时系统
      • 实时操作系统
      • 嵌入式操作系统
      • 个人计算机操作系统
      • 网络操作系统
      • 分布式操作系统
      • 智能卡操作系统
    • 操作系统结构
      • 整体式结构
      • 层次结构
      • 微内核(客户机/服务器)结构
  • 第二章 操作系统运行机制
    • 中央处理器CPU
      • CPU的构成和基本工作方式
      • 特权指令和非特权指令
      • 处理器的状态
      • 程序状态字PSW
    • 存储体系
      • 存储器的层次结构
      • 存储保护
    • 中断与异常机制
      • 中断与异常的概念和分类
      • 中断系统
    • 系统调用
      • 系统调用简介
      • 系统调用处理过程
    • I/O技术
    • 时钟
  • 第三章 进程线程模型
    • 多道程序设计模型
      • 程序的顺序执行
      • 多道程序设计环境的变化
      • 程序的并发执行
    • 进程模型
      • 进程的概念
      • 进程的状态及其状态的转换:
      • 进程控制块(PCB)
      • 进程控制
    • 线程模型
      • 线程的引入
      • 线程的概念
      • 线程实现机制
      • Pthread线程包
    • 进程(线程)调度
      • 概述
      • 调度算法设计原则
      • 进程(线程)调度算法
  • 第三章 并发与同步
    • 进程(线程)间相互作用
    • 进程互斥
    • 信号量
    • 经典的线程同步问题
    • 管程
    • 进程通信
      • 共享内存
      • 消息机制
  • 第五章 内存管理
    • 基本概念
      • 存储体系
      • 存储管理的任务
      • 地址转换
    • 分区存储管理方案
      • 固定分区
      • 可变分区
      • 分区管理方案的优缺点
    • 覆盖技术与交换技术
      • 覆盖技术
      • 交换技术
    • 页式存储管理方案
      • 基本思想
      • 存储空间的分配与回收
      • 地址转换与快表
    • 虚拟存储技术与虚拟页式存储管理方案的实现
      • 虚拟存储技术
      • 虚拟页式存储管理
      • 段式与段页式存储管理方案
  • 文件管理
    • 概述
      • 文件和文件系统
      • 文件分类
      • 文件系统的功能
    • 文件的结构
      • 文件的逻辑结构
      • 文件的物理结构
      • 文件的存储介质
      • 文件的存取方式
    • 文件目录
      • 文件目录的组成
      • 文件目录结构
      • 树形目录
      • 路径名
      • 目录操作
    • 文件系统的实现
      • 存储空间的分配和回收
      • 实现文件系统的表目
      • 记录的成组与分解
      • 文件的操作
    • 文件的保护和安全
      • 文件的共享
      • 文件的保护
      • 文件的存取权限
      • 文件的保密
    • 文件系统的性能
    • Windows的FAT文件系统和UNIX文件系统
      • Windows的FAT文件系统
      • UNIX文件系统
  • 第七章 I/O设备管理
    • 设备与设备分类
      • 设备管理的重要性
      • 设备管理的任务
      • 设备的分类
    • I/O硬件组成
      • 计算机I/O系统的结构
      • I/O设备数据传送控制方式
    • I/O软件的特点及结构
      • 设备驱动程序
      • 与设备无关的系统软件
      • 用户空间的I/O软件
    • 典型的I/O技术
      • 缓冲技术
      • 设备分配技术
    • I/O性能问题及解决方案
  • 第八章 死锁
    • 死锁基本概念
      • 死锁的概念
      • 死锁产生的原因
      • 产生死锁的必要条件
      • 解决死锁的方法
    • 死锁预防
      • 破环“互斥”条件
      • 破环“不可剥夺”条件
      • 破环“请求和保持”条件
      • 破环“循环等待”条件
    • 死锁避免
      • 安全与不安全状态
      • 银行家算法
    • 死锁检测与解除
      • 死锁检测
      • 死锁解除
    • 资源分配图
      • 死锁的表示——资源分配图
      • 死锁判定法则
      • 资源分配图化简法

第一章 操作系统概论

操作系统的概念


计算机系统

定义:计算机系统是一种可以按用户的要求接收和存储信息,自动进行数据处理并输出结果信息的系统。计算机系统(系统资源)包含:

  • 硬件系统(硬件资源):计算机系统工作的实体承载平台,中央处理器( CPU)、内存储器、外存储器以及各类型的输入/输出设备(键盘、鼠标、显示器、打印机等)。
  • 系统软件(软件资源):保障计算机系统按用户指定的要协调工作的系统,由各种程序和数据组成,包括应用软件、支撑软件和系统软件。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1Jyc5RI-1653824653094)(:/3dcdf5d648d64009bd7b22d33cfb151e)]
    通讯录不是操作系统管理的系统资源,而时钟是。

操作系统的定义

操作系统是计算机系统中的一个系统软件,操作系统的任务是:

  1. 组织和管理计算机系统中的硬件及软件资源;
  2. 向用户提供各种服务功能,如面向程序开发者的程序设计接口、面向用户的用户接口(命令输入和系统调用)。

操作系统的特征

  1. 并发性:指在计算机系统中同时存在若干个运行着的程序,在宏观上看,这些程序在同时向前推进;
  2. 共享性:指操作系统程序与多个用户程序共用系统中的各种资源,包括中央处理器,内存储器,外存储器和外部设备(互斥共享,如打印机,同时共享,如硬盘);
  3. 随机性:不能对所运行的程序行为以及硬件设备情况作出任何事先假定,是在一种随机的环境下进行的。

研究操作系统的观点

对于操作系统本质的不用看法

  1. 软件的观点:操作系统是一种大型软件系统,多功能程序集合;
  2. 资源管理的观点:操作系统负责记录资源请求与分配的过程,提供一些机制去协调程序间的竞争与同步,以及虚拟技术来扩充资源等。在计算机系统中,硬件和软件基本资源可以分为以下几部分:中央处理器、储存器(内存和外存)、外部设备和信息(文件)
  3. 进程的观点::操作系统负责控制和协调运行中的程序;
  4. 虚机器的观点:操作系统把原来计算机(裸机)扩充为功能强、使用方便的计算机系统;
  5. 服务提供者的观点:操作系统提供了一系列功能和使得的工作环境为用户服务,为用户使用便利,该服务提供者提供了一组功能强大、方便、易用的广义指令(称为系统调用)。

操作系统的功能

  1. 进程管理:对中央处理器进行管理,又称处理器管理,控制程序执行以使得CPU资源得到充分的利用;
  2. 存储管理:管理计算机内存的资源,包括内存的分配与回收、存储保护、存储共享和内存扩充;
  3. 文件管理:有效支持文件存储、检索和修改等操作解决文件共享、保密和保护问题,以使用户方便、安全地问文件;
  4. 设备管理:操作系统向用户提供设备管理;
  5. 用户接口:操作系统是用户与计算机系统间的接口,包括命令和、程序接口(一组系统调用)、图形见界面接口。

操作系统发展


手工操作—>监控程序—>多道批处理—>分时系统—>UNIX通用操作系统—>个人计算机操作系统—>Android操作系统。

操作系统的分类


批处理操作系统

  1. 设计思想:收集打包成批作业,启动操作系统自动控制执行;
  2. 优点:系统资源利用率高,作业吞吐率高,整个系统效率高
  3. 缺点:用户不能直接与计算机交互,不适合调试程序
  4. 一般指令和特权指令:用户模式(为用户服务的用户模式称为目态) , 是一般指令。特权模式(为系统专用的特权模式称为管态),是特权指令,包括输入输出指令、停机指令等,只有监控程序才能执行特权指令。用户程序通过系统调用实现特权指令,可以实现目态到管态的转换。

SPOOLing技术

  1. 设计思想:在内存中同时保持多个作业,主机可以以交替的方式同时处理多个作业。在多道批处理系统中,关键技术就是多道程序运行、SPOOLing技术(假脱机技术)等;
  2. 通道:专门用来控制输入输出的硬件,实现输出输出操作和处理器动作的自动并行处理。例如,打印机打印流程。

分时系统

  1. 设计思想:操作系统以时间片为单位,轮流为每个终端用户服务。
  2. 特点:分时操作系统追求的目标是及时响应用户输入的交互命令,分时在前,批处理在后
    • 多路行:指有多个用户在同时使用一台计算机;
    • 交互性:指用户根据系统响应的结果提出下一个请求;
    • 独占性:指每个用户感觉不到计算机为其他人服务,因为处理速度快;
    • 及时性:指系统能够对用户提出的请求及时响应;
  3. 影响时间片值设置的主要因素是:
    • 系统响应时间;
    • 就绪进程的数目;
    • 计算机的处理能力;

实时操作系统

  1. 设计思想:在严格时间范围内,对外部请求做出反应,系统具有高度可靠性。严重后果—>硬实时系统,通常无灾难性的后果—>软实时系统。

嵌入式操作系统

运行在嵌入式芯片环境中,对整个芯片以及它所操作、控制的各种部件装置等资源进行统协调、调度、指挥和控制的系统软件。

个人计算机操作系统

  1. 单用户多任务操作系统,如MS-DOS、WIN95、WIN98 等;
  2. 多用户多任务操作系统,如WINXP、WIN7、LINUX 等。

网络操作系统

为计算机网络配置的操作系统,包括网络管理、通信、安全、资源共享和各种网络应用(WEB\DNS\DHCP\F TP\EMAILVAD 等)。
多用户多任务网络操作系统: WIN2003、WIN2008、LINUX。

分布式操作系统

  1. 设计思想:将大量的计算机通过网络联结在一起,可以获得极高的运算能力及广泛的数据共享;
  2. 特点
    • 统一的操作系统;
    • 实现资源的深度共享:迁移式共享;
    • 透明性:感受到本地主机和非本地主机的区别;
    • 自治性:平等地位,一个主机的失效一般不会影响整个分布式系统;
  3. 集群:分布式系统的一种,由群处理器密集构成,集群操作系统专门服务于这样的集群。以低成本和以太网设备构造出性能相当于超级计算机运算性能的集群。

智能卡操作系统

智能卡中的集成电路包括中央处理器CPU,实际上是一台卡上的单片机操作系统。

操作系统结构


整体式结构

将总功能分解为若干个子功能,即根据完成的功能来划分(模块组合法),实现每个子功能程序的称模块。

  1. 优点:结构紧密,接口简单直接,系统效率较高;
  2. 缺点:独立性差、随意性差、可适应性差。

层次结构

把操作系统的所有功能模块,按功能流程图的调用次序,分别将模块排列成若干层,各层间模块单向依赖或单向调用关系,使模块间调用的无序性(整体式结构)变为有序性。

  1. 优点:整体问题局部化,各模块组织结构和依赖关系清断明了;
  2. 层次式结构分层原则:
    • 适应性:为方便移植,当硬件环境改变时,放在紧靠硬件的最低层通过BIOS 修改;
    • 多操作方式:共同使用的基本部分放在内层,改变的部分放在外层;

微内核(客户机/服务器)结构

采用客户机/服务器结构的操作系统就适宜于应用在网络环境下分布式处理的计算机环境中,称为微内核结构。

  1. 特点:
    • 运行在核心态(特权态度,也称管态)的内核,内核提供基本操作,如线程调度、虚拟存储、消息传递、设备驱动以及内核原语操作集和中断处理等。提供一个很小的功能集合,称为微内核;
    • 运行在用户态(非特权状态,也称目态)的进程层,除内核外,操作系统所有其它部分被分成若个相对独立的进程,实现一组服务,称为服务进程。提供系统功能、文件系统服务以及网络服务等
  2. 优点:
    • 可靠:各分支独立,不受其它组成部分损坏或崩溃;
    • 灵活:各接口规范且版主维护性好;
    • 分布式:分布式处理能力;
  3. 缺点:效率较低,不适用于通信频繁的系统。

第二章 操作系统运行机制

中央处理器CPU


CPU的构成和基本工作方式

  1. 一般CPU由运算器、控制器、寄存器及高速缓存组成:
    • 运算器:实现任何指令中的算术和逻辑运算,是计算机计算的核心
    • 控制器:负责控制程序运行的流程,包括取指令、维护CPU 状态、CPU 与内存的交互等。
    • 寄存器:是指令在CPU 内部作处理的过程中暂存数据、地址以及指令信息的存储设备。
    • 高速缓存:处于CPU 和物理内存间,由控制器中的内存管理单元( Memory Management Unit, MMU )管理,速度快于内存,低于寄存器
  2. 处理器中的寄存器:
    • 用户可见寄存器,对程序运行速度影响很大:
      • 数据寄存器:通用寄存器,主要用于各种算术逻辑指令和访存指令,对具有浮点能力和多媒体能力的处理器来说,浮点处理过程的数据寄存器和整数处理时的数据寄存器般是分离的;
      • 地址寄存器:用于存储数据及指令的物理地址、线性地址或有效地址,用于某种特定方式的寻址如变址寄存器、段指针、栈指针等;
      • 条件码寄存器:保存在CPU 操作结果的各种标记位这些标记在条件分支指令中被测试,以控制程序指令的流向;
    • 控制和状态寄存器(不可见),操作控制处理器:
      • 控制和状态寄存器:用于控制处理器的操作,一般由具有特权的操作系统代码使用以控制其它程
        序的执行;
      • 程序计数器(Program Countef(PC 记录将要取出的指令的地址;
      • 指令寄存器(Instruction Register ,IR) :包含最近取出的指令;
      • 程序状态字(Program Status Word, PSW) :记录处理器运行模式信息。
  3. 执行指令的基本过程:处理器从存储器读取一条指令—>执行指令。
  4. 中央处理器CPU完成的工作:取指令、设置CPU状态、响应中断请求。

特权指令和非特权指令

单用户、单任务:全部指令。
多用户、多任务:区分特权指令和非特权指令。

  1. 特权指令:只能由操作系统使用的指令,不允许般用户使用。如:启动某设备、设置时钟、控制中断等;
  2. 非特权指令:一般用户使用的,只有简单权限。如:打开、新建、访问、读取等。

处理器的状态

  1. 管态和目态
    • 管态:指操作系统管理程序运行的状态,具有较高特权级别,又称特权态(特态)、系统、内核态
    • 目态:指用户程序运行时的状态,具有较低特权级别,又称普通态(普态)、用户态;
  2. CPU状态的转换
    • 目态到管态的转换:其转换的途径是通过中断或异常中断响应时交换中断向量,新中断向量中的PSW 程序状态字的CPU 状态位标志为管态;
    • 管态到目态的转换:通过设置PSW 指令实现从操作系统向用户程序转换系统启动时CPU 初始状态为管态,装入操作系统;操作系统退出执行时,让用户程序在目态执行。

程序状态字PSW

  1. CPU 工作状态代码:指明管态还是目态是操作系统还是用户;
  2. 条件码:反映指令执行后的结果特征;
    • CF :进位标志位,若算术操作产生的结果在最高有效位发生进位或借位则将其置1;
    • ZF :结果为零标志位,若结果为0 则将其置1 ,反之清零;
    • SF :符号标志位OF :溢出标志位;
    • OF :溢出标志位;
    • PF:奇偶位,如果结果的最低有效字节包含偶数个1 位则该位置1,否则清零 ;
  3. 中断屏蔽码:指出是否允许中断;
    • TF:陷阱标志位;
    • IF:中断使能(中断屏蔽)标志位;
    • VIF:虚拟中断标志位;
    • VIP:虚拟中断待决标志位;
    • IOPL: IO 特权级别;

存储体系


存储器的层次结构

  1. 容量:是存储系统的基础;主存-辅存结构用来解决存储系统容量的问题
  2. 速度:要能匹配处理器的速度;寄存器>Cache>内存,Cache-主存结构用来解决CPU与主存速度不匹配的问题
  3. 成本:选择合适的存储器的成本范围;

存储保护

对主存中的信息加以严格的保护,使操作及其它程序不被破坏,是其正确运行的基本条件之一。

  1. 界地址寄存器(界限寄存器):存放用户作业在主存中的下限和上限地址,越界中断或存储保护中断;
  2. 存储键:一个由二进位组成存储保护键附加在每个存储块上;

中断与异常机制


中断与异常的概念和分类

  1. 中断:指CPU 对系统中或系统外发生的异步事件的响应,是所有要打断处理器的正常工作次序,并要求去处理某一件事情的一种常用手段。包括时钟中断、输入输出中断、控制台中断和硬件故障中断等。
    • 中断源:引起中断的事件称为中断事件或中断源;
    • 中断请求:中断源向处理器发出的请求信号;
    • 中断处理程序:处理中断事件的那段程序;
    • 中断断点:发生中断时正在执行的程序的暂停点;
    • 中断响应:处理器暂停当前程序转向处理中断的过程;
    • 中断返回:中断处理结束后恢复原来程序的执行;
    • 中断字:一个计算机系统提供的中断源的有序集合;
    • 中断向量表:中断处理程序入口地址映射表;
    • 中断向量:中断处理程序入口地址,由程序状态字PSW 和指令计数器PC 值组成;
    • 中断作用:能充分发挥处理器的使用效率,提高系统的实时能力;
  2. 异常:由正在执行的指令引发的,属于内因。包括程序性中断,如算术溢出、被除零、虚拟储存中的缺页等,和访管指令(系统服务请求)异常

中断系统

  1. 中断请求的接收:在计算机硬件的中断逻辑线路和中断寄存器实现,中断逻辑线路中有若干个专接受中断信号的触发器,每个触发器称中断位,全部触发器称为中断寄存器。
    • 触发器值为1 时,表示该触发器收到中断信号(变化状态);
    • 触发器值为0 时,表示该触发器无中断信号(初始状态);
  2. 中断响应的机制:处理器的控制部件中设置有中断信号扫描结构,在每条指令执行周期内的最后时刻扫描中断寄存器查看是否有中断信号到来。
    • 无中断信号:处理器继续执行下一条指令;
    • 有中断信号:处理器接收由硬件中断装置发来的中断向量代号;
      中断请求响应工作过程:
      (1)处理器接收中断信号;
      (2)保护现场,将中断断点程序状态字PSW 和程序计数器PC 值存入系统堆栈;
      (3) 分析中断向量,取得中断处理程序的入口地址;
      (4) 将处理器PC 置来中断处理程序的入口地址;
      (5)调用中断处理程序;
  3. 中断优先级与中断屏蔽
    • 多级中断与中断优先级:在多根请求线从不同设备连接到中断逻辑线路上的中断信号的不同中断级别的级别处理;
    • 中断屏蔽:在整个中断系统中,可以允许或禁止中断系统对某些类别的中断响应,由PWS中的中断屏蔽位决定。此外还有一些不可屏蔽的中断信号,属于机器故障中断,比如内存奇偶校验出错,掉电等。

系统调用


系统调用简介

系统调用就是用户在程序中调用操作系统所提供的一些子功能,由特殊的机器指令完成实现。系统调用可以看作是“扩充”的机器指令

  1. 系统调用与一般过程调用的区别:
    • 运行在不同的系统状态:调用程序在用户态,被调用程序运行在在系统态;
    • 状态转换:通过软中断机制由用户态转换成核心态,在操作系统核心分析后,转向相应的系统调用处理子程序;
    • 返回问题:系统调用在返回调用程序前先运行调度程序,将调用进程放入就绪队列;
    • 嵌套调用:一个被调用过程执行期间还可以调用另一个系统调用;
  2. 系统调用命令是作为扩充机器指令,增强系统功能,方便用户使用提供把系统调用命令称为"广义命令”即软件实现的。系统调用的分类:
    • 进程控制类系统调用:对进程的控制,如创建和终止进程等文件操作类系统调用:对文件的系统调用,如创建、打开、关闭等;
    • 进程通信类系统调用:被用在进程间传递消息和信号;
    • 设备管理类系统调用:被用来请求和释放有关设备,以及启动设备操作等;
    • 信息维护类系统调用:用户获取有关信息维护的系统调用,如当前时间和日期,文件的访问和修改时间等;

系统调用处理过程

  1. 陷入( TRAP ) :在系统中为控制系统调用服务的机构,或异常处理机构把由于系统调用引起处理机中断的指令称为陷入或异常指令(或称访管指令)。处理机在用户程序中执行称为用户态(目态),在系统程序中执行称为系统态(管态)
  2. 参数传递过程
    • 通过有关通用寄存器传递;
    • 通过堆栈传递;
    • 通过陷入指令自带传递;

I/O技术


  1. I/O结构:设备控制器,再由设备控制器分别控制各台外部设备的运行。对设备控制器的操作是由处理器直接发出的I/O 指令来实现CPU 定期轮询各个I/O 设备控制器的状态,如果有I/O 处理请求,CPU 就处理,直到该I/O 处理完毕。由于效率太低,已被淘汰!
  2. 通道:是独立于中央处理器、专门负责数据I/O 传输工作的处理单元。通道对外部设备实行统一的管理,它代替CPU对I/O操作进行控制,从而CPU和外部设备可以并行工作,所以通道又称为I/O处理机。其原理是:
    • 逐个指令检查、启动设备;
    • 控制权转到通道;
    • 通道控制信息传送,CPU 继续执行程序;
    • 形成I/O 中断事件可以实现CPU 和各种外部设备的并行工作;
  3. DMA技术:直接存储器访问( Direct Memory Access , DMA )技术通过系统总线中的一个独立控制单元,即DMA控制器,自动地控制成块数据在内存和I/0 单元间的传送。DMA 指令包含: I/O 设备编址、开始读或写的主存编址、需要传送的数据长度、是否请求一次读或写等信息。DMA请求是外设对DMA控制器提出的请求。
  4. 缓冲技术:缓冲技术是用在外部设备与其他硬件部件之间的一种数据暂存技术利用存储器件在外部设备中设置了数据的一个存储区域,称为缓冲区。
    • 用途:用在外部设备与外部设备间的通信上,用在外部设备与处理器间;
    • 原因: CPU 处理数据速度与设备传输数据速度不匹配,用缓冲区缓解;

时钟


  1. 时钟的作用:
    • 在多道程序环境中发现陷入死循环,防止机时浪费;
    • 在分时系统中,间隔实现各个作业按时间片轮运行;
    • 在实时系统中,按要求时间间隔输出正确时间信号;
    • 实时唤醒按照给定时间执行的各外部事件;
    • 记录用户使用各设备的时间和外部事件发生时间间隔;
    • 记录用户和系统所需要的绝对时间,年月日;
  2. 时钟相关的概念:
    • 硬件时间:电路中的晶体振荡器,每隔一定间隔产生固定的脉冲频率,时钟电路中的时钟寄存器依据时钟电路所产生的脉冲数,对时钟寄存器加1;
    • 软件时钟:利用内存单元模拟时钟寄存器,采用一段程序;
    • 绝对时钟:在计算机系统中不受外界干扰、独立运行的一种时钟;
    • 相对时钟:又称间隔时钟,只计算从某个时间初值开始的一段时间间隔;

第三章 进程线程模型

多道程序设计模型


程序的顺序执行

采用多道程序设计可以提高CPU的利用率,缩短作业周转时间,最终提高系统吞吐量。

  1. 程序:一个在时间上按严格次序前后相继的机器指令或高级语言编写的语句的操作序列。程序顺序执行的特点:
    • 顺序性:程序和机器执行的活动严格按顺序执行;
    • 封闭性:资源的状态只有程序本身的动作才可以改变;
    • 确定性:程序执行的结果与它的执行速度无关也称为程序执行结果与时间无关性。CPU 在执行程序时,两个动作间停顿对程序计算结果不产生影响;
    • 可再现性:程序在不同时间执行,只要初始条件相同,何时重复执行都得到相同结果;

多道程序设计环境的变化

  1. 多道程序设计技术的引入:单CPU的并发程序按给定的时间片交替在处理机执行,执行时间重叠,而多CPU 的并发程序在各自处理机上运行。顺序环境和并发环境下的利用率计算(P45)
  2. 多道程序设计环境的特点:
    • 独立性:每道程序都是逻辑独立的;
    • 随机性:程序和数据的输入与执行开始时间都是随机的;
    • 资源共享性:资源共享将导致对进程执行速度的制约;

程序的并发执行

指两个或两个以上程序在计算机系统中同处于已开始执行且尚未结束的状态,其特性是:

  • 并发程序在执行期间具有相互制约关系:执行暂停执行;
  • 程序与计算不再一一对应:允许多个作业调用一个共享程序段;
  • 并发程序执行结果不可再现:宏观同步,在单CPU 还是顺序执行;

进程模型


进程的概念

进程( Process )是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,包括系统进程和用户进程两类。

  1. 进程与程序的联系和区别:
    • 联系:程序是构成进程的组成部分之一,一个进程的运行是执行它对应的程序。进程是由程序、数据和进程控制块PCB 三部分组成
    • 区别:程序是静态的,而进程是动态的。程序的存在是永久的,而进程是暂时的。一个进程可以执行一个或多个程序,一个程序也可以构成多个进程;
  2. 进程的特性:
    • 并发性:一个进程的第一个动作可以在另一个进程的最后个动作结束前开始;
    • 动态性:进程动态产生动态消亡。在进程生命周期内状态动态变化;
    • 独立性:一个进程是个相对完整的资源分配单位;
    • 交往性:一个进程在运行过程中可能会与其它进程发生直接或间作用;
    • 异步性:每个进程按照各自独立的、不可预知的速度向前推进;

进程的状态及其状态的转换:

  1. 三状态进程模型:
    (1) 运行状态:指进程已获得CPU,并且在CPU 上执行的状态,单CPU 最多一个进程处于运行态
    (2) 就绪状态:指一个进程已经具备运行条件,但由于没有获得CPU 而不能运行所处的状态。一旦把CPU 分配给它,该进程就可运行,允许有多个就绪进程
    (3)等待状态:也称阻塞状态或封锁状态,指进程因等待某种事件发生而暂时不能运行的状态;
    进程状态转换为:
    时间片用完,从运行状态到就绪状态。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOQGuH5F-1653824653096)(:/3e67cd9614ae4e7eae2038b84bee380b)]
  2. 五状态进程模型:
    (1) 运行状态( Running ) : 进程占用处理机资源;处于此状态的进程数目小于等于处理机数目, 在没有其它进程执行时,自动执行系统的空闲进程;
    (2) 就绪状态( Ready ) :进程已获得除处理机外的所需资源,等待分配处理机资源;只要分配处理机就可执行;
    (3) 阻塞状态( Blocked ) :由于进行等待I/O 操作或进程同步等条件而暂停运行时处于阻塞状态,如申请系统服务或资源、通信、I/O等即使处理机分配该进程,也无法继续执行
    (4) 创建状态( New) :进程正在创建过程中还不能运行,如分配和建立进程控制块表项、建立资源表格并分配资源,加载程序并建立地址空间等;
    (5) 结束状态( Exit) : 进程已经结束运行,回收除进程控制块外其它资源,并让其它进程从进程控制块中收集有关信息;
    进程状态转换为:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOiOZ8fR-1653824653097)(:/edc27079de5f4dd29dbec7e861c4e727)]
  3. 七状态进程模型:进一步区分进程的地址空间状态
    • 好处:

      • 提高处理机效率:就绪进程表为空时有空闲空间用于提交新进程;
      • 可为运行进程提供足够内存:资源紧张时可把某些进程换到外存;
      • 有利于调试:在调试时挂起被调试进程,方便对其地址空间读写;
    • 四种意义有变化或新的状态:

      • 就绪状态:进程在内存且可立即进入进行状态;
      • 阻塞状态:进程在内存并等待某事件的出现;
      • 阻塞挂起状态:进程在外存并等待某事件的出现;
      • 就绪挂起状态:因为内存不足,使得进程在外存,但只要进入内存,即可运行;
    • 进程状态转换为:记下来!
      运行—>就绪:抢占处理机,时间片用完,进程创建完成
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHWUmx14-1653824653098)(:/f20b6186a9c7407491ca6e4e864d0735)]

进程控制块(PCB)

进程控制块(PCB)是在操作系统核心中为进程定义一个专门的数据结构。

  1. 进程的组成:由指令、数据和进程控制块(PCB)三部分组成,其中PCB是进程的灵魂所在;
  2. PCB内容:分为调度信息和现场信息两大部分
    • 调度信息:供进程调度时使用的,描述了进程当前所处的状况,包括进程名、进程号、存储信息、优先级、当前状态资源清单“家族" 关系、消息队列指针、进程队列指针和当前打开文件等;
    • 现场信息:刻画了进程的运行情况。只记录那些可能会被其它进程改变的寄存器,如程序状态字、时钟等;
  3. PCB组织:以适当的方式组织管理PCB
    • 线性方式:将所有PCB 不分状态组织在一个连续表
    • 索引方式:对于具有相同状态的进程,分别设置各自的PCB 索引表,表目为PCB 在PCB 表(线性表)中的地址,构成了就绪索引表和等待索引表;
    • 链接方式:对于具有相同状态进程的PCB,通过PCB 中的链接字构成一个队列。按先进先出原则出队,若队列指针为0 时,表示队尾空;
  4. 进程的队列:将所有进程的PCB排成若干个队列,分类如下
    • 就绪队列:进程入队和出队次序与处理机调试算法有关;
    • 等待队列:每一个等待事件一个队列;
    • 运行队列:在单CPU 系统中整个系统有一个运行队列;

进程控制

进程控制是对进程在整个生命周期中各种状态间的转换进行有效的控制,通过原语实现

  1. 原语:由若干条指令组成,用来实现某个特定的操作,通过一段不可分割的或不可中断的程序实现其功能,原语的执行必须是连续的,一旦开始执行就不能间断,直到执行结束。原语是在管态下执行,并且常驻内存。原语和系统调用都可以被进程调用,两者差别在于原语有不可中断性,它是通过在其执行过程中关闭中断实现的,且一般由系统进程调用。
  2. 进程控制原语:进程状态间的转换
    • 创建原语: 一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的子进程,构成新父子关系。创建一个进程的主要任务:建立进程控制块PCB
    • 撤销原语:撤销进程的实质就是撤销PCB,一旦PCB 撤销进程就消亡了;
    • 阻塞原语:某进程执行过程中,需要执行I/O 操作,则由该进程调用阻塞原语把进程从运行态转换为阻塞态。过程:中断CPU 执行,以PCB 现场信息中,当前状态置为等待状态,插入到该事件的等待队列去;
    • 唤醒原语:一个进程因为等待事件的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。过程:在等待队列中找到该进程,置进程的当前状态为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。
  3. UNIX类操作系用的进程控制操作:父进程通过调用fork() 函数创建子进程,步骤包括:
    • 为子进程分配个空闲proc 结构(进程描述/标识符);
    • 赋予子进程唯一标识pid;
    • 以一次一页的方式复制父进程用户地址空间;
    • 获得了进程继承的共享资源的指针,如打开的文件等;
    • 子进程就绪,加入调度队列;
    • 对子进程返回标识符0(pid=0),向父进程返回子进程的pid(>0)
  4. fork() 函数执行特点:只被调用一次,却会返回两次,一个在调用进程(父进程)中,一次是在新创建的子进程中。P57代码分析,pid标识符问题,以及fork()后执行两次的问题
  5. wait()函数:是父进程用来获取子进程的结束状态并回收资源的。

线程模型


线程的引入

  1. 线程的引入:为了减少程序并发执行时所付出的时间和空间开销,使操作系统具有更好的并发性。而引入进程的目的是为了使多个程序并发执行,以改善资源利用率及提高系统效率。

线程的概念

线程是进程中的一个实体,是处理器CPU 调度和分派的基本单位,比进程更小的基本单位。

  1. 线程的属性:
    • 每个线程有一个唯一的标识符和一张线程描述表,记录了线程执行的寄存器和栈等现场状态;
    • 不同的线程可以执行相同的程序;
    • 同一进程中的各个线程共享该进程的内存地址空间;
    • 线程从创建开始经历各种状态变化;
  2. 引入线程的好处:
    • 创建一个新线程花费时间少。因不需另行分配资源,因此创建线程比创建进程要快,且系统的开销也少;
    • 两个线程的切换花费时间少;
    • 由于同进程内的线程共享内存和文件,线程间相互通信无须调用内核,故不需要额外的通信机制,使通信更简便,信息传送速度也快;
    • 线程能独立执行,充分利用和发挥处理器与外围设备并行工作能力;
  3. 线程与进程的比较:
    • 调度:线程作为调度和分派的基本单位,进程作为资源的基本单位
    • 并发性:在一个进程中的多个线程之间也可以并发执行;
    • 拥有资源:线程不拥有系统资源,但也有必不可少的资源,比如线程相关的系统栈
    • 系统开销:在创建或撤销线程时,系统付出的开销更小;

线程实现机制

线程实现的方式不同:

  1. 用户级线程
  2. 内核级线程
  3. 混合实现方式

Pthread线程包

几个主要函数的调用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIxGghk2-1653824653099)(:/6b2fbaf370ae4cb3a75fd2b9104930a2)]

进程(线程)调度


进程挂起是把进程从内存转到外存,进程唤醒是把进程从外存转到内存,算法包括内外存交换算法、进程页面调入算法和进程页面淘汰算法。调度是分层次的,一般分为高级调度、中级调度和低级调度。

  1. 高级调度:也称作业调度,按定原则对磁盘中处于后备状态的作业进行选择并创建为进程
  2. 中级调度:按给定的原则和策略,将处于磁盘对换区中,肯具备运行条件的就绪进程调入内存
    或将处于内存就绪状态或内存阻塞状态的进程交换到对换区
  3. 低级调度:进程(线程)调度是决定就绪队列中哪个进将获得处理机,并实际将处理机分配给该进程的操作

概述

  1. 进程(线程)调度的主要功能:记录系统中所有进程(线程)的执行状况。
  2. 进程(线程)调度的时机:
    • 正在执行的进程(线程)运行完毕;
    • 正在执行的进程(线程)调用阻塞原语将自己阻塞进入等待状态;
    • 正在执行的进程(线程)调用阻塞原语操作,因资源不足而被阻塞,或调用了唤醒原语操作激活了等待资源的进程(线程) ;
    • 时间片用完;
    • 就绪队列中的进程(线程)优先级高于当前运行进程(线程)时,引发进程(线程)调度;
  3. 关于抢占:
    • 可抢占方式:即就绪队列中一旦有优先级高于当前运行进程(线程)存在时,立即进行调度,转让CPU;
    • 不可抢占方式:即一旦把CPU 分配给个进程(线程), 就一直占用CPU,直到该进程(线程)自己因调用原语操作或等待I/O 而进入阻塞状态,或时间片用完时才让出CPU,重新执行进程(线程)调度。

调度算法设计原则

  1. 进程行为:几乎所有进程的(磁盘) I/O 请求或计算都是交替突发的
  2. 系统的分类:批处理、交互式和实时系统
    • 批处理系统:该处理减少了进程的切换从而改善了性能,如处理薪水册、存贷清单账目支出、利息计算(在银行)、索赔处理(保险公司)等周期性作业;
    • 交互式系统:避免一个进程霸占CPU 拒绝为其它进程服务,抢占是必需的。服务器属于此类系统,通常它们要服务多个远程用户;
    • 实时系统:只运行那些用来推进现有应用的程序,而交互式是通用的,运行任意的非协作甚至是有恶意的程序;
  3. 调度算法的设计目标:取决于环境,例如批处理、交互式和实时系统,但有一些目标是适用于所有系统的,包括两个,公平和保持系统的所有部分尽可能忙碌。
    • 批处理系统:运行大量批处理作业的大型计算中心的管理为了掌握其系统的工作状态,通常检查三个指标:吞吐量、周转时间以及CPU 利用率
      • 吞吐量:系统每小时完成的作业数量;
      • 周转时间:指从一个批处理作业提交时刻开始直到该作业完成时刻为止的统计平均时间。数据度量了用户要得到输出所需的平均等待时间,越小越好;对不同调度算法求周转时间
      • CPU 利用率:用于对批处理系统的度量;
    • 交互式系统:最小响应时间与均衡性
    • 实时系统:是或多或少必须满足截止时间和可预测性,速率单调调度算法、最早最终实现优先调度算法

进程(线程)调度算法

进程(线程)调度算法解决以何种次序对各就绪进程(线程)进行处理机的分配,以及按何种时间比例让进程(线程)占用处理机。

  1. 先来先服务:最简单的是非抢占的先来先服务( First-Come First-Severed,FCFS )算法。进程按请求CPU 的顺序使用CPU可用于作业调度
  2. 最短作业优先:当输入队列中有若干个同等重要的作业被启动时,调度程序应使用最短作业优先( Shortest Job First, SJF )算法。可用于作业调度
  3. 最短剩余时间优先:最短作业优先的抢占式版本是最短剩余时间优先( Shortest Remaining TimeNext ,SRTN)算法。调度程序总是选择其剩余运行时间最短的那个进程运行。
  4. 轮转法:轮转( Round Robin , RR )算法最早来自分时系统,原基本思想是将CPU 的处理时间划分成一个个时间片,就绪队列中的诸进程轮流运行个时间片。当时间片结束时,就强迫运行进程让出CPU ,该进程进入就绪队列,等待下一次调度。
  5. 最高优先级算法( Highest Priority First , HPF )进程(线程)调度每次将处理机分配给具有最高优先级的就绪进程(线程)。进程(线程)的优先级由进程(线程)优先数决定。进程(线程)优先级的设置可以是静态的也可以是动态的。可用于作业调度
  6. 多级反馈队列算法:多级队列算法综合了先进先出调度算法、时间片轮转算法和可抢占式最高优先级算法的一种进程(线程)调度算法。
  7. 最短进程优先:如何从当前可运行进程中找出最短的那个进程,通过进程过去的行为进行推测,并执行估计运行时间最短那个,通过当前测试值和先前估计值进行加权平均而得到下一个估计值的技术称作老化( Aging )。
  8. 实时系统中的调度算法:实时系统是种时间起着主导作用的系统,即系统的正确性不仅取决于计算的逻辑结果,而且还依赖于产生结果的时间。

第三章 并发与同步

进程(线程)间相互作用


  1. 相关进程与无关进程
    • 相关进程:在逻辑上具有某种进程;
    • 无关进程:在逻辑上没有任何联系的进程,无关的并发进程一定没有共享变量;
  2. 与时间相关的错误:进程执行的速度是不能由进程自身控制的对于相关进程来说,可能有若干并发进程同时使用共享资源,即一个进程次使用未结束,另个进程也开始使用,形成交替使用共享资源。
    • 进程同步:指多个进程中发生的事件存在某种时序关系,必须协同动作,相互配合,以共同完成个任务。
    • 进程互斥:是指由于共享资源所要求的排他性,进程间要相互竞争,以使用这些互斥资源。

进程互斥


  1. 进程互斥的解决做法:
    • 由竞争各方平等协商:基于进程间平等协商的互斥算法;
    • 引入进程管理者,由管理者来协调竞争各方对互斥资源的使用;
  2. 基于进程间平等协商的互斥算法
    • ==临界资源:指计算机系统中的需要互斥使用的硬件或软件资源,如外设、共享代码段、共享数据结构等。==多个进程在对临界资源进行访问时,特别是进行写入或修改数据时,必须互斥进行!
    • 计算机系统中资源共享的程序可分成三个层次:
      • 互斥:保证资源的互斥作用是指多个进程不能同时使用同一资源,这是正确使用资源的最基本要求;
      • 死锁:避免死锁是指避免多个进程互不相让,避免出现都得不到足够资源的情况,保证系统功能的正常运行;
      • 饥饿:避免饥饿是指避免某些进程一直得不到资源或得到资源的概率很小,保障系统内资源使用的公平性;
    • 为了保证临界资源的正确合作,可把临界资源的访问过程分成四部分:
      • 进入区:为了进入临界区使用临界资源,在进入区要检查可否进入临界区;如果可以进入临界区,通常设置相应的“正在访问临界区"标志,以阻止其它进程同时进入临界区,否则不能保证互斥访问临界区;
      • 临界区:进程中访问临界资源的段代码;
      • 退出区:将“正在访问临界区"标志清除;
      • 剩余区:代码中的其余部分;
    • 为了合理使用计算机系统中的资源,在操作系统中采用的进程同步机制应遵循以下几条准则:
      • 空闲则入:任何同步机制都必须保证任何时刻最多只有一个进程位于临界区,当有进程位于临界区时,任何其它进程进程均不得进入临界区;
      • 忙则等待:当已有进程处于临界区时,后到达的进程只能在进入区等待;
      • 有限等待:为了避免死锁等现象的出现,等待进入临界区的进程不能无限期地“死等”;
      • 让权等待:因在进入区等待而不能进入临界区的进程,应释放处理机,转换到阻塞状态,以使得其它进程有机会得到处理机的使用权;
  3. 进程互斥的软件方法:
    • 算法1 :单标志算法;
    • 算法2:双标志、先检查算法;
    • 算法3:双标识、后检查算法;
    • 算法4 :先修改、后检查算法;
  4. 进程互斥的硬件方法:软件方法并不适用于数目很多的进程间的互斥,现已很少单独采用软件方法
    • TS ( Test and- Set )指令:读出指定标志后把该标志设置为TRUE;
    • Swap 指令:功能是交换两个字(字节)的内容;

信号量


  1. 信号量:就是由操作系用提供的管理公有资源的有效手段,只能通过初始化和两个标准的原语来访问,信号量机制中P原语相当于进入区操作,V原语相当于退出区操作。利用信号量机制可实现进程间的同步,即所谓前趋关系。

经典的线程同步问题


生产者是计算进程,消费者是打印进程;在输入时输入进程是生产者,计算进程是消费者。判断程序可能出现的问题,正常运行、产生饥饿、活锁或者死锁?

  1. 简单生产者-消费者问题
  2. 多个生产者-消费者问题:生产者和生产者存在互斥关系,消费者和消费者存在互斥关系,生产者和消费者存在同步关系,在环形缓冲池的临界资源,生产者和消费者之间也存在互斥关系。
  3. 读者-写者问题
  4. 同步与互斥的综合应用

管程


  1. 管程的提出:采用P、V 同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程中,缺点是:
    • 程序易读性差,因为要了解一组共享变等必须通读整个系统并发程序;
    • 程序不利于修改和维护,程序局部性差,任修改都会影响全局;
    • 正确性难以保证,保证这样一个复杂系统没有逻辑错误很难为编写正确的程序,Hansen 和Hoare 提出了“管程”( Monitor )的概念;
  2. 管程的概念及组成:
    • 管程:是一个由过程、变量及数据结构等组成的集合,它们组成个特殊的模块或软件包;
    • 一个管程由四个部分组成:管程名称、共享数据的说明,对数据进行操作的一组过程和对共享数据赋初值的语句;
    • 管程具有三个主要的特性:
      • 模块化:一个管程是个基本程序单位,可以单独编译;
      • 抽象数据类型:管程是一个特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码;
      • 信息隐蔽:管程是半透明的,管程中的外部过程(函数)实现了某些功能,至少这些功能是怎样实现的,在其外部则是不可见的;
    • 管程的优点:
      • 程序易读性好;
      • 代码易于修改和维护;
      • 正确性易保证;
      • 可以传递大量信息;
  3. 管程中的条件变量:引入条件变量以及相关的两个操作, wait (等待)和signal (信号)。
    • wait 原语:当某进程通过管程请求获得临界资源而未得到满足时,管程调用该原语使该进程阻塞,并将它排在该临界资源的阻塞队列上。
    • signal 原语:仅当一个进程访问完成并释放临界资源时,管程才能调用该原语,唤醒阻塞队列上的队首进程。
  4. 用管程解决生产者-消费者问题
  5. Pthread中的互斥与同步
    • 互斥量及相关函数:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iaGDIu0W-1653824653100)(:/8f6a9c068f6d44e997a4d0a83b45d916)]
    • 条件变量及相关函数:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l80xzepl-1653824653101)(:/3226a3c4ca62495991a0a7224711c0c8)]

进程通信


共享内存

共享内存:在相互通信的进程间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。

消息机制

  1. 消息机制:在消息机制中,进程间的数据交换是以消息为单位进行的。用户直接利用系统中提供的一组通信
    命令(原语)进行通信。
    • 消息缓冲通信:发送进程使用发送原语将消息发送给缓冲区,然后再通过缓冲区把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程使用接收原语从消息缓冲队列中取出消息。机制包含消息缓冲区、消息队列首指针、互斥信号量、同步信号量、发送消息原语和接收消息原语。
    • 信箱通信方式:发送进程使用发送原语直接将消息发送到某种中间实体中。接收进程使用接收原语从该中间实体中取出消息。这种中间实体般称为信箱。所以,这种方式也称为间接通信方式,并且被广泛地用于计算机网络中(即电子邮件系统)。通信双方所必有的:可存信件数、已有信件数和信箱体(指针)
  2. 管道通信:管道是指连接读进程和写进程的,用于实现它们之间通信的共享文件。向管道提供输入的发送进程(写进程),以字符流的形式将大量数据送入管道,而接受管道输出的接收进程(读进程),可以从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故称为管道通信方式。这种方式首创于UNIX 系统,因为它能传送大量的数据,又非常有效,所以又被引入到许多操作系统中。管道通信的优点是:同步与互斥都由操作系统自动进行,对用户是透明的。

第五章 内存管理

CPU要通过启动响应的输入/输出设备后才能使外存与内存交换信息。

基本概念


存储体系

由于成本等方面的原因,任何一种存储设备都无法在速度和容量两个方面同时满足用户的需求。
对于内存:其直接存取速度尽量快到与CPU的取指速度相匹配,其容量能装下当前运行的程序和数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9FvYzaZL-1653824653102)(:/bebd1737716549ac8d89241d0f5efb09)]

存储管理的任务

内存空间分为两部分:系统区、用户区(管理这一部分),其存储管理的主要任务为四个部分:

  1. 内存的分配和回收:记住每个存储区域的状态,实施分配,回收
    • 实现方法:位示图表示法、空闲页面表、空闲块表
    • 内存分配的方式:
      • 静态分配:程序要求的内存空间是在目标模块连接装入内存时确定并分配的,在程序运行过程中不允许再申请或者在内存中“搬家”;
      • 动态分配:程序要求的基本内存空间是在目标模块装入时确定并分配的。在程序运行过程中允许再申请或者在内存中“搬家";
  2. 存储共享:指两个或多个进程共用内存中的相同区域,使多道程序动态地共享内存,提高内存利用率,包括共享代码、数据。
  3. 存储保护:目的在于为多个程序共享内存提高保障,使在内存中的各程序只能访问其自己的区域避免各程序间相互干扰。保护的内容包括地址越界保护、权限保护。
  4. 扩充内存:用户在编程的时候,不应该受内存容量限制,要采用一定的技术来扩充内存的容量。从用虚拟存储技术或其它交互技术。

地址转换

将用户程序的逻辑地址转换为运行时的物理地址的过程称为地址转换,也称为地址映射(即重定位)。分配的内存空间可能是从某单元开始的一组连续的地址空间,该地址空间的起始地址不是固定的。

  1. ==静态重定位:在程序装入时,把程序中的指令地址和数据地址全部转换成绝对地址。==由于地址转换工作是在程序开始执行前集中完成的,所以在程序执行过程中就无需再进行地址转换工作。
  2. 动态重定位:在程序装入时,不进行地址转换,而是直接把程序装入到分配的内存区域中。在程序执行过程中,每当执行一条指令时由硬件的地址转换机构将指令中的逻辑地址转换成物理地址。处理器每执行一条指令都会把指令中的逻辑地址与基址寄存器中的值相加得到绝对地址,然后按照绝对地址访问内存。

分区存储管理方案

分区存储管理方案的基本思想是把内存划分为若干个连续区域,称为分区,每个分区装入一个运行程序。


固定分区

  1. 基本思想:==系统先把内存划分为若干个大小固定的分区,一旦划分好,在系统运行期间便不再重新划分。
  2. 分配:用于固定分区管理的内存分配表是一张分区说明表,表目内容包括分区序号、分区大小、分区起始地址以及使用状态。
  3. 特点:
    • 一个作业只能装入一个分区,不能装入两个或多个相邻的分区。一个分区只能装入一个作业,当分区大小不能满足作业的要求时,该作业暂时不能装入;
    • 通过对“分区分配表”的改写,来实现对主存空间的分配与回收。作业在执行时,不会改变存储区域,所以采用静态地址重定位方式易于实现,且系统开销小;
    • 当分区较大作业较小时,一个程序的大小不可能刚好等于某个分区的大小,会浪费许多主存空间,并且分区总数固定,限制了并发执行的作业数目;

可变分区

  1. 基本思想:它是根据用户作业的大小,在作业要求装入主存时,动态地划分分区,使分区的大小正好适应作业的要求。采用这种存储管理方式,分区的大小是不定的,分区的数目也是不定的。
  2. 移动技术:可变分区中,内存经过段时间的分配和回收后,会存在很小的空闲块,这些小块不足以满足程序进一步分配内存的要求,但其总和却可以满足程序的分配要求,解决的办法就是“碎片整理",这一技术称为“移动技术"。把所有的空闲碎片合并成一个连续的大空闲区且放在内存的一端,而把所有程序占用区放在内存的另一端。需注意一下问题:
    • 移动技术会增加系统的开销:移动数据快,修改内存分配表和进程控制块;
    • 移动是有条件的:只能与外部设备信息交换结束之后,再考虑移动;
  3. 采用的数据结构:为了实现可变分区分配,系统中必须配置相应的数据结构,用来记录主存的使用情况,包括空闲分区的情况和已分分区的情况,为作业分配主存空间提供依据。为此,设置了两张表,即已分分区表和空闲分区表。
  4. 空闲分区的分配策略:
    • 最先适应算法:顺序查找分区说明表,找到第一个满足申请长度的空闲区;
    • 最优适应算法:找到第一个能满足申请长度的最小空闲区;
    • 最坏适应算法:找到能满足申请要求的最大的空闲区;
    • 下次适应算法:从上一次分配的位置开始扫描内存,选择下一个大小足够的可用块;
  5. 分区的回收:当一个作业运行结束后,在已分分区表中找到该作业根据该作业所占主存的始址和大小,去修改空闲分区表相应的记录。会考,较为简单
    • 回收的分区前后没有相邻的空闲分区;
    • 回收分区的前面有相邻的空闲区;
    • 回收分区的后面有相邻的空闲分区;
    • 回收分区的前后都有相邻的空闲分区;
  6. 分区的保护:一是系统设置界限寄存器,二是保护键的方法
  7. 实现一个可变分区存储管理方案,需要的基本条件:
    • 硬件地址转换机
    • 基址寄存器
    • 限长寄存器
    • 地址加法器
    • 地址比较器

分区管理方案的优缺点

  1. 优点:在内存利用率方面,可变分区的内存利用率比固定分区高。
  2. 缺点:
    • 内存使用仍不充分,并且存在着较为严重的碎片问题;
    • 需要移动大量信息,浪费了处理机的时间;
    • 不能实现对内存的“扩充”;

覆盖技术与交换技术

为了“扩充”内存,可以把进程地址空间中信息(指令和数据)的一部分放在外存上,而把那些当前需要的执行程序段和数据段放在内存中。这样内、外存之间就会出现信息交换的问题,这两个技术则是用于控制这种交换的。内存不足时,操作系统采用覆盖技术和交换技术进行改善。


覆盖技术

覆盖技术:是指个程序的若干程序段或几个程序的某个部分共享某一个存储空间。覆盖技术的实现是把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构是那些不会同时执行的程序段共享一块内存区域。未执行的程序段先保存在磁盘上,当有关程序段的前一部分执行结束后,把后续程序段调入内存,覆盖前面的程序段。

交换技术

交换技术:交换技术是指把主存中暂时不能运行的进程,或暂时不用的程序和数据,换出到外存上,把已具备运行条件的进程,或进程所需要的程序或数据,换入到主存的技术。需要考虑到的问题:

  • 换出进程的选择;
  • 交换时机的确定;
  • 交换空间的分配;
  • 换入进程换回内存时位置的确定;

页式存储管理方案

把一个逻辑地址连续的程序分散存放到几个不连续的内存区域内,并且保证程序的正确执行,即可以充分利用内存空间,又可以减少移动所花费的开销。


基本思想

  1. 存储管理部件首先把内存分为大小相等的许多区,把每个区称为“块”,块是进行主存空间分配的物理单位。同时,要求程序中的逻辑地址也进行分页,页的大小与块的大小一致。逻辑地址由两部分组成:页号和页内地址。
  2. 程序的逻辑地址由页号和页内地址组成,页号的长度决定了分页的多少页内地址的长度决定了页面的大小。在为作业分配主存时,以块为单位将作业中的若干页分别装入到多个不相邻接的块中。作业执行时根据逻辑地址中的页号找到它所在的块号,再确定当前指令要访问的物理地址。它的地址转换属于动态重定位,由于进程的最后一页经常装不满块,而形成不可利用的碎片,称为"页内碎片”。

存储空间的分配与回收

  1. 采用的数据结构:为了实现页式存储管理方式,系统设置了主存分配表(存放页表在内存中的首地址)、位示图(反应块的使用情况)和页表(存放页号和块号的对应位置),记录主存空间的使用情况和每个作业的分配情况。
  2. 回收:当一个作业执行结束,则应收回该作业所占用的主存块。根据主存分配表中的记录,取出该作业的页表。从该作业的页表中取出每个归还的块号,计算出该块在位示图中的位置,将占用标志位置"0"。最后把归还的块数加入到空闲块数中,删除该作业的页表,并把分区分配表中该作业的记录删除。

地址转换与快表

  1. 地址转换:物理地址=块号*块长+块内地址+用户区基址;
  2. 页式管理的特点:
    • 有效地解决了“碎片"多的问题。可以使程序和数据存放在不连续的主存空间,而不必像可变分区管理那样通过增加系统开销来解决主存碎片的问题。
    • 通过位示图和页表来记录主存的使用情况和每个作业的分配情况,当主存很大,并且作业也很大时,位示图和页表都有可能占用较大的存储空间。另外,它要求有相应的硬件支持,从而增加了系统成本,也增加了系统开销。例如需要地址变换机构、快表等它仍然存在不可利用的空间,例如最后一页往往还有剩余空间。
    • 要求页的大小固定,不能随程序的大小而改变这对程序的共享和使用造成了困难。
  3. 页表:指出了该程序逻辑地址中的页号与所占用的内存块号之间的对应关系。类型包括多级页表、散列页表和反置页表。
  4. 快表:因页表在主存中,CPU 在存取数据时,要访问主存两次。第一次是访问主存中的页表,从中找出该页的物理块号,将此块号与页内地址拼接形成物理地址。第二次是根据上一步得到的物理地址,到主存中获取数据,这样就降低了计算机的处理速度。为了提高处理速度,可以采用快表和两级页表的方法对页式存储管理进行改进。虚拟存储系统肿的快表采用快速存储器构成,将用户经常访问的数据放在一个高速的快表中按内容访问,因此比慢表查找速度快快表命中率计算,P121

虚拟存储技术与虚拟页式存储管理方案的实现

如何解决程序规模大于内存的问题?操作系统通过虚拟存储技术实现。


虚拟存储技术

基本思想:利用大容量的外存来扩充内存,硬件能实现虚-实地址映射的机制,利用了程序的局部性原理

虚拟页式存储管理

  1. 基本思想:当进程开始运行时,先将一部分程序装入内存,另一部分暂时留在外存;当要执行的指令不在内存时,由系统自动完成将它们从外存调入内存的工作(请求调页);当没有足够的内存空间时,系统自动选择部分内存空间,将其中原有的内容交换到外存上并释放这些内存空间供其它进程使用(页面置换)。会发生的现象:页表项在内存,正常转换地址(页表、快表命中);页表项不在内存,产生缺页中断。使用虚拟页式存储管理时需要在页表增加以下的表项:
    • 页号:页面的编号;
    • 有效位:又称驻留位、存在位或中断位,表示该页是在内存还是外存,决定是否发生缺页中断;
    • 页框号:页面在内存中时所对应的内存块号;
    • 访问位:又称引用位或参考位,表示该页在内存期间是否被访问过;
    • 修改位:表示该页在内存中是否被修改过;决定页面是否需要回写到外存;
    • 保护位:是否能读/写/执行;
  2. 缺页中断:若在页表中发现要访问的页面不在内存时,则产生缺页中断首先要保留当前进程现场。
  3. 页面调度策略:调入策略(请求调页和预先调页)、置页策略和置换策略。
  4. 页面置换算法:每次发生缺页时,需要选择一个页面置换此外,系统抖动是指被调出的页面又立刻被调入所形成的频繁调入调出现象。记名字容易混淆,建议记英文。
    • 先进先出置换算法(FIFO):该算法淘汰最早进入主存的页面。因为,最早进入的页面,不再使用的可能性比最近调入的页面要大。先进先出置换算法实现简单,只要把各调入主存的页按其进入主存的先后顺序连成一个队列即可,总是淘汰队首的那一页。看调入时间离当前时间最远的。该算法在系统运行时可能会出现颠簸抖动和Belady异常
    • 最近最久未使用算法( LRU):该算法选择在最近一段时间内最久没有使用过的页淘汰掉。它依据的是程序局部性原理。最近最久未使用算法是利用一个特殊的栈来保存当前使用的各个页的页号。每当访问某页时,考察栈内是否有与此相同的页号,若有则将该页的页号从栈中抽出,再将它压入栈顶。先看访问位是否为0,再看调入时间离当前时间最远的。
    • 最近最不经常使用算法( LFU ):该算法选择到当前时间为止被访问次数最少的页置换。其实现方法是为每页设置个访问计数器,每当页面被访问时,该页面的访问计数器就加"1”;发生缺页时,淘汰计数器值最小的页,同时将所有计数器清"0"。
    • 理想页面置换算法:从主存中移出永远不需要的页,若无这样的页,则移出最长时间不需要访问的页。该算法只具有理论意义。
    • 最近未使用页面置换算法算法( NRU ):看R和M组成的二进制值最小的
      • 没有被访问,没有被修改;00
      • 没有被访问,已被修改;01
      • 已被访问,没有被修改;10
      • 已被访问,已被修改;11
    • 第二次机会页面置换算法
    • 时钟页面置换算法:考计算缺页中断率
  5. 缺页中断率=中断次数/页面访问总次数。影响缺页中断的因素:
    • 分配给程序的内存块数;
    • 页面的大小;
    • 程序编制方法;
    • 页面置换算法;
  6. 需要的硬件条件:
    • 系统有容量足够大的外存;
    • 系统有一定容量的内存;
    • 提供实现虚-实地址映射的机制;
  7. 需要的软件条件:
    • 缺页中断处理程序;
    • 页面调入策略和页面置换策略;
    • 程序分页机制和快表;
  8. 加快虚拟页式存储管理系统肿虚-实地址转换的速度的技术:
    • 添加快表;
    • 以2的幂次方的页面长度分页;

段式与段页式存储管理方案

  1. 段式存储管理方式:在段式存储管理方式中,作业的地址空间被划分为若干段,每段定义了一组逻辑信息。例如,有主程序段MAIN、子程序段X、数据段D 及栈段S 等。每个段都有自己的名字。为了实现简单,通常可用个段号来代替段名,每个段都从开始编址,并采用段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。段式管理与页式管理的比较:
    • 段时信息的逻辑单位,根据用户的需求划分,大小是可变的,而页是信息的物理单位,它为了方便管理而划分,大小是固定的;
    • 段式管理为二维地址空间,页式管理为一维地址空间;
    • 页式管理存在内部碎片,消除了外部碎片,而段式管理存在外部碎片,消除了内部碎片;
  2. 段页式储存管理方式:段页式存储管理方式的基本原理是段式和页式系统工作原理的组合,即先把用户程序分成若干个段,并为每个段赋予一个段名,每段可以独立地从"0"编址,再把每个段划分成大小相等的若干个页,把主存分成与页大小相同的块。每段分配与其页数相同的主存块,主存块可以连续,也可以不连续。

文件管理

概述


文件和文件系统

  1. 文件:可以被解释为一组带标识的(文件名,有限长度)、在逻辑上有完整意义的信息项的序列(文件内容)。文件是指存放在外存上的已命名的一组相关信息的集合,通常将程序和数据组织成文件。文件的属性包括文件类型、文件长度、文件的物理位置、文件的存取控制、文件的建立时间。文件是一种抽象机制,它提供了一种把信息保存在存储介质上而且便于以后存取的方法,用户不用关心文件的实现细节。信息存储的要求:
    • 能够存储大量的信息;
    • 长期保存信息;
    • 可以共享信息;
  2. 文件系统:操作系统中与文件和目录相关的子系统统称为文件系统,是操作系统中统一管理信息资源的一种软件。研究文件系统的两种角度:
    • 用户的角度:主要关心文件由上简组成,如何命名,如何保护,如何操作等;
    • 操作系统的角度:主要关心文件目录怎样实现,怎样管理存储空间,文件存储位置,磁盘实际运作方式等;

文件分类

  1. 按文件得用途分类:
    • 系统文件:操作系统和各种应用程序和数据所组成的文件;
    • 库函数文件:标准子程序及常用应用程序组成的文件;
    • 用户文件:用户委托文件系统保存的文件;
  2. 按文件的组织形式划分,也是UNIX类操作系统中文件的分类:
    • 普通文件:文件的组织格式为文件系统中所规定的的最一般格式的文件;
    • 目录文件:由文件的目录构成的特殊文件;
    • 特殊文件:形式上与普通文件相同,也可以进行查找目录操作,但有其特殊的性质,比如,UNIX系统中,输入输出设备被看作是特殊文件;
  3. 按文件中的保护方式分类:只读文件、读写文件、可执行文件、无保护文件等。
  4. 按信息的流向分类:输入文件、输出文件和输入输出文件等。
  5. 按文件的存放时限分类:临时文件、永久文件和档案文件等。
  6. 按文件使用的介质类型分类:磁盘文件、磁带文件、卡片文件和打印文件等。
  7. 按照文件的组织结构分类:逻辑文件、物理结构。

文件系统的功能

  1. 统一管理文件的存储空间,实施存储空间的分配和回收;
  2. 实现文件的按名存取;
  3. 实现文件信息的共享,并提供文件的保护和保密措施;
  4. 向用户提供一个方便使用的接口;
  5. 系统维护及向用户提供有关信息;
  6. 保持文件系统的执行效率;
  7. 提供与I/O 的统一接口;

文件的结构


文件的逻辑结构

  1. 设计文件逻辑结构的原则:
    • 查找快捷:根据给定的逻辑结构,应使文件系统在尽可能短的时间内找到所需要的记录或基本信息单位;
    • 修改方便:便于在文件中增加、删除和修改一条或多条记录;
    • 空间紧凑:应使文件的信息占据尽可能小的存储空间;
    • 易于操作;
  2. 逻辑结构:文件的逻辑结构是用户组织文件时可见的结构,即用户所观察到的文件组织形式。文件的逻辑结构是用户可以直接处理的数据及其结构,它独立于物理特性,又称为文件组织。
  3. 结构形式:
    • 流式文件:文件中的数据是串字符,没有结构,如二进制可执行文件;
    • 记录式文件:由若干逻辑记录组成,每条逻辑纪录又有相同的数据项组成,如成绩记录、系统的日志文件等;

文件的物理结构

  1. 物理结构:文件的物理结构,又称为文件的存储结构,它是指文件在外存上存储时的组织结构,也是操作系统管理的文件组织形式。文件的物理结构与存储介质的物理特性及用户对文件的访问方式有关。文件的物理结构通常划分为大小相等的物理块。这些物理块也称为物理记录,它是文件分配及传输信息的基本单位。物理记录的大小与物理设备有关,与逻辑记录的大小无关。
  2. 物理结构的形式:
    • 顺序结构:顺序结构是最简单的一种物理结构。顺序结构将一个在逻辑上连续的文件信息依次存放在外存连续的物理块中,即所谓的逻辑上连续,物理上也连续。
    • 链接结构。克服顺序文件缺点的办法之一是采用链接结构。链接结构将文件存放在外存的若干个物理块中,这些物理块不必连续,并且在每个物理块中设一个指针, 指向下一个物理块的位置,从而使得存放在同一个文件的物理块链接起来。文件的链接结构的实质就是为每个文件构造所使用磁盘块的链表。
    • 索引结构:索引文件克服了顺序文件和链接文件的缺点。索弓|结构将文件存放在外存的若干个物理块中,并为每个文件建立一张索引表,索引表中的每个表目存放文件信息的逻辑块号和与之对应的物理块号。索引表的物理地址由文件说明信息给出。

文件的存储介质

主要是外存储设备,存储设备有很多种类,如磁盘、磁带、磁鼓、纸带、光盘和闪存等。外存储设备的空间组织与地址存取方式比较复杂。在磁盘中,磁盘空间由盘面、柱面、磁道和扇区组成。外存储设备通常由驱动部分和储存介质两部分组成。

文件的存取方式

  1. 顺序存取:顺序存储设备是按信息的物理位置进行定位和读/写操作的存储设备。在顺序存储设备中,只有前面的物理块被存取之后,才能存取其后的物理块。例如磁带就是一种典型的顺序存储设备,它总是从磁带的当前位置开始读/写。磁带机上的块不是用地址来标识的而是用它在磁带上的位置来标识的。为了在存取一个物理块时让磁带机提前加速和不停止在下一个物理块的位置上,磁带的两个相邻的物理块之间设计有一个间隙将它们隔开。磁带的存储特性如下:
    • 磁带是种顺序存取的存储设备,总是从磁头的当前位置开始读写;
    • 磁带上的块不由地址来标识,而由其在磁带上的位置来识别;
    • 块与块之间有间隙,磁带上的物理块就是通过间隙来区分的;
    • 磁带的存取速度与信息密度、磁带带速和块间间隙有关。如果带速高,信息密度大,且所需块间隙小,则磁带存取速度高;
    • 磁带的容量大,采用顺序存取方式时存取速度高,采用随机存取方式效率较低;
  2. 随机存取:允许文件系统直接存取对应存储介质上的任意物理块的存储设备,如磁盘就是典型的随机存储设备。磁盘机一般由若干张磁盘片组成,这些盘片可以同时沿着一个固定方向高速旋转。每个盘面对应一个磁头,所有的读写磁头被固定在的磁臂上,这样磁头可以沿半径方向同时移动,读写磁盘上不同位置上的信息。访问顺序:磁道、磁头、扇区。
    • 磁道:磁盘盘片上的一系列同心圆称为磁道,为了描述磁道,对磁道由外向内进行编号,称为磁道号(编号均从0 开始),即系统通过磁道号完成对磁道的操作。
    • 柱面:与盘片中心有相同距离的所有磁道组成一个柱面,当磁臂移动到某位置时,所有的读写磁头都在同一个柱面上,盘面上的磁道号即为柱面号。对于软盘,一个柱面仅包含两个磁道。
    • 扇区:磁道沿径向又分成大小相等的若千个区域,每个区域称为一个扇区,每个扇区可以存放相等字节数( 一般为512 字节)的信息,按照与磁盘旋转相反的方向依次给扇区编号,称为扇区号。
    • 磁头号:所有的读写磁头由上至下进行编号,称为磁头号。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-om2QxafQ-1653824653103)(:/e8bd724db1b7441e822e1c0b93313d1e)]
    • 磁盘空间的位置由三个因素决定:柱面号、磁头号、扇区号。
    • 访问磁盘的时间由三部分组成,即寻道时间、延迟时间和传输时间。其中寻道时间是指将磁头从当前位置移动到指定磁道所经历的时间,也称为移臂时间;延迟时间是通过磁盘的旋转将指定扇区移动到磁头下面的时间,也称为旋转时间;传输时间是指将扇区上的数据从磁盘读出或向磁盘写入数据所经历的时间。
  3. 物理结构、存储介质与存取方式三者的关系:光盘和磁带是一样的,图要记下来
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vh8LQMNV-1653824653104)(:/0229cdae2aba46709b441a7fd45c7cf3)]

文件目录

为了便于对文件进行管理,设置了文件目录,用于检索系统中的所有文件。


文件目录的组成

文件目录实际上是文件符号名到文件物理地址之间的一种映射机制。

  1. 文件控制块FCB结构:文件目录包含多条记录,每条记录为一个文件的文件控制块( FCB )的有关信息。最简单的记录包含文件名和文件的起始地址,用以建立文件名和存储地址的对应关系。较复杂的记录包含文件控制块的全部内容,此时,文件目录就是文件控制块的集合。FCB通常包括以下内容:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lb1y6jIE-1653824653105)(:/f6d5cfdd71c64a34b5a664d13c463fc0)]
  2. 目录文件:用户新建一个文件时,与文件有关的信息在该文件的文件控制块内,多个文件的文件控制块集中在一起组成了文件的目录。为了实现对文件目录的管理,通常将文件目录以文件的形式保存在外存。每个文件的文件控制块又称为目录文件中的目录项。

文件目录结构

文件目录的管理形式可以分为一级目录、二级目录、多级目录三种。

  1. 一级目录:也称为单级目录,是种最简单、最原始的目录结构,包括全部文件的文件名、索引表的始址以及文件的其他属性,如文件长度、文件类型等。每个文件占据表中的一条记录。该目录表存放在外存的某个固定区域,需要时系统将其全部或部分调入主存。其特点是:
    • 目录结构易于实现,管理简单,只需要建立一个文件目录,对文件的所有操作,都是通过该文件目录实现的;
    • 易发生重名问题;
    • 当文件较多时,查找时间较长;
    • 不便于实现文件共享,适用于PC 机的单用户系统;
  2. 二级目录:在二级目录中,有主文件目录(一级)和用户文件目录(二级)。在主文件目录中,每个用户文件目录都占有一个目录项,其中包括用户名和指向该用户目录文件的指针。用户文件的文件说明组成的目录文件称为用户文件目录,不同的用户拥有不同的用户文件目录,这些文件目录具有相似的结构,由用户所有文件的文件控制块组成。其特点是:
    • 提高了检索目录的速度;
    • 可以解决用户文件重名问题;
    • 可以使不同用户共享同一个文件;
    • 可以实现对文件的保护和保密;
    • 二级文件目录虽然解决了不同用户之间文件同名的问题,但是,同用户的文件不能同名。当一个用户的文件很多时,这个矛盾就比较突出了

树形目录

树形目录:为了解决用户文件同名的问题,可以把二级目录的层次关系加以推广,就形成了树型目录。在二级目录结构中,如果进步允许用户创建自己的子目录并相应地组织自己的文件,即可以形成三级目录结构,依此类推,还可以进一步形成多级目录。通常把三级或三级以上的目录结构称为树型目录结构。在树型目录结构中,除了最低级外,其他每一级存放的都是下一级目录或文件的说明信息,最高层为根目录,最低层为文件。UNIX 和DOS 系统中都采用了树型目录结构。其结构特点如下:

  • 层次清楚:不同性、不同用户的文件可以构成不同的子树,便于管理,不同用户的文件可以被赋予不同的权限,有利于文件的保护;
  • 解决了用户文件重名问题:只要在同一目录下的文件名不发生重复,就不会由文件重名引起混乱;
  • 搜索速度快:可为每类文件建立一个子目录,对于多级目录,每次只查找子目录,因此速度比一级和二级目录时快;

路径名

  1. 目录检索:用户在访问文件时,需要进行目录检索,用户给出文件名,系统按名寻找目录项。
    • 全路径名:需要从根目录开始,列出由根到用户的所有子目录,又称为“绝对路径名”。缺点是每次都从根目录开始检索,很不方便,因为通常目录放在外存,故影响访问速度,尤其当目录层次较多时,检索需要耗费很长时间;
    • 相对路径:用于检索的路径只是从当前目录开始到所要访问文件的一段路径,即以当前目录作为路径的相对参照点,这样检索速度比较快;
  2. 文件目录改进:为加快目录检索可采用目录项分解法,把FCB 分成两部分:符号目录项(文件名和文件号),基本目录项。目录项分解法减少了访问磁盘的次数,提高文件目录的检索速度。P155,访问盘次数的计算。查找个目录项就分成两步:
    • 首先访问符号目录文件,根据文件名查找相应的文件内部号;
    • 然后访问基本目录文件,根据文件内部号,可直接计算出相应基本目录项所在基本目录文件中的相对位置和物理位置,并将它直接读入内存。

目录操作

以UNIX 为例: 1.Create 2.Delete 3.Opendir 4.Closedir

文件系统的实现

从设计和实现者的角度讨论文件系统如何实现。


存储空间的分配和回收

  1. 位图法:用串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位分配物理块为1,否则为0 。申请物理块时,可以在位示图中查找为的位,返回对应物理块号。
  2. 空闲块表:将所有空闲块记录在一个表中,即空闲块表特别适合文件物理结构为顺结构的文件系统。
  3. 空闲块链表:把所有空闲块链成一个链。
  4. 成组链接法

实现文件系统的表目

当用户申请打开一个文件时,系统要在内存中为该用户保存一些必要的信息,这些信息以表格栏目中内容的形式出现,被称为表目。所需表目:

  1. 系统打开文件表:(整个系统张)放在内存。用于保存已打开文件的FCB 此外,文件号,共享计数,修改标志。
  2. 用户打开文件表:(每个进程个)文件描述符,打开方式,读写指针,系统打开文件表进程的PCB中,记录了用户打开文件表的位置。
  3. 用户打开文件表与系统打开文件表之间的关系:用户打开文件表指向系统打开文件表如果多个进程共享同一个文件,则多个用户打开文件表目对应系统打开文件表的同一入口。

记录的成组与分解

  1. 记录:是一组相关数据项的集合,用于描述数据对象某方面的属性。它是文件中数据处理的基本单位,是组成文件的基本元素。在一个由大量记录组成的文件中, 为了能唯一地标识一条记录,可以在记录的各个数据项中,确定出一个或几个数据项,把它(或它们)称为关键字(key)。如在描述学生的数据项中,学号可以做为关键字。每个用户的文件是由用户按照自己的需要组织的,逻辑记录的大小是由文件的性质决定的。而存储介质上的分块是根据存储介质的特性划分的。所以,逻辑记录的大小往往与存储块的大小不一致。为了节省存储空间,提高主存的利用率,系统引入了记录的成组和分解。
  2. 记录的成组:把若干个逻辑记录合成一组存放在一个物理块的工作称为“记录的成组”。
  3. 是指从一条物理记录中把逻辑记录分离出来的过程。

文件的操作

  • 提供设置和修改对用户文件存取权限;
  • 提供建立、修改、改变、删除目录的服务;
  • 提供文件共享,设置访问路径的服务;
  • 提供创建、打开、读、写、关闭、撤消文件等服务;
  • 文件系统维护;
  • 文件系统的转储和恢复;

文件的保护和安全

防止重要信息不被未授权使用,不被破坏。


文件的共享

  1. 文件的共享:一个文件被多个用户或程序使用,共享形式包括
    • 被多个用户使用,由存取权限控制;
    • 被多个程序使用,但各用自己的读写指针;
    • 被多个程序使用,但共享读写指针;
  2. 目的:节省时间和存储空间,减少了用户工作量,进程间通过文件交换信息。

文件的保护

  1. 文件安全:指避免合法用户有意或无意的错误操作破坏文件,或非法用户访问文件。影响文件安全性的主要因素有:人为因素、系统因素和自然因素。
  2. 为了确保文件系统的安全性,可以采取以下措施:
    • 建立副本,通过后备系统来防止由自然因素所造成的不安全性;建立副本的方法简单,但是系统开销大,且文件更新时,所有副本都必须更新。这种方法适用容量较小且极为重要的文件。
    • 定时转储,通过系统容错技术来防止系统部分的故障所造成的文件不安全性;定时转储的方法简单,但是较为费时,在转储过程中一般要停止文件系统的使用。这种方法适用于容量较大的文件。
    • 规定文件的存取权限,通过存取控制机制来防止由人为因素引起的文件不安全性;文件的使用权限可以设为:只能读、可读可写、只能执行、不能删除等。对多用户共享的文件采用树型目录结构,凡得到某级目录权限的用户就可以得到该目录所属的全部目录和文件。

文件的存取权限

  1. 存取控制矩阵:系统以一个二维矩阵来实施文件的存取控制。
  2. 二级存取控制:两个存取级别,第一级,把用户按照某种关系分为若干组,进行对访问者的识别,第二级,进行对操作权限的识别。
  3. UNIX中的文件存取权限:
    • 对用户分类:文件主( owner )、文件主的同组用户( group )、其它用户( other )
    • 对操作分类:读操作®1、写操作( w )1、 执行操作( x )1、 不能执行任何操作( – )0
      • 总共10个位置,第一个是类别:d是目录,c是字符设备,b是块设备
      • 后3组分别对应3个用户分类,每组的3个对应3个操作分类是否允许
      • –rwxr–xr–x,除去第一个位置,二进制表示为111101101,在UNIX中八进制表示为755。表示为,user的权限为读写和执行,group和other的权限都是读和执行权限。

文件的保密

文件保密:是指文件本身不得被未授权的用户访问止他人窃取文件。实现文件保密采用的方法有:

  1. 隐藏文件目录:把文件目录隐藏起来,非授权用户不知道目录的存在不能使用这些文件。
  2. 设置口令:实现简单、保护信息少、节省存储空间;但是,可靠性差,不能控制存取权限,口令容易泄漏与破解,适用于一般文件的保密。
  3. 使用密码:是指用户把文件信息翻译成密码形式保存,使用时再把它解密,还原文件信息。采用这种方法保密性强,节省磁盘空间。但是,在加密和解密时,增加了系统开销。

文件系统的性能


提高文件系统的性能的常见的技术措施有如下几种:

  1. 块高速缓存:系统在内存中保存一些块,逻辑上它们属于磁盘检查所有的读请求,看所需的块是否在高速缓存中。如果在,则可直接进行读操作。否则,首先要将块读到高速缓存,再拷贝到所需的地方,如果高速缓存已满,则需要进行淘汰。
  2. 合理分配磁盘空间:分配块时,把有可能顺序存取的块放在一起,最好在同一柱面上,从而减少磁盘臂的移动次数;
  3. 磁盘的驱动调度:当多个访盘请求在等待时,采用定的策略,对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间,达到公平、高效。磁盘驱动调度由“移臂调度”和"旋转调度“组成。
    • 移臂调度算法:目的是尽可能减少寻找磁道时间,计算时间或者顺序。
      • 先来先服务( FCFS ):按访问请求到达的先后次序服务,会随时改变移动臂的运动方向。
      • 最短寻道时间优先(SSTF):优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先,会随时改变移动臂的运动方向。
      • 扫描算法( SCAN 电梯算法):当设备无访问请求时,磁头不动;当有访问请求磁头按一个方向移动,对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描,否则改变移动方向经过的访问请求服务,如此反复。单方向
      • 循环扫描( C-SCAN )调度算法:在扫描算法的基础上改进的。磁臂改为单向移动,由外向里。从当前位置开始沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。如果沿磁臂的方向无请求访问时,再回到最外,访问柱面号最小的作业请求。将双向服务改成单向服务,最最大(里)到最小(外)只需要一个很小的单向返程时间
    • 旋转调度:目的是尽可能减少寻找扇区时间。
  4. 信息的优化分布:记录在磁道上的排列方式也会影响磁盘的输入输出时间。
  5. RAID技术:磁盘时机械设备,一方面速度慢,一方面也容易出现故障。RAID 是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
  6. 影响硬磁盘的外部数据传输率的主要因素有:硬盘接口类型和硬盘缓存大小。

Windows的FAT文件系统和UNIX文件系统


Windows的FAT文件系统

  1. FAT 文件系统是各种Windows 操作系统都支持的一个简单的文件系统。存储块采用链式结构管理,不区分文件名的大小写,每个文件只有一个集中的目录项,无法设置访问权限的。
  2. FAT 文件系统一簇为单位进行分配,簇的计算,P175
  3. FAT 有三个版本:FAT-12,FAT-16,FAT-32。
  4. FAT卷的结构包括引导扇区、FAT1、FAT2、根目录、其他目录和文件。实现FAT文件系统时必须用到:引导扇区、FTA1、FAT2、根目录。

UNIX文件系统

  1. UNIX 目录中为每个文件保留了一项,每个目录项包含了两个域,文件名和节点号。
  2. UNIX 普通文件的物理结构是三级索引结构。

第七章 I/O设备管理

设备与设备分类


设备管理的重要性

各种需要处理的信息和操作人员对计算机系统的操作命令,都要通过输入设备进入计算机系统,处理后的信息和结果也要通过输出设备从计算机系统输出。保证系统能安全正确地使用设备。

设备管理的任务

CPU性能越高,I/O设备性能同CPU性能不匹配的反差也越大。如何解决这一矛盾是设备管理的一项重要任务,操作系统主要通过缓冲技术、中断技术和虚拟技术解决这一问题。

设备的分类

  1. 按设备的使用特性分类:
    • 存储设备:存储设备是指用来存放信息的设备,如磁盘、磁带等。
    • I/O (输入输出)设备:输入输出设备是指向CPU 传输信息和输出加工处理信息的设备,如键盘、显示器、打印机等。
  2. 按设备共享属性分类:
    • 独占设备:独占设备是指在一段时间内只允许一个进程访问的设备。系统旦把这种设备分配给个进程后,便由该进程独占,直到用完释放,其他进程才能使用。多数低速设备都属于此类设备,如打印机、扫描仪、绘图机、读卡器等。
    • 共享设备:共享设备是指在一段时间内允许多个进程访问的设备,如磁盘、硬盘等。
    • 虚拟设备:虚拟设备是指通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个进程同时使用的设备,如虚拟打印机。
  3. 按设备的信息组织方式来分类:
    • 块设备:块设备是指处理信息的基本单位是字符块。一般块的大小为512B ~ 4KB,如磁盘、磁带等。
    • 字符设备:字符设备是指处理信息的基本单位是字符,如键盘、显示器、打印机等。

I/O硬件组成


计算机I/O系统的结构

从硬件的角度来看,一个典型的计算机结构,中央部分是CPU 和主存,通过总线与第二层的接口部分连接,第三层各种外围设备控制器,最外层是外围设备。
外围设备包括输入设备、输出设备、外存设备、数据通讯设备和过程控制设备几大类。每一种外围设备在它自己的设备控制器的控制下工作,而设备控制器则通过设配器和主机连接。操作系统并不直接与设备打交道,而是与设备控制器打交道,也就是说操作系统通过对设备控制器中的寄存器进行读写操作与设备交换数据。

I/O设备数据传送控制方式

  1. 程序直接控制方式:程序直接控制方式也称为“忙一等待”方式,即在个设备的操作没有完成时,控制程序直检测设备的状态,直到该操作完成才能进行下一个操作。特点是工作过程简单,CPU 的利用率低。有地址译码通道,其步骤为:
    • 当用户需要输入数据时,由处理器向设备控制器发出一条输入输出指令,启动设备进行输入。
    • 当用户进程需要向设备输出数据时,也必须同样发出启动命令启动设备输出,并等待输出操作完成。
  2. 中断控制方式:中断控制是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中止当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中止处继续执行或调度新的进程执行的过程。其组成部件有:中断请求寄存器、数据寄存器、地址寄存器、触发寄存器和控制寄存器。
    • 特点:中断控制方式比程序直接控制方式提高了CPU 的利用率。每输入输出一个数据都会发生中断,传输组数据需要多次中断,浪费了CPU 的处理时间。中断控制方式应用于现代计算机系统中。
  3. 直接存储器存取控制方式( DMA ):直接存储器存取方式是指对输入输出设备的控制由DMA 控制器完成,在DMA 控制器的作用下,设备和主存之间可以成批地进行数据交换,而不用CPU 的干涉。其组成部件有:源地址寄存器,目标地址寄存器,传输计数器。
    • 特点:数据的传送方向、存放数据的主存始址及传送数据的长度等都由CPU 控制,具体的数据传送由DMA 控制器负责,每台设备需要配个DMA 控制器,这样输入输出数据传输速度快,CPU 负担少。直接存储器存取控制方式适用于块设备的数据传输。
  4. 通道控制方式:I/O 通道是一种特殊的处理机,具有执行I/O 指令的能力,通过执行通道(I/O)程序控制I/O 操作,指令类型单一,主要限于与/O 操作有关的指令没有自己的内存,通道程序放在主机内存中。特点:通道所需要的CPU 干预更少,并可以实现CPU、通道和输入输出设备三者之间的并行操作,从而更有效地提高整个系统资源的利用率。通道控制方式适用于现代计算机系统中的大量数据交换。其分类为:
    • 设备选择通道:可以连接多台高速设备,由于它只含有一个分配型子通道,在一段时间内只能执行一个通道程序,控制台设备进行数据传送,致使当某台设备占用了该通道后,便一直由它独占,直至该设备传送完毕后释放该通道。数据选择通道虽然有很高的传输速率,但它每次只允许一个设备传输数据,这种通道利用率很低。
    • 字节多路通道:通常都含有许多非分配型子通道,其数量可以从几十到数百个,每一个子通道连接台输入输出设备,这些子通道按时间片轮转方式共享主通道。字节多路通道连接低速或中速设备时,不会丢失信息。
    • 数组多路通道(数据多路通道):将数据选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合,而形成的一种新通道。它含有多个非分配型子通道,因而这种通道既具有很高的数据传输速率,又能获得令人满意的通道利用率。该通道被广泛地用于连接多台高、中速的外围设备,其数据传送是按数组方式进行的。

I/O软件的特点及结构

设计I/O 最关键的目标是设备独立性。 I/O 设备管理软件的结构,基本思想是分层构造,使低层与硬件相关,把硬件与较高层次的软件隔离。I/O 软件分为四层:

  1. 中断处理程序;
  2. 设备驱动程序;
  3. 与设备无关的系统软件;
  4. 用户空间的I/O 软件;

设备驱动程序

一是把抽象要求转化为具体要求。二是检查用户输入输出请求的合法性,了解输入输出设备的状态,传递有关参数,设置设备的工作方式。三是发出输入输出命令,启动分配到的输入输出设备,完成指定的输)输出操作。四是及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。五是对设置有通道的计算机系统,驱动程序还应根据用户的输入输出请求,自动地构成通道程序。

与设备无关的系统软件

除了一些I/O 软件与设备相关外,大部分软件是与设备无关的。一般情况,所有设备都需要的I/O功能可以在与设备独立的软件中实现。包括:统一命名、设备保护、提供与设备无关的逻辑块、缓冲、存储设备的块分配、独占设备的分配与释放、出错处理。

用户空间的I/O软件

大部分I/O 软件都包含在操作系统中,但是用户程序可以和库函数连接在一起。
标准的I/O 库包含了许多涉及I/O 的过程,他们都是作为用户程序的一部分运行的。

典型的I/O技术


缓冲技术

  1. 缓冲技术的引入:为了提高输入输出设备的速度和利用率,在输入输出设备与处理器交换数据时引入了缓冲技术。缓冲技术是输入输出设备在与主存交换数据时使用缓冲区的技术。缓冲管理的主要功能是组织好缓冲区,并提供获得和释放缓冲区的手段。
    • 缓和CPU 与输入输出设备间速度不匹配的矛盾;
    • 减少对CPU 的中断频率,放宽对中断响应时间的限制;
    • 提高CPU 与输入输出设备间的并行性;
  2. 单缓冲:是指在设备和处理器之间设置一个缓冲区,用于数据的传输。特点:在主存中只有一个缓冲区。对于块设备,该缓冲区可以存放一块数据,对于字符设备该缓冲区可以存放一行数据。设备和处理器对缓冲区的操作是串行的,传输速度慢。在任时刻,只能进行单向的数据传输,并且传输数据量较少。
  3. 双缓冲:是指在设备和处理器之间设置两个缓冲区。特点:在主存中设置两个缓冲区, 完成数据的传输。两个缓冲区可以交替使用,提高了处理器和输入设备的并行操作能力。在任时刻,可以进行双向的数据传输。一个缓冲区用于输入,另一个用于输出。适用于输入/输出、生产者/消费者速度基本相匹配的情况。当传输数据量较大,或者两者的速度相差较远时,双缓冲区效率较低。
  4. 多缓冲:在设备和处理器之间设置多个的缓冲区。特点:在主存中设置多个缓冲区。读和写可以并行处理,适用于某种特定的输入输出进程和计算进程,如输入输出、生产者/消费者速度不相匹配的情况。当系统较大时,使用多个这样的缓冲区要消耗大量的主存空间,降低缓冲区的使用效率。
  5. 缓冲池:当系统较大时,可以利用供多个进程共享的缓冲池来提高缓冲区的利用率。缓冲池的组成包括空(闲)缓冲区、装满输入数据的缓冲区、装满输出数据的缓冲区,同类缓冲区以链队的形式存在。另外,还应有四种工作缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区,缓冲池属于系统操作空间,用户只能通过系统调用,间接使用他们。特点:缓冲池结构复杂,在主存中设置公用缓冲池,在池中设置多个可以供多个进程共享的缓冲区。缓冲区既可以用于输入,又可以用于输出(即共享)。缓冲池的设置,减少了主存空间的消耗,提高了主存的利用率,适应于现代操作系统。

设备分配技术

  1. 系统设备表(SDT)包括设备类型、设备标识、获得设备的进程号和设备控制表(DCT)指针。即不包含设备等待队列指针。
  2. 设备控制表(DCT)中包含:设备类型、设备标识、设备忙/闲标记、COCT(控制器控制表)指针、设备等待队列首指针和设备等待队列尾指针。即不包含获得设备的进程号。
  3. 控制器控制表(COCT)中包含:控制器标识、控制器忙/闲标记、通道控制表(CHCT)指针、控制器等待队列首指针和控制器等待队列尾指针。即不包含设备类型。

I/O性能问题及解决方案

I/O 性能常常成为系统性能的瓶颈,因此提高I/O性能十分重要。

  1. 通过缓冲技术,减少或缓解不同设备之间传输速度的差距。
  2. 通过异步I/O 技术,使CPU 计算不必等待I/O 操作结果。
  3. 通过应用DMA 和通道部件,使CPU 摆脱I/O 操作,与这些并行执行。
  4. 通过虚拟设备技术,提高独占设备的利用率。

第八章 死锁

死锁基本概念


死锁的概念

  1. 死锁:是指多个进程因竞争资源而造成的一种僵局现象,若无外力的作用,这些进程都不能继续执行,死锁进程至少有两个。
  2. 活锁:数据资源程放时间不确定,导致某些事务长时间等待,得不到封锁的机会。
  3. 饥饿:系统没有发生死锁,但某些进程可能会长时间等待,当等待时间给进程推进和响应带来明显影响时,称进程饥饿。
  4. 区分活锁和饥饿:不进入等待状态的等待称为忙式等待。另种等待方式是阻塞式等待,进程得不到共享资源时将进入阻塞状态,让出CPU 给其他进程使用。忙等待和阻塞式等待的相同之处在于进程都不具备续向前推进的条件,不同之处在于处于忙等待的进程不主动放弃CPU,尽管CPU 可能被剥夺,因而是低效的,而处于阻塞状态的进程主动放弃CPU,因而是高效的。

死锁产生的原因

  1. 竞争资源:当系统中供多个进程共享的资源不足以同时满足它们的需求时,引起它们对资源的竞争而产生死锁。
  2. 进程推进顺序不合理。进程在运行过程中,请求和释放资源的顺序不当,会导致进程死锁。

产生死锁的必要条件

死锁并不一定都会出现,如果一旦产生死锁,一定会满足下述4 个必要条件。

  1. 互斥条件:进程对分配到的资源进行排他性、独占性使用。即在一段时间内某资源只能由一个进程占用,如果此时还有其他进程请求使用该资源,请求者只能等待,直到占有该资源的进程用完后释放,才能使用该资源。
  2. 不剥夺条件:进程所占有的资源,在结束之前不能被剥夺,只能在运行结束后由自己释放。
  3. 请求和保持条件:进程已经拥有并保持了至少一个资源,但是,又请求新的资源,而新请求的资源又被其他进程占有,此时请求进程被阻塞,但是,对已获得的资源保持不放。
  4. 循环等待条件:在发生死锁时,必然存在一个“进程——资源”的环形链。

解决死锁的方法

对于哲学家就餐问题,在下面四种问题中使用的方法

  1. 预防死锁:预防死锁是在进行资源分配之前,通过设置某些资源分配的限制条件,来破坏产生死锁的四个必要条件的一个或几个。预防死锁是一种较简单的方法,容易使用,但是,由于施加了限制条件,会导致系统资源利用率和吞吐量的下降。
    • 增配一只筷子。
    • 仅当一个哲学家左右两边的筷子同时都可用时,才允许取得筷子。
    • 至多只允许4个哲学家可以同时取得筷子。
    • 给所有的哲学家顺序编号。要求奇数号哲学家先取得其左边的筷子,而偶数号哲学家则反之。
    • 为每位哲学家的左右两只筷子各设置一个信号量,哲学家同时对两个信号量执行P、V操作。
  2. 避免死锁:避免死锁是在资源分配前不设置限制条件,在进行资源分配的过程中,用某种方法对每次资源分配进行管理,以避免某次分配使系统进入不安全状态,以至产生死锁。这种方法限制较小,可以获得较好的系统资源利用率和吞吐量。目前比较完善的系统中,通常采用此种方法。银行家算法
  3. 检测死锁:允许系统产生死锁,但在系统中设置检测机构,一旦发生死锁,采取措施解除死锁。在进行资源分配的之后。
  4. 解除死锁:通过撤消或挂起一些死锁中的进程,回收相应的资源,进行资源的再次分配,从而将进程死锁状态解除。这种方法没有限制,可以获得较好的系统资源利用率和吞吐量,但是实现难度较大。在进行资源分配的之后。
    • 某一位哲学家主动放下右手的筷子。

死锁预防


破环“互斥”条件

禁止进程独占资源,如果资源不被一个进程独占,你们死锁肯定不会发生。此条件实现比较困难,限制比较多。可以通过采用假脱机(SPOOLing)技术,允许若干个进程同时输出。

破环“不可剥夺”条件

一个已经占有某些资源的进程,当它再提出新的资源需求而不能立即得到满足时,必须释放它已经占有的所有资源,待以后需要时再重新申请。这意味着进程已经拥有的资源,在运过程中可能会暂时被迫释放,即被系统剥夺,从而摒弃了“不剥夺条件”。
这种预防死锁的方法,实现起来比较复杂,并付出较大的代价,会使前段时间的工作失效等。此外这种方法还会因为反复地申请和释放资源,延长进程的周转时间,增加系统开销,降低系统吞吐量。

破环“请求和保持”条件

系统要求进程必须一次性地申请其在整个运行期间所需要的全部资源。若系统有足够的资源,便一次性将其所需要的所有资源分配给该进程,这样一来,该进程在整个运行过程中,便不会再提出资源请求,从而摒弃了“请求”条件。而在分配时,只要有一个资源要求不能满足,系统将不分配给该进程任何资源,此时进程没有占有任何资源,因而也摒弃了"保持”条件,所以,可以预防死锁的产生。
这种预防死锁的方法,简单方便、易于实现,但是,因为进程将一次性获得所有资源,并且独占使用,其中可能有些资源在该进程运行期间很少使用,造成资源严重浪费;同时有些进程因不能一次性获得所需要的资源,导致长时间不能投入运行。还可以使用静态分配资源策略或者动态资源分配策略。

破环“循环等待”条件

在这种方法中规定,系统将所有的资源按照类型进行线性排序,赋予不同的资源序号。并且所有进程对资源的请求和分配必须严格的按照资源序号由小到大地进行,即只有先申请和分配到序号小的资源,才能再申请和分配序号大的资源。这样在最后形成的资源分配图中,将不可能再出现环路,从而摒弃了“环路等待”条件。
这种预防死锁的方法与前两种相比,其资源利用率和系统吞吐量,都有明显的改善。但是,这种方法涉及对各类资源的排序编号,考虑到实际的使用,其排序的合理性将受到很大的挑战。采用资源的按序分配方法

死锁避免

在死锁的避免中,所施加的限制较弱,可以获得较好的系统性能。该方法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免死锁发生。


安全与不安全状态

安全状态是指系统能够按照某种顺序为每个进程分配所需要资源,直到最大需求,使每一个进程都可以顺利完成。反之,如果系统不存在这样的一个安全序列,则称系统处于不安全状态。
当系统进入不安全状态后,很有可能进入死锁状态;反之,只要系统处于安全状态,便可避免进入死锁状态。因此,避免死锁的实质就是如何使系统不进入不安全状态。

银行家算法

最具代表性的避免死锁的算法是Djkstra 和Habermann 的银行家算法。这是由于该算法能用于银行系统现金贷款的发放而得名。

死锁检测与解除

当系统为进程分配资源时,如果没有采取任何限制措施,系统必须提供死锁的检测与解除机制。杀死进程并回收其占有的资源。


死锁检测

在进行死锁的检测时,系统必须能保存有关资源的请求和分配的信息,并提供一种算法,以便利用这些信息来检测系统是否进入死锁状态。

死锁解除

  1. 当检测到系统发生死锁时,就必须立即把死锁状态解除,常用的方法是:
    • 剥夺资源法:从其他进程剥夺足够数量的资源给死锁进程,使其得到足够的资源,然后继续执行,以解除死锁状态。
    • 撤消进程法:系统采用强制手段将死锁进程撤消。最简单的方法是将全部死锁进程一次性撤消,但是,代价较大;另一种方法是按照一定的算法,从死锁进程中一个个地选择进行撤消,并同时剥夺这些进程的资源,直到死锁状态解除为止。
  2. 解除死锁需要考虑的因素:
    • 进程的优先级是多少?
    • 进程已经运行的时间,还需要多久?
    • 进程使用的资源种类和数量?能被剥夺吗?
    • 为完成任务,还需要多少资源?
    • 该进程被重新启动运行的次数?
    • 有多少进程要被撤销?

资源分配图


死锁的表示——资源分配图

死锁判定法则

如果环路中每个资源的数目只有一个,则意味着死锁的存在,此时,环路是死锁的充分必要条件。
如果处于环路的每个资源数目不为1,则是死锁产生的必要而不是充分条件。判断死锁? 饥饿?正常?

  1. 如果资源分配图中没有环路,则系统没有死锁
  2. 如果资源分配图中出现了环路,则系统可能出现死锁

资源分配图化简法

在死锁检测时,可以利用把资源分配图进行简化的方法来判断系统当前是否处于死锁状态。具体方法如下:

  1. 在资源分配图中,找出一个既非阻塞又非孤立的进程结点Pi。如果Pi 可以获得其所需要的资源而继续执行,直至运行完毕,就可以释放其所占用的全部资源。这样,就可以把Pi 所有关连的资源分配线和资源请求线消去,使之成为孤立的点。
  2. 重复进行上述操作。在一系列的简化后,如果消去了资源分配图中所有的箭头线,使所有进程结点都成为孤立结点,则称该资源分配图是可完全简化的;反之,则称该资源分配图是不可完全简化的。如果当前系统状态对应的资源分配图是不可完全简化的,则系统处于死锁状态,该充分条件称为死锁定理。

你可能感兴趣的:(全国计算机等级考试,系统架构)