Prog. #3 Process Coordination Solution

$35.00 $29.00

一、 作業目的 基於pthread的方式來熟悉 process coordination的觀念。 二、 作業內容 【生產空拍機】為了要與空拍機大廠T公司競爭,G公司希望能透過機器人自動化生產新型的空拍機。在空拍機工廠中,有3個生產站(producer)及1個原料配件分配者(dispatcher)在負責生產空拍機。每一個生產站會不斷製造空拍機,但是要做好一個空拍機需要具備下面三種模組配件:battery(電池)、aircraft(機體)、和 propeller(螺旋槳)等。為了加快製造速度,3個producer分別各擁有一種模組配件的材料,而dispatcher則不斷隨機供應3種原料配件到一個供應前台,供應時並且不會與供應前台上面已經有模組配件重複。 每當dispatcher準備好2種原料,缺這2種原料的producer便可以向dispatcher取得這2種原料,加上本身擁有的原料,製成一個空拍機。完成後通知供應模組配件的dispatcher,dispatcher接著再隨機地準備另外三種模組配件放到供應前台上去。 請設計程式模擬這producer和dispatcher同步處理的動作。在程式中做出適當的輸出,顯示出工廠生產空拍機的情況。假設工廠每天生產完50個空拍機以後需要停工休息,請在生產出第50個空拍機的時候,結束程式,列印出來dispatcher準備了多少各種模組配件,並按照生產空拍機的數量多寡順序,印出每個producer總共生產出多少個空拍機。 因此,你的程式可能會印出來 $prog3 Dispatcher: propeller Dispatcher: battery Producer (aircraft): OK, 1 drone(s) Dispatcher: battery … Producer (battery): OK, 15 drone(s) … Producer (propeller): OK, 40 drone(s) … 三、 作業要點 請注意,本作業使用的程式語言是C/C++,測試平台的作業系統: Ubuntu 16.10 64-bit。使用的編譯 程式為g++ 編譯器:5.4。其他平台或程式語言不在本次作業考慮範圍之內。如在測試平台上無法編譯與執行,都不予給分。 請注意,本作業必須要用 Pthread API中的 mutex機制來進行,例如pthread_mutex_init()。 不能使用semaphore機制,例如sem_init()。任何不用Pthread API mutex機制的程式,只能最多得到基本的30分。 本作業的評分方式如下: a. 【基本功能】…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)

一、 作業目的

基於pthread的方式來熟悉 process coordination的觀念。

二、 作業內容

【生產空拍機】為了要與空拍機大廠T公司競爭,G公司希望能透過機器人自動化生產新型的空拍機。在空拍機工廠中,有3個生產站(producer)及1個原料配件分配者(dispatcher)在負責生產空拍機。每一個生產站會不斷製造空拍機,但是要做好一個空拍機需要具備下面三種模組配件:battery(電池)、aircraft(機體)、和 propeller(螺旋槳)等。為了加快製造速度,3producer分別各擁有一種模組配件的材料,而dispatcher則不斷隨機供應3種原料配件到一個供應前台,供應時並且不會與供應前台上面已經有模組配件重複。

每當dispatcher準備好2種原料,缺這2種原料的producer便可以向dispatcher取得這2種原料,加上本身擁有的原料,製成一個空拍機。完成後通知供應模組配件的dispatcherdispatcher接著再隨機地準備另外三種模組配件放到供應前台上去。

請設計程式模擬這producerdispatcher同步處理的動作。在程式中做出適當的輸出,顯示出工廠生產空拍機的情況。假設工廠每天生產完50個空拍機以後需要停工休息,請在生產出第50個空拍機的時候,結束程式,列印出來dispatcher準備了多少各種模組配件,並按照生產空拍機的數量多寡順序,印出每個producer總共生產出多少個空拍機。

因此,你的程式可能會印出來

$prog3

Dispatcher: propeller

Dispatcher: battery

Producer (aircraft): OK, 1 drone(s)

Dispatcher: battery

Producer (battery): OK, 15 drone(s)

Producer (propeller): OK, 40 drone(s)

三、 作業要點

  1. 請注意,本作業使用的程式語言是C/C++,測試平台的作業系統: Ubuntu 16.10 64-bit。使用的編譯

