2011-04-13 98 views
1

我正在研究操作系統(Silberscatz,Galvin等人)。我的編程經驗僅限於編程文本或算法文本中偶爾編寫的練習題。換句話說,我沒有適當的應用程序編程或系統編程經驗。我認爲我的下面的問題是缺乏上述經驗的結果,因此缺乏背景。共享內存IPC機制與API /系統調用調用的區別

我特別研究IPC機制。在閱讀有關共享內存(SM)時,我無法想象使用SM進行通信的真實場景。在我的linux(ubuntu)機器上(使用小型shell腳本中的'ipcs')上的相同SM段的進程的檢查被上傳here

大部分應用程序共享似乎與X deamon共享。據我所知,X是負責給我我的GUI的過程。我感到這些應用程序(主要是保留在我的任務欄上的applet)與X共享關於需要改變其外觀和顯示值的數據。這是一個合理的推論嗎?

如果是這樣, 我的問題是,我的應用程序通過共享內存段與'X'通信與我的應用程序調用'X'提供的某些API並與'X'通信需要刷新他們的外表? 差異我的意思是,爲什麼不使用後面的方法?

是不是覺得如何用戶進程和內核溝通?應用程序在需要時調用系統調用,比如讀取文件,通過系統調用的參數傳遞文件名和其他相關信息?

而且你能提供給我的日常使用的應用程序,其使用共享內存和消息傳遞通信的例子嗎?

編輯 我已經提出了更清晰的問題。我已經格式化編輯的零件要大膽

回答

1

不同的是,與API你作爲一個開發人員可能無法獲得什麼這些功能裏面發生的事情,所以內存不一定會共享。

共享存儲器是大多的內存向這兩個應用可以寫入和讀取的特定區域。這個過程要求對內存的訪問是同步的,所以事情不會被破壞。

使用別人的API並不意味着你與他們共享內存,這個過程只會做你問,也許返回操作你的結果,但是,這並不一定通過共享內存去。儘管它可以,但它依賴於一如既往。

對於另一個的偏好我會說取決於關於特定應用程序的規格以及它在做什麼以及它需要共享什麼。我可以想象,某種或那種大型數據集將被共享內存共享,但將文件名傳遞給另一個應用程序可能只需要一個API調用。但很大程度上取決於我要說的要求。

+0

我編輯我的問題,使我的問題更加清晰。我知道函數調用和共享內存的區別。我想知道爲什麼後來這裏更受歡迎。 – 2011-04-13 07:15:17

1

首先,由於X服務器只是另一個用戶空間的過程中,不能使用操作系統的系統調用機制。即使通過API完成通信,如果它位於用戶空間進程之間,那麼在該API後面會有一些進程間通信(IPC)機制。這可能是共享內存,套接字或其他。當大量的數據涉及

通常共享存儲器被使用。也許有很多數據需要多個進程訪問,而且每個進程擁有自己的副本會浪費內存。或需要大量的數據的過程中,如果它是被流傳輸,在時間一個字節,通過另一IPC機制這將是慢之間傳送。

對於圖形,它是不尋常的一個程序,以保持包含圖像的像素圖,窗口,或甚至整個屏幕,然後需要定期複製到屏幕的緩衝器。有時候速度非常快,每秒30次以上。我懷疑這就是爲什麼X儘可能使用共享內存的原因。