计算机体系结构——操作系统——虚拟存储器技术

虚拟存储器技术是操作系统中的概念。在存储器层次结构中增加硬盘的目的是提供一个虚拟化的廉价超大容量存储系统,而在大部分存储器访问时,依然能提供较快速的存储器访问速度。例如:一个提供2GB内存的计算机,可以用硬盘高效提供1TB的存储,较大的1TB存储器称为虚拟存储器,较小的2GB内存称为物理存储器。

现代操作系统中普遍采用虚拟内存管理,该部分即让软件运行在“虚地址”上,与真正访问存储的“实地址”(物理地址)相隔离。大部分访问将以DRAM的速度命中物理存储器。

一. 虚拟存储技术概述

虚拟存储是一种存储管理机制。现代计算机系统基本都是用硬盘作为存储器结构中的最底层,在增加硬盘的目的是提供一个虚拟化的廉价超大容量存储系统,而且在大部分存储器访问时,一样能提供快速的存储器访问速度,那么该硬盘通常可以作为虚拟存储器使用。

物理存储器通常也被称为主存。物理存储器通常保存虚拟存储器中大部分最近访问过的子集,也就是说物理存储器相当于虚拟存储器的高速缓存。

1.1 地址空间的划分

有了虚实存储器分类后,计算机的地址空间也可以分为虚拟地址空间和物理地址空间。

物理地址
处理器提交到总线上用于访问计算机系统中的内存和外设的最终地址。一个计算机系统中只有一个物理地址空间
线性地址
x86处理器特有的地址空间,x86处理器通过段机制等控制下的形成的地址空间,在操作系统的管理下,每个运行的应用程序有相对独立的一个或多个内存空间段,每个段有各自的起始地址和长度属性,大小不固定,这样操作系统中多个应用程序间可以相互隔离,实现对地址空间的保护
操作系统完成对处理器的段机制的初始化和配置后,处理器的段管理功能单元即可把虚拟地址转换为线性地址,在没有进行页机制启动前,线性地址即为物理地址。
逻辑(虚拟)地址
供给用户程序使用的虚拟地址,虚拟地址被分为虚拟页号(virtual page number, VPN)页偏移(page offset)。有了虚地址就可以访问虚拟存储器中任意地方的数据。

1.2 页、页表的概念

页、页表
如下图所示,在一个由CPU产生的32bit地址中,第二个字段是虚拟页号,第三个字段是页内偏移


页是OS内核内存映射的基本单位,通常指内存中的一段固定长度的块,可用于虚拟地址向物理地址的转换
页表
保存着虚拟地址和物理地址之间转换关系的表。
页表使用虚页号(VPN)做索引来查询物理页号。如果这个虚页在当前的主存中,页表中的对应项将包含虚页对应的物理页号。

补充:

页表、程序计数器和通用寄存器确定了一个虚拟机的状态,通常可以称这个状态为一个进程。不同的进程可以使用相同的虚拟地址,因此每个进程都有各自的页表,当然这些虚拟地址空间不会发生冲突,因为操作系统会负责分配物理主存和更新页表。

相关硬件的概念
页表寄存器
为了指出页表在存储器中的位置,硬件包含一个指向页表首地址的寄存器,即页表寄存器
MMU
所有数据请求都需经过MMU来决定存放在RAM内还是大容量存储器内。同时MMU可以控制存储器存取允许,MMU关闭时,虚地址直接输出到物理地址总线。内部包含虚实地址转换单元和从虚实地址的匹配表(即TLB)。
PTE
页表项 (PTE, Page Table Entry)是用来描述一个虚拟页号如何映射到物理页号的,每个进程都有一个单独的页表,每个进程的虚实地址映射根据该单独页表发生。
综上,页由ASID、虚拟页号、物理页号和一些Flag组成,而其中页表中的物理页号和一些有效位组成了PTE。
TLB
转换旁置缓冲区(TLB)。若每次进行地址转换时都要先到内存中查询页表,会对CPU性能产生影响,此时可采用TLB实现快速的虚实地址转换。
TLB也称为页表缓存或快表,借助局部性原理,存储当前处理器中最经常访问的页表,相当于页表的Cache。减少指令的访存次数。在TLB中每个页都有对应的入口(entry),入口即是虚拟页面和物理页框对应关系的记录。
存储的内容包括虚拟地址,物理地址和有效位,tag位

1.3 CPU访存时对页表的应用

cache存在时CPU访存的地址转换过程和数据查找过程:

CPU在取指或译码后产生虚拟地址,到物理内存中取页表,如下图所示,根据虚页号,在页表里找到对应的实页号,实页号和虚拟地址中的页内地址组成物理内存地址,到cache中查找对应数据。

为了减少CPU访问物理内存的次数,引入TLB。

