一,內核簡介
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的頁式內存管理機制