zoukankan      html  css  js  c++  java
  • 虚拟内存地址和物理内存地址

    什么是虚拟内存地址和物理内存地址呢?

    假设你的计算机是32位,那么它的地址总线是32位的,

    也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间,

    但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?

    回答这个问题前,先说明计算机的内存分页机制。

    计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),

    对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,

    所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。

    在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号页帧号的映射,而且是一对一的映射。

    但是问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?

    不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了。

    这就是处理虚拟内存地址到物理内存的步骤。

    虚拟内存地址由页号和偏移量组成。页号对应的映射到一个页帧。那么,说说偏移量。

    偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。

    举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:

    首先到页表中找到页号4对应的页帧号(比如为8),

    如果页不在内存中,则用失效机制调入页,

    否则把页帧号和偏移量传给MMU(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。

    总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

    虚拟内存=物理内存+swap空间(存储在交换区磁盘的空间)
    ---------------------
    作者:Demons_at
    来源:CSDN
    原文:https://blog.csdn.net/qq_40840459/article/details/81054164

  • 相关阅读:
    上传文件插件-bootstrap-fileinput
    js【jquery】
    html
    CSS3中的vh、vw及其应用场景
    element,点击查看,实现tab切换:
    js 遍历tree的一个例子(全遍历),更复杂的功能
    js 遍历tree的一个例子(全遍历)
    js 遍历tree的一个例子
    您的连接不是私密连接
    Es6中Map对象和Set对象的介绍及应用
  • 原文地址:https://www.cnblogs.com/zyy98877/p/10150899.html
Copyright © 2011-2022 走看看