2009-06-02 51 views

回答

7

信號量,鎖,條件變量等是操作系統的概念,通常必須根據操作系統內核的特性來實現。因此,通常不可能孤立地研究它們 - 你也需要考慮內核代碼。或許這樣做的最好方法是在諸如Understanding The Linux Kernel之類的書的幫助下查看Linux內核。

-2

可以趕上很多IPC(進程間通信)圖書的,可以解釋一下你的來龍去脈需要。有一本經典書。 Unix網絡編程進程間通信Richard Richans。你會得到你需要的一切。 :)

+4

信號量,鎖和條件變量不是進程間通信機制,並且與網絡無關。 – 2009-06-02 08:01:52

1

爲了基本瞭解,你可以參考書籍Operating System Concepts,by Avi Silberschatz,Peter Baer Galvin,Greg Gagne,真的很不錯。

您還可以訪問Dave Marshall's網站獲得一些支持。請參閱那裏的信號量部分。

2

在底層,如果你想實現這樣的事情,你將需要使用匯編語言。 C和C++根本不公開編寫併發代碼所需的那些功能---除了使用在其實現中使用匯編程序的庫。

3

學習操作系統概念的一個很好的起點可能是Andrew Tanenbaum的「現代操作系統」。他還在另一本關於他自己的操作系統(Minix)的書中被稱爲「操作系統:設計與實現」,該書更詳細地介紹了編碼。你應該能夠在你的本地圖書館找到這些書。

相關主題您可能想查找關於如何以及爲什麼使用信號量的信息:競爭條件,同步,多線程,消費者生產者問題。

2

Minix的東西是相當不錯的。一個更簡單的例子是MicroC/OS的東西。它帶有一本詳細的教科書,所有的資源都在那裏。它具有基本元素,代碼很小,可以在相對較短的時間內理解它。

http://www.micrium.com/products/rtos/kernel/rtos.html

http://en.wikipedia.org/wiki/MicroC/OS-II

你可以做的另一件事,是在Linux上的應用程序進行僞造出來的操作系統。我通過建立基本剔與itimer,然後用函數調用swapcontext(男子2 swapcontext),這將保存在堆棧的REG左右交換線程這樣做。這會讓你感到醜陋的東西,你只需要實現信號量/互斥/定時器等等。這很有趣。

不管有些職位的說,是不是需要彙編。瞭解它總是會有所幫助。當你編寫高級應用程序時,理解內部/編譯器/等的工作方式絕不會讓人感到痛苦。

1

有趣的是,Stevens Book是用於描述同步原語及其用法的經典文本之一。他似乎認爲他們可以用來控制進程間通信。我傾向於同意他的觀點。網絡,不,IPC是的。肯定是的。