程式為g++ 編譯器:5.4。其他平台或程式語言不在本次作業考慮範圍之內。如在測試平台上無法編譯與執行,都不予給分。

  1. 請注意,本作業必須要用 Pthread API中的 mutex機制來進行,例如pthread_mutex_init() 不能使用semaphore機制,例如sem_init()。任何不用Pthread API mutex機制的程式,只能最多得到基本的30分。

  1. 本作業的評分方式如下: a. 【基本功能】

      1. 本作業必須以multithreaded的方式來完成,每個producerdispatcher都各自是一個thread。沒有用此機制者,會扣50分。

      1. 本作業在處理準備模組配件以及取用模組配件的程式碼部分,都必須以pthread API中的mutex機制形成critical section來設計。不使用此機制者,會扣50分。

      1. 將分別考慮以下不同程度,按照正確性來給分。請在報告中說明自己完成的項目。

        1. [基本] 亂數的產生必須在主程式一開始就用 srand(0); 的方式設定亂數種子,每次執行都會產生相同的亂數序列。(助教會修改 seed 值,進行測試),最多可得10分。

        1. 正確使用pthread API 中的 mutex 機制形成critical section來處理 thread 之間的共用變數,最多可得20分。不使用此機制者,此部分 0

        1. 以下依照程式可執行的程度評分:

          1. 基礎程度 :程式中只有一個 dispatcher 與一個 producer (有 battery模組)總共 2 threadsdispatcher只會隨機分配其他2種模組配件。在此情況下,可以正確產生50個空拍機,印出生產過程以及 dispatcher producer 正確資料。如果程式只完成到此程度,最多可得40分。

          1. 完整程度:程式中有一個dispatcher 3 producer 總共4threads,每個producer可以正確產生空拍機,且可以產生總共 50 個空拍機,印出生產過程以及 dispatcher producer 正確資料,如果程式可完成到此程度,最多可得70分。

    1. 【進階功能】完成以上基本功能者,才可按照以下項目,多得其他的分數。但請注意,如何demo

出你程式中的這些進階功能,必須在你的說明文件檔案中詳細說明,如果助教看不懂,可能反而會扣分。

      1. 工廠增加一個dispatcher B。原先的dispatcher A負責 batteryaircraft 2種不同模組配件的供應, dispatcher B 負責aircraftpropeller。供應模組配件的方式如基本要求:如果已經供應,便不再重複,而且供應時是隨機供應。所有的dispatcher都以thread方式實做。其餘要求與基本功能相同。

可以正確印出生產過程以及dispatcher producer 正確資料,本功能最多可得40分。

具備此功能者,請用 argv[] 的方式讀入參數,1表示基本功能中一個dispatcher的情況, 2表示本進階功能中兩個dispatchers的情況。並用argc 來判斷有無參數,如果沒有參數,預設為基本功能(即參數為 1)。例如以下執行方式:

$prog3 2

Dispatcher A: battery

Dispatcher B: propeller

Producer (aircraft): OK, 1 drone(s)

Dispatcher A: aircraft

  1. 本作業需繳交檔案:

    1. 說明報告:檔案為docxpdf格式。

      1. 報告中必須說明程式的設計理念、程式如何編譯,以及如何操作

      1. 報告中同時必須詳細說明你完成哪些部份。如有用到特殊程式庫,請務必說明。

      1. 請務必讓助教明白如何編譯及測試你的程式。助教如果無法編譯或測試,會寄信(最多兩次通知你來說明,但每說明一次,助教會少給你10

    1. 完整原始程式碼。不可含執行檔助教會重新編譯你們的程式

  1. 所有相關檔案,例如報告檔、程式檔、參考資料等,請壓縮成一個壓縮檔(不可超過2MB)後上傳至portal請注意,不可抄襲。助教不會區分何者為原始版本,被判定抄襲者,一律0

四、 繳交方式:

  1. 最終繳交時間:

  1. 電子檔在 2017.06.02以前,上傳至個人portal。如有多個檔案,將所有檔案壓縮成ziprar,7z 亦可)格式,然後上傳。

b. 上傳檔名格式:「學號 _ 作業號碼 .doc 」或「學號 _ 作業號碼 .rar 例如: 912233_01.doc 912233_01.rar

  1. 如有違規事項者,依照課程規定處理

  1. 如需請假,請上portal請假,並持相關證明文件,在請假結束後的第一次上課時完成請假手續,並在一週內完成補交。補交作業將以8折計算。

  1. 老師不接受「門縫」方式繳交,助教也不接受任何作業。

五、 如有未盡事宜,將在個人portal板面公告通知。

六、 If you need any assistance in English, please contact Prof. Yang.

七、 參考資訊:

  1. 課本第6

  1. How to Use C Mutex Lock Examples for Linux Thread Synchronization”, http://www.thegeekstuff.com/2012/05/c-mutex-examples/?refcom

  1. pthread mutex”, http://angelonotes.blogspot.tw/2012/02/pthread-mutex.html

Prog. #3 Process Coordination Solution
$35.00 $29.00