用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

c++页式内存管理系统 模拟程序

2013-03-08 作者: 小蜜锋举报

[c++]代码库

#include<stdio.h>
#include<iostream.h>
#include<string.h>
 
const int PAGES=256; //定义总块数
const int WORD=32; //定义字长
 
const int WORDNUM=PAGES/WORD; //定义总字数
 
typedef struct node {
    char jobname[20];
    int num;
    int nums[PAGES];
    struct node *next;
} jobs;
 
int table[WORDNUM][WORD];
int freenum=0;
jobs *head;
 
//初始化函数
void initial() {
    int i,j;
    jobs *p;
 
//初始化位示图
    for ( i=0; i<WORDNUM; i++ ) {
        for ( j=0; j<WORD; j++ ) {
            table[i][j]=0;
        }
    }
 
//初始化作业表头
    p=new jobs;
    strcpy ( p->jobname,"null" );
    p->num=0;
    p->next=NULL;
    head=p;
 
 
}
 
//读入位示图初始数据
void readData() {
    int i,j;
    FILE *fp;
    char fname[20];
 
    cout<<"请输入初始位示图数据文件名:"<<endl;
    cin>>fname;
 
    if ( ( fp=fopen ( fname,"r" ) ) !=NULL ) {
        for ( i=0; i<WORDNUM; i++ ) {
            for ( j=0; j<WORD; j++ ) {
                fscanf ( fp,"%d",&table[i][j] );
                if ( table[i][j]==1 )
                    freenum++;
            }
        }
        cout<<"初始位示图"<<endl;
        for ( i=0; i<WORDNUM; i++ ) {
            for ( j=0; j<WORD; j++ ) {
                cout<<table[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<"总空闲块数:"<<freenum;
 
    } else {
        cout<<"文件不能打开"<<endl;
    }
 
}
 
//新加入作业函数
void add() {
    char jobname[20];
    int num;
    jobs *p;
    int i,j,k=0;
 
    cout<<"请输入新增的作业名:";
    cin>>jobname;
    cout<<"新增作业所需页数:";
    cin>>num;
 
    if ( num<=freenum ) {
        freenum-=num;
 
        p=new jobs;
        strcpy ( p->jobname,jobname );
        p->num=num;
 
        for ( k=0; k<num; k++ ) {
            i=0;
            j=0;
            while ( table[i][j]==1 ) {
                j=0;
                while ( table[i][j]==1 ) j++;
                if ( table[i][j]==1 )
                    i++;
            }
            p->nums[k]=i*WORD+j;
            table[i][j]=1;
        }
 
        p->next=head->next;
        head->next=p;
 
    } else {
        cout<<"错误,当前剩余页数小于所需页数,请稍候再试:)"<<endl;
    }
 
}
 
//完成作业函数
void finish() {
    char jobname[20];
 
    jobs *p,*q;
    int n,i,j,num,k;
 
    cout<<"请输入完成的作业名:";
    cin>>jobname;
 
    p=head->next;
    q=head;
 
    while ( p!=NULL ) {
        if ( strcmp ( p->jobname,jobname ) ) {
            q=q->next;
        }
        p=p->next;
    }
 
    p=q->next;
 
    num=p->num;
    for ( k=0; k<num; k++ ) {
        n=p->nums[k];
        i=n/WORD;
        j=n%WORD;
        table[i][j]=0;
    }
 
    freenum+=num;
    q->next=p->next;
    delete p;
 
}
 
 
//显示当前位示图函数
void view_table() {
    int i,j;
    cout<<"当前位示图"<<endl;
    for ( i=0; i<WORDNUM; i++ ) {
        for ( j=0; j<WORD; j++ ) {
            cout<<table[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"总空闲块数:"<<freenum<<endl;
}
 
//显示所有页表函数
void view_pages() {
    jobs *p;
    int i;
 
    p=head->next;
    if ( p==NULL ) cout<<"当前没有用户作业"<<endl;
    else
        cout<<"当前所有的用户作业页表情况"<<endl;
    while ( p!=NULL ) {
        cout<<"作业名:"<<p->jobname<<" 所用块数:"<<p->num<<endl;
        cout<<"本作业所点块的序列是:"<<endl;
        for ( i=0; i<p->num; i++ ) {
            cout<<p->nums[i]<<" ";
        }
        cout<<endl;
        p=p->next;
    }
}
 
//显示版权信息函数
void version() {
    cout<<endl<<endl;
 
    cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<" ┃     页式内存管理系统模拟程序       ┃"<<endl;
    cout<<" ┠───────────────────────┨"<<endl;
    cout<<" ┃   (c)All Right Reserved Neo       ┃"<<endl;
    cout<<" ┃      sony006@163.com          ┃"<<endl;
    cout<<" ┃     version 2004 build 1122      ┃"<<endl;
    cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
 
    cout<<endl<<endl;
}
 
 
void main() {
    int t=1,chioce;
 
    version();
    initial();
 
    readData();
 
    while ( t==1 ) {
        cout<<endl<<"==========================================="<<endl;
        cout<<" 页式内存管理系统模拟程序"<<endl;
        cout<<"==========================================="<<endl;
        cout<<"1.加入新作业 2.完成作业 3.显示当前内存位示图 4.显示所有作业页表 0.退出"<<endl;
        cout<<"请选择:";
        cin>>chioce;
 
        switch ( chioce ) {
        case 1:
            add();
            break;
        case 2:
            finish();
            break;
        case 3:
            view_table();
            break;
        case 4:
            view_pages();
            break;
        case 0:
            t=0;
            break;
        default:
            cout<<"选择错误"<<endl;
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...