实验二 用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 成绩: 指导教师:娄嘉 ...
随机推荐
- APP测试要点
APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1.安装和卸载 ●应用是否可以在IOS不同系统版本或android不同系统版 ...
- 如何创建一个简单的C++同步锁框架(译)
翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...
- touches
e.touches.length//有多少个手指接触头
- mac下使用gcc
1.下载安装macports:http://www.macports.org/install.php 安装完成之后,打开终端 2.在终端中输入 port install gcc_select 3.使用 ...
- struts 文件上传
=================================== 实现单个文件上传 ====================================== 步骤1. 导入jar包: com ...
- SSH框架使用中存在的诡异异常
背景 相信大多数人目前都在使用Spring + Struts2/SpringMVC + Hibernate来构建项目的整体架构,但是在使用中经藏会遇到一些诡异的问题,不知道如果解决,今天我遇到了一个非 ...
- MAC OS UI设计
对比MAC OS 10.9到10.11的UI设计,苹果曾经卓尔不群的审美观逐步变得泯然众人. 当苹果也跟上扁平化的浪潮,许多搞设计的朋友都一时难以接受,曾经潮流的引领者变成了亦步亦趋的跟随者. MAC ...
- Lucene热词统计
1.建立搜索表 ID KeyWords DT 搜索一次保存一次,id才用guid提高效率 /// <summary> /// 搜索数据 /// </summary> /// & ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- 3.vi 和软件安装
vi编辑器全屏幕纯文本编辑器1.软件开发(程序编写) 2.配置文件修改以及系统服务调用模式 命令模式 插入模式 末行模式 a 追加 i 插入 o 打开(下一行) ESC shift+: ...