這次筆記重點解決三個問題,另外,也將引申出後面的知識點
為什麼要建立「程序」這個概念
什麼是程序
程序是如何工作的
(乙個簡單的目錄)
程序——pcb——程序映像——程序狀態型別——狀態具體執行
從不同的角度,可以給出不同的定義
官方定義1:程序是程式的一次執行過程
官方定義2:程序是乙個程式及其資料在處理機上順序執行時所發生的活動
無論是哪種定義,都可以看出,
程序是執行
著的,他在做某些事情
那麼要保證他能夠平穩執行,我們需要對其進行控制
所以我們使用一種專門的資料結構——程序控制塊(process control block,pcb),pcb用來描述程序的基本情況和執行狀態
程式段,相關資料段,以及pcb三部分就構成了程序的實體(我們稱為程序映像),此時是靜態的。
特別注意的是,說程序是執行中的程式不是很準確,因為
程式是程序的一部分
。而且由於程式段和相關資料段事先其實已經準備好了,所以我們說「程序建立」的時候,其實就是建立pcb
現在我們可以有乙個更直觀的定義:
程序是程序映像的執行過程,是系統進行資源分配和排程的乙個基本單位。
這裡的系統資源主要是指「時間」資源,比如把cpu的時間分給你,那麼你就可以用他來計算
基本單位的意義表示系統不再分配資源給比程序還小的東西(比如我們以後會講的執行緒)
好,如果你記住了程序映像的結構,那麼接下來,我們看看他執行起來是怎麼樣的。我們知道運動中的人是千姿百態的,程序既然是動態的,必然也有多重狀態
(網上盜的圖)
我們發現,程序有五種狀態
新的(新建),就緒,執行,等待(阻塞),終止
我比較喜歡用新建和阻塞~
其他的可以顧名思義,就緒和等待的區別在於
就緒是只差cpu資源,一旦有,馬上就可以執行
等待是因為各種原因無法執行,比如中斷,等待i/o等
等待狀態只能得到其他資源變成就緒狀態,否則一直等下去(如果大家都是等待狀態,就會造成乙個誰也執行不了的窘境,這將會造成後面我們要講的乙個重點——
死鎖
)就緒狀態只能得到cpu資源變成執行狀態,否則一直等下去(長期如此,對於該程序會造成乙個問題,叫做「
飢餓
」)而執行狀態可以因為各種原因變成就緒或等待狀態
記住了他們之間的順序關係了嗎?現在我們來一條一條分析這些狀態到底在幹嘛
程序新建:程序是怎麼建立出來的?
答:是由另乙個程序建立的,這個程序叫做父程序,新建的程序叫做子程序
你應該還記得,我剛剛講了程序建立本質上是pcb的建立
程序建立過程如下:
1為新程序建立乙個唯一的程序標識號,並申請乙個空白pcb,如果申請失敗,就標識建立失敗
(就像國家不給批一樣)
2為程序分配資源,變成新程序的程式和資料,如果沒有資源,此時會處於等待,一直到資源出現為止(得到審批,就算合法)
3初始化pcb,構建全新的pcb
4完成了3pcb就算構建完成,各種資源到齊,接下來幹嘛呢?就差cpu資源啦,所以將會進入就緒狀態,馬上就可以執行
簡單歸納一下程序從出生到執行,需要識別符號——pcb構建資源——cpu執行資源,模擬一下汽車就是批准掛車牌,建造材料和汽油
現在我們的小車車已經開始在跑啦,會不會出問題呢?當然會!半路沒油,強盜搶油,前方堵車都會讓他停下來,除了和油相關的情況之外,其他的突發事件都會導致程序進入阻塞狀態
程序阻塞過程如下
1找到將要被阻塞程序的標識號對應的pcb
2弱該程序為執行狀態,就保護現場,停止執行,轉換為阻塞狀態
3將pcb插入相應事件的阻等待佇列中
如果解除了突發事件,比如其他資源到了,就將程序喚醒
1從該事件的等待佇列中找到相應程序的pcb
2從等待佇列移出,轉換狀態為就緒狀態
3把該pcb插到就緒佇列,等待程序排程程式排程
之所以要寫上面專業一點是避免由於通俗語言導致的理解偏差,免得誤人子弟。如果你是第一次學習的話可以直接看通俗語言寫的,讓你快速對程序有感性認識。
不管是程序建立還是阻塞還是喚醒,都要先把車牌找到,然後把你放到對應狀態去排隊,只有在就緒佇列中,cpu分給你,你才能跑
當我們的車終於完成了旅途,或是半路被炸了,都將面臨乙個結局——終止
我想你也大概能猜到我們的手段了吧,不過這次略有不同,如果是完成路途(正常執行結束還好說,萬一半路被炸呢(異常終止),不清楚犯人
什麼情況下乾的,所以需要判斷被害者當時的情況,比如有沒有遺產
可供大家分享(手動滑稽)
程序終止過程
1根據被終止程序的pcb,讀出該程序當前的狀態
2如果是執行狀態,立刻終止該程序的執行,把分配給他的cpu資源分給其他程序
3如果程序還有子程序,則將所有子程序終止
4**所有該程序擁有的資源,要麼給其父程序,要麼收回作業系統
5將該pcb刪除
有點殘忍,但是沒辦法,你對社會沒用了~
好今天我們講了程序的定義,結構,執行狀態
還記得我們的三個問題嗎?
為什麼要建立「程序」這個概念
什麼是程序
程序是如何工作的
你現在應該可以回答前兩個
第三個你目前只能回答他是怎麼執行的,他怎麼辦事的還不清楚,但是我們知道,很多事情光靠乙個程序是完成不了的
作業系統的特徵是併發和共享,乙個系統乙個時間內是不可能只執行乙個程序的,那麼程序之間是如何完成併發和共享然後做成一件事的呢?我們下次再討論
白話作業系統筆記2 特徵與功能
接下來我們要做的事情就是如何把房子蓋起來 現代作業系統為了能做到這一點,為自己量身訂造了幾條不可撼動的規則 用四個詞來描述,就是 併發,共享,虛擬,非同步 這四個概念,是貫穿作業系統的理論基礎,就像歐幾里得的幾條公里推出了現代數學體系一樣,深刻了解這些概念,可以更全更深的理解作業系統 一句話概括 併...
作業系統 程序與執行緒筆記
程序終止條件 1正常退出 2出錯退出 3嚴重錯誤 4被其他程序殺死 需要執行緒的理由 1乙個程序需要多個活動 2 執行緒的效能更好一些 更加的輕量 優點 1不需要陷阱 不需要上下文切換 允許自己定製排程演算法 缺點 無法實現時鐘中斷 如何實現阻塞系統呼叫 避免程序競爭的方法 1 遮蔽中斷 2 鎖變數...
作業系統筆記 程序同步(3)
讀者寫者問題 哲學家就餐問題 小結描述 這是乙個多程序併發協作的問題 也可以是多執行緒 在這裡我們涉及到了兩類程序,一類是生產者程序,一類是消費者程序,生產者用於生產資料,消費者用於處理生產者生產的資料,所有消費者處理的資料必須由生產者生產得到。為了解耦這兩類程序之間的關係,我們引入乙個資料緩衝池,...