操作系统| 存储器管理(基本分页和基本分段的逻辑地址结构变换连续分配方式分区分配算法首次适应循环首次适应最佳适应分页和分段的比较程序装入方式和链接方式)

Posted 有理想、有本领、有担当的有志青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统| 存储器管理(基本分页和基本分段的逻辑地址结构变换连续分配方式分区分配算法首次适应循环首次适应最佳适应分页和分段的比较程序装入方式和链接方式)相关的知识,希望对你有一定的参考价值。

文章目录

程序三种装入方式

绝对装入方式(单道程序)

程序中的逻辑地址与实际内存地址完全相同,不需要进行修改
什么是逻辑地址和实际内存地址?

 i = 0 # 逻辑地址:0 实际内存地址10000
 while i < 10:# 逻辑地址:1 实际内存地址:10001
 	print(i) # 逻辑地址:2 实际内存地址:10002
 	i+=1 # 逻辑地址:3 实际内存地址:10003

在上述例子中,我们假设程序中每行语句都占一个存储单位,那么每次执行完第3行语句,就会寻找到第1行语句以继续循环,这便是逻辑地址。而在程序实际运行前,程序会被装入内存,假设在内存中起始地址是10000,那么相应的各行语句存储地址都会+10000,这便是实际内存地址

可重定位装入方式

在多道程序环境下,目标模块的起始地址通常从0开始,可以相对于起始地址来计算其他地址。可重定位方式,即根据情况将装入模块装入到内存的适当位置,通过起始地址来计算内存中的其他地址

在这个例子中,本来在1000的语句执行完跳到2500去执行。到内存后,因为1000存在11000了,所以要跳到12500去执行。 因此,程序的逻辑地址会和实际内存地址不同

动态运行时装入方式

在把装入模块装入内存后,并不立即把相对地址转换为绝对地址,而是推迟到程序执行时进行

程序链接的三种方式

  • 静态链接在程序运行前,将目标模块及所需的库函数链接成完整的装配模块,不再拆开
  • 装入时动态链接在装入内存时,将用户程序编译所得的目标模块采用边装入边链接的链接方式
  • 运行时动态链接在程序执行中需要某目标模块时,才进行链接

分配内存

  • 从空闲分区链(表)中找到所需大小的分区。
  • 请求的分区大小为u.size
  • 表中每个空闲分区的大小表示为m.size
  • 若m.size- u.size < size(规定的不再切割的分区大小),将整个分区分配给请求者,否则从分区中按请求的大小划出一块内存空间分配出去,余下部分留在空闲链中,将分配区首址返回给调用者。

回收内存

连续分配的四种方式

单一连续分配

  • 单用户、单任务
  • 将内存分为系统区和用户区两部分,系统区提供给OS使用,用户区提供给用户使用

固定分区分配

将内存用户控件划分多个分区,每个分区只装入一道作业,允许多道作业并发执行。划分分区可以大小相等也可以不等

动态分区分配

数据结构

空闲分区表:记录每个空闲分区(分区序号、分区始址、分区大小)

空闲分区链:每个分区的起始部分

已占分区表作业号,起始地址,大小

分区分配算法

首次适应算法FF

  • 表是按空闲分区地址由小到大排的
  • 从头到尾查表,查到合适的分区就分配
  • 优点:优先利用低址部分内存空间
  • 缺点:低址易产生不能利用的小碎片,每次都需要从低址部分开始,增加了查找开销

循环首次适应算法

  • 表是按空闲分区地址由小到大排的
  • 从上次找到的空闲分区的下一个空闲分区开始查找,查到合适的分区就分配
  • 优点:使内存空闲分区分布均匀,减少查找开销
  • 缺点:缺乏大的空闲分区

最佳适应算法

  • 表是按空闲分区容量由小到大排的
  • 找到满足要求,且又是最小的空闲分区分配给作业
  • **优点:**避免大材小用
  • 缺点:产生许多难以利用的小空闲区

可重定位分区分配

在动态运行时装入的方式时,将相对地址转换为物理地址的工作在程序指令执行时进行,通过重定位寄存器进行地址转换。(与动态分区分配算法基本相同,增加了紧凑的功能)

分页存储管理

页面

地址结构

若给定一个逻辑地址空间中的地址为A,页面大小为L,求页号、页内地址(位移量)

若给出逻辑地址为十进制

  1. 页号 = int[A/L] (A÷L取整)
  2. 页内地址 = [A] mod L(A÷L取余)
    若给出逻辑地址为二进制
  3. 根据页面大小求出位移量的位数,假设 L = 4KB = 2的12次方,则位移量位数有12位,从左到右0~11
  4. 剩余为表示页号的位数

页表


3. 再将页号替换为页表中的块号所得的地址即为对应的物理地址

分段存储管理

地址结构


给出上述段表,求逻辑地址[0,134],[1,56],[2,88],[3,15]对应的主存地址(按十进制)。(其中方括号中的第一个元素为段号,第二个元素为段内地址)
[0,134]:600+134=734
[1,56]:越界中断(超出段长)
[2,88]:1000+88=1088
[3,15]:缺段中断(该段状态为0)

分页和分段的比较及区别

相似点

采用离散分配方式,通过地址映射机构实现地址变换

不同点

分页分段
离散的基本单位
目的页是信息的物理单位,分页是为了满足系统的需要段是信息的逻辑单位,含有一组意义相对完整的信息,分段是为了满足用户的需要
大小页的大小固定且由系统确定,由系统把逻辑地址分为页号和页内地址,由机器硬件实现段的长度不固定,取决于用户程序,编译程序对源程序编译时根据信息的性质划分
作业地址空间一维二维

以上是关于操作系统| 存储器管理(基本分页和基本分段的逻辑地址结构变换连续分配方式分区分配算法首次适应循环首次适应最佳适应分页和分段的比较程序装入方式和链接方式)的主要内容,如果未能解决你的问题,请参考以下文章

操作系统面试专题:分页和分段存储管理有何区别?

操作系统笔记内存管理之分页,分段和段页式

操作系统——存储管理:分区分页分段请求式分页和虚拟内存

段页式存储管理思想

操作系统| 虚拟存储器(请求分页和请求分段地址变换详解,页面置换算法先进先出LRUClock虚拟存储器的定义和特征)

操作系统| 虚拟存储器(请求分页和请求分段地址变换详解,页面置换算法先进先出LRUClock虚拟存储器的定义和特征)