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:無容量限制