模擬 資料結構 作業系統

2021-06-07 20:20:53 字數 2056 閱讀 2095

第二題:作業系統

(sys.exe)

寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。

如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。在這種情況下,這個新的(優先順序更高的)程序會占用cpu,而老的只有等待。

如果乙個程序到達時,cpu正在處理乙個比它優先順序高或優先順序相同的程序,則這個(新到達的)程序必須等待。

一旦cpu空閒,如果此時有程序在等待,則選擇優先順序最高的先執行。如果有多個優先順序最高的程序,則選擇到達時間最早的。

輸入格式:

l        輸入檔名:sys.in

l        輸入檔案包含若干行,每一行有四個自然數(均不超過108),分別是程序號,到達時間,執行時間和優先順序。不同程序有不同的編號,不會有兩個相同優先順序的程序同時到達。輸入資料已經按到達時間從小到大排序。輸入資料保證在任何時候,等待佇列中的程序不超過15000個。

輸出格式:

l        輸出檔名:sys.out

l        按照程序結束的時間輸出每個程序的程序號和結束時間。

輸入輸出示例:

sys.in

1 1 5 3

2 10 5 1

3 12 7 2

4 20 2 3

5 21 9 4

6 22 2 4

7 23 5 2

8 24 2 4

sys.out

1 63 19

5 30

6 32

8 34

4 35

7 40

2 42

就是乙個模擬,加上堆,思路很簡單,只是中間的細節要考慮仔細。

我的想法是,既然當前的任務只能有乙個,那麼我就用i,s,t,l四個變數表示即可。

而未到來的任務暫時不用考慮。而之前中斷的任務,放到乙個堆中表示待辦任務。

考慮乙個任務完成時:

如果堆中還有任務剩餘,就把它取出來繼續做,時間不改變。(注意這裡如果對輸入不進行處理,這條任務就被忽略掉了,應該把它放回緩衝區)

如果堆中沒有剩餘,則把新進入的任務拿來做,時間直接跳躍到新任務的起始時間。

當新來了乙個任務,而當前任務不能夠完成:

如果新任務的等級高:我們把剩餘的時間減少,並把它放入堆中。修改當前時間為新的開始時間,並處理新任務

如果當前任務等級高:我們直接把新任務放入堆中。

另外要考慮的是,當沒有新任務進來的時候:

我們先把當前任務處理完,然後依次把堆中的任務處理完。

本以為自己已經細心再細心不能更細心了,結果,還是被3個犯二的錯給坑了。

提交次數:4

1、如果前乙個認為在t時課完成,下乙個任務就可以在t時刻開始,而不用等到t+1時刻。

2、手動的輸入緩衝區開小了,只開了100,我以為這個東西根本用處不大,結果直開到了1000000才終於過的。

3、堆中首先按等級的降序排,再按進入時間的公升序排。一開始把進入時間弄成了剩餘時間,然後又弄成了降序。。。

於是我明白,沒有最仔細,只有更仔細。

#include #include struct task

else

if (ns >= last+t)

else

continue;

} t -= ns-last;

last = ns;

if (nl > l)

i = ni;

s = ns;

t = nt;

l = nl;

} else

}printf("%ld %ld\n",i,last+t);

last += t;

while (!heap.empty())

return 0;

}

LRU management(模擬資料結構)

lru,作業系統中的最近最常使用演算法 include define maxn 1000005 define ll long long using namespace std struct nodecash maxn 1 模擬鍊錶 表示儲存單元 unordered mapft 雜湊表對映 把位址規模...

演算法 模擬資料結構一

普通佇列 int q 10000 h 0,tt 1 新增乙個元素a q tt a 刪除末尾元素tt 刪除隊頭元素h 輸出while tt h 普通棧 int stock 100005 t 1 新增乙個元素a stock t a 刪除t 單鏈表 優點方便,缺點訪問前乙個元素需要重新訪問一遍 這種方法本...

2020 7 4模擬 資料結構 ds

wobmaj 有 n 個資料結構,第 i 個資料結構具有工業指數 a i 和包容指數 b i b i le a i 他會不斷執行下面這個操作,直到無法再執行為止 選擇二元組 i,j 將第 i 個資料結構套進第 j 個資料結構裡,其中 a i。每個資料結構只能巢狀和被巢狀一次。求可能出現的不同局面的數...