进程调度模拟实验

#include<bits/stdc++.h>

using namespace std;
int cal=0;

struct PCB
{
    // bool use;//是否可用
    //bool sta;//是否就绪
    int  pronum;//进程号(进程唯一标识符,不可重复)
    int time;//时间片
    PCB* next;
};
void createList(PCB* &pHead)
{
    pHead = new PCB;
    pHead->pronum= -1;
    // pHead->use=false;
    pHead->time=5;
    pHead->next = NULL;
    return;
}
void print(PCB* pHead)
{

PCB* pCur = pHead->next;
    while(pCur != NULL)
    {
        cout<<pCur->pronum<<" ";
        pCur = pCur->next;
    }
    cout<<endl;
    return;
}
void delet(PCB* &pHeadR,PCB* &pHeadB,PCB* &pHeadD,int id)
{
    PCB* pCurR = pHeadR;
    PCB* pCurB = pHeadB;
    PCB* pCurD = pHeadD;

while(pCurR->next != NULL)
    {
        if(pCurR->next->pronum==id)
        {
            pCurR->next = pCurR->next->next;
            return;
        }
        pCurR = pCurR->next;
    }
    while(pCurB->next != NULL)
    {
        if(pCurB->next->pronum==id)
        {
            pCurB->next = pCurB->next->next;
            return;
        }
        pCurB = pCurB->next;
    }
    if(pCurD->next->pronum==id)
    {
        pCurD->next = pCurD->next->next;
        return;
    }
    cout<<"该进程不存在,无法删除!"<<endl;
}
void destoryList(PCB* pHead)
{
    assert(pHead!=NULL);//如果它的条件返回错误,则终止程序执行
    PCB* pNext = pHead->next;
    while(pNext != NULL)
    {
        delete pHead;
        pHead = pNext;
        pNext = pHead->next;
    }
    delete pHead;
    pHead = NULL;
    return;
}
void create(PCB* pHead)
{
    PCB* pCur = pHead;

while(pCur->next != NULL)
    {
        pCur = pCur->next;
    }
    PCB* pNewNode = new PCB;
    pNewNode->pronum = cal;
    pNewNode->time=5;
    //pNewNode->use=true;
    pNewNode->next = NULL;
    pCur->next=pNewNode;
    cal++;
}
bool empty(PCB* pHead)
{
    if(pHead->next != NULL)
    {
        return false;
    }
    else
        return true;
}

void insert(PCB* &pPush,PCB* &pPop)
{

PCB* pCurU = pPush;
    PCB* pCurO = pPop;
    PCB* ptem=new PCB;
    ptem=pCurO->next;
    pCurO->next=pCurO->next->next;
    while(pCurU->next != NULL)
    {
        pCurU = pCurU->next;
    }
    pCurU->next=ptem;
    ptem->next=NULL;
}
bool timeout(PCB* pCheck)
{
    if(pCheck->next!=NULL)
    {
        pCheck=pCheck->next;
        pCheck->time=pCheck->time-1;

if(pCheck->time==0)
        {
            pCheck->time=5;
            return true;
        }
        else return false;
    }
    else return false;
}
int main()
{
    cout<<"          **************************************************"<<endl;
    cout<<"          **               进程调度模拟实验               **"<<endl;
    cout<<"          **************************************************"<<endl;
    PCB* Ready = NULL;
    PCB* Block = NULL;
    PCB* Doing = NULL;
    createList(Ready);
    createList(Block);
    createList(Doing);
    char chose;
    int id;
    do
    {
        if(timeout(Doing))
        insert(Ready,Doing);
        if(empty(Doing)&&!empty(Ready))  insert(Doing,Ready);
        cout<<endl<<"当前进程在队列中的情况:"<<endl;
        cout<<"就绪态:";
        print(Ready);
        cout<<"阻塞态:";
        print(Block);
        cout<<"执行态:";
        print(Doing);
        cout<<endl;
        cout<<"................................................................."<<endl;
        cout<<"请输入要进行的操作:"<<endl<<"1.创建  2.撤销  3.阻塞  4.唤醒 0.退出"<<endl;
        cout<<"================================================================"<<endl;
        cin>>chose;
        switch(chose)
        {
        case ‘1‘:
            create(Ready);
            break;
        case ‘2‘:
            cout<<"请输入删除id"<<endl;
            cin>>id;
            delet(Ready,Block,Doing,id);
            break;
        case ‘3‘:
            if(!empty(Doing))
                insert(Block,Doing);
            else
                cout<<"没有执行态进程,无法阻塞"<<endl;
            break;
        case ‘4‘:
            if(!empty(Block))
                insert(Ready,Block);
            else
                cout<<"没有阻塞态进程,无法唤醒"<<endl;
            break;
        case ‘0‘:
            destoryList(Doing);
            destoryList(Block);
            destoryList(Ready);
            exit(0);
        default:
            cout<<"该操作不存在,请重新输入"<<endl;
        }
    }
    while(1);
    return 0;
}

时间: 2024-10-19 05:57:37

进程调度模拟实验的相关文章

