Linux程序控制理論及幾種常見程序間通訊機制

2022-08-15 19:12:12 字數 1789 閱讀 9678

1. linux程序控制理論

① 程序是乙個具有一定獨立功能的程式的一次執行活動(動態性、併發性、獨立性、非同步性)。

程序的四要素:

(1)有一段程式供其執行(不一定是乙個程序所專有的),就像一場戲必須有自己的劇本。

(2)有自己的專用系統堆疊空間(私有財產)

(3)有程序控制塊(task_struct)(「有身份證,pid」)

(4)有獨立的儲存空間。

缺少第四條的稱為執行緒,如果完全沒有使用者空間稱為核心執行緒,共享使用者空間的稱為使用者執行緒。

② 經典程序三態:阻塞、就緒、執行

備註:在同一時刻cup執行的只有乙個程序

③ 程序id(pid):標識程序的唯一數字;父程序id(ppid);啟動程序的使用者id(uid)

④ 程序互斥:當有若干程序都要使用某一共享資源時,任何時候最多允許乙個程序使用,其它要使用該資源的程序必須等待,知道占用該資源的程序釋放了該資源為止

⑤ 臨界資源:作業系統中將一次只允許乙個程序訪問的資源稱為臨界資源

⑥ 臨界區:程序中訪問臨界資源的那段**稱為臨界區。為實現對臨界資源的互斥訪問,應保證諸程序互斥的進入各自的臨界區

⑦ 程序同步:一組併發程序按一定順序執行的過程稱為程序間的同步

⑧ 程序排程:按一定演算法,從一組待執行的程序中選出乙個來占有cpu執行

(1)排程方式:搶占式(a正在執行,b就緒,b優先順序高,直接執行b)和非搶占式(a正在執行,b就緒,b優先順序高,等a執行完再執行b)

(2)排程演算法:先來先服務, 短程序優先, 高優先順序優先,時間片輪轉

⑨ 死鎖:多個程序因競爭臨界資源而形成的一種僵局

⑩ 獲取id

pid_t getpid(void);  //獲取本程序id

pid_t getppid(void);  //獲取父程序id

⑪ 程序建立:

pid_t fork(void);  //建立子程序

fork被呼叫一次,卻返回兩次,他可能有三種不同的返回值

(1)在父程序中,fork返回新建立的子程序的pid

(2)在子程序中,fork返回0

(3)如果出現錯誤,fork返回乙個負值

注:fork後的**由兩個程序執行,即兩個程序共享一段**,但會拷貝乙份資料,即子程序的資料空間、堆疊空間都會從父程序得到乙份拷貝,而不是共享。

⑫ 程序建立的另乙個函式:

pid_t vfork(void)

⑬ exec函式族:用被執行的程式替換呼叫它的程式

⑭system函式:執行一條命令

(1)system原型:int system(const char* command);

(2)system簡單實現:

int system(const

char *cmdstring)

if((pid = fork()) < 0

)

else

if(pid == 0

)

else

//父程序}}

return status; //

如果waitpid成功,則返回子程序的返回狀態

}

⑮程序等待

(1)pid_t wait(int* status);

(2)pid_t waitpid((pid_t pid, int * status, int options);

2. linux程序間通訊(無名管道和有名管道、訊號、訊息佇列、共享記憶體、訊號量、套接字)

linux 程序控制

什麼是程序 每乙個程序在系統中都有唯一的id標示它,此id為程序標示符 程序標示符的型別 pit t,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...

Linux程序控制

linux程序控制 獲取pid include include pid t getpdi void 獲取本程序id pdi t getppid vodi 獲取父程序id,及獲取建立子程序的程序id 程序建立 include pid t fork void 建立子程序 呼叫一次返回兩次值 1.父程序中...

linux程序控制

linux程序控制 編寫命令直譯器 一 背景 之前在 計算機作業系統 這本書中已經多次接觸了程序這一概念,而程序在作業系統中具體是做什麼的呢?卻沒有實際的與程序發生過互動,因此也就沒有實際的感受。對於我來說程序僅僅停留在概念的層面上 程序是程式執行時的記憶體空間和設定或者說程序就是程式的進行時。沒有...