存储器管理——内存分配(分区,段,页)

存储器管理

连续分区两种方式对比

固定分区可变分区
分区内存大小固定可变
内存利用率提高
内碎片存在不存在
外碎片不存在存在
碎片解决方案紧缩技术
并发程序个数固定可变
内存管理数据结构内存分配表分区链表
内存分配策略最先/最佳匹配法最先/最佳/最坏/下次匹配法
内存回收策略分区状态 占用 => 空闲更新分区链表
内存保护策略限长寄存器限长寄存器

内碎片:进程所占用的分区内部未被利用的空间
外碎片:各进程之间难以被利用的空闲区间

不变分区两种策略

单个输入队列的

最先匹配法最佳匹配法
解释找第一个可以装入该分区的搜索整个队列,选择能装入的该分区的最大进程
优/缺点小进程可能浪费大的空间减少空间的浪费

可变分区四种策略

最先最坏最佳下次
解释找第一个找最大的找大小最为接近,使得外碎片最小从上次找的地方再找找不到循环到前面去
优点速度很快,高地址较大分区易于保留不留下小的空闲分区速度快,分布均匀
缺点大分区没有保留下来外碎片浪费大分区不易保留

理解重定位

物理地址:内存地址,绝对地址,实地址
逻辑地址:相对地址,虚地址
地址映射 (地址重定位) :逻辑地址 ->物理地址

静态重定位动态重定位
区别载入内存的时候指令地址固定运行的时候指令地址固定
移动此段程序载入内存后不可以移动此段程序载入内存后可以移动
需求不需要寄存器需要基址寄存器

段页存储对比

页式存储段式存储
数据结构页表 & 物理页面表段表
逻辑页号 & 内存块号(物理页面号)段号 & 段起始地址 & 段长& 保护位
优点没有外碎片,内碎片也很小分为多个模块,实现每个模块分别编写,编译,保护,段单位共享
程序不必连续存放程序不必连续存放
缺点程序必须全部装入内存程序必须全部装入内存
维护页表也是一笔开销存在外碎片

分页存储与分段存储地址映射三部曲:解析逻辑地址–寻找表(页/段表)–寻找表项(页/段表项)–物理地址

分页存储分段存储
解析逻辑地址页号 页内偏移量段号 段内偏移量
寻找表页表起始地址段表起始地址
寻找表项页表起始地址+页表项大小*页号段表起始地址+段表项大小*段号
表项里面得到块号该段的起始地址
物理地址块号与页内偏移量拼凑段的起始地址+ 段内偏移量

1. 页存储理解

因为是动态重定位:所以给出的是逻辑地址 高位变成逻辑页面号(数组下标) 低位则为页内偏移
理解为什么可以转换:
程序以动态重定位方式进行,假如给的是8位逻辑地址,假如内存被分为16字节一个块,一共16个页
从 0000 | 0000 到 1111|1111
0000 | 0000 第零页的开始
0000 | 0011 第零页的0011偏移量
0000 | 1111 第零页的最后一块 下一个内容就要翻一页了
0001 | 0000 第一页开始 同理
0001 | 1111 需要翻页了
0002 | 0000 就是第二页
假如给出的逻辑地址 0001 | 1111 现在知道页数了
那么要找到物理块号 我们还有两个问题
1.他是谁的第一页?
2.页表放在哪里?
但一个进程建立都给出了页表,那么当这个进程运行的时候,他会把他的页表的起始地址放在基址寄存器中,所以 第二个问题就解决了,第一个问题当然也解决了,你需要访问的是在占用CPU的,这时候你寄存器里存的页表起始地址就是他的第一页,最后一个问题?
他是表里面的哪一个?因为这样才能找到块号
页表起始地址+页表项大小*页号
式子就是他 ,找到相应块号,然后转换成物理地址 假如块号就是3 然后毕竟是 0011|1111
这样完成了逻辑地址到物理地址转换

这样的坏处
两次访问内存,CPU访问内存相当慢
解决方案
于是有了TLB 存放最近一段时间最常用的页表项, 逻辑页面号与 物理页面号直接对应

2. 段存储的理解

段存储给出逻辑地址的本身就二维地址
同样知道 假如给的是0001 | 1111 第一维段号 第二维段内偏移 同样知道第一段
两个问题?
1.他是谁的第一段?
2.段表放在哪里?
但一个进程建立都给出了段表,那么当这个进程运行的时候,他会把他的段表的起始地址放在基址寄存器中 还有个问题
他是表里面的哪一个?
段表起始地址+段表项大小*段号
找到段的起始地址 多出来的操作就是 偏移量与得到段长比 是否越界!
段起始地址+偏移地址 就是物理地址

是不是两者很像 主要是因为逻辑地址含义不一样而已
段还有一种 ,学过8086处理器的知道
是直接在CS ,DS,SS,ES给出段起始地址 的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilyil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值