UNIX 什麼是程序

2021-06-27 06:23:57 字數 1335 閱讀 7361

對於乙個程式來說,他的被程式設計師寫好,通過編譯,就會以可執行檔案存放在磁碟了,他的存放格式elf格式,可能是二進位制檔案,也有可能是文字檔案,當使用者要使用程式時,就會通過系統的shell終端去執行命令,所以說程式時個靜態的特性,他是儲存在磁碟上的許多指令的有序集合,沒有執行的概念。而對於程序來說就是乙個動態的概念,他是程式在執行過程中被建立在虛擬記憶體中的,通過作業系統的排程,進行使用者態和核心太之間的排程,直到程序的死亡,其實程序就是乙個抽象的實體,它在程式執行的過程中,分配和釋放各種資源。

而對於乙個程式來說,它存放著資料節,正文節,段表,節以及節表

其中在在text正文節中存放著程式在編譯後的機器碼指令,elf heder中存放著乙個檔案的基本資訊和cpu的架構稱為系統資料段,系統資料段的結構體存放著程序物件的屬性,其中包括乙個程序的pid,記錄程序在記憶體中的檔案描述符,還有cpu的pc指標記錄當前程序執行的位置,以便於程序間的切換時,下次程序執行的指令位置,program段表;表示乙個程式在被載入到記憶體中 ,段表提示哪些節應被載入到記憶體中,data資料段中存放著資料的全域性變數,rodata為唯讀資料節,系統的資料段是作業系統把程式載入到記憶體中建立的檔案結構體變數的實體。

對於每個程序都有唯一標示程序的pid,每個程序在記憶體空間的位址是私有的,每個程序都有自己的pid還有自己父程序的pid其中的獲取方法就是通過lgetpid() 和getppid()函式來獲取。

通過程序的執行方式可以把程序分為三種程序:互動程序(該型別的程序是由shell控制的,互動程序既可以在前台執行也可以在後台執行),批處理程序(該程序不屬於某個終端,他是被提到乙個佇列中以便順序執行的程序),守護程序(該程序是在後台執行的,一般守護程序的消亡時間是和作業系統共存的)

程序不僅包括程式的指令和資料,而且還包括程式計數器,cpu的所有暫存器值以及儲存零時資料的程序堆疊。

通過程序的執行狀態可以分為:執行態(當乙個程序獲取所有程式的資源,只是還在沒有進入核心的cpu,此時作業系統通過程序的控制,掛到佇列中,等待時間片段,被執行,在ps/top檢視中status狀態時顯示的是r-running),擁有cpu的執行態(此時表示正在cpu中執行),等代態(此時程序在等待乙個事件的發生或是等待系統的資源,其中又分為可中斷s和不可中斷兩種狀態d),停止態和殭屍態。

程序在核心內結構體中成員動態建立虛擬儲存空間,當程序結束時,動態建立的空間會消失,但建立的系統結構體不會被消亡,稱為殭屍態。

殭屍態的**

2)通知核心來**:當子程序建立時,父程序告知核心父程序不**,

3)意外事故:當父程序建立子程序是,父程序提前結束,此時子程序成為孤兒程序,此時子程序會掛在init程序中。

永遠的UNIX 什麼是CHROOT?

什麼是chroot?chroot就是change root,也就是改變程式執行時所參考的根目錄位置。一般的目錄架構 bin sbin usr bin home chroot的目錄架構 hell hell bin hell usr bin hell home 為何要chroot?1.限制被chroot...

什麼是殭屍程序?

什麼是殭屍程序?在 unix linux 系統中,通過 fork 建立子程序。子程序結束時,他的父程序並沒有等待 呼叫 wait waitpid 他,則他成為乙個殭屍程序。但如果該程序的父程序已經結束了,那麼該程序就不會變成殭屍程序,因為每個程序結束的時候,系統都會掃瞄當前系統中所執行的所有程序,看...

什麼是守護程序?

守護程序是在後台執行不受終端控制的程序 如輸入 輸出等 一般的網路服務都是以守護程序的方式執行。守護程序脫離終端的主要原因有兩點 1 用來啟動守護程序的終端在啟動守護程序之後,需要執行其他任務。2 如其他使用者登入該終端後,以前的守護程序的錯誤資訊不應出現 由終端上的一些鍵所產生的訊號 如中斷訊號 ...