计算机操作系统-存储管理之分区技术


外零头(碎片):分配给用户的不能被任何用户使用的极小的空闲区
内零头(系统中):分配到系统中的不能被任何系用使用的极小的空闲区

简单存储技术

进程在执行之前将程序数据全部装入内存

连续存储

就是分区存储 一个进程占的是一整块连续内存

固定分区技术

一种是:
系统初始化启动时将内存划分为数目固定尺寸固定的多个分区
就是内存里面分好了一些固定大小(大小相同)的区域 进程进来了就直接放进相应的分区就行了
另一种是:
系统初始化启动时即将内存划分为大小尺寸不同的多个分区
优点:实现简单,系统开销小
缺点:空间利用率低
左边是第一种 右边是第二种
在这里插入图片描述

动态分区技术

分区的长度和数量都是可变的 也就是
在这里插入图片描述
但是这只是系统最初始的时候 如果进程结束就会回收内存 慢慢的系统就会变成这样
在这里插入图片描述
此时就需要空闲分区表或者空闲链
在这里插入图片描述
分区链种 状态位 0表示未被分配 1表示已被分配
内存分配流程
在这里插入图片描述
内存回收流程
在这里插入图片描述

优点:消除了内零头
缺点:容易产生外零头

动态分区中几个相应的分配算法

基于顺序搜索的动态分区分配算法

首次适应算法(FF)

先将空闲分区链以地址递增的次序链接,再从链首开始顺序查找 ,直至找到一个大小能满足要求的空闲分区位置。在按照作业的大小从该分区中划出一块内存空间分配给请求者,余下的空闲分区留在空闲链中 如果从头到尾都找不到一个适合的就代表失败了
缺点:因为一直从低地址的地方开始查找 所以低地址的地方会被一直划分 容易产生大量碎片
优点:高地址的地方容易留出大空闲区

最佳适应算法(BF)

最佳的意思是:在每次为作业分配内存时 总能使用最贴近作业大小的空闲分区
该算法将所有的空闲分区按容量从小到大顺序形成空闲分区来链 这样从链首开始找第一个找到的一定是最适合的
缺点:因为每次找到的都是最适合的 所以余留下来的部分一般都是成为碎片无法再次使用 会产生很多碎片

循环首次适应算法(NF)

从上一次找到的空闲分区的下一次空闲分区开始查找,直到找到一个能满足要求的空闲分区
优点:避免了低地址一直被划分产生大量碎片的问题 使空闲区分布更平均
缺点:缺乏大的空闲区 因为所有空闲区都会被轮着划分

最坏适应算法(WF)

在扫描整个空闲区时总是选择一个最大的空闲区 并且按从大到小顺序分布空闲分区链
优点:可以让剩下来的空闲区不会太小 对中小作业有利
缺点:缺乏大的空闲区

伙伴系统

离散存储:

分页存储

分页存储的空间利用率最高 但是由于需要页表 所以对资源消耗过大
将内存空闲地址分为若干块
将进程的逻辑地址空间分成若干页 大小和块一样
页内碎片:在页内有不可利用的碎片
页面大小:指页面空间大小 一般是2的幂 通常为1KB-8KB
如果页面过小
优点:减少内存碎片 提高内存利用率
缺点:进程占用较多页面,页表过长 占用大量内存 降低页面换进换出的效率
页面过大
优点:减少页面的长度 提高换进换出的效率
缺点:页内碎片增大
页内地址:每一页中起始地址的相对地址 起始地址一般是0
将进程的逻辑地址空间分为若干个页 也就是一个进程被分为多个页 每页都有编号
内存的物理地址空间分成若干个块 这些块不相邻 每块都有编号
将进程的若干个页分配到若干个块中

如果给了一个分页地址(虚地址) 那么这个地址的左半部分是页号 右半部分是位移量 具体看下面的第二道例题

因为页表项的数量过多 不能全部存在寄存器中 所以大多数页表放在内存中 只设置一个页表寄存器PTR其中存储进程对应页表的起始地址和页表长度 进程在未执行时页表的起始地址和页表长度放在进程的PCB中 在进程被调度程序调度时 会将该进程的页表起始地址和页表长度装入页表寄存器中
进程访问某个逻辑地址(相对地址)时 分页地址变换机构会将相对地址分为 页号和页内地址 在用页号位索引检索页表 如果检索到了 就将页表起始地址与页号和页表项长度(也就是每一页的长度)的乘积相加 就得到了该页项在页表中的位置 就可以得到这一页的物理块号

分段存储

引入分段存储的原因:
作业的地址空间被划分未若干个段 每个段定义了一组逻辑地址信息 所以这若干个段并不是一样大小 而是由逻辑地址信息决定

分页分段区别

分页的用户程序地址空间是一维的 在分页系统中 用户程序地址是属于单一的线性地址空间
分段是用户行为 程序员在标识一个地址时 即需给出段名 有需要给出段内地址

分页分段例题

去网上找了些例题
例题一:若在一分页存储管理系统中,某作业的页表如下所示。已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。

页号 块号

0 2

1 3

2 1

3 6
解本题中,为了描述方便,设页号为p,页内位移为d,则:

(1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011 mod 1024=1011。查页表第0页在第2块,所以物理地址为1024′2+1011=3059。

(2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148 mod 1024=100。查页表第2页在第1块,所以物理地址为1024+100=1124。

(3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000 mod 1024=928。查页表第3页在第6块,所以物理地址为1024′6+928=7072。

(4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012 mod 1024=916。因页号超过页表长度,该逻辑地址非法。

例题二
在这里插入图片描述
在这里插入图片描述
例题三
1.如以下段表所示,请将逻辑地址(0,137),(1,4000),(2,3600),(5,230)转换成物理地址

( 0,137) 前面的是段号0 后面的是偏移量137
段号 内存始址 段长
0 50K 10k
1 60K 3K
2 70K 5K
3 120K 8K
4 150K 4K
(0,137):0<=4,137<=10k,所以物理地址为:50*1024+137=51337

(1,4000):1<=4,但4000>3k,越界中断

(2,3600):2<=4,3600<=5k,所以物理地址为:70*1024+3600=75280

(5,230):因为5>4,越界中断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值