程序結構
linux0.11中的每個程序都有如下的結構:
在gdt中占有兩項,一項是tss段描述符,一項是ldt段描述符。
在task陣列中占有一項,指向一頁物理記憶體,該物理記憶體低端是程序控制塊task_struct(裡面包括tss段和ldt段),其餘部分是程序的核心態堆疊。
在頁目錄表和頁表中設定有相關項。
linux0.11中,最多只有64個程序,task陣列大小也定義成了64,每個程序與乙個task陣列中的項一一對應。雖然gdt中有256項,但是並不是都用到。第乙個gdt項保留不用,核心用2個項,然後系統為每個程序保留2項。這樣乙個程序與2個gdt項一一對應。也就是linux0.11中task陣列和gdt的分配是定死的,比如乙個程序的任務陣列項好為nr,即它的程序控制塊由task[nr]指向,那麼它的tss描述符和ldt描述符分別位於gdtr+3*8+nr*16和gdtr+3*8+nr*16+8處。
linux0.11記憶體實體地址0處開始放著一頁頁目錄表和四頁頁表。這乙個頁目錄表是所有程序共享的。其後的四頁頁表正好對映16m物理記憶體,是核心和程序0的頁表。以後建立程序時頁表需要從主記憶體區申請,而頁目錄項直接從頁目錄表中取。這樣程序和頁目錄表頁存在這一一對應關係,任務號為nr的程序,對應頁目錄的第nr*16~(nr+1)*16一共16個目錄項。這樣4g的線性空間由64個程序共享,每個程序分到64m。
三個結構的一一對應關係如圖所示
Linux0 11核心 記憶體組織和程序結構
程序結構 linux0.11中的每個程序都有如下的結構 在gdt中占有兩項,一項是tss段描述符,一項是ldt段描述符。在task陣列中占有一項,指向一頁物理記憶體,該物理記憶體低端是程序控制塊task struct 裡面包括tss段和ldt段 其餘部分是程序的核心態堆疊。在頁目錄表和頁表中設定有相...
Linux0 11核心 記憶體組織和程序結構
程序結構 linux0.11中的每個程序都有如下的結構 在gdt中占有兩項,一項是tss段描述符,一項是ldt段描述符。在task陣列中占有一項,指向一頁物理記憶體,該物理記憶體低端是程序控制塊task struct 裡面包括tss段和ldt段 其餘部分是程序的核心態堆疊。在頁目錄表和頁表中設定有相...
Linux 0 11 核心筆記
1 任務0的堆疊問題 一直不明白schedule.c裡的task union的stack和user stack是什麼關係,head.s裡就設定了esp指向user stack,卻一直沒有用到task union,直到看到init task才明白,從進入保護模式到跳轉進使用者態都是用的user sta...