xzp 2007-11-8 19:09
32位微机的内存存管理仍然采用“分段”的管理模式,存储器的逻辑地址同样由段地址和偏移量两部分组成。32位微机的内存管理与16位微机的有相同之处,也有不同之处,因为它提供了两种不同工作方式:实方式和保护方式。
1、物理地址的计算方式
实方式:段地址仍然是16的倍数,每个段的最大容量仍为64K。段寄存器的值是段的起始地址,存储单元的物理地址仍为段寄存器的值乘16,再加上段内偏移量。在此方式下,32位微机的内存管理与16位微机是相一致的。
保护方式:段地址可以长达32位,其值可以不是16的倍数,每个段的最大容量可达4G。段寄存器的值是表示段地址的“选择器”(Selector),用该“选择器”可从内存中得到一个32位的段地址,存储单元的物理地址就是该段地址加上段内偏移量,这与16位微机的物理地址计算完全不同。
2、段寄存器的引用
32位CPU内有6个段寄存器,程序在某一时刻可访问6个不同的段。其段寄存器的值在不同的方式下具有不同的含义:
(1)、在实方式下,段寄存器的值就是段地址;
(2)、在保护方式下,段寄存器的值不是段地址,是段地址的“选择器”。它间接指出一个32位的段地址。
下面分别说明各段寄存器的用法和作用。
代码段寄存器:32位微机在取指令时,系统自动引用CS和EIP来取出下条指令。在实方式下,由于段的最大容量不超过64K,所以,EIP的高16位全为0,其效果相当于16位CPU中的IP。
堆栈段寄存器:32位微机在访问堆栈段时,总是引用堆栈段寄存器SS。但在不同的方式下其堆栈指针有所不同:
1)、在实方式下,32位微机把ESP的低16位SP作为指向堆栈的指针,所以,我们可以认为栈顶单元是由SS和SP来指定的。这就与16位微机访问栈顶单元的方法相一致;
2)、在保护方式下,堆栈指针可用32位的ESP和16位的SP。
数据段寄存器:DS是主要的数据段寄存器。通常情况下,它是除访问堆栈以外数据时的默认段寄存器。在某些串操作中,其目的操作数的段寄存器被指定为ES是另一个例外。
另外,段寄存器CS、SS、ES、FS和GS也都可以作为访问数据时的段寄存器,但它们必须用段超越前缀的方式在指令中直接写出。用这种方式会增加指令的长度,指令的执行时间也有所延长。
一般来说,程序频繁访问的数据段用DS来指向,不太经常访问的数据段可用ES、FS和GS等来指向。
3、存储单元的内容
32位微机存储单元内容的存储格式与16位微机的完全一致,也都采用“高高低低”的原则来存放数据。
apple 2007-11-9 15:11
存储器空间组织问题
存储器作为计算机系统的重要资源,为多道程序所共享,是程序竞争的对象。因此需要对存储空间进行有效的组织管理和分配。首先让我们认识一下他要解决的问题:
1.用户编写程序时为了方便用的是相对地址,它是从零开始的一组连续的地址,称为逻辑地址。存取器提供给程序使用的是绝对地址(物理地址)。当程序放入内存时,必须把程序中的逻辑地址转换成实际的地址物理地址。
2.为了解决多道程序的运行,必须把各个作业分配在适当的空间上。
3.在各个程序的执行过程中,保证程序之间不会互相干扰和破坏,另外保证用户程序能共享系统或者用户的程序和数据。
4.另外还应该满足各个程序对存储空间的要求,由于内存资源比较紧张,为了充分利用空间,要求系统根据程序的运行的情况合理的利用内存,以便使得当前需要的程序和数据放入内存,其余部分暂时放在外存。
根据以上的四大要求,我们可以得到存储器管理必须具备的四大功能:
1地址映射
2内存分配
3存储保护和共享
4存储器扩充
其中最重要的是解决如何划分地址空间和如何实现逻辑地址到物理地址的映射问题,不同的方法形成了不同的存储管理技术。
其中后期陆续出现的三种方式主要是:
1. 界地址存储管理 它是通过分区分配和重定位相结合方法实现。
2. 分页存储管理 页、表、块在分页存储中是比较主要的概念,在比较好用的请求分页存储管理中:必须有虚拟存储器的概念。
3. 分段存储管理 段是一个可动态增长的空间,对应一个独立的逻辑信息单位,它是一个二维空间。
甚至为了折衷,出现了段页式存储管理方式。
目前较常用的:例如linux和psoc等采用的是分页存储管理方式,而有些系统采用了分段方式。
未完待续。。。。。。。