天天看点

C++模拟进程状态的转化

最近在写操作系统的实验报告,顺带写篇博客~

题目:用C++编程来模拟 进程状态的转换

备注都在上面,一看就懂哈~

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct jincheng_type
{
    int pid;      //进程的ID
    int youxian;  //进程的优先级
    int daxiao;   //进程的大小
    int zhuangtai;//进程的状态
    char info[];//新进程的内容
};

struct jincheng_type neicun[];//内存容量,最大20个进程
int shumu = , guaqi = , pid, flag = ;
/***********创建新的进程***********/
void create()
{
    if(shumu >= ) printf("\n内存已满,请先唤出或杀死进程\n");
    else
    {
        int i;
        for( i = ; i < ; i++)
        {
            if(neicun[i].zhuangtai == ) break;
        }
        printf("\n请输入新进程pid\n");
        scanf("%d", &(neicun[i].pid));

        for(int j = ; j < i; j++)

            if(neicun[i].pid == neicun[j].pid)
            {
                printf("\n该进程已存在\n");
                return;
            }
            printf("\n请输入进程优先级\n");
            scanf("%d", &(neicun[i].youxian));
            printf("\n请输入进程大小\n");
            scanf("%d", &(neicun[i].daxiao));
            printf("\n请输入新进程的内容\n");
            scanf("%s", &(neicun[i].info));

            neicun[i].zhuangtai = ;
            shumu++;

    }
}
/***********查看运行进程***********/
void run()
{
    for(int i = ; i < ; i++)
    {
        if(neicun[i].zhuangtai == )
        {
            printf("\n pid = %d", neicun[i].pid);
            printf("youxian = %d",neicun[i].youxian);
            printf("daxiao = %d",neicun[i].daxiao);
            printf("zhuangtai = %d", neicun[i].zhuangtai);
            printf("info = %s", neicun[i].info);
            flag = ;
        }
    }
    if(!flag)
    {
        printf("\n当前没有运行进程\n");
    }
}
/***********唤出某个进程***********/
void huancun()
{
    if(!shumu)
    {
        printf("\n当前没有运行进程\n");
        return ;
    }
    printf("\n输入唤出进程的ID值");
    scanf("%d", &pid);
    for(int i = ; i < ; i++)
    {
        if(pid == neicun[i].pid)
        {
            if(neicun[i].zhuangtai == )
            {
                neicun[i].zhuangtai = ;
                guaqi++;
                printf("\n已成功唤出进程\n");
            }
            else
                if(neicun[i].zhuangtai == )
                    printf("\n要唤出的进程不存在\n");
                else printf("\n要唤出的进程已被挂起\n");
                flag = ;
                break;

        }
    }
    if(flag == )
        printf("\n要唤出的进程不存在\n");
}
/***********杀死运行进程***********/
void kill()
{
    if(!shumu)
    {
        printf("\n当前没有运行进程\n");
        return;
    }
    printf("\n输入杀死进程的ID值");
    scanf("%d", &pid);
    for(int i = ; i < ; i++)
    {
        if(pid == neicun[i].pid)
        {
            if(neicun[i].zhuangtai == )
            {
                neicun[i].zhuangtai = ;
                shumu --;
                printf("\n已成功杀死进程\n");
            }
            else
                if(neicun[i].zhuangtai == )
                    printf("\n要杀死的进程不存在\n");
                else
                    printf("\n要杀死的进程已被挂起\n");
            flag = ;
            break;
        }
    }
    if(!flag)
        printf("\n要杀死的进程不存在\n");
}
/***********唤醒某个进程***********/
void huanxing()
{
    if(!shumu)
    {
        printf("\n当前没有运行进程\n");
        return;
    }
    printf("\n输入pid\n");
    scanf("%d", &pid);
    for(int i = ; i < ; i++)
    {
        if(pid == neicun[i].pid)
        {
            flag = false;
            if(neicun[i].zhuangtai == )
            {
                neicun[i].zhuangtai = ;
                guaqi --;
                printf("\n已成功唤醒进程\n");
            }
            else
                if(neicun[i].zhuangtai == )
                    printf("\n要唤醒的进程不存在\n");
                else printf("\n要唤醒的进程已被挂起\n");
                break;
        }
    }
    if(flag)printf("\n要唤醒的进程不存在\n");
}

int main()
{
    int n = ;
    int num;
    for(int i = ; i < ; i++)
        neicun[i].zhuangtai = ;
    while(n)
    {
        printf("\n*********************************************************\n");
        printf("\n                        进程演示系统                     \n");
        printf("\n           1创建新的进程                    2查看运行进程\n");
        printf("\n           3唤出某个进程                    4杀死运行进程\n");
        printf("\n           5唤醒某个进程                    6退出系统    \n");
        printf("\n*********************************************************\n");
        printf("\n请选择(1~6)\n");
        scanf("%d", &num);
        switch(num)
        {
            case  : create(); break;
            case  : run(); break;
            case  : huancun(); break;
            case  : kill(); break;
            case  : huanxing(); break;
            case  : exit();
            default: n = ;
        }
        flag = ;
    }

}
           

运行结果就是这样,之后我们再来对其进行各种操作,请自行尝试,这里不做过多介绍~

C++模拟进程状态的转化