程序也可以說是乙個任務,
是一種作業系統中非常重要的軟體資源,
把乙個可執行程式跑起來,系統中就會產生乙個相對應的程序,如果這個程式結束了,那麼相對應的程序也會被系統隨之銷毀,
因此,程序也可以被看作是可執行程式的「過程」
可執行程式和程序不是乙個概念,下面我們來具體區分一下
可執行程式
程序程序是可執行檔案跑起來的乙個具體實現過程,那麼當我們雙擊可執行程式時,可以在電腦的任務管理器中找到這個執行程式,這個就是程序
把.exe 檔案中的很多內容都載入到記憶體中了,分配一些資源,並開始執行這個可執行程式中包含的指令
程序也是作業系統中進行資源分配的最小單位
每建立乙個程序,就同時建立了乙個pcb這樣的類的例項
使用雙向鍊錶把所有的pcb物件串到一起,雙擊乙個exe,建立乙個程序的時候,本質上就是在核心中,先建立了乙個pcb物件,然後把這個物件加入到鍊錶中,關閉乙個程式,結束乙個程序的時候,本質上就是在核心中,找到這個對應的pcb物件,然後從鍊錶上刪掉,並且釋放該資源
通過任務管理器檢視到的所有的程序資訊,本質上 就是在遍歷核心中的這個鍊錶,依次讀取對應pcb的節點資訊
pcb裡面包含的資訊有:
1.pid(程序id)程序的身份標識以上的3~6點都是為了實現 程序排程2.一組記憶體指標:指向該程序持有的一些重要資料在記憶體中的位置
3.程序的狀態:表示當前的程式是在執行還是休眠…
4.優先順序: 這個程序是優先上cpu執行還是放到後面上
5.程序的記賬資訊:記錄了程序在cpu上一共執行了多長時間,通過這個事件來限制不要讓某個程序霸佔cpu太長時間導致的其他程式無法執行
6.上下文:儲存量上次程序在cpu上執行的進度,以便下次程序上cpu的時候能繼續執行
一般情況都會出現 程序數量多,cpu數量少
cpu數量少,但是程序數量多怎麼解決呢?
我們電腦中同一時間會執行多個程序,這是通過快速頻繁的切換cpu來達到每個執行緒一起工作,
這樣從巨集觀上看多個執行緒是同時進行的----------> 併發
從微觀上看和從巨集觀上啃都是同時進行的-------> 並行
但在具體應用中,併發和並行的區分不大
程序中的狀態還是比較重要的,這裡詳細介紹一下
乙個程序的狀態有一下幾種:r: 就緒狀態。正在cpu上執行,或是即將執行
s:睡眠狀態。這些程序沒法在cpu上執行,而是在等待
d: 深度睡眠狀態。程序在長時間忙於io操作,沒盡力理會cpu
x:程序已經被銷毀了
阻塞狀態。程序不具備執行條件,正在等待某個事件的完成。
…
作業系統中的併發和並行
在計算機作業系統 第4版,湯子瀛 中,小標題 並行和併發 的父標題是 併發 經過學習,我的理解是並行是併發的子集,併發是包含並行的含義的。計算機作業系統 中是這樣定義和區分併發和並行的 並行性和併發性是既相似又有區別的兩個概念。並行性是指兩個或多個事件在同一時刻發生。而併發性是指兩個或多個事件在同一...
作業系統 並行和併發
併發 concurrent 在作業系統中,是指乙個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同乙個cpu上執行。併發不是真正意義上的 同時進行 只是cpu把乙個時間段劃分成幾個時間片段 時間區間 然後在這幾個時間區間之間來回切換,由於cpu處理的速度非常快,只要時間間隔處理...
OS作業系統中的併發與並行
併發與並行 從字面裡來講很容易混淆,現在總結一下。1.併發 指的是兩個或多個事件在同一時間間隔內發生。2.並行 指的是系統具有同時進行運算或操作的特性,在同一時刻能完成兩種或兩種以上的工作。並行性需要硬體的支援,比如流水線或者多處理機硬體環境。舉例子 1.如果你在9 00 9 10僅吃麵包,在9 1...