zoukankan      html  css  js  c++  java
  • 虚拟地址到物理地址的地址变换过程【转】

    转自: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

  • 相关阅读:
    Silverlight Toolkit ListBoxDragDropTarget学习笔记
    函数指针和指针函数(转)
    面试题_反转链表
    C++中的异或运算符^
    面试题_旋转字符串
    面试题_寻找丑数
    模拟一个简单的基于tcp的远程关机程序
    管理指针成员
    赫夫曼树编码问题
    堆的基本操作
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/11834820.html
Copyright © 2011-2022 走看看