实验名称:进程调度

  • 实验学时:2学时

预习报告 2021-05-12

实验原理摘要

  • 先来先服务的调度算法:最简单的调度算法,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。

实验仪器

  • 编程环境:Visual C++6.0环境下的C语言
  • 操作系统软件:windows 7

实验内容及步骤

  1. 设计一个先来先服务调度的算法
  2. 对选定的调度算法编程实现。
  3. 对选定的调度算法进行描述(包括数据结构即进程控制块的描述和算法步骤描述)描述算法时可以采用自然语言、可以画流程图也可以使用伪码。将算法描述写入预习报告

实验报告 2021-05-13

实验目的及要求:

  1. 进程调度是处理机管理的核心内容。
  2. 通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。
  3. 本实验要求用C语言编写和调试一个简单的进程调度程序。

实验环境

  • 编辑器: VSCode
  • 编程环境: GCC 4.8.1
  • 操作系统软件: Windows 10

实验内容

  1. 设计一个先来先服务调度的算法
  2. 对选定的调度算法编程实现。
  3. 对选定的调度算法进行描述(包括数据结构即进程控制块的描述和算法步骤描述)描述算法时可以采用自然语言、可以画流程图也可以使用伪码。将算法描述写入预习报告

实验步骤

  1. 首先定义一个结构体,用于保存一个进程的各种信息
    1
    2
    3
    4
    5
    struct pcb {
    char name[10], state;
    int ntime, rtime, vtime;
    struct pcb* link;
    }*ready = 0, *p;
  2. 以下为主要模块
    1
    2
    3
    4
    5
    6
    7
    8
    void sort();    // 建立对进程进行先来先服务排列函数,先来的放在队头,行成一个带头结点的链表队列
    void input(); // 建立进程控制块函数,输入测试用例
    void space(); // 统计就绪程序数目
    void disp(); // 显示进程当前状态
    void check(); // 查看进程
    void destory(); // 进程撤销函数,用于进程运行结束,撤销进程
    void running(); // 进程运行函数
    int main(void); // 主函数
  3. 主要代码(进程运行函数)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void running() { 
    (p->rtime)++;
    if(p->rtime == p->ntime) {
    destroy();
    } else {
    p->state = 'w';
    sort();
    }
    }

实验结果

  1. 测试用例

    进程名称 A B C D E
    到达时间 0 1 2 3 4
    服务时间 4 3 5 2 4
  2. 结果
    最开始
    运行中···

总结

  • 通过这次实验,加深了对进程的理解,同时掌握了进程控制块的结构,理解了进程的运行的并发性。