iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
自我挑戰組

跟著FreeBSD官方handbook入門UNIX系列 第 13

[FreeBSD 入門] PROCESS / 進程

  • 分享至 

  • xImage
  •  

常常看很多書裡都會提到{進程},每次看到都不知道{進程}到底是什麼....
今天就來了解一下 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的進程號來標識每個進程。
用戶編譯程序的源代碼以創建可執行文件,
包含的幾個部分:

  1. 一組用來描述文件屬性值的標頭(headers)。
  2. 源代碼。
  3. 在程序啟動時具有初始值的數據的m / c語言表示,
    執行並指示Karnel應分配多少空間,未初始化的數據,稱為brs2(內核在運行時將其初始化為O)。
  4. 其他部分如符號表信息。 bss(由符號開始的塊)來自IBM 7090 m / c上的程序集偽運算符。

內核在執行期間將可執行文件加載到主記憶體中。
系統呼叫(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/

以下待補....

Process Data Structure

Context of a Process

PROCESS STATE AND TRANSITIONS

SLEEP AND WAKEUP


上一篇
[FreeBSD 入門] UNIX文件系统結構的基礎知識
下一篇
[FreeBSD 入門] 探索 /etc
系列文
跟著FreeBSD官方handbook入門UNIX18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言