实验一 进程管理
一、实验目的
进程调度是处理机管理的核心内容,本实验要求编写额调试一个简单的进程调度程序,通过程序的编写加强对进程概念的理解。
二、实验仪器
1、PC兼容机
2、Windows、DOS系统
3、C语言
三、实验内容及要求
1. 通过C语言创建新的进程;查看运行进程;换出某个进程;杀死运行进程;进程之间通信以及进程调度等功能。
2. 为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
3. 进程调度算法有优先数调度算法和时间片轮转调度算法。
(1). 在优先权(优先数)算法中,优先数可以先取值为一数值50(例如,每个进程的优先数的初始值为(50减去NEEDTIME)),进程每执行一次,优先数减3,CPU已运行时间片数加1,进程还需要的时间片数减1。对于遇到优先数一致的情况,采用FIFO策略解决。注意:每次执行完后,都需要重新判断优先权(当前优先权减3)。
(2). 在时间片轮转算法中,采用固定时间片,即:进程每执行一次,执行一个CPU时间片,1个时间片包含2个时间单位,一个时间片结束时,进程已使用CPU时间数加2,进程还需要的CPU时间数减2,如还有任务未完成需要重新到就绪队列排队。
四、实验设计结果及代码
代码:
// ggg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
void create();
void diaodu(char name[100],int needtime[100],int n);
void youxian(char name[100],int needtime[100],int n);
void mainmenu(char name[100],int needtime[100],int n);
void chakan(int n);
void huan(int n);
void delet(int n);
void shijian();
char name[100]={0};
int time[100]={0};
int n;
int num=0;//进程数目
int needtime[100]={0};
int priority[100]={0};
char *state[100]={0};
#define ready 0
#define finish 1
struct pcb
{
char name[10];
int priority;
int state;
int needtime;
int runtime;
int time;
struct pcb *next;
};
typedef struct pcb PCB;
PCB *head=NULL;
void diaodu(char name[100],int needtime[100],int n)
{int a;
printf("\n\n选择调度算法:");
printf("\n1 优先数算法");
printf("\n2 时间片轮转算法");
printf("\n3 退出");
printf("\n请选择(1~3) :");
scanf("%d",&a);
switch(a)
{
case 1: youxian(name,needtime,n);break;
case 2: shijian();break;
case 3: break;
}
//mainmenu();
}
void shijian()
{int Fnum=50;
int i,j,cputime=0;
int n;
printf("输入创建进程个数:\n");
scanf("%d",&n);
printf("创建新的进程\n");
printf("请输入进程名和时间(例如:A 2):\n");
for(i=0;i
{scanf("%s",&(name[i]));
scanf("%d",&needtime[i]);
cputime=cputime+needtime[i];
time[i]=0;
state[i]="ready";
}
j=0;
for(i=0;i
{
printf("