实验二 用C语言表示进程的调度
实验二
一、 实验目的
通过模拟进程的调度,进一步了解进程的调度的具体过程。
二、 实验内容和要求
1.进程PCB的结构体定义
2.定义队列
3.输入进程序列
4.排序(按到位时间)
5.输出进程运行的结果
三、程序
#include<stdio.h>
#include<malloc.h>
#include<time.h>
/*定义一个Course类型的结构体*/
typedef struct queue{
int number;
int intime;
int runningtime;
int alltime;
int waitingtime;
struct node *next;
}Course;
/*定义一个PCB类型来表示队列*/
typedef struct node2{
Course *front;
Course *rear;
}PCB;
/*初始化队列*/
PCB initqueue(){
PCB q;
q.front=(Course *)malloc(sizeof(Course));
q.front->next=NULL;
q.rear=q.front;
return(q);
}
/*进入队列*/
PCB inserq(PCB q,int x,int j,int y,int k){
Course *p;
p=(Course *)malloc(sizeof(Course)); //申请结点p
p->number=x;//x.j.y.k储存到新结点p中
p->intime=j;
p->runningtime=y;
p->waitingtime=k;
p->alltime=y+k;
p->next=NULL;//p的指针域置空
q.rear->next=p;//指针域指向p,p成为新的队尾
q.rear=p; //对尾指针域指向p,保证rear指向新的队尾
return (q);
}
/* 打印进程调度的结果*/
void display(PCB q)
{
Course *p;
printf("\n队列:\n");
p=q.front->next;
while(p!=NULL)
{
printf("进入的顺序:%d ",p->intime);printf("\n");
printf("进程的编号:%d ",p->number);
printf("运行的时间:%d ",p->runningtime);
printf("等待的时间:%d ",p->waitingtime);
printf("所用的总时间:%d ",p->alltime);
printf("\n");
p=p->next;
}
}
main(){
int x,y,z,i=0,k,j=1/*用来记录进程进入的顺序*/;
PCB q;
q=initqueue();
for(i=0;i<5;i++ ){
printf("请输入进程的编号:");
scanf("%d",&x);
printf("请输入进程的运行的时间:");
scanf("%d",&y);
k=rand()%10;//随机产生0-9的数,代表进程要等待的时间。
q=inserq(q,x,j,y,k);
j++;
}
display(q);
}
initqueue()//初始化队列
1
inserq()//进入队列
1
display()//打印队列
3. 主要程序段及其解释:
/*主函数,实现对结构体类型变量的定义以及对队列的使用*/<br>main(){
int x,y,z,i=0,k,j=1/*用来记录进程进入的顺序*/;
PCB q;
q=initqueue();
for(i=0;i<5;i++ ){
printf("请输入进程的编号:");
scanf("%d",&x);
printf("请输入进程的运行的时间:");
scanf("%d",&y);
k=rand()%10;//随机产生0-9的数,代表进程要等待的时间。
q=inserq(q,x,j,y,k);
j++;
}
display(q);<br>}
/*定义一个Course类型的结构体*/
typedef struct queue{
int number;
int intime;
int runningtime;
int alltime;
int waitingtime;
struct node *next;
}Course;
/*初始化队列*/
PCB initqueue(){
PCB q;
q.front=(Course *)malloc(sizeof(Course));
q.front->next=NULL;
q.rear=q.front;
return(q);
}
/*进入队列*/
PCB inserq(PCB q,int x,int j,int y,int k){
Course *p;
p=(Course *)malloc(sizeof(Course)); //申请结点p
p->number=x;//x.j.y.k储存到新结点p中
p->intime=j;
p->runningtime=y;
p->waitingtime=k;
p->alltime=y+k;
p->next=NULL;//p的指针域置空
q.rear->next=p;//指针域指向p,p成为新的队尾
q.rear=p; //对尾指针域指向p,保证rear指向新的队尾
return (q);
}
/* 打印进程调度的结果*/
void display(PCB q)
{
Course *p;
printf("\n队列:\n");
p=q.front->next;
while(p!=NULL)
{
printf("进入的顺序:%d ",p->intime);printf("\n");
printf("进程的编号:%d ",p->number);
printf("运行的时间:%d ",p->runningtime);
printf("等待的时间:%d ",p->waitingtime);
printf("所用的总时间:%d ",p->alltime);
printf("\n");
p=p->next;
}
}
四、总结
使用C语言来对进程的调度,是一件比较有难度的事情,有很多不懂得地方。
实验二 用C语言表示进程的调度的更多相关文章
- 实验二:基于mykernel实现的时间片轮转调度
原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...
- “Linux内核分析”实验二报告
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...
- 201871030125-王芬 实验二 个人项目-《D{0-1}问题》软件项目报告
实验二 个人项目-<D{0-1}问题>软件项目报告 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 实验二 PHP基本语法实验
实验二 PHP基本语法实验 0 实验准备 0.1实验环境和相关工具软件 具体到的机房环境,请在Windowsxp环境下做本实验: l 操作系统:Windowsxp l Web服务器:Apache ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145227&20145201 《信息安全系统设计基础》实验二 固件开发
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
随机推荐
- 为什么Pojo类没有注解也没有spring中配置<bean>也能够被加载到容器中。
Spring的注入机制其实就是代替了new的这个过程(称为解耦). 写了一个Thread类,没有加注解@Component,但是可以正常运行,开始为了自圆其说,打通逻辑,猜测是StartThread中 ...
- ubuntu配置tftp服务
ubuntu配置TFTP服务: TFTP是用来下载远程文件的最简单的网络协议,基于UDP协议.xinetd是新一代的网络守护进程服务程序,经常用于管理多种轻量型internet服务. sudo apt ...
- nodejs与模块soap的用法
最近做了点东西要求用到soap模块,我是怎么知道的呢,收到了 <soap:Body><soap:Fault><faultcode>soap:Client</f ...
- 客户端使用java,服务端使用c++的corba编程环境搭建
我们先用c++实现服务端和客户端,然后再用java编写客户端. 1. 首先安装omniORB,omniORB提供 omniidl命令,以及一些头文件和库. omniORB一般是需要你自己进行编译. 2 ...
- SQL Server 参数化 PARAMETERIZATION
ALTER DATABASE dbname SET PARAMETERIZATION SIMPLE --默认 ALTER DATABASE dbname SET PARAMETERIZATI ...
- iOS版微信朋友圈数据库的简要分析
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4550523.html 之前写了一些关于微信聊天记录的博文之后,不少 ...
- win2008使用FireDac连接ORACLE数据库问题
2008上装DELPHI XE7,无论用FireDac 还是Ado都连不上ORACLE数据库 --------------------------- Debugger Exception Notifi ...
- 使用bat/vbs/ahk对Windows下进行自动化操作
回想90年代,我们在DOS下使用各种命令链对操作进行简化和自动化,如DOS 5.0添加的DosKey,利用管道和重定向对多组命令进行链式操作.后来使用了Ubuntu和其它Linux发型版后,bash下 ...
- PHP获取时间、时间戳的各种格式
1.获取当前时间方法date() 很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳--可填参数. 2.获取时间戳 ...
- 转:Log4j使用
转:https://my.oschina.net/kkrgwbj/blog/638780 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录. ...