程序控制程式設計

2021-08-11 22:51:26 字數 2623 閱讀 7814

一.程序的分類

互動程序,批處理程序,守護程序。

二.程序的屬性

1.程序id(pid):是唯一的數值,用來區分程序

2.父程序和父程序的id(ppid)

3.啟動程序的使用者id(uid)和所歸屬的組(gid)

4.程序狀態:狀態分為執行r,休眠s,殭屍z

5.程序執行的優先順序

6.程序所連線的終端名

7.程序資源占用,如占用資源大小(記憶體,cpu佔用量)

三.linux程序的管理是通過什麼實現的

1.ps監視程序工具

2.pgrep查詢程序工具

3.top監視系統任務的工具

四.程序和程式的區別

程序是動態的,程式是靜態的:程式是有序**的集合;程序是程式的執行。通常程序不可在計算機之間遷移;而程式通常對應著檔案、靜態和可以複製

程序是暫時的,程式使長久的:程序是乙個狀態變化的過程,程式可長久儲存

程序與程式組成不同:程序的組成包括程式、資料和程序控制塊(即程序狀態資訊)

程序與程式的對應關係:通過多次執行,乙個程式可對應多個程序;通過呼叫關係,乙個程序可包括多個程式。

五.程序的狀態

執行狀態:程序正在占用cpu

就緒狀態:程序已具備一切條件,正在等待分配cpu的處理時間片

等待狀態:程序不能使用cpu,若等待事件發生則可將其喚醒

六.程序包含哪些段

linux中的程序包含3個段,分別為「資料段」、「**段」和「堆疊段」。

資料段」存放的是全域性變數、常數以及動態資料分配的資料空間;

**段」存放的是程式**的資料。

堆疊段」存放的是子程式的返回位址、子程式的引數以及程式的區域性變數等。 

七.程序的排程方式和排程演算法

排程方式:搶占式和非搶占式

排程演算法:

先來先服務排程演算法

短程序優先排程演算法

高優先順序優先排程演算法

時間片輪轉法

八.殭屍程序怎麼產生

1.父程序呼叫fork建立子程序後,子程序執行直至其終止,它立即從記憶體中移除,但程序描述符仍然保留在記憶體中(程序描述符占有極少的記憶體空間)。

2.子程序的狀態變成exit_zombie,並且向父程序傳送sigchld 訊號,父程序此時應該呼叫 wait() 系統呼叫來獲取子程序的退出狀態以及其它的資訊。在wait呼叫之後,殭屍程序就完全從記憶體中移除。

3.因此乙個殭屍存在於其終止到父程序呼叫wait等函式這個時間的間隙,一般很快就消失,但如果程式設計不合理,父程序從不呼叫wait等系統呼叫來收集殭屍程序,那麼這些程序會一直存在記憶體中。

九.什麼叫程序互斥

程序互斥是指當有若干程序都要使用某一共享資源時,任何時刻最多允許乙個程序使用,其他要使用該資源的程序必須等待,直到占用該資源者釋放了該資源為止

十.什麼叫臨界資源

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

十一.什麼叫臨界區

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

十二.什麼叫死鎖

多個程序因競爭資源而形成一種僵局,若無外力作用,這些程序都將永遠不能再向前推進

十三.程序建立

1.pit_t fork(void)

功能:建立子程序

返回值:

0: 子程序;子程序id(大於0):父程序;-1: 出錯

子程序的資料空間、堆疊空間都會從父程序得到乙個拷貝,而不是共享。

2.pit_t vfork(void)

功能:建立子程序

3.fork和vfork的區別

(1) fork:子程序拷貝父程序的資料段

vfork:子程序與父程序共享資料段

(2) fork:父、子程序的執行次序不確定

vfork:子程序先執行,父程序後執行

十四.exec函式族

exec用被執行的程式替換呼叫它的程式。

區別:fork建立乙個新的程序,產生乙個新的pid。

exec啟動乙個新程式,替換原有的程序,因此程序的pid不會改變

函式格式:int execl(const char * path,const char * arg1, ...)

引數說明:path:被執行程式名(含完整路徑);arg1 – argn: 被執行程式所需的命令列引數,含程式名。以空指標(null)結束。

十五.程序等待

pit_t wait (int * status)

功能:阻塞該程序,直到其某個子程序退出

pit_t waitpid (pid_t pid, int * status, int options)

功能:會暫時停止目前程序的執行,直到有訊號來到或子程序結束

引數說明:如果不在意結束狀態值,則引數status可以設成null。

引數pid為欲等待的子程序識別碼:pid<-1 等待程序組識別碼為pid絕對值的任何子程序。pid=-1 等待任何子程序,相當於wait()。

pid=0 等待程序組識別碼與目前程序相同的任何子程序。pid>0 等待任何子程序識別碼為pid的子程序

引數option可以為0 或下面的or 組合:

wnohang:  如果沒有任何已經結束的子程序則馬上返回,不予以等待;wuntraced :如果子程序進入暫停執**況則馬上返回,但結束狀態不予以理會。

程序控制程式設計

q 為何需要多程序 或者多執行緒 為何需要併發?a 併發技術,就是可以在同一時間同時執行多條任務的技術,使用者進行的任務往往不止乙個,單 cpu計算機實際上只能在乙個時間片段內執行一條指令。linux 使用 程序排程 實現併發,為每個程序指派一定的執行時間,這個時間通常很短,然後依照某種規則,依次單...

程序控制程式設計

1.多程序與併發的關係 當有多個執行緒在操作時,如果系統只有乙個cpu,則它根本不可能同時真正進行乙個以上的執行緒,它只能把 cpu執行時間劃分成若干個時間段,再把時間段分配給各個執行緒執行,在乙個時間段的執行緒 執行時,其他執行緒處於掛起狀態。這種方式我們成為併發。2.kill,pkill,xki...

程序控制程式設計

程序的生命週期 建立 每個程序都是由其父程序建立,程序可以建立子程序,子程序又可以建立子程序的子程序 執行 多個程序可以同時存在,程序間可以通訊 撤銷 程序可以被撤銷,從而結束乙個程序的執行 程序的狀態 執行狀態 程序正在占用cpu 就緒狀態 程序已具備一切條件,正在等待分配cpu的處理時間片 等待...