一、段机制
内存是计算机系统的关键资源,程序必须被加载到内存中才可以被CPU所执行。程序运行过程中,也要使用内存来记录数据和动态的信息。在一个多任务的系统中,每个任务都需要使用内存资源,因此系统需要有一套机制来隔离不同任务所使用的内存,要使这种隔离即安全又高效,那么硬件一级的支持是必须的。IA-32 CPU提供了多种内存管理机制,这些机制为操作系统实现内存管理功能提供了硬件基础。
CPU的段基址提供了一种手段可以将系统的内存空间划分为一个个较小的受保护区域,其中每个区域称为一个段(Segment)。每个段都有自己的其实地址(基地址)、边界(Limit)和访问权限等属性。实现段机制的一个重要数据结构就是段描述符(Segment descriptor)。
二、段描述符
在保护模式下每个内存都有一个段描述符,这是其他代码访问该段的基本条件。每个段描述符是一个8字节长的数据结构,用来描述一个段的位置、大小、访问权限和状态信息。
S(System:系统)位:S=0代表该描述符是一个系统段,S=1代表该描述符是代码段、数据段或堆栈段
P(Present:存在)位:P=1表示该段已经在内存中,P=0表示该段不在内存中。
DPL(Descriptor Privilege Level)描述符特权级)位:这两位定义了该段的特权级别(0~3)
D/B(Default/Big)位:对于代码段,该位表示这个代码段的默认位数,D=0表示16位代码段,D=1表示32位代码段。对于堆栈数据段,该为称为B标志,B=1表示使用32位的堆栈指针(保存ESP中),B=0表示使用16位堆栈指针(保存在SP中)
Type(段类型)位:A:表示该段是否被访问过(Accessed),A=1表示被访问过。E(Expand)向上向下拓展,W(Write)位,W=0表示该段只可以读,W=1表示可以读写。C位:一致位,
AVL位:供系统软件(操作系统)使用