讀核日記(三)
在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 讀核日記...