操作系统大题总结解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
处理机的执行模式与执行状态
大多数处理器都至少支持两种执行模式,一种是同操作系统有关的模式,另一种则是同用户程序有关的模式。较低特权的模式称为用户模式。较高特权的模式称系统模式、控制模式或内核模式。 内核模式能执行所有的指令,访问所有的内存; 用户模式则只能执行有限的指令,访问规定的内存
处理器往往有一个或多个寄存器来保存处理器模式信息——程序状态字(PSW )
为了防止操作系统及其关键数据(如PCB )遭到用户程序有意或无意的破坏,通常将处理机的执行状态分为两种:核心态与用户态
核心态又称管态、系统态,是操作系统管理程序执行时机器所处的状态。 它具有较高的特权,能执行一切指令,能访问所有的寄存器和存储区。 用户态又称目态,是用户程序执行时机器所处的状态。
它具有较低的特权,只能执行规定的指令和只能访问指定的寄存器和存储区。
信号量练习2.某电话亭每一时刻最多只能容纳一个人打电话。来打电话的人,如果看到电话亭空闲,则直接进入电话亭打电话;如果看到电话亭里正有人在打电话,则在外面排队等候,直到轮到自己,再进入电话亭打电话。请用信号量来表达打电话的进程对电话机的互斥使用逻辑。
该电话亭每次只能容纳一个人打电话(进程)使用,所以是一个临界资源,资源量为1,各进程要互斥使用。
用信号量来表达资源的数量:
semaphore mutex=1;(或empty=1) main( ) { Cobegin
Pi ( );//(i=1,2,3,4,……); Coend }
练习3.某电话亭共有3台电话机,即能容纳3个人(3个进程)同时打电话。来打电话的人,如果看到电话亭有空闲机子,则直接进入电话亭打电话;如果看到电话亭人满,则在外面排队等候,直到轮到自己再进入电话亭打电话。请用信号量机制表达打电话的进程对电话机资源的使用限制。 用信号量来表达空闲的电话机数:
资源量的初值为3(表示开始时有3
semaphore empty=3; main ( ) { Cobegin
Pi ( ); i=1,2,3,…… Coend }
4.生产者-消费者问题
一个说明空缓冲单元的数目,用empty 表示,其初值为有界缓冲区的大小n ,另一个说明满缓冲单元的数目,用full 表示,其初值为0。而有界缓冲区是一个临界资源,必须互斥使用,因此还需要另外设置一个互斥信号量mutex ,其初值为1。semaphore full=0; //第一步:定义信号量, semaphore empty=n; //并为信号量赋初值 semaphore mutex=1;
main( ) // 第二步:编写主函数, { cobegin //在其中调用各个进程 produceri ( ); //i=1,2,…m
consumerj ( ); //j=1,2,…k coend }
例.有三个作业按下表的时间提交给系统,按照先来先服务的调度算法计算它们的平均周转时间T 和平均带权周转时间W
先来先服务;
T=(2.00+2.90+3.00)/3=2.63 W=(2/2+2.90/1+3.00/0.25)/3=5.30 短作业优先;
T=(2.00+3.15+2.00)/3=2.38 W=(2/2+3.15/1+2.00/0.25)/3=4.05
表中有4个作业提交给系统,按响应比高者优先算法调度,计算它们的平均周转时间和平均带权周转时间
producer i( ) { while (1) { 生产一个产品; p(empty) ; p(mutex); 将一个产品送入有界 缓冲区; V(mutex); V(full);
}
consumer j( ) { while (1) { p(full) ; p(mutex); 从缓冲区中取出一个 产品; V(mutex); V(empty); 消费一个产品 }
作业1做完后,其它三个作业的响应比为:
R2p=1+等待时间/估计运行时间=1+1.5/0.5=4
R3p=1+1.0/0.1=11
R4p=1+0.5/0.2=3.5
故作业3的响应比最大,作业1完成后要运行作业3。作业3运行结束时,时间为10:06,这时候再看作业2、4的响应比哪个高:R2p=1+等待时间/估计运行时间=1+1.6/0.5=4.2
R4p=1+0.6/0.2=4
R2p>R4p 所以先调度作业2到内存中,
作业2运行完毕,结束时间为:10:36
T=(2+2.1+1.1+1.3)/4=1.625
W=(2.00/2+2.1/0.5+1.1/0.1+1.3/0.2)/4=5.7
银行家算法;例1
若系统运行中出现如下所示的资源分配情况,该系统是否安全?如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它?为什么?
解(1):利用安全性算法对此刻的资源分配情况进行分析,可得到如下安全性检测表:
从上表中可以看出,此时存在一个安全序列{P0,P3,P4,P1,P2},故该系统是安全的。
请问还有其它的安全序列吗?(如P0-P3-P1-P4-P2)
解(2):P2提出请求(1,2,2,2),按银行家算法进行检查:
Request(1,2,2,2)<=Need(2,3,5,6)
Request(1,2,2,2)<=Available(1,6,2,2)
试着把资源分配给P2,资源分配表中P2的项目改变的有:
Allocation=Allocation+(1,2,2,2)
Need=Need-(1,2,2,2)
Available=Available-(1,2,2,2)
由此得到新的资源分配表:
经检查发现可用的资源Available(0,4,0,0)已不能再满足任何进程的需要,所以,系统处于不安全状态,系统不能把资源分配给P2。
内存的分配与回收
在多道程序设计的环境中,当有作业进入计算机系统时,存储管理模块应能根据当时的内存分配情况,按作业要求,分配给它适当的内存。当某个作业完成之后不再使用内存时,应回收其占用的内存空间。
按照分配时机的不同,有两种内存分配形式:
静态存储分配和动态存储分配
(1)静态存储分配:
指内存分配是在作业运行之前,各目标模块连接后,把整个作业一次性全部装入内存,并规定在作业的整个运行过程中,不允许再申请其它内存或在内存中移动位置。也就是说,内存分配是在作业运行前一次性完成的。
(2)动态存储分配:
作业要求的基本内存空间是在目标模块装入内存时分配的,但在作业运行过程中,允许作业再申请附加的内存空间或者在内存中移动。即分配工作可以在作业运行前及运行过程中逐步完成
显然,动态存储分配具有较大的灵活性。它不要求一个作业把全部信息装入内存才开始运行,而是在作业运行期间需要某些信息时,系统才将其调入内存,作业中暂不使用的信息可放在辅存中,不必进入内存,从而大大提高了内存的利用率。
因此,内存中所有的空闲区和已分配的区域应当被合理地组织起来。
通常可用分区说明表、空闲区链表、存储分块表等组织内存区域。
地址重定位
1.内存空间(物理空间)
内存是由若干个存储单元组成的,每个存储单元都有一个编号。
该编号能唯一地确定一个存储单元,称为内存地址(物理地址)。
内存地址的集合称为内存地址(物理地址)空间,简称内存空间。
它是一个线性空间,其编址顺序为0,1,2,3,……,n-1,n的大小由实际组成存储器的存储单元的个数决定。
如,某个系统有64KB内存,则其内存空间为集合{0,1,2,……,65535}。
2.逻辑地址空间
在多道程序环境中,内存中可同时驻留多个相互独立的进程。
这些进程在内存中的地址,用户事先并不知道,且应用程序装入内存是随机的,每次装入内存时所占用的内存空间可能都不一样。