編寫C程序模擬實(shí)現(xiàn)單處理機(jī)系統(tǒng)中進(jìn)程調(diào)度,實(shí)現(xiàn)對(duì)多個(gè)進(jìn)程的調(diào)度模擬,要求采用多級(jí)反饋隊(duì)列調(diào)度算法進(jìn)行模擬調(diào)度。
數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):PCB:結(jié)構(gòu)體;就緒隊(duì)列:每個(gè)節(jié)點(diǎn)為進(jìn)程PCB;進(jìn)程狀態(tài)
具體調(diào)度算法:FCFS、SJF、PR;涉及多種操作:排序、鏈表操作
程序輸出設(shè)計(jì):調(diào)度進(jìn)程的順序、每個(gè)進(jìn)程的起始時(shí)間、終止時(shí)間等CPU每次調(diào)度的過程
分析:關(guān)于鏈表的一些功能,如果說能夠使用STL的話,能省去手寫鏈表的時(shí)間,且更加安全。
然后是對(duì)多個(gè)進(jìn)程之間的模擬調(diào)度,可以用STL的queue來模擬隊(duì)列,然后用vector來代替鏈表。
記住,在c++里面,用了對(duì)應(yīng)的一些功能的函數(shù),可能是要加上一些頭文件的。
這里因?yàn)槭怯昧藇ector,所以加了頭文件#include<vector>
同時(shí)也用了queue,所以加上了#include<queue>
下面是運(yùn)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-440310.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-440310.html
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 進(jìn)程結(jié)構(gòu)體,包含進(jìn)程ID、需要運(yùn)行的時(shí)間、剩余運(yùn)行時(shí)間和所在的隊(duì)列
struct Process {
int pid;
int time_needed;
int remaining_time;
int queue_level;
};
int main() {
int n, m, quantum;
cout << "Enter the number of queues: ";
cin >> n;
cout << "Enter the number of processes: ";
int num_processes;
cin >> num_processes;
cout << "Enter the number of time slices for each queue: ";
cin >> quantum;
// 創(chuàng)建 n 個(gè)隊(duì)列
vector<queue<Process>> queues(n);
// 輸入進(jìn)程信息
for (int i = 0; i < num_processes; i++) {
Process p;
cout << "Enter the process ID: ";
cin >> p.pid;
cout << "Enter the time needed for the process: ";
cin >> p.time_needed;
p.remaining_time = p.time_needed;
p.queue_level = 0; // 初始時(shí)所有進(jìn)程都在最高優(yōu)先級(jí)隊(duì)列
queues[0].push(p);
}
// 模擬調(diào)度過程,每次處理一個(gè)時(shí)間片
int current_time = 0;
while (true) {
bool all_queues_empty = true;
for (int current_level = 0; current_level < n; current_level++) {
if (queues[current_level].empty()) continue;
all_queues_empty = false;
Process p = queues[current_level].front();
queues[current_level].pop();
// 輸出當(dāng)前時(shí)間片運(yùn)行的進(jìn)程
cout << "Time " << current_time << " - Running process " << p.pid << " in queue " << current_level << endl;
// 運(yùn)行當(dāng)前時(shí)間片
p.remaining_time -= quantum;
// 如果進(jìn)程還未執(zhí)行完,則將其加入下一級(jí)隊(duì)列中
if (p.remaining_time > 0) {
p.queue_level = min(current_level + 1, n - 1);
queues[p.queue_level].push(p);
}
}
if (all_queues_empty) break;
current_time += quantum;
}
return 0;
}
到了這里,關(guān)于編寫C程序模擬實(shí)現(xiàn)單處理機(jī)系統(tǒng)中進(jìn)程調(diào)度,實(shí)現(xiàn)對(duì)多個(gè)進(jìn)程的調(diào)度模擬,要求采用多級(jí)反饋隊(duì)列調(diào)度算法進(jìn)行模擬調(diào)度。(江西師范大學(xué))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!