实验二

一、 实验目的

通过模拟进程的调度,进一步了解进程的调度的具体过程。

二、 实验内容和要求

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语言表示进程的调度的更多相关文章

  1. 实验二:基于mykernel实现的时间片轮转调度

    原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...

  2. “Linux内核分析”实验二报告

    张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...

  3. 201871030125-王芬 实验二 个人项目-《D{0-1}问题》软件项目报告

    实验二 个人项目-<D{0-1}问题>软件项目报告 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 ...

  4. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  5. 实验二 PHP基本语法实验

    实验二 PHP基本语法实验 0 实验准备 0.1实验环境和相关工具软件 具体到的机房环境,请在Windowsxp环境下做本实验: l  操作系统:Windowsxp l  Web服务器:Apache ...

  6. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  7. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  8. 20145227&20145201 《信息安全系统设计基础》实验二 固件开发

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...

  9. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

随机推荐

  1. APP测试要点

    APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1.安装和卸载 ●应用是否可以在IOS不同系统版本或android不同系统版 ...

  2. 如何创建一个简单的C++同步锁框架(译)

    翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...

  3. touches

    e.touches.length//有多少个手指接触头

  4. mac下使用gcc

    1.下载安装macports:http://www.macports.org/install.php 安装完成之后,打开终端 2.在终端中输入 port install gcc_select 3.使用 ...

  5. struts 文件上传

    =================================== 实现单个文件上传 ====================================== 步骤1. 导入jar包: com ...

  6. SSH框架使用中存在的诡异异常

    背景 相信大多数人目前都在使用Spring + Struts2/SpringMVC + Hibernate来构建项目的整体架构,但是在使用中经藏会遇到一些诡异的问题,不知道如果解决,今天我遇到了一个非 ...

  7. MAC OS UI设计

    对比MAC OS 10.9到10.11的UI设计,苹果曾经卓尔不群的审美观逐步变得泯然众人. 当苹果也跟上扁平化的浪潮,许多搞设计的朋友都一时难以接受,曾经潮流的引领者变成了亦步亦趋的跟随者. MAC ...

  8. Lucene热词统计

    1.建立搜索表 ID KeyWords DT 搜索一次保存一次,id才用guid提高效率 /// <summary> /// 搜索数据 /// </summary> /// & ...

  9. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  10. 3.vi 和软件安装

    vi编辑器全屏幕纯文本编辑器1.软件开发(程序编写) 2.配置文件修改以及系统服务调用模式 命令模式 插入模式 末行模式 a  追加    i 插入   o  打开(下一行) ESC shift+: ...