以下是我对《计算机操作系统》(第四版)的前四章基础简单理解和概括总结,用来复习和期末考试的,接下来会不断完善。有错误之处还请指点。嘻嘻
- 操作系统引论
- 操作系统的目标和作用
-
- 操作系统的目标
- 方便性
- 有效性
- 可扩充性
- 开放性
- 操作系统的作用
- 作为用户与计算机硬件系统之间的接口:OS处于用户和计算机硬件系统之间,用户通过OS来使用计算机系统.
- 作为计算机系统资源的管理者:处理机、存储器、I/O设备、文件管理。
- 实现了对计算机资源的抽象(虚拟机):通常把覆盖了OS的机器成为扩充机或虚拟机。它向用户提供了一个对硬件操作的抽象模型。
- 推动操作系统发展的主要动力
- 不断提高计算机资源利用率
- 方便用户
- 机器的不断更新换代
- 计算机体系结构的不断发展
- 不断提出新应用需求
- 例题:
- 现代操作系统的主要目标是:提高资源利用率和方便用户。
- 简述操作系统和硬件、其他软件系统及用户之间的关系?
- 操作系统的目标
答:(1)OS和硬件:操作系统是覆盖在硬件上的第一层软件,它与硬件紧密相关,它直接管理着硬件资源,为用户完成所有与硬件相关的操作,提高了系统资源的利用率。
(2)OS和其他软件系统:操作系统是一种特殊的系统软件,其他软件运行在操作系统的基础之上,可获得操作系统的大量服务,即操作系统是其他软件与硬件之间的接口。
(3)OS与用户:一般用户使用计算机除了需要操作系统支持外,还需要用到大量的其他系统软件和应用软件,以使工作更加方便和高效。
-
- 操作系统的发展过程
- 未配置操作系统的计算机系统、单道批处理系统、多道批处理系统、分时系统、实时系统
- 操作系统的一种定义:操作系统是一组控制和管理计算机硬件和软件资源,合理的对各类作业进行调度,以及方便用户使用的程序的集合。
- 操作系统的三种形式:批处理系统、分时系统、实时系统。(通用OS:一个系统往往兼有批处理、分时处理、实时处理三者或者两者的功能,而形成通用OS。)
- 例题:
- 试从交互性、及时性以及可靠性三个方面,比较分时系统与实时系统?
答:(1)交互性:在分时系统中,用户可以通过终端与系统进行广泛的人机交互,如数据处理、资源共享等;而实时系统的交互性具有很大的局限性,仅限于访问系统中某些特定的专用服务程序。
(2)及时性:分时系统的及时性是根据用户所能接收的等待时间决定,在其能接收时间内获得系统的响应;实时系统及时性的要求更为严格,是由被控制对象所要求的截止时间决定的(一般为秒级到毫秒级)。
-
- 操作系统的基本特征
-
- 操作系统的基本特征
- 并发:并行与并发
- 共享:互斥共享方式、同时(微观:交替)访问方式
- 虚拟
- 异步
- 例题
- 操作系统的基本特征
操作系统具有那几大特征?它们之间有何关系?
答:(1)操作系统的特征有并发性、资源共享性、虚拟性和异步性。
(2)并发性和资源共享性是操作系统最基本的特征——多个程序共享系统资源,并发的执行(多道程序设计技术,提高资源利用率)。
(3)并发性和资源共享性是互为存在的条件。一方面,资源的共享是以程序(进程)的并发执行为条件的,若系统不允许并发,则就不存在资源共享问题;另一方面,系统必须对资源共享实施有效管理,协调好进程对共享资源的访问,否则就会影响到并发,甚至根本无法并发。
(4)虚拟性以并发性和资源共享为前提。为了使并发进程能更方便、有效的共享资源,操作系统常采用多种虚拟技术在逻辑上增加CPU和设备的数量、及(主)存储器的容量,从而解决并发进程对有限的系统资源的争用问题。
(5)异步性是并发性和资源共享性的必然结果。并发的进程受到其他进程的制约,不再“一气呵成”,而是“走走停停”。
-
- 操作系统的主要功能
- OS的主要功能:
- 处理机管理功能:对进程的控制、同步、通信,调度管理
- 存储器管理功能:对内存的分配、保护、扩充,地址映射
- 设备管理功能
- 文件管理功能
- 为了方便用户,操作系统还提供友好的用户接口
- 网络操作系统的主要功能:实现多台计算机之间的通信以及网络中各种资源的共享。
- OS结构设计
- 微内核OS结构:采用面向对象技术,运行效率有所降低
- 例题:
微内核结构具有哪些优点?为什么?
答:(1)提高了系统的扩展性:OS的大部分功能都是由独立的服务器去实现的,用户根据需要来选配;随着计算机硬件和OS技术的发展,相应地更新若干服务器或增加一些新的服务器。
(2)增强了OS的可靠性:所有的服务器均是运行在用户态,不能直接访问硬件。
(3)可移植性更好
(4)适用于分布式系统
- 进程的描述与调用
- 前驱图和程序执行
- 前驱图:是有向无循环图,描述进程之间执行的前后关系。
- 程序的顺序执行:顺序性、封闭性、可再现性
- 程序的并发执行:间断性、失去封闭性、不可再现性
- 进程的描述
- 进程的定义:(在磁盘中静态的)程序运行起来了,就是进程。
- 进程的特征
- 动态性:(最基本特征)进程的实质是进程实体的一次执行过程。
- 并发性:引入进程的目的即是为了使进程实体能和其他进程实体并发执行。
- 独立性:进程实体是一个独立运行、独立分配资源、接收调度的基本单位。
- 异步性:进程实体按异步方式运行。
- 进程的基本状态及转换
- 进程的三种基本状态及转换
- 挂起操作和进程状态的转换
- 进程管理中的记录型数据结构:PCB
- 进程控制块PCB的作用:提供进程管理所需要的信息和进程通信
- PCB中的信息:进程标识符、处理机状态、进程调度信息、进程控制信息
- 例题
试比较进程和程序的异同?
答:(1)动态和静态(2)并发与不能并发执行
(3)程序=程序段+数据段,进程 = 程序段+数据段+PCB
-
- 进程的控制:是进程管理中最基本的功能
- 操作系统内核:通常处理机的执行状态分为系统态(较高特权)和用户态。
- 进程的创建
- 进程的层次结构(父进程创建子进程)及进程图(进程家族关系的有向树)
- 引起进程创建的事件:用户登录、作业调度、提供服务、应用请求
- 进程的创建过程:
- 申请空白PCB
- 为新进程分配资源
- 初始化进程控制块
- 将新进程插入就绪队列
- 进程的终止(子孙全部终止):正常结束、异常结束、外界干预
- 原语操作
- 阻塞:block()原语,由执行->阻塞,并将PCB插入阻塞队列
- 换醒:wakeup()原语,移出阻塞队列->PCB状态改为就绪->插入就绪队列
- 挂起:suspend()原语,活动状态->静止状态
- 激活:active()原语,静止状态->活动状态
- 例题
某系统的进程状态转换图如下,请回答:
(1)说明引起各种状态转换的典型事件。
(2)分析状态转换1,2,3,4是否可立即引起其他的状态转换。
答:(1)如下表所示:
转换状态 |
引起转换的典型事件 |
转换1 |
CPU调度 |
转换2 |
执行进程的时间片用完,或被其他优先级高的进程抢占CPU |
转换3 |
等待某事件的完成(如I/O的完成、临界资源可用) |
转换4 |
进程所等待的事件发生 |
(2)状态转换1不会引起其他状态的转换;
状态转换2必然立即引起状态转换1;
状态转换3可能引起状态转换1(若就绪队列为非空);
状态转换4可能引起状态转换1(CPU空闲,此进程又立即执行1),还可能同时引起1和2(若该系统采用抢占调度方式,而新就绪的进程具备抢占CPU的条件(如其优先权很高),则它可立即得到CPU转换成执行状态,而原来正在执行的进程则转换成就绪状态)。
-
- 进程同步
- 进程同步的基本概念
- 两种形式的制约关系:间接相互制约关系、直接相互制约关系
- 临界资源
- 临界区:访问临界资源的那段代码被称为临界区。
- 信号量机制
- 整型信号量:S表示资源数目的整型量,wait(S),signal(S),未遵循“让权等待”
- 记录型信号量:value,*list,如果S->value初值为1,即为互斥信号量
- AND型信号量:一个进程可能需要多个临界资源,将该进程在整个运行过程中需要的资源一次性分配给该进程,使用完后再一起释放(对临界资源进行原子操作方式),避免死锁。
- 信号量集
- 信号量的应用
- 利用信号量实现进程互斥:将临界资源设置一互斥信号量mutex,初始值为1,并将各个进程访问该资源的临界区置于wait(mutex)和signal(mutex)之间。
- 利用信号量实现前驱关系
- 管程机制:代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成了一个操作系统的资源管理模块。
- 经典进程同步问题
①生产者——消费者 例题
桌上有个能盛得下五个水果的空盘子。爸爸不停地向盘中放苹果或桔子,儿子不停地从盘中取出桔子享用,女儿不停地从盘中取出苹果享用。规定三人不能同时从盘子中取放水果。试用信号量实现爸爸、儿子和女儿这三个循环进程之间的同步?
答:本题是生产者——消费者问题的变形,相当于一个能生产两种产品的生产者(爸爸)向两个消费者(儿子和女儿)提供产品的同步问题。因此,需设置两个不同的资源信号量apple和orange,初值为0。
为了描述上述同步问题,可定义如下信号量:
Semaphore empty=5,orange=0,apple=0,mutex=1;
爸爸、女儿、儿子的算法可描述为:
-
- 进程通讯(并发进程之间交换信息)
- 消息传递通信的实现方法
- 直接消息传递系统:原语Send(Receiver, message),Receive(Sender, message)
- 信箱通信:间接通信,非实时通信
- 例题
网络操作系统主要功能是实现各台计算机之间的通信以及网络中各种资源的共享。
-
- 线程(Threads)的基本概念
- 线程是CPU调度和分配的基本单位,进程是资源分配和调度的基本单位。在多线程OS中,进程已不是可执行的实体。
- 线程运行的三个状态:执行状态、就绪状态、阻塞状态
- 例题
试从调度性、并发性、拥有资源、独立性、系统开销方面对进程和线程比较?
答:(1)调度性:在引入线程的OS中,把线程作为调度和分配的基本单位,进程只是拥有资源的基本单位。
(2)并发性:一个进程内的多个线程也可以并发执行,使OS具有更好的并发性。
(3)拥有资源:线程共享其隶属进程的资源,本身基本并不拥有系统资源。
(4)独立性:同一个进程的多个线程共享进程资源,故进程之间的独立性较低。
(5)系统开销:创建和销毁进程时,系统要为之分配和回收资源;隶属同一进程的多个线程共享同一资源,从而它们之间的同步和通信的实现变的更为容易。
-
- 线程的实现方式
- 内核支持线程:CPU调度的对象是线程
- 用户级线程:OS进程CPU调度的对象是进程。
- 组合方式
- 处理机调度与死锁
- 处理机调度的层次和调度算法的目标
- 处理机调度层次
- 高级调度:又称长程调度或作业调度,它的调度对象是作业。决定外存上处于后备队列中的哪些作业调入内存并分配资源,放入就绪队列。
- 低级调度:又称短程调度或进程调度,调度对象是进程(或内核级线程)。决定内存中的就绪队列中哪个进程应获得处理机,并将处理机分配给它。
- 中级调度:又称内存调度。将暂时不能运行的进程调至外存等待或再调入内存。
- 例题
- 三种基本类型的操作系统中,都设置了:进程调度。
- 在批处理系统中,除了进程调度外,还应设置:作业调度
- 引起进程调度的因素有有些?
答:(1)正在执行的进程正常终止或异常终止;(终止)
(2)正在执行的进程因某种原因而阻塞;(阻塞)
(3)在引入时间片的系统中,时间片用完;
(4)在抢占调度方式中,某优先权高的进程抢占了正在执行的进程。(被抢占)
-
- 作业和作业调度
- 作业运行的三个阶段
- 收容阶段:将用户提交的作业通过SPOOLing系统输入到硬盘上,再为作业建立JCB,并放入作业后备队列中。(外存)
- 运行阶段:内存
- 完成阶段:回收资源,并将结果形成输入文件后输出。
- 作业调度算法
- 先来先服务(FCFS):(也可用于进程调度)只考虑作业的等待时间
- 短作业优先(SJF):只考虑作业(所要求的运行时间)长短,平均周转T最短
- 优先级调度算法(PSA):(也可用于进程调度)基于作业的紧迫程度,由外部赋予作业相应的优先级
- 高响应比(Rp)优先调度算法(HRRN):考虑了作业的等待时间和运行时间
-
- 进程调度
- 进程调度方式
- 非抢占式:一旦将处理机分配给进程后,一直让它运行下去到完成或阻塞。
- 抢占式:优先权原则、短进程优先原则、时间片原则
- 基于时间片的轮转调度算法:让就绪对列上的每个进程每次仅运行一个时间片。
- 优先级调度算法:把处理机分配给就绪队列中优先级最高的进程
- 算法两种类型:非抢占式优先级调度算法、抢占式优先级调度算法
- 优先级类型:静态、动态(优先级改变,防止长作业长期垄断处理机)
- 多队列调度算法:设置多个就绪队列,各个队列采用不同调度算法
- 多级反馈队列调度算法:设置多个就绪队列,每个队列都采用FCFS算法,按队列优先级调度。
- 例题
- 降低进程优先级的合理时机是:进程时间片用完。
分析:进程时间片用完可以降低其优先级,完成I/O的进程应该提升其优先级,处于就绪队列等待调度的进程一般不会改变其优先级。
- 假设一个系统中有5个进程,它们的到达时间和服务时间如表所示,忽略I/O以及其他开销时间,若分别按先来先服务(FCFS)、非抢占短进程优先(SPF)进行CPU调度,请给出各进程的完成时间、周转时间、平均周转时间。
答:进程调度的关键是理解和掌握调度所采用的算法。结果如下:
-
- 实时调度:满足实时任务对截止时间的要求
- 最早截止时间优先(EDF)算法:根据任务的开始截止时间来确定优先级,即任务的开始截止时间越早,其优先级越高。(抢占式)
- 最低松弛度优先(LLF)算法:松弛度越低,其优先权越高(松弛度=任务必须完成的时间 - 任务本身的运行时间 - 当前时间)。(抢占式)
- 优先级倒置:高优先级进程(或线程)被低优先级进程(或现场)延迟或阻塞的现象。
- 死锁概述
- 资源问题
- 可重用性资源:使用顺序,请求资源->使用资源->释放资源,单元数目固定。
- 可消耗性资源:又称临时性资源,如用于进程间通信的消息。
- 可抢占性资源:如CPU和主存,不会引起死锁。
- 不可抢占资源:资源一旦分配,就不可强制收回,否则会引起混乱或不确定性。如打印机。
- 计算机中的死锁
- 死锁的定义:在一组进程发送死锁的情况下,这组死锁进程中断每一个进程,都在等待另一个死锁进程所占有的资源。
- 产生死锁的必要条件:互斥条件、请求和保持条件、不可抢占条件、循环等待条件
- 处理死锁的方法:预防、避免、检测、解除
- 例题
引起死锁的原因有哪些?
答:竞争不可抢占性资源、竞争可消耗性资源、进程推进顺序不当。
-
- 预防死锁
- 方法:通过破坏产生死锁的四个必要条件中一个或几个,以避免死锁。(后三种)
- 破坏“请求和保持”条件:第一协议(一次性分配整个所需全部资源)、第二协议(获得初期资源就运行,边释放边请求新的资源)
- 破坏“不可抢占”条件:当保持了某些不可抢占资源时,欲想请求更多而不能满足时,必须释放已有的全部资源。
- 破坏“循环等待”条件:对系统所有资源进行线性排序(欲请求低号必须释放高号)。
- 避免死锁
- 方法:在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
- 例题
- 不安全状态是否必然导致系统进入死锁状态?
答:不一定。安全性检查中使用的向量Max是进程执行前提供的,而在实际运行过程中,一进程需要的最大资源数可能下于Max。
- 在银行家算法中,若出现下述资源分配情况,试问:
(1)请计算分配矩阵的值,并判断该状态是否安全?
(2)若进程P3提出请求Request(0,2,1,0)后,系统能否将资源分配给它?
答:(1)Allocation = Max – Need,所以该时刻,Allocation的值如下:
利用安全性算法对该状态的资源分配情况进行分析如下表:
资源情况 进程 |
Work A B C D |
Need A B C D |
Allocation A B C D |
Work+Allocation A B C D |
Finish |
P0 |
1 6 2 2 |
0 0 1 2 |
0 0 3 2 |
1 6 5 4 |
True |
P3 |
1 6 5 4 |
0 6 5 2 |
0 3 3 2 |
1 9 8 6 |
True |
P4 |
1 9 8 6 |
0 6 5 6 |
0 0 1 4 |
1 9 9 10 |
True |
P1 |
1 9 9 10 |
1 7 5 0 |
1 0 0 0 |
2 9 9 10 |
True |
P2 |
2 9 9 10 |
2 3 5 6 |
1 3 5 4 |
3 12 14 14 |
True |
可知,该状态存在一个安全序列{P0,P3,P4,P1,P2}。
(2)若进程P3提出请求Request(0,2,1,0),系统按银行家算法检查:
Request3(0,2,1,0)<Need3(0,6,5,2)
Request3(0,2,1,0)<Available(1,6,2,2)
系统先假定可为P3分配资源,并修改下面的数据结构中的数值:
Available(1,4,1,2)=Available(1,6,2,2)-Request3(0,2,1,0)
Allocation3=(0,5,4,2),Need3=(0,4,4,2),进行安全性算法检查:
资源情况 进程 |
Work A B C D |
Need A B C D |
Allocation A B C D |
Work+Allocation A B C D |
Finish |
P0 |
1 4 1 2 |
0 0 1 2 |
0 0 3 2 |
1 4 4 4 |
True |
P3 |
1 4 4 4 |
0 4 4 2 |
0 5 4 2 |
1 9 8 6 |
True |
P4 |
1 9 8 6 |
0 6 5 6 |
0 0 1 4 |
1 9 9 10 |
True |
P1 |
1 9 9 10 |
1 7 5 0 |
1 0 0 0 |
2 9 9 10 |
True |
P2 |
2 9 9 10 |
2 3 5 6 |
1 3 5 4 |
3 12 14 14 |
True |
可以找到安全序列{P0, P3,P4,P1,P2},即系统能分配资源给P3
-
- 死锁的检测与解除
- 资源分配图:死锁检测方法——资源分配图化简法。
- 死锁定理:当且仅当S状态的资源分配图是不可完全简化的。
- 存储器管理
- 存储器的层次结构
- 多层结构的存储器系统
- 存储器的多层结构
- 可执行存储器:寄存器和主存储器
- 存储器的主要管理功能:内存分配与回收、内存保护、地址映射
- 程序的装入和链接 (源程序)编译(目标模块)——链接(装入模块:可执行文件)——装入(内存)
- 程序的装入方式
- 绝对装入方式:用户程序经编译后,即产生绝对地址的目标代码。
- 可重定位装入方式:编译时一次计算,不在变化(静态)
- 动态运行时的装入方式:在程序运行时才进行地址转换。
- 程序的链接
- 静态链接方式:在程序运行之前,现将目标模块及库函数链接成一个完整的装配模块。
- 装入时动态链接:采用边装入(内存)边链接方式。
- 运行时动态链接:对某些模块的链接推迟到程序运行时才进行。
- 连续分配存储管理方式
- 单一连续分配:单道程序环境下,一个用户程序独占整个内存。
- 固定分区分配:将内存分区,通过查分区表,为程序分配内存
- 动态分区分配
- 实现方法:数据结构(空闲分区表、分区链),分区分配算法、分配与回收
- 顺序搜索的分区分配算法(如何选择哪个空闲分区)
- 首次适应算法(FF):从链首顺序查找,直到找到满足要求的空闲分区并分配。适合内存中低址部分的空闲分区。
- 循环首次适应算法(NF):不再从链首查找,从上次找到的地方开始查找。能使内存中的空闲分区分布的更均匀,但会缺乏大的空闲分区。
- 最佳适应算法(BF):把既能满足要求,又是最小的空闲分区分配给进程。
- 最坏适应算法(WF):扫描整个空闲分区,把最大的分配给进程,产生的碎片小。(对中小作业有利。)
- 索引搜索的分区分配算法
- 快速适应算法:对空闲分区大小分类,对相同容量的单独设空闲分区链表。
- 伙伴系统:算法规定无论已分配分区或空闲分区,其大小均为2的k次幂(k为整数,l≤k≤m)。k个分区链表,2m为最大分区的大小(整个空间)。
- 哈希算法
- 对换:进程对换等
例题
- 对外存对换区的管理应以提高换入换出的速度为主要目标。
- 对外存文件区的管理应以提高存储空间的利用率为主要目标。
- 分页存储管理方式
- 离散分配类型
- 分页存储管理方式:用户程序的地址空间分为多个页面,内存空间分为若干物理块,任一页可放入任一物理块。(碎片少,内部利用率高)
- 分段存储管理方式:用户程序地址空间分为若干相对独立的段,以段为单位分配内存。
- 段页式存储管理方式
- 分页存储管理的基本方法
- 地址结构(偏移量即页内地址)
对某个机器,若给定一个逻辑空间地址为A,页面大小为L,则页号P和页内地址d为:P=A/L,d=A%L;
- 页表(页面映射表):保证进程仍然能够正确的运行,即在内存中找到每个页面所对应的物理块,系统在内存中为每个进程建立了一张页面映射表。(页号到物理块号的地址映射)
- 快表:高速缓冲寄存器,存放的是页表的部分页表项,用于地址变换。先查块表,若找不到匹配页号,再访问内存中的页表,从而提高了处理速度。
- 访问内存的有效时间:从进程发出指定逻辑地址的访问请求,到找到并取出数据
- 基本方式(2次访存):EAT = t + t;
- 块表(命中率): EAT=а×λ+(t+λ)(1-а)+t = 2t+λ-t×а;
(a:命中率,λ:遍历块表时间,t:访问一次内存时间)
- 例题
- 在分页系统中,地址的转换工作是由(硬件)完成的。
- 在页式存储管理中,其虚拟地址空间是(一维)的。
- 在分页存储管理系统中,逻辑地址的长度为32位,页面大小为4096字节,现有一逻辑地址为2FBAH,且第0、1、2页依次存放在物理块5、8、11中,问相应的物理地址是多少?
答:由题,分页存储管理系统的逻辑地址结构如下:
逻辑地址2FBAH的二进制为:0000 0000 0000 0000 0010 1111 1011 1010
由此可知逻辑地址2FBAH的页号为2,小于页表长度3,没有越界,对应的物理块为11,即B,所以物理地址为:BFBAH。
-
- 分段存储管理方式
- 分段系统的基本原理
分段:作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息:
逻辑地址由段号和段内地址组成。作业的最长有64K个段,每个段的最大长度为64K(16nB,n=1,2……)。装入程序将装入所有段,并为每个段赋予一个段号。
- 段表:为每个段分配一个连续的分区,各个段可离散的装入内存中的不同分区中。
为保证程序正常运行,用段表实现地址映射。
- 分页与分段的比较
- 相同点:都采用离散分配方式提高内存利用率,都通过地址变换机构来死心啊地址变换。
- 不同点:
- 页是信息的物理单位,段是信息的逻辑单位;
- 页的大小固定且是有系统决定的,段的长度不确定;
- 分页用户程序地址空间是一维的,分段用户程序的地址空间是二维的。
- 段页式存储管理方式
先将用户程序分成若干个段,再把每个段分成若干个页。地址结构如下:
利用段表和页表进行用户地址空间到物理(内存)空间的映射如下:
为了获得一条指令或数据,须三次访问内存:段表、页表、内存物理块。
- 例题
- 页式存储管理会产生内部碎片。
- 页表的作用:记录了相应页对用电内存块的块号,以及用于分页保护的存取控制信息。