操作系统1-进程管理_第1页
操作系统1-进程管理_第2页
操作系统1-进程管理_第3页
操作系统1-进程管理_第4页
操作系统1-进程管理_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上仲恺农业工程学院实验报告纸 信息科学与技术(院、系)计算机科学与技术 专业142班_组 操作系统实验 课学号:0 姓名:黄丽君 实验日期 教师评定 实验一、进程管理一、实验目的通过实验使学生进一步了解进程、进程状态、进程控制等基本概念。基本能达到下列具体的目标:1、 理解进程 PCB 的概念,以及 PCB 如何实现、如何组织以及管理。2、 复习数据结构中如何对链的操作,包括建链、删除、插入结点等,来实现进程的管理。二、实验内容1、 建立一个结点,即 PCB 块包括用户标识域、状态域(执行、等待、就绪)、 link 域。2、 建立三个队列(执行队列、就绪队列、等待队列)

2、。3、 根据进程状态转换实现对三个队列的具体操作。具体的驱动可以采用时间片算法或手动调度的形式完成三个状态之间的转换4、 用 switch 选择语句选择状态。5、 按照自己的设定能完成所有的状态转换的运行(包括创建和运行结束)。三、实验步骤1、 复习进程管理三状态模型部分内容。2、 预习C+ Builder或VC+、Delphi、JBuilder线程编程。3、 运行示例程序,进一步明确实验要求。可以采用控制台模式或窗口模式。4、 上机编程、调试程序。5、 完成实验报告。4、 实验代码#include<stdlib.h>#include<stdio.h>#include&

3、lt;conio.h>#define getpch(type)(type*)malloc(sizeof(type) /将申请内存空间函数自定义为getpch(type)#define NULL 0struct pcdchar name10;char state; /进程状态int super; /进程优先级int ntime; /进程需要运行的时间int rtime; /进程已经运行的时间struct pcb* link;/进程指向另一个进程的指针*ready=NULL,*p; /ready表示指向就绪队列中首元素的指针,初始化为NULL,p用来存放当前刚刚输入的PCBtypedef s

4、truct pcb PCB; void sort() /建立对进程进行优先级排列函数PCB *first,*second;int insert=0;if(ready=NULL)|(p->super)>(ready->super) /优先级最大者,插入队首p->link=ready;ready=p;else /进程比较优先级,插入适当的位置first=ready;second=first->link;while(second!=NULL)if(p->super)>(ready->super) /若插入进程比当前进程优先数大 /插入到当前进程前面p-

5、>link=second;first->link=p;second=NULL;insert=1; /插入队列记录符号else /插入进程优先数最低,则插入到队尾first=first->link;second=second->link;if(insert=0) first->link=p;void input() /建立进程控制块函数,PCB输入模块int i,num;printf("n请输入进程号:");scanf("%d",&num);for(i=0;i<num;i+)printf("n进程号%d

6、: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=0;p->state='W'

7、p->link=NULL; sort(); /调用sort函数int space() /PCB就绪队列元素计数模块,计算就绪队列中PCB的总数int l=0;PCB* pr=ready; /获取就绪队列的头指针readywhile(pr!=NULL)l+;pr=pr->link;return(l);void disp(PCB* pr) /建立进程显示函数,用于显示当前进程printf("n进程名 t 进程状态 t 优先级 t 运行需要时间 t 已经运行时间n");printf("%s t",pr->name);printf("

8、%c t",pr->state);printf("%d t",pr->super);printf("%d t",pr->ntime);printf("%d t",pr->rtime);printf("n");void check() /建立进程查看函数PCB* pr;printf("nt当前正在运行的进程是:%s",p->name); /显示当前运行进程disp(p);pr=ready;printf("nt当前就绪队列状态是:n");

9、/显示就绪队列状态while(pr!=NULL)disp(pr);pr=pr->link;void destroy() /建立进程撤销函数,进程运行结束,撤销进程printf("n 进程: %s 已经完成n",p->name);free(p);void running() /建立进程就绪函数,进程运行时间到,置就绪状态(p->rtime)+;if(p->rtime=p->ntime)destroy(); /调用destroy函数else(p->super)-;p->state='W'sort(); /调用sort函数void main() /主函数int len,h=0; /h表示进程调度次数char ch;input();len=space(); /获取就绪队列长度while(len!=0)&&(ready!=NULL)ch=getchar();h+;printf("n 执行数:%dn",h);p=ready; /以下3行是将P从就绪队列的队首摘除ready=p->link;p->lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论