文章目錄
- 程式vs行程
- 并發與并行
- 行程的狀態
- 行程何時離開CPU
- 行程的狀態轉化圖
程式vs行程
?什么是程式?
程式的英文解釋:

中文翻譯:程式是一個被動的物體,比如一個檔案包含了一系列的指令存在磁盤中(通常叫為可執行程式),
理解:
program是程式;而process是行程;所以從英文單詞上看到兩者的不同;
passive entity是被動的物體;?如何理解這個被動的物體?
比如一個QQ:它就是一個可執行的程式,并不是行程,而且它不會自動運行,只要你不點擊它,都不會自動運行,只有自己點擊才會運行,這就是一個被動的物體;
?一個program(程式)如何變成一個process(行程)?
英文解釋:

中文翻譯:一個程式變成一個行程是在可執行檔案被加載到記憶體的時候,
理解:
我們知道一個程式要運行起來就必須加載到記憶體,一旦程式加載到記憶體后,就不叫程式了,我們就叫它為行程,
?什么是行程?
英文翻譯:

中文翻譯:一個行程是一個活動的物體,它包含了一個程式計數器,這個程式計數器它指明了下一條要指向的指令,這些要執行的指令就是來自程式中相關聯指令的資源集合,
?首先理解以下什么是程式計數器(program counter)?

?如何理解行程中的含義?
理解:
active entity就是活動的物體;這個活動物體的含義是,程式在運行狀態變成了行程,而行程就是一個由passive entity變成了actice entity;物體表明了這個行程是一個實實在在存在的東西;
?行程是如何表現運行狀態的呢?
因為行程中是有pc暫存器的,這個pc暫存器存放了下一條指令的地址,這個下一條指令的地址來源于程式(即存放了要執行的指令的passive entity),而程式的指令集合在程式加載入記憶體的同時把第一條指令存入pc暫存器了;就是所以說,cpu就會從中取指令執行,使得行程表現為運行狀態,
行程時一次活動的物體:比如QQ程式可以被打開好幾個QQ行程,這里時通過一個QQ程式得到多個QQ行程,每個行程都是相互獨立的,不會互不干擾;假如洗掉一個行程,該行程在記憶體就不存在了,但是QQ程式還是存在的;
?程式被加載到記憶體成為行程后,行程是放在的是哪幾部磁區域?

大致就是圖的四個區;代碼區:放的就是二進制代碼,程式編譯鏈接形成可執行檔案的代碼,
并發與并行
?并發(concurrency)和并行是什么意思?
英文解釋并行的概念如下圖:

中文翻譯大概意思:同一時間內,兩個或者兩個以上的事件發生或者存在;
而對于并行的概念:同一時間內,兩個或兩個以上的事件同時運行;
理解:
對于行程的并發:比如由兩個行程A和行程B,行程A和行程B是在一段時間內并發的;那么它們就在這一段時間是同時存在的,
?同時存在哪里呢? 同時存在記憶體中;而對于并行:它們也是在記憶體中,但它們兩個行程就是同時運行的;而并發的行程不會同時運行;并發的行程A和B只會在A運行一段時間,A停下來后,B才可以運行;這是因為一個CPU只能為一個行程服務的原因;而并行的行程是A和B,A運行時同時B也運行;它們時一起運行的;為什么可以并行運行?那就是至少由兩個CPU分別給A和B服務;

行程的狀態

對于一個行程來說一般時又三種狀態:運行態,就緒態,等待態;并且這三種狀態會發生變化;
就好比一個人成長的狀態一樣:小孩時期,青春時期,大人時期的樣子;
?如何理解一個行程的等待狀態和就緒態呢?(假設在單處理器,即一個CPU)
比如一個C語言檔案,運行main函式行程時候,運行一些陳述句,突然運行到一條是printf函式,在沒完成printf函式的IO操作時候,此時,main行程就會進入等待狀態,在等待的狀態cpu是無法為main行程服務的,cpu只能處于空閑狀態或者為其他行程服務,那么等待狀態等待什么呢?等待printf函式的IO操作結束,行程main才可以有資格繼續執行,為什么說是有資格呢?因為等待狀態的行程是在等待事件(如IO操作)結束后,等待狀態的行程還需要進入就緒狀態,而在就緒狀態的行程才有資格進入運行狀態,只要CPU來調度該就緒狀態的行程即可,即可以執行main函式的下面的陳述句了;
行程何時離開CPU
行程是在運行狀態會離開CPU,而離開CPU的方式有兩種:
第一種: 是行程本身主動放棄CPU的使用;比如行程運行時候碰到IO設備處理,那么就會主動放棄cpu,讓IO設備處理;
第二種是:
被動放棄CPU;此時行程的被剝奪CPU使用權,比如:行程的時間片到了,那么該行程就不可以繼續占有CPU了,只能被其他行程強占過去;或者碰到更加

行程的狀態轉化圖

文字解釋:
從運行態開始解釋:
第一進是程被動讓出CPU,比如行程事件片到了,然后就進入就緒態;
第二種是行程主動讓出CPU,比如IO處理,然后就進入等待狀態;
第三種是行程運行結束,直接退出程式,行程結束;
從就緒態解釋:
就緒態的行程會發生三種情況:
第一:剛創建好的行程,需要進入就緒狀態,才有資格被調度;
第二:就緒狀態的行程只有被CPU調度才有資格進入運行態;
第三:等待狀態的行程也會在等待事件結束后進入就緒狀態;
要非常清楚,進入等待狀態的行程是沒有運行的資格的,也不會是等待事件結束后,就可以被cpu調度到運行態,等待事件結束后,被調入到就緒態,才有資格被cpu調度到運行態;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325580.html
標籤:其他
上一篇:【Linux】行程基礎知識
