操作系统实验一:进程管理
一、实验目的:
通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤销)。
二、实验要求及内容:
用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间的通信等功能。
三、实验代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
//#define NULL 0
int shumu=0;
//进程的内容结构体
struct node
{
char a[20];
//int a;
// char ch;
};
typedef struct node Node;
//进程PCB结构体
struct jincheng
{
int pid;
int youxian;
float luntime;
float zhantime;
char zhuangtai; //a表示执行,b表示动态就绪
Node *neirong;
struct jincheng *next;
};
typedef struct jincheng Jincheng;
Jincheng *jiuxu,*yunxing,*p,*q;
//换出进程函数
void huanchu(int a)
{
p=jiuxu;
while(p->pid!=a&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("该进程不在内存里!\n");
return;
}
if(p==jiuxu)
{
q=yunxing->next;
yunxing->next=jiuxu;
q->next=jiuxu->next;
jiuxu=q;
}
else
{
q->next=yunxing->next;
q->next->next=p->next;
yunxing->next=p;
}
}
//杀死正在运行进程函数
void shasi()
{
yunxing->next=NULL;
printf("运行的进程已经杀死!\n");
return;
}
//创建新进程后与正在运行进程比较优先级并根据优先级判断谁该占用处理机
int bijiao()
{
int i,j;
p=jiuxu;
while(p->next!=NULL)
{
p=p->next;
}
q=p; //q指向进程的末尾,即新建的进程
i=q->youxian; //i代表新建进程的优先级
j=yunxing->next->youxian; //j代表正在执行进程的优先级
if(i>j) //如果新建的进程的优先级高于正在执行程序的优先级
{
p=jiuxu;
if(p==q) //就绪队列的进程中只有一个进程。也就是那个新建的进程
{
jiuxu->next=yunxing->next;
yunxing->next=jiuxu;
jiuxu=jiuxu->next;
return 1;
}
else{
while(p->next!=q)
{
p=p->next;
} //执行完后 p 指针在 q指针前面
p->next=yunxing->next; //将正在执行的进程放置p的后面