作業系統精髓與設計原理--程序控制
阿新 • • 發佈:2019-02-07
程序建立:
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.控制權轉交給另一個程序,父子程序都置於就緒態。