2020年实验报告操作系统实验一进程调度
时间:2020-11-25 11:18:49 来源:工作范文网 本文已影响 人
外 脚 手 架 搭 设 方 案 已 批 准 外 脚 手 架 搭 设 方 案 已 批 准 , 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 , 按 品 种 、 规 格 分 类 按 品 种 、 规 格 分 类 , 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 , 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 , 符 合 要 求 。
符 合 要 求 。计算机电子信息工程学院实验报告 成绩________ 课程名称 操作系统
指导教师
杨秀华 实验日期 211年9月15、22、29,1月12 院(系)计算机学院
专业班级 9计算机应用
实验地点
B-49
学生姓名
学号
实验项目名称
实验一 模拟设计进程调度
一、实验目的和要求 用 C 或 C++语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二、实验原理 进程调度 算法
采用最高优 先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算 法。
每个进程有 一个进程控制块( PCB)表示。进程控制块可以包含如下信息进程名、优先数、 到达时间、需要运行时间、已用 CPU 时间、进程状态等等。
进程的优先 数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达 时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。每个进程 的状态可以是就绪 W(Wait)、运行 R(Run)状态之一。
就绪进程获 得 CPU 后都只能运行一个时间片。用已占用 CPU 时间加 1 来表示。如果运行一 个时间片后,进程的已占用 CPU 时间已达到所需要的运行时间,则撤消该进程, 如果运行一个时间片后进程的已占用 CPU 时间还未达所需要的运行时间,也就 是进程还需要继续运行,此时应将进程的优先数减 1(即降低一级),然后把它插 入就绪队列等待 CPU。
每进行一次 调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。
重复以上过程,直到 所要进程都完成为止。
三、主要仪器设 备或材料
PC机,C++环 境 四、实验方法与 步骤(可加附页)
1 1 、主要数据结构
struct pcb {
char name[1];
//进程名字 char state;
//进程状态 int super;
//进程的优先级 int ntime;
//进程需要运行的时间 int rtime;
//进程已经运行的时间 struct pcb* link; } 2 2 、调度算法的流程图如上图
: :
五、实验数据记录、处理及结果分析
六、讨论、心得
外 脚 手 架 搭 设 方 案 已 批 准 外 脚 手 架 搭 设 方 案 已 批 准 , 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 , 按 品 种 、 规 格 分 类 按 品 种 、 规 格 分 类 , 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 , 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 , 符 合 要 求 。
符 合 要 求 。
计算机电子信息工程学院实验报告(附页)
程序参考代码
参考代码
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL
struct pcb
{
char name[1];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
void sort()
{
PCB *first, *second;
int insert=;
if((ready==NULL)||((p->super)>(ready->super)))
{
p->link=ready;
ready=p;
}
else
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super))
{
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else
{
first=first->link;
second=second->link;
}
}
if(insert==) first->link=p;
}
}
void
input()
{
int i,num;
printf("\n 请输入进程号");
scanf("%d",&num);
for(i=;i<num;i++)
{
printf("\n 进程号 No.%d:\n",i);
p=getpch(PCB);
printf("\n 输入进程名:");
scanf("%s",p->name);
printf("\n 输入进程优先数:");
scanf("%d",&p->super);
printf("\n 输入进程运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=;p->state="w";
p->link=NULL;
sort();
}
}
int space()
{
int l=; PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
V V oid disp(PCB * pr)
{
printf("\n qname \t state \t super \t ndtime \t runtime \n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}
V V oid check()
{
PCB* pr;
printf("\n **** 当前正在运行的进程是:%s",p->name);
disp(p);
pr=ready;
printf("\n ****当前就绪队列状态为:\n");
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}
V V oid destroy()
外 脚 手 架 搭 设 方 案 已 批 准 外 脚 手 架 搭 设 方 案 已 批 准 , 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 并 由 有 关 管 理 人 员 向 作 业 人 员 作 了 详 细 交 底 。
材 质 符 合 第 七 项 的 要 求 , 按 品 种 、 规 格 分 类 按 品 种 、 规 格 分 类 , 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 堆 放 整 齐 平 稳 。
搭 设 的 位 置 场 地 已 清 理 和 平 整 , 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 地 基 已 进 行 了 处 理 并 经 过 有 关 人 员 验 收 签 字 , 符 合 要 求 。
符 合 要 求 。{
printf("\n 进程 [%s] 已完成.\n",p->name);
free(p);
}
V V oid running()
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy();
else
{
(p->super)--;
p->state="w";
sort();
}
}
V V oid main()
{
int len,h=;
char ch;
input();
len=space();
while((len!=)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("\n The execute number:%d \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state="R";
check();
running();
printf("\n 按任一键继续......");
ch=getchar();
}
printf("\n\n 进程已经完成.\n");
ch=getchar();
} 知识改变命运
- 下载文档
- 收藏
- 0