模拟批处理系统作业调度算法

需积分: 25 17 下载量 176 浏览量 更新于2024-11-17 收藏 2KB TXT 举报
该代码实现了一个简单的批处理系统作业调度模拟程序,主要包含两个调度算法:高响应比优先(HRN)和最短作业优先(SJF)。程序使用链表结构存储作业控制块(JCB),包括作业名称、长度、磁带需求、打印机需求、运行时间和等待时间等信息。通过用户输入作业数量和参数,然后根据选择的调度算法进行作业选择。 在批处理系统中,作业调度是操作系统的关键部分,用于决定哪个作业应该在什么时候获得CPU执行。在这个模拟程序中: 1. JCB结构体:`JCB` 结构定义了作业的基本属性,如作业名、占用内存大小、对磁带和打印机的需求、运行时间以及等待时间。它还包含一个指针,用于链接多个作业控制块形成链表。 2. 内存管理:全局变量`memory`表示系统总内存,`tape`和`printer`分别表示系统中可用的磁带和打印机资源。 3. 链表操作:`head` 指针指向链表的头节点,用于遍历和修改作业队列。 4. shedule()函数:实现了HRN调度算法。该算法首先计算每个作业的响应比(等待时间除以运行时间),然后选择响应比最高的作业进行执行。在每次选择后,更新资源状态并从链表中移除选中的作业。 5. inital()函数:实现了SJF调度算法。这个算法简单地选择运行时间最短的作业进行执行。 6. 主函数main():主函数负责读取用户输入的作业数量和每个作业的详细信息,然后提供两种调度算法供用户选择。用户选择算法后,调用相应的调度函数执行调度策略,并打印出被选中的作业。 7. 用户交互:程序通过`scanf()`获取用户输入,包括作业的数量、各作业的参数以及调度算法的选择。 8. 错误处理:如果用户输入非法,程序会提示错误并重新启动。 这个模拟程序提供了一个理解批处理系统作业调度原理的简易模型,通过实际操作可以直观地看到不同调度策略如何影响作业的执行顺序和系统资源的分配。同时,它也展示了如何在C语言中实现基本的数据结构和算法,对于学习操作系统和数据结构的初学者来说具有一定的教育意义。
1231 浏览量
1. 课程设计的目的 操作系统课程的一个非常重要的环节是培养计算机专业学生的系统程序设计能力。通过操作系统课程设计,可以培养程序设计的方法和技巧,提高编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使我们更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 本次课程设计要求用高级语言编写和调试一个单道批处理系统的作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解 2. 课程设计的开发语言 C语言 3. 功能描述 在批处理系统中,作业进入系统后,是先驻留在外存上的,因此需要有作业调度的过程,以便将它们分批装入内存。作业调度用于决定把外存上处于后备队列中的哪些作业调入内存,并为他们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行。 应将哪些作业从外存调入内存,取决于所采用的调度算法。最简单的是先来先服务调度算法,这是指讲最早进度外存的作业最先调入内存;较常用的一种是短作业优先电镀算法,这是将外存上最短的作业最先调入内存;此外,还有基于响应比高者优先的调度算法,根据作业的响应时间和要求运行时间可计算出响应比。 4. 方案论证 4.1概要设计 根据功能描述,单道批处理程序作业调度的模拟程序要求实现如下功能:建立作业、选择作业、运行作业、计算作业周转时间和带权周转时间,以及这组作业的平均周转时间和带权平均周转时间、显示运行结果,退出程序。各模块的功能介绍如下: (1)建立作业:输入作业数,建立一组作业,并对所建立的这组作业进行初始化,用以模拟作业调度。初始化的内容包括作业名,作业要求运行的时间。 (2)选择作业:程序通过先来先服务调度算法、短作业优先调度算法和高响应比优先调度算法对建立的一组作业进行选择,决定把哪个作业从外存调入内存中。 (3)运行作业:根据初始化中设置的作业要求运行时间来模拟作业的运行。 (4)计算:计算作业周转时间和带权周转时间,以及这组作业的平均周转时间和带权平均周转时间。 (5)显示结果:将计算所得的结果输出。 (6)退出程序:当实验结束,不再需要模拟作业调度的时候,用来退出程序。