虚拟存储器

虚拟存储器的三个重要功能:

1.它将主存看成一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。

2.它为每个进行提供了一致的地址空间,从而简化了存储器管理。

3.它保护了每个进程的地址空间不被其他进程破坏。

 

虚拟存储器组(VM)系统通过将虚拟存储器分割为称为虚拟页(VP)的大小固定的块来处理,每个虚拟页的大小为P=2^p字节,类似地,物理存储器被分割为物理页(PP),大小也为P字节。

每个页表条目(PTE)是由一个有效位和一个n位地址字段组成的。有效位表明了该虚拟页当前是否被缓存在DRAM中。如果设置了有效位,那么地址字段就表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。

在任意时刻,虚拟页面的集合都分为三个不相交的子集。

未分配的:VM系统还未分配(或者创建的页)。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。

缓存的:当前缓存在物理存储器中的已分配页。

未缓存的:没有缓存在物理存储器中的已分配页。

 

地址翻译

当页面命中时,CPU硬件执行以下步骤:

(1) :处理器生成一个虚拟地址,并把它传给MMU

(2):MMU生成PTE地址,并从高速缓存/主存请求得到它

(3):高速缓存/主存向MMU返回PTE

(4):MMU构造物理地址,并把它传送给高速缓存/主存

(5):高速缓存/主存返回所请求的数据给处理器

 

 

 

页面命中完全是由硬件来处理的,而处理缺页要求硬件和操作系统内核协作完成,执行以下步骤:

(1)-(3):与页面命中时相同

(4):PTE中的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序。

(5):缺页处理程序确定出物理存储器中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘。

(6):缺页处理程序页面调入新的页面,并更新存储器中的PTE

(7):缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页的虚拟地址重新发送给MMU。因为虚拟页面现在缓存在物理存储器中,所以就会命中。

 

 mmap函数:创建新的虚拟存储器区域,并将对象映射到这些区域中。

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);  //存储器映射(物理地址映射为虚拟地址)

 mmap函数要求内核创建一个新的虚拟存储器区域,最好是从地址start开始的一个区域(通常为NULL,由内核指定),并将文件描述符fd指定的一个连续的片(chunk)映射到这个新的区域。连续的片大小为length字节,从距文件开始处偏移量为offset字节的地方开始。


prot:新映射的虚拟存储器区域的访问权限位。

flag:指定映射对象的类型,映射选项和映射页是否可以共享。

mmap函数删除从虚拟地址start开始的,由接下来length字节组成的区域。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值