iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

當你凝視linux, linux也在凝視你系列 第 3

Day3 program, process, thread傻傻分不清楚

昨天講完了linux的核心架構,今天就開始讓我們認識重要的部分吧。
以下是三個名詞,程式(program)、行程(process)、執行序(thread),在作業系統中最常見的解釋。

程式(program)

通常是指完成特定任務的有序指令集合,或是一個可執行的文件。也就是由工程師所編寫的程式碼(code),放在硬碟中,尚未讀入記憶體的的code。

行程(process)

是一段執行中的程序,內容已經被移入記憶體,是一個"活生生"的個體,在一個行程裡面會有可執行的指令,也包含了行程執行時所需要的活動資訊。
在作業系統中,會用行程控制塊(process control block, PCB),記錄行程所需要的資訊,常見的有以下幾種

  • 行程目前的狀態(state):像是運行中、就緒、僵屍狀態(zombie state)等等
  • 程序計數器(Program Counter, PC):紀錄目前行程執行到哪條指令。
  • CPU暫存器(CPU registers):在上下文切換時保存CPU當下的寄存器狀態,以便切換回來的時候能夠繼續執行。
  • CPU排程資訊(CPU scheduling info):包含行程的優先權等級、排程的序列等等。
  • 記憶體管理(memory management info):行程使用的記憶體資訊,像是使用的分頁表(page table)
  • 文件資訊:行程打開的文件等等。

執行緒(thread)

作業系統分配記憶體、CPU時間等等資源的基本單元。

上述都是最常見的解釋,但是,人生最重要的就是這個BUT,Linux 裡面並沒有區分行程與執行緒,而是一魚兩吃,用 task_struct可以代表process 或 thread。
從實作的角度看來
建立user process的方法是有三個系統呼叫: fork, vfork, clone
建立kernel thread的方法有兩種系統呼叫: kernel_thread, kthread_create

而以上這些API還有library function最後都會call到 `_do_fork`
而`do_fork`所做的事就是填 `task_struct`,只要填好task_struct就是把該task給創建出來了 !!!

以上的話在現今版本的linux是錯的,哪裡有問題有待明日分曉!!

day3,遇到中秋連假,又幫母親的電腦進行系統轉移搞得七晚八晚,今天只能濫竽充數了。


上一篇
Day2 簡單介紹linux kernel 的架構
下一篇
Day4 橫空出世的 kernel_clone
系列文
當你凝視linux, linux也在凝視你30

尚未有邦友留言

立即登入留言