操作系统实验(模拟进程管理)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验

————(1)模拟进程管理

专业:信息管理与信息系统

班级:信管082

姓名:温静

实验一进程管理

1.目的和要求

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

2.实验内容

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

3.主体程序

#include

#include

#include

struct PCB_type

{ int pid;

int priority;

int cputime;

int state;

int shumu=0,pid_l;

struct PCB_type neicun[20];

struct PCB_type hc[10];

int max=0;int number=0;

void create();

void run();

void huanchu();

void kill();

/* 创建新进程*/

void create()

{

if(shumu>=20)

{

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

}

else

{

shumu++;

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

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

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

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

printf("\n请输入新进程的运行时间\n");

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

printf("\n创建进程时令其状态为就绪\n");

neicun[shumu-1].state=2;

}

printf("\n创建进程成功!\n");

}

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

void run()

{

int max=0;

for(int i=0;i

{

if((neicun[i].state==1)&&(neicun[i].priority>=neicun[max].priority)) max=i;

}

neicun[max].state=3;

printf("当前运行进程程序名:\n%d",neicun[max].pid);

printf("\n该进程的优先级:\n%d",neicun[max].priority);

printf("\n该进程的运行时间:\n%d",neicun[max].cputime);

printf("\n该进程的状态:\n%d",neicun[max].state);

}

/* 换出*/

void huanchu()

{

int k;

printf("请输入要换出程序的程序名:");

scanf("%d",&k);

for(int j=0;j

{

if(neicun[j].state==1)

{

hc[number].pid=neicun[j].pid;

hc[number].state=neicun[j].state;

hc[number].priority=neicun[j].priority;

hc[number].cputime=neicun[j].cputime;

number++;

neicun[j].pid=0;

neicun[j].state=0;

neicun[j].priority=0;

neicun[j].cputime=0;

pid_1++;

}

else printf("进程%d无法换出的pid:%d\n",j.neicun[j].pid);

if(number!=0)

for(int i=0;i

{

printf("当前运行进程程序名:\n%d",hc[i].pid);

printf("\n该进程的优先级:\n%d",hc[i].priority);

printf("\n该进程的运行时间:\n%d",hc[i].cputime);

printf("\n该进程的状态:\n%d",hc[i].state);

}

}

PCB_type temp=neicun[0];

for(k=0;k<=shumu;k++)

{

if(neicun[k].priority>temp.priority)

tmpe=neicun[k];

}

neicun[k].state=1;

}

/* 杀死进程*/

void kill()

{

neicun[max].pid=0;

neicun[max].priority=0;

neicun[max].cputime=0;

neicun[max].state=0;

if(max==(shumu-1))

shumu--;

else{

for(int j=max+1;j

{

neicun[j-1].pid=neicun[j].pid;

neicun[j-1].priority=neicun[j].priority;

neicun[j-1].cputime=neicun[j].cputime;

neicun[j-1].state=neicun[j].state;

相关文档
最新文档