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;
    }

  • 相关阅读:
    sql server将多条数据,通过指定列拼接成一条数据
    sql server游标demo
    C# 使用HttpCilent请求接口,传递表单数据(可上传图片)
    sql server 把日期时间类型 转为字符串
    Http请求失败,获取返回状态码和消息
    url
    解决基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
    MD5 加密
    C# 读取txt文件内容
    微信小程序 图片转为base64
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/6690841.html
Copyright © 2011-2022 走看看