1.程序的定義
標準定義:程序是可併發執行的程式,是在乙個資料集合上的執行過程。
通俗來說,硬碟上的乙個可執行檔案經常被稱為程式,在linux系統中,當乙個程式開始執行後,在開始執行到執行完畢退出這段時間裡,它在記憶體中的部分就被稱作乙個程序。
2.程序的分類
程序一般分為互動程序、批處理程序和守護程序三類。
守護程序總是活躍的,一般是後台執行。守護程序一般是由系統在開機時通過指令碼自動啟用啟動或超級使用者root來啟動的。
3.程序的屬性
程序id(pid):是唯一的數值,用來區分程序。
父程序和父程序的id(ppid)。
啟動程序的使用者id(uid)和所歸屬的組(gid)。
程序狀態:狀態分為執行r、休眠s、殭屍z。
程序執行的優先順序。
程序所連線的終端名。
程序資源占用,如占用資源大小(記憶體、cpu佔用量)。
4.linux程序管理
通過程序管理工具實現,如ps(程序監視工具)、kill(終止程序工具,類似還有:killall、pkill、xkill)、grep(查詢程序工具)等。
5.linux程序的三態
就緒狀態:當程序已分配到除cpu以外所有必要的資源,只要獲得處理器便可立即執行,這時的程序狀態稱為就緒狀態。
執行狀態:當程序已獲得處理器,其程式正在處理器上執行,此時的程序狀態稱為執行狀態。
阻塞狀態:正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理器而處於阻塞狀態。引起程序阻塞的事件可有多種,如等待i/o完成、申請緩衝區不能滿足、等待信件(訊號)等。
6.linux下程式是如何轉化為程序的呢?
核心將程式讀入記憶體,為程式分配記憶體空間;核心為該程序分配程序識別符號pid和其他所需資源;核心為該程序儲存pid及相應的狀態資訊,把程序放到執行佇列中等待執行.程式轉化為程序後就可以被作業系統的排程程式排程執行了。
7.linux程序的組成
linux中乙個程序由三部分組成:**段,資料段,堆疊段
從記憶體的低位址到高位址依次為:
**段:二進位制機器**
資料段:儲存已被初始化的變數,包括全域性變數和已被初始化的靜態變數
未初始化資料段:儲存未被初始化的靜態變數,又稱bbs
堆:用於存放程式執行中動態分配的變數
棧:用於函式呼叫,儲存函式的返回位址,函式的引數,函式內部定義的區域性變數
8.可執行程式和記憶體映像的區別:
1)可執行程式位於硬碟,記憶體映像位於記憶體
2)可執行程式沒有堆疊(程式被載入到記憶體中才會分配堆疊)
3)可執行程式中未初始化資料段並不儲存在位於硬碟中的可執行檔案中
4)可執行程式是靜態的,不變的,記憶體映像動態變化
9.程序建立
1)獲取程序
系統呼叫getpid得到程序id,呼叫getppid得到父程序(建立呼叫該函式程序的程序)的id
2)啟動程序
fork()函式用於建立子程序。
vfork()函式用於建立乙個新的程序
exec系統呼叫
system,system函式用於執行shell命令
10.殭屍程序
當子程序先於父程序終止,而父程序又沒有呼叫wait函式等待子程序結束,子程序進入僵死狀態,並且會一直保持下去除非系統重啟.子程序處於僵死狀態,核心只儲存該程序的一些必要資訊以備父程序所需.此時子程序始終占用著資源,同時也減少了系統可以建立的最大程序數;如果子程序先於父程序終止,且父程序呼叫了wait或waitpid函式,則父程序會等待子程序結束。殭屍程序幾乎放棄所有記憶體空間,沒有任何可執行**,不能被排程,僅在程序列表中保留乙個位置,但是過多的殭屍程序會導致系統崩潰。
程序控制程式設計
q 為何需要多程序 或者多執行緒 為何需要併發?a 併發技術,就是可以在同一時間同時執行多條任務的技術,使用者進行的任務往往不止乙個,單 cpu計算機實際上只能在乙個時間片段內執行一條指令。linux 使用 程序排程 實現併發,為每個程序指派一定的執行時間,這個時間通常很短,然後依照某種規則,依次單...
程序控制程式設計
1.多程序與併發的關係 當有多個執行緒在操作時,如果系統只有乙個cpu,則它根本不可能同時真正進行乙個以上的執行緒,它只能把 cpu執行時間劃分成若干個時間段,再把時間段分配給各個執行緒執行,在乙個時間段的執行緒 執行時,其他執行緒處於掛起狀態。這種方式我們成為併發。2.kill,pkill,xki...
程序控制程式設計
一.程序的分類 互動程序,批處理程序,守護程序。二.程序的屬性 1.程序id pid 是唯一的數值,用來區分程序 2.父程序和父程序的id ppid 3.啟動程序的使用者id uid 和所歸屬的組 gid 4.程序狀態 狀態分為執行r,休眠s,殭屍z 5.程序執行的優先順序 6.程序所連線的終端名 ...