作業系統複習(程序狀態及程序排程)

2021-10-07 16:48:54 字數 3152 閱讀 6048

程序排程演算法

程序排程的時機

程序切換

程序在其生命週期內,由於系統中各個程序的相互制約關係及系統執行環境的變化,使得程序的狀態也在不斷地發生變化。這些狀態有:

執行態:程序在處理機上執行。

就緒態:程序已處於準備執行的狀態。此時程序獲得了除處理機以外的全部資源。

阻塞態:程序正在等待某一事件而暫停執行。

建立態:程序正在被建立,尚未轉到就緒態。

結束態:程序正從系統中消失。

主動行為(程序請求某一資源的使用或等待某一事件的發生),從阻塞態變成就緒態是被動行為(程序等待的事件到來)。

程序的建立分以下的步驟進行:

接受引數:如程式程式初始優先順序、可執行程式及輸入引數等。

申請pcb空間和pid,初始化pcb。

初始化程序現場。

將程序設定為就緒態。

linux 0.11中,建立程序是由fork系統呼叫實現的。

sys_fork:

call find_empty_process

testl %eax,%eax

js 1f

push %gs

pushl %esi

pushl %edi

pushl %ebp

pushl %eax

call copy_process

addl $20,%esp

1: ret

查詢空程序,find_empty_process

申請並設定新程序控制塊

記憶體拷貝

修改gdt

第2,3,4步在copy_process可體現:

int

copy_process

(int nr,

long ebp,

long edi,

long esi,

long gs,

long none,

long ebx,

long ecx,

long edx,

long fs,

long es,

long ds,

long eip,

long cs,

long eflags,

long esp,

long ss)

for(i=

0; i

(f=p->filp[i]

) f->f_count++;if

(current->pwd)

current->pwd->i_count++;if

(current->root)

current->root->i_count++;if

(current->executable)

current->executable->i_count++

;/*修改gdt*/

set_tss_desc

(gdt+

(nr<<1)

+first_tss_entry,

&(p->tss));

set_ldt_desc

(gdt+

(nr<<1)

+first_ldt_entry,

&(p->ldt));

p->state = task_running;

/* do this last, just in case */

return last_pid;

}

linux 0.11中,建立程序後,系統沒有急著給程序分配系統的空間,而是採取寫時複製的策略,這樣加大了記憶體空間的利用率。

程序排程是核心決定將cpu分配給某個就緒程序的過程。

有一些典型的程序排程演算法

這個演算法的基本思想就是按照程序的就緒次序來排程程序。(非剝奪排程)

這個演算法相對簡單,且對所有的程序都比較公平。但如果有乙個長程序先於一些短程序到達,就會使得短程序等待很長的時間,因此,這種演算法不適合在互動環境中使用。

這個演算法的基本思想是:賦給每個程序乙個cpu時間片,程序輪流占用cpu,當時間片用完時,釋放cpu。

和fcfs演算法不同,這個演算法適合在互動環境中使用。

這個演算法保證了每個程序的相對公平,每個程序都有均等的機會執行,同時改善了短程序的響應時間,提高了系統的吞吐量。

這個演算法的基本思想是:賦給每個程序乙個優先順序,優先順序最高的程序占用cpu。

其中,優先順序可以是靜態的,也可以是動態的;這個排程演算法可以是剝奪的,也可以是非剝奪的。

這個演算法的優點是:排程靈活,可適應多種排程需求。

缺點是:低優先順序程序可能會一直得不到cpu。

linux 0.11中的程序排程演算法是綜合了時間片輪轉排程演算法和優先順序排程演算法實現的。

當前程序主動放棄處理機,如程序結束、程序被阻塞或掛起、程序執行「自願放棄」的系統呼叫。

當時間片用完。

當更高優先順序的程序出現時。

系統呼叫返回前的延時排程

程序切換往往在排程完成後立即發生,程序切換時,會儲存原程序的執行現場,恢復被排程程序的執行現場。

為了進行程序現場切換,核心將原程序的執行現場(pc等一些暫存器的內容、堆疊指標、程序儲存空間的指標)壓入當前程序的核心棧中,並更新堆疊指標。核心從新程序的核心棧中裝入新程序的現場資訊,更新當前程序的儲存空間的指標,重新設定pc,控制便轉到新程序,新程序開始執行。

作業系統 程序排程

程序排程程序排程室作業系統必不可少的一種排程。因此在三種型別的os dos windows linux 都無一例外地配置了程序排程。此外它也是對系統效能影響最大的一種處理機排程。程序排程的任務 儲存處理機的現場資訊。在進行排程時首先需要儲存當前程序的處理機的現場資訊,如程式計數器 多個通用暫存器中的...

作業系統程序排程

華中農業大學 學生實驗報告 課程名稱 計算機作業系統 實驗名稱 程序排程 實驗型別 驗證 設計 綜合 創新 實驗目的 實驗目的 1 通過編寫程式實現程序或作業先來先服務 高優先權 按時間片輪轉排程演算法,使 學生進一步掌握程序排程的概念和演算法,加深對處理機分配的理解。2 了解程序 執行緒 的排程機...

作業系統 程序排程

對於單處理器系統,同一時間只有乙個程式可以執行 其他程序都應等待,直到cpu空閒並可排程為止。多道程式的目標是,始終允許某個程序執行以最大化cpu利用率。cpu的程序屬性 週期進行cpu執行和i o等待。程序在這兩個狀態之間不斷交替。程序執行從cpu執行開始,之後i o執行 接著另乙個cpu執行,接...