zoukankan      html  css  js  c++  java
  • 【操作系统】实验四 主存空间的分配和回收

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #define MAX 24
    void firstfit(int num);
    void bestfit(int num);
    void badfit(int num);
    struct partition{
        
        char pn[10];
        int begin;
        int size;
        int end;   
        char status;  
        };
    typedef struct partition PART;
    
    PART Total[MAX] ;
    PART userjob ;
    PART backups[MAX] ;
    
    void init(){
    
    strcpy(Total[0].pn,"No.1");
    Total[0].begin=0;
    Total[0].size=100;
    Total[0].end=100;
    Total[0].status='u';
    }
    
    
    void input(int num){
    
        int i=0;
        for(i=0;i<num;i++){
        //作业名
        printf("作业名:
    ");
        scanf("%s" ,&Total[i+1].pn);
        //开始内存大小
        printf("内存大小:
    ");
        scanf("%d",&Total[i+1].size);
        //作业状态
        printf("作业状态:
    ");
        scanf("%s",&Total[i+1].status);
        //作业开始大小
        Total[i+1].begin=Total[i].end;
        printf("开始地址:%d
    ",Total[i+1].begin);
        //作业结束大小
        Total[i+1].end=Total[i+1].begin+Total[i+1].size;
        printf("结束地址:%d
    ",Total[i+1].end);
    
        }
    
    }
    
    
    void output(int num){
    int i=0;
    printf("内存名	开始	大小	结束	状态
    ");    
        for(i=0;i<num+1;i++)
        {
            
            printf("%s 	 %d 	 %d 	 %d 	 %c 
    " ,Total[i].pn,Total[i].begin,Total[i].size,Total[i].end,Total[i].status);
        
        }
    
    
    }
    
    void inputjob(){
    printf("作业名:
    ");
        scanf("%s" ,&userjob.pn);
        //开始内存大小
        printf("内存大小:
    ");
        scanf("%d",&userjob.size);
        //作业状态
        userjob.status='u';
        //作业开始大小
        userjob.begin=0;
        //作业结束大小
        userjob.end=0;
    
    
    }
    
    
    
    void selecttypr(int select,int num){
    
        switch(select){
        case 1 : 
            printf("1首次适应算法
    ");
            firstfit(num);
            output(num+1);
            break;
        case 2 : 
            printf("2循环首次适应算法");
    
            break;
        case 3 : 
            printf("3最佳适应算法
    ");
             bestfit(num);
             output(num+1);
            break;
        case 4 : 
            printf("4最坏适应算法");
            badfit(num);
            output(num+1);
            break;
        default :
            printf("输入错误");
            break;
    
        }
    
    }
    void firstfit(int num){
       int i,sum;
       for(i=0;i<=num;i++){
           sum=Total[i+1].size;
           if(userjob.size>=sum && Total[i+1].status!='u')
           {
              Total[num+1].size=userjob.size;
              Total[num+1].begin=Total[i].end;
              Total[num+1].end=Total[i+1].begin;
              strcpy(Total[num+1].pn,userjob.pn);
              Total[num+1].status=userjob.status ;
              break;
           }
       } 
    }
    
    void bestfit(int num){ 
         int i,s,sum;
         for(i=0;i<=num;i++){
             
             if(userjob.size>=Total[i+1].size && Total[i+1].status!='u') 
             {
                s=i;
                sum=Total[i+1].size;
                for(i=i+1;i<sum;i++){
                    if(Total[i].size>userjob.size&&Total[i].size<sum&&Total[i+1].status!='u'){
                        sum=Total[i].size;
                          s=i;
                    }
             }
             }
             
         }
              Total[num+1].size=userjob.size;
              Total[num+1].begin=Total[s].end;
              Total[num+1].end=Total[s].begin;
              strcpy(Total[num+1].pn,userjob.pn);
              Total[num+1].status=userjob.status ;
         
    }
    void badfit(int num){
         int i,s,sum;
         for(i=0;i<=num;i++){
             
             if(userjob.size>=Total[i+1].size && Total[i+1].status!='u') 
             {
                s=i;
                sum=Total[i+1].size;
                for(i=i+1;i<sum;i++){
                    if(Total[i].size>userjob.size&&Total[i].size>sum&&Total[i+1].status!='u'){
                        sum=Total[i].size;
                          s=i;
                    }
             }
             }
             
         }
              Total[num+1].size=userjob.size;
              Total[num+1].begin=Total[s].end;
              Total[num+1].end=Total[s].begin;
              strcpy(Total[num+1].pn,userjob.pn);
              Total[num+1].status=userjob.status ;
    }
    
    void cz(int num){
         int i,n=0;
         char pn[10];
        printf("输入:");
        scanf("%s",&pn);
        for(i=0;i<=num;i++){
            if(strcmp(pn,Total[i+1].pn)==0){
                n=1;
                break;
            }
            else n=0;
        }
        if(n==0)
            printf("作业不存在。
    ");
        else  
            printf("已终止。
    ");
    }
    void main(){
    int num;int select;
    printf("初始化,设内存的总量为512k
    ");
    printf("系统从低地址开始分配,占用100k
    ");
    init();
    
    printf("=================================");
    printf("
    
    
    ");
    printf("作业的个数 
    ");
    scanf("%d",&num);
    input(num);
    
    printf("=================================");
    printf("
    
    
    ");
    output(num);
    //cz(num);
    printf("=================================");
    printf("
    
    
    ");
    printf("用户输入作业
    ");
    inputjob();
    
    printf("=================================");
    printf("
    
    
    ");
    printf("用户选择分配算法
    ");
    printf("			 1首次适应算法
    ");
    printf("			 2循环首次适应算法
    ");
    printf("			 3最佳适应算法
    ");
    printf("			 4最坏适应算法
    ");
    scanf("%d",&select);
    selecttypr(select,num);
    
    }

  • 相关阅读:
    【android tools】内存、网络、界面性能响应优化的工具
    mysql命令(数据库备份与恢复)
    mysql中一些简单但是新手容易犯的错误
    Mysql bench执行sql语句批量操作数据所遇到的问题
    Excel “此单元格中的数字为文本格式,或者其前面有撇号” 设成数字格式
    VC程序异常中断的原因
    vs dump调试
    winsock.h与winsock2.h出现重定义或不同的链接
    QT中QString与string的转化,解决中文乱码问题
    线程中CreateEvent和SetEvent及WaitForSingleObject的用法
  • 原文地址:https://www.cnblogs.com/xinmingwang/p/5594705.html
Copyright © 2011-2022 走看看