码迷,mamicode.com
首页 > 系统相关 > 详细

实验二 DOS进程管理

时间:2016-04-13 18:39:25      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

实验二  DOS进程管理

专业 网络工程1班 姓名 李灵锋 学号 201406114324

一、实验目的

利用编程工具实现系统进程管理以及调度的相关过程,理解进程调度的工作原理,熟悉系统的先关运作。

二、实验要求

 

1.通过模拟进程管理的实现,加深对进程这一概念的理解。

2.输入进程数目,执行程序。

3.显示出运行态,等待态以及就绪态的进程。

 

三、实验环境

在Windows系统或者是dos系统中,运用vs/vc++等工具实现。

四、实验原理及核心算法

1.原理:进程从创建而产生到撤销致消亡的整个生命周期,有时占有处理器执行,有时虽可运行但分不到处理器,有时虽有空闲处理器但因等待某个事发生而无法执行,这些都说明进程和程序是不同的。因此至少要定义三种进程状态,分别为:运行态、就绪态、等待态。而进程则在这三个状态之间转换。

2.代码过程:

// 201406114324.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define READY 1//就绪态
#define RUN 2//运行态
#define BLOCK 3//等待态(阻塞)

typedef struct pcbNode
{
int num;
struct pcbNode *next;
int cputime;
int state;
}pcb;

pcb *head;
pcb *run;

pcb *CreatPCB(int n)
{
int i;
pcb *p,*q;
head=(pcb*)malloc(sizeof(pcb));
head->next=NULL;
p=head;
for(i=1;i<=n;i++)
{
q=(pcb*)malloc(sizeof(pcb));
q->num=i;
q->next=NULL;
q->cputime=rand()%100;
q->state=READY;

p->next=q;
p=q;
}
return head;
}

void DelectPCB()
{
pcb *p;
if(head->next != NULL)
{
p=head->next;
head->next=head->next->next;
free(p);
}
}

void Display()
{
pcb *p;
p=head->next;
while(p)
{
printf("%d",p->num);
p=p->next;
}
printf("\n");
}

void control()
{
run=head->next;

run->state=RUN;
{
while(run->cputime)
run->cputime--;
printf("正在执行的进程编号为:%d\n",run->num);
run->state=RUN;
run=run->next;
DelectPCB();
printf("执行进程后就绪队列中的进程是:");
Display();
printf("\n");
}
}

void main()
{
int n;
int flag=1;
printf("请输入要创建的进程数量:");
scanf("%d",&n);

head=CreatPCB(n);
printf("就绪队列中的进程数有:");
Display();
printf("\n");
while(flag)//有flag的值判断是否继续执行control()函数
{
if(head->next)//判断进程是否完成
control();
else flag=0;
}
printf("\n");
system("pause");
}

 

 五、实验截图

技术分享

 

六、心得总结

通过对系统进程管理、进程调度的代码模拟实现,对系统进程管理有了更深一层的理解,还需多加练习,掌握好这一方面的知识。

实验二 DOS进程管理

标签:

原文地址:http://www.cnblogs.com/lfsm/p/5359693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!