zoukankan      html  css  js  c++  java
  • 实验五:存储管理实验

    #include"stdio.h"
    #include"stdlib.h"
    #include"time.h"
    struct wuli{
        int wuli_number;
        char pname; /*已分配区表登记栏标志,用"0"表示空栏目*/
    }; /*内存表*/
    struct wuli wuli_table[20]={0};
    struct page{ 
        
        char pname;//进程名称
        int psize;//进程大小  
        int pagetable[10];//进程页表
    };//页表
    struct page page_table[10]={0};
    
    int allocate(int wulisize,int i,int pagesize);//为进程分配内存空间
    int reclaim(int wulisize,char pname);//释放进程占用的空间
    
    void output();
    int main()
    {
        int pagesize;//分页大小
        int wulisize=80;//内存大小
        char pname;
        int xuanze;//操作选择
        int i;
        
        printf("输入页面大小:
    ");
        scanf("%d",&pagesize);
        //初始化
        for(i=0;i<20;i++)
        {
            wuli_table[i].wuli_number=i;
            wuli_table[i].pname='0';
        }
        for(i=0;i<10;i++)
        {
            page_table[i].pname='0';
            
        }
        //初始化后的内存空间有一部分已经被使用
        srand((unsigned)time(NULL));
        for(i=0;i<7;i++)
        {
            
            int number=rand()%19+1;
            wuli_table[number].pname='a';
            wulisize--;
        }
        output();
        //进入存储分配
        while(wulisize!=0)
        {
            printf("选择操作
    1.分配  2.回收
    ");
            scanf("%d",&xuanze);
            if(xuanze==1)
            {
                for( i=0;i<10;i++)
                {
                    if(page_table[i].pname=='0')
                    {
                        getchar();
                        printf("输入进程名称:");
                        scanf("%c",&page_table[i].pname);
                        getchar();
                        printf("输入进程大小:");
                        scanf("%d",&page_table[i].psize);
                        break;
                    }
                }
                wulisize=allocate(wulisize,i,pagesize);
            }else
            {
                printf("输入进程名称:");
                getchar();
                scanf("%c",&pname);
                wulisize=reclaim(wulisize,pname);
            }
            
            output();
        }
        
        
        return 0;
    }
    
    
    
    int  allocate(int wulisize,int i,int pagesize)
    {
        int k;
        int j;
        for(k=0;k<(page_table[i].psize/pagesize);k++)
        {
            for( j=0;j<20;j++)
            {
                if(wuli_table[j].pname=='0')
                {
                    wuli_table[j].pname=page_table[i].pname;
                    page_table[i].pagetable[k]=j;
                    wulisize--;
                    break;
                    
                }
            }
            
        }
        return wulisize;
    }
    
    int reclaim(int wulisize,char pname)
    {
        int j;
        int k;
        for( j=0;j<20;j++)
        {
            if(wuli_table[j].pname==pname)
            {
                wuli_table[j].pname='0';
                
                wulisize++;
                
                
            }
        }
        for (j=0;j<10;j++)
        {
            if(page_table[j].pname==pname)
            {
                page_table[j].pname='0';
                page_table[j].psize=0;
                for(k=0;k<10;k++)
                {
                    page_table[j].pagetable[k]=0;
                }
                
                break;
                
            }
        }
        return wulisize;
    }
    
    
    
    void output(){
        int i;
        printf("————————内存分配情况——————————
    ");
        printf("物理块号   进程名
    ");
        for(i=0;i<20;i++)
        {
            
            printf("%d         %c
    ",wuli_table[i].wuli_number , wuli_table[i].pname);
        }
    }
    

    这个实验让我对存储的管理理解得更加透彻了。

  • 相关阅读:
    (转载)SAPI 包含sphelper.h编译错误解决方案
    C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
    504. Base 7(LeetCode)
    242. Valid Anagram(LeetCode)
    169. Majority Element(LeetCode)
    100. Same Tree(LeetCode)
    171. Excel Sheet Column Number(LeetCode)
    168. Excel Sheet Column Title(LeetCode)
    122.Best Time to Buy and Sell Stock II(LeetCode)
    404. Sum of Left Leaves(LeetCode)
  • 原文地址:https://www.cnblogs.com/woaiQ1314/p/4597166.html
Copyright © 2011-2022 走看看