2012-02-21 112 views
1

我正在研究一個虛擬的類Unix操作系統(OS161),我將要實現類似於Unix的過程,這意味着fork(),execv(),getpid(), waitpid函數()。操作系統:實現進程ID

首先,我需要實際上有一個過程的概念,並給每個自己的進程ID,一些獨特的整數值來區分它們。據我所知,每個進程與自己關聯一個地址空間,並且至少有一個線程;可能更多。現在讓我們保持一個。

所以我首先想到創建一個進程的概念是給每個線程和地址空間與一個唯一的進程ID關聯,並創建一個全局列表變量(一個哈希表?鏈接列表?)包含所有的的PID。特別是,我目前提供以下信息:

struct thread; 
struct addr_space; 

這樣我就可以進入這些結構,並添加一個「PID」字段爲整數。或者,我想我可以創建一個包裝「結構進程」,幷包含線程(或線程列表)和地址空間作爲成員。

[注:目前線程結構我有一個地址空間結構作爲其成員之一...這是否意味着它已經基本上是一個過程?我可以提供更多的細節,以供參考我正在使用OS161]

最後,還有我應該如何存儲PID的問題。我很確定它必須是某種全局列表結構(類似於與線程相關的各種隊列),但不確定什麼是可取的。

乾杯。

+0

這是什麼語言?請添加語言標記並編輯您的問題以使其更加明顯。我認爲這是C或C++? – Gray 2012-02-21 13:26:06

回答

1

在Unix系統中,進程和線程之間存在着奇怪的區別,因爲它們本質上都是由相同的結構(Linux中的task_struct)來管理的。

屬於同一進程的線程共享一個PID,並簡單地使用父/子指針來跟蹤誰產生誰進行清理和創建。哈希表可能是存儲它們的好選擇。只要你的地址空間保持適當的虛擬機映射,那麼你應該可以用類似的方案。

1

而不是一個包含PIDs的結構,我傾向於根據進程結構表來思考,並將該表中的索引用作進程ID。

+0

這是我默認的思維方式,所以我希望這是提問者的意思。在我的回答中,我並不是非常具體) – 2012-02-21 20:26:16