1. 程式人生 > >作業系統精髓與設計原理--程序控制

作業系統精髓與設計原理--程序控制

程序建立:

1.給新程序分配一個唯一的程序號

(主程序表中增加一個新專案,表中的每個專案指向一個程序)

2.給程序分配空間

3.初始化程序控制塊

4.設定正確的連線

5.建立或擴充其他資料結構

程序切換:

三種有可能發生程序切換使得把控制權交給作業系統的事件:

(1)中斷            當前指令的外部執行          對非同步外部事件的反應

(2)陷阱            與當前指令的執行相關      處理一個錯誤或異常條件

(3)系統呼叫      顯式請求                          呼叫作業系統函式

程序切換的步驟

1.儲存處理器上下文,包括程式計數器和其他暫存器

2.更新當前處於執行態的程序的程序執行塊。

3.把程序的程序控制塊移到相應的佇列

4.選擇另一個程序執行

5.更新所選擇的程序的程序控制塊,包括把程序的狀態變為執行態。

6.更新記憶體管理的資料結構,這取決於如何管理地址的轉換

7.回覆處理器在被選擇的程序最近一次切換出執行態時的上下文,這可以通過載入程式計數器和其他暫存器以前的值來實現。

UNIX中的程序由三部分組成

(1)使用者上下文p106(129)詳細介紹

(2)暫存器上下文

(3)系統級上下文

程序控制:

當一個程序產生一個fork請求時,作業系統執行以下功能:

1.為新程序在程序表中分配一個空項

2.為子程序賦一個唯一的程序標識號

3.做一個父程序上下文的邏輯副本,不包括共享記憶體區

4.增加父程序擁有的所有檔案的計數器,以表示有一個另外的程序現在擁有這些檔案

5.把子程序置為就緒態

6.向父程序返回子程序的程序號對子程序返回0

核心操作結束後進行以下三步之一

1.在父程序中繼續執行

2.處理器控制權轉交給子程序。

3.控制權轉交給另一個程序,父子程序都置於就緒態。