⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cunchu2.cpp

📁 广东工业大学操作系统课程设计(全) 广东工业大学操作系统课程设计(全 )
💻 CPP
字号:
#include <iostream.h>
#include <stdlib.h>
struct freeM{int Sadd;
    int length;
};
struct busyMEM{int Sadd;
    int Eadd;
    char fill;
    busyMEM *next;
};
class Assign{
public:
    void initMEM();
    void pai();
    void printList();
    void resetfree();
    void insert();
    void Delete();
private:
    freeM freeMEM[20];
    busyMEM *p;
};
void Assign::initMEM()
{    p=(busyMEM*)malloc(sizeof(busyMEM));
    busyMEM *L;
    L=p;
    L->fill='O';
    L->Eadd=19;
    L->Sadd=0;
    L->next=(busyMEM*)malloc(sizeof(busyMEM));
    L=L->next;
    L->fill='A';
    L->Eadd=51;
    L->Sadd=20;
    L->next=(busyMEM*)malloc(sizeof(busyMEM));
    L=L->next;
    L->fill='B';
    L->Eadd=71;
    L->Sadd=52;
    L->next=(busyMEM*)malloc(sizeof(busyMEM));
    L=L->next;
    L->fill='C';
    L->Eadd=137;
    L->Sadd=98;
    L->next=(busyMEM*)malloc(sizeof(busyMEM));
    L=L->next;
    L->fill='D';
    L->Eadd=169;
    L->Sadd=148;
    L->next=p;
    resetfree();
}
void Assign::resetfree()
{    for(int i=0;i<20;i++)
    {    freeMEM[i].length=-1;
        freeMEM[i].Sadd=-1;
    }
    i=0;
    busyMEM *L=p;
    while(L->next!=p)
    {    if(L->next->Sadd-L->Eadd-1!=0)
        {    freeMEM[i].length=L->next->Sadd-L->Eadd-1;
            freeMEM[i].Sadd=L->Eadd+1;
            i++;
        }
        L=L->next;
    }
    freeMEM[i].length=256-L->Eadd-1;
    freeMEM[i].Sadd=L->Eadd+1;
}
void Assign::printList()
{    cout<<"┌──────┬──┬──┐"<<endl;
    cout<<"│分区起始地址│长度│状态│"<<endl;
    int i=0;
    while(freeMEM[i].length!=-1)
    {    if(freeMEM[i].Sadd<100)
        {    cout<<"├──────┼──┼──┤"<<endl;
    cout<<"│    "<<freeMEM[i].Sadd<<"k     │ "<<freeMEM[i].length<<"k│空闲│"<<endl;
        }
        else
        {cout<<"├──────┼──┼──┤"<<endl;
    cout<<"│    "<<freeMEM[i].Sadd<<"k    │ "<<freeMEM[i].length<<"k│空闲│"<<endl;
        }
        i++;
    }
    cout<<"└──────┴──┴──┘"<<endl;
}
void Assign::insert()
{    busyMEM *L;
    L=(busyMEM*)malloc(sizeof(busyMEM));
    cout<<"请输入作业标识:";
    cin>>L->fill;
    cout<<"请输入作业长度:";
    int a;
    cin>>a;
    for(int i=0;i<20;i++)
    {    if(freeMEM[i].length>=a)
            break;
    }
    if(i==19){    cout<<"分配失败!";
        return;
    }
    busyMEM *R=p;
    while(R->next->Eadd<freeMEM[i].Sadd&&R->next!=p)
    {    R=R->next;
    }
    L->next=R->next;
    R->next=L;
    L->Sadd=freeMEM[i].Sadd;
    L->Eadd=freeMEM[i].Sadd+a-1;
    resetfree();
}
void Assign::Delete()
{    cout<<"需要回收的进程标号:";
    char biao;
    cin>>biao;
    busyMEM *L=p;
    while(L->next->fill!=biao)
    {    if(L->next==p)
        {    cout<<"未找到指定进程!"<<endl;
            return;
        }
        L=L->next;
    }
    L->next=L->next->next;
    resetfree();
}
void Assign::pai()
{    freeM temp;
    int i=0;
    int j=0;
    while(freeMEM[i].length!=-1)
    {    j++;        i++;
    }
    for(;j>=0;j--)
    {    i=0;
        while(freeMEM[i+1].length!=-1)
        {    if(freeMEM[i+1].length>freeMEM[i].length)
            {    temp.length=freeMEM[i].length;
                temp.Sadd=freeMEM[i].Sadd;
                freeMEM[i].length=freeMEM[i+1].length;
                freeMEM[i].Sadd=freeMEM[i+1].Sadd;
                freeMEM[i+1].length=temp.length;
                freeMEM[i+1].Sadd=temp.Sadd;
            }
            i++;
        }    }}
void main()
{    Assign Assign;
    Assign.initMEM();
    cout<<"存储管理--最佳适应算法"<<endl;
    cout<<"空闲表的初始状态:"<<endl;
    Assign.printList();
    while(1)
    {      cout<<"请选择操作:"<<endl;
        cout<<"1、分配"<<endl;
        cout<<"2、释放"<<endl;
        cout<<"3、退出"<<endl;
        int j;
        cin>>j;
        if(j==3)
            break;
                 {    Assign.pai();
                    Assign.insert();
                    Assign.pai();
                    Assign.printList();
                    break;
                }
                if(j==2)
                {    Assign.Delete();
                    Assign.pai();
                    Assign.printList();
                    break;
                }    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -