2020年(VR虚拟现实)第三章x86的虚拟存储系统

  • 格式:doc
  • 大小:301.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(VR虚拟现实)第三章x86的虚拟存储系统

第三章x86的虚拟存储系统

Linux操作系统当前主要在Intel80386、80486和Petium系列机器上运行,它们统称为x86机器。x86具有两种存储器管理模式:实地址模式和受保护的虚地址模式,后者简称保护模式。在实地址模式下,CPU只能寻址1MB的内存空间。在保护模式下,x86提供了实现虚拟存储的硬件机制,它是操作系统实现多进程(多进程)存储管理以及提供存储保护的硬件基础。

§3.180386的虚拟地址空间

x86的系统结构中专门设置了用于实现虚拟存储技术的硬件机制,即分页和分段机制。各个进程的存储区域彼此隔离,每个进程都可以独立使用自己的虚拟地址空间,从而保证了进程的信息安全。

一.x86的地址转换机制

程序代码和数据都是存放在内存储器中,内存储器又称物理存储器,物理存储器是CPU可以直接访问的存储空间。80386机器的地址总线为32位,由它确定的物理地址空间的范围可达232字节,即4G字节。

指令中访问存储空间的地址称为逻辑地址,由逻辑地址确定的存储空间称为逻辑地址空间。x86的逻辑地址为48位,由它确定的逻辑地址空间可达64T字节。

逻辑地址必须转换成物理地址后才能访问物理存储器。在x86中逻辑地址由分段机制把逻辑地址转换成线性地址。再由分页机制把线性地址转换成物理地址。

二.80386的虚拟地址空间

x86把虚拟地址空间分成性质不同的两部分:全局地址空间和局部地址空间。全局地址空间是系统中所有的进程共享的地址空间,通常存放操作系统资源和数据。局部地址空间由各个进程使用,用于存储进程各自的代码和数据等。x86分段机制对虚拟地址空间实行分段管理,把虚拟地址空间分成大小不同的存储段。一个段的空间最大可达232字节,即4GB。64TB 的虚拟地址空间最多可以分为16K个段。其中全局地址空间和局部地址空间最多可以各有8K个段,称为全局段和局部段。

§3.2段描述符表

一.段描述符表

在分段存储管理中,使用段描述符表记录各个进程使用的段空间位置、大小和有关属性。段描述符表的表项称为段描述符。每个段描述符的长度为8字节。对应全局段和局部段,系统提供全局描述符表GDT和局部描述符表LDT。GDT以由所有的进程共享,系统中只有一个

GDT。LDT用于描述进程的各个局部段。每个进程都有属于它的LDT,即系统中有多少个进程就有多少个LDT。

系统的GDT和各个

进程的LDT都存放

在线性地址空间的

特定区域内。

二.全局描述符表GDT

GDT在线性地址空间中的位置是由全局描述符表寄存器

GDTR的值确定的。GDTR寄存器的长度为48位:

4716150

GDTR 表基址表限

GDT中一般包括三种不同种类的描述符。

●系统内核代码段和数据段的描述符

●进程状态段(TSS)的描述符

●LDT描述符,每个进程的LDT描述符

在GDT中的位置,记录在该进程TSS

段的一个16位的位域中,该位域的值

称为LDT选择符。

三.局部描述符表LDT

在多进程操作系统中,对于一个进程的代码段和数据段的描述和定义是由局部描述符表LDT 完成的。每个进程都有自己的LDT,它存放在该进程独立的虚拟地址空间中。一个进程的LDT 中至少包括3个描述符。

NULL

用户代码段描述符

用户数据段描述符

当进程LDT的定位是局部描述符表寄存器LDTR

和相应的LDTR高速缓存实现的:

LDTR寄存器LDTR高速缓存

1504716150

选择符(16位) LDT表基址(32位) 表限(16位)

LDTR是指出当前进程的LDT描述符在全局描述符表GDT中的位置。在进程切换时,系统从当前进程的TSS中取出LDT选择符的值,装入LDTR寄存器内。LDT的表限为16位,由它确定的最大地址空间为216,即64K字节。每个描述符的长度为8字节,一个LDT最多可以拥有8K个描述符。每个描述符对应一个局部段,所以系统中一个进程最多可以有8K个局部段。

§3.3逻辑地址向线性地址的转换

一.线性地址空间

每个进程必须有自己独立的存储空间,这个由进程使

用的存储空间就是线性地址空间,线性地址空间仍是

虚拟存储空间。通过分段机制把每个进程在逻辑地址

空间的代码段和数据段映射到进程的线性地址空间。

除此之外,操作系统本身也必须映射到进程的线性地

址空间中。

进程的线性地址空间被

分成系统区和用户区。系统区用于存放操作系统的代码、数据和各种全局数据结构。用户区

用于存放进程的代码、数据、堆栈以及进程的各种数据结构 二.逻辑地址向线性地址的转换

在程序指令中使用的逻辑地址格式如下所示。 4732310

选段符

段内偏址

16bit32bit

把逻辑地址中的选段符装入段寄存器中,把段内偏址通用寄存器中,经过分段机制的转换后成为32位线性地址在保护模式下,x86的段寄存器CS 、DS 、SS 、ES 、FS 和GS 称为选段符寄存器。

16位64位段描述符高速缓存寄存器 选段符段描述符

寄存器访问权限段基址段限

C S

D S S S

E S

F S

G S

程序人员可见程序人员不可见,其值由MPU 透明装入 §3.4选段符与段描述符 一.选段符

选段符的作用是确定所选段的段描述符在段描述符表中的位置。 153210

RPL:请求特权级,即访问者的特权级,分为0、1、2、3 四级,0级最高,3级最低。Linux 中仅使用两个级 别,0级为内核级,3级为用户级。