第一次作業 深入原始碼分析程序模型

2021-09-25 03:36:35 字數 2517 閱讀 9767

程序:這是對正在執行程式的乙個抽象。作業系統的其它所有內容都是圍繞著程序的概念展開的。

乙個程序就是乙個正在執行程式的例項。

1.程序數

在sched.h中,有如下語句: 1

#define nr_tasks 64

該語句定義了系統中的最多工(程序)數,即:在同一瞬間,系統中最多可有64個程序。

2. 程序識別符號

1long pid;

1

struct

task_struct ;

3. 程序可能的狀態的定義

1

//這裡定義了程序執行時可能處於的狀態

2#define task_running    0 //

程序正在執行或已準備就緒

3#define task_interruptible   1 //

程序處於可中斷等待狀態

4#define task_uninterruptible 2 //

程序處於不可中斷等待狀態,主要用於i/o操作等待

5#define task_zombie 3 //

程序處於僵死狀態,已經停止執行,但父程序還沒發訊號。

6#define task_stopped 4 //

程序已停止

執行態:該時刻程序實際占有cpu。

就緒態:可執行,但因為其它程序正在執行而暫時停止。

阻塞態:除非某種外部時間發生,否則程序不能執行。

1. 程序因為等待輸入而被阻止。

2. 排程程式選擇另乙個程序。

3. 排程程式選擇這個程序。

4. 出現有效輸入。

排程:當系統中就緒的程序數大於系統中可用的cpu數時,可用的cpu必須選擇下乙個要執行的程序。在作業系統中,完成選擇工作的這一部分稱為排程程式(scheduler),該程式使用的演算法稱為排程演算法(scheduling algorithm)

在linux 0.12中採用基於優先順序排隊的排程策略。

schedule()函式首先掃瞄任務陣列。通過比較每個就緒態(task running) 任務的執行時間遞減滴答計數counter 的值,來確定當前哪個程序執行的時間最少。哪乙個的值大,就表示執行時間還不長,於是就選中該程序,並使用任務切換巨集函式切換到該程序執行。 

原始碼:

1

void schedule(void)2

15if ((*p)->alarm && (*p)->alarm

19if (((*p)->signal & ~(_blockable & (*p)->blocked)) &&

20 (*p)->state==task_interruptible)

21 (*p)->state=task_running;22}

2324

/*this is the scheduler proper:

*/25

//-------------------這是排程程式的主要部分-------------------

26while (1

) 37

if (c) break;38

for(p = &last_task ; p > &first_task ; --p)

39if (*p)

40 (*p)->counter = ((*p)->counter >> 1) +

41 (*p)->priority;42}

43switch_to(next);

44 }

對於linux0.12 來講,系統最多可有64 個程序同時存在。程式使用程序標識號(pid) 來標識每個程序。對於只有乙個cpu 的系統,在某一瞬間只能有乙個進**正在執行。核心通過排程程式分時排程各個程序執行。 利用分時技術,在linux 作業系統上可以(偽)同時執行多個程序。分時技術的基本原理是把cpu 的執行時間劃分成個個規定長度的時間片(time slice),讓每個程序在乙個時間片內執行。當程序的時間片用完時系統就利用排程程式切換到另乙個程序去執行。因此實際上對於具有單個cpu 的機器來說某一時刻只能執行乙個程序。但由於每個程序執行的時間片很短(例如15 個系統滴答=l50ms),所以表面看來好像所有程序在同時執行著。

排程的實現有很多不同的演算法,linux 0.12版本較為早期了,後期的版本**量似乎大了很多,有關程序排程的也一定更為完善。

第一次作業 深入原始碼分析程序模型

摘要 本文介紹第1次作業的詳細內容,包括評分標準。注 本次作業提交截止時間為utc 8 北京時間 2018 5 1 22 00 星期二 以部落格發表日期為準。挑選乙個開源的作業系統,深入原始碼分析其程序模型,具體包含如下內容 在撰寫博文的時候,需要給出相應的源 核心 就行,比如程序的資料結構,不需要...

演算法分析第一次作業

1.問題 有乙個連通圖 圖中有n個點,編號為1到n 圖中有m條無向邊,格式為a b l 表示a與b之間有一條長為l的邊 沒有重邊,沒有自環,所有點都相互連通 求圖的一棵最小生成樹 2.解析 圖的最小生成樹即花費最少路徑長度將圖中所有點連通 有兩種演算法有優秀的時間複雜度解決這類問題 一種是prim演...

第一次作業

1.用較低的成本,開發出滿足客戶需求的軟體,開發的軟體可靠性高,易於維護和移植 2.分為設計階段,開發階段和測試執行階段 1 設計階段 分析客戶需求,明確要解決哪些問題,實現哪些功能,以及確定基本方法 2 開發階段 a.概要設計 畫出流程圖,進行模組化劃分,建立模組的層次結構以及呼叫關係 b.詳細設...