從CPU管理到程序的引入

2022-08-09 08:30:12 字數 2073 閱讀 3403

為什麼要管理cpu,這是因為在「上古時代」,cpu是計算機硬體之中最昂貴的資源。因此提高cpu利用率是很有必要的。我們知道只要給cpu的pc乙個位址,cpu就能執行起來了,假設在執行一段時間後,需要一些i/o操作,而i/o操作(當年主要是連線印表機等)是很費時間的。這個時候的cpu是閒置的。而實際等著cpu去處理的程式有一大堆,這時候cpu資源是被浪費掉的。因此必須想辦法提高cpu利用率。現在管理cpu是因為這樣能更好的支援多個程式在單使用者上進行,以及給使用者良好的人機互動體驗。

乙個直觀的想法就是在i/o等不需要占用cpu的操作執行時,讓cpu去執行其他的程式。基於這個想法就誕生了:多道批處理程式。這樣,當乙個程式不需要占用cpu資源的時候,就切換到下乙個程式去取指執行。這樣在乙個cpu上交替執行多個程式,這就是:併發。

假設現在有兩個程式在記憶體中放著,分別稱之為程式1和程式2。現在我們先執行程式1,執行一段時間後,程式1需要連線印表機進行列印操作,這個時候cpu就閒置下來了,此時我們切換到程式2執行。等到程式1執行完列印工作後,我們就從程式2切回程式1繼續執行。實現切換程式是簡單的,就是修改pc的值。通過修改pc,我們就可以實現切換執行程式的操作。但是有個問題需要解決,這就是切回程式1繼續執行的時候,可能下一步的操作需要切換到程式2執行之前的一些處理結果。因此,需要將程式1的執行資訊給儲存起來,對於程式2也是如此。否則這樣的切換是沒有意義的,而且還可能導致程式出錯。這時候我們需要乙個概念,就是程序。

首先,我們都知道我們寫的c語言**,最後經編譯器的預處理,編譯,彙編,鏈結這些操作可以得到乙個可執行檔案。這個可執行檔案,在windows下就是字尾為exe的檔案。我們雙擊這個檔案,他就執行起來了。我們把這個執行起來的程式就稱之為乙個程序。所以當可執行檔案靜靜的躺在磁碟裡的時候它是「死的」,只是乙個二進位制檔案。只有當把這個可執行檔案對映到記憶體裡的時候,它才是動態的。

為了儲存乙個程序的資訊,引入了pcb(process control block)程序控制塊來儲存程序的資訊。這樣在乙個cpu上執行多個程序就是多程序。但是在微觀上來看,一次只能有乙個程序在cpu上執行,其餘的程序都是等待或者就緒狀態。

需要注意的是,乙個程式可以有多個程序。這些程序在記憶體中的不同對映。

每乙個程序在作業系統內使用——程序控制塊pcb來表示。程序控制塊包含了乙個特定程序的相關資訊。一般而言,在作業系統中pcb的數目是一定的。作業系統通過pcb來感知程序的存在與否。乙個pcb主要包含的主要資訊列在了下表中。

程序排程:程序進入系統時,會被加到作業佇列中,該佇列包括系統中的所有程序。駐留在記憶體中的等待執行的程序加入就緒佇列。對於計算機而言,每個裝置都有自己的裝置佇列,需要使用該裝置的程序都會在該裝置的佇列中等待裝置空閒。例如磁碟佇列。程序在其生命週期內會被不斷在各種佇列之中來回遷移。作業系統為了排程,必須按照某種方式來從佇列中選擇程序。這就需要排程程式。

上下文切換:把cpu切換到另乙個程序需要儲存原來程序的狀態並裝入新程序的儲存狀態。核心會將舊程序的關聯狀態儲存到pcb中。上下文切換的複雜度和硬體緊密相關,例如有的處理器提供了暫存器組,這樣就能避免過多的資料複製。

程序建立:在程序執行的過程中,父程序能通過系統呼叫建立子程序。當程序建立完畢後,有兩種可能的執行:

父程序和子程序併發執行

子程序先執行,父程序後執行

子程序是父程序的複製品

子程序裝入另乙個程式進來

程序終止:當程序執行結束的時候,呼叫exit函式請求作業系統刪除它。這時子程序返回資料到父程序。當然,在某些情形下也會出現終止,程序通過適當的系統呼叫能結束另乙個程序。父程序終止子程序的原因很多。

程序協作:如果乙個程序在執行的時候不影響其他程序,並且其他程序也不影響他。那麼它就是獨立程序。如果多個程序之間是有相互影響的,那麼他們就是協作的。協作能帶來一下好處:

程序協作的乙個典型問題是——生產者-消費者問題。

生產者程序產生資訊,以供消費者程序消費。為了允許生產者程序和消費者程序能夠併發執行,必須要有乙個公共緩衝區來被生產者填充,被消費者使用。消費者不能提前消費,生產者也不能生產超過緩衝區的資訊。緩衝區的設定可以藉由程序通訊或者是共享記憶體來解決。

程序的引入

1.程式順序執行時的特徵 1 順序性 2 封閉性 3 可再現性 2.程式併發執行時的特徵 1 間斷性 2 失去封閉性 3 不可再現性 3.從結構上看,程序實體是由程式段 資料段和程序控制塊三部分組成,也稱這三部分為程序映像。4.系統資源可以分為cpu和外部事件 包括資源 時鐘中斷 外部事件等 5.在...

引入程序的目的

強烈推薦人工智慧學習 作業系統為何要引入程序這個概念,這要從多批道處理系統說起。為了提高cpu利用率,多批道處理系統一次性載入多個作業到記憶體中讓程式併發執行,但這會造成一系列的問題。這裡也談到乙個概念 併發 併發和並行的概念很多人混淆不清。併發 指你有處理多個任務的能力,不一定要同時進行。並行 指...

邏輯回歸從原理到演算法的實現

線性回歸能對連續值進行 而現實生活中常見的是分類問題。既然能夠用線性回歸 出連續值結果,那根據結果設定一閾值是不是就可以解決這個問題了呢?事實上對於很標準的情況下確實是可以的。但很多實際的情況下,我們需要學習的分類資料並沒有那麼精準,因此引出邏輯回歸。即將線性回歸 的值通過sigmoid函式對映到0...