内存分配方法?
代码段、数据段、堆栈段的大小,是以节为最小单位分配内存区域的16字节=2个字=1节,节的边界地址就是能够被16整除的地址偏移地址(段内地址)是从0000H开始的例子:假设程序分配的内存区从6100H开始,程序长度1020字节,操作数510字节,堆栈段250字节则代码段长度为1024D=400H,数据段长度为512D=200H,堆栈段长度为256D=100H
示意图如下:
段与段之间的关系?
8088/8086 CPU把1MB的存储空间划分成若干逻辑段每个段的起始地址必须是能够被16整除的数逻辑段的最大长度为64KB 1MB的存储空间最多可以分成64K个逻辑段,当每个逻辑段为16KB时段与段之间可以相邻、分离、重叠、部分重叠
12、保护模式
1)保护模式存储器寻址机制
在保护模式下,逻辑地址=选择符 偏移地址
与实模式不同,实模式的段寄存器存放段基地址,而保护模式的段寄存器存放选择符
保护模式下,通过选择描述符表中的描述符,间接地形成段基地址
保护模式的偏移地址最大可以是32位,最大段长可以从16KB扩展到4GB
2)描述符
描述符包括,段在寄存器中的位置,段的长度,访问权限
由基地址、段界限、访问权限、附加字段组成
基地址:指定段的起始地址
段界限:存放该段的最大偏移地址
访问权限:说明该段在系统中的功能和一些控制信息
附加字段:描述该段的一些属性
描述符的内容是由系统自动设置的
由于段寄存器是16位的,描述符是64位的
故将64位的段描述符放按顺序存放形成一个段描述符表,放在内存中
而在段寄存器中实际存放的是要选择的段描述符表的序号,类似于数组中的下标
13、存储器管理机制
1)分段管理机制
①虚拟存储器:在有限的物理存储器上获取更大的使用空间
*虚拟存储器是如何实现存储的?*
在程序执行期间的任意时刻,虚拟存储器系统自动吧程序分成许多小块即程序段
将某个程序段存放到物理存储器中,其他程序段放在磁盘中
当程序要访问到哪个程序段时,就把哪个程序段引导到物理存储器中
②分段管理:将4GB的存储空间分成若干独立的受保护的存储空间块
每个应用程序可以使用这些存储空间块
2)分页管理机制
①线性地址空间:每个进程都有相同大小的4GB线性空间
用分段管理机制实现虚拟地址空间到线性地址空间的映射,实现把二维的
虚拟地址转换为一维的线性地址
②分页存储管理:把线性地址空间和物理地址空间分别划分为大小相同的块,每块长为4KB
这样的块称为页,通过分页管理机制实现线性地址空间到物理地址空间的
映射,实现线性地址到物理地址的转换