# Process ###### tags: `OS Note Pro` 在早期,CPU一次只能執行一個process,整個資源都被它占用,但今日已經發展出了multiprograming的技術,而要支援這樣的技術靠的就是**Process**。 [TOC] ## Process concept 在定義Process之前,我們必須先分清楚**Process**與**Program**的差別。 <font color="blue">Program:</font>是指存在Disk的程式碼(binary),"被動的"等待被call去memory裡被執行。 <font color="blue">Process:</font>是指在memory中執行的程式(memory中正在被執行program),CPU"主動的"調用並執行。 <font color="black orange">Process's component:</font> - Data section : 存global variable - Code section : 指令所在處 - Stack : 存local variable - Heap : 動態變數,ex: malloc - Activity information : 一些流程資訊,如 : program counter等 - Resource : 這裡說是file handler(處理程序),但不是很明確知道他的意思 了解了它的定義後,因為要知道她是如何在系統中運作,所以我們必須知道它的**狀態**,這能讓我們知道這個Process該在甚麼時候做甚麼。 <font color="black orange">State of process:</font> - new : ~~在disk的狀態,還沒被指派成process~~ The process is being created(Process正在被創建) - Ready : 在memory的狀態,隨時可以被scheduler派遣到CPU - Run : 在CPU中執行 - Wait : 被I/O 或 event發生而停下來等待(等待事件發生),好了後回到Ready - Terminate : 執行完畢或終止 ### Process control block(PCB) 知道了process的狀態後,接下來就要了解該怎麼協調process的運作啦。 而管理這些process的就是靠在kernel中的這麼一個**資料結構 : PCB**,它記錄了process的各種資訊,以至於在CPU中要處理這些process只要透過這個table就能知道它的各種資訊了。每一個process都有各自的PCB,而PCBs的set稱為"Process table"。 <font color="black orange">PCB's content:</font> - Process state - Process number : 該process的PID - Program counter : 每個process都有code section,這時當然需要program counter才能知道下一個instruction要執行哪行 - PCB pointer : 指到下一個link的PCB - <font color="blue">CPU scheduling informaion(priority)</font> - <font color="blue">Memory management information</font> . . .(base/limit memory) - <font color="blue">Register</font> - <font color="blue">I/O ~~dive management~~ state information</font> ### Context Switch <font color="blue">Definition: Kernel saves the old state of process and loads the saved state for new process.</font> 為了達到**multiprograming**以及**Time sharing**,我們需要在process間不斷的切換,所以PCB就扮演了很重要的角色啦。 :::info 執行過程: 當有一個process執行到一半被interrupt,CPU要先去執行其他process時,會先將原來的process state存在該PCB(a)中,接著去reload要被執行的PCB(b)的state,執行完要回來就save PCB(b)的state,然後同樣的reload PCB(a)繼續執行. . . ::: ## Process Scheduling 接著就是OS的一個很重要的工作---排程。 要做scheduling 的原因有2: 1. Multiprograming : CPU的使用率要高。 2. Time sharing : 使程式能與user互動,必須不斷做context seitch。 ### Long-term scheduler 將Disk的program搬到memory,決定multiprograming的程度,通常Long-term的速度是較慢的,因為Program的數量是人給了才有,且得依照memory量大小決定能不能搬。 :::info Scheduling的目的都是希望能夠讓CPU的使用效率越高越好,所以Long-term對於I/O和純計算的program數量間的協調必須要做好,不能指偏向一個不然就會沒用到、浪費或Idel在那了。 <font color="red">Select a good mix of CPU bound and I/O bound process </font> ::: :::warning I/O的發生應該都從Disk來吧? 一些device有些要求寫成封包等待被拿進memory被CPU執行吧。 . . . 待求證 ::: ### Mid-term scheduler 在memory與disk間做job的swap,動態協調CPU要執行的job,進一步增加CPU執行效率。 :::success 現在很多OS都沒有用Long-term了,因為virtual memory的出現能夠加速memory與disk的傳輸,所以Mid-term取代了Long-term,使用者的program也能夠直接存在所謂的virtual memory。 ::: ### short-term scheduler 決定memory要交給CPU執行的job,這個挑選job的執行時間必須很快,因為CPU的運算可是分秒必爭的阿。 ## Operation Process 這裡主要是來介紹一些process的基本功能如:**fork()、excelp()、wait()等**,以及這些操作帶來的現象。 ### fork() and child process 在不同的系統,fork()帶來的結果皆有不同 1. child 與 parent 的 resource sharing - 完全複製parent - 只複製一些 - 完全沒複製 2. 執行狀態 - 兩個同時執行、不知道誰先誰後完成 - parent等child完成才執行 3. ** [address space](https://en.wikipedia.org/wiki/Address_space) (指一些變數或資料的address?) - 完全複製parent的程序,溝通透過shared memory - 有新的程序給child,溝通透過message passing :::warning 第3點的溝通指的是與parent溝通嗎? 還有address space到底泛指哪個部份呢? ::: ### excelp()、wait() excelp()會將child的原程式全部替換成新的要執行的程式(毀掉舊的code),但該process仍為parent的child,所以仍舊wait()的到它。 ### Process terminate() Terminate 有3種狀況 : **執行完成、exit()、abort(pid)**。 - <font color="blue">exit() : 會將原process的resourse(file handler、open file、allocate memory等) deallocate。</font> - <font color="blue">abort() 原因有2 : 這個process超出了allocate給他的memory範圍; 這個Task已經不需要了</font> ## Interprocess Communication <font color="black orange">**IPC** : IPC指的是在一個或多個process之間透過multiple threads傳遞data做溝通的一些方法。</font> ### Shared memory ~~前一章有提過。~~ 有一個記憶體區塊是用來當shared memory使用。 process之間只要透過這區塊的address就可以溝通。 <font color="blue">Feature:</font> 1. Faster 3. But, 不能同時寫入,否則會dead lock。 <font color="black orange">要用shared memory來溝通的process必須要告知OS來移除constraints of access memory,不然kernel會擋。</font> ### <font color="black orange">Message passing</font> 透過send和receive的方式來溝通。 對於hardware的link 可以是 : <font></font> 而logical property 有: 1. Direct or Indirect communication 2. Symmentric or Asymmentric communication 3. Blocking or Nonblocking 4. . . . #### Direct vs Indirect <font color="blue">Direct:</font> one-to-one的架構,必須要能夠辨別彼此,一個傳,另一邊馬上就收。 <font color="black orange">Processes之間要明確得為對方命名</font> <font color="black orange">有單向的架構,但通常是雙向的。</font> <font color="blue">Indirect:</font> many-to-many,像一個mail box,而這個mail box由kernel管理。兩邊都到mail box寄和取,不需要知道彼此,但也衍生出Blocking or nonblocking的問題。 <font color="black orange">mail box要自己獨特的ID,process之間要shared同一個mail box才能溝通。</font> <font color="black orange">有單向的架構,但通常是雙向的。</font> #### Blocking vs nonBlocking 又各自分為send和recive的blocking和nonblocking。 <font color="black orange">依據blocking or non,buffer可分為: 1. Zero buffer: Sender and receiver都是blocking 2. Bounded buffer:Sender 是blocking的,滿了就會被block。 3. Non bounded buffer: Nonblocking的Sender,有messege傳就對了</font> ### Socket port 傳binary的封包。 IP: Port: ### Remote process communication(RPC) Def: Call another process's procedure(function) rather then stream of bytes. <font color="black orange">讓process能夠過network system來procedure call 其他電腦或process</font> 機制是透過 : **stub** <font color="black orange">Client stub:</font> 1. 將parameter包裝進messege 2. 透過OS傳給server 3. 等待return <font color="black orange">Server stub:</font> 1. 收到Client的package 2. Unpackage得到parameter 3. 到自己的系統找相對應的procedure 4. 運算完return回傳值
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up