簡體   English   中英

計算ANSI C中先到先服務的等待時間

[英]Calculating Wait Time for a First Come First Serve in ANSI C

在針對Linux環境的ANSI C中對CPU調度進行編程時,我無法計算每個排隊進程的等待時間。 基本上,我需要以4 cpus運行20多個進程,並測量每個進程花費的時間,平均花費的時間,CPU消耗等。

這是我嘗試編寫的過程的類比:

點擊我查看圖片

我繪制的圖像試圖簡化我的問題...但這是先到先服務的CPU調度員,計數器A是CPU突發,計數器B是設備突發,行1是就緒隊列,行2是設備隊列。 ..

到現在為止,我已經能夠將任務輸出到一個數組中,但是對於我的任務,我需要找出每個人需要等待多長時間,每個流程的周轉時間及其平均時間。

每個人結構都有一個“ arrivalTime”並且可以隨時更改每個人結構在每個計數器“ timeRequired []”上也有一個所需的時間數組,它是交替的,索引0代表計數器A,索引1代表計數器B,索引2再次代表A。 每個人的結構都有一個timeRequired [],“ arrayPointer”的數組指針

我畫的照片說的是秒,但實際上是任何時間單位,一個整數,我真的不需要實際的時鍾...

到目前為止,我要做的是創建2個線程函數,其中1個用於counterA,1個用於counterB,當A完成為某人服務時,A會將人員塞入B行,而當B完成某人時,它將塞入人員。它進入A線。

我覺得一切都已經准備就緒,但是我真的不知道從現在開始我需要做什么來計算他們的等待時間...

還是有比使用線程更簡單的解決方案?

教授給了我們2個檔案

輔助方法

[ http://pastebin.com/qF7nQsUR]

頭文件

[ http://pastebin.com/nQQNXnmq]

gettimeofday(2)。

過程結構中的某處

struct timeval bornon;    /* time this process was born */

然后在您的分配路徑中調用gettimeofday

if (gettimeofday(&process->bornon, NULL) == -1)
    err(1, "ohnoes! gettimeofday!");

然后在處理完成后再次調用它

struct timeval doneon;
int secs, usecs;

gettimeofday(&doneon, NULL);
secs = doneon.tv_secs - process->bornon.tv_secs;
usecs = doneon.tv_usecs - process->bornon.tv_usecs;

然后進行秒/微秒的轉換。

我會這樣處理:

弄清楚如何編碼輸入。 該程序需要以某種方式使輸入“人1需要...”可用。
這些定義可以起作用:

struct need {
   int person_id, counter_id, duration
};
struct need needs[] = {
   { 1, COUNTER_A, 500 },
   { 1, COUNTER_B, 200 },
...
};

接下來,您需要隨時跟蹤每個人的位置。
這種結構可以描述一個人現在在做什么:

struct person_activity {
    int person_id;
    struct need *activity;
    int start_time;
}

這些數組可以描述每個領帶在做什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM