行程间通讯和同步.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
行程间通讯和同步

第3章 行程間通訊與同步 本章提要 行程間通訊 同步 臨界區的實作 同步問題的經典範例 監督器 死結 實作探險記:執行緒同步機制的程式設計範例 合作行程 會與其他行程共享資訊,或是影響其他行程所執行之指令的行程 行程間通訊:合作行程之間必定需要某些溝通的機制,以傳遞所需的指令或資料 同步:行程合作過程中所牽涉到的協調問題與處理機制 3-1 行程間通訊 (IPC) 共用的檔案:行程間最常見的資訊共享方式,傳遞的資訊量僅受限於檔案系統的最大長度 共享記憶體:由作業系統提供某種機制,讓不同行程可以同時存取到某塊記憶體 比共用檔案的傳遞速度快,但長度比較受到限制 執行緒本身就內含了共享記憶體的概念 信號:當行程A想要告知行程B某事發生或完成時,可以傳送特定的信號給行程B 可以用來進行事件的告知,但是如果需要傳送特定資訊時,還需要搭配其他的行程間通訊機制 Unix的信號種類與處理常式設定 信號:也稱為軟體中斷 行程可以使用kill系統呼叫來傳送信號給其他行程 int kill (int pid, int sig); 行程收到信號的處理方式 捕捉信號:提供信號處理函式 忽略信號 使用預設的處理方式 (見下表) 使用signal系統呼叫來設定所需的處理方式 int (*signal (int sig, void (*func) (int))) (int); Unix中一些常見的信號定義 訊息傳遞系統 行程間直接溝通 溝通雙方必須要知道對方的身分, 一個通訊鏈結只有2個行程參與,可單向 / 雙向 send_process(pid, message) receive_process(pid, message) 透過信箱間接溝通 通訊鏈結可以由數個行程共享 涉及許多權限管理的問題 create_mailbox(mbx) delete_mailbox(mbx) send_mailbox(mbx, message) receive_mailbox(mbx, message) 阻隔式傳送 vs. 非阻隔式接收 不論是直接或間接形式的溝通,都會面臨收送雙方不同步的情況。 例如傳送端已經送出,但接收端沒有去收;或是接收端已經呼叫receive,但傳送端還沒有送出資料 阻隔式傳送/阻隔式接收:讓等待的一方進入懸置狀態,直到資訊被接收後再繼續 非阻隔式通訊: 非阻隔式傳送:傳送端行程送出訊息之後,不必等訊息被接收,就可以繼續執行後面的動作 非阻隔式接收:接收端行程在嘗試讀取訊息之後,不論是否有收到訊息,都可以繼續執行後續的動作 當傳送端與接收端都是使用阻隔式通訊時,兩者之間就會同步 Windows 2000/XP的IPC 信號:行程與外界的一種低階通訊方式 共享記憶體:可以使用在行程間的大量資料通訊,需要同步機制來確保資料的完整性 Pipe:在行程間使用位元組串流形式的通訊鏈結 郵件槽:類似信箱的非阻隔式通訊機制,使用可變長度的訊息,是主從式架構的單向鏈結 socket:以TCP/IP協定為基礎的網路通訊機制 行程間通訊的設計考量 通訊鏈結的類型:直接或間接 共享通訊鏈結的行程數目 通訊鏈結的方向性:單向或雙向 訊息長度:固定長度或可變長度 傳送的是訊息複本或是訊息的參照位址 單方行程片面終止時要如何處理 緩衝 當通訊鏈結中沒有緩衝設計時,如果傳送端傳送資料的速度,遠快於接收端的接收速度時,傳送端就會經常處於等待的狀況 可以利用緩衝區來改善 此時,必須另外確認資料已被讀取, 例如: 在傳送端執行: send(receiver, data); receive(receiver, ack); 在接收端執行: receive(sender, data); send(sender, ack); 圖3-1 通訊鏈結的緩衝 3-2 同步 合作行程之間可能在不同的時機點發生交互影響 在單處理器系統:合作行程是根據排程的結果輪流在CPU中交錯執行,使得結果看起來好像是同時執行一樣 在多處理器系統:合作行程不但可能交錯執行,甚至可能確實是同時執行 同步機制:確保在多個合作行程同時執行的環境中,不同行程的運算不會相互干擾 合作行程間的可能問題 飢餓 死結 競賽狀況 共享資料的不一致現象 臨界區 合作行程所執行的程式碼中,有些區段會涉及共用資源,不能讓其他行程也同時存取,因此稱為臨界區 臨界區的結構: Enter_section(); 入口區 critical section 臨界區 Exit_section(); 出口區 入口區:通常會做些動作來取得進入臨界區的許可 等待進入的行程可以採取忙碌等待的方式,或是進入懸置狀態,等待被喚醒 出

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档