单级页表
分页储存
页表
页表中的页表项是连续存放的,因此页号可以是隐含的,不需要占用空间
页表中的块号所记录的只是内存块号,而非内存块的起始地址
案例一 假设某系统物理内存大小为4 G B,页面大小为4 K B,则每个页表项至少应该为多少字节
解答 : 由题目可知,
内存块大小=页面大小=4 KB=2^12 B ; 4 GB = 2 ^32 B
所以4GB的内存总共会被分为2^32 / 2^12 = 2^20个内存块.
内存块号的范围应该是 0~(2^20−1)
- 从逻辑地址到物理地址的转换
用于存放进程的页框是离散存储的,但是页框内部是连续存放的。所以我们可以先找到该页框的起始地址,然后再加上框内的偏移量即可求得具体的物理地址
重点
1 通过逻辑地址A分离出页号P和页内偏移量W
2 通过P查询块表或者内存中的页表从而从页表中的页表项找到页号P对应的页框号。
3 通过 页框号 * 页框大小 得到页号P在内存中的起始地址
4 逻辑地址A所对应的物理地址 = P页面在内存中的起始地址 + 页内偏移量W
案例二
在某计算机系统中,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址110对应的页号、页内偏移量是多少?
页号 = 逻辑地址 / 页面长度 (取除法的整数部分)
页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)
例子中所给的逻辑地址110
页号P = 100 / 50 = 2
页内偏移量W = 100 %50 = 10
因此物理地址为 = ( 页 表 中 P 所 对 应 的 物 理 块 号 ) ∗ 物 理 块 大 小 + W
二进制的逻辑结构的地址划分
如果页面大小刚好是2的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)
逻辑地址结构(假设操作系统用32个二进制来表示逻辑地址):
31 … 12 11 … 0
页号P 页内偏移量W
地址结构包含两部分:前一部分为页号P,后一部分位页内偏移量W。如果每个页面大小2^k B,用二进制表示逻辑地址,则末尾k位即为页内偏移量,其余部分就是页号。
如果由K位表示“页内偏移量“,则说明系统中一个页面的大小是2^k个内存单元”
如果由M位表示“页号“,则说明系统中,一个进程最多允许有2^m个页面, 即页号范围为0 ~ 2^m-1 。
可以将十进制的页号与页内偏移量单独的转换成二进制的表示形式,然后将将其拼接:页 号 + 页 内 偏 移 量 页号+页内偏移量页号+页内偏移量
假设某计算机用32个二进制表示逻辑地址,页面大小为4 K B = 2^12 B = 4096 B(结构划分与上表单一致)
比如逻辑地址4097 40974097 转化 :
页号 = 4097 / 4096 =1 转化为长度占20位的二进制形式为:00000000000000000001
页内偏移量 = 4097 % 4096 =1 转化为长度占12位的二进制形式位:000000000001
然后将将其拼接得到二进制形式的逻辑地址:页 号 + 页 内 偏 移 量 页号+页内偏移量页号+页内偏移量 = 00000000000000000001000000000001
二级页表
单级别页表存在的问题
所有页表项必须为连续存放在内存中
二级页面表定义
二级页表中 页目录表是如何找到二级页表从而找到页号对应的真正的物理地址的?
1 从逻辑地址中提取出页目录号 、二级页号、 页内偏移量 。
2 使用页目录号作为索引,找到对应的页目录项。页目录项中存放着对应页表的物理地址(将页目录项中的物理地址转换为真实的物理地址。)。
3 得到真实的物理地址后,可以访问到对应的二级页表。
4 使用二级页号作为索引,找到对应的页表项。页表项中存放着对应页的物理地址。
Ref : 操作系统内存管理
标签:逻辑,操作系统,笔记,偏移量,物理地址,地址,页表,内存 From: https://blog.csdn.net/oYiDiDeSiNian/article/details/136835313