zoukankan      html  css  js  c++  java
  • 虚拟内存 (Virtual Memory)

    虚拟存储器(Virtual Memory)为每个进程提供一个大的,一致的,私有地址空间。通过一个清晰的机制,虚拟存储器提供了三个要重的能力:它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的利用了主存;它为每个进程提供了一致的地址空间,从而简化了存储器管理;它保护每个进程的地址空间不被其他进程破坏。
     

    物理和虚拟寻址
     
    早期CPU直接使用物理寻址
     
     
     
    现代CPU均才用虚拟地址寻址
     
     

    虚拟寻址有何好处?
     
    首先,假设地址总线是nbit,则其可寻址虚拟地址空间是[0-(2^n-1)]。而物理地址空间为[0 - M](比如128M或者4G)。这就说明,假设一个32bit地址总线的系统,其物理内存小于4G,但其可用虚拟地址空间依然是4G。
     
    虚拟存储器作为缓存
     
    概念上言,虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每字节都有一个惟一的虚拟地址,这个惟一的虚拟地址是作为到数组的索引的。磁盘上数组的内容被缓存到主存中。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分成块,这些块作为磁盘和主存(较高层)之间的传输单元。VM系统通过将虚拟存储器分割成称为虚拟页(virtual page,VP)的大小固定的块,来处理这个问题。每个虚拟页的大小为P = 2^p字节。类似地,物理存储器被分割成物理页(physical page,PP),大小也为P字节(物理页也被称为页帧,page frame)。
     
    在任意时刻,虚拟页面的集合都分为三个不相交的子集:
    1 unallocated 未分配的:VM系统还未分配或创建的页。未分配的块没有任何数据与它们相关联,因此也就不占用任何磁盘空间。
    2 cached (已分配)缓存的:当前缓存在物理存储器中的已分配页。
    3 uncached (已分配)未缓存的:没有缓存在物理存储器中的已分配页。
     
     
     

    页表 page table
     
    存放在物理存储器一个数据结构,叫做页表(page table)。页表将虚拟页映射到物理页。页表就是一个PTE(page table entry,页表条目)的数组。虚拟地址空间中的每个页在页表中的一个固定偏移量处都有一个PTE。
     
    PTE0 为null,无效、未分配;
    PTE1 有效、已经把VP1缓存;
    PTE3 已分配,未缓存?
     
     
    页命中——读取PTE[2]可以直接从DRAM中读取
     
     
     
    缺页(page fault),即缓存不命中
     
    缓存不命中(之前)
     
    缓存不命中(之后)
     
    CPU读取 PET[3] 发现VP3并未缓存在DRAM中,触发 page fault。此时,假设DRAM缓存已满,需要一个牺牲页,就选择了牺牲PP3,PP3已经缓存了数据VP4,如果VP4已经发生了修改,需要拷贝到disk,同时需要删除从PET[4]到DRAM的指向。
    然后,从disk拷贝VP3到DRAM中的pp3,PET[3]指向DRAM的pp3。
    最后执行触发 page fault的指令。
     
    在虚拟存储器的习惯用法中,块被称为页。在磁盘和存储器之间传送页面的活动收做交换(swapping)或者页面调度(paging)。一直等待,直到最后时刻,也就是当有不命中发生时,才换入页面的这种策略被称为换需页面调度(demand paging)。
  • 相关阅读:
    如何在Centos官网下载所需版本的Centos
    Zabbix微信告警
    CentOS 7.4 源码编译安装 Redis
    zabbix源码安装后,设置为服务启动和关闭
    MySQL 快速入门教程
    mysql解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)的报错
    转:Centos7安装zabbix3.4超详细步骤解析
    centos7使用Gogs搭建Git服务器
    Centos7 使用firewall管理防火墙
    zabbix登录密码重置方法
  • 原文地址:https://www.cnblogs.com/caca/p/OS_Virtual_Memory.html
Copyright © 2011-2022 走看看