作業系統 - 行程 (process)

Page content

名詞

行程 (process)

定義:執行中的程式 (program) 的實體 (entity)

線程 (thread)

一個 process 中可以包含很多 thread

  • thread 包含了各自的 thread id、程式計數器、暫存器、stack 等
  • 同ㄧ行程內的不同執行緒 共用一些資源 如 程式碼區域、資料區域、記憶體 等

這麼做的目的是減少 context switch (行程間環境切換) 造成的資源浪費 ; 但也因為有共用,如果兩個 thread 都改到同一個 global variable,就會有同步的問題。

thread 分成

  • kernel thread - 通常運作在背景 (background) 中
  • user thread -


生成 / 建立

透過 fork() 或 exec() 這兩個 system call 產生,這也被稱為 fork-and-exec 模式

fork() : 建立子程序

複製父行程的資訊閃生的這個副本就是子行程,子行程內包含前一個行程的 pid (parent pid)

exec() :

取代原本正在執行的程式,取代原本的 pid



終止

do_exit()



狀態

記錄在 行程描述器 (process descriptor) (task_struct) 中的 state 欄位

zombie

排程

在 Multitasking Operating System 中,可以同時有多個 process,但 CPU 一次只能執行一個 process,還沒輪到的就要先在 queue 中等待,這順序怎麼決定是個重要的問題。

?

而如果執行緒之間互相搶資源,則會有 deadlock 的問題

這裡在 thread 再說

不同的語言對於平行處理這方面有不同的

Haskell 有 Haxl erlang/elixir 對於這方面的處理則很特別

行程間切換 (contect switching)

行程間通訊

參考資料

Program/Process/Thread 差異

Process Creation, #1:由 shell 執行外部程式《基本觀念與範例》

https://hackmd.io/@sysprog/unix-fork-exec

https://www.geeksforgeeks.org/fork-system-call/ (關於 fork() 呼叫的例子)