程式

爬比我。發表於2020-10-28

程式:

進行就是正在進行中的程式,程式執行起來需要被載入到記憶體中。程式就是作業系統的描述,這個描述叫PCB(程式控制塊),Linux下PCB有自己的名字叫task_struct。而作業系統就是使用task_struct結構體描述程式,使用雙向連結串列來將這些結構體組織起來進行管理。

task_struct(PCB)內容分類

識別符號:就是程式的PID。

狀態:任務狀態、退出程式碼,退出訊號等。

優先順序:相對於其他程式的優先順序。

程式計數器:程式中即將被執行的下一條指令的地址。

記憶體指標:包括程式程式碼和程式相關資料的指標,還有和其他程式共享的記憶體塊的指標。

上下文資料:程式執行時處理器的暫存器中的資料。

I/O狀態資訊:包括顯示的I/O請求,分配給程式的I/O裝置和被程式使用的檔案列表。

記賬資訊:可能包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。

每個程式都會有一個非負整數的表示的唯一程式ID,因為程式識別符號總是唯一的,但程式ID是可複用的,當一個程式終止後,其程式ID就會成為複用的候選者,但系統會實現延遲複用演算法,使得新程式的ID不同於最近終止程式所使用的ID。

那麼,到底什麼是程式呢?又為什麼要有程式?

CPU一次只能處理一個程式,CPU速度很快,而記憶體很慢,所以CPU會有大量的時間都是空閒的。而CPU又是很昂貴的,為了解決浪費CPU的情況,就出現了中斷處理,將程式分成一小片一小片的,這個程式執行一點,那個程式執行一點。雖然在內部程式的執行是一段一段的,但是CPU的速度很快的(速度都是納秒級別的),所以我們是感受不到程式執行過程中的停頓的。

檢視程式資訊的命令

 ps -ef:檢視所有的程式資訊。
 ps aux:檢視程式的詳細資訊。
 top;(檢視程式的資訊)
 檢視你所要的程式資訊: ps -ef | 名字。
  getpid();(在程式碼中獲取一個程式的id)(一個系統的呼叫介面)

#include<stdio.h>
 
int main()
{
    printf("%d\n", getpid());//使用getpid()來獲取一個程式的id
    return 0;
}

 

 

相關文章