存储管理之分页存储管理方式C语言模拟(实验五)

来源:互联网 发布:发生未知的网络错误 编辑:程序博客网 时间:2024/04/29 00:12

       分页存储管理方式,将程序划分为若干个大小固定的区域(页),也把物理内存划分为大小和页相等的块,通过页表完成页到块的映射。


分页存储管理之C语言模拟:

#include <stdio.h>#include <string.h>#include <stdlib.h>#define PAGE 20int memory[PAGE];struct page{ //描述进程信息    int process;    int page_num;    int user[PAGE];    int f;    page(){        f = 0;        process = 0;        page_num = 0;        memset(user,0,PAGE);    }};struct page *Mem = new page[PAGE];void init_memory(){    printf("请输入一个4*5的二维矩阵,1代表已分配,0代表未分配\n");    for(int i = 0; i < 4; i++)        for(int j = 0; j < 5; j++)        scanf("%d",&memory[i * 5 + j]);}void output(){    printf("当前内存的状态\n");    for(int i = 0; i < PAGE; i++){        printf("%d ",memory[i]);        if(!((i +1) % 5))            printf("\n");    }    printf("\n");}void c_malloc() /*分配内存*/{    int page_num,page_no;    printf("请输入作业号和作业大小\n");    scanf("%d%d",&page_no,&page_num);    int sum = 0;    for(int i = 0; i < PAGE; i++) /*检查内存状态,是否满足作业需求*/        if(!memory[i])            sum ++;    if(sum < page_num){ /*可用内存页数小于作业需要的内存页数则结束*/        printf("内存空间不足\n");        return;    }    int page_s;    for( page_s = 0; page_s < PAGE; page_s++){ /*检查是否存在相同作业号的作业*/        if(Mem[page_s].f && Mem[page_s].process == page_no){ /*存在同名的给出提示并结束*/            printf("存在同名的作业号\n");            return;        }        if(Mem[page_s].f == 0){ /*作业状态标记为使用*/            Mem[page_s].f  = 1;            break;        }    }    Mem[page_s].process = page_no;    Mem[page_s].page_num = page_num;    for(int i = 0,j = 0; i < PAGE; i++) /*更发内存页号为已使用*/        if(!memory[i] && j < page_num){             memory[i] = 1;             Mem[page_s].user[j++] = i;        }}void c_free() /*回收内存*/{    int page_no;    printf("请输入作业号和作业大小\n");    scanf("%d",&page_no);    int page_f;    for(page_f = 0; page_f < PAGE; page_f++) /*检查是否存在作业信息*/        if(Mem[page_f].f && Mem[page_f].process == page_no) /*若存在则结束*/            break;    if(page_f == PAGE - 1){ /*作业信息不存在,提示并结束*/        printf("作业信息不存在\n");        return;    }    for(int i = 0; i < Mem[page_f].page_num; i++) /*把矩阵置0*/        memory[Mem[page_f].user[i]] = 0;    Mem[page_f].f = 0; /*把作业标志置0*/}int menu() /*菜单*/{    printf("添加作业:1\n");    printf("删除作业:2\n");    printf("输出内存状态:3\n");    printf("结束作业:0\n");    int menu;    scanf("%d",&menu);    return menu;}int main(int argc,char *argv[]){    init_memory(); /*初始化内存空间*/    int t;    while((t = menu())){        if(t == 1)            c_malloc(); /*分配内存*/        else if(t == 2)            c_free(); /*释放内存*/        else if(t == 3)            output(); /*输出内存信息*/    }    return 0;}


0 0
原创粉丝点击