<操作系统实验>实验一 单处理机系统的进程调度 4学时

一、实验目的要求

 

通过模拟进程控制方法和单处理机系统下的进程调度,了解进程的结构、进程的创建与撤销,进程的组织及进程的状态及其转换,掌握进程调度策略。

二、实验材料和仪器设备

Windows操作系统环境下的个人微机。

三、实验内容

实现对N(N的值不小于5)个进程采用动态优先权优先算法的进程调度。

注意:本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或进程。

程序要求:为了清楚地观察诸进程的调度过程,程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名,以及运行一次后进程队列的变化。打印程序运行时的初值和运行结果的要求如下:

I)各进程控制块的初始信息。

II)选中运行的进程名以及选中进程运行后的各进程控制块信息,且要求每选中一个进程运行后都要打印。

【提示】

(1)假定系统有5个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:

<

进程名

需要运行时间

已用CPU时间

优先数

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
处理器系统进程调度 1.实验目的 加深对进程概念的理解,明确进程和程序的区别; 深入了解系统如何组织进程、创建进程; 进一步认识如何实现处理器调度。 2.实验预备知识 进程的概念; 进程的组织方式; 进程的创建; 进程的调度。 3.实验内容 编写程序完成处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。 4.提示与讲解 这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。 考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB记录各个进程执行时的情况。不同的操作系统进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: ① 标识信息 每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。 ② 说明信息 用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放位置等等。实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。 ③ 现场信息 现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程进程控制块中读取现场信息进行现场恢复。现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。在实验中,可选取几个寄存器作为代表。用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄存器。 ④ 管理信息 管理信息记录进程管理和调度的信息。例如进程优先数、进程队列指针等。实验中,仅包括队列指针。
下面是一个简处理器系统进程调度代码,采用先来先服务(FCFS)算法: ``` #include <stdio.h> #include <stdlib.h> #define MAX_PROCESSES 10 typedef struct { int pid; // 进程ID int burst_time; // 进程执行时间 int waiting_time; // 进程等待时间 int turnaround_time; // 进程周转时间 } Process; int main() { int n, i; Process processes[MAX_PROCESSES]; float avg_waiting_time = 0, avg_turnaround_time = 0; printf("请输入进程数量(最多%d个):", MAX_PROCESSES); scanf("%d", &n); printf("请输入每个进程的执行时间:\n"); for (i = 0; i < n; i++) { printf("进程%d:", i + 1); scanf("%d", &processes[i].burst_time); processes[i].pid = i + 1; processes[i].waiting_time = 0; processes[i].turnaround_time = 0; } // 计算等待时间和周转时间 for (i = 0; i < n; i++) { if (i == 0) { processes[i].waiting_time = 0; } else { processes[i].waiting_time = processes[i - 1].waiting_time + processes[i - 1].burst_time; } processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time; avg_waiting_time += processes[i].waiting_time; avg_turnaround_time += processes[i].turnaround_time; } avg_waiting_time /= n; avg_turnaround_time /= n; printf("\n进程\t执行时间\t等待时间\t周转时间\n"); for (i = 0; i < n; i++) { printf("%d\t%d\t\t%d\t\t%d\n", processes[i].pid, processes[i].burst_time, processes[i].waiting_time, processes[i].turnaround_time); } printf("\n平均等待时间:%.2f\n平均周转时间:%.2f\n", avg_waiting_time, avg_turnaround_time); return 0; } ``` 该代码使用结构体存储每个进程的信息,包括进程ID、执行时间、等待时间和周转时间。首先要求用户输入进程数量和每个进程的执行时间,然后计算每个进程的等待时间和周转时间,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值