操作系统实验一(进程创建、删除、调度等)实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一实验报告
实验源码:
#include "stdio.h"
#include
#include
#include
#include
#include
// 内存最大装备作业数
#define N 5
#define P_TIME 50
struct PCB{
int pid; // 进程id
int priority; // 优先权
int size; // 大小
int state; // 进程状态0表示不存在1表示运行状态2表示阻塞状态
char info[10]; // 消息
};
struct PCB neicun[N];
int shumu = 0, guaqi = 0;
int pid;
int flag = 0; // 查找相应进程是否存在的标志
// 进程调度
enum state{
ready,
working,
block,
finish
};// 定义进程状态
struct D_PCB{
char name[4]; // 进程名
int priority; // 优先权
int cputime; // CPU运行时间
int needtime; // 进程运行所需时间
int count; // 进程执行次数
int round; // 时间片轮转轮次
state process; // 进程状态
D_PCB *next;
};// 定义进程PCB
// 创建进程
void create()
{
system("cls");
if(shumu >= N) printf("\n内存已满,请先换出或杀死进程\n");
else{
for(int i = 0; i < N; i++)
// 定位,找到还未创建的进程
if(neicun[i].state == 0) break;
printf("请输入新进程pid\n");
scanf("%d",&(neicun[i].pid));
for(int j = 0; j < i; j++)
if(neicun[j].pid == neicun[i].pid){
printf("\n该进程已存在\n");
return;
}
printf("请输入新进程优先级\n");
scanf("%d",&(neicun[i].priority));
printf("请输入新进程大小\n");
scanf("%d",&(neicun[i].size));
printf("请输入新进程内容\n");
scanf("%s",&(neicun[i].info));
// 创建进程,使标记位为1
neicun[i].state = 1;
shumu++;
}
}
// 查看运行进程
void run()
{
system("cls");
printf("\npid\tprioroty\tsize\tstate\tinfo\n");
for(int i = 0; i < N; i++){
if(neicun[i].state == 1){
// 输出运行进程的各个属性值
printf("%d\t%d\t\t%d\t%d\t%s\n",neicun[i].pid,neicun[i].priority,neicun[i].size,n eicun[i].state,neicun[i].info);
flag = 1;
}
}
if(!flag) printf("\n当前没有运行进程\n");
}
// 换出进程
void huanchu()
{
system("cls");
if(!shumu){
printf("当前没有运行进程\n");
return;
}
printf("\n输入换出运行进程ID值\n");
scanf("%d",&pid);
for(int i = 0; i < N; i++){
// 定位,找到所要换出的进程,根据其状态做相应处理
if(pid == neicun[i].pid){
if(neicun[i].state == 1){
neicun[i].state = 2;
guaqi++;
printf("\n已经成功换出进程\n");
}
else if(neicun[i].state == 0) printf("\n要换出的进程不存在\n");
else printf("\n换出的进程已被挂起\n");
flag = 1;
break;
}
}
// 找不到,则说明不存在
if(flag == 0) printf("\n要换出的进程不存在\n");
}
// 杀死进程
void kill()
{
system("cls");
if(!shumu){
printf("当前没有运行进程\n");