操作系统 c++

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct jincheng_type{ //进程状态定义
int pid; //进程
int youxian; //进程优先级
int daxiao; //进程⼤⼩
int zhuangtai; //标志进程状态,0为不在内存,1为在内存,3为挂起
char info[10]; //进程内容
};
struct jincheng_type neicun[20];
int shumu=0,guaqi=0,pid,flag=0;
//创建进程
void create(){
if(shumu>=20) printf("\n内存已满,请先换出或结束进程\n"); //内存容量⼤⼩设置为20
else{
int i;
printf("**当前默认⼀次性创建5个进程,内存容量20**");
for(i=0;i<5;i++) { //默认⼀次创建5个进程
//定位,找到可以还未创建的进程
if(neicun[i].zhuangtai==1) break; //如果找到的进程在内存则结束 ,初始设置都不在内存中(main函数中设置状态为0)
printf("\n请输⼊新进程pid\n");
scanf("%d",&(neicun[i].pid));
for(int j=0;j<i;j++)
if(neicun[i].pid==neicun[j].pid){
printf("\n该进程已存在\n");
return;
}
printf("请输⼊新进程优先级\n");
scanf("%d",&(neicun[i].youxian));
printf("请输⼊新进程⼤⼩\n");
scanf("%d",&(neicun[i].daxiao));
printf("请输⼊新进程内容\n");
scanf("%s",&(neicun[i].info));
//创建进程,使标记位为1
neicun[i].zhuangtai=1;
printf("进程已成功创建!");
shumu++;
}
}
}
//进程运⾏状态检测
void run(){
printf("运⾏进程信息如下:");
for(int i=0;i<20;i++){
if(neicun[i].zhuangtai==1){
//如果进程正在运⾏,则输出此运⾏进程的各个属性值
printf("\n pid=%d ",neicun[i].pid);
printf(" youxian=%d ",neicun[i].youxian);
printf(" daxiao=%d ",neicun[i].daxiao);
printf(" zhuanbgtai=%d ",neicun[i].zhuangtai);
printf(" info=%s ",neicun[i].info);
flag=1;
}
}
if(!flag)
printf("\n当前没有运⾏进程!\n");
}
//进程换出
void huanchu(){
if(!shumu){
printf("当前没有运⾏进程!\n");
return;
}
printf("\n请输⼊换出进程的ID值");
scanf("%d",&pid);
for(int i=0;i<20;i++){
//定位,找到要换出的进程,根据其状态进⾏相应处理
if(pid==neicun[i].pid) {
if(neicun[i].zhuangtai==1){
neicun[i].zhuangtai==2;
guaqi++;
printf("\n已经成功换出进程\n");
}
else if(neicun[i].zhuangtai==0) printf("\n要换出的进程不存在\n");
else printf("\n要换出的进程已被挂起\n");
flag=1;
break;
}
}
//找不到,则说明进程不存在
if(flag==0) printf("\n要换出的进程不存在\n");
}
//结束(杀死)进程
void kill(){
if(!shumu){
printf("当前没有运⾏进程!\n");
return;
}
printf("\n输⼊杀死进程的ID值");
scanf("%d",&pid);
for(int i=0;i<20;i++){
//定位,找到所要杀死的进程,根据其状态做出相应处理
if(pid==neicun[i].pid){
        neicun[i].zhuangtai = 0;
shumu--;
printf("\n已经成功杀死进程\n");
}
else if(neicun[i].zhuangtai==0) printf ("\n要杀死的进程不存在\n");
else printf("\n要杀死的进程已被挂起\n");
flag=1;
break;
}
//找不到,则说明进程不存在
if(!flag) printf("\n 要杀死的进程不存在\n");
}
//唤醒进程
void huanxing(){
if (!shumu) {
printf("当前没有运⾏进程\n");
return;
}
if(!guaqi){
printf("\n当前没有挂起进程\n");
return;
}
printf("\n输⼊进程pid:\n");
scanf ("%d",&pid);
for (int i=0; i<20;i++) {
//定位,找到所要杀死的进程,根据其状态做相应处理
if (pid==neicun[i].pid) {
flag=false;
if(neicun[i].zhuangtai==2){
neicun[i].zhuangtai=1;
guaqi--;
printf ("\n已经成功唤醒进程\n");
}
else if(neicun[i].zhuangtai==0) printf("\n要唤醒的进程不存在\n");
else printf("\n要唤醒的进程已被挂起\n");
break;
}
}
//找不到,则说明进程不存在
if(flag) printf("\n要唤醒的进程不存在\n");
}
//主函数
int main()
{
int n = 1;
int num;
//⼀开始所有进程都不在内存中
for(int i=0;i<20;i++)
neicun[i].zhuangtai = 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)\n");
scanf("%d",&num);
switch(num){
case 1: create();break;
case 2: run();break;
case 3: huanchu(); break;
case 4: kill();break;
case 5: huanxing(); break;
case 6: printf("已退出系统");exit(0);
default: printf("请检查输⼊数值是否在系统功能中1~6");n=0;
}
flag = 0;//恢复标记
}
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值