操作系统之内存

程序要执行那么必须得将程序装入到内存才能执行

程序装入的三种方式

  1. 绝对装入:在编译的时候,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存。
  2. 可重定位装入:指令中的地址都是相对于装入内存位置起始地址的逻辑地址,可以根据内存的情况来确定基址,然后将逻辑地址变换为物理地址
  3. 动态重定位:将程序装入内存之后,并不会立即把逻辑地址转换为物理地址,把地址转换推迟到程序真正运行的时候才进行

交换技术

当程序的大小超过物理内存的时候,程序无法完全装入物理内存的情况下该怎么办?
为了解决这个问题引入了交换技术。
交换技术的思想就是,当内存空间紧张的时候,系统将内存中某些进程暂时换出内存(暂时换出外存等待的进程状态为挂起状态),把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘之间动态调度)。
那么又引入了三个问题:

  1. 应该什么位置保存被换出的进程?

  2. 什么时候应该交换?

  3. 应该换出哪些进程?

  4. 将磁盘空间分为文件区和对换区两个部分。对换区为了追求换入换出的速度,采用连续分配方式,文件区追求空间利用率,采用离散分配方式

  5. 交换通常在内存不足的时候进程

  6. 优先换出阻塞进程,然后可以换出优先级低的进程

  7. 注意:PCB会常驻内存,不会被换出到外存

内存管理

连续分配管理

单一连续分配

内存被分为系统区和用户区,内存中只有一道用户程序放到用户区域执行。
优点是没有外部碎片(值得是没有被分配给相应进程的内存空间)
缺点是有内部碎片(指的是分配给相应进程但是没有被利用到的空间)

固定分区分配

为了满足多道程序的需要:将内存空间分为多个区域来分别运行不同的程序。

  1. 分区大小相等
  2. 分区大小不等
    优点:无外部碎片
    缺点:会产生内部碎片

动态分区分配

不会预先划分内存分区,而是在进程装入内存时,根据进程大小动态地建立分区。
没有内部碎片,但是有外部碎片,可以通过紧凑技术来解决外部碎片。
动态分区分配算法:

  1. 首次适应算法:空闲分区以地址递增次序排列,每次从低地址查找,找到第一个能满足大小的空闲分区
  2. 最佳适应算法:按照容量递增次序连接,每次分配内存时顺序查找空闲分区链(或者空闲分区表),找到大小能满足要求的第一个空闲分区
  3. 最坏适应算法:和最佳相反
  4. 邻近适应算法:空闲分区以地址递增的顺序排列,每次分配内存时从上次查找结束的位置开始查找空闲分区链(或者空闲分区表)找到大小能满足要求的第一个空闲分区。

分页存储

将内存空间分为一个个大小相等的分区(通常4KB),每个分区就是一个页框,
操作系统以页框为单位为各个进程分配内存空间。进程每一个页面放到一个叶框当中。
为了知道进程中每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。
在这里插入图片描述问题:计算每个页表项占多少个字节:
在这里插入图片描述由于页表项连续存放,因此页号可以使隐含的,不占存储空间。

如何确定一个逻辑地址对应的页号、页内偏移量?
在这里插入图片描述在这里插入图片描述

快表

在这里插入图片描述根据局部性原理,我们可以将页表中访问频繁的数据放到快表当中(TLB,又称为联想寄存器,是一种访问速度比内存快很多的高速缓存)。
在这里插入图片描述
单级页表存在的问题:页表必须连续存放,当页表很大的时候,需要占用很多个连续的页框。
没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问几个特定的页面。

在这里插入图片描述

基本分段存储管理

进程的地址空间,按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级别语言中,程序员使用段名来编程)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

段页式存储

在这里插入图片描述
参考资料:
王道考研

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值