zoukankan      html  css  js  c++  java
  • 操作系统

    #include <bits/stdc++.h>
    using namespace std;
    struct pcb
    {
        int id;//进程id
        int priority;//优先权
        int status;//状态0执行1就绪2阻塞
        int last;//执行所需时间
        bool operator < (const pcb &r)const
        {
            if(priority!=r.priority) return priority>r.priority;
            return id<r.id;
        }
    };
    set<pcb>jxt,zst;
    int getinput,idtot;
    char refer[3][10]={"执行态","就绪态","阻塞态"};
    int main()
    {
        while(1)//while一次过去1个时间单位
        {
            printf("请输入您想进行的操作(1创建、2阻塞、3唤醒): ");
            scanf("%d",&getinput);
            if(getinput==1)//创建进程
            {
                pcb newjc;
                printf("您要创建的进程的id为:%d ",++idtot);
                newjc.id=idtot;
                printf("请输入您要创建的进程的优先级 ");
                scanf("%d",&newjc.priority);
                printf("请输入您要创建的进程的执行所需时间 ");
                scanf("%d",&newjc.last);
                newjc.status=1;
                jxt.insert(newjc);
                printf("进程创建成功,已进入就绪队列 ");
            }
            else if(getinput==2)//阻塞进程
            {
                if(jxt.size())
                {
                    printf("id为%d的进程被阻塞 ",(*jxt.begin()).id);
                    zst.insert(*jxt.begin());
                    jxt.erase(jxt.begin());
                }
                else
                {
                    printf("没有正在执行的进程,不能阻塞 ");
                    continue;
                }
            }
            else//唤醒进程
            {
                if(zst.size())
                {
                    printf("id为%d的进程被唤醒 ",(*zst.begin()).id);
                    jxt.insert(*zst.begin());
                    zst.erase(zst.begin());
                }
                else
                {
                    printf("没有被阻塞的进程,不能唤醒 ");
                    continue;
                }
            }
            if(jxt.size())
            {
                pcb tmp=*jxt.begin();
                jxt.erase(jxt.begin());
                tmp.last--;
                jxt.insert(tmp);
                if((*jxt.begin()).last==0)
                {
                    printf("id为%d的进程执行完毕,已经被撤销 ",(*jxt.begin()).id);
                    jxt.erase(jxt.begin());
                }
            }
            if(jxt.size()) printf("正在执行的进程: id:%d 优先权:%d 状态:%s 执行所需时间:%d ",(*jxt.begin()).id,(*jxt.begin()).priority,refer[(*jxt.begin()).status-1],(*jxt.begin()).last);
            else printf("当前没有进程在执行 ");
            printf("就绪态中的进程: ");
            for(set<pcb>::iterator it=jxt.begin();it!=jxt.end();it++)
            {
                if(it==jxt.begin()) continue;
                printf("id:%d 优先权:%d 状态:%s 执行所需时间:%d ",(*it).id,(*it).priority,refer[(*it).status],(*it).last);
            }
            printf("阻塞态中的进程: ");
            for(set<pcb>::iterator it=zst.begin();it!=zst.end();it++)
                printf("id:%d 优先权:%d 状态:%s 执行所需时间:%d ",(*it).id,(*it).priority,refer[(*it).status],(*it).last);
        }
        return 0;
    }

  • 相关阅读:
    JS 可选链操作符?. 空值合并运算符?? 详解,更精简的安全取值与默认值设置小技巧
    手写一个 Promise
    Leetcode 403 青蛙过河 DP
    Leeetcode 221 最大正方形 DP
    Leetcode 139 单词拆分
    Unity周记: 2021.07.26-08.15
    Unity周记: 2021.07.19-07.25
    Unity周记: 2020.07.12-07.18
    Unity周记: 2020.07.05-07.11
    线性规划
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/6690841.html
Copyright © 2011-2022 走看看