您的位置:首页 > 其它

操作系统实验之进程管理

2016-10-10 22:22 393 查看
实验内容:

创建新的进程;查看运行的进程;换出某个进程;杀死运行进程以及进程之间的通信

下面是代码:
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"

struct PCB
{
int pid;
int priority;   //优先级
int size;  //大小
int message;    //消息
int live;
};

struct PCB neicun[20],waicun[20];
int count = 0,pid_l;            //count计数

int create() /* 创建一个进程的示例(不完整的程序) */
{
if(count >= 20)
{
printf("\n 内存已满,请先结束或换出进程\n");
}
else
{
printf("\n 请输入新进程的 pid(数字)\n");
scanf("%d",&neicun[count + 1].pid);

printf("\n 请输入新进程的优先级(数字)\n");
scanf("%d",&neicun[count + 1].priority);

printf("\n 请输入新进程的大小(数字)\n");
scanf("%d",&neicun[count + 1].size);

printf("\n 请输入新进程的消息(数字)\n");
scanf("%d",&neicun[count + 1].message);

neicun[count+1].live = 1;
count++;
}
return neicun[count - 1].live;
}

void viewrun( )/*查看运行进程*/
{
int vpid;
printf("\n 请输入进程的 pid\n");
scanf("%d",&vpid);
if((vpid > 0) && (vpid <= 20) && (neicun[vpid].live == 1))
{
printf("\n 进程的 pid 是: %d\n",neicun[vpid].pid);
printf("进程的优先级是: %d\n",neicun[vpid].priority);
printf("进程的大小是:%d\n",neicun[vpid].size);
printf("进程的消息是:%d\n",neicun[vpid].message);
}
else
{
printf("\n 所查看运行进程不存在\n");
}
printf("请按回车退出查看\n");
vpid = getch();
}

void huanchu()/*换出某个进程*/
{
int pid1,pid2;
char c;
printf("\n 请输入第一个替换进程的 pid\n");
scanf("%d",&pid1);

printf("\n 请输入第二个替换进程的 pid\n");
scanf("%d",&pid2);

if((pid1 > 0) && (pid1 <= 20) && (neicun[pid1].live == 1))
{
if(neicun[pid1].priority > neicun[pid2].priority)
{
waicun[20].pid = neicun[pid1].pid;
waicun[20].priority = neicun[pid1].priority;
waicun[20].size = neicun[pid1].size;
waicun[20].message = neicun[pid1].message;
neicun[pid1].pid = neicun[pid2].pid;
neicun[pid1].priority = neicun[pid2].priority;
neicun[pid1].size = neicun[pid2].size;
neicun[pid1].message = neicun[pid2].message;
neicun[pid2].pid = waicun[20].pid;
neicun[pid2].priority = waicun[20].priority;
neicun[pid2].size = waicun[20].size;
neicun[pid2].message = waicun[20].message;
printf("\n 替换完成\n");
printf("\n 被替换进程的 pid 是: %d\n",waicun[20].pid);
printf("被替换进程的优先级是: %d\n",waicun[20].priority);
printf("被替换进程的大小是:%d\n",waicun[20].size);
printf("被替换进程的消息是:%d\n",waicun[20].message);
}
else
{
printf("\n 进程优先级不够大");
}
}
else
{
printf("所查看运行进程不存在");
}
printf("请按回车退出换出进程\n");
c = getche();
}

void kill()/*杀死运行进程*/
{
int kpid;
printf("\n 请输入进程的 pid\n");
scanf("%d",&kpid);
if(kpid > 0 && kpid < 20 && neicun[kpid].live == 1)
{
neicun[kpid].live = 0;
}
}

void tongxun( )/*进程之间通信*/
{
int tpid1,tpid2;
int buffer; char d;
printf("\n 请输入通信源进程 pid\n");
scanf("%d",&tpid1);
printf("\n 请输入通信目的进程 pid\n");
scanf("%d",&tpid2);
if(tpid1 > 0 && tpid1 < 20 && neicun[tpid1].live == 1)
{
buffer = neicun[tpid1].message;
neicun[tpid1].message = neicun[tpid2].message;
neicun[tpid2].message = buffer;
printf("\n 源进程的消息是: %d\n",neicun[tpid1].message);
printf("\n 目的进程的消息是: %d\n",neicun[tpid2].message);
}
else
{
printf("\n 所查看运行进程不存在\n");
}
printf("\n 请按回车退出进程通信\n");
d = getch();
return;
}

int main()
{
int n;
char a;
n = 1;
while(1 == n)
{
system("cls");
printf("\n********************************************");
printf("\n************** 进程演示系统 ****************");
printf("\n********************************************");
printf("\n*        1.创建新的进程 2.查看运行进程     *");
printf("\n*        3.换出某个进程 4.杀死运行进程     *");
printf("\n*        5.进程之间通信 6.退出             *");
printf("\n********************************************");
printf("\n--------------请选择(1~6)-----------------");
a=getch();

switch(a)
{
case'1': create( ); break;
case'2': viewrun( ); break;
case'3': huanchu(); break;
case'4': kill( ); break;
case'5': tongxun( ); break;
case'6': exit(0);
default: n=0;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: