zoukankan      html  css  js  c++  java
  • 《Linux中为什么要使用虚拟地址》

    1.直接使用物理地址

    (1)安全风险:

      用户有可能在程序中操作不当,直接操作了某个未知的物理地址,导致数据被改写。有可能导致那部分内存的程序或者设备损坏。

      使用虚拟地址的话,会有相对应的保护机制。

    (2)地址不确定

      众所周知,编译完成后的程序是存放在硬盘上的,当运行的时候,需要将程序搬到内存当中去运行,如果直接使用物理地址的话,我们无法确定内存现在使用到哪里了,也就是说拷贝的实际内存地址每一次运行都是不确定的,比如:第一次执行a.out时候,内存当中一个进程都没有运行,所以搬移到内存地址是0x00000000,但是第二次的时候,内存已经有10个进程在运行了,那执行a.out的时候,内存地址就不一定了。

    (3)效率低下

      用的时候,我们一般的办法是将不常用的进程拷贝到磁盘的交换分区中,好腾出内存,但是如果是物理地址的话,就需要将整个进程一起拷走,这样,在内存和磁盘之间拷贝时间太长,效率较低。

    2.虚拟地址的实现

       虚拟地址实际上就相当于在物理地址和进程间引入一个第三者,一般实现方法有两种:分段映射和分页映射。

      

      分段映射能够解决安全隐患、地址不确定问题,但是对于效率问题仍然没有很好的解决。因此引出了新的方法:分页方式。分页的方式实际上就是讲内存以4KB为单位分页(一页4KB),然后在Linux内核中提供页项目表、页表,一个大小占多个页的进程,在运行的时候,并不是所有的也都在运行,这时候将运行的页拷贝到内存,这样就缓解了效率的问题。
      

     

  • 相关阅读:
    linux 常用命令
    基于 DirectX11 的 MMDViewer 01-简介
    基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口
    基于 DirectX11 的 MMDViewer 03-渲染管线
    基于 DirectX11 的 MMDViewer 02-创建一个窗口
    Simple2D-26 Simple2D 最后的工作,开发结束
    Simple2D-25 精灵动作
    Simple2D-24 Sprite 渲染树
    Simple2D-23(重构)反走样几何图形
    Simple2D-22(重构)纹理池
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/12157266.html
Copyright © 2011-2022 走看看