一,内核简介
1,在安装好的Linux系统中,内核的源代码位于/usr/src/linux。
2的10次方就是1K(1024);16位CPU的地址空间是64K。
X86结构的80386是32位CPU
段描述结构伪代码:
typedef struct{
unsigned int base24_31:8; /*基地址的高8位*/
unsigned int g:1; /*表段的长度单位,0表示字节,1表示4KB*/
unsigned int d_b:1; /*默认存储大小,0=16位,1=32位*/
unsigned int unused:1; /*固定设置为0*/
unsigned int avl:1; /*可供系统软件使用*/
unsigned int seg_limit_16_19:4; /*段长度的最高4位*/
unsigned int p:1; /*0表示该段的内容不在内存中*/
unsigned int dpl:2; /*访问本段所需权限*/
unsigned int s:1; /*描述项类型,1表示系统,0表示代码或数据*/
unsigned int type:4; /*段的类型,与上面的S标志位一起使用*/
unsigned int base_0_23:24; /*基地址的低24位*/
unsigned int seg_limit_0_15:16; /*段长度的低16位*/
}段描述项;
- 80386并不只是划分出系统状态和用户状态,而是划分成四个特权级别,0~3,0是最高级。
16位段寄存器的高13位用作下标来访问段描述表:
typedef struct { unsigned short seg_idx:13; /*13位的段描述项下标*/ unsigned short ti:1; /*段描述表指示位,0表示GDT,1表示LDT*/ unsigned short rpl:2; /*要求的优先级别*/ }段寄存器;
- LDT(局部段描述表),GDT(全局段描述表);
- 当改变一个段寄存器的内容时,CPU会加以检查,以确保该段程序的当前执行权限和段寄存器所指定要求的权限均不低于所要访问的那一段内存的权限dpl。
i386的页式内存管理机制