虚拟存储器的都有哪些种类?
发布时间:2021-10-22 11:41 所谓虚拟存储器(Virtual Memory),就是采用一定的方法将一定的外存容量模拟成内存,同时对程序进出内存的方式进行管理,从而得到一个比实际内存容量大得多的内存空间,使得程序的运行不受内存大小的限制。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
一、页式虚拟存储器
在页式虚拟存储系统中,将程序按统一的大小划分成多个页,同时也将虚拟存储器划分为同样大小的页,其中虚拟空间的页称为虚页(逻辑页),而主存空间的页称为实页(物理页),并对这些页按地址从低到高的顺序编号。
在编程时,程序的虚地址由高位字段的虚页号和低位字段的页内地址两部分组成,虚页号标识页。虚地址到实地址之间的变换是由页表来实现的。页表是一张存放在主存中的虚页号和实页号的对照表,记录着程序的虚页调入主存时被安排在主存中的位置。若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。
页表中的每一行记录了与某个虚页对应的若干信息,包括虚页号、装入位和实页号等。页表基址寄存器和虚页号拼接成页表索引地址。根据这个索引地址可读到一个页表信息字,然后检测页表信息字中装入位的状态。若装入位为1,表示该页面已在主存中,将对应的实页号与虚地址中的页内地址相拼接就得到了完整的实地址;若装入位为0,表示该页面不在主存中,于是要启动I/O系统,把该页从辅存中调入主存后再供CPU使用,若主存已满,还需要使用替换算法替换页。如图所示给出了页式虚拟存储器的虚-实地址的变换过程。
页式虚拟存储器虽然能实现虚拟存储,但它还存在一些不足。
(1)由于采用定长的页,虽然建立页表方便,页的调入也容易实现。但由于程序不可能正好是页面的整倍数,那么最后一页的零头将无法利用而造成空间浪费。
(2)由于页不是逻辑上独立的实体,这给程序的处理、保护和共享等带来了麻烦。
二、段式虚拟存储器
在段式虚拟存储器系统中,将程序按其逻辑结构划分为段,各个段的长度因程序而异。段式虚拟存储器借助于段表来实现虚地址与实地址的转换。段表中每一行记录了某个段对应的若干信息,包括段号、装入位、段起点和段长等。装入位为1,表示该段已调入主存;装入位为0,则表示该段不在主存中。段表其实本身也是一个段,可以存放在辅存中,但一般存放在主存中。
在段式虚拟存储器系统中,虚地址由段号和段内地址两部分组成,如图3-18所示给出了段式虚拟存储器的虚-实地址的变换过程。
由于段式虚拟存储器的段具有逻辑独立性,因此它易于程序的处理、保护和共享等操作,但是,因为段的长度参差不齐,给主存空间分配带来了麻烦,同时很可能也会带来一定的空间浪费。
三、段页式虚拟存储器
段页式虚拟存储器是对段式、页式虚拟存储器的综合,它先将程序按其逻辑结构分段,再将每段划分为若干大小相等的页,同时将主存空间划分为同样大小的块。
因为段页式存储管理对逻辑地址进行了两次划分,第一次将逻辑地址划分为若干段,第二次将每个段划分为若干页。因此,要对内存正常寻址,不仅要知道将要访问的地址属于哪个段,也要知道该地址属于该段的哪个页。逻辑页与物理块一一对应,所以需要页表来记录各页对应的块号,且因为每个段都分成了很多页,所以每个段都需要一个页表。同时,作业分成了很多段,为了统一管理,系统需要知道每个段的分页情况,所以又要设置一个段表来记录每个段所对应的页表。
作业将要执行其中的某个语句时,根据其地址计算出段号、页号和页内地址。首先根据段号查找段表,得到该段的页表的起始地址,然后查找页表,得到该页对应的块号,最后根据块的大小和页内地址计算出该语句的内存地址。