常常看很多書裡都會提到{進程},每次看到都不知道{進程}到底是什麼....
今天就來了解一下 UNXI 的進程是什麼東西吧!^_^
本文節錄,Anoop Chaturvedi, B.L. Rai - Unix and Shell Programming
3.3章的內容:
(直翻+自己修改) ...抱歉可讀性很差......
進程是一個執行程序 (program),由CPU解釋的字節模式組成
作為m / c指令
(稱為"文本(code or text)"),"數據(data)"和"堆疊(stack)"。
許多進程似乎同時執行,因為內核調度它們以便執行,而幾個進程可能是一個程序的實例。
通過遵循自包含的嚴格指令序列來執行進程,
並且不會跳轉到另一個進程,它會讀取和寫入其數據和堆疊(stack)部分,
但它不能讀取其他進程的堆疊(stack)和數據部分。
進程與其他進程之間,都是通過系統調用(system call)來通訊。
UNIX系統上的進程是由fork系統調用(system call)創建的實體。
除了進程O(sched)之外的每一個進程,都是在其他進程調用fork系統呼叫時被創建的。
該調用fork系統呼叫的進程稱為父進程和新創建的進程
被稱為子進程。
內核通過其名為PID的進程號來標識每個進程。
用戶編譯程序的源代碼以創建可執行文件,
包含的幾個部分:
內核在執行期間將可執行文件加載到主記憶體中。
系統呼叫(system call)和加載的過程由至少三個部分組成,稱為區域;
文本(code or text),數據(data)和堆疊(stack)。
文本和數據區域對應於可執行文件的文本和數據brs部分,
但堆疊(stack)區域是自動創建並在運行時由內核動態調整其大小。
堆棧由邏輯堆疊幀(frame)組成,
在調用函數時被推入(push),在返回時被擠出(pop);
一個稱為堆疊指針的特殊寄存器指示當前堆疊(stack)深度。
在UNIX系統中,進程可以在用戶(user mode)或內核(kernel mode)模式中執行。
它為每種模式使用單獨的堆疊(stack)。
用戶堆棧包含參數,局部變量(local variables)和其他在用戶模式下執行函數的數據。
內核堆疊(kernel stack)包含用於在內核模式下執行的函數的堆棧幀。
該內核堆疊(kernel stack)上的函數和數據條目是指內核中的函數和數據,而不是用戶
程序,但其構造與用戶堆疊(user stack)的構造相同。
當進程在用戶(user mode)模式下執行時,進程的內核堆疊(kernel stack)為空(null)。
找到了一個不錯的文章:
https://www.brianstorti.com/an_introduction_to_unix_processes/
以下待補....