操作系统—王道考研学习笔记 <3.1_6> 分页存储管理

对应课程视频链接 : 王道考研—操作系统 — 分页存储管理

分页存储管理的先导知识:
非连续固定分区分配在这里插入图片描述
导入正式概念:
在这里插入图片描述
注意:
(1)进程可以被分块,内存也可以被分块
(2)内存块 = 物理块 = 页框 = 页帧,是内存上的结构
(3)而对于进程来说,进程被分成的原单位为页面(页),且每个页面有页号,页号从0开始

在这里插入图片描述
动态重定位:
将进程放入内存时不着急计算物理地址,当需要调用时再计算物理地址,利用了重定位寄存器,重定位需要硬件支持
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意:二进制换算的一些小tips
(1)2的多n次方化成十进制数就是1后跟n个0,如2为10,8为1000,1024为1后跟10个0,4096为1后跟12个0
(2)2的n次方 - 1 为 n个1,如4095为 (2^12 -1) = 12个1

理解:
该题中共32位,页面大小位2的12次方,故页内地址由12位二进制数表示,共可有2^12=4096个基本存储单元(地址), 故0号页的逻辑地址空间应该是0~4095
在这里插入图片描述

  • 前20位即代表了页号,注意!要找到是该页号的起始地址而不是整个进程的零号页的起始地址,因为进程页面在内存块中的位置分配大概率不是连续的!所以要找的是具体页号对应的内存中的起始物理地址

  • 后12位代表了偏移量,所以当找到了该页号对应的起始地址x,则用x+后12位(页内偏移量)即可计算出其真实物理地址
    在这里插入图片描述
    在这里插入图片描述


页表:
系统会为每一个进程建立一个页表,而进程中的每一个页(面)都会对应页表中的一个页表项
在这里插入图片描述

  • 前面的总结到:
    计算机知道了一个页的逻辑地址和页面大小就可以很快的计算出其页号和页内偏移量

  • 注意:
    注意页表中 页号代表的是进程的页面的页号,块号代表的是内存的内存块号
    在这里插入图片描述
    在这里插入图片描述

注意理解:
何为页表项?
在这里插入图片描述
在这里插入图片描述

何为页表项长度?

  • 由于页表中页号是”隐式“的,故页表中的每一个页表项只是内存块号,页表项长度即表示块号所需要的二进制位数(bit(能表示1位二进制位)->Byte(能表示八位二进制位)为单位)

为何页表中页号可以是"隐式"的?

  • 这一部分完全讨论的是页表,因为页表也被存储在内存当中,而且页表中页表项的存储一定是连续的(因为连续存储使得访存速度提高)
  • 故只要知道:
    (1)页表存放在内存中的起始地址X
    (2)页表项大小M
    (3)目标页号N的物理起始地址D
    则可以知道具体是哪个页号,即N = (D-X)/M

反向思考
若是已知页号N求该页在内存中的起始物理地址X:
则有 目标页号物理始址 D = X + N * M,(N * M即页号*页表项长度)

需要格外注意而不要混淆的是:

  • 这里的操作只是为了在内存的页表中去目标页号对应页表项的内存地址中,取出那 M字节(页表项长度)的内存块号,得到了这个块号,才会去相应内存块查找页面的内容或计算逻辑地址相应的物理地址
  • 虽然页表的存储是连续的,但是页面的存储是离散的。故对于页面的物理地址计算不能采用页表那种找出整个页表的首地址就计算的方法,一定要找到具体某个页面的首地址而不是整个页面集合(进程)的首地址。

在这里插入图片描述

注意:
该总结图中“如何实现地址转换”的一栏没有考虑到页表的问题,或者说是在第二步缺省了。若是考虑页表的问题,具体的步骤应如下:

分页式存储管理由逻辑地址计算物理地址(考虑页表)

  1. 根据逻辑地址计算出页号
  2. 根据页面大小K和内存大小C算出页表项长度M,即基于K这样的页面大小来划分内存块,则最大内存块/物理块/页框/页帧号最少需要用多少位二进制数来表示
  3. 根据页表的起始地址X 以及页表项长度M 算出页号对应页表项在内存的起始地址 D=X + N*M
  4. 去内存地址为D的地方取出该页号对应页面在内存中存储的内存块号U
  5. 将内存块号U * 页面大小K(也就是根据页面大小K而划分的内存块大小) 得到 具体页面在内存中的物理起始地址begin
  6. 逻辑地址 % 页面大小 = 偏移量offset
  7. 到现在终于可以得出一个进程的逻辑地址在内存中的物理地址 = 物理始址begin + 偏移量offset
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狱典司

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

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

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

打赏作者

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

抵扣说明:

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

余额充值