Process Concept

process
當program被執行時,就會變成process

process通常包括3大部份
1
program counter,registers
2
stack,ex:function parameters,return addresses,automatic variable
heap,ex:memory dynamically allocated durning run time
3
data,ex:static variables,constants
text,ex:code


PCB(process control block)/task control block
集中process相關資訊的一個table
內容主要如下
process number:process ID
process state:包括new,ready,running,waiting,halted,…
program counter: 用來指示下一個要被執行的位置
cpu registers:所有cpu registers的內容
ex:accumulators, index registers, stack pointers, general purpose registers, condition-code information
cpu scheduling information:包括process priority,scheduling參數等資訊
memory-management information 包括Base/limit register, page table,…等
accounting information: 用了多少cpu time,CPU的Max time, Quantum,…等
I/O status information: 未完成的I/O request, I/O queue的等待編號, the list of I/O devices allocated to this process, a list of open files


process state
主要有以下
new:process被產生
ready:process正在待命狀態(準備讓processor執行)
running:process正被執行(被processor執行中)
waiting:process正在等待一些事件被觸發
terminated:process結束

state transition
各process state轉換的情況主要如下
new->ready: admitted
ready->running: scheduler dispatch
running->ready: interrupt, share-time expire
running->terminated: exit
running->waiting: i/o or event wait
waiting->ready: i/o or event completion

process scheduling queue
用來讓cpu scheduler從可用的process中選擇下一個要讓CPU執行的process
主要維護的有以下
job queue:系統所有process集合
ready queue:在memory內的process,準備及等待進入running state被CPU執行
device queue:主要在等待I/O
event queue:主要在等待事件觸發

schedulers
分為兩類
long-term scheduler/job scheduler
 選擇那一個process要被放入ready queue
short-term scheduler/cpu scheduler/process scheduler
 選擇那一個process要給CPU執行

………………………………………………

process creation
parent process能建立children processes,並用PID(process identifer)管理與識別children process

resource sharing方式
全部資源共享
部份資源共享
不共享資源
execution方式
parent and children同時執行
parent等children結束後才執行
address space方式
child process複製parent process,以建立child process ex:fork()
child process使用program loaded,載入program到memory ex:exec()
terminate方式
process回傳可刪除的狀態,要求os terminate ex:wait()
parent process 強制terminate ex:kill()
ps:
若terminate沒處理好,process將變成zombie,orphans

ex:
#include
#include
#include
int main()
{
 pid_t pid;
 int num=0;
 pid=fork();
 if(pid==0){ //child process
  execlp(“/bin/ls”,”ls”,NULL);
 }else{ //parent process
  wait(NULL);
  printf(“child eomplete”);
 }
}

…………………………………..

ps:
google chrome browser
multiprocess
1browser:user interface,disk,network i/o
2renderer:web page,deals with html,javascript,sandbox
3plug-in:
ps:
single process browser problem
if one web site causes trouble,entire browser can hang or crash

………………………………………………………………………..

cooperating process(行程間的合作)
常見優點有:
 information sharing
 computation speedup
 modularity ex: ls | grep abc
 convenience
實作用IPC(inter process comunication)
主要有以下
 shared memory:不透過kernel處理, 主要使用shmget(),mmap()實作
 message passing:會透過kernel處理, 主要使用send(),receive()實作
 PIPE

IPC shared memory
Process將部份空間對應到相同一個shared memory segment,讓其他process可以讀取,以達到交換資料的目的,做法如下:
 1.ProcessA複製到同為User Space的shared Memory
 2.PorcessB再從Shared Memory複製回去
效能較message passing佳
programmer負擔重,OS負擔輕
 主要由Programmer來負責處理共享的方法
 OS只負責提供共享記憶體空間,不會在提供任何額外的資源
較容易有bug: 因為訊息分享的方式需programmer自己設計
常見問題:
 producer-consumer problem
 解決方法有:unbounded-buffer(不限制資源,但不可能),bounded-buffer(主要方法)
 Race Condition(競爭情況)
 解決方法有:參考synchronization

IPC message passing
Process透過kernel將資料直接傳到另一個process,主要作業為send和receive,做法如下:
 1.ProcessA從User Space複製到Kernel Space
 2.ProcessB再從Kernal複製回User Space
效能較shared memory差
programmer負擔輕,OS負擔重
 Programmer不需額外負擔共享的方法
 需要OS提供額外支援 ex:Link Management, Link Capacity,Message Lost處理
ps:
兩個Process溝通時需遵守的歩驟
1.建立Communication Link
2.互傳Message
3.傳輸完畢後release link

message passing implementation議題
主要有三個
direct or indirect communication
synchronous or asynchronous communication
automatic or explicit buffering

direct or indirect communication
direct communication
 訊息直接到目地process
  1.兩個要聯繫的process只需知道對方身分即可
  2.進行通訊的兩個process之間只有一條link
 可分為
  1.對稱:接收者或傳送者在聯繫時必須互相指名
   send(p,message)傳一個message給P
   receive(Q,message)從Q那接收一個message
  2.不對稱:只有發送只需先確定接收者的名稱,而接收者不須指出發送者的名稱
   send(P,message)
   receive(id,message)自任何一個process接受一個message(收方不指定送方)
indirect communication
 訊息集中在一個地方,在由process自己取
 溝通雙方必須透過mailbox來傳送與接收訊息
  send(mailbox,message)送一個message到mailbox
  receive(mailbox,message)從mailbox接收一個message
 有以下的特性
  1.具有共用的mailbox的process才能建立link
  2.一條link可以連到兩個以上的process

synchronous or asynchronous communication
synchronization
 blocking
 blocking send(等待傳送):傳送行程等待直到接收行程或mailbox接收訊息
 blocking receive(等待接收):接收者等待直到有效訊息出現
 ex:sendmessage(),getmessage()
asynchronous
 non-blocking
 nonblocking send(非等待傳送):傳送行程送出訊息及重新操作 
 nonblocking receive(非等待接收):接收者收到有效訊息或無效資料
 ex:postmessage(),peekmessage()

buffering
zero capacity無容量
bounded capacity:限制容量
unbounded capacity:無容量限制