概念:對正在執行程式的乙個抽象。
偽並行:由於cpu在各個程序中的切換時間很短(幾十毫秒到幾百毫秒),所以在1s內它可以執行多個程序,這樣就產生了並行的錯覺。這就是說乙個cpu在乙個時間點只能執行乙個程序,在下乙個時間點切換到另外乙個程序,造成同時執行的錯覺。
程序和程式:程式就是一些**,用一些語言來描述演算法的**,當cpu等硬體系統去執行這個程式的時候就變成了程序。乙個程式執行兩次就是兩個程序,就是你兩次開啟瀏覽器,你關閉乙個,並不影響另外乙個的執行。
程序的建立:新的程序是由於乙個已經存在的程序執行乙個用於建立程序的系統呼叫而建立的。在unix系統中,只有系統呼叫(
fork)能建立新的程序,這個系統呼叫是建立乙個與父程序相同的副本。windows系統中正好相反,win32函式呼叫createprocess完成建立新的程序,並且把新的程序的相應程式裝入新建立的程序中,程序的建立過程父子程序擁有不同的位址空間。
程序的終止:出錯或者是正常退出或者是被其他程序殺死等,在unix中使用exit(退出),kill(殺死)程序,而win32 是exitproccess(退出),terminateprocess(殺死).
程序執行的三種狀態:執行,就緒,阻塞。其中阻塞是需要某種外部事件來觸發執行,不然即使cpu空閒也不會去執行的程式。
多道程式設計模型:採用多道設計模型可以提高cpu的利用率。
建立執行緒比建立程序快的多。執行緒的乙個最大的優勢就是可以共享可用資料的能力。
程序是把資源集合到一起,執行緒就是cpu執行的實體。
執行緒的設計考慮:1父程序有多個執行緒,子程序在共享這些執行緒後,父程序遇到阻塞,子程序是不是也要相應的阻塞麼?2乙個執行緒發現記憶體不夠,分配新的記憶體,執行過程中,切換執行緒,導致新的執行緒也申請記憶體問題。
排程程式啟用機制。
程序間的通訊會產生的問題:1.如何通訊,2.解決競爭問題3.程序執行的順序問題
競爭問題的產生:多個程序同時讀寫共享資料。解決方法:1.遮蔽中斷 2.鎖變數3.嚴格輪換法4.peterson解法5.tsl指令(需要硬體支援)6.訊號量7.互斥量(這些方法的主要思想是讓乙個程序在全域性變數中運算元據時,其他的程序就不能進入,直到該程序資料操作結束,其他程序才可以進入)
由於上述方法有些是在連續記憶體中共享資料,但萬一共享的資料不再連續的記憶體中,如何解決?1.
把部分共享資料放在核心中
,2.讓程序和其他程序共享部分位址空間
。但是如果程序共享大部分的位址空間,這就導致程序和執行緒的概念變得模糊起來。
管道:由於訊號量的使用容易出錯,所以提出了高階同步語言,管道。管道有乙個重要的特性:乙個時刻,管道中只能有乙個活躍程序。
訊息傳遞:在程序通訊的過程中用兩條語句來進行通訊:send和receive。乙個傳送資訊,乙個接收資訊。
屏障:這個是用於程序組而不是用於雙程序的。舉個例子:在 乙個程式中,我們希望所有的程序都執行完這一步之後才能進入下乙個階段,否則所有程序一直等待直到最後乙個程序完成了這一階段的過程,我們可以使用屏障來處理。
tsl指令:這是一條彙編指令:tsl rx, lock,測試並加鎖,
意思是在該指令結束前任何處理器都不能訪問該記憶體字。
概念:當計算機系統是多道程式設計系統,則多個程序會競爭cpu,這樣就需要乙個調配程式告訴cpu在哪個時間點執行哪個程序,這就是排程。
計算密集型和i/o密集型:這個指的是在程序過程,計算機是花大量的時間在計算上還是花大量的時間在等待i/o上。
排程演算法:1.批處理2.互動式3.實時 互動式系統需要搶占資源,省的cpu被乙個程序一直呼叫,而實時系統在搶占資源上則不是必須的,實時系統和互動式系統的主要差別是實時系統只執行那些用來推進現有應用的程式,而互動式系統是通用的,它可以執行任意的非協調的程式。
批處理系統的排程:1.先來先服務2.最短作業優先3.最短剩餘時間優先(類似於最短作業優先)
互動式系統的排程:1.輪轉排程2.優先順序排程3.多級佇列4.最短程序優先5.保證排程6.彩票排程7.公平分享排程
輪轉排程:每個程序平均分時間段去使用cpu,這樣倒是管理時間很久,浪費和大
優先順序排程:每個程序都有乙個優先級別,級別高的有權先排程,級別低的用後面再排程。
最短程序優先:最短程序優先就會有最短響應時間。
保證排程:向使用者做出明確的排程保證,然後去實現它。
彩票排程:改進版的彩票排程,向每個程序提供的各種系統資源的彩票,一旦要做出決策時,就隨機抽取一張彩票,擁有該彩票的程序獲得該資源,得到cpu的應用時間。
公平分享排程:這個是為了改善不同使用者間的程序而設定的。
1.哲學家就餐問題:解決方法:每個哲學家只有在左右兩個鄰居沒有就餐時才可以就餐就還可以避免飢餓和死鎖問題。
現代作業系統 程序與執行緒
多道程式設計 實際上cpu在各個程序之間來回切換。由於cpu在各程序之間來回快速切換,所以每個程序執行其運算的速度是不確定的,對程式設計進行程式設計時不能做出任何想當然的假設。程序的建立與寫時複製 在unix系統中,只有乙個系統呼叫可以用來建立新程序 fork,程序建立後,子程序共享父程序的所有記憶...
《現代作業系統》之 程序與執行緒
作業系統中最核心的概念是程序,它是對正在執行程式的乙個抽象,包括作業系統。乙個程序就是乙個正在執行程式的例項,包括程式計數器 暫存器和變數的當前值。下圖中有四個程序,但是只有乙個物理程式計數器。在執行其中某個程式時,例如執行a程序,此時程序a的邏輯程式計數器就會被載入到物理程式計數器中。並且在實際的...
作業系統 程序和執行緒
從處理機只能執行單一程式,到處理機可以通過不停的切換所執行的程式,達到看似同時處理多個程序的過程,經歷了很長一段時間。從單道程式設計到多道程式設計,主要解決了在執行過程中需要頻繁等待資源或者i o操作的問題,因為這類操作通常都是很耗時間的 相對於cpu的快速執行來說 進而提高了整個cpu執行的效率和...