# Child Process ###### tags: `IT鐵人` ## Context Switching 前面提到電腦會輪流執行不同的程式,而在輪流的過程中一定會有轉換的步驟,這個步驟就叫做Context Switching。 它的定義是:當CPU要切換到另一個process時,OS要儲存舊有的process狀態,並且載入新的process狀態,就稱為Context Switch。 ![](https://i.imgur.com/vUAFtab.png) 就像是這張圖一樣,在切換的過程中會由系統管理,並且會花費一定的時間,時間長短大多取決於硬體,例如Context內容多寡、指令速度的快慢、Register是否夠用。 ## 降低Context Switch Overhead Overhead指的是成本,通常在OS中指的是額外的時間成本,改善Context Switch Overhead的主要方法有下面兩者: * Multiple Registers Set 如果只有一套Register,那麼新Process要載入的時候要等舊Process存會去PCB才行。 每個Process都有自己的Registers Set的話,當Context Switch發生時,只要把point切換到另一套Registers Set就好。 * Multithread Thread的部分會在後面的章節說明,他的overhead會比切換process更低。 ## Dispatcher Dispatcher的目的就是分配CPU給CPU Scheduler所挑出的user process,他的主要工作包含以下三者: 1.Context Switching 2.Switch mode to user mode 3.Jump to the execution entry of that process 以上三個時間加總稱為Dispatch Lantency,當然我們也會希望能減少這樣的時間。 ## Process Control Operations 電腦的Process也有複雜的關係,不是所有的Process都是平等的,有的會有上下關係,有的會有資料共用的關係等等,底下會講一些Process的觀念。 ### Process Creation 任何一個process均可建立process,通常parent prceoss creates many child processes。 建立child process的目的是要他執行工作。 child所做的工作,分為下面兩種類型: 1.與parent相同的工作,ex:vi editor(Linux常用的文字編輯指令)。 2.與parent不同的工作,specific task。 ### Child Process Resources Process的資料提供來源有兩者: 1.OS 2.parent(全部與child共享、subset of resources) ### Parent與Child之互動關係 parent process創立child process之後可能有不同的對待方式,就像是不同的父母對不同的小孩有不同的待遇。 1.parent等待child完成工作。 2.parent和child同時進行工作。 ### Process之終止 process執行過程可能遭遇各種狀況,最常見的是完成工作發出system call(ex:Exit()),告訴kernel終止他,收回resource。 還可能發生異常,由kernel自行終止(ex:divide by Zero)。 也有可能parent動手處決child,例如:child已完成交辦工作、child使用過多resource、parent被kernel終止導致其下所有child一併終止(Cascading termination)。 不過也有可能parent終止後,OS允許child繼續存活,此時child的parent可能變成OS或是原先的grandparent。 ![](https://i.imgur.com/tk9kvfe.png) 此外child還有可能成為orphan或是zombie,這部分蠻有趣的,也是每年系上工作站被搞垮的原因之一,因為許多修OS的學生在工作站上面執行程式生成太多zombie,導致工作站塞爆無法進入。 |上一篇|下一篇| |--|--| |[Process](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SyJgqbJMF)|[常用Sysem Call](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/B1zxcLJmK) ## How to kill a child 因為有時child process需要被消除,而消除別的process又會用kill這個字,變成有時候google內容引人遐想。 ![](https://i.imgur.com/wzFpEkv.png)