操作系统进程管理实验
操作系统——进程管理实验
昆明理工大学信息工程与自动化学院学生实验报告
( 2010 —2011 学年 第 二 学期 )
课程名称:操作系统 开课实验室:信自楼444 2011 年 4 月 10 日
一、实验目的
通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。
二、实验原理及基本技术路线图(方框原理图)
用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。
①进程的状态转换图
②数据结构定义、主要变量的说明、函数的说明及各原语的功能说明
typedef struct PCB 定义结构体PCB进程控制块;char NAME[20] 定义结构体变量,进程名;long
ID 定义进程id;int RUNTIME 定义进程运行时间;char STATE[6] 定义进程状态 有 ready 、wait 、run;
操作系统——进程管理实验
int PRIORITY定义权值。 typedef struct QNode { PCB pcb; struct QNode *next; }QueuePtr; 定义单链表,有定义指针next。typedef struct LinkQueue { int prior; QueuePtr *front; QueuePtr *rear; int PartTime; }LinkQueue;
链队列中定:优先级、结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点和尾结
点,还运行的时间片。LinkQueue Readyqueue[10] 链队列的单链表。
void schedule() 声明调度函数,用来调度进程的运行;void show() 声明输出函数,用来输出的一
个函数;void Create()声明创建进程的函数,用来创建进程。
yunxingshijian=1+(int)(rand()%30); 此语句是随机生成一个整数赋给运行时间RUNTIME;
youxianji=1+(int)(rand()%9); 该语句随机生成一个整数(1~9)赋给优先级; strcpy(p->http://www.77cn.com.cn,name)将名字赋给PCB块;strcpy(p->pcb.STATE,"Ready")将进程状态赋给PCB块; p->pcb.PRIORITY=youxianji将优先级赋给PCB块; p->pcb.RUNTIME=yunxingshijian; 将运行时间赋给PCB块; p->pcb.ID=id 将id号赋给PCB块。
{Readyqueue[i].front->next=p->next; Readyqueue[i+1].rear->next=p; Readyqueue[i+1].rear=p; p->next=NULL; } p移到下一队列的队尾,使Readyqueue[i+1].rear指向最后一个结点。{Readyqueue[i].front->next=p->next; Readyqueue[9].rear->next=p; p->next=NULL; Readyqueue[9].rear=p; } //p->next前移,把p移到运行结束的队列Readyqueue[9].rear。
③多级反馈队列调度算法的描述
一个进程被调度,则其运行时间有p->pcb.RUNTIME=p->pcb.RUNTIME-(int )pow(2,i+1),此后如
果该进程的p->pcb.RUNTIME<0或p->pcb.RUNTIME=0,此进程就结束且加入到Readyqueue[9].rear->next=p且p->next=NULL。没有结束就移加到下一队列的尾部且优先级减“1”(Readyqueue[i].front->next=p->next;Readyqueue[i+1].rear->next=p;Readyqueue[i+1].rear=p;p->next=NULL; )。然后往下执行。如此循环.iv Readyqueue[i].front->next!=NULL发生时,就往下一优先级运行。直到所有进程结束。
④程序功能结构图、流程图
<1>创建进程函数Create()(左图) <2>调度函数schedule()(右图)
操作系统——进程管理实验
开
始
开
始
调用 InitQueue()函数
1=>i
输入 m
1=>jReadyqueue[i].front->next=p->next; Readyqueue[i+1].rear->next=p; Readyqueue[i+1].rear=p; p->next=NULL;
输入 name
随机生成优先级、运行时间
strcpy(p->pcb.STATE,"ready");
调用 show()
for i=0 to 9 Y youxianji==9-ik=Readyqueue[i].front; strcpy(p->http://www.77cn.com.cn,name); strcpy(p->pcb.STATE,"Ready"); p->pcb.PRIORITY=youxianji; p->pcb.RUNTIME=yunxingshiji an; p->pcb.ID=id;
Readyqueue[i].front->next=p->next; Readyqueue[9].rear->next=p; p->next=NULL;Readyqueue[9].rear=p; strcpy(p->pcb.STATE,"finish");
Y
p->pcb.RUNTIME<=0
调用 show();函数
p=Readyqueue[i].front->next;
k->next=null Y
N
Sleep((int)pow(2,i+1)); p->pcb.RUNTIME=p->pcb.RUN
k=k->next
TIME-(int)pow(2,i+1); strcpy(p->pcb.STATE,"run");
k->next=p; p->next=NULL; Readyqueue[i].rear=p
Readyqueue[i].fro nt->next=NULL
N
printf(“创建成功”);
Y Y Y i<9 N 结 束
N
j>m
调用 show()
结
束-3-
操作系统——进程管理实验
三、所用仪器、材料(设备名称、型号、规格等)。
所用仪器:计算中心201;操作系统:Microsoft Visual C++;软件平台:Microsoft Visual C++
四、实验方法、步骤
#include<stdio.h> #include<malloc.h> #include<time.h> #include<math.h> #include<windows.h>
typedef struct PCB //定义结构体PCB进程控制块 {
typedef struct QNode //单链表 { PCB pcb;
typedef struct LinkQueue //链队列 { int prior; //优先级
LinkQueue Readyqueue[10]; //链队列的单链表 int N; //N为当前进程数 void schedule(); //声明调度函数 void show(); //声明输出函数
void InitQueue() // 队列的初始化、给每个队列加个头结点 { for(int i=0;i<10;i++) {
Readyqueue[i].PartTime=(int )pow(2,i+1); //每个进程的时间片 Readyqueue[i].prior=9-i; //每进程的优先级
Readyqueue[i].front=(QueuePtr*)malloc(sizeof(QueuePtr)); //为进程申请空间
QueuePtr *front; //结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点 QueuePtr *rear; //结构体里的QueuePtr类型指针变量,指向该优先级的进程的尾结点 int PartTime; //时间片 struct QNode *next; }QueuePtr;
char NAME[20]; //结构体变量,进程名 long ID; //进程id int RUNTIME; //进程运行时间
char STATE[6]; //进程状态 ready wait run int PRIORITY; //权值
}PCB;
}LinkQueue;
操作系统——进程管理实验
}
}
//***************************创建进程************************************************** void Create() {
InitQueue …… 此处隐藏:5651字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




