從程式設計師角度來說,我們可以認為程序總是處於以下3個狀態之一:fork函式建立子程序後,子程序得到與父程序使用者級虛擬位址空間相同的(但是獨立的)乙份拷貝,包括文字段,資料和bss段,堆以及使用者棧,也就是說父程序和子程序所做的任何改變都是獨立的,不會反應在另乙個程序中。 此外子程序還將獲得父程序任何開啟檔案描述符相同的拷貝,這就意味著子程序可以讀寫父程序中開啟的任何檔案。下圖是linux程序的記憶體空間模型。
當乙個程序由於某種原因結束的時候,核心並不是立即把它從系統中清楚。相反,程序被保持在一種已終止的狀態中,直到被他的父程序**。當父程序**已終止的子程序的時候,核心將子程序的退出狀態傳遞給父程序,然後拋棄已終止的子程序,從此刻開始,該程序才在核心中真正的消除。否則乙個終止了但是還未被**的程序成為殭屍程序。
新建立的子程序幾乎但不完全與父程序相同。子程序得到與父程序使用者級虛擬位址空間相同的(但是獨立的)乙份拷貝,包括文字,資料和bss段,堆以及使用者棧。子程序還獲得了與父程序任何開啟檔案描述符相同的拷貝。父程序與子程序是併發執行的獨立程序。核心可以以任意方式交替執行他們的邏輯控制流中的指令。
再次強調,父子程序的位址空間是相同的,但是也是獨立的。他們都有自己的私有的位址空間。父程序對資料的任何改變不會在子程序中體現出來。
程序及程序控制
學習程序之前,先了解一下程式 所謂程式就是指編譯好的二進位制檔案,在磁碟上,不占用系統資源 cpu 記憶體.而程序是與作業系統相關,是指在記憶體中執行起來的程式,占用一些系統資源,每當乙個程式執行,就相應產生乙個程序。程序的一些相關資訊被放在乙個叫程序控制塊的資料結構中,稱之為pcb。linux下的...
Unix 程序控制
一 程序 程序id為1是init程序,在自舉過程結束時由核心呼叫。程序id為2是頁精靈程序,此程序負責支援虛存系統的請頁操作。也是核心程序。二 fork 對於父程序已經終止的所有程序,它們的父程序都改變為init程序,我們稱這些程序由init程序領養。此保證了每個程序有乙個父程序。init被編寫成只...
程序控制塊
程序控制塊 pcb 的結構 程序控制塊 pcb process control block 存放程序的管理和控制資訊的資料結構稱為程序控制塊。它是程序管理和控制的最重要的資料結構,每乙個程序均有乙個pcb,在建立程序時,建立pcb,伴隨程序執行的全過程,直到程序撤消而撤消。在不同的作業系統中對程序的...