前导知识
一个整数 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*物理块大小 就为该逻辑地址的物理地址
第二个方法:
先算出 页表中 块号 要占几位 ,就用几位来表示 我们在第二步中算出的块号
之后 算出 页内偏移量占几位 ,就用几位来表示 偏移量
一个整数 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
第二个方法:
先算出 页表中 块号 要占几位 ,就用几位来表示 我们在第二步中算出的块号
之后 算出 页内偏移量占几位 ,就用几位来表示 偏移量
