编写C程序模拟实现单处理机系统中进程调度,实现对多个进程的调度模拟,要求采用多级反馈队列调度算法进行模拟调度。(江西师范大学)

编写C程序模拟实现单处理机系统中进程调度,实现对多个进程的调度模拟,要求采用多级反馈队列调度算法进行模拟调度。

数据结构设计:PCB:结构体;就绪队列:每个节点为进程PCB;进程状态

具体调度算法:FCFS、SJF、PR;涉及多种操作:排序、链表操作

程序输出设计:调度进程的顺序、每个进程的起始时间、终止时间等CPU每次调度的过程

分析:关于链表的一些功能,如果说能够使用STL的话,能省去手写链表的时间,且更加安全。

然后是对多个进程之间的模拟调度,可以用STL的queue来模拟队列,然后用vector来代替链表。

记住,在c++里面,用了对应的一些功能的函数,可能是要加上一些头文件的。

这里因为是用了vector,所以加了头文件#include<vector>

同时也用了queue,所以加上了#include<queue>

下面是运行结果:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

// 进程结构体,包含进程ID、需要运行的时间、剩余运行时间和所在的队列
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;

    // 创建 n 个队列
    vector<queue<Process>> queues(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; // 初始时所有进程都在最高优先级队列
        queues[0].push(p);
    }

    // 模拟调度过程,每次处理一个时间片
    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();

            // 输出当前时间片运行的进程
            cout << "Time " << current_time << " - Running process " << p.pid << " in queue " << current_level << endl;

            // 运行当前时间片
            p.remaining_time -= quantum;

            // 如果进程还未执行完,则将其加入下一级队列中
            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;
}

实验内容: 编写一个处理机下的进程调度程序模拟操作系统进程调度要求: 能够创建指定数量的进程,每个进程由一个进程控制块表示。 实现先来先服务调度算法进程到达时间可由进程创建时间表示。 实现短作业优先调度算法:可指定进程要求的运行时间。(说明:对不可剥夺的短作业优先算法,当作业运行时间相等时,优先调度进程号小的进程执行;对可剥夺式的短作业优先算法,即选最短剩余时间的进程进行运行,在剩余时间相同的情况下,选择到达时间早的进程进行运行) 实现时间片轮转调度算法:可指定生成时间片大小。(说明:新进程到来时插入到就绪队列的队尾,当进程P运行完一个时间片时,若同时有进程Q到达,则先在就绪队列队尾插入新到达的进程Q,之后再插入进程P) 实现动态优先级调度算法:可指定进程的初始优先级(优先级与优先数成反比,优先级最高为0),优先级改变遵循下列原则:进程在就绪队列每停留一个时间片,优先级加1,进程每运行一个时间片,优先级减3。(说明:本算法在优先级相同的情况下,选择到达时间早的进程进行运行) 测试用例格式如下: 输入:调度算法    进程号/到达时间/运行时间/优先级/时间片 输出:调度顺序/进程号/开始运行时间/结束运行时间/优先级 其调度算法选项为:1----先来先服务,2----短作业优先,3----最短剩余时间优先,4----时间片轮转,5----动态优先级
编写一个处理机下的进程调度程序模拟操作系统进程调度要求: 1.能够创建指定数量的进程,每个进程由一个进程控制块表示。 2.实现先来先服务调度算法进程到达时间可由进程创建时间表示。 3.实现短作业优先调度算法:可指定进程要求的运行时间。(说明:对不可剥夺的短作业优先算法,当作业运行时间相等时,优先调度进程号小的进程执行;对可剥夺式的短作业优先算法,即选最短剩余时间的进程进行运行,在剩余时间相同的情况下,选择到达时间早的进程进行运行) 4. 实现时间片轮转调度算法:可指定生成时间片大小。(说明:新进程到来时插入到就绪队列的队尾,当进程P运行完一个时间片时,若同时有进程Q到达,则先在就绪队列队尾插入新到达的进程Q,之后再插入进程P) 5.实现动态优先级调度算法:可指定进程的初始优先级(优先级与优先数成反比,优先级最高为0),优先级改变遵循下列原则:进程在就绪队列每停留一个时间片,优先级加1,进程每运行一个时间片,优先级减3。(说明:本算法在优先级相同的情况下,选择到达时间早的进程进行运行) 测试用例格式如下: 输入:调度算法    进程号/到达时间/运行时间/优先级/时间片 输出:调度顺序/进程号/开始运行时间/结束运行时间/优先级 其调度算法选项为:1----先来先服务,2----短作业优先,3----最短剩余时间优先,4----时间片轮转,5----动态优先级
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值