進程控制原理

在操做系統原理中,一個完整的進程都不可或缺的擁有如下三態:就緒態,執行態,阻塞態。進程一旦建立起來以後,首先進入的狀態是就緒態,而後經過進程調度來佔有CPU進入執行態,注:假如只有一個CPU,則同一時刻只有一個進程可以佔有CPU。進程在運行過程中若要進行I/O請求,如訪問網卡、串口(從串口讀取數據,此時串口沒有數據可讀)等時,則進程會進入阻塞態,等串口有數據並將數據讀完(I/O完成),進程又會跳回就緒態。整個過程爲進程的基本流程。 算法

進程互斥:進程互斥是指當有若干個進程要使用某一共享資源(臨界資源)時,任什麼時候刻最多容許一個進程使用,其餘使用資源的進程必須等待,直到佔用該資源的進程釋放該資源爲止。 編程

臨界資源:操做系統中將一次只容許一個進程訪問的資源稱爲臨界資源。
臨界區:進程中訪問臨界資源的那段程序代碼稱爲臨界區。爲實現對臨界資源的互斥訪問,應保證諸進程互斥的進入各自的臨界區。 多線程

進程同步:一組併發進行按照必定順序執行的過程稱爲進程間的同步。具備同步關係的一組併發進程稱爲合做進程,合做進程間互相發送的信號稱爲消息或事件。如工廠商品流程:生產,測試,包裝,出售,這幾個過程就是進程同步,先生產再測試,再包裝,再出售。 併發

進程調度:按照必定算法,從一組待運行的進程中選出一個來佔有CPU運行。 函數

進程死鎖:多個進程因競爭資源而造成一種僵局,若無外力做用,這些進程都將永遠沒法再向前推動。 測試

一.爲什麼須要多進程(或者多線程),爲什麼須要併發?

這個問題或許自己都不是個問題。可是對於沒有接觸過多進程編程的朋友來講,他們確實沒法感覺到併發的魅力以及必要性。

我想,只要你不是成天都寫那種int main()到 底的代碼的人,那麼或多或少你會遇到代碼響應不夠用的狀況,也應該有嘗過併發編程的甜頭。就像一個快餐點的服務員,既要在前臺接待客戶點餐,又要接*話送 外賣,沒有分身術確定會忙得你焦頭爛額的。幸運的是確實有這麼一種技術,讓你能夠像孫悟空同樣分身,靈魂出竅,樂哉樂哉地輕鬆應付一切情況,這就是多進程/線程技術。
併發技術,就是可讓你在同一時間同時執行多條任務的技術。你的代碼將不只僅是從上到下,從左到右這樣規規矩矩的一條線執行。你能夠一條線在main函數裏跟你的客戶交流,另外一條線,你早就把你外賣送到了其餘客戶的手裏。 spa

因此,爲什麼須要併發?由於咱們須要更強大的功能,提供更多的服務,因此併發,必不可少。

線程是可執行代碼的可分派單元。這個名稱來源於「執行的線索」的概念。在基於線程的多任務的環境中,全部進程有至少一個線程,可是它們能夠具備多個任務。這意味着單個程序能夠併發執行兩個或者多個任務。

簡而言之,線程就是把一個進程分 爲不少片,每一片均可以是一個獨立的流程。這已經明顯不一樣於多進程了,進程是一個拷貝的流程,而線程只是把一條河流截成不少條小溪。它沒有拷貝這些額外的 開銷,可是僅僅是現存的一條河流,就被多線程技術幾乎無開銷地轉成不少條小流程,它的偉大就在於它少之又少的系統開銷 操作系統

相關文章
相關標籤/搜索