核心算法的流程图:
算法原理:
[百度百科] :我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
(2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;
(3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
(4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。
例题:
在银行家算法中,若出现下述资源分配情况:
(1)当前系统状态是否安全?
(2)如果进程P2提出请求Request2(1,1,2,2)后,系统能否将资源分配给它?
解答:
(1)安全,安全序列为[P0,P3,P1,P2,P4]
(2)不能,理由如下:
假设将(1,1,2,2)分配给Request2,则P2进程仍然需要Need(1,2,3,4),此时系统剩余可用Available(0,5,0,0),不能满足任何进程的需要,所以分配给Request2为不安全行为。
PS Java实现银行家算法:blog.csdn.net/Mr_YanMingX…
第四章 存储器管理
1 程序的装入(P132)
(1)绝对装入方式
[只适用于单道程序环境] 用户程序经过编译之后,会产生一个绝对的地址(物理地址)的目标代码(模块/装入模快),绝对装入程序就可以按照装入模快的地址将程序和数据装入内存,装入内存之后,程序的相对地址(逻辑地址)和实际内存地址(物理地址)完全相同,所以不需要地址转换。
(2)可重定位装入方式(静态重定位)
[主要适用于多道程序环境,不需要硬件支持] 根据内存的具体情况将装入模快装入到内存适当的位置,而且会使装入模块的内存的地址(逻辑地址)和实际装入内存后的物理地址不同。地址变换在进程装入时一次性完成,以后不再改变,所以叫做静态重定位。
(3)动态运行时的装入方式(动态重定位)
[目前主流,主要用于多道程序环境,需要硬件支持] 把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是等到该程序真正的执行的时候再进行地址的转换。因此装入内存后的地址仍然都是逻辑地址。
2 *连续分配的分区管理方式(P135)
(1)单一连续分配
[单道程序环境下适用,最简单的分配方式] 把内存分为系统区和用户区两个部分,系统区只给OS(系统)适用,通常放在内容的低址部分。在用户区部分,仅装有一道用户程序(独占)。这样的方式成为单一连续存储方式。
(2)固定分区分配
[分区个数固定,可运行多道程序] 将这个用户空间化成若干个固定大小的区域,每个分区只装入一道作业,于是就形成了多道程序的分区存储管理方式。
(3) 动态分区分配
**[分区个数、大小都可变]**又称为可变分区分配,就是根据进程的实际需要,动态的为之分配内存。
(4)*基于顺序搜索的动态分区分配
- 首次适应(FF)算法:
核心思想:将空闲分区链以地址递增的次序进行链接,分配内存时从头部开始查找,直到找到一个大小能满足要求的空闲分区为止。
- 循环首次适应(NF)算法
核心思想:将空闲分区链以地址递增的次序进行链接,分配内存时从上次找到空闲分区的下一个分区开始查找,直到找到一个大小能满足要求的空闲分区为止。
- 最佳适应(BF)算法
核心思想:将空闲分区按空间从小到大进行排序,依此进行查找(避免大材小用),知道找到满足要求的空闲分区。
- 最坏适应(WF)算法
核心思想:将空闲分区按空间从大到小进行排序,总是挑选一个最大的空闲分区,从中分配一部分空间给作业使用。
3 分页存储管理方式(P148)
分页存储管理的基本方法
1.页面和物理块:
(1)页面:
分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始。把内存的物理空间分成若干个块,同样加以编号从0开始。为进程分配内存时,以块为单位,将进程的若干个页分别装入到多个可以不相邻接的物理块中。由于进程最后一页通常装不满一块,则剩余页面叫做“页内碎片”。
(2)页面大小:
页面大小应选择适中,并且应该是2的N次幂,通常为1KB~8KB
2.地址结构:
说明:如上图可知,地址长度为32位,其中011为页内地址,即每页大小为4KB(2的12次方),1231位为页号,即地址空间最多有1M页(2的20次方)
计算:对于某种特定的机器,其地址结构是一定的,若给定一个逻辑空间中的地址为A,页面大小为L,则页号P和页内地址d可由公式计算:
例如页面大小L为1KB,逻辑空间A为2170B,由上式可求得页号P=2170/1024取整为2,页内地址d=2170对1024取余结果为122.
3.页表和地址映射:
页表作用:实现从页号到物理块号的地址映射。
4 分段存储管理方式(P155)
目的:
为了满足用户在编程和使用上的多方面要求。
地址结构:
在分段存储管理中,作业的地址空间被划分成若干个段,每个段定义了一组逻辑信息。
在该地址结构中,允许一个作业最长有64K个段,每个段的最大长度为64KB。
段表:
在分段管理中,系统为每个进程分段分配一个连续的分区,就需要为每个进程建立一张映射表,称为“段表”。
该表记录了该段在内存中的起始地址(“基址”)和段的长度,作用是用于实现逻辑段到物理内存区的映射。
5 段页式存储管理方式(P160)
基本原理:
先将用户的程序分成若干个段,再把每个段分成若干个页,并为每个段赋予一个段名。
地址结构:
地址变换过程:
缺点:
一条指令的执行需要三次访问内存。