您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章x86的虚拟存储系统
1第三章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段描述符表2一.段描述符表在分段存储管理中,使用段描述符表记录各个进程使用的段空间位置、大小和有关属性。段描述符表的表项称为段描述符。每个段描述符的长度为8字节。对应全局段和局部段,系统提供全局描述符表GDT和局部描述符表LDT。GDT以由所有的进程共享,系统中只有一个GDT。LDT用于描述进程的各个局部段。每个进程都有属于它的LDT,即系统中有多少个进程就有多少个LDT。系统的GDT和各个进程的LDT都存放在线性地址空间的特定区域内。二.全局描述符表GDTGDT在线性地址空间中的位置是由全局描述符表寄存器GDTR的值确定的。GDTR寄存器的长度为48位:4716150GDTR表基址表限GDT中一般包括三种不同种类的描述符。●系统内核代码段和数据段的描述符●进程状态段(TSS)的描述符●LDT描述符,每个进程的LDT描述符在GDT中的位置,记录在该进程TSS段的一个16位的位域中,该位域的值称为LDT选择符。三.局部描述符表LDT在多进程操作系统中,对于一个进程的代码段和数据段的描述和定义是由局部描述符表LDT完成的。每个进程都有自己的LDT,它存放在该进程独立的虚拟地址空间中。一个进程的LDT中至少包括3个描述符。3NULL用户代码段描述符用户数据段描述符当进程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逻辑地址向线性地址的转换一.线性地址空间每个进程必须有自己独立的存储空间,这个由进程使用的存储空间就是线性地址空间,线性地址空间仍是虚拟存储空间。通过分段机制把每个进程在逻辑地址空间的代码段和数据段映射到进程的线性地址空间。除此之外,操作系统本身也必须映射到进程的线性地址空间中。进程的线性地址空间被4分成系统区和用户区。系统区用于存放操作系统的代码、数据和各种全局数据结构。用户区用于存放进程的代码、数据、堆栈以及进程的各种数据结构二.逻辑地址向线性地址的转换在程序指令中使用的逻辑地址格式如下所示。4732310选段符段内偏址16bit32bit把逻辑地址中的选段符装入段寄存器中,把段内偏址通用寄存器中,经过分段机制的转换后成为32位线性地址在保护模式下,x86的段寄存器CS、DS、SS、ES、FS和GS称为选段符寄存器。16位64位段描述符高速缓存寄存器选段符段描述符寄存器访问权限段基址段限CSDSSSESFSGS程序人员可见程序人员不可见,其值由MPU透明装入§3.4选段符与段描述符一.选段符选段符的作用是确定所选段的段描述符在段描述符表中的位置。153210INDEXTIRPL13bit1bit2bitRPL:请求特权级,即访问者的特权级,分为0、1、2、3四级,0级最高,3级最低。Linux中仅使用两个级5别,0级为内核级,3级为用户级。TI:描述符表的种类。0为访问全局描述符表GDT,1为访问局部描述符表LDT。INDEX:索引值。指出段描述符在描述符表中的偏移量。例如,选段符的值为000816TI=0,访问全局描述符表GDTINDEX=1,选择的是GDT[1]RPL=0。访问者的特权为内核级。选段符的值为001716TI=1,访问局部描述符表LDTINDEX=2,选择的是LDT[2]RPL=3。这时访问者的特权为用户级二.段描述符段描述符分为两种:系统段描述符和常规段描述符。常规段描述符:635655524847403932段基址31~24GDRU段限19~16访问权限A段基址23~163116150段基址15~0段限15~076543210PDPLSEC/EDR/WAP(存在位)P=1该段在物理存储器中。DPL(特权级)该段的访问特权:0、1、2、3级。S(描述符种类)S=0系统段描述符,S=1常规段描述符。E(执行位)E=0数据段,E=1代码段。代码段(S=1,E=1)和数据段(S=1,E=0)C/ED(一致性/扩展位)代码段中C=1段可以共享。数据段ED=1段向上扩展。R/W(可读/可写)代码段中R=1代码段可读。数据段中W=1数据段可写入。A(访问位)A=1段已被访问过,A=0段还未被访问。例如,段描述符的访问权限字节为FE16,FE16=111111102。S=1描述常规段的描述符。P=1段已经在物理存储器中DPL=11特权级为3,在Linux中是用户级。E=1代码段。C=1在满足一定条件下段可以执行(共享)。R=1可读。A=0段还未被访问。55~52位是辅助特性位:G粒度,G=1段长度以页面为单位.G=0段长度以字节为单位。D操作长度,D=1为32位代码段,D=0为16位代码段。R系统保留,以备将来扩充使用.U由操作系统程序人员6自行定义和使用二.系统段描述符系统段描述符粒度位G是0,表明系统段以字节为单位。76543210PDPL0类型第4位的S位为0,表明它是一个系统段描述符。例如,某描述符的值为0xc0c39a000000ffff段限段基址31~24辅助字节19~16访问权限段基址23~1611000000110000111001101000000000段基址15~0段限15~000000000000000001111111111111111G=1,段长度以页面(4KB)为单位。D=1,32位代码段。段基址为0xc0000000,该段从线性地址空间3GB处开始。段长度0x40000,即256K页面,每个页面4KB,所以段长度为1G字节访问权限字节:PDPLSEC/EDR/WA10011010P=1,该段在物理存储器。DPL=0,该段的访问特权为内核级。S=1,E=1,该段为常规代码段。C=0,该段不可以执行共享。R=1,该段可读。A=0,该段尚未访问过。在linux中它是内核代码段的描述符§3.580386的分页机制一.x86的分页管理机制内存储器被划分成大小相同的存储块,称为物理页面每个物理页面大小为4K(4,096)字节。内存最大4GB的空间可以分为1M(1,048,496)个页面图物理地址空间(4GB)页1,048,4954KB4KB4KB页1,048,494页1,048,493...页24KB7页14KB4KB页032位线性地址由自行划分成三个域32bit线性地址31222112110页表目录页表页内偏址(10bit)(10bit)(12bit)设置了一个页表目录表,每个表项是4字节其中包含有指向每一个页表起始地址的指针页表目录10位,指向1024个页表页表目录表在物理地址空间的始址由CR3给出。页表10位,指向1024个页面每个表项的长度是4字节,一个页表长4KB二.快表在80386中,快表在处理器芯片的高速缓冲存储器中,称为转换旁视缓冲存储器TLB(TranslationLook-asideBuffers)。在TLB中存放着32个最近使用的页表项(页面地址)。使用TLB的命中率平均可达98%。三.请求式分页存储管理页表目录和页表的表项的长度是32字节,它们具有相同的结构页表目录表的表项311211109876543210页表指针AVL00DA00U/sR/WP页表的表项311211109876543210页面指针AVL00DA00U/sW/RP20位的页表指针是某一个页表起始地址的高20位,该地址的低12位总为0,保证了页表在物理地址空间总是按页面对齐的,即页表总是位于4K页面的地址边界上。同样,20位的页面指针是某一个物理页面起始地址的高20位,该地址的低12位总为0,保证了该指针总是指向一个4K物理页面的起始位置。AVL供操作系统自行定义使用。D修改位D=1表示该页面已被修改过,A访问位A=1表示页表或页面已被访问过,U/S用户/系统访问权限位U/S=1表示用户访问级,U/S=0表示系统访问级。W/R读/写保护位,W/R=1表示允许写入和读取W/R=0表示不允许写入,仅允许读取。P存在位,P=1表示该页表或页面在物理存储器中,
本文标题:第三章x86的虚拟存储系统
链接地址:https://www.777doc.com/doc-29740 .html