C语言进程调度实验设计与算法实现
在本篇C进程调度实验设计中,主要探讨了操作系统中的进程管理,特别是基于C语言实现的进程调度算法。实验的核心目标是理解并实现两种常见的进程调度策略:轮转(Round Robin, RR)和优先级(Priority, PRIO)。以下是详细的解析: 1. **进程控制块(PCB)结构**: 这部分定义了一个名为`struct process`的数据结构,包含了进程的基本信息,如进程ID(id)、优先级(priority)、CPU时间(cputime)、运行时间(alltime)、状态(state)以及指向下个进程的链接(next)。`prochain`数组用于存储多个进程的PCB。 2. **全局变量**: `procnum`用于记录进程数量;`rand()`可能是一个随机数生成函数,用于模拟进程的随机性;`alog`是用户输入的调度算法选择,1表示轮转,2表示优先级调度。 3. **主程序**(`main()`): 主程序首先提示用户输入调度算法类型,根据用户输入调用不同的调度函数:`init()` 初始化进程和队列,`prisch()`执行优先级调度,`timesch()`执行轮转调度。如果输入无效,程序会返回到循环开始让用户重新输入。 4. **进程调度算法**: - **轮转调度(Round Robin, RR)**:通过设定时间片(time slice),每个进程分配固定的时间来执行,当时间片用完后,将进程切换到等待队列,确保所有进程有平等的执行机会。 - **优先级调度(Priority, PRIO)**:进程根据其优先级决定执行顺序,优先级高的进程优先被执行。在这个实验中,`prisch()`函数应负责根据优先级对进程进行调度。 5. **输出函数**(`print()`): 这个函数用于显示当前正在运行的进程、等待队列以及进程PCB序列列表。它遍历进程链表,打印出进程ID和其他相关信息,便于观察调度结果。 这个C进程调度实验着重于实现和理解两种基本的进程调度机制,并通过代码演示它们在实际操作中的应用。参与者将有机会学习如何组织和管理进程,以及理解不同调度策略对系统性能的影响。通过这个实验,学生可以深化对操作系统内核中进程调度原理的理解,并提升编程技能。
#include <stdlib.h>
#define furthest 5
struct process /*PCB STRUCTURE*/
{
int id;
int priority;
int cputime;
int alltime;
char state;
int next; }prochain[furthest-1];
int procnum;
int rand();
int alog;
int run,head,tail,j;
main() /*MAIN PROGRAM*/
{
agan: printf("type the alogrithm is (1:RR,2:PRIO):");
scanf("%d",&alog);
if (alog==2)
{
printf("output of priority.\n");
init();
prisch();
}
else
{
if (alog==1)
{ printf("output of round robin.\n");
timesch();}
else
{ printf("try again,please\n");
goto agan;}
}
for (j=1;j<=40;j++)
{ printf("="); }
printf("\n\n");
for (j=1;j<=40;j++)
{ printf("="); }
printf("\n\n");
printf("system finished\n");}
print() /*PRINT THE RUNNING PROCESS,WAITING
QUEUE AND PCB SEQUENCE LIST*/
{ int k,p;
for (k=1;k<=40;k++)
printf("=");
printf("\nrunning proc. ");
printf("waiting queue.");
printf("\n %d ",prochain[run].id);
p=head;
while(p!=0)
{ printf("%5d",p);
p=prochain[p].next;}
printf("\n");
for (k=1;k<=40;k++)
printf("=");
printf("\n");
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全