操作系统复习
目录
第一章 引论
1、操作系统的作用
定义:一、以尽量有效合理的方式组织和管理计算机的各种硬件资源(CPU、内存、磁盘等)。 二、合理组织计算机的工作流程,控制程序的执行,并在程序执行的过程中向程序提供各种各样的服务功能。三、运用某些方式使得用户能灵活、方便的使用计算机,且能够使计算机高效地运行。
作用:
一、操作系统是资源的管理者。
二、向用户提供各种服务(通过命令接口、编程接口等接口)。
三、屏蔽硬件细节,为用户提供一个扩展的虚拟机器。
2、中断的处理过程
现代操作系统是中断驱动的。
中断的部分基本概念
中断处理过程
CPU执行一条指令时,外设向CPU发出中断请求
CPU在满足响应的情况下,发出中断响应信号,
CPU关闭中断,不再受理另一个设备的中断
CPU寻找中断请求源(哪一个设备),并保存CPU自己的程序计数器(PC)等内容
CPU根据中断号转移到处理该中断源的中断服务程序
CPU处理结束,恢复现场信息,开放中断,并返回到原来被中断的主程序的下一条指令
3、操作系统类型(单/多道批处理系统、分时系统、实时系统)及其各自特点。
(1)单/多道批处理系统
概念:同一时刻在内存中存在多道作业,这些作业以某种方式共享CPU
多道批处理系统的三个主要特征(相对于单道):
1)多道性:允许内存中同时装入多个作业并发执行,以充分利用系统资源。多道批处理系统的资源利用效率是基于各作业对系统资源的需求差异得到的。
2)调度性:在外存后备队列中的多个作业,哪些装入内存,由作业调度程序按一定的策略来调度。
3)无序性:在内存中的多个作业的执行次序,完成时间都与进入内存的先后顺序没有直接的对应关系。
多道批处理系统的优点
1)资源利用率高。资源指CPU及设备。
2)系统吞吐量大。系统吞吐量指系统在单位时间完成的总工作量。
多道批处理系统的缺点
1)平均周转时间长。作业的周转时间是指从作业进入系统开始,直至其完成并退出系统为止所经历的时间。
2)无交互能力。
分时系统
把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
分时系统的特征
1)多路性:允许同一主机联接多台终端。
2) 独立性:每一用户独占一个终端。
3)及时性:用户请求能及时响应。
4)交互性:可进行广泛的人机对话。
优点:
为用户提供友好的接口,即用户能在较短时间内得到响应。
便于资源共享和交换信息,为软件开发和工程设计提供良好的环境。
实时操作系统
实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。
实时系统的特征:
(1)同时性:允许多个终端用户同时共享使用一个计算机系统。
(2)独立性:实时系统用户在各自的终端上请求系统服务,彼此独立,互不干扰。
(3)及时性:实时系统对及时性的要求比分时系统更高。
(4)交互性:实时系统具有一定的交互性,较分时系统弱。
(5)可靠性:实时系统要求有非常高的可靠性,否则可能带来灾难性后果。
提供及时响应和高可靠性是其主要特点
4.多道程序设计的含义,并行和并发的区别
(1)多道程序设计的含义
多道程序设计, 是指把一个以上的程序存放在内存中, 并且同时处于运行状态, 这些程序共享 CPU 和其他计算机资源。顾名思义多个程序共享CPU和其他资源
其主要优点:
- CPU 的利用率高。在单道程序环境下, 程序独占计算机资源, 当程序等待 I / O 操作时, CPU 空闲, 造成 CPU 资源的浪费。在多道程序环境下, 多个程序共享计算机资源,当某个程序等待 I / O 操作时, CPU 可以执行其他程序, 这大大地提高了 CPU 的利用率。
- 设备利用率高。在多道程序环境下, 内存和外设也由多个程序共享, 无疑也会提高内存和外设的利用率。
- 系统吞吐量大。在多道程序环境下, 资源的利用率大幅度提高。减少了程序的等待时间, 提高了系统的吞吐量
(2)并行和并发的区别
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
相关概念
5、CPU 的两种运行状态:内核态(管态)和用户态(目态)
概念:
用户态(User mode)(或称目态):执行用户程序时
内核态(kernel mode)(或称:管态、核心态、系统态、特权模式):执行操作系统程序时
内核态与用户态之间的区别
(2)、内核态
- 能够访问所有系统资源,可以执行特权指令,可以直接操作和管理硬件设备。
2)操作系统内核程序运行在内核态下
3)使用内核栈
内核态与用户态
(2)、用户态 - 只能访问属于它的存储空间和普通寄存器,只能执行普通指令。
- 用户程序以及操作系统核外服务程序运行在用户态下
- 使用用户栈
第2章 操作系统结构
1. 操作系统提供给用户使用的常见接口:命令行、系统调用、图形界面
系统调用
系统调用提供了进程与操作系统之间的接口这些调用通常以C或C++语言编写某些底层任务(如需直接访问硬件的任务),可能应以汇编语言指令编写
向操作系统传递参数通常用三种方法
1)通过寄存器来传递参数参数数量可能会比寄存器多
2)将参数存放在内存的块或表中,并将块的地址作为参数传递给寄存器–指针(Linux和Solaris 就采用这种方法)
3)将参数放在堆栈中,并通过操作系统弹出堆栈不限制所传递参数的数量或长度### 2. 系统调用的处理过程及 CPU 工作状态的转换。
为什么需要系统调用
系统调用是内核向用户进程提供服务的唯一方法,应用程序调用操作系统提供的功能模块(函数)。
用户程序通过系统调用从用户态(user mode)切换到核心态(kernel mode),从而可以访问相应的资源。
这样做的好处是:
1)为用户空间提供了一种硬件的抽象接口,使编程更加容易。
2)有利于系统安全。
3)有利于每个进程度运行在虚拟系统中,接口统一有利于移植
系统调用的类型
- 进程控制:结束,中止,装入,执行,创建、终止进程等
- 文件管理:创建文件,删除文件,打开,关闭文件等
- 设备管理:请求设备,释放设备,读、写、重定位设备等
- 信息维护:读取时间或日期、设置时间或日期等
- 通信:创建、删除通信连接,发送、接收消息,传递状态信息等
6)保护
2.系统调用的处理过程及 CPU 工作状态的转换
3. 操作系统的几种主要结构及其特点
(1)、几种常见的操作系统结构
1)简单结构
很多操作系统缺乏明确定义的结构。通常,这些操作系统最初是小的、简单的、功能有限的系统,但后来渐渐超出了原来的范围
2)层次化结构
操作系统分成若干层,每层建立在较低层之上。最底层(层0)是硬件,最高层(层N)是用户接口。
分层法的主要优点是简化了构造和调试。所选的层次要求每层只能调用更低层的功能(或操作)和服务。
主要难点在于合理定义各层
分层法与其他方法相比其效率稍差。例:用户程序执行I/O操作时,陷入I/O层→(调用)内存管理层→CPU调度层→硬件。每一层参数可能会被修改,数据可能需要传递等等。每层都为系统调用增加额外开销,系统调用需要执行更长时间。
3) 单(宏)内核结构
宏内核:与微内核相反,宏内核是构建系统内核的传统方法。在这种方法中,内核的全部代码,包括所有子系统(如内存管理、文件系统、设备驱动程序)都打包到一个文件中。内核中的每个函数都可以访问内核中所有其他部分。如果编程时不小心,很可能会导致源代码中出现复杂的嵌套。
4)微内核
优点
◦微内核易于扩展(新服务可在用户空间内增加,不需修改内核)
◦易于提升OS至一个新的体系结构
◦更可靠(内核模式中运行的代码更少)
◦更安全
缺点
◦用户空间与内核空间的通信代价较高
5)模块(Modules)
许多现代操作系统采用内核模块(kernel modules)结 构
◦ 用面向对象的方法
◦ 内核的组成部分相互分离
◦ 任务之间的交互通过已知的接口来实现
◦ 每个模块在内核中是按照需要可装载的
总之,模块类似于分层,但模块更具灵活性
6)混合系统
实际上很少有操作系统采用单一的、严格定义的结构,它们组合了不同结构,从而形成了混合系统,以便解决性能、安全性和可用性等问题
第三章 进程
1. 程序并发的概念及其特点和带来的好处。
概念:所谓程序的并发执行是指:若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。
另一种描述:两个或多个事件在同一时间间隔内发生
并发程序:能够参与并发执行的程序
程序并发执行可充分利用系统资源,提高计算机的处理能力
特点:
1)执行期间并发程序相互制约: 资源的共享和竞争存在于多道程序的并发执行中,从而制约了各道程序的执行速度。程序执行呈现“走走停停”的现象。
2)程序与计算不再一一对应:在并发执行中,允许多个用户进程调用一个共享程序段,从而形成了多个“计算”
3)执行结果不可再现:并发程序执行结果与其执行的相对速度以及并发执行的多道程序之间的相互关系有关,即执行结果是不确定的
2. 进程的基本概念,进程实体的构成三要素。
进程是系统进行资源分配调度的一个基本单元,每个进程都有自己独立的地址空间。
程序段,数据段和PCB构成了进程实体(进程映像)
进程的特征
并发性:多个进程可同存于内存中,能在一段时间内同时运行;
动态性:进程是程序的执行;
独立性:进程是独立运行和独立获得资源的基本单位;
交往性:一个进程在运行过程中可能会与其他进程发生直接或间接的相互作用。
异步性:各进程按各自独立的不可预知的速度向前推进
结构特征:由程序、数据、进程控制块三部分组成。
3. 进程创建及撤销的过程。
进程创建及撤销的过程
父进程创建若干子进程;后者再创建其子进程;与此类推,构成了反映“传承”关系的一棵进程树
子进程有三种资源共享方式
子进程共享父进程的所有资源
子进程共享父进程的部分资源
子进程不从父进程共享资源,重新独立申请
执行代码的执行顺序有两种可能
父进程和子进程并发执行
父进程在子进程执行期间等待,待子进程执行完毕后才恢复执行余下代码
地址空间中的image
子进程复制了(duplicate,不是copy)父进程的image(具有与父进程同样的程序和数据)
子进程全新装入一个程序,得到不同于父进程的image
4. 进程的三种基本状态及其转换
五个状态:
进程执行过程中,它变换着状态
new:进程被创建
running:进程的代码正在解释执行
waiting:进程等待某个(某些)事件发生
ready:进程准备就绪,等待分配一个CPU来解释执行
terminated:进程被终止执行
进程的状态转换
①就绪→运行:操作系统按规定策略选中一就绪进程,让它占有处理器
②运行→等待:进程运行中启动了外设,等待外设传输结束;进程在运行
中申请资源得不到满足,等待分配;进程在运行中出现了故障,等待人工干预
③等待→就绪:外设工作结束;等待的资源得到满足(另一进程归还);
故障排除等进程结束等待
④运行→就绪:时间片用完;有更高优先级的进程要运行等情况发生,迫
使进程暂时让出处理器。
⑤创建→就绪:提交一个新进程,进入就绪状态。由于性能、内存、进程
总数等原因,系统会限制并发进程总数。
⑥运行→终止:由于进程完成或失败而终止进程运行,进入结束状态
链接: 三种基本状态
补充:原语(作业中常出现)
第4章 线程
1. 进程和线程的主要区别
线程(轻型进程lightweight process, LWP )是进程中的一个运行实体,是CPU的调度单位,包括:
◦ 线程ID
◦ 程序计数器
◦ 寄存器组
◦ 栈空间
◦ TCB(Thread Control Block)
它与属于同一进程的其他线程共享:代码段、数据段和其他操作系统资源,如打开文件和信号。
传统的或重型进程(heavyweight process)等价于只有一个线程的任务
主要区别:
(1)、调度
在传统OS中,拥有资源、独立调度和分派的基本单位都是进程,在引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位
。把传统进程的两个属性分开,使线程基本不拥有资源,这样线程便能轻装前进,从而可显著地提高系统的并发程度。
在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的程时,将会引起进程切换。
(2)、并发性
引入线程的操作系统中,不仅进程间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,使得操作系统具有更好的并发性
。
在未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当该进程由于某种原因而被阻塞时,便没有其它的文件服务进程来提供服务。
引入线程的操作系统中,则可以在一个文件服务进程中设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行,提供文件服务;当第二个线程阻塞时,则可由第三个继续执行,提供服务。这样的方法可以显著地提高文件服务的质量和系统的吞吐量。
(3)、拥有资源
无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源
,但它可以访问隶属进程的资源。即一个进程的代码段、数据段及所拥有的系统资源,如已打开的文件、I/O设备等,可以供该进程中的所有线程所共享。
(4)、系统开销
创建/撤消进程时,系统都要为之创建/回收进程控制块,分配或回收资源(如内存空间和I/O设备等),系统付出开销较大
。
进程切换时,涉及到当前进程CPU环境的保存及新被调度进程的CPU环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作
。
由于一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面,线程也比进程容易。一些操作系统中,线程的切换、同步和通信都无须操作系统内核的干预。
(5)独立性
同一进程中不同线程之间的独立性比不同进程之间的独立性低得多
。每个进程都有独立的地址空间和其它资源,除共享全局变量外,不允许其它进程访问;但同一进程中的不同线程往往是为了提高并发性以及进行相互合作而创建的,他们共享进程的内存地址空间和资源。
(6)、支持多处理机系统
在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上,但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,加速进程完成。
多线程的优点:
响应度高:
增加了对用户的响应程度(多线程web浏览器,一线程装入图像,另一线程与用户交互),即使部分阻塞或执行较长操作,程序仍能继续执行
资源共享:
线程默认共享它们所属进程的内存和资源
允许一个应用程序在同一地址空间内有多个不同的活动线程
经济:
线程创建和上下文切换比进程创建与上下文切换更经济(Solaris进程创建比线程创建慢30倍,而进程切换比线程切换慢5倍)
可伸缩性–能充分使用多处理器体系结构:
单线程进程只能运行在一个CPU上 。
在多CPU机器上使用多线程增加了并发功能。
2. 用户级线程和内核级线程的主要区别
(1)、内核支持线程KST
内核支持线程KST是在内核支持下运行的,无论用户进程中的线程,还是系统进程中的线程,其创建、撤消和切换等都依靠内核,在内核空间实现。
在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在,并对其加以控制。
优点:
1)在多处理器系统中,内核能同时调度同一进程中多个线程并行执行
2)如果进程中的一个线程被阻塞,内核可以调度该进程中的其它线程占有处理器运行,也可以运行其它进程中的线程;
3)内核本身也可以采用多线程技术,从而提高系统的执行速度和效率
缺点是:
用户线程切换的开销较大,在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转到内核态进行,这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的,系统开销较大。
(2)、用户级线程ULT
用户级线程ULT仅存在于用户空间中。这种线程的创建、撤消、线程间同步与通信等功能,都无须利用系统调用来实现。
用户级线程的切换,通常发生在一个应用进程的诸多线程之间,这时无须内核的支持。由于切换规则简单,因而使线程的切换速度特别快。
ULT是与内核无关的。可以为一个应用程序建立多个用户级线程,系统中的用户级线程数量可达成百上千个。由于这些线程的任务控制块都设置在用户空间,而线程所执行的操作也无须内核帮助,因而内核完全不知道用户级线程的存在。
设置了用户级线程的系统,其调度仍以进程为单位。在采用轮转调度算法时,各进程轮流执行一个时间片,假如进程A中包含1个用户级线程,进程B中含有100个用户级线程,这样,进程A中线程的运行时间将是进程B中各线程运行时间的100倍;其速度要快上100倍
如果系统使用的是内核支持线程,则调度是以线程为单位进行。采用轮转法调度时,各个线程轮流执行一个时间片。假如进程A中只有1个内核支持线程,进程B中有100个内核支持线程。此时进程B可获得的CPU时间是A的100倍,且进程B可以使100个系统调用并发工作
优点:
- 线程切换不需要转换到内核空间
线程的管理数据结构及管理线程切换的线程库均在所属进程的用户空间中,因此进程不必切换到内核方式来做线程管理,从而节省了模式切换开销,也节省了内核的宝贵资源。 - 调度算法可以是进程专用的
在不干扰操作系统调度的情况下,不同进程可以选择不同调度算法对自己的线程进行管理和调度,这与操作系统的低级调度算法是无关的。 - 用户级线程的实现与操作系统平台无关
线程管理代码在用户程序内,属于用户程序的一部分,用户级线程甚至可在不支持线程机制的操作系统平台上实现。
缺点:
系统调用的阻塞问题
。基于进程机制的操作系统中,多数系统调用将阻塞进程,当线程执行一个系统调用时,不仅该线程被阻塞,其所属进程内的所有线程都会被阻塞。而在内核支持线程方式中,则进程中的其它线程仍然可以运行。- 在单纯的用户级线程实现方式中,
多线程应用不能利用多处理机进行多重处理
的优点。内核每次分配给一个进程的仅有一个CPU,因此进程中仅有一个线程能执行,在该线程放弃CPU之前,其它线程只能等待。
3. 线程实现的 3 种模型及其特点
(1)多对一模型
映射多个用户级线程到一个内核线程。线程管理是由用户空间的线程库来完成的,因此效率更高。
如果一个线程执行阻塞系统调用,那么整个进程将会阻塞。因为任一时间只有一个线程可以访问内核,所以多个线程不能并行运行在多处理核系统上。
(2)一对一模型
映射每个用户线程到一个内核线程。
该模型在一个线程执行阻塞系统调用时,能够允许另一个线程继续执行,所以它提供了比多对一模型更好的并发功能;它也允许多个线程并行运行在多处理器系统上。
缺点是创建一个用户线程就要创建一个相应的内核线程。开销较大,影响应用程序性能,所以需要限制系统支持的线程数量。
(3)多对多模型
多路复用多个用户级线程到同样或更少数量的内核线程。内核线程数可能与特定应用程序或特定机器有关。
多对多模型变种——双层模型(tow-level model)
仍然多路复用多个用户级线程到同样数量或更少数量的内核线程,但也允许绑定某个用户线程到一个内核线程。
第5章 CPU 调度
1. 进程调度的作用与调度的时机。
作用: 需要进程调度的理由很充分,即充分利用计算机系统中的CPU资源,让计算机能够多快好省的完成各种任务
。为此,可在内存中存放数目远大于计算机系统内CPU个数的进程,让这些进程在操作系统的进程调度器下,能够让进程高效(高的吞吐量–throughput)、及时(低延迟–latency)、公平(fairness)地使用CPU。为此调度器可设计不同的调度算法来选择进程,这体现了进程调度的策略,同时还需并进一步通过进程的上下文切换(context switch)来完成进程切换,这体现了进程调度的机制。
总体上说,我们需要何时调度(调度的时机)、是否能够在内核执行的任意位置进行调度(调度的方式)、如果完成进程切换(上下文切换)、如果选择“合适”的进程执行(调度策略/调度算法)、如果评价选择的合理性(进程调度的指标)。
调度的时机:
调用CPU调度器的时机,通常发生在:
1). 某一进程从执行状态转为等待状态
2).某一进程从执行状态转为就绪状态
3). 某一进程从等待状态转为就绪状态
4). 某一进程终止
第1种情形和第4种情形称作“非抢占式” (nonpreemptive)调度。
第2种情形和第3种情形称作“抢占式” (preemptive)调度。
2. 常用调度算法的调度原则及优缺点:先来先服务、短作业优先、优先级调度、时间片轮转法、多级反馈队列
3. (重难点)调度算法及进程的完成时间,周转时间,带权周转时间,平均周转时间和平均带权周转时间计算,设备或 CPU 利用率的计算:先来先服务、短作业优先、优先级调度、时间片轮转法。
计算时需要注意的几个问题(必看):
1、周转时间=完成时间-到达时间 带权周转时间=周转时间/服务时间
2、切记周转时间为该进程从进入到完成的时间,应该用完成时间一进入时间,务必记得有减去这一步。
第6章 进程同步
1. 临界资源和临界区概念
假设 n 个进程竞相访问共享数据的情形
每个进程存在一段代码,称作为临界区(critical section), 进程就是通过这段代码访问了共享数据
(shared data)
其它代码段没有访问共享数据
这 n 个进程中,至少存在1个以上的进程甚至修改了共享数据
临界资源:在某段时间内只允许一个进程使用的资源
临界区:每个进程中访问临界资源的那段程序
不论是硬件还是软件临界资源,多个进程必须互斥地对它进行访问。
在每个进程中访问临界资源的那段代码称为临界区(critical section)。若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。
每个进程在进入临界区前,应先检查临界资源是否正被访问,若未被访问,则可进入临界区并设置其访问标志;
若临界资源正被某进程访问,则本进程不能进入临界区。
须在临界区前增加一段用于进行上述检查的代码,这段代码称为进入区(entry section)。在临界区后也要加一段称为退出区(exit section)的代码,用于将临界区正被访问的标志恢复为未被访问的标志。
2. 解决临界区问题必须满足的3个条件:互斥、前进、有限等待
1).互斥:任何时候只有一个线程或者进程可以访问临界区
2).前进(Progress):一个进程或者线程想进入临界区,则最终他会进入临界区,不会一直等待。
3).有限等待:一个进程只需等待有限的时间段就能确保它可以进入临界区去执行。
3. 信号量机制及其应用
4.(重难点)使用信号量解决进程同步问题
第7章 死锁
1. 什么是死锁?死锁产生的原因
死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。 这一组进程就称为死锁进程。
如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。
推论:
1、参与死锁的所有进程都在等待资源
2、参与死锁的进程是当前系统中所有进程的子集
产生死锁的原因
1、竞争资源引起死锁
在多道程序系统,多个进程共享系统的资源。系统资源分为二类: 一类是不可抢占的资源,如打印机、磁带机等。当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完
后自动释放。另一类是可抢占的资源,如CPU、内存等。由于系统拥有的不可抢占的资源有限,多个进程共享竞争不可抢占的资源就可能引起死锁。
2、进程推进顺序不当引起死锁
在多道程序系统中,并发执行的进程推进序列不可予测,有些推进顺序,进程可以顺利完成,这些推进顺序是合法的;而有的推进顺序会引起进程无限期地等待永远不会发生的条件而不能向前推进,造成了死锁。
2. 死锁的 4 个必要条件
互斥条件:一个( Mutual exclusion )资源一次只能被一个进程所使用,即是排它性使用。
不可抢占条件( No preemption ):一个资源仅能被占有它的进程所释放,而不能被别的进程强占。
请求和保持条件( Hold-and-wait )(部分分配):进程已经保持了至少一个资源,但又提出了新的资源要求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对已经获得的其它资源保持不放。
环路等待条件( Circular wait ):当每类资源只有一个时,在发生死锁时,必然存在一个进程-资源的环形链。如一系统状态的资源分配图所示,P1正在等待一个P2 占用的资源R2,P2正在等待一个P1占用的资源R1。
资源分配图:ppt上,p是进程,r是资源
如果图没有环,那么不会有死锁
如果图有环
如果每一种资源类型只有一个实例,那么死锁发生
如果一种资源类型有多个实例,可能死锁
死锁定理:S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。
3. 死锁预防所采用的策
预防死锁的方法是破坏产生死锁的四个必要条件之一
1、破坏互斥条件
互斥使用是资源本身特征所决定的。使用硬软件结合可改变资源本身特性,例如采用SPOOLing技术可将“独享” 打印机改变为 “共享”的打印机。
2、破坏不可抢占条件
如果一个进程的申请没有实现,它要释放所有占有的资源 通常应用于其状态可以保存和恢复的资源,如CPU寄存器和内存空间,不能适用于其他资源如打印机和磁带驱动器。
3、破坏请求和保持条件
当一个进程申请一个资源时,它不能占有其他资源。执行前申请并获得所有资源(静态分配)。申请其他资源之前,必须释放其现在已分配的所有资源
缺点:资源利用率可能比较低;可能发生饥饿
4、破坏循环等待条件
有序资源使用法
该方法将所有的资源按类型进行线性排队,并赋予不同的序号。例如令输入机的序号为1,打印机序号为2,磁盘机序号为3等。
所有进程对资源的请求必须严格按资源序号递增的次序提出
。这样在所形成的资源分配图中不可能再出现环路,因而摒弃了“环路等待”条件,在采用这种策略时总有一个进程占据了较高序号的资源,它继续请求的资源必然是空闲的,因而进程可以一直向前推进。这种预防死锁的策略可以提高资源利用率,但在进程使用各类资源的顺序与系统规定的顺序不同时会造成资源浪费的情况。
4. (重难点)采用银行家算法判断系统安全性及避免死锁
避免算法
单实例资源: 资源分配图法
多实例资源: 银行家算法
银行家算法:
每一个进程必须事先声明使用的最大量,当一个进程请求资源,它可能要等待。当一个进程得到所有的资源,它必须在有限的时间释放它们
5. 解除死锁的两种常用方法
处理死锁的基本办法
1、死锁的预防
静态方法:在进程执行前采取的措施,通过设置某些限制条件,去破坏产生死锁的四个必要条件之一,防止发生死锁。(设计合适的资源分配算法,不让死锁发生)
2、死锁的避免
动态的方法:在进程执行过程中采取的措施,不需事先采取限制措施破坏产生死锁的必要条件,而是在进程申请资源时用某种方法去防止系统进入不安全状态,从而避免发生死锁。(以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配)
3、死锁的检测和解除(让死锁发生)
这种方法预先并不采用任何限制措施,允许系统在运行过程中发生死锁,但可通过系统设置的检测机构及时检测死锁的发生,如检测到死锁,则采用撤消进程等死锁解除方法使系统恢复正常工作。
4、驼鸟算法(The Ostrich Algorithm)
自称没有死锁问题,理由是死锁极少发生和预防的成本太高。如发生死锁采用重启动和人工恢复方法。这是方便和正确
的折中方法。大部分的操作系统包括UNIX、Linux、Windows采用这种方法。
第8章 内存管理
1. 逻辑地址与物理地址的关系
逻辑地址空间的概念同物理地址空间相关联,它是正确内存管理的核心
逻辑地址 – CPU产生的地址; 也称为虚地址
逻辑地址 – 非物理的各种地址标记包括符号名,包括编译、汇编、连接、装入操作产生的地址
物理地址 – 内存单元接收到的地址。也就是说,“浮现”在地址总线的地址,以二进制形式表达。
编译时期和装入时期的地址绑定方法生成相同的逻辑地址和物理地址,而在执行时的地址绑定方案生成不同的逻辑地址和物理地址。
逻辑地址空间:由程序所生成的所有逻辑地址的集合
物理地址空间:逻辑地址对应的所有物理地址的集合
对于执行时地址绑定方案,逻辑地址空间与物理地址空间是不同的
2. 连续内存分配常用的几种分区分配算法要点及其优缺点:首次适应算法、最优适应算法、最坏适应算法。
-
首次适应算法(first fit)
空闲分区链以地址递增的次序链接,分配时从链首开始顺序查找,将找到的第一个大小满足要求的空闲区分割后分配给进程,余下部分仍留在空闲链中。若从链首直至链尾都找不到,则此次内存分配失败返回。
该算法倾向于优先利用内存中低址部分的空闲区,从而保留了高址部分的大空闲区,为以后到达的大作分配大的内存空间创造了条件。
其缺点是低址部分不断被划分,会留下许多难以利用的、很小的空闲分区,而每次查找又都是从低址部分开始,无疑会增加查找可用空闲分区时的开销 -
循环首次适应算法(next fit)
分配内存空间时,从上次找到的空闲分区的下一个空闲区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
为实现该算法,应设置一起始查寻指针,用于指示下次起始查寻的空闲分区,并采用循环查找方式。找到后,应调整起始查寻指针。
该算法能使内存中的空闲分区分布更均匀,从而减少了查找空闲分区时的开销,但这样会缺乏大的空闲分区。 -
最佳适应算法(best fit)
“最佳”是指为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。
为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。
孤立地看,最佳适应算法似乎是最佳的,然而在宏观上却不一定。因为每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的小空闲区。 -
最坏适应算法(worst fit)
最坏适应分配算法要扫描整个空闲分区表或链表,总是挑选一个最大的空闲区分割给作业使用。
该算法要求将所有空闲区按容量以从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足要求。
优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时算法查找效率很高。但该算法的缺点是会使存储器中缺乏大的空闲分区。
3. 分页式存储管理的原理及多级页表结构。
一级页表的优点是查询物理地址效率高,缺点是占用内存空间大;多级页表相反
Linux n级页表在TLB 不命中的情况下,访问内存指令或数据需要访问n+1次内存.n级段表也一样;n级段页式n+2
4. 分页式存储管理模式下的地址变换过程——地址重定位。
5. 平均页面访问时间的计算。
6. 分页与分段的比较。
段式与页式管理的比较
(1) 段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
(2) 页的大小固定不变,由系统决定。段的大小是不固定的,它由其完成的功能决定。
(3) 段式向用户提供的是二维地址空间,页式向用户提供的是一维地址空间,其页号和页内偏移是机器硬件的功能。
(4) 由于段是信息的逻辑单位, 因此便于存贮保护和信息的共享,页的保护和共享受到限制。
第9章 虚拟内存
1. 虚拟存储器的实现原理。
虚拟存储的基本原理
1)、在程序装入时,不必将其全部读入到内存,而只需将当前执行需要的部分页或段读入到内存,就可让程序开始执行。
1)、在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段)
,则由处理器通知操作系统将相应的页或段调入到内存,然后继续执行程序。
1)、另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。
2. 虚拟存储器最大实际容量的计算。
最大容量取决于CPU地址
实际容量取决于内外存之和以及CPU地址。
比如CPU寻址是32位,那么虚拟内存的最大容量就是2^32 B
32位计算机对应的虚拟存储容量:2^32=4 294 967 296 单位是字节。就是4G!
比如内存1M,问外存400M,32位,那么实际容量就是min(1M+400M,2^32B)(假设该系统按字节编址)
所以取最小容量才有意义!
3. 页面置换算法及缺页次数和缺页率的计算:最佳置换算法 OPT、先入先出算法 FIFO、最近最久未使用算法 LRU。
B站上有,通俗易懂,直呼666
4. 工作集原理及相关计算。
工作集的简易计算
当系统中的时间间隔定为△时,t时刻的工作集就是t时刻往前数△个时间内的页面的集合(注意:当时间间隔内出现相同页面时,只用包括一个就可以)
第10章 文件系统接口
1. 文件的打开和关闭。
2. 文件的逻辑结构和物理结构。
3. 文件的两种访问方式:顺序访问、直接(随机)访问。
4. 文件目录的作用。
5. 文件目录的 3 种结构原理及优缺点:单层结构目录、双层结构目录、树状结构目录。
单级目录 Single-Level Directory
所有文件都包含在同一目录中,便于支持和理解。
但存在命名问题与分组问题。且查找速度慢。
两级目录Two-Level Directory
为不同的用户建立不同的目录
不同用户的文件允许同名
不支持分组
提高了文件检索速度
不便于共享
树形结构目录优点:
①查询速度更快
②层次结构更清晰,能更加有效地进行文件的管理和保护
③不同性质、不同用户的文件可以构成不同的目录子树,不同层次、不同用户的文件分别呈现在系统目录树中的不同层次或不同子树中,可以容易地赋予不同存取权限。
树形结构目录缺点:
查找文件需要按路径名逐级访问中间节点,增加了磁盘访问次数,影响查询速度。
目前,大多数操作系统如UNIX、Linux和Windows系列都采用了多级目录结构。
6. 绝对路径与相对路径。
第11章 文件系统实现
- 几种外存分配方式原理及优缺点:连续分配、链接分配(隐式链接、显示链接)、索引
分配。 - 使用一级索引和二级索引时,文件系统支持的最大文件长度计算。
- 外存空闲空间管理的几种常用方法。
- 位示图(位向量)的原理及相关计算。
第12章 大容量存储器的结构 - 磁盘容量的计算:盘面数每个盘面上的磁道数每条磁道上的扇区数*扇区大小。
- 磁盘访问时间的构成:寻道、旋转延迟、数据传输及计算。
- 磁盘调度算法原理及平均寻道长度的计算:先来先服务 FCFS、最短寻道时间优先
SSTF、电梯调度算法 LOOK、循环扫描算法 C-LOOK。 - 各级 RAID 的主要特点。
第13章 I/O 系统 - 4 种 I/O 访问方式:轮询的 I/O、中断驱动的 I/O、DMA 直接内存访问、通道。
- 设备缓冲区的原理、作用及单、双缓冲的计算。
- 设备分配的相关概念。
- 设备驱动程序的作用。
- SPOOLing 系统组成与虚拟设备技术。