Description
Rules:
1. Please use C language in this homework and run your program on Ubuntu
20.04.
2. Please provide Makefile to compile your homework.
3. Do not copy the others homework definitely.
Turn in your homework:
1. Please compress your homework into zip archive.
2. Naming rules: “SP_HW10.zip”.
本次作業基礎架構:
作業說明與限制(未遵守者以 0 分計算):本次作業請將報告與程式碼一同繳交即可,不需要額外列印紙本。
Command line 共有 4 個參數:
./program [資料數量 M] [傳送速率 R] [consumer數量 N] [buffer size B]
1. Producer 與 Consumer 皆以 process 來開發。
2. Producer 負責產生 M 個資料(例如:M=1000,資料內容”This is message 0”),資料間隔 R millisecond (例如:R=300 ms,你會需要用到 usleep() 函式),然後設法將資料交給所有 Consumer (例如:N=200)。
3. R 越小代表資料產生越快,每份資料都是文字資料,內含序號,如上例。
4. 你必須要設計適當的資料傳遞之方式,否則當 N 很大時,consumer 會來不及收到資料。
5. 系統只能有 B 個 buffers 來暫存 B 筆資料(例如:B=3),第 B 筆資料,會
蓋到第 0 筆資料。所以資料必須被及時收到,否則會被蓋掉,如下圖依此類推:
限制:
1. 每個 Data 內有 80 個 char(如: char message[80];),且每個 message 都要內含序號(如:0、1、2、3…),讓接收訊息的 consumer 知道此為第幾份資料。
2. 本作業優先使用Shared Memory + signal 的解決方法(若有更好解法不受此限),consumer 才能及時讀取資料。Consumer 被動被通知去讀取資料,signal通知時訊息中必須帶資料序號(上課有教如何用 sigaction() 加參數到 signal 中)。
3. 輸出樣式為全部 consumers 總共接收到資料量,並且計算出 loss rate,如下範例:以資料數量 M=1000,傳送速率 R=300,N=150,B=3 為例,輸出應為:
M=1000 R=300 ms N=150
Total messages: 150,000 (1000*150 的意思)
Sum of received messages by all consumers: X
Loss rate: 1 – (X/150000)
製作報告內容說明:
1. 請畫出當資料數量固定為 1000,B=3,consumers 數量為 10、100、1000之折線圖( 縱軸:loss rate;橫軸:傳送速率(ms) )如下範例。
2. 請畫出當資料數量固定為 1000,R=500,consumers 數量為 10、100、 1000 之折線圖( 縱軸:loss rate;橫軸:buffer size 1-10 )如下範例。
範例折線圖(請依作業要求自行更改標題、縱軸、橫軸等資訊):
3. 請描述您使用主機的作業系統、Memory、CPU
4. 您覺得造成資料 loss 影響最大的因素為 Memory or CPU or buffer size? 為什麼?
5. 另設計一個程式 (given fixed (M, B, R, N), 如:(1000, 3, 500, 150)),如何有效降低 Loss rate?



