基本分页存储管理的概念(有例题!!!考点)

本文探讨了连续分配方式的缺点,如内部碎片和外部碎片,并介绍了非连续分配方式,特别是分页存储管理的概念。每个进程的地址空间被划分为大小相等的页面,内存则分为页框,通过页表实现逻辑地址到物理地址的转换。页表记录了页面在内存中的位置,使得页面可以不连续存放,提高了内存利用率。地址转换涉及页号计算和页内偏移量确定,以及物理地址的形成。此外,文章还讨论了逻辑地址结构和页内偏移量的计算方法。
摘要由CSDN通过智能技术生成

前言

此篇文章是我在B站学习时所做的笔记,大部分图片都是课件老师的PPT,方便复习用。此篇文章仅供学习参考。


提示:以下是本篇文章正文内容

思考:连续分配方式的缺点

在这里插入图片描述
考虑支持 多道程序的两种连续分配方式

  1. 固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低。
  2. 动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”技术来处理,但是“紧凑”的时间代价很高

造成连续分配方式的 缺点的本质原因 是连续分配方式要求进程占用的必须是一整段连续的内存区域。
解决方法
在这里插入图片描述
基于这一思想,产生了“非连续分配方式”,或者称为“离散分配方式”。

知识总览

在这里插入图片描述
连续分配:为用户进程分配的必须是一个连续的内存空间
非连续分配:为用户进程分配的可以是一些分散的内存空间

把“固定分区分配”改造为“非连续分配版本”

在这里插入图片描述

分页存储管理的基本概念

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

  • 将用户进程的地址空间也分为 与页框大小相等 的一个个区域,称为“页”或“页面”。每个页面也有一个编号,即“页号”,页号也是 从0开始
    (注:进程的最后一个页面可能没有一个页框那么大。因此,页框不能太大,否则可能产生过大的内部碎片
    在这里插入图片描述

  • 操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框一一对应的关系。

  • 各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。
    在这里插入图片描述

思考:如何实现地址的转换

进程在内存中 连续存放 时,操作系统是如何实现逻辑地址到物理地址的转换的?

方法一

在这里插入图片描述
在这里插入图片描述
起始位置:100
偏移量:80
在这里插入图片描述
在这里插入图片描述

方法二

手动计算
如何计算

  • 页号=逻辑地址/页面长度(取除法的整数部分)
  • 页内偏移量=逻辑地址%页面长度(取除法的余数部分)
  • 页面在内存中的起始位置:操作系统需要用某种数据结构记录进程各个页面的起始位置。
  • 页号=80/ 50= 1
  • 页内偏移量=80 %50= 30
  • 1号页在内存中存放的起始位置 450

为了方便计算页号、页内偏移量,页面大小一般设为2的整数幂

二进制方法
在这里插入图片描述
不同页面的区别在于前面20位的不同,如1号页是00000000000000000001,2号页对应的是00000000000000000010…,做题时可以由00000000000000000000判断它的页号是0号页,用逻辑地址(2)%页面长度(4096)得页内偏移量为2,而2这个数字刚好是二进制后面12位转换为十进制后的数
在这里插入图片描述

!!!结论如果每个页面大小为2kB,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号
因此,如果让每个页面的大小为2的整数幂,计算机就可以很方便地得出一个逻辑地址对应的页号和页内偏移量。

逻辑地址结构

在这里插入图片描述

  • 地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量W。在上图所示的例子中,地址长度为32位,其中0~11位为“页内偏移量”,或称“页内地址”;12~31位为“页号”。

重点!!!
如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是2K个内存单元
如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有2M个页面

分页存储管理中,如何实现地址转换?

1. 要算出逻辑地址对应的页号
2. 要知道该页号对应页面在内存中的起始地址
3. 要算出逻辑地址在页面内的“偏移量”
4. 物理地址=页面始址+页内偏移量

:如果题目中是用十进制数表示逻辑地址,则
页号=逻辑地址/页面长度(取除法的整数部分)
页内偏移量=逻辑地址%页面长度(取除法的余数部分)

页表

  • 为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。
  • 假设此时我们要访问某个逻辑地址,可以用逻辑地址算出它应该属于哪一页,之后根据页面对应的页号查询页表,就可以知道这个内存内存应该存在哪个页框当中,只要用内存块的块号*每个内存块的大小就可以得到每个内存卡的起始地址
  • 知道起始地址,再用逻辑地址的偏移量就可以由物理地址=起始地址+偏移量算出物理地址
    在这里插入图片描述

重要考点例题

在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蜗牛_Chenpangzi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值