下载此文档

操作系统实验报告.doc


文档分类:高等教育 | 页数:约19页 举报非法文档有奖
1/19
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/19 下载此文档
文档列表 文档介绍
计算机操作系统
实验二进程调度

通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。

阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。
编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。
程序要求如下:
1)输出系统中进程的调度次序;
2)计算CPU利用率。

Windows操作系统、VC++ C语言

每个进程有一个进程控制块( PCB—type)表示。进程控制块可以包含如下信息:进程名(pid),需要运行时间(cpu—time),进程状态(state)等等。进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是执行 2,就绪 1、阻塞0。就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的运行时间减1,然后把它插入就绪队列尾部等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。当就绪队列的进程全都完成以后将阻塞进程队首进程插入到就绪队列尾部以便下次进行调用,反复直到阻塞队列为空,进程全部执行完成则退出。

#include <>
#include <>
struct PCB_type
{
int pid ; //进程名
int state ; //进程状态 2--表示"执行"状态1--表示"就绪"状态 0--表示"阻塞"状态
int cpu_time ; //运行需要的CPU时间(需运行的时间片个数)
};
struct QueueNode{
struct PCB_type PCB;
struct QueueNode *next;
};
//并设全程量:
struct QueueNode *ready_head=NULL, //ready队列队首指针
*ready_tail=NULL , //ready队列队尾指针
*blocked_head=NULL, //blocked队列队首指针
*blocked_tail=NULL; //blocked队列队尾指针
int static use_cpu,unuse_cpu;
/*定义进程的数目*/
//读入假设的数据,设置系统初始状态
void start_state()
{
int m,n,i;
struct QueueNode *p;

printf("输入就绪状态进程和阻塞状态进程个数 n,m:");
scanf("%d%d",&n,&m);
printf("就绪进程状态\n");
p=(struct QueueNode *)malloc(sizeof(struct QueueNode ));
p->next=NULL;
ready_head=ready_tail=p;

for(i=0;i<n;i++)
{
struct QueueNode *p;
p=(struct QueueNode *)malloc(sizeof(struct QueueNode ));
p->next=NULL;
printf("Enter %d process pid:",i+1);
scanf("%d",&p->);
printf("Enter %d process cpu_time:",i+1);
scanf("%d",&p->);
p->=1;
ready_tail->next=p;
ready_tail=p;
}
p=ready_head->next;
i=1;
printf("\n");
while(p)
{
printf("第%d个进程:%d %d和%d\n",i,p->,p->,p->);

p=p->next;

操作系统实验报告 来自淘豆网m.daumloan.com转载请标明出处.