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

📄 duanyeshi.cpp

📁 段式存储系统 1。首先
💻 CPP
字号:
//#include "stdafx.h"
#include "iostream.h"
#include"stdlib.h"
#include "string.h"
#include"stdio.h"

struct duan
{
    long capacity;//该段的长度
    long physicaddr;//物理地址
    long realaddr;//该段实际地址
};
struct duanbiao
{
    duan duans[10];
    char biaoming[20];
    int Isdiaoyong;
    int num;
    long total;
};

long neicun=0;
int duanbiaonum=0;
long kongbai=0;
long baseaddr=0;
duanbiao duanbiaos[10];

void show1(int );
void show();

void wait()
{
    int j;
    for(double i=100000;i>1; )   
    {
        i=i-0.001;
        j++;
        j++;
    }
}


void diaodu()
{
    cout<<"您要调度的进程是:p";
    int n;
    cin>>n;
    if(n>duanbiaonum)
        cout<<"段表不存在!"<<endl;
    else if(duanbiaos[n-1].Isdiaoyong==1)
        cout<<"操作错误,该进程已经被调入到内存!"<<endl;
    else if(duanbiaos[n-1].total>neicun-kongbai)
        cout<<"内存空间不足,调度不成功!"<<endl;
    else
    {
        cout<<"下面对进程"<<duanbiaos[n-1].biaoming<<"进行地址转化:"<<endl;
        for(int j=0;j<duanbiaos[n-1].num;j++)
        {
        cout<<"正在进行第"<<j+1<<"段的地址转换,请稍后......"<<endl;
        wait();
        duanbiaos[n-1].duans[j].realaddr=duanbiaos[n-1].duans[j].physicaddr+kongbai;
        cout<<"第"<<j+1<<"段的地址转换成功!"<<endl;
            
        }
        kongbai=kongbai+duanbiaos[n-1].total;
        duanbiaos[n-1].Isdiaoyong =1;
        cout<<"调度后的结果是:"<<endl;
        show1(n-1);
    }
}

void appneicun()
{
    printf("请输入进程的名字:");
    gets(duanbiaos[duanbiaonum].biaoming);
    printf("请输入该进程的段数:");
    cin>>duanbiaos[duanbiaonum].num;
    int paddr=0;
    for(int j=0;j<duanbiaos[duanbiaonum].num;j++)
    {
        cout<<"进程第"<<j+1<<"段的大小是:";
        cin>>duanbiaos[duanbiaonum].duans[j].capacity ;
        duanbiaos[duanbiaonum].duans[j].physicaddr=paddr;
        paddr=paddr+duanbiaos[duanbiaonum].duans[j].capacity;

    }
    duanbiaos[duanbiaonum].Isdiaoyong=0;
    duanbiaos[duanbiaonum].total=paddr;
    duanbiaonum++;
}


void show1(int i)
{
        cout<<"进程p"<<i+1<<":"<<endl;
        cout<<"名字:"<<duanbiaos[i].biaoming<<endl;
        cout<<"该进程所占用的存储空间:"<<duanbiaos[i].total<<endl;
        if(duanbiaos[i].Isdiaoyong==0)
            cout<<"进程状态:未调用"<<endl;
        else
            cout<<"进程状态:已调用"<<endl;
        cout<<"____________________________________________"<<endl;
        cout<<"段 号    物理始址    内存始址    大小"<<endl;
        for(int j=0;j<duanbiaos[i].num;j++)
        {
            cout<<" "<<j+1<<"          "<<duanbiaos[i].duans[j].physicaddr;
            if(duanbiaos[i].Isdiaoyong==0)
                cout<<"            ";
            else 
                cout<<"        "<<duanbiaos[i].duans[j].realaddr;
            cout<<"          "<<duanbiaos[i].duans[j].capacity<<endl ;
        }
        cout<<"____________________________________________"<<endl;
}

void show()
{
    for(int i=0;i<duanbiaonum;i++)
    show1(i);
}

int main(int argc, char* argv[])
{
    char c;
    cout<<"请输入内存的大小:";
    cin>>neicun;
    cout<<"****************************************************************"<<endl;
    cout<<"1:显示进程(s)     2:申请进程(a)   3:调度进程(d)      4:退  出(e)"<<endl;
    cout<<"****************************************************************"<<endl;
    while(1)
    {
    cout<<"请选择服务种类(s/a/e/d):";
        cin>>c;
        if(c=='e')
        {
            cout<<"服务完毕!"<<endl;
            break;
        }
        else if(c=='a')
            appneicun();
        else if(c=='s')
            show();
        else if(c=='d')
            diaodu();
        else
            cout<<"error!请重新输入!"<<endl;    
    }
    return 0;
}

⌨️ 快捷键说明

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