操作系统 进程调度

实验目的:

  1. 学习理解进程调度的作用,分类。
  2. 掌握常见的一些进程调度算法思想。
  3. 深刻理解进程调度中进程切换的基本过程。

实验内容:

  1. 编程模拟实现轮转调度算法或多级反馈队列调度算法。

实验步骤:

1.选择调度算法:

根据实验要求,选择轮转调度算法或多级反馈队列调度算法。

2.实现调度算法

根据选择的算法,编写代码模拟实现进程调度。在轮转调度算法中,需要设计一个轮转队列,依次执行每个进程;在多级反馈队列调度算法中,需要设计多个优先级队列,并根据一定的规则进行进程的转移和调度。

3.模拟进程切换过程:

在代码中模拟进程的创建、执行和切换过程。可以使用fork()系统调用创建子进程,并模拟进程的运行和切换。

4.观察调度效果:

运行程序,观察不同调度算法下的进程执行情况,包括每个进程的执行时间、等待时间等指标,以及系统整体的调度效率。

源代码:

轮转调度算法

#include <stdio.h>



#define MAX_PROCESSES 5

#define TIME_QUANTUM 2



struct Process {

    int id;

    int burst_time;

};



void roundRobinScheduling(struct Process processes[], int n) {

    int remaining_time[MAX_PROCESSES];

    for (int i = 0; i < n; i++) {

        remaining_time[i] = processes[i].burst_time;

    }



    int current_time = 0;

    while (1) {

        int done = 1;

        for (int i = 0; i < n; i++) {

            if (remaining_time[i] > 0) {

                done = 0; // There is still a process pending

                if (remaining_time[i] > TIME_QUANTUM) {

                    current_time += TIME_QUANTUM;

                    remaining_time[i] -= TIME_QUANTUM;

                    printf("进程 %d正在执行时间。当前时间:%d\n" , processes[i].id, current_time);

                } else {

                    current_time += remaining_time[i];

                    remaining_time[i] = 0;

                    printf("进程%d正在执行并已完成。当前时间:%d\n ", processes[i].id, current_time);

                }

            }

        }

        if (done == 1) {

            break;

        }

    }

}



int main() {

    struct Process processes[MAX_PROCESSES] = {{1, 6}, {2, 4}, {3, 2}, {4, 5}, {5, 3}};

    int n = sizeof(processes) / sizeof(processes[0]);



    roundRobinScheduling(processes, n);



    return 0;

}

多级反馈队列调度算法

#include <stdio.h>



#define MAX_PROCESSES 5



struct Process {

    int id;

    int burst_time;

    int priority;

};



void multilevelFeedbackQueue(struct Process processes[], int n) {

}



int main() {

    struct Process processes[MAX_PROCESSES] = {{1, 6, 0}, {2, 4, 1}, {3, 2, 2}, {4, 5, 0}, {5, 3, 1}};

    int n = sizeof(processes) / sizeof(processes[0]);



    multilevelFeedbackQueue(processes, n);



    return 0;

}

实验心得:

本次实验主要围绕进程调度展开,通过实现轮转调度算法或多级反馈队列调度算法,加深了对进程调度的理解。在编写代码的过程中,我对调度算法的工作原理有了更深入的认识,并学会了如何模拟进程的创建、执行和切换过程。通过观察调度效果,我能够评估不同算法对系统性能的影响,从而更好地选择适合特定场景的调度策略。这次实验让我深入了解了进程调度的重要性,为以后学习操作系统提供了良好的基础。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值