实验一进程管理c语言,操作系统实验一 进程管理

实验一  进程管理

1.目的和要求

通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。

2.实验内容

用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。

3.实验环境

Windows操作系统、VC++6.0

C语言

4.实验提示

PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。

主体程序

#include "conio.h"

#include "stdio.h"

#include "stdlib.h"

struct  PCB_type

{  int pid;

int priority;

int cputime;

………

};

struct PCB_type neicun[20];

int shumu=0,pid_l;

main()

{

int n,m,i;

char a;

n=1;

while(n==1)

{

clrscr();

printf("\n********************************************");

printf("\n*               进程演示系统               *");

printf("\n********************************************");

printf("\n     1.创建新的进程      2.查看运行进程     ");

printf("\n     3.换出某个进程      4.杀死运行进程     ");

printf("\n     5.退出系统                             ");

printf("\n********************************************");

printf("\n请选择(1~5)");

a=getchar();

switch(a)

{ case'1':

create( );  /*自定义过程*/

break;

case'2':

run( );  /* 自定义过程 */

break;

case'3':

huanchu();  /*自定义过程*/

break;

case'4':

kill( );   /*自定义过程*/

break;

case'5':

exit(0);

default: n=0;

}

}

}

create( )  /* 创建一个进程的示例(不完整的程序) */

{

if(shumu>=20)

{

printf("\n内存已满,请先结束或换出进程\n");

}

else

{

printf("\n请输入新进程的pid\n");

scanf("%d",&neicun[shumu-1].pid);

printf("\n请输入新进程的优先级\n");

scanf("%d",&neicun[shumu-1].youxian);

printf("\n请输入新进程的大小\n");

scanf("%d",&neicun[shumu-1].daxiao);

shumu++;

}

}

5.实验运行结果

********************************************

*               进程演示系统               *

********************************************

1.创建新的进程      2.查看运行进程

3.换出某个进程      4.杀死运行进程

5.退出系统

********************************************

请选择(1~5)

然后根据你选择的不同,出现不同的结果。

6. 实验要求:

上机前认真使用C语言编写好程序,采用Visual C++6.0作为编译环境;

上机时独立调试程序

根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)

实验报告代码:

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

struct PCB_type

{ int pid;

int priority;

int size;

char content[10];

int state; /* 0表示不在内存,1表示在内存,2表示挂起*/

};

struct PCB_type storage[20];

int num=0,hang_up=0,bj,i,j,pid;/*定义相关参数变量*/

/*********************创建新进程*************************/

void create()

{

if(num>=20) /*判断是否有存储空间*/

printf("\n 内存已满,请删除或挂起其他程序");

else{

for(i=0;i<20;i++)

if(storage[i].state==0) break; /*按顺序在内存中寻找创建新进程的空间*/

printf("\n请输入新建进程的pid值\n");

scanf("%d",&storage[i].pid);

for(j=0;j

if(storage[j].pid==storage[i].pid)

{ printf("\n该进程已存在于内存中");

return;

}

printf("\n请输入新进程的优先级 \n" );

scanf("%d",&storage[i].priority);

printf("\n请输入新进程的大小\n" );

scanf("%d",&storage[i].size);

printf("\n请输入新进程的内容\n" );

scanf("%s",&storage[i].content);

storage[i].state=1; /*将进程状态设为1,表示在内存中*/

num++;/*内存中进程数目加一*/

}

}

/********************查看当前运行进程**************************/

void run()

{ bj=0;

for(i=0;i<20;i++)

if(storage[i].state==1) /*若进程状态设为1,表示在内存中,输出查看*/

{printf("\n pid=%d",storage[i].pid);

printf(" priority=%d",storage[i].priority);

printf(" size=%d",storage[i].size);

printf(" content=%s",storage[i].content);

bj=1;/*存在于内存中的进程标记为1 */

}

if(bj==0)

printf("\n当前没有运行该进程\n" );/*标记为0,表示该进程未创建于内存中*/

}

/********************换出进程***************************/

void swap_out()

{if(num==0) /*num=0,表示内存中无进程*/

{ printf("\n当前没有运行的进程\n" );

return;

}

printf("\n请输入要换出的进程的pid值\n" );

scanf("%d",&pid);

bj=0;

for(i=0;i<20;i++)

{

if(pid==storage[i].pid)

{ if(storage[i].state==1)

{storage[i].state=2; /*将该进程的状态设为挂起*/

hang_up++;

printf("\n该进程已成功挂起换出\n" );

}

else if(storage[i].state==0)

printf("\n要换出的进程不存在\n" );

else printf("\n要换出的进程已经被挂起\n" );

bj=1;break;

}

}

if(bj==0) printf("\n要换出的进程不存在\n" );

}

/********************杀死进程***************************/

void kill()

{

if(num==0)

{ printf("\n当前没有运行的进程\n" );

return;

}

printf("\n请输入要杀死的进程的pid值\n" );

scanf("%d",&pid);

bj=0;

for(i=0;i<20;i++)

{

if(pid==storage[i].pid)

{ if(storage[i].state==1)

{storage[i].state=0; /*将该进程的状态设为不在内存中*/

num--; /*内存中的进程数目减少一个*/

printf("\n该进程已成功杀死\n" );

}

else if(storage[i].state==0)

printf("\n要杀死的进程不存在\n" );

else printf("\n要杀死的进程已经被挂起\n" );/*剩余状态为2,挂起*/

bj=1;break;

}

}

if(bj==0) printf("\n要杀死的进程不存在\n" );

}

/********************唤醒进程***************************/

void rouse()

{

if(num==0)

{ printf("当前没有运行的进程\n");

return;

}

if(hang_up==0) /*hang_up=0,表示没有挂起的进程*/

{ printf("\n当前没有换出的进程\n");

return;

}

printf("\n请输入要唤醒的进程的pid值:\n");

scanf("%d",&pid);

for(i=0;i<20;i++){

if(pid==storage[i].pid)

{

if(storage[i].state==2)

{storage[i].state=1; /*将该进程的状态设为挂起*/

hang_up--;

num++;

printf("\n该进程已成功唤醒\n" );

}

else if(storage[i].state==0)

printf("\n要唤醒的进程不存在\n" );

else printf("\n要唤醒的进程已经在内存中\n" );

}

}

}

/********************主程序***************************/

int main()

{int serial,n=1,i;

for(i=0;i<20;i++)

storage[i].state=0; /*使所有进程都初始设为不在内存中*/

while(n){

printf("\n**********************************************");

printf("\n* 进程演示系统 *");

printf("\n**********************************************");

printf("\n 1.创建新的进程 2.查看运行进程");

printf("\n 3.换出某个进程 4.杀死运行进程");

printf("\n 5.唤醒某个进程 6.退出程序 ");

printf("\n**********************************************");

printf("\n请选择(1~6):");

scanf("%d",&serial);

switch(serial)

{

case 1: create( ); break;

case 2 :run(); break;

case 3 :swap_out();break;

case 4 :kill();break;

case 5 :rouse();break;

case 6 :exit(0);

default: n=0;

break;

}

}

return 0;

}

运行结果:

cb8f3f04dcdb2dce288f17b49e839aad.png

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值