与时间有关的错误,即包括互斥(飞机订票系统,一张票卖给两个顾客,竞争条件), 这是由于并发执行,且资源共享引起的。
2).进程模型
进程:正在执行的程序,系统中同时会有许多程序在执行 进程有创建,有撤销 从以下几个方面考虑进程模型:
2.1 进程的组成,进程有动态,有静态,从动态的角度讲叫做进程映像。
一个系统中与进程有关的实体和空间
1.程序的地址 2.进程所需的数据 3.进程运行过程中所遗留的痕迹(栈) 栈是进程运行过程中临时性的信息存放的地方。
栈分为系统栈和用户栈
用户空间和系统空间时分开的。 用户地址空间包括:程序,数据和栈
PCB(进程控制块)是由系统来管理的,进程所需的信息都放在此数据结构中。
上下文环境,PCB,数据结构是进程存在的痕迹。
地址越界:用户只能在用户的地址空间活动,不能进入其他用户地址空间和系统空间
2.2进程状态以及状态转换
2.2.1进程控制块PCB,系统管理进程时,修改PCB
进程在运行时,通用寄存器要保存现场信息,不运行的时候,这些信息都要保存下 来
比如,指针等,现场要保存在自己的空间中,文件系统中。 现场信息包括很多内容。
进程控制块PCB时贯穿始终的
2.2.2状态的设置与进程的控制有关系,什么时候创建进程,什么时候中止进程,完全 由
原语来将进程从一个状态转变为另一个状态 最主要的就是了解进程的控制 3.进程的同步和互斥
这部分与 \与时间有关的错误\有关
同步是开发人员有意识安排的:在完成一个特定功能的软件中,由多个进程协作,这 些进程间有时序关系,互相配合完成,而这些时序是事先安排好的,OS不知道这些关系, 用
户通过OS提供的原语来维持这种时序。
同步:第一个进程执行道某一点后能否继续执行取决于另一个进程能够给它发消息。 进程的互斥:各个进程间要求共享资源,竞争使用资源。 书上讲解了“竞争条件”这一概念。
4.临界区:只允许一个进程使用的资源叫临界资源 竞争使用同一个资源的
不是一个进程的,而是以上进程
对于临界区的要求
1)任何两个进程不能同时处于临界区,即两段程序是不能交叉的 临界区的程序是可以中断执行的
2)如果想进入临界区,又进不去,则阻塞“有空让进,无空等待,有限等待” 3)不应对进程的速度和进程的数目作假设
解决互斥的问题:
*1 用户关闭中断会出现问题(忘了开中断,怎么办?) *2 锁变量在解决互斥问题时,也可以引入新得互斥 *3 严格轮换法
以上三种方法都不能解决互斥。
以下两个都不考:
#1 Peterson Delker 知道算法,但不考 #2 用硬件法解决互斥也不考
重点:5. 掌握信号量以及PV操作 5.1 信号量和PV操作 down --up (首选) P---V (也对)
wait--signal(错误)
原理:在执行过程中,不可分割.
down操作:对信号量:-1,若小于1,则阻塞,送到等待队列
up 操作:+1,若小于等于0,相应的信号量等于等待队列上的进程。
重点中重点:必有P V操作的题:
解题的要素:1)设置好每个信号量(每道题的分数由若干部分组成) 列出所有的信号量及其初值就给分
2)写PV,操作时,PV操作部分不能用自然语言,其余的部分 可用伪码,自然语言均可
begin ---end , repeat --until(搞清楚 2分)
读者---写者(循环) 生产---消费(不循环)
6.几个典型模型(考试不会超过此类模型)
6.1 生产者---消费者类型
思想:由一些 buffer,一些进程向Buffer 中写,另一些向Buffer中读 回家总结:
*1 一个生产者,一个消费者,一个buffer *2 一个生产者,一个消费者,一些buffer
*3 一个生产者,多个消费者,一个或者多个buffer
*4 多个生产者,多个消费者,一个或者多个buffer(最复杂,不考!0)
6.2 哲学家进餐问题(认真读书上的每句话)
对于多个竞争进程互斥访问资源是非常有用的!
6.3 读者---写者问题(P42) 对共享资源的操作
读有许多读者,但写时只有一个写。
若是两组读者问题,第二个读者将第一个得拷贝过来,变量改变一下 2003年的考研题,运河问题均是读者---写者问题 2003年考研题思路:
如何限制只有3个过,第四个不能过。 关键在于问题如何分解
树上这种读者,写者会出现饥饿,但本题要求不出现饥饿 大船方向:写者,小船方向:写者
把原来程序的框架写出,将细节只允许3个船过(不允许出现饥饿)补充进去
6.4 理发师问题(P43)
6.5 吸烟者模型
小的问题:eg:银行叫号, 阅览室问题,(来一个申请一个资源,若干个进程对资 源的使用问题),考场问题(同步关系,比较简单)
做题套路:1)先写出程序 2)找出进程间的关系(分解开找,先找互斥,再找同步,一 个关系设置一个信号量) 3)P,V嵌入到相应的位置,信号量是在找关系的时候定好的!一 个一个关系找,不要嫌麻烦 4)赋好初值 5)注意细节(是否需要循环)
PV匹配,但存在 if--else 语局时会有问题,信号量的操作,只能出现在P V中,而不会 出现在P,V语句之外,且不要写出有死锁的程序。 五. 进程通信
进程通信包括同步,互斥,本部分是高级的进程通信,P,V是简单进程通信! linux中,信号量,共享内存,消息队列,Socket,管道均是通信机制 Windows中,互斥队列,信号量对象等均是通信机制。
分为如下几类: 1. 共享内存
与读--写者问题是同一模型,若P个进程互相通信(重点),要了解实现和设计细节
1.1 设置共享内存存取方式
读者如何互斥,写者如何互斥 1.2消息传递方式(OS 中用的多) 设计要点:
1)两个进程间收发消息模型 send-receive的操作来完成
消息的传递会产生如下问题:发送的消息会不会丢失,解决方案:作一个回答 ;
应答会不会丢!
重发一条消息,接受道两个同一信息所带来的问题! 消息本身会不会有差错!
2) 给谁发消息,进程的命名会不会产生二义性! 3)
以上问题会在多机系统中出现
如何知道所发的消息是正确的,合法的(安全性) 4)有几种可能性来实现消息的传递 有阻塞,无阻塞,有无缓冲 a:消息传递是最常用的
系统中会开辟出缓冲区,系统把消息从A地址空间复制到buffer
然后从buffer中放到消息队列中,挂到B地址空间(接受进程的地址空间) 这个buffer是有缓冲的。
消息缓冲是:生产----消费者模型 b:信箱模型
建一个信箱,把消息放在信箱中 一套操作:建信箱,信箱满如何办 c:有/无阻塞
d:管道:建立两个进程通信的通路,实现时利用了文件系统,在文件系统中支持 通过读/写文件实现! write---read!
六:进程调度
处理机调度:在有些书上分为两个层次 1):CPU调度,2)中级调度 :两极调度 在这里狭义的说法就是选择哪些进程上CPU,考虑以下问题 1)什么原则(what) 2)什么时候(when) 3)如何进行(How)
1.what 什么算法:FIFO,时间片轮转法,优先级调度,搞清调度问题的区别
*FIFO:一个进程上CPU后,除非由于它自身的原因,否则没有进程能够打断它, (#基于优先级的不可剥夺算法) 时间片轮转法,时间片用完就切换下来
基于优先级:1):抢占:一旦有了高优先级就可以切换原来运行的进程! 2):不可抢占
可变的一定是动态的,固定的一定是静态的。 2机制和策略问题在此部分有所体现 策略是用户可选的 机制是定好的
最新版本的OS要求抢占
多级排列:几种策略的结合(时间片,优先级,抢占)
2)时机(WHEN) 什么时候做什么工作
什么时候进行进程调度:一个进程运行完毕,进程出错,时间片到,基于优先级的可抢占 式
调度,自己用阻塞原语将自己阻塞
3)如何进行上下文切换(HOW)
一个进程让出来,另一个进程上去。
如何保存被换下来的现场,以及如何将要换上去的现场换上去, 是用汇编来做的
线程和进程之间的关系问题:
如果同一系统中线程和进程都存在,他们的关系: 原来进程:资源分配和CPU调度的单位;
接着:进程粒度变小,进程只管分配资源,线程是CPU调度单位, 线程的引入:从资源系统开销的角度,系统使用的角度。
存储管理
1.产生存储分配问题的背景是什么?何谓静态分配?何谓动态分配?动态分配的原因是 什么?
答:一个有效的存储分配机制,应对用户提出的需求做出快速响应,为之分配相应的存储 空间,在用户作业不需要它时,及时收回,供其他用户使用。 内存分配有两种方式
1)静态分配:程序要求的内存空间是在目标模块连接装入内存时确定并分配的,并且在 程序运行过程中不允许再申请或在内存中“搬家”,也就是分配工作是在程序运行前一次 性完成
2)动态分配:程序要求的基本内存空间是在目标模块连接装入内存时确定并且分配的, 但是在运行过程中,允许申请附加的内存空间或在内存中“搬家”,也就是分配工作可以 在程序运行前及运行过程中逐步完成
动态分配的原因:动态分配具有较大的灵活性,对提高内存的利用率,比静态分配更合理
些。
2.阐述操作系统中选择存储管理方案的原则。 答: 原则:
1. 存储管理必须合理地分配内存空间
2.为了避免内存中的各个程序相互干扰,还必须实现存储保护 3.有效利用内存空间,允许多个作业共享程序和数据
4.为了在内存中运行长度为任意大小的程序,必须采用一定的方法“扩充”内存
3.可变分区管理方式下,采用移动技术有什么优点?移动一道作业时操作系统要做哪些工 作?
答:对碎片进行整理,把所有空闲碎片合并成一个连续的大空闲区,供作业使用。 被移动了得程序,需要进行重新定位,可以用动态地址映射实现。
4.用可变分区方式管理主存时,假定主存中按地址顺序依次有5个空闲区,空闲区的大小 依次为32k,10k,5k,228k,100k。现有J1,J2,J3,J4,J5。它们各需主存1k,10k,108k,28k,1
15k。若采用最先适应分配法能把这5个作业按J1, J5次序全部装入主存吗?你认为按怎样 的次序装入这5个作业可使主存空间利用率最高。
答:1) 若采用最先适应分配法,无法将5 个作业全部装入主存!
2)通过对最佳适应分配法和最差适应分配法的分析,其中最差适应分配法的内存空 间
利用率最高.
5.什么是碎片?试述各种多道程序系统存储管理方案中碎片是如何出现的?
答:经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不 足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片
6.段式存储管理系统中是如何实现存储保护的?
答:段式管理的存储保护主要有两种。一种是地址越界保护法,另一种是存取方式控制保 护法。具体的措施有:
1)利用段表及段长来实现段的保护,防止程序执行的时地址越界
2)存取权限保护法,在段表中设有“存取权”一项,可对程序的访问权限进行各种必要 的限制
3)存取保护键保护:由于I/O通道对存储器的访问是不通过段表的,因此有的机器还采用 存储保护健来保护
7,在段式存储管理系统中,如何实现多个作业对一个信息段的共享?并说明可共享过程 段的动态链接过程。
答:1)如果多个用户进程或作业需要共享某段程序或者数据,可以使用不同的段名,在各 自的段表中填入已在内存中的共享段的地址,并设置适当的读写控制权,就可以做到共享 一
个内存段的信息。
8.段式存储管理系统中,为什么说存取方式控制对共享段特别重要? 答:
存取方式对于非共享段来说,主要是用来指示程序设计的错误,而对共享段来说,则显得 特别重要,例如某个纯代码段被共享,则必须禁止任何作业修改它,因此,规定这样的段 只能“执行”。对于某个共享的数据段,只允许大家“读”,而不能“写”,或只允许某 一个用户“写”。
此外,通常还禁止任何作业“读”一个过程段,因为: 1)读一个过程段显然是程序设计的错误
2)有些过程是专用的,只准使用,不准“拿走”。如果一个分段仅具有“执行”状态, 那么只能作为一个过程来调用,而“读”“写”是禁止的;如果有作业给他们企图“读” 和“写”,则系统发出保护中断信号。 --
9.保护方式除R,W,EX(执行)组合外,你还能想出其他的保护方式吗?
答:保护方式除了R,W,EX组合成的存取权限位外,还应该增加以下内容: 1)特征位(该段在/不在内存,是否可共享) 2)标志位(该段是否被修改过,能否移动) 3)扩充位(改段长度固定长/可扩充)
10.什么是动态链接?为什么虚拟段式存储管理系统有利于动态链接?
答:动态链接是:是在程序开始运行时,只将主程序段装配好,并调入内存,其他各段 的装配是在主程序段的运行过程中逐步完成。每当需要调用一个新段时,再将这个新段装 配好,并于主程序段链接。
2)?
11.有一个操作系统采用段式存储管理方案,用户区内存为512K,分配时截取空闲块的前 半部分(小地址部分)。初始时内存全部空闲,系统执行如下申请,释放操作序列。 申请300K,申请100K,释放300K,申请150K,申请50K,释放90K 1)若采用首先适应算法,空闲块表中有哪些空块(指出大小,地址) 2)若采用最佳适应算法,空闲块中有哪些空块(指出大小,地址)
3)若随后又申请了80K,针对上述两种情况说明结果?其结果说明了什么问题? 答:1)
空闲块:0--90 , 200--300,400---512 空闲块: 0--90 , 150--300,450--512 2)
空闲块:80--90, 200--300,400---512 空闲块:80--90 , 150--300,450--512
12.加入一个程序的段表如下:
段号 状态位 段起始地址 段长 存取控制 0 0 100 40 W 1 1 2010 20 W 2 0 1590 100 E 3 0 75 50 R
其中状态位“1”表示该段不在内存中,存取控制:W 表示可写,R表示可读,E表示可执 行
对于下列的逻辑地址可能发生什么情况? 1) STORE 1,[0,50] 2) STORE 1,[1,10] 3) LOAD 1,[2,77] 4) LOAD 1,[3,20] 答:1)的逻辑地址:150 2)的逻辑地址:2020 3)的逻辑地址:1667 4)的逻辑地质:95
13. 设在内存中按地址递增次序有三个不连续的空闲区F1,F2,F3,他们的容量分别为60K, 130K,20K请给出一个后备作业序列,使得实施存储分配时
1)采用最佳适应算法将取得好的效果,而采用最差适应算法和首先适应算法效果都不好 ;
2)采用最佳适应算法效果不好,而采用最差适应算法和首先是应算法都可取得好的效果 ;
3)采用最差适应算法将取得好的效果,而采用首先适应算法和最佳适应算法效果都不好 ;
4)采用三种算法都取得好的效果; 5)采用这三种算法效果都不好。 答:1)20,60,130 2)40,65,20 3)20,50,60 4) 130,60k,20 5) 140,70,70
14.页式存储管理系统中作业的地址空间是一维的还是二维的?请说明理由 答:二维的,有一维是:页号,和第二维是:页内地址!
15.页式存储管理需要哪些硬件支持?如何实现逻辑地址到物理地址的映射? 答:系统提供了一对寄存器:页表始址寄存器和页表长度寄存器。 1)具体步骤说明如下
1)地址映射机制把CPU给出的逻辑地址分为两部分:页号P和页内地址
2)将逻辑页号P与页表长度寄存器内容比较,如果P大于等于页表长度L,则为越届,发生 地址越界中断
3)根据页表始址寄存器的内容D得到页表在内存的首地址,并根据逻辑页号P在页表 中找到对应的内存块号P'
4)把物理页号与逻辑地址中的页内地址D拼在一起,形成访问内存的物理地址
16.假定一个存储管理程序已经把它的页面淘汰决定缩小到两页之一,假定其中一页由几 个进程共享,另一页仅由一个进程使用,最终应该淘汰哪一页?请解释! 答:当然是后一页,这样就能避免频繁的调度页面!
17. 在多道程序系统中,程序和数据共享可以大大的节省内存空间,分别说明页式,段式 和段页式存储管理系统中是如何实现共享的? 答:
页式:页式存储管理使每个程序能利用内存空间中一些不连续的存储块,这种灵活性就 允许两个或多个程序共享程序中的代码或公共数据段。
段式:如果多个用户进程或作业需要共享某段程序或数据,可以使用不同的段名,在各 自的段表中填入已在内存中的共享段的起始地址,并设置适当的读写控制权,就可以做 到共享一个内存段的信息。 段页式:?