操作系统实验一之进程管理源代码
来源:互联网 发布:f3飞控调参软件cf 编辑:程序博客网 时间:2024/04/25 21:13
1.目的和要求
通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。
2.实验内容
用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。
3.主体程序
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
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<shumu;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<shumu;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<number;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<shumu;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;
}
shumu--;
}
max=0;
run();
}
/* int k=0;
printf("请输入要杀死程序的进程名:");
scanf("%d",&k);
if(neicun[k].state=1)
neicun[k].state=2;
neicun[k].cputime=0;
neicun[k].pid=0;
neicun[k].priority=0;
neicun[k].state=0;
if(k==(shumu-1))
shumu--;
else{
for(int j=k+1;j<shumu;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;
}
shumu--;
}
printf("进程%d已被杀死!,k");
}*/
int main()
{
int n,a;
n=1;
while(n==1)
{
system("cls");
printf("\n**********************************************");
printf("\n* 进程演示系统 *");
printf("\n**********************************************");
printf("\n 1.创建新的进程 2.查看运行进程");
printf("\n 3.换出某个进程 4.杀死运行进程");
printf("\n 5.退出系统 ");
printf("\n**********************************************");
printf("\n请选择(1~5):");
scanf("%d",&a);
switch(a)
{ case 1:
create( );
printf("\npress anykey to go on~");
getch();
break;
case 2 :
run();
printf("\npress anykey to go on~");
getch();
break;
case 3 :
huanchu();
printf("\npress anykey to go on~");
getch();
break;
case 4 :
kill();
printf("\npress anykey to go on~");
getch();
break;
case 5 :
exit(0);
default:
n=0;
break;
}
}
}
- 操作系统实验一之进程管理源代码
- 操作系统实验一进程管理
- 操作系统实验之进程管理
- 操作系统实验一之进程控制实验
- 操作系统——实验一.进程管理
- 操作系统实验一(进程管理)
- 操作系统实验一(进程管理)
- 操作系统进程管理实验
- 操作系统实验一之进程的创建实验
- 操作系统实验二 进程管理
- 操作系统实验之进程管理——生产者消费者问题
- 操作系统 实验一 进程控制
- 操作系统之进程管理
- 操作系统之进程管理
- 操作系统之进程管理
- 操作系统之进程管理
- 进程管理之(一) 进程的创建实验
- 操作系统之进程(一)
- 每秒处理10万高并发订单的乐视集团支付系统架构分享
- Remove '@override' annotation解决办法
- IK分词器原理与源码分析
- Python 标准库 —— uuid(生成唯一 ID)
- Thread和Runnable的真正区别
- 操作系统实验一之进程管理源代码
- Java Executor并发框架(六)Executor框架线程池任务执行全过程(上)
- COCOS2DX 在vs上编译.cpp文件报错 error C2065: “”: 未声明的标识符
- browser-sync自动刷新-前端利器
- TypeError: cannot use a string pattern on a bytes-like object解决方法
- JSON-RPC(jsonrpc4j)使用demo
- 获取版本号[[NSBundle mainBundle] infoDictionary]
- C++加载csb文件
- redis 学习笔记(1)-编译、启动、停止