虚拟地址和物理地址之间的区别

简介: 【4月更文挑战第12天】

在计算机系统中,虚拟地址和物理地址是两个重要的概念。它们在内存管理中起着至关重要的作用。本文将深入探讨虚拟地址和物理地址之间的区别,包括定义、特点、使用以及它们之间的映射关系。

虚拟地址

虚拟地址是由CPU生成的地址,它是一个虚拟的地址空间。每个进程都有自己的虚拟地址空间,这使得每个进程都认为自己拥有整个系统的内存。虚拟地址是在程序执行时使用的地址,它提供了一种抽象层,使得程序员不需要考虑物理内存的细节。

特点

  • 虚拟地址是由操作系统管理的,程序无法直接访问物理内存。
  • 虚拟地址空间可以大于物理内存大小,因为虚拟地址空间的大小由CPU的位数确定。
  • 虚拟地址可以方便地进行地址空间隔离,提高系统的安全性。

物理地址

物理地址是内存模块上的实际地址,它是存储器中的真实位置。物理地址是硬件直接访问的地址,它与内存中的存储单元一一对应。

特点

  • 物理地址是实际存在的地址,对应于内存芯片上的存储单元。
  • 物理地址空间大小由计算机硬件的限制确定,通常取决于系统的物理内存大小。
  • 物理地址是操作系统通过地址映射将虚拟地址转换而来的。

虚拟地址与物理地址的映射关系

虚拟地址和物理地址之间通过地址映射建立关联。操作系统通过地址映射表将虚拟地址映射到物理地址,使得程序可以正确访问内存。地址映射表通常包括页表、段表等数据结构,用于存储虚拟地址到物理地址的映射关系。

分页式内存管理

在分页式内存管理中,虚拟地址空间和物理地址空间被分成固定大小的页。操作系统维护一个页表,将虚拟地址映射到物理地址。当程序访问虚拟地址时,CPU通过页表将其转换为物理地址,然后访问物理内存。

分段式内存管理

在分段式内存管理中,虚拟地址空间和物理地址空间被划分成若干段。每个段具有不同的属性和大小,如代码段、数据段等。操作系统维护一个段表,将每个段映射到物理内存中的对应位置。

总结

虚拟地址和物理地址在概念上是抽象的,它们本身没有具体的形态,而是在计算机系统中的一种逻辑概念。

  • 虚拟地址:你可以将虚拟地址类比为信件上的收信地址,它是程序员或进程看到的地址,用于访问内存中的数据或指令。在计算机系统中,虚拟地址是由操作系统分配给进程的,每个进程都有自己的虚拟地址空间。虚拟地址可以被映射到物理地址,但它们本身并没有直接对应到实际的硬件上。

  • 物理地址:物理地址可以类比为信件实际所在的位置,它是内存中的实际地址,对应于内存芯片上的存储单元。物理地址是硬件直接访问的地址,用于实际读取或写入内存中的数据。物理地址是由硬件处理器通过内存控制器直接使用的,而不是由操作系统管理。

目录
相关文章
|
4月前
|
存储 缓存 网络协议
|
4月前
请求分页给出逻辑地址,求对应的物理地址
请求分页内存管理中如何根据逻辑地址计算物理地址的过程,包括确定页号、计算偏移量,并将其转换为物理地址。
138 1
请求分页给出逻辑地址,求对应的物理地址
|
9月前
|
存储 算法 Linux
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
|
存储 索引
逻辑地址与物理地址的转换
最近一直在学8086,上课老师突然问了个这。对于问题“8086 CPU 能提供20位的地址信息,可直接对1M个存储单元进行访问,而CPU内部可用来提供地址信息的寄存器都是16位,那怎样用16位寄存器来实现20位地址寻址呢"明白了不少。
196 0
|
存储
逻辑地址和物理地址转换
逻辑地址和物理地址转换
|
9月前
|
搜索推荐 Linux
内存学习(二):物理地址空间虚拟地址空间布局
内存学习(二):物理地址空间虚拟地址空间布局
437 0
|
9月前
|
索引
虚拟地址与物理内存地址是如何映射的
虚拟地址与物理内存地址是如何映射的
|
存储 缓存 程序员
操作系统中逻辑地址和物理地址的区别
操作系统中逻辑地址和物理地址的区别
258 1
|
Linux 定位技术 虚拟化
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
71 0
|
程序员 索引
《操作系统真象还原》——0.9 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别
物理地址就是物理内存真正的地址,相当于内存中每个存储单元的门牌号,具有唯一性。不管在什么模式下,不管什么虚拟地址、线性地址,CPU最终都要以物理地址去访问内存,只有物理地址才是内存访问的终点站。
2379 0