作業系統 - 行程 (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)
行程間通訊
參考資料
Process Creation, #1:由 shell 執行外部程式《基本觀念與範例》
https://hackmd.io/@sysprog/unix-fork-exec
https://www.geeksforgeeks.org/fork-system-call/ (關於 fork() 呼叫的例子)