增加TLB后,过程变为当CPU发出虚拟地址后,首先到TLB中查找相应的页表数据,如果TLB中正好存放着所需的页表,则称为TLB命中(TLB Hit),接下来CPU再依次看TLB中页表所对应的物理内存地址中的数据是不是已经在一级、二级缓存里了,若没有则到内存中取相应地址所存放的数据。如果TLB中没有所需的页表,则称为TLB失败(TLB Miss),接下来就必须访问物理内存中存放的页表,同时更新TLB的页表数据。

1.4 虚拟存储器技术的作用

管理硬件资源:统筹调度硬件资源,防止硬件资源被用户滥用
存储保护
为了避免主存中躲到陈旭仙湖干扰,防止某程序出错二破坏其他程序的正确性,或某程序不合法二被拒绝访问

保护模式和实模式最大的区别即为是否能够存储保护

(1)发生存储保护错的情况:

地址越界
访问越权
页表中设定权限
(2)最基本的保护措施

(3)硬件提供的三种基本功能
通过以下三个功能把

支持两种运行模式
1)管理模式
2)用户模式
使一部分CPU状态只能由系统进程写,而不能由用户进程写
允许CPI在管理态核用户态之间相互转换的机制

二、页式虚拟存储管理

1 页式管理工作原理

存储管理构建虚拟的内存地址,通过MMU(存储管理单元)将虚拟地址转换为物理地址,从而达到隐藏和保护存储器特定页内容,为程序分配连续的存储空间,扩展地址空间,通过合理映射节约物理内存的作用;且各进程不必担心自己使用的地址范围会不会和别的进程冲突,比如两个进程都使用了虚拟地址0x0800,操作系统可以设置MMU的映射项把它们映射到不同的物理地址,它们通过同样的虚拟地址访问不同的物理页面,就不会冲突了

操作系统将虚拟地址空间(硬盘)和物理地址空间(主存)统一分为若干个固定大小的页,并维护虚拟页地址和物理页地址的映射关系(即页表)。由于硬盘空间始终是比主存空间大的,所以虚拟地址可寻址的页数和物理地址可寻址的页数是可以不同的,也因此主存中不能保存所有的虚页,大部分虚页需要保存在硬盘上

虚拟内存地址可表示为虚拟页地址和页内偏移(页的大小决定了页偏移的位数)两部分,通过通过查表,即可得到相应物理内存地址。例如在32位系统中,若采用4KB页时,单个完整页表需要1M项,对每个进程维护页表需要相当可观的空间代价,因此页表只能存储于内存中。

页、页表
虚拟存储器和物理存储器都被划分成页。存储器中的页类似于cache中的块概念,每个页中含有一个地址。地址映射就是一个虚页映射到物理页的过程。一张张页组成了页表。页表是保存着虚拟地址和物理地址之间转换关系的表。

页表反映虚页和实页的映射关系,每个进程有一个页表,页表中有多个页表项,页表项数由进程大小决定,页表存储在主存中。

从空间上来算,若一台机器为32bit,虚拟页号为高20bit,页偏移位为12bit,则页大小为4KB,虚拟空间为 KB=4GB,则该进程的页表大小为 B=4MB

2 TLB、页表、cache、主存之间的关系

CPU根据指令中的逻辑地址去查询TLB和页表(一般二者同时查询),以确定数据是否在主存中

TLB是页表的缓存,cache是主存的缓存
TLB命中,页表一定命中
数据在主存中,但不一定在cache中

3 地址转换

可根据地址段属性不同分为查表转换和直接转换

(1)查表转换
应用程序使用的主要方式,CPU在访存指令时,根据操作系统给出的映射表来完成虚地址到物理地址的转换,即操作系统填写页表内容,MMU进行硬件转换

若机器存在TLB,转换过程为:

操作系统会跟踪那个进程在占用内存空间,然后选择该进程的页表
MMU从虚拟地址中提取虚拟页号,例如虚拟地址的高20bit
用虚拟页号在页表中查找物理页号,即用地址空间标识符(ASID)和虚拟页号(VPN)在页表的TLB中进行查找匹配;
若命中,则读出其中的物理页号(PFN)和标志位(Flag),物理页号用于和虚拟地中的页内偏移组成物理地址
若未命中,则产生TLB缺失异常,此时需要将页表中内容从主存中取出并填入TLB中,即为TLB充填(硬件或软件皆可实现),此时异常返回,指令重新运行。

(2)直接映射
该方式与直接使用物理地址差别不大,用户态应用程序无法使用直接映射方式

  1. 段式存储管理
    段本身是程序的逻辑结构锁决定的一些独立部分,所以分段对程序员是不透明的,可见的。
  2. 段页式存储管理
    段式和页式结合,程序按模块分段,段内再分页,进入主存仍以页为基本单位

逻辑地址由短地址、页地址和页内偏移量三个字段构成

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