微型计算机的存储管理
出处:按学科分类—工业技术 企业管理出版社《工程师手册》第745页(3644字)
在微型计算机中,存储管理部件使之具有虚拟存储的功能。虚拟存储是指程序设计人员可使用超过实际的物理地址空间的逻辑地址空间(或称虚拟地址空间)。也就是说,CPU通过存储管理部件(MMU)把海量存储设备(外存)当作内存使用。具体地说,MMU以段或页为单位,将逻辑地址空间划分为若干个段或页。逻辑地址通过段式或页式地址转换机构产生物理地址。而MMU可使内存中的段或页与海量存储器进行交换。操作系统可将内存中用过的段或页调出,把海量存储器中有用的代码或数据调入。从程序设计人员看来,其使用的空间是远远大于物理地址空间的逻辑地址空间。
1.8086的存储器的段结构
8086是16位的微处理器,它具有20位的地址总线,可访问1M字节的存储空间。8086的存储器采用段结构,1M字节的存储空间分为代码段、数据段、堆栈段和附加段,每段的长度为64k字节。段的起始地址叫做段基址,段基址的高16位地址存放在段寄存器CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器)中,其内容可由软件设置或修改。段与段之间可以是连续的、分开的、部分重叠的或完全重叠的。当CPU通过段寄存器访问存储器时,要把逻辑地址转换为物理地址。逻辑地址由16位的段寄存器和16位的偏移值来表示。物理地址是指1M字节存储空间的某一地址。其转换关系如下:
物理地址=段寄存器内容×16+16位的偏移值
只要将段寄存器的内容左移4位(即乘16)后与偏移值相加,即可产生20位的物理地址。
2.80286的存储管理(段式管理)
80286是16位的微处理器,具有存储器管理和保护功能,它可在实地址方式和保护虚拟地址方式下工作。80286的地址总线为24位。
在实地址方式下,可把80286作为高速的8086来使用。因此,80286的实地址方式也称为8086方式。在此方式下,处理器自动产生20位的物理地址(高4位地址A20~A23被忽略),其地址产生过程与8086完全一样。其可寻址的存储空间也和8086相同,只有1M字节。
在保护虚拟地址方式(或称保护方式,或称286方式)下,80286具有16M字节的存储器寻址能力,通过片内的存储管理部件(MMU)可提供1GB的虚拟存储器空间。
实地址方式和保护方式的控制由MSW(机器状态字)的PE位决定。PE=0,80286在实地址方式下工作;PE=1,80286在保护方式下工作。
在保护方式下,逻辑地址包含了一个16位的选择符(存放在段寄存器中)和一个16位的偏移值,共同组成32位的指针。其中,选择符不再是段基址的高16位,而是存放在存储器中的描述符表的入口地址。从该表中可查到段的24位基地址,然后与16位的偏移值相加,形成24位的物理地址。
(1)描述符 在保护方式下,80286工作在多任务环境,可有多个任务同时运行。也就是说,整个存储器可放若干个代码段、数据段和堆栈段,对应每个存储段都有一个相应24位的基地址,将这些基地址和有关信息组成一张描述符表,存放在存储器中、描述符由8字节组成,包含有基地址(位0~23)、访问权限字节和段限字节。权限字节和段限字节用于实现存储器的保护功能。
操作系统为了便于管理,在内存中设置了两张描述符表,即全局描述符表和局部描述符表。全局描述符表供所有任务使用,局部描述符表供某道程序专用。
(2)分段选择符 80286的段寄存器的内容称为分段选择符。分段选择符中位3~15为指向描述符表的入口地址的指针。在多任务操作系统中,每个任务都对应若干个段描述符,操作系统在调入某个任务的同时,根据进程调度和内存管理原则,设置相应的段描述符和段寄存器,并把段描述符写入内存的描述符表中。因此,在程序运行过程中,不能修改段寄存器的内容。
(3)段描述符Cache寄存器 它是实地址方式下段寄存器的扩展。每个段寄存器都配有一个相对应的段描述符Cache寄存器。每当把选择符存放到段寄存器中,由该选择符所决定的段描述符就自动地存放到相应的Cache寄存器中。CPU对存储器中某段的访问,不必访问内存中描述符表中的段描述符,只需访问相应的Cache寄存器就可得到该段的段描述符。这样,地址转换过程只在CPU芯片内部进行。
3.80386的存储管理(段/页式管理)
80386是32位的微处理器,其存储管理部件(MMU)采用了段、页管理方式,既有分段方式,又有分页方式。分段方式是根据程序模块的大小,把逻辑地址空间分成很多段,段的长度可变,互相可以重叠。每段的最大长度可达4GB(=232,偏移值为32位)。这样就可较为方便地对可变长度的代码和数据存储块提供可保护性和模块化结构。在分页方式中,页面长度是固定的,且不能很大。页面较小可体现较大的灵活性。80386中,页面长度定为4kB(=1212),这样每段可分为多个页面。页面的作用是把CPU的地址空间映象到磁盘,以便进行内存(以页面为单位)与磁盘等海量存储器之间的交换。因此,可以说,分段用来组织其逻辑地址空间的结构,分页则是用来管理其物理存储器的。
段/页式存储管理方案有独特的优点。程序设计人员可根据需要作以下四种选择:不分段不分页存储、不分段但分页存储、分段但不分页存储、又分段又分页存储。
(1)分段方式 80386的逻辑地址包含有16位的分段选择符和32位的段内偏移值,一起组成48位的指针。分段选择符的指针可指向分段描述符表中的分段描述符的入口地址,由分段选择符找出分段描述符,其中的基地址(位0~31)与段内偏移值相加,产生32位的线性地址。若控制寄存器TP0的位31PG=0,分页方式被禁止,该线性地址即为物理地址。若PG=1,则允许分页方式,线性地址要转换为物理地址。
80386内有分段描述符Cache寄存器。与段寄存器相对应,每当分段选择符存入到段寄存器中,则与该选择符相对应的段描述符就自动地存入到相关的Cache寄存器中。当CPU对存储器中的某段访问时,可直接从Cache寄存器中得到相应的段描述符,从而加快了地址转换。
在分段方式中,段选择符可寻址214=16k个段,而每段可有232=4GB的寻址能力。所以,80386的全部逻辑地址空间可达246=64TB。
(2)分页方式 80386的分页管理是标准的二级查表机构,它由目录表和页表组成。在分段方式中产生的32位线性地址分成左中右3个部分。线性地址左部的高10位用来对具有1024个入口的目录表进行寻址以获得页表地址。线性地址中部的中间10位与从目录表中取得的页表地址相加而产生所要求的页表地址的入口,从这个入口就可查到相应的页表属性(其低12位用于操作系统管理和页面保护,其高20位是页地址的位12~31,页地址的位0~11均为0)。线性地址右部的低12位是偏移值,它与页地址相加就得到实际的物理地址。
在分页方式中,为省掉两次相表访问内存(两个表都存放在内存中)的时间,提高分页地址转换的效率,在80386内部增加了高速缓存Cache,称为转换检测缓存(TLB)。在TLB中,存放有32个最近使用的页面信息(目录表和页表)。处理器把线性地址的目录和页表中的相应值和TLB的所有入口进行比较,若要找的页面信息在TLB中,就可利用这些信息直接对物理存储器寻址。TLB的命中率约为98%。
在分页方面的两级表格中,目录表可寻址1024个页表,而页表又可寻址1024个页面,1个页面的长度为4096这节。因此,它可寻址1M页面,4GB的物理地址空间。