2012-08-25 116 views
0

在進程執行過程中,fork()ids被調用,一個新的進程具有單獨的內存空間但存儲內容相同。因此,由於它們是不同的進程,它們將具有不同的進程描述塊,因此它們將根據調度算法給出的機會執行(PCB將保存它們的程序計數器值)。執行多個線程

但是當一個進程在執行另一個線程時,線程共享它的地址空間。 我的問題是關於這個線程的執行: - 線程是否給出了具有不同程序計數器的值的單獨PCB以及線程接下來將執行的調度算法調度。 如果是,然後線程在分配給它的函數完成執行後如何停止執行。 這是因爲該函數是子線程堆棧中的唯一一個,當它返回時沒有其他函數要去?

回答

1

通常,調度程序/調度程序處理線程。線程是具有執行和線程控制塊(或任何操作系統上調用的任何操作系統)的系統對象,它們將擁有自己的堆棧,註冊保存(特別是堆棧指針,即PC在中斷時被推入的位置),線程優先級,其他線程特定的數據以及它所屬進程的PCB指針。 PCB具有內存管理數據,訪問控制數據,權限等。特定於進程的數據。除了每個進程必須擁有至少一個線程(通常,但不是唯一的,在創建進程時由加載程序引發的線程)之外,進程沒有任何執行。

如果線程代碼通過從創建時使用的頂級函數返回而退出(絕不是線程被終止的最常見方式),它會彈出放置的返回地址在創建時在其堆棧上創建一個'TerminateThread'(或其他)系統調用,導致它自殺。

顯然,一個'典型'操作系統的非常廣泛的概述。細節取決於操作系統(實際上,隨版本的變化而變化)。