基本概念
程序:就是乙個執行起來的程式。
程式:一系列有序的指令集合
描述程序-pcb
作業系統如何實現多個程式的排程執行:將這個執行中的程式描述起來,然後將這些描述組織起來進行管理。通過實現對pcb的排程管理實現對執行中程式的切換排程執行—對於作業系統來說這個描述資訊-pcb就是程序
程序就是pcb,是作業系統對乙個執行中程式的描述,通過這個描述實現對程式的執行排程。
在linux中描述程序的結構體叫做struct task_struct。
描述資訊:記憶體指標、程式計數器、上下文資料、程序標示符、程序狀態、io資訊、記賬資訊…
記憶體指標:用於指向程式指令資料再記憶體中的位置。
上下文資料:程式執行時處理器的暫存器中的資料。
程序的建立
ps -ef / ps -aux //程序的檢視
kill / kill -9 //強制殺死程序
程序就是pcb,意味著建立乙個程序就是建立乙個pcb。
pid_t fork()
;//通過複製呼叫程序(父程序)建立乙個新的程序(子程序)
建立了乙個新的pcb,然後從父程序pcb中複製了很多資料過來。
複製的資訊包括記憶體指標、程式計數器、上下文資料…
記憶體指標:子程序與父程序執行的**其實是一樣的,指向同一塊物理記憶體中的資料以及指令。
函式的返回值對於父子程序是不一樣的,在父程序中返回建立的子程序的pid,在子程序中返回的是0。
通常根據fork的返回值進行**的分流,讓父子程序進入不同的判斷執行體完成不同的功能。
父子程序**共享,資料獨有。
#include
#include
intmain()
else
if(pid >0)
else
printf
("---create child process end---%d--%d\n"
,getpid()
, pid)
;return0;
}
程序狀態
windows下程序狀態:就緒/執行/阻塞
linux下程序的狀態:
執行態r:就緒/執行
可中斷休眠態s:當前的阻塞能夠被中斷喚醒
不可中斷休眠態d:當前的阻塞不會被中斷喚醒,等待條件滿足自己醒來。
停止態t:停止執行,什麼都不幹
僵死態z:程序已經退出了但是資源沒有完全釋放的一種狀態
殭屍程序
處於僵死狀態的程序,程序已經退出不再執行,但是資源沒有完全釋放。
殭屍程序的產生:子程序先與父程序退出,但是父程序沒有關注子程序的退出狀態,因此子程序成為殭屍程序。
資源為什麼沒有完全釋放:因為子程序要儲存退出原因。
殭屍程序的危害:資源洩漏。乙個使用者所能建立的程序數量是有限的,並且資源沒有完全**會佔據記憶體資源。
處理方法:1.程序等待(等待子程序退出)2.退出父程序(父程序退出,子程序儲存退出原因就沒有意義了,因此也就釋放了)
孤兒程序
父程序先於子程序退出,則子程序成為孤兒程序,這個孤兒程序的父程序變成了1號程序,並且這個孤兒程序執行在後台。孤兒程序是不會成為殭屍程序的,因為1號程序隨時關注子程序退出。
守護程序:一種特殊的孤兒程序,父程序是1號程序,執行在後台。與終端以及登陸會話脫離關係,不再受影響守護程序通常是一種執行在系統後台的批處理程式。
程序優先順序
乙個程序對於cpu資源獲取的優先權。
優先順序的作用:讓作業系統執行的更加良好。
Linux 程序概念
任何計算機系統都包含乙個基本的程式集合,成為作業系統 os 它包括 作業系統是管管理的軟體 使用者操作 使用者操作介面 shell,lib,指令等 作業系統 驅動程式 硬體 作業系統管理硬體 系統呼叫 在開發者角度,作業系統會對外表現為乙個整體,但是會暴露自己的一部分介面供上層開發者使用,這部分由作...
Linux 程序概念
程序排程演算法 在早期作業系統的排程方式大多數是非剝奪的,這是由於早期的應用一般是科學計算或事務處理,不太把人機互動的響應時間指標放在首要位置。在這種情況下,正在執行的程序可一直占用cpu直到程序阻塞或終止。這種方式的排程演算法可以很簡單,且比較適用對於響應時間不關心或者關心甚少的批處理科學計算或事...
Linux 程序概念
調研程序的排程演算法.短程序優先演算法,對預計執行時間短的程序優先分派處理機。通常後來的短程序不搶先正在執行的程序。演算法優點 相比fcfs 演算法,該演算法可改善平均周轉時間和平均帶權周轉時間,縮短程序的等待時間,提高系統的吞吐量。演算法缺點 對長程序非常不利,可能長時間得不到執行,且未能依據程序...