第一章练习
1、设计现代 OS 的主要目标是什么?
目标:方便性、有效性、可扩展性、开放性
方便性:操作系统使计算机更易于使用。
有效性:操作系统允许以更有效的方式使用计算机系统资源。
提高系统资源利用率
提高系统的吞吐量
可扩展性:在操作系统中,允许有效地开发,测试和引进新的系统功能。
开放性:实现应用程序的可移植性和互操作性,要求具有统一的开放的环境。
2、OS的作用可表现在那几个方面?
作用:用户与计算机硬件系统之间的接口,计算机系统资源的管理者(软硬件资源),以及扩充机器
OS作为用户与计算机硬件系统之间的接口
●计算机用户需要的用户命令 :由OS实现的所有用户命令所构成的集合常被人们称为OS的Interface(用户接口);有时也称为命令接口。
命令的表示形式:字符形式:较灵活但因繁琐而难记;菜单形式:试图在字符终端上提供友好的用户界面;图形形式:因直观而易记但不灵活。
●应用软件需要的System Call(系统调用):由OS实现的所有系统调用所构成的集合被人们称为程序接口或应用编程接口(Application Programming Interface,API)。
OS作为计算机系统资源的管理者(软硬件资源)
① 处理机管理, 用于分配和控制处理机;
② 存储器管理,主要负责内存的分配与回收;
③ I/O设备管理,负责I/O设备的分配与操纵;
④ 文件管理,负责文件的存取、共享和保护。
对于多用户系统,需要管理共享资源,避免发生冲突
操作系统的任务在相互竞争的程序之间有序地控制对硬件设备的分配
资源管理包括用以下两种不同的方式实现多路复用(共享)资源
在时间上复用:当一种资源在时间上复用时,不同的程序“轮流”实用它;例如CPU、打印机等
在空间上复用:每个客户都得到资源的一部分;例如内存、磁盘等
OS用作扩充机器
裸机:完全无软件的计算机系统。
操作系统用作扩充机器功能,使其便于使用
在裸机上覆盖管理软件,实现对设备的操作,并向上提供一组操作命令。
隐藏对设备操作的具体细节,实现对硬件操作的多个层次的抽象。
通常把覆盖了软件的机器称为扩充机器或虚机器。
6、试说明推动分时系统形成和发展的主要动力是什么。
用户需要:人机交互、共享主机、便于用户上机
分时系统实现中的关键问题:
及时接收:实现多个用户的信息及时接收。
及时处理:及时控制作业的运行。
11、OS有哪几大特征?其最基本的特征是什么?
现代OS的四个基本特征:并发、共享、虚拟、异步
1、并发性(最基本的特征)2、共享性3、虚拟性4、异步性
14、处理机管理有哪些主要功能?它们的主要任务是什么?
主要功能 :按照一定的算法把处理机分配给进程(线程),并对其进行有效的管理和控制。
(1) 进程控制
(2) 进程同步和互斥
①进程互斥方式
②进程同步方式
(3) 进程通信
(4) 进程调度
15. 内存管理有哪些主要功能?它们的主要任务是什么?
为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及能从逻辑上扩充内存。
(1)内存分配
(2)内存保护
(3)地址映射
(4)内存扩充
16. 设备管理有哪些主要功能?其主要任务是什么?
完成用户进程提出的I/O请求;为用户进程分配其所需的I/O设备;提高CPU和I/O设备的利用率;提高I/O速度;方便用户使用I/O设备。
(1)缓冲管理:有效地缓和CPU和I/O设备速度不匹配的矛盾 ,提高CPU的利用率。
(2)设备分配:根据I/O请求,分配其所需的设备。
(3)设备处理:设备处理程序又称为设备驱动程序。
17. 文件管理有哪些主要功能?其主要任务是什么?
对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。
(1)文件存储空间的管理
(2)目录管理
(3)文件的读/写管理和保护
第二章练习
2、试画出下面四条语句的前驱图:
S1: a=x+y;
S2: b=z+1;
S3: c=a-b;
S4: w=c+1;
5、在操作系统中为什么要引入进程的概念?它会产生什么样的影响?
为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。
影响:使程序的并发执行得以实行。
6、尝试从动态性、并发性和独立性上比较进程和程序。
1.动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体。
2.并发性是进程的重要特征,同时也是OS的重要特征。引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行。而程序本身是不能并发执行的。
3.独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能作为一个独立的单位来运行。
7、试说明PCB的作用具体表现在哪几个方面,为什么说PCB是进程存在的唯一标识?
a.PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。
PCB中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。
因而它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。
b.在进程的整个生命周期中,系统总是通过其PCB对进程进行控制,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的,所以说,PCB是进程存在的唯一标志。
11、画出进程在三个基本状态及转换图,说明状态转换的典型原因。
答:①就绪→执行:进程调度。
②执行→就绪:时间片完。
③执行→阻塞:I/O请求。
④阻塞→就绪:I/O完成。
12、为什么要引入挂起状态?该状态有哪些性质?
①终端用户的需要、父进程请求、负荷调节的需要、操作系统的需要。
②当该操作作用于某个操作时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度。
13、在进行进程切换时,所要保存的处理机状态信息有哪些?
①进程当前暂存信息。
②下一指令地址信息。
③进程状态信息。
④过程和系统调用参数及调用地址信息。
14、试说明引起进程创建的主要事件。
①用户登录:在分时系统中,用户在终端键输入登录命令后,若登录成功,系统将为该用户建立一个进程,并把它插入就绪队列中。
②作业调度:在多道批处理系统中,当作业调度程序按一定的算法调度到某个(些)作业时,便将它(们)装入内存,为它(们)创建进程,并把它(们)插入就绪队列中。
③提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。
④应用请求:由用户进程自己创建新进程,以便使新进程以同创建者进程并发运行的方式完成特定任务。
15、试说明引起进程被撤销的主要事件。
①正常结束:表示进程的任务已经完成,准备退出运行。
②异常结束:是指进程在运行时发生了某种异常事件,使程序无法继续运行。如越界错、保护错、非法指令、特权指令错、运行超时、等待超时、算术运算错、I/O故障。
③外界干预:是指进程应外界的请求而终止运行。如操作员或操作系统干预、父进程请求、因父进程终止。
16、在创建一个进程时所要完成的主要工作是什么?
①申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
②为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。
③初始化进程控制块(PCB),包括标识信息、处理机状态信息、处理机控制信息。
④如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
17、在撤销一个进程时所要完成的主要工作是什么?
①根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
②若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。
③若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程。
④将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统。
⑤将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
18、是说明引起进程阻塞或被唤醒的主要事件是什么?
①向系统请求共享资源失败:进程在向系统请求共享资源时,由于系统已无足够的资源分配给它,此时进程因不能继续运行而转变为阻塞状态。
②等待某种操作的完成。当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则应先将该进程阻塞起来,以等待操作完成。
③新数据尚未到达:对于相互合作的进程,如果一个进程需要先获得另一进程提供的数据后才能对该数据进行处理,只要其所需数据尚未到达,进程便只有阻塞。
④等待新任务的到达:在某些系统中,特别是在网络环境下的OS,往往设置一些特定的系统进程,每当这种进程完成任务后便把自己阻塞起来,等待新任务的到来。
21、试从调度性、并发性、拥有资源及系统开销方面对进程和线程进行比较。
①调度性:在多线程OS中,线程是独立调度的基本单位,进程是资源分配的基本单位。同一进程中切换线程,不会引起进程切换。
②并发性:在多线程OS中,进程可以并发执行,线程也可以并发执行,线程的并发大大提高了OS的并发性。
③拥有资源:进程拥有资源,而线程(一般)不拥有资源,这样做是为了减少切换线程的开销。同一进程中的多个线程共享该进程的资源。
④系统开销:创建和撤销进程,需要分配和回收相关资源,开销较大;切换进程的成本较高,相对而言,创建和切换线程的成本较低,只需要保存少量寄存器内容,开销小。
23、何为用户级线程和内核支持线程
①用户级线程是在用户空间中实现的。对线程的创建、撤销、同步与通信等功能,都无需内核的支持,即用户级线程是与内核无关的。
②内核支持线程KST是在内核的支持下运行的,它们的创建、阻塞、撤销和切换等,也都是在内核空间实现的。
补充1、在生产者—消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果将会有何影响?
如果缺少signal(full),那么表明从第一个生产者进程开始就没有改变信号量full值,即使缓冲池产品已满,但full 值还是0,这样消费者进程执行wait(full)时认为缓冲池是空而取不到产品,消费者进程一直处于等待状态。
如果缺少signal(empty),在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品empty 值并不改变,直到缓冲池取空了,empty 值也是0,即使目前缓冲池有n 个空缓冲区,生产者进程要想再往缓冲池中投放产品也会因为申请不到空缓冲区被阻塞。
补充2、尝试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法
Var chopstick:array[0,…,4] of semaphore;
所有信号量均被初始化为1,第i 位哲学家的活动可描述为:
Repeat
Wait(chopstick[i]);
Wait(chopstick[(i+1) mod 5]);
…
Eat;
…
Signal(chopstick[i]);
Signal(chopstick[(i+1) mod 5])
Eat;
…
Think;
Until false;
第三章练习
1、高级调度与低级调度的主要任务是什么?为什么要引入中间调度?
高级调度(长程调度、作业调度)主要任务是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要的资源,并将它们放入就绪队列。
低级调度(短程调度、进程调度)主要任务是根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理及分配给被选中的进程。
引入中级调度(内存调度)的目的是,提高内存利用率和系统吞吐量。使那些暂时不能运行的进程不再占用内存资源,将它们调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。
5、在作业调度中应如何确定接纳多少个作业和接纳哪些作业?
作业调度每次接纳进入内存的作业数,取决于多道程序度。应将哪些作业从外存调入内存,取决于采用的调度算法。最简单的是先来服务调度算法,较常用的是短作业优先调度算法和基于作业优先级的调度算法。
7、是说明低级调度的主要功能。
保存处理机的现场信息、按某种算法选取进程、把处理器分配给进程
8、在抢占调度方式中,抢占的原则是什么?
优先权原则、短进程优先原则、时间片原则
9、在选择调度方法和调度算法时,应遵循的准则是什么?
(1)面向用户的准则:周转时间短,响应时间快,截止时间的保证,优先权准则。
(2)面向系统的准则:系统吞吐量高,处理机利用率好,各类资源的平衡利用。
12、试比较FCFS和SJF两种进度调度算法。
相同:两种调度算法都可用于作业调度与进程调度。
不同点:FCFS调度算法每次都从后备队列中选择一个或多个最先进入该队列的作业,将它们调入内存、分配资源、创建进程、插入到就绪队列。该算法有利于长作业进程,不利于短作业进程。
SJF算法每次调度都从后备队列中选择一个或若干个运行时间最短的作业,调入内存中运行。该算法有利于长作业进程,不利于短作业进程。
13、在时间片轮转法中,应如何确定时间片的大小?
略大于一次典型的交互所需要的时间。
15、为什么说多级反馈队列能较好满足各方面用户的需求?
(1)终端型用户。由于终端型用户提交的作业多属于交互性作业,通常较小,系统只要能使这些作业在第一队列规定的时间片内完成,便可使终端型用户感到满意。
(2)短批处理作业用户。对于这类作业,如果可在第一队列中执行完成,便可获得与终端型作业一样的响应时间。对于稍长的短作业,也只需在第二和第三队列各执行一时间片完成,其周转时间仍然较短。
(3)长批处理作业用户。对于长作业,它将依次在第1,2,…,n个队列中运行,然后再按轮转方式运行,用户不必担心其作业长期得不到处理。
20、按调度方式可将实时调度算法分为哪几种?
非抢占式和抢占式。非抢占式又分为非抢占式轮转调度算法和非抢占式优先调度算法,抢占式又分为基于时钟中断的抢占式优先级调度算法和立即抢占的优先级调度算法。
27、何谓死锁?产生死锁的原因和必要条件是什么?
死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
产生死锁的原因:竞争资源和进程推进顺序非法。其必要条件是:互斥条件、请求和保持条件、不剥夺条件、环路等待条件。
在解决死锁问题的几个方法中,哪种方法最易于实现?哪种方法使资源利用率最高?
预防、避免、检测和解除死锁中,预防死锁最容易实现;避免死锁使资源利用率最高。
31、在银行家算法中,若出现下述资源分配情况,试问:
Process |
Allocation |
Need |
Available |
P0 |
0 0 3 2 |
0 0 1 2 |
1 6 2 2 |
P1 |
1 0 0 0 |
1 7 5 0 |
|
P2 |
1 3 5 4 |
2 3 5 6 |
|
P3 |
0 3 3 2 |
0 6 5 2 |
|
P4 |
0 0 1 4 |
0 6 5 6 |
该状态是否安全?
若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
(1)
进程\资源 | Work | Need | Allocation | Work + Allocation | Finish |
---|---|---|---|---|---|
P0 | 1 6 2 2 | 0 0 1 2 | 0 0 3 2 | 1 6 5 4 | true |
1.首先根据目前系统中可用资源为‘1 6 2 2’,只满足P0还需要的资源数,故第一步先为P0分配资源。P0获得运行所需的全部资源后,完成执行,归还资源,此时系统中可用资源为‘Work + Allocation’=‘1 6 5 4’,即为下一步中的‘Work’。
进程\资源 | Work | Need | Allocation | Work + Allocation | 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 |
2.此时系统中可用资源为‘1 6 5 4’,再查看各个进程的‘Need’,只满足P3,故为P3分配资源。P3执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘1 9 8 6’。
进程\资源 | Work | Need | Allocation | Work + Allocation | 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 |
P1 | 1 9 8 6 | 1 7 5 0 | 1 0 0 0 | 2 9 8 6 | true |
3.此时系统中可用资源为‘1 9 8 6’,再查看各个进程的‘Need’,可以发现P1和P4均可满足,此时我们可以任选一进程为其分配资源,此处笔者选择P1进行资源分配。P1执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘2 9 8 6’。
进程\资源 | Work | Need | Allocation | Work + Allocation | 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 |
P1 | 1 9 8 6 | 1 7 5 0 | 1 0 0 0 | 2 9 8 6 | true |
P2 | 2 9 8 6 | 2 3 5 6 | 1 3 5 4 | 3 12 13 10 | true |
4.此时系统中可用资源为‘2 9 8 6’,再查看各个进程的‘Need’,可以发现P2和P4均可满足,此时我们仍然是可以任选一进程为其分配资源,此处笔者选择P2进行资源分配。P2执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘3 12 13 10’。
5.此时系统中可用资源为‘3 12 13 10’,再查看各个进程的‘Need’,可以发现P4可满足,为P4进行资源分配。P4执行完成后归还资源,此时系统中可用资源为‘Work + Allocation’=‘3 12 13 10’。
6.至此全部进程均已成功分配资源并运行结束。并且所有进程的‘Finish’=true都满足,系统处于安全状态,且系统的一个安全序列为<P0,P3,P1,P2,P4>。 该系统不止一个安全序列。
(2)
Request(1,2,2,2)≤ Need(2,3,5,6)成立
Request(1,2,2,2)≤ Available(1,6,2,2)成立
做出如下修改:
Available = Available - Request 即Available =(0,4,0,0)
Allocation = Allocation + Request 即Allocation =(2,5,7,6)
Need = Need - Request 即Need =(1,1,3,4)
在尝试分配的过程中,我们可以发现若满足P2提出的请求Request(1,2,2,2),此时无进程的‘Need’可被‘Available’满足,该系统不存在一个安全序列。因此系统不会将资源分配给P2。该类型题目一般是重复问题(1)的步骤,但是这道题目比较简单,不用列表就可以看出
补充1:系统中有四道作业,其提交时间和运行时间如下表所示。分别用先来先服务、短作业优先调度方法、最高响应比优先法调度、轮转调度算法,完成表格的计算(开始时间、结束时间、周转时间、平均带权周转时间)。单位:小时
作业 |
提交时间 |
运行时间 |
1 |
1:00 |
4 |
2 |
2:00 |
2 |
3 |
2:00 |
6 |
4 |
3:00 |
1 |
先来先服务,调度顺序为 1、2、3、4,平均带权周转时间为(1+2.5+1.83+11)/4=4.0825
作业 |
提交时间 |
运行时间 |
开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 |
1:00 |
4 |
1:00 | 5:00 | 4 | 1 |
2 |
2:00 |
2 |
5:00 | 7:00 | 5 | 2.5 |
3 |
2:00 |
6 |
7:00 | 13:00 | 11 | 1.83 |
4 |
3:00 |
1 |
13:00 | 14:00 | 11 | 11 |
短作业优先调度方法,调度顺序为 1、4、2、3,平均带权周转时间为(1+3+2+3)/4=2.25
作业 |
提交时间 |
运行时间 |
开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 |
1:00 |
4 |
1:00 | 5:00 | 4 | 1 |
2 |
2:00 |
2 |
6:00 | 8:00 | 6 | 3 |
3 |
2:00 |
6 |
8:00 | 14:00 | 12 | 2 |
4 |
3:00 |
1 |
5:00 | 6:00 | 3 | 3 |
最高响应比优先法调度,调度顺序为 1、4、2、3,平均带权周转时间为(1+3+2+3)/4=2.25
作业 |
提交时间 |
运行时间 |
开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 |
1:00 |
4 |
1:00 | 5:00 | 4 | 1 |
2 |
2:00 |
2 |
6:00 | 8:00 | 6 | 3 |
3 |
2:00 |
6 |
8:00 | 14:00 | 12 | 2 |
4 |
3:00 |
1 |
5:00 | 6:00 | 3 | 3 |
分别求p2、p3、p4的最大响应比
R(p2)=1+((5-2)/2)=2
R(p3)=1+((5-2)/6)=1.5
R(p4)=1+((5-3)/1)=3
所以执行p4
分别求p2、p3的最大响应比
R(p2)=1+((6-2)/2)=3
R(p3)=1+((6-2)/6)=1.67
所以执行p2
轮转调度算法,平均带权周转时间为(2.5+2.5+2+2)/4=2.25
作业 |
提交时间 |
运行时间 |
开始时间 | 结束时间 | 周转时间 | 带权周转时间 |
1 |
1:00 |
4 |
1:00 | 11:00 | 10 | 2.5 |
2 |
2:00 |
2 |
2:00 | 7:00 | 5 | 2.5 |
3 |
2:00 |
6 |
3:00 | 14:00 | 12 | 2 |
4 |
3:00 |
1 |
4:00 | 5:00 | 2 | 2 |
假设时间片为1
补充2:假设一个多级反馈队列的实现共有4级,各个队列的时间片长度是1、2、4、6秒,已知当前仅在第一级队列上有一个执行时长为10秒的进程,在两秒后将有一个执行时长为8秒的任务A到达,请算出任务A的周转时间。
16s