進程的同步與通信

寫給自己的話

隔了好久沒寫博客了。

自從換了後端研發的工作後,每天都挺忙的。忙着做需求,跟進線上bug,忙着跟前端/客戶端聯調。夜深人靜,細細想來,自己並沒有多少可以沉澱的東西。特別是跟朋友聊起未來3年的規劃,覺得未免有些漫無目標,虛度光陰了。

所以,決定給自己定一些細化的小目標,比如寫篇博客,權當一個新的開始。

正文

本文由來

翻看計算機操作系統(湯子瀛版),10.3節講述了進程的同步與通信機制。最近在看UNIX環境高級編程和UNIX網絡編程,此節於我理解甚有幫助,特以博客記之。

sleep與wakeup同步機制

進程等待任務完成時,可調用sleep使自己進入睡眠狀態;待任務處理完,中斷處理程序中的wakeup將其喚醒。

信號機制

信號:1~19中的某個整數,代表某一種事先約定好的簡單消息。

每個進程在執行時,都要通過信號機制來檢查是否有信號到達。
若有信號到達,表示某進程已發生了某種異常事件,便立即中斷正在執行的進程,轉向由該信號所指示的處理程序。處理完畢,再返回到此前的斷點處繼續執行。

類似硬中斷,故又稱爲軟中斷。

兩者相似處:
1. 異步通信
2. 兩者對信號/中斷都可加以屏蔽

兩者不同:
1. 中斷有優先級,而信號機制則沒有,所有的信號都是平等的。
2. 信號處理程序在用戶態下運行,中斷處理程序在覈心態下運行。
3. 中斷響應是及時的,而對信號的響應通常都有較長的時間延遲。

管道機制

匿名管道

匿名管道是一個臨時文件,是利用系統調用pipe()建立的無名文件(無路徑名)。

只用pipe()返回的文件描述符來標識匿名管道。

因此,只有調用pipe的進程及其子孫進程,才能識別,從而才能利用匿名管道進行通信。

命名管道FIFO

命名管道,調用mknod建立,可以在系統中長期存在,而且具有路徑名,因而其他進程可以感知它的存在,並能訪問命名管道。

消息機制

消息機制允許進程發送一個消息給任何其他進程。

補充:協同進程

補充:網絡IPC(socket)

參考文獻

[1] 湯子瀛等. 計算機操作系統. 西安:西安電子科技大學出版社,2006

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