问题引出
今天在学习OS的内存管理内容时,看到了如下所示逻辑地址介绍。(内容为22年王道书P156)
看到这种形式之后,我产生了一定的疑惑:逻辑地址难道不是一个数值吗?为什么是这种表的形式?
问题分析与解决
根据王道视频中关于地址的二进制表示的补充讲解,以及如下所示两个公式的启发,我突然有所领悟:
页号=逻辑地址/页面长度
页内偏移量=逻辑地址%页面长度
回忆起二进制的除法和余数运算法则:如果页面长度是 2 n 2^n 2n的话,那么通过二进制除法即为移位n次!那么移位后的数即为商——页号,那些被移位掉的数即为余数——偏移量。
发现了这个巧妙的设计之后再回去看那张图,瞬间茅塞顿开,确实是十分巧妙
附1:页面长度是 2 n 2^n 2n时的好处
- 方便上面逻辑地址的计算,不赘述
- 当物理地址也刚好是相同位数二进制表示时,根据逻辑地址–>页号–>内存块号,再将二进制表示的内存块号和二进制表示的页内偏移量拼接起来,即为最终物理地址