1203 实验三 进程调度模拟实验

实验三 进程调度模拟实验 物联网工程   张学玲  201306104140 一.        实验目的        用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.        实验内容和要求 实验内容 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一个进程控制块(PCB)表示.进程控制块包含如下信息:进程名.优先级.到达时间.需要运行时间.已用CPU时间.进程状态等等. 2) 每个进程的状态可

实验三 进程调度模拟实验

13物联网      201306104107      黄鸿佳 1. 目的和要求 实验目的   13物联网      201306104107      黄鸿佳 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 实验要求 设计一个有 N(N不小于5)个进程并发执行的进程调度模拟程序. 进程调度算法:“时间片轮转法”调度算法对N个进程进行调度. 2. 实验内容 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一

Cisco PT模拟实验(17) 路由器IP访问控制列表配置

Cisco PT模拟实验(17) 路由器IP访问控制列表配置 实验目的: 理解两种IP访问控制列表的原理及功能 掌握常见IP访问控制列表的配置方法 实验背景: 公司的经理部.财务部们和销售部门分属于不同的3个网段,三部门之间用路由器进行信息传递,为了安全起见,公司领导要求销售部门不能对财务部进行访问,但经理部可以对财务部进行访问. 技术原理: 路由器能提供防火墙的功能,根据一些预设置的ACL过滤规则对任何经过接口的流量进行过滤,说明哪些具体的通信(来自设备.协议或端口等)是被允许或拒绝,该功能是

Cisco PT模拟实验(13) 路由器RIP动态路由的配置

Cisco PT模拟实验(13) 路由器RIP动态路由的配置 实验目的: 掌握RIP动态路由选择协议的配置方法 掌握路由选择表中的RIP路由描述 熟悉路由选择和分组转发的原理及过程 实验背景: 公司通过一台三层交换机连到企业网的出口路由器上,路由器再与互联网服务提供商 ISP的另一台路由器连接.现要企业网设备上做适当配置,实现企业网内部主机与外网主机之间的相互通信.为了简化网管的管理维护工作,公司决定采用动态路由配置 -- RIPv2协议实现互通. 技术原理: 动态路由选择:路由器使用路由选择协

1111实验二 作业调度模拟实验

实验二.作业调度模拟实验 物联网工程 张怡 201306104149 一.实验目的  (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 1.至少用三种调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业. 3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高

Cisco PT模拟实验(16) 路由器重分发配置

Cisco PT模拟实验(16) 路由器重分发配置 实验目的: 掌握路由器重分发的配置方法 掌握査看通过路由重分发学习产生的路由 实验背景: 随着公司网络规模不断扩大,公司内安装了多个路由器并运行多种路由协议,其中,公司出口路由器R2与公司外的一台路由器R3连接,三层交换机与R2间运行RIPv2路由协议,R1与R2间运行静态路由协议,R2与R3间运行OSPF路由协议.现要做适当配置,实现公司内部主机与公司外部主机之间的相互通信. 技术原理: 路由重分发(Route Redistribution)

Cisco PT模拟实验(11) 路由器单臂路由配置

Cisco PT模拟实验(11) 路由器单臂路由配置 实验目的: 掌握单臂路由的配置方法 实现不同VLAN之间互相通信 深入理解VLAN通信原理及路由子接口 实验背景: 公司的技术部和销售部分处于不同的办公室,技术部和销售部的PC分处于不同的VLAN,现由于业务的需求需要销售部和技术部的主机能够相互访问,获得相应的资源,两个部门的交换机通过一台路由器进行了连接. 技术原理: VLAN能有效分割局域网,实现各网络区域之间的访问控制.但现实中,往往需要配置某些VLAN之间的互联互通.而实现不同VLA

Cisco PT模拟实验(2) 交换机的端口配置与管理

Cisco PT模拟实验(2) 交换机的端口配置与管理 实验目的: 掌握交换机的基本配置与管理,了解交换机配置的基本命令. 实验背景:某公司新进了一批二层交换机,在正式投入使用前要进行初始化的配置与管理,以便日后维护. 技术原理: 交换机的管理方式基本分为两种:带内管理和带外管理. 通过交换机的Console端口管理交换机属于带外管理:这种管理方式不占用交换机的网络端口,第一次配置交换机必须利用Console端口进行配置. 通过Telnet.拨号等方式(TCP/IP协议)属于带内管理. 交换机的

Cisco PT模拟实验(5) 交换机的生成树协议配置

Cisco PT模拟实验(5) 交换机的生成树协议配置 实验目的: 理解生成树协议工作原理 掌握快速生成树协议RSTP的基本配置方法 实验背景:公司财务部和销售部的PC通过2台交换机实现通信,为提高网络可靠性,冗余链路是一个不错的思路,可防止因某条链路故障导致整个网络的中断,但冗余拓扑存在网络环路等一系列问题,为此需要在交换机上做适当配置. 技术原理: 生成树协议:监视二层交换式网络以找出所有可用的链路,并关闭冗余链路以确保不会出现环路. 首先利用生成树算法创建一个拓扑数据库,然后将网络的冗余备