加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

分页存储中逻辑地址向物理地址转换的两种方法的区分

(2023-05-28 15:18:01)
前导知识
一个整数 a * 2 相当于 对 a 的 二进制 左移一位
一个整数 a / 2 相当于 对 a 的 二进制 右移一为

a = 5:
//二进制代码为 0101
a = 10;
//二进制代码为 1010 (左移末位补0)
1
2
3
4
类似的,
a * 2^k 相当于 对 a 的 二进制 左移k位
a / 2^k 相当于 对 a 的二进制 右移k位
(无符号左移右移,想学习的话,在计算机组成原理 第二章)

接下来我们以分页存储为例,讲一下地址变换过程
由逻辑地址到物理地址的转换需要以下几步
——————————————————————————————

第一步:计算页号和页内偏移量
页号 = 逻辑地址 / 页框大小    (整数部分)
页内偏移量 = 逻辑地址 % 页框大小 
1
2
第二步:查页表,找出页号对应的物理块号
由于操作系统为每个进程分配一个页表,进程又细分为多个页面
每个页面对应页表中的一个页表项(页表的一行)

所以根据第一步得到的  页号       
得到页号所对应页表项的物理地址:页表的起始地址+页号*页表项的长度
注: 页表的起始地址存放在PCB里
注:页表项的长度={主存容量/物理块的大小} 这一部分对应的二进制长度
1
2
3
4


第三步,拼接 VS 相乘
第一个方法:

根据第二步得到的块号,不妨记为 b 
 b*物理块大小 就为该逻辑地址的物理地址
 
 注:因为在划分内存的时候物理块就是从 0 开始编号的
 b号物理块,前面有 b 个物理块(从0开始编号)
 所以 b*物理块大小 就为该逻辑地址的物理地址
第二个方法:

先算出 页表中 块号 要占几位 ,就用几位来表示 我们在第二步中算出的块号
之后 算出 页内偏移量占几位 ,就用几位来表示 偏移量
最后,将页号放在前面,偏移量放在后面拼接就可以了
1
2
3
4
5
6
7
8
9
10
11
12
13
举个例子:

直接两者一拼就ok了。

既然两者都能得到正确的结果那么怎么相互转换呢?
我们通过第一种方法:
 根据第二步得到的块号,不妨记为 b 
 b*物理块大小 就为该逻辑地址的物理地址
1
2
我们乘了物理块的大小,而物理块的大小 正好是 2^k ,相当于向左移了k位,
比如:物理块的大小为 2^12 , 那么页内地址就要占 12位
得到的物理块号假设为 3(0011) , 那么 3 * 2^12 次方相当于左移了12位
就变成了

0011000000000000
1
在加上偏移量假如为10,那么偏移量占几位呢 , 正好是 12位,所以就把偏移量放到 上方的 12个0处就好
变成了

0011000000001010
1
以上就是 两种方法的转换过程
————————————————
版权声明:本文为CSDN博主「Undauanted」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45691703/article/details/127056302

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有