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