Windows98虚拟存储技术 (1)Intel80386提供的存储管理方式 在Inte180386芯片中,包含了存储管理部件 MMU(Memory Management Unit),由它来提供实现虚拟存储器所需的硬件支持,即请求段表(页表)机制、缺段(页)机构、地址变换机构。其地址变换过程分两步进行,第一步由分段部件将逻辑地址转换为线性地址,并将该地址送分页部件;第二步由分页部件将线性地址变换为物理地址。如果仅用分段存储管理方式,其分页部件将被旁路(失效),此时分段部件送出的线性地址便是物理地址,直接送内存地址寄存器。为了提高分段和分页的地址变换速度,在分段和分页部件中,都配置了高速缓冲存储器,作为快速段表和页表。 80386既支持分段,也支持分页,可根据需要构成以下四种存储管理方式: 1.不分段也不分页的存储管理方式。
Windows98虚拟存储技术-1 2.分页不分段存储管理方式(UNIX/386系统)。 3.分段不分页存储管理方式。 4.分段分页存储管理方式。 (2)分段存储管理 1.段描述符表 80386为每个用户任务所配置的段表,称为局部描述符表LDT(Local Descriptor Table)。其中,每个表项为一个段的描述符,共8个字节长。此外,还配置了一张对系统任务都有用的全局描述符表GDT(Global Descriptor Table)。在任一时刻 GDT和某一个LDT是可被访问的,在分段部件中,还配置了全局描述符表寄存器GDTR和局部描述符表寄存器LDTR。它们都是6个字节长,分别指向当前的GDT和LDT。两个描述符的格式基本上相同。如图所示。 各字段说明如下:
Windows98虚拟存储技术-2 段的基址:32位,定义了段在4GB线性地址空间中的始址。 段界限值:规定了段的最大长度。其单位可以是字节或页(4KB),这取决于粒度单位G。当G为1时,表示段长是以页为单位;当G为0时,表示段长以字节为单位。由于段长为20位,故当 G为1时,最大段长为4 GB。 31 23 19 1615 12 8 7 0 段的基址15……0 段界限值15……0 段基址 G D 0 0 界限值 P DPL S TYPE A 段基址 31… 24 19… 16 23… 16
Windows98虚拟存储技术-3 2.分段的地址变换机构 段寄存器 在80386处理器中,共有6个段寄存器。它们是:代码段寄存器CS、栈段寄存器SS、四个数据段寄存器 DS、ES、FS和GS。段寄存器和8086一样仍为16位。在实方式时,段中存放段的基址的高16位。因此,将它左移4位后与偏移量相加,便形成20位的物理地址。但在保护方式下,16位的段寄存器已不足以用来存放32位的段的基址,所以在段寄存器中所存放的是指向描述符表中某个描述符的指针。此时,段寄存器中的TI(l位)用来指示描述符表的类型,即或者指示选择全局描述符表,或者指示选择局部描述符表。RPL(2位)为请求者的特权级。描述符表项索引Index(13位)可用来在8K个描述符中任选其一。 虚地址结构和地址变换
Windows98虚拟存储技术-4 在80386中的虚地址结构如下: 13位 1位 2位 32位 13位 1位 2位 32位 其中,TI为描述符表类型;RPL是请求者特权级;S为段号Index项,用来选择描述符。其前16位实际上是放在段寄存器中的。 分段部件中,是将逻辑地址变换为线性地址,在进行地址变换时,首先是从相应的段寄存器中取得段号S,即获得指向段描述符表的指针Index,如果此时TI=0,则从GDT中选择一描述符;否则(TI=1),从 LDT中选择一描述符。从所获得的描述符中可得到段的基址,然后将段的基址与偏移量相加,得到线性地址。对于只分段、不分页的存储管理方式,此线性地址就是内存的物理地址;若是既分段、又分页的存储管理方式,则还须将此线性地址送分页部件,再形成物理地址。 段号S TI RPL 偏移量
外部页表寄存器 CS代码段寄存器 GDTR全局描述符寄存器 LPTR局部描述寄存器 (索引) 段号S TI RPT 偏移量 DS数据段寄存器 + 8B 基地址 限长 其它字段 。 页目录号P1 外部页内地址P2 页内位移D 外部页表寄存器 (索引) 段号S TI RPT 偏移量 CS代码段寄存器 DS数据段寄存器 GDTR全局描述符寄存器 LPTR局部描述寄存器
Windows98虚拟存储技术-5 (3)Windows98系统地址空间的划分 Intel386以后的CPU有了32位或64位的内存寻址范围,所以系统的地址空间可达4GB或更大。在 Windows98系统提供了4GB虚拟的32位的地址空间,给每个进程分配2GB的专用地址空间,而把剩余的2GB地址空间分成系统空间(1GB)和用于所有的共享内存区域的单个共享的用户空间(1GB)。 这个1GB的共享区域对于用户态是可写的,所以任何Win32应用程序都可以写共享内存区和映象文件(映象文件是指把驻留在盘上的文件看成是虚拟主存的一部分)。MS-DOS应用程序和Win16应用程序也都在这个共享的空间中。Windows NT将共享内存区域放在专用进程地址空间内。 每一个基于 MS-DOS的程序和32位 Windows程序都有各自的4GB虚拟地址空间。16位Windows应用程序共享单个的4GB地址空间。4GB的地址空间分为两部分:2GB用于用户应用程序,2GB用于操作系统组件。程序以如下方式使用虚拟地址空间里的地址:
Windows98虚拟存储技术-6 0~1MB:基于MS-DOS的程序就像真的在MS-DOS环境中运行那样使用这些地址,所有其它程序将忽略这些地址。这些地址仍可为程序加载的实模式设备驱动程序所使用。 1~4MB:由于Windows NT在这些地址空间上加载,为了维护与 NT的兼容性, Windows98与32位程序也不使用这一段地址空间。但由于向下兼容的缘故,16位程序使用这些地址。 4MB~2GB:WIN32应用程序使用。 2GB~3GB:由DLL(动态链接库)和其它共享组件使用。 3GB~4CB:低层的内存管理、文件系统、驱动程序(VxD)使用。这些地址一般是 Ring0组件使用。
Windows98虚拟存储技术-7 (4)VMM——虚拟存储管理程序 Windows98用虚拟存储管理程序(Virtual Memory Manager)来实现请求调页的虚拟存储技术,把系统4GB的虚拟地址空间映射到机器的物理内存上(32MB或64MB)。 Windows98的虚拟存储管理程序通过两个内存管理进程向应用程序提供虚拟内存:一个是页面调度(paging)——负责在物理内存和硬盘的交换文件之间交换数据;另一个是地址转换——负责物理地址和虚拟地址空间的地址或映象文件I/O之间的转换。 VMM将物理内存分成一个个大小为4KB页面(或称为块)。将虚拟地址空间(应用程序所在的空间)也划分成4KB大小的页。当程序要运行时,一部分页面被装入物理内存,另一部分则放在硬盘的虚似内存交换文件(或称为页交换文件)中。交换文件是指位于硬盘上用来模拟物理内存的文件,它由VMM专门用来保存内存页面,作为虚拟内存空间使用。
Windows98虚拟存储技术-8 当程序访问那些不在内存中的页面时,CPU会产生页面出错(Page Fault),VMM便会从交换文件中将相应的页面换入内存。 Windows98交换文件(Win386.swp)是动态的,它可根据系统内存的负荷和可利用的磁盘空间大小而增大或减小。动态交换文件可以对硬盘进行有效的利用,因为它可占用硬盘的一个已成碎片的区域,而不引起重大的性能下降。注意:保证交换文件高质量运行的一条最好的途径是:确保包含交换文件的磁盘有足够的可利用的空间,以便交换文件的大小可以根据需要增大或减小。一般情况下,可以让Windows98自动管理虚拟内存。如果用户想要把交换文件设置在特定的硬盘上,或者由于磁盘空间有限想把交换文件的大小限制在一定范围,就要修改设置。但是在设置时,特别要注意:交换文件太小会严重影响系统的性能。
Windows98虚拟存储技术-9 交换文件(Win386.Swp)存放在C:\Window目录下。用户不应把交换文件安置在压缩硬盘上,因为这样做将影响其性能。交换文件的运行速度应当尽可能地快,应当定期对硬盘空间进行整理,以使交换文件能使用连续的存储区,这也有助于提高交换文件访问的速度。在Windows NT中,交换文件可跨越多个驱动器,其名为 Pagefile.sys。 (5)页面置换算法 Windows95/98虚拟内存管理器置换算法如下: 1。调页算法:当某个线程试图访问一无效页面而产生页面出错(Page Fault)时,VMM采用群集技术将其邻近的页面与页面目录一起装入内存的空闲块中。所谓群集技术是指当需要调一页时,将包括该页在内的一个页面集合取入内存的空闲块中,这样可以减小页面出错和磁盘操作的次数。
Windows98虚拟存储技术-10 2。淘汰算法:如果内存中没有空闲块,VMM会使用淘汰算法将页面从内存移到交换文件中。每个进程在内存中都有一组有效的页面——工作集,以保证进程的有效运行。为简化起见,VMM使用先进先出的算法(FIFO)。即当需要进行页面淘汰时,VMM将工作页面集中存在时间最长的页面从内存中移到交换文件中,为新页面腾出空间。由于淘汰页是当前进程的工作页面集,所以可以保证其他进程的页面不会被另外的进程所替代。 (6)页表结构 Windows95/98/NT支持的虚拟地址空间达4GB,都采用二级页表机构来管理虚拟存储空间。前已讲过。
Windows98虚拟存储技术-11 (7)映象文件I/O 当应用程序将要装入的文件大小比RAM和交换文件合起来还要大时,VMM的映象文件I/O服务功能可以将虚拟内存地址映射到一个大文件中,并通知应用程序此文件可用,然后仅将应用程序实际需要访问的那部分装入内存。由于整个大文件中只有一部分装入内存(RAM或交换文件),极大地减少了文件装入时间,提高了系统资源的使用。这对于那些经常需要访问巨型文件的数据库应用程序来说是一个非常有用的服务。 (8)页面锁定 对有特殊要求的应用程序和系统核心的页面,VMM可授予进程特殊权限,以将选定的虚拟内存页面锁定在工作页面集中,这样关键页面在使用过程中便不会被换出内存。