系統結構-並行算法FORK JOIN

一、FORK JOIN定義

FORK語句的形式:

FORK m,其中m爲新進程開始的標號。

執行FORK m語句時,派生出標號爲m開始的新進程,具體爲:
1、準備好這個新進程啓動和執行所必需的信息;
2、如果是共享主存,則產生存儲器指針、映像函數和訪問權數據;
3、將空閒的處理機分配給派生的新進程,如果沒有空閒處理機,則讓它們排隊等待;
4、繼續在原處理機上執行FORK語句的原進程。

與FORK語句相配合,作爲每個併發進程的終端語句JOIN的形式:

JOIN n,其中n爲併發進程的個數。

1、JOIN語句附有一個計數器,其初始值爲0。每當執行JOIN n語句時,計數器的值加1,並與n比較。
2、若比較相等,表明這是執行中的第n個併發進程經過JOIN語句,於是允許該進程通過JOIN語句,將計數器清0,並在處理機上繼續執行後續語句;
3、若比較不等,計數器的值仍小於n,表明此進程不是併發進程的最後一個可讓現在執行JOIN與的這個進程先結束,把它所佔用的處理機釋放出來,分配給真正該排隊等待的其他任務。如果沒有排隊等待的任務,就讓該處理機空閒。

二、舉例

題目分析:

1、首先執行這個程序,用兩臺處理機。
2、假定最初的程序在cpu1上運行,cpu1首先執行標號爲10的進程。
3、然後遇到FORK30語句時就分出一個cpu2去執行標號爲30的進程,而cpu1接着執行標號爲20的進程。
注意:這裏20和30兩個進程同時進行,因爲除法最慢,所以標號爲20的進程後一個完成。

那麼標號30的進程首先完成,先執行JOIN2的語句。(此時計數器加1,等於1,和2比較,不等。那麼就把這個進程先釋放掉,分配給真正該排隊等待的其他任務,由於此時沒有任務排隊,所以該處理機空閒
3、然後標號20的進程結束,執行JOIN2(此時計數器又加1,相等,於是允許該進程通過JOIN語句,將計數器清0,並在處理機上繼續執行後續語句)
4、後續語句,GO TO 40
5、Cpu1開始執行fork60,cpu2就開闢一個進程標號60,cpu1接着執行標號50的進程,由於減法跑得快,所以標號50的進程先執行join2(計數器=1,不等,釋放
標號60的進程執行join2(計數器=2,相等,繼續執行後續語句)
6、後續語句,標號70執行。
根據分析繪圖,如下所示:
在這裏插入圖片描述

系統結構-計算機系統結構裏的多級立方體網絡怎麼理解?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章