實現處理器的排程演算法
2、課程設計的要求
實現先來先服務,短作業優先,時間片輪轉,高相應比優先中的三種
3、課程設計的題目
選擇語言實現上述演算法的三種,並按照一定的格式輸出開始時間,結束時間,周轉時間,平均周轉,帶全周轉時間。
實現介面操作,在同乙個程式中實現三個演算法。
/*
0. 不限制道數的多道程式系統中,有4個作業進入系統
0.0 字串轉換時間
0.1 還是需要乙個副本比較好
1. 先來先服務演算法就是乙個簡單的就緒佇列
2. 時間片演算法與高響應比演算法都需要引入時間片(時間片的大小設定為1)
3. 最後就是介面的劃分
*/#include#include#includeusing namespace std;
//程序的相關資訊
struct pro
pro() {}
};//程序佇列的大小,count佇列的作業數
pro arr[10]; //程序副本
pro arrs[10]; //程序原件
int pro_count = 5;
const int time_start = 10 * 60;
void fb()
}//四種演算法:
void fifo(); //先來先服務
void sjf(); //短作業優先
void fcfs(); //高響應比優先
void time(); //時間片輪轉演算法
void alter(); //修改程序佇列
int show(); //主介面
void display();
//過載函式:實現格式轉換
int time_z(string time); //開始時間-》整型時間
void time_z(int itime); //開始時間+周轉時間-》結束時間
int main()
; arrs[1] = ;
arrs[2] = ;
arrs[3] = ;
arrs[4] = ;
arrs[5] = ;
bool flag = true;
while (flag) }
return 0;
}//涉及增加刪除修改操作,操作的都是原件
void alter()
else if (ser_num == 2)
cout << "\n------更改完畢-------\n";}}
//作業數自減
pro_count--;
display();
char a;
cout << "輸入任意字元繼續!\n";
cin >> a;
break;
} else if (ser_num == 3)
}display();
char a;
cout << "輸入任意字元繼續!\n";
cin >> a;
break;
} else if (ser_num == 0)
else
}}//時間pain輪轉演算法
//搶占式
void time()
} }int start = time_z(arr[0].time_in);
int sum[10] = , sum = 0;
bool flag = true;
while (flag)
}else
if (flag) }}
}else
}else
if (flag) }}
}for (int i = 0; i < pro_count; ++i)
if (sum == pro_count)
sum = 0;
} display();
char a;
cin >> a; }}
//短作業優先演算法
void sjf()
} }int start = time_z(arr[0].time_in);
int arr_int[10];
for (int i = 0; i < pro_count; ++i)
for (int j = 0; j < pro_count; ++j)
else
}} display();
char a;
cout << "輸入任意字元繼續!\n";
cin >> a;
}//先來先服務
//初始化是按照進入時間排序,所以不需要再次排序
void fifo()
} }int start = time_z(arr[0].time_in);
//存放整型的時間
int arr_int[10];
for (int i = 0; i < pro_count; ++i)
//檢測cpu狀態,run=0表示未被占用
for (int j = 0; j < pro_count; ++j)
else
}} display();
char a;
cout << "輸入任意字元繼續!\n";
cin >> a;}/*
函式功能:1.實現主介面
2.實現演算法的選擇
*/int show()
return ser_num;
}void display()
}int time_z(string time)
; int num = 0;
//將時間分為兩部分
string str1 = "";
string str2 = "";
bool flag = true;
for (int i = 0; i < time.length(); ++i) }
for (int i = str1.length() - 1; i >= 0; --i)
}} int num1 = 0;
for (int i = str2.length() - 1; i >= 0; --i)
}} return num * 60 + num1;
}void time_z(int itime)
說明:
模擬的是單cpu不限制道數
實現的三個演算法中,先來先服務沒有問題,但是時間片輪轉有個bug,有的時間會導致錯誤、短作業優先也有bug,結果和先來先服務的一毛一樣。
理想中的是乙個過程,但是沒能實現出來
接(3),以後可以考慮移植到qt裡面去,介面化可能更好一點。
忘了想說啥
頁式虛擬儲存管理 虛擬儲存技術的實現方式是什麼?
1 在伺服器端的虛擬儲存 伺服器廠商會在伺服器端實施虛擬儲存。同樣,軟體廠商也會在伺服器平台上實施虛擬儲存。這些虛擬儲存的實施都是通過伺服器端將映象對映到外圍儲存裝置上,除了分配資料外,對外圍儲存裝置沒有任何控制。伺服器端一般是通過邏輯卷管理來實現虛擬儲存技術。邏輯卷管理為從物理儲存對映到邏輯上的卷...
作業系統 頁式虛擬儲存位址變換
include stdio.h define n 64 模擬實驗中假定的頁表長度,即最多允許程式含有多少頁 假定頁面大小為1k define length 10 struct page n 頁表定義 int m m為該作業在主存中的主存塊塊數 int page length 頁表實際長度 int p...
頁式虛擬存管理的實現
頁式虛擬存管理的實現 原理是只需將作業的全部資訊作為副本存放在磁碟上,作業被排程投入到執行時,至少把第一頁資訊裝入主儲存器,在作業執行過程中訪問到不在主儲存器的頁的時候,再把它們裝入到主存。之後便是頁面的排程 也買的排程這裡有簡單的幾個演算法 先進先出排程演算法,最近最久未使用演算法,最近最不常使用...