进程阻塞
处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入、等待磁盘数据传输完成、等待其它进程发送消息,当被等待的事件未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态。阻塞是因为要等待某个资源而无法运行 进程唤醒
一个正在运行的进程会因等待某事件(例如,等待打印机)的发生,由运行状态转换成阻塞状态,当它等待的事件发生后,这个进程将由阻塞状态转换成就绪状态。这种转换由进程唤醒操作完成。 进程挂起:
挂起则是可以运行,但被临时置为睡眠
※ 进程的互斥;临界资源、临界区;信号量、PV操作: 进程的互斥:
一组并发进程中的一个或多个程序段,因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行。
临界资源:
一次仅允许一个进程使用的资源称为临界资源
临界区:
在每个进程中,访问临界资源的那段程序,称为临界区或临界段
信号量:
信号灯是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,s是信号量, q是一个初始状态为空的队列
? 信号量s代表资源实体或并发进程的状态,初值只能为0或正整数: ? S>0,代表可供并发进程使用的资源个数(临界资源则只有1个) ? S=0,代表所有进程都分配到了资源,且空闲资源数为0。 ? S<0,代表有|s|个进程等待临界资源以进入临界区。
? S的值只能由p、v原语改变;其他改变s值的指令均为非法
PV操作:
P、V操作用以改变信号量的值;是通过PV原语来完成的:P(s)和V(s)。 P(s) :使信号量s的值减1;V(s) :使信号量s的值加1; P减V加。
? P操作的主要动作如下: ①s值减1;
②若相减结果大于或等于0,则进程继续执行;
③若相减结果小于零,该进程被封锁,并将它插入到该信号灯的等待队列中,然后转进程调度程序;
? v(s)操作的主要动作如下: ①s值加1;
②若相加结果大于零,进程继续执行;
③若相加结果小于或等于零,则从该认号灯的等待队列中移出一个进程,解除它的等待状态,然后返回本进程继续执行;
※ 进程的同步;生产者-消费者问题 进程的同步:
互斥——间接制约,共享临界资源引发的并发进程间的制约。 同步——直接制约,并发进程间相互共享对方私有资源引发的。
※ 生产者-消费者问题
生产者——把系统中释放某一类资源的进程统称为生产者。 消费者——把系统中使用某一类资源的进程统称为消费者。 生产者——消费者问题:一个长度为n的有界缓冲区被一组生产者和一组消费者共享,形成生产者消费者问题。
进程间通信:
又称高级通信;进程之间直接以较高的效率传送较多的数据的信息交换方式称为进程间通信。
常用的进程通信方式有管道、共享内存、消息机制 线程:
进程内一个相对独立的,可独立调度和指派的执行单元;是进程中的一个执行路径。 二、进程与线程的区别与联系
1、进程是资源分配和处理机调度的基本单位。
而线程与资源分配无关;一个进程内的多个线程共享该进程的资源。 2、进程具有完整独立的虚地址空间,而线程则只能继承和共享这个空间。 3、一个进程可以包含一个以上的线程,其关系如下图:
第五章 存储管理
存储管理的目的:
? 充分利用内存,为多道程序并发执行提供存储基础 ? 尽可能方便用户使用,即用户程序中不必考虑硬件细节
? 解决程序比实际内存大的问题 ? 解决内存保护与安全 ? 解决共享问题
存储管理任务:
▼ 内存空间的管理、分配与回收 ▼ 存储共享 ▼ 存储保护 ▼ 内存扩充
▼ 地址转换:又称地址映射
? 逻辑地址(相对地址,虚地址)
用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0,其余指令中的地址都相对于首地址而编址不能用逻辑地址在内存中读取信息
? 物理地址(绝对地址,实地址) 内存中存储单元的地址,可直接寻址 ? 地址映射
? 逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射 ? 静态地址转换
当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转
换,一般在装入内存时由软件完成 ? 动态地址转换
在程序运行过程中要访问数据时再进行地址变换
虚拟存储器:
程序、数据、堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保
留在内存,而把其它部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换。得到一个容量很大的―内存‖,这就是虚存!
目的:
提高内存利用率
分区式存储管理:
系统把内存用户区划分为若干分区,分区大小可以相等,也可以不等。一个进程占据一个分区
? 固定分区:
预先把可分配的内存空间分割成若干个连续区域,每一区域称为分区。
每个分区的大小可以相同也可以不同,分区大小固定不变,每个分区装一个且只能装一个作业 缺点:内存利用率不高 ? 可变分区:
? 内存不是预先划分好的
? 作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配
? 若有足够的空间,则按需要分割一部分分区给该进程;否则令其等待内存空
间
? 内存管理
? 空闲块表——记录了空闲区起始地址和长度 ? 已分配区表 ? 内存分配
动态分配
三种分配算法:首先适应分配算法、最佳适应分配算法、最坏适应分配算法
? 内存回收
当某一块归还后,前后空间合并,修改内存空闲块表 考虑:上邻、下邻、上下相邻、上下不相邻
? “碎片”问题
经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,
不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片。
? 缺点:
1、分区式作业必须连续存储。
2、分区式方式下当作业的地址空间大于内存可用分区空间时,作业不能马上运行,必须等到空闲分区和其他分区释放后融合成为更大的空闲分区后才能全部载入内存。
3.碎片问题(外碎片),内存利用率不高,受实际内存容量限制
分页式存储管理:
页是信息的物理单位,进行分页是出于系统管理 的需要;段是信息的逻辑单位,分段是出于用户 的需要。
基本思想(工作原理) ? 用户程序划分
把用户程序按逻辑页划分成大小相等的部分,称为页。从0开始编制页号,页内地址是相对于0编址 页表:
OS为每个进程建立的一张表,存放在主存的固定区域中,也有可能放在高速缓冲存储器,或部分放在主存,部分放在高速缓存中,最简单的页表只包含两方面的信息:页号、页面对应的块号。 ? 页表始址寄存器
用于保存正在运行进程的页表的始址 ? 页表长度寄存器
用于保存正在运行进程的段表的长度
? 逻辑地址:(虚地址) ?
页号 页内地址
?
? 内存空间
按页的大小划分为大小相等的区域,称为内存块(物理页面,页框) ? 内存分配
以页为单位进行分配,并按进程的页数多少来分配。逻辑上相邻的页,物理上不一定相邻
缺页中断处理:
? 在地址映射过程中,在页表中发现所要访问的页不在内存,则产生缺页中断。操作系统接到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,将该页调入内存,使作业继续运行下去
? 如果内存中有空闲块,则分配一页,将新调入页装入内存,并修改页表中相应页表项目的驻留位及相应的内存块号
? 若此时内存中没有空闲块,则要淘汰某页,若该页在内存期间被修改过,则要将其写回外存
页式地址变换过程:
页面置换(淘汰)算法:
? 理想置换算法—最佳页面算法(OPT)
淘汰以后不再需要的或最远的将来才会用到的页面
? 最近未使用页面置换算法(NRU——Not Recently Used) 选择在最近一段时间内未使用过的一页并淘汰之 ? 先进先出页面置换算法(FIFO)
选择在内存中驻留时间最长的页并淘汰之
对照:超市撤换商品