老狗——進程通信、線程

一、進程通信

1.高級進程通信的類型:

  • 共享存儲器系統(操作存儲區方式)
    基於共享數據結構的通信方式(低級)
    基於共享存儲區的通信方式(高級)
  • 消息傳遞系統(發–收方式)send receive
  • 管道通信(中間文件方式)字符流形式
  • Client-Server system : 套接字(Socket)、遠程過程調用(遠程方法調用)

進程之間的互斥和同步——低級通信(效率低、通信對用戶不透明)

2.消息傳遞通信的實現方法

1)直接通信方式
通常利用系統通信命令(原語):
Send(Receiver, message);
Receive(Sender, message);

2)間接通信方式
基於共享數據結構的實體用來暫存發送給目標進程的消息;接收進程則從該實體中,取出對方發送給自己的消息。通常把這種實體稱爲信箱。

3.消息緩衝隊列通信機制

本機通信消息結構,如下:

type message buffer = record       

       sender;   發送者進程標識符         

        size;   消息長度       

        text;   消息正文       

        next;   指向下一消息緩衝區的指針

end

4.PCB中需要記錄有關通信的信息項

type ProcessControlBlock =record
	 …
	 mq;         消息隊列隊首指針
	 mutex;    消息隊列互斥信號量
	 sm;          消息隊列資源信號量
	 …
end

//發送原語:
procedure send(receiver, a)
    begin
        getbuf(a.size, i);  根據a.size申請緩衝區
        i.sender :=a.sender;  將發送區a中的信息複製到 i
        i.size :=a.size; 
        i.text :=a.text; 
        i.next :=0;
獲取接收進程內部標識符
	    getid(PCB set, receiver, j); 
	   insert(j.mq, i); 將消息緩衝區插入目標消息隊列
	   signal(j.sm);
    end
    
//接收原語:
procedure receive(b)
    begin
        j:=internal name;  j爲接收進程內部標識符
        wait(j.sm);
        wait(j.mutex);
	    remove(j.mq, i);  將消息隊列中的第i個消息移出
        signal(j.mutex);   
        b.sender :=i.sender;
        b.size :=i.size;  將消息緩衝區i中的信息
        b.text :=i.text;  複製到接收區b
    end

PCB

二、線程

1.線程的屬性

多線程OS中,一個進程包括多個線程,每個線程都是利用CPU的基本單位。

2.同步和通信機制

互斥鎖
條件變量
條件變量

3.線程的實現方式

內核線程KST(kernel-level thread)
用戶線程ULT(user-level thread)
組合方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章