虚拟地址到物理地址的地址变换过程【转】

转自:https://blog.csdn.net/yunfenglw/article/details/45603823

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/yunfenglw/article/details/45603823 虚拟地址到物理地址的地址变换过程

2015-05-09 青岛 张俊浩

内容部分来自《Unix内核源码剖析》

软件环境:UNIX V6

硬件环境:PDP-11/40(16位计算机)

第二章《进程》一节阐述了PDP-11/40的虚拟地址到物理地址的地址变换过程。

MMU通过APR(Active Page Register)寄存器将虚拟地址变换为物理地址。

APR寄存器由一个PAR(Page Address Register)寄存器和一个PDR(Page Description Register)寄存器构成。

内核通过向与执行进程相对应的、供用户进程用使用的APR设定适当的值,保证各用户拥有独立的虚拟地址空间。

APR共有8组,APR[0]-APR[7]。进程的虚拟地址空间以页或者段为单位进行管理,一组APR对应一页。APR{PAR,PDR},PAR用来保存与各页物理地址的基地址有关信息,PDR用来保存各页的块(以64字节为单位)数以及是否允许访问等信息。每一页最多可以分配128个块(8KB)。

【虚拟地址到物理地址的转化过程】:虚拟地址的高位3比特决定了对应的页(APR),APR的11-0位决定了物理地址基地址的块地址,加上虚拟地址的12-6比特得到物理内存的块地址,再加上作为块内偏移值的虚拟地址的5-0位,就得到了最后的地址。(如下图所解析~)

上面解析了PDP-11/40中MMU的虚拟地址到物理地址的转化过程,但我们继续思考,为什么处理器对内存管理采用“虚拟地址空间”概念,这样做有什么好处?虚拟地制定本质是什么?

1.采用“虚拟地址空间”的优势:

(1)实现对内存访问的管理。不同进程使用的虚拟地址彼此隔离。如果程序能直接访问物理地址,也就能访问其他进程正在使用的物理内存区域,进而可能是其他进程或者操作系统崩溃。一个进程中的代码无法更改正在由另一进程使用的物理内存。

(2)提高内存的使用效率。通过将不连续的物理内存区域映射到连续的虚拟内存区域,程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻(MMU完成相应的映射)的大内存缓冲区;程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区,当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件,数据或代码页会根据需要在物理内存与磁盘之间移动。

3)编程效率。虚拟地址是可重定位程序(ELF)实现的基础,对于每个程序来说是一块从0到2的N次方(这里N=16)的“虚拟”内存,MMU会完成虚拟地址到内存物理地址的转化~

2.采用“虚拟地址空间”的本质:

与其说虚拟地址,倒不如说内核给程序(代码段、数据段)提供了统一的访问模式(抽象出统一的访问模式)基址加偏移量(这也是内存的分层次的断页管理模式)。所以所有程序的编码你可以从假设的“0”基址开始开始编程,具体基址操作系统设定并由MMU完成地址转化~

———————————————— 版权声明:本文为CSDN博主「天朗-星空」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yunfenglw/article/details/45603823

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cwl_Java

软考分类精讲-计算机组成与体系结构

6000
来自专栏网络交换FPGA

FPGA中的时序约束--从原理到实例

建立时间和保持时间是FPGA时序约束中两个最基本的概念,同样在芯片电路时序分析中也存在。

8620
来自专栏知道创宇

硬件学习之通过树莓派操控 jtag

最近在搞路由器的时候,不小心把CFE给刷挂了,然后发现能通过jtag进行救砖,所以就对jtag进行了一波研究。

7220
来自专栏知道创宇

PHP-fpm 远程代码执行漏洞(CVE-2019-11043)分析

国外安全研究员 Andrew Danau在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。

18330
来自专栏网络交换FPGA

Vivado设计锁定与增量编译(附工程)

该部分引用本公众号上一篇时序约束文章中的内容,在Quartus中采用逻辑锁定的办法来解决FPGA和外部接口的时序问题,也就是输入输出的寄存Rxd/Txd的寄存器...

9220
来自专栏Java建设者

程序员需要了解的硬核知识之CPU

大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,...

10510
来自专栏iOS技术

iOS 底层拾遗:objc_msgSend 与方法缓存

Runtime 消息发送与转发流程总是大家关注的重点,却常常忽略方法缓存机制这个显著提升 objc_msgSend 性能的幕后功臣。

6910
来自专栏nnngu

类型限定符

6220
来自专栏知识分享

WIFI网络(ESP8266)升级STM32: STM32使用http下载程序文件,乒乓升级方式,支持程序回滚,支持MQTT通信控制 (WIFI模块AT,TCP透传方式)

    如果有更新标志位,STM32控制WIFI模块以TCP方式连接Web服务器,然后发送Get 协议获取程序文件,写入Flash后,重启!

12410
来自专栏CU技术社区

你应该知道的关于 CPU 的一些基本知识~

当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单的理解为CPU要知道这是什么指令),然后执行该指令。再然后取...

8620

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励