Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
x86-3-段式管理(segmentation)
3.1 段式管理概述:
从8086CPU开始,为了让程序在内存中能自由浮动而又不影响它的正常执行,CPU将内存划分成逻辑上的段来给程序使用。
x86继续沿用了这一模式,但是保护模式将其管理起来,进行保护。而段式管理正是用来对段进行管理的。
在保护模式下,会将每个段的信息先进行登记。
和段有关的信息需要8 个字节来描述,所以称为段描述符 (Segment Descriptor),每个段都需要一个描述符。为了存放这些段描述符,就在内存中开辟了一段空间,在这段空间中所有的段描述符以数组的形式存放在一起,这就构成了一个段描述表(Descriptor Table)。最主要的描述符表是全局描述符表(Global Descriptor Table GDT),这个全局段描述符表在任何时刻都可以使用,在进入保护模式前必须要先定义全局描述表的内容才行。
然而段描述符由八个字节来组成,用起来太大了而且不方便,于是保护模式又有了段选择子(Segment Selector),段选择子作为一种结构体,通过对段选择子的解析可以得到段描述符的地址,然后就可以方便的进行读取了。
注:这些专有名词会在接下来讲到。
可以看到段式管理的主要内容其实只有两个部分:
1 内存管理: 为地址的转换提供基础平台。CPU在通过地址访问内存的时候会自动通过地址转换的基础平台进行转换。在段式内存管理中,分段机制的内存管理主要是提供从逻辑地址(logical address)转化为CPU的线性地址(Linear address)的基础平台。
2 保护措施: 控制访问行为,避免资源被随意访问。
而无论是段式管理还是页式管理,都包含这两方面。
3.2 段式管理使用的资源:
我们知道保护模式是用来保护计算机的一些资源,在段式管理下会用到以下硬件资源:
3.2.1 硬件资源:
主要包含:
CR0和CR4
GDTR,LDTR,IDTR,TR
段选择子寄存器(Segment selector register):ES,CS,SS,DS,FS和GS寄存器。
3.2.2 系统数据结构:
主要包含:
GDT,LDT,IDT。
TSS段。
段描述符(Segment Descriptor)。
段选择子(Selector)。
3.2.2.1 段选择子(segment selector):
segment selector数据结构图是十六的,它是一个段的标识符:
字段 | 描述 |
---|---|
RPL(Requested Privilege Level) | 表示请求者所使用的权限级别,也就是特权级,只不过是请求者所使用的特权级。 |
TI(Table Indicator) | 描述符索引表,其中为0表示GDT也就是全局描述符表,为1表示LDT(local Descriptor Table)局部描述符表。 |
Index | 表示描述符表中的偏移地址,描述符表是一个数组。通过数组+下标的形式就很容易得到想要的内容了。 |
3.2.2.2 全局段描述表(Global Descriptor Table):
在x86中有三类描述符表,GDT(Global Descriptor Table),LDT(Local Descriptor Table)和IDT(Interrupt Descriptor Table)。
这些段描述符表由段描述符寄存器(Descriptor Table Register&