线性地址到物理地址的映射

http://book.51cto.com/art/200812/103230.htm

  分页机制是80x86内存管理机制的第二部分。它在分段机制的基础上完成虚拟(逻辑)地址到物理地址转换的过程。分段机制把逻辑地址转换成线性地址,而分页则把线性地址转换成物理地址。分页可以用于任何一种分段模型。处理器分页机制会把线性地址空间(段已映射到其中)划分成页面,然后这些线性地址空间页面被映射到物理地址空间的页面上。分页机制有几种页面级保护措施,可和分段机制保护机制合用或替代分段机制的保护措施。例如,在基于页面的基础上可以加强读/写保护。另外,在页面单元上,分页机制还提供了用户-超级用户两级保护。

  前面介绍的分段机制在各种可变长度的内存区域上操作。与分段机制不同,分页机制对固定大小的内存块(称为页面)进行操作。分页机制把线性和物理地址空间都划分成页面。线性地址空间中的任何页面可以被映射到物理地址空间的任何页面上。

  80x86使用4K(212)字节固定大小的页面。每个页面均是4KB,并且对齐于4K地址边界处。这表示分页机制把2^32B(4GB)的线性地址空间划分成2^20(1M = 1048576)个页面。分页机制通过把线性地址空间中的页面重新定位到物理地址空间中进行操作。由于4KB大小的页面作为一个单元进行映射,并且对齐于4K边界,因此线性地址的低12位可作为页内偏移量直接作为物理地址的低12位。分页机制执行的重定位功能可看做把线性地址的高20位转换到对应物理地址的高20位。

  当使用分页时,处理器会把线性地址空间划分成固定大小的页面(长度4KB),这些页面可以映射到物理内存中或磁盘存储空间中。当一个程序(或任务)引用内存中的逻辑地址时,处理器会把该逻辑地址转换成一个线性地址,然后使用分页机制把该线性地址转换成对应的物理地址。

  如果包含线性地址的页面当前不在物理内存中,处理器就会产生一个页错误异常。页错误异常的处理程序通常就会让操作系统从磁盘中把相应页面加载到物理内存中(操作过程中可能还会把物理内存中不同的页面写到磁盘上)。当页面加载到物理内存中之后,从异常处理过程的返回操作会使得导致异常的指令被重新执行。处理器用于把线性地址转换成物理地址时所需的信息及处理器产生页错误异常(若必要的话)所需的信息都存储于页目录和页表中。

  分页与分段最大的不同之处在于分页使用了固定长度的页面。段的长度通常与存放在其中的代码或数据结构具有相同的长度。与段不同,页面有固定的长度。如果仅使用分段地址转换,那么存储在物理内存中的一个数据结构将包含其所有的部分。但如果使用了分页,那么一个数据结构就可以一部分存储于物理内存中,而另一部分保存在磁盘中。

  为了减少地址转换所要求的总线周期数量,最近访问的页目录和页表会被存放在处理器的缓冲器件中。该缓冲器件被称为转换查找缓冲区(Translation Lookaside Buffer,TLB)。TLB可以满足大多数读页目录和页表的请求而无需使用总线周期。只有当TLB中不包含要求的页表项时才会使用额外的总线周期从内存中读取页表项,通常在一个页表项很长时间没有访问过时才会出现这种情况。

时间: 2024-10-07 09:53:54

线性地址到物理地址的映射的相关文章

linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一)

分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从<深入理解linux内核>这本书中摘抄几段关于上述名词的解释: 一.<深入理解linux内核>的解释 逻辑地址(Logical Address) 包含在机器语言指令中用来指定一个操作数或一条指令的地址(有点深奥).这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使windows程序员把程序分成若干段.每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离. 线性地址(

[转帖]Linux下逻辑地址、线性地址、物理地址详细总结

Linux下逻辑地址.线性地址.物理地址详细总结 https://www.cnblogs.com/alantu2018/p/9002441.html 总结的挺好的 现在应该是段页式管理 使用MMU和TLB 实现 线性地址 逻辑地址 和物理地址的映射. 一.逻辑地址转线性地址    机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到. 我们写个最简单的hello world程序,用gcc编译,再反编译后会看到以下指令:

操作系统 内存地址(逻辑地址、线性地址、物理地址)概念

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分.例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干.只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换):逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段.数据段如果完全一样).应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是

浅析线性地址到物理地址的转换

一. 概念介绍: 1.线性地址(linear address)(也称虚拟地址virtual address):是一个32位无符号整数,用来表示高达4GB的地址. 2.物理地址(physical address):实际地址. 3.VM 即虚拟内存 ,PM 即物理内存 4.(1)PGD(Page Global Directory) 即页全局目录. (2)PUD(Page Upper Directory)即页上级目录. (3)PMD(Page Middle Directory)即页中间目录. (4)P

逻辑地址、线性地址、物理地址以及虚拟存储器

http://blog.csdn.net/mrbuffoon/article/details/48947267 Note:本文是基于80×86微处理器进行原理总结. 在内存地址上,我们要区分逻辑地址.线性地址以及物理地址这三个概念.逻辑地址:包含在机器语言指令中用来指定一个操作数或者一条指令的地址.每一个逻辑地址都由一个段选择符和段偏移量组成.线性地址:也称为虚拟地址,也不是一个真实的地址,他是对应了硬件页式内存转换前地址.物理地址:就是物理内存中的真正地址. 内存控制单元(MMU)通过分段单元

linux2.6 内存管理——逻辑地址转换为线性地址(逻辑地址、线性地址、物理地址、虚拟地址)

Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中.Linux主要工作在保护模式下.80X86从逻辑地址到物理地址变换中经过了两个阶段.第一阶段使用分段机制把程序的逻辑地址变换成处理器可寻址内存空间(称为线性地址空间)中的地址.第二阶段的分页机制把线性地址转换成物理地址

逻辑地址、线性地址和物理地址的关系

http://blog.csdn.net/prike/article/details/52722934 物理内存:数据寻址用:mmu联系: 虚拟地址:cpu传给mmu的:给程序员使用: 逻辑地址:cpu指令使用:符合可执行文件的格式. 二.物理地址.虚拟地址(线性地址).逻辑地址 任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围.这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G),而对于一个64位的CPU,它的地址范围

LINUX 逻辑地址、线性地址、物理地址和虚拟地址 转

一.概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应.——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样.所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一

Linux内存管理--虚拟地址、逻辑地址、线性地址和物理地址的区别(二)【转】

本文转载自:http://blog.csdn.net/yusiguyuan/article/details/9668363 这篇文章中介绍了四个名词的概念,下面针对四个地址的转换进行分析 CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步(如下图): 首先,将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址, 其次,再利用其页式内存管理单元,转换为最终物理地址. 这样做两次转换,的确是非常麻烦而且没有必要的,