赞
踩
虚拟存储器技术是操作系统中的概念。在存储器层次结构中增加硬盘的目的是提供一个虚拟化的廉价超大容量存储系统,而在大部分存储器访问时,依然能提供较快速的存储器访问速度。例如:一个提供2GB内存的计算机,可以用硬盘高效提供1TB的存储,较大的1TB存储器称为虚拟存储器,较小的2GB内存称为物理存储器。
现代操作系统中普遍采用虚拟内存管理,该部分即让软件运行在“虚地址”上,与真正访问存储的“实地址”(物理地址)相隔离。大部分访问将以DRAM的速度命中物理存储器。
虚拟存储是一种存储管理机制。现代计算机系统基本都是用硬盘作为存储器结构中的最底层,在增加硬盘的目的是提供一个虚拟化的廉价超大容量存储系统,而且在大部分存储器访问时,一样能提供快速的存储器访问速度,那么该硬盘通常可以作为虚拟存储器使用。
物理存储器通常也被称为主存。物理存储器通常保存虚拟存储器中大部分最近访问过的子集,也就是说物理存储器相当于虚拟存储器的高速缓存。
有了虚实存储器分类后,计算机的地址空间也可以分为虚拟地址空间和物理地址空间。
页是OS内核内存映射的基本单位,通常指内存中的一段固定长度的块,可用于虚拟地址向物理地址的转换
页表保存着虚拟地址和物理地址之间转换关系的表。
页表使用虚页号(VPN)做索引来查询物理页号。如果这个虚页在当前的主存中,页表中的对应项将包含虚页对应的物理页号。页表项 (PTE, Page Table Entry)即用来描述一个虚拟页号如何映射到物理页号的
页由ASID、虚拟页号、物理页号和一些Flag组成,而其中页表中的物理页号和一些有效位组成了PTE。
为了指出页表在存储器中的位置,硬件包含一个指向页表首地址(物理地址)的寄存器,即页表寄存器
如下图所示,在一个由CPU产生的32bit地址中,第二个字段是虚拟页号,第三个字段是页内偏移
页表、程序计数器和通用寄存器确定了一个虚拟机的状态,通常可以称这个状态为一个进程。不同的进程可以使用相同的虚拟地址,因此每个进程都有各自的页表,当然这些虚拟地址空间不会发生冲突,因为操作系统会负责分配物理主存和更新页表。
访问位:表示该页是否被访问过(r/w),用于给操作系统判断该页是否被经常访问,从而是否替换
修改位:表示该页是否被修改过
保护位:该页允许的访问方式(ro/rw/x)
cache存在时CPU访存的地址转换过程和数据查找过程:
CPU在取指或译码后产生虚拟地址,到物理内存中取页表,如下图所示,根据虚页号,在页表里找到对应的实页号,实页号和虚拟地址中的页内地址组成物理内存地址,到cache中查找对应数据。
为了减少CPU访问物理内存的次数,引入TLB。
增加TLB后,过程变为当CPU发出虚拟地址后,首先到TLB中查找相应的页表数据,如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit),接下来CPU再依次看TLB中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存中取相应地址所存放的数据。如果TLB中没有所需的页表,则称为TLB失败(TLB Miss),接下来就必须访问物理内存中存放的页表,同时更新TLB的页表数据。
为了避免主存中躲到陈旭仙湖干扰,防止某程序出错二破坏其他程序的正确性,或某程序不合法二被拒绝访问
保护模式和实模式最大的区别即为是否能够存储保护
(1)发生存储保护错的情况:
(2)最基本的保护措施
(3)硬件提供的三种基本功能
通过以下三个功能把
存储管理构建虚拟的内存地址,通过MMU(存储管理单元)将虚拟地址转换为物理地址,从而达到隐藏和保护存储器特定页内容,为程序分配连续的存储空间,扩展地址空间,通过合理映射节约物理内存的作用;且各进程不必担心自己使用的地址范围会不会和别的进程冲突,比如两个进程都使用了虚拟地址0x0800,操作系统可以设置MMU的映射项把它们映射到不同的物理地址,它们通过同样的虚拟地址访问不同的物理页面,就不会冲突了
操作系统将虚拟地址空间(硬盘)和物理地址空间(主存)统一分为若干个固定大小的页,并维护虚拟页地址和物理页地址的映射关系(即页表)。由于硬盘空间始终是比主存空间大的,所以虚拟地址可寻址的页数和物理地址可寻址的页数是可以不同的,也因此主存中不能保存所有的虚页,大部分虚页需要保存在硬盘上
虚拟内存地址可表示为虚拟页地址和页内偏移(页的大小决定了页偏移的位数)两部分,通过通过查表,即可得到相应物理内存地址。例如在32位系统中,若采用4KB页时,单个完整页表需要1M项,对每个进程维护页表需要相当可观的空间代价,因此页表只能存储于内存中。
虚拟存储器和物理存储器都被划分成页。存储器中的页类似于cache中的块概念,每个页中含有一个地址。地址映射就是一个虚页映射到物理页的过程。一张张页组成了页表。页表是保存着虚拟地址和物理地址之间转换关系的表。
页表反映虚页和实页的映射关系,每个进程有一个页表,页表中有多个页表项,页表项数由进程大小决定,页表存储在主存中。
从空间上来算,若一台机器为32bit,虚拟页号为高20bit,页偏移位为12bit,则页大小为4KB,虚拟空间为
CPU根据指令中的逻辑地址去查询TLB和页表(一般二者同时查询),以确定数据是否在主存中
可根据地址段属性不同分为查表转换和直接转换
(1)查表转换
应用程序使用的主要方式,CPU在访存指令时,根据操作系统给出的映射表来完成虚地址到物理地址的转换,即操作系统填写页表内容,MMU进行硬件转换
若机器存在TLB,转换过程为:
(2)直接映射
该方式与直接使用物理地址差别不大,用户态应用程序无法使用直接映射方式
段本身是程序的逻辑结构锁决定的一些独立部分,所以分段对程序员是不透明的,可见的。
段式和页式结合,程序按模块分段,段内再分页,进入主存仍以页为基本单位
逻辑地址由短地址、页地址和页内偏移量三个字段构成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。