- 论坛徽章:
- 0
|
请教一下各位,
在《IA-32 Intel体系架构软件开发手册——卷3》(No:245472)中第3节 protected mode memory management 中的 3.2 Using Segments,提到的有关“basic flat model”和“protected flat model”该如何理解?
-------------------------------------------
本人的理解如下:
-------------------------------------------
一、basic flat model
32位保护模式CPU可定址的线性地址空间是:0~4GB。在 basic flat model 下,所有的段描述符都设置成段基址为0,段界限为4GB。也就是所有的段都共用同一个4GB的线性地址空间。
这里就有个疑问,假设有3个段,代码段、数据段和栈段。
1、在实模式下,我们可以用:
mov ax, cs
mov ds, ax
mov ss, ax
mov sp, 100h
....
这里3个段可以共用一段连续的线性地址空间,这是因为数据段是从上往下生长,栈段是从下往生长,而该汇编文件编译后代码段和数据段的起始地址是不同的,数据段会“自动靠前一些”(印象中是这样的),因此不会存在数据重叠或覆盖。
2、在保护模式下的basic flat model
代码段、数据段、栈段的描述符都设置成段基址为0,段界限为4GB,栈段还好理解,关键是代码段和数据段里面的信息就不会重叠覆盖吗?
二、protected flat model
32位保护模式CPU可定址的线性地址空间是:0~4GB。在 protected flat model下,所有的段描述符都设置成不同的段基址为和段界限(段界限可以相同,所有的段界限的总和应<=4GB),从而保证所有的段都存在于一个4GB的线性地址空间内,但各自由于起始地址的不同互不干扰。是这样理解吗?
[ 本帖最后由 ts0612 于 2009-7-12 02:06 编辑 ] |
|