处理机的执行模式与执行状态大多数处理器都至少支持两种执行模式,一种是同操作系统有关的模式,另一种则是同用户程序有关的模式。
较低特权的模式称为用户模式。
较高特权的模式称系统模式、控制模式或内核模式。
内核模式能执行所有的指令,访问所有的内存; 用户模式则只能执行有限的指令,访问规定的内存处理器往往有一个或多个寄存器来保存处理器模式信息——程序状态字(PSW )为了防止操作系统及其关键数据(如PCB )遭到用户程序有意或无意的破坏,通常将处理机的执行状态分为两种:核心态与用户态核心态又称管态、系统态,是操作系统管理程序执行时机器所处的状态。
它具有较高的特权,能执行一切指令,能访问所有的寄存器和存储区。
用户态又称目态,是用户程序执行时机器所处的状态。
它具有较低的特权,只能执行规定的指令和只能访问指定的寄存器和存储区。
信号量练习2.某电话亭每一时刻最多只能容纳一个人打电话。
来打电话的人,如果看到电话亭空闲,则直接进入电话亭打电话;如果看到电话亭里正有人在打电话,则在外面排队等候,直到轮到自己,再进入电话亭打电话。
请用信号量来表达打电话的进程对电话机的互斥使用逻辑。
该电话亭每次只能容纳一个人打电话(进程)使用,所以是一个临界资源,资源量为1,各进程要互斥使用。
用信号量来表达资源的数量:semaphore mutex=1;(或empty=1) main( ) { CobeginPi ( );//(i=1,2,3,4,……); Coend }练习3.某电话亭共有3台电话机,即能容纳3个人(3个进程)同时打电话。
来打电话的人,如果看到电话亭有空闲机子,则直接进入电话亭打电话;如果看到电话亭人满,则在外面排队等候,直到轮到自己再进入电话亭打电话。
请用信号量机制表达打电话的进程对电话机资源的使用限制。
用信号量来表达空闲的电话机数:资源量的初值为3(表示开始时有3semaphore empty=3; main ( ) { CobeginPi ( ); 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,…mconsumerj ( ); //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=4R3p=1+1.0/0.1=11R4p=1+0.5/0.2=3.5故作业3的响应比最大,作业1完成后要运行作业3。
作业3运行结束时,时间为10:06,这时候再看作业2、4的响应比哪个高:R2p=1+等待时间/估计运行时间=1+1.6/0.5=4.2R4p=1+0.6/0.2=4R2p>R4p 所以先调度作业2到内存中,作业2运行完毕,结束时间为:10:36T=(2+2.1+1.1+1.3)/4=1.625W=(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.逻辑地址空间在多道程序环境中,内存中可同时驻留多个相互独立的进程。
这些进程在内存中的地址,用户事先并不知道,且应用程序装入内存是随机的,每次装入内存时所占用的内存空间可能都不一样。
因此,用户不能直接使用内存的物理地址来编程。
为了方便用户编程,用户使用高级语言或汇编语言编程时,使用的是符号地址,即用符号名来访问某一单元。
把程序中由符号名组成的程序空间称为符号名空间,简称名空间。
用户编写的源程序经过编译后,会形成若干个目标程序。
每个目标程序的首地址都为0,即每个目标程序都是以0为基址顺序进行编址的。
原来用符号名访问的单元被具体的数据——单元号取代。
这些地址(或相对于基址的单元号)称为逻辑地址(或虚地址、相对地址)。
由逻辑地址组成的集合称为逻辑地址空间或程序地址空间。
3.地址重定位目标程序只有经过链接、装入内存后才能运行。
当程序装入内存的时候,每道程序不可能都从内存空间的0地址开始装入,因此程序的逻辑地址与所分到的内存地址会不一致。
为使程序能正确运行,必须将逻辑地址空间中的逻辑地址转换为内存空间中的物理地址,这一过程称为地址重定位或地址映射。
换句话说,地址重定位就是建立用户程序的逻辑地址和物理地址之间的对应关系。
按重定位的时机不同,地址重定位又分为静态地址重定位和动态地址重定位。
(1)静态地址重定位静态地址重定位是在程序执行之前由操作系统的重定位装入程序完成的。
它根据要装入的内存起始地址,直接修改所有涉及到的逻辑地址,一次性完成逻辑地址到物理地址的转换,在程序运行中,不再进行任何地址转换。
例如,有一个目标程序,其逻辑地址空间是{0,1,…,60},把它装入内存的首地址为100.若采用静态重定位的方式,应根据:物理地址=逻辑地址+100,对程序中所有逻辑地址进行转换。
静态地址重定位的优点是只需通过重定位装入程序,即可实现逻辑地址向物理地址的转化,不需要硬件的支持,可以在任何机器上实现。
早期的操作系统大多采用这种方法。
缺点是程序必须占据连续的内存空间,且一旦装入内存后,就不能被移动,不利于内存空间的利用所以静态重定位只适用于静态内存分配方式动态地址重定位的优点是不要求程序装入连续的内存空间。
在内存中允许程序再次移动位置,而且还可以部分地装入程序运行。
便于作业共享同一程序的副本。
因此现代计算机系统广泛采用动态地址重定位技术。
动态地址重定位的缺点是需要硬件的支持,而且实现存储管理的软件算法也比较复杂。
存储保护界限寄存器保护的技术有2种:①上下界存储保护:是一种简单的存储保护技术。
系统为每个作业设置一对上、下界寄存器,分别用来存放当前运行作业在内存空间上的上、下界地址,用它们来限制用户程序的活动范围。
在作业运行中,每当要访问内存某单元的时候,就检查经过重定位以后产生的内存地址是否在上、下界寄存器规定的范围内。
若在规定的范围内,访问合法;否则产生越界中断,通知系统进行越界处理。
②基址-限长存储保护:是上、下界保护的一个变种。
系统为每个作业设置一个基址寄存器和一个限长寄存器。
基址寄存器存放该作业在内存中的首地址,限长寄存器存放该作业的长度。
基址-限长存储保护通常可结合动态地址重定位实现,基址寄存器相当于重定位寄存器。
对于存储保护,除了防止越界外,还可对某一区域指定专门的保护机制。
常用的保护方式有:禁止做任何操作;只能执行;只能读;能读、写。