【内存管理之非连续分配管理方式分页存储】

内存管理之非连续分配管理方式分页存储



前言

本文分享的是内存管理中的非连续分配管理方式,从对基本分页存储管理的概念以及逻辑地址转换为物理地址的操作以及页表的引用进行简单介绍。

提示:以下是本篇文章正文内容,下面案例可供参考

一、分页管理的基本概念

1)将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”,或称为“页帧”、“内存块”、“物理块”。每个页框有一个编号,即“页框号”(或“内存块号”、“页帧号”、“物理块号”),页框号从0开始


2)将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”,或“页面”,每个页面也有一个编号,即“页号”,页号也是从0开始
注意:进程的最后一个页面可能没有页框大,因此在进行分配时页框不能太大,否则可能产生过大的内部碎片。


3)操作系统以页框为单位为各个进程分配内存空间,进程的每个页面分别放入一个页框中,也就是说,进程的页面与内存的页框有一一对应的关系。各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。

在这里插入图片描述

二、实现地址转换(逻辑到物理地址)

如下图所示:为连续存放放逻辑地址到物理地址的转换思想,在进行非连续存放时我们同样可以根据这种思想进行地址的转换

在这里插入图片描述

下面将逻辑地址为80的内存单元进行转换:
应该在1号页,该页在内存中的其实位置为450,逻辑地址为80的内存单元相对于该页的起始地址而言,“偏移量”应该是30则实际的物理地址为450+30=480
1)要算出逻辑地址的页号
2)要知道该页号在内存中的起始地址
3)要算出逻辑地址在页面内的“偏移量”
4)物理地址= 页面起始地址+页内偏移量


页号 = 逻辑地址/页面长度
页内偏移量 = 逻辑地址 % 页面长度
页号 = 80 / 50 = 1、
页内偏移量 = 80 % 50 = 30
1号页在内存中存放的起始位置为450 + 30 = 480

在这里插入图片描述

三、页表管理

为了能知道进程每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。一个页表有很多个页表项构成,每一个页表项中包含对用户进程也就是逻辑空间上的页面号的记录以及实际对应的内存空间的内存号的记录,这样我们可以快速的更据页表中的页表项找出不用逻辑地址所对应的内存地址。

在这里插入图片描述

四、基本地址变换机构

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址
通常在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M。
进程未执行时,页表的起始地址和页表长度放在进程的控制块(PCB)中,当进程被调度时,操作系统内核会把他们放到页表存储器中。
注意:页面大小是2 的整数幂
设页面大小为L,逻辑地址A到物理地址E的变化过程如下:
1)计算页号P和页内偏移量W(如果用十进制数手算,则P = A/L W = A %L)但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得出二进制表示的页号、页内偏移量。
2)比较页号P与页表长度M,若P>=M,则产生越界中断,否则继续执行(注意:页号是从0开始的,而页表长度至少为1因此P= M时也会越界)
3)页表中页号P对应的页表项地址= 页表起始地址F +页号P 页表项长度,取出该页表项内容B,即为内存块号(注意区分页表项长度、页表长度、页表大小的区别)。
页表长度:指的是这个页表中共有几个页表项,即总共有几个页
页表项长度:指的是每个页表项占多大的存储空间
页面大小:指的是一个页面占有多大的存储空间
4)计算LE= b
L + W,用得到的物理地址E去访问实际的内存空间地址(如果内存块号,页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小殷学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值