讀核日記 三

2021-03-31 08:56:30 字數 1593 閱讀 7505

讀核日記(三)

在linux

中每乙個程序都由

task_struct

資料結構來定義

. task_struct

就是我們通常所說的

pcb.

她是對程序控制的唯一手段也是最有效的手段.

當我們呼叫

fork() 時,

系統會為我們產生乙個

task_struct結構.

然後從父程序

,那裡繼承一些資料

,並把新的程序插入到程序樹中, 以待進行程序管理.因此了解task_struct的結構對於我們理解任務

排程(在linux 中任務和程序是同一概念)的關鍵.在進行剖析task_struct的定義之前. 我們先按照

我們的理論推一下它的結構.

1, 程序狀態

,將紀錄程序在等待,執行

,或死鎖

2, 排程資訊

, 由哪個排程函式排程

,怎樣排程等

3, 程序的通訊狀況

4,因為要插入程序樹

,必須有聯絡父子兄弟的指標

, 當然是

task_struct型5,

時間資訊

, 比如計算好執行的時間

, 以便

cpu

分配6,標號,

決定改程序歸屬

7,可以讀寫開啟的一些檔案資訊

8, 程序上下文和核心上下文

9,處理器上下文

10,記憶體資訊

因為每乙個

pcb都是這樣的

, 只有這些結構

, 才能滿足乙個程序的所有要求

.開啟/include/linux/sched.h 找到task_struct 的定義

struct task_struct ;

在分析完

這個結構之後

, 還有很多問題要想

, 也許不能讀

但框架要搞好

.需要向的問題有以下幾個1,在

task_struct

中用的常量在那裡定義呢

, 如最大程序個數

, 最多支援的

cpu 個數,

等等2,

在呼叫fork() 時,

系統是分配一塊記憶體

會是這樣麼

malloc(1,sizeof(struct task_struck))

拷貝一些變數

,還是和服程序公用一部分記憶體

.malloc

函式怎麼實現

(在記憶體管理那一部分

,但此處我認為不能不想

)3,.

對於執行緒來說

, 又如何實現呢

?4,

排程策略函式

schedul()

有幾種形勢

, 時間片輪轉

, 搶占式

,優先順序搶占式

, 多級反饋制

.除了時間片輪轉外都要對程序樹進行遍歷

,(對於實時程序

的fifo機制不用)linux 是怎樣保證了高效呢?如果把最大線成數修改, 效率會不會降低

5,

程序通訊用到的管道

,訊號結構如何

讀核日記 五

讀核日記 五 進來忙得不得了,這時才體會出工作和在學校真的不同.有時候自己想做的事,很難如願.不過我這一段時間沒有太偷懶.對於linux 的386 保護模式,記憶體管理,作了乙個初步的學習.當初學習作業系統課時老覺得理論沒用.如今,真的時間了,才知道理論知識是多麼的缺乏.也許是書到用時方恨少 閒話少...

讀核日記 七

讀核日記 七 linux的記憶體管理機制 1 記憶體管理是乙個作業系統必不可少.並且.非常重要的一環.linux的成功.和它優秀的記憶體管理聯絡非常密切.因為乙個系統的高效性慾穩定性往往決定於它的記憶體管理機制.我項很多人吃過dos下640k 的苦吧.前面我們介紹了386保護模式.從今天起我們將在此...

讀核日記 《Linux核心完全注釋》

linux核心完全注釋 v1.9.5版說明 linux 核心 6.程序間通訊機制 linux 核心 4.記憶體管理 linux 核心 5.linux程序 linux 核心 3.軟體基礎 linux 核心 2.硬體基礎 linux 核心 1.前言 讀核日記 八 linux的記憶體管理機制 2 讀核日記...