2012年2月29日 星期三

Shared Memory in C (1)

最近因為需要,所以必須使用到shared memory,一看之下,越是覺得shared memory其實是相當有趣的一種構想,只會存在於特定的平台,強烈跟作業系統相關,雖然說很多系統都支援這樣的實做

很多人都知道process有自己獨立的virtual memory space,這也是MMC存在的價值,但是在沒有multi-thread的時候,兩個process分享資料有其需求,這時候就必須透過shared memory,可是這塊shared memory應該屬於誰的?我想應該是OS"作弊"在某個記憶體區間弄出了一塊空間,這塊空間是屬於作業系統管理的,雖然他還是有權限的控管,但是他的存在不屬於單一process

最後回到為何我需要利用到shared memory,我先前想要建立兩個server,這兩個server位於同一台機器,但是兩者的狀態可能會互相影響,共同的資料分享是必須得,如果只是兩個工作這件事情可以用multi-thread來解決,multi-thread在race condition的控管比multi-process容易許多,也好的多,很不幸,因為是server,server會呼叫accept這個system call,意味著system call將會block住整個process,導致另外一個server/thread無法正常運作,這時候只好轉向multi-process

當然還有其他更複雜的手法,比方說使用interval socket來建立process之間的連線,但是複雜度會比shared memory高,pipe的方式則是效能略遜,如果其他網友有更好的方式請建議我

2 則留言:

  1. 回覆
    1. 謝謝提示,意外找到一個setnonblocking,這個function似乎可以讓accept變成non-blocking,如果只是單純使用epoll_wait,有些還是使用fork的方式。有時間我會試驗一下epoll_wait

      參考資料:
      http://www.cnblogs.com/ggjucheng/archive/2012/01/17/2324974.html
      http://www.kongch.com/2011/01/epoll-accept/
      http://kenby.iteye.com/blog/1162853

      刪除