zoukankan      html  css  js  c++  java
  • 实验四 主存空间的分配和回收

    实验四主存空间的分配和回收

    1.    目的和要求

    1.1.           实验目的

    用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。

    1.2.           实验要求

    采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计。

    (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。

    (2)或在程序运行过程,由用户指定申请与释放。

    (3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。

    把空闲区说明表的变化情况以及各作业的申请、释放情况显示。

    2.    实验内容

    根据指定的实验课题,完成设计、编码和调试工作,完成实验报告

    3.    实验环境

    可以选用Visual C++作为开发环境。也可以选用Windows下的VB,CB或其他可视化环境,利用各种控件较为方便。自主选择实验环境。

    4.    参考数据结构:

    #include<stdio.h>

    #include<conio.h>

    #include<string.h>

    #define MAX 24

    struct partition{

         

          char pn[10];

          int begin;

          int size;

          int end;   ////////

          char status;  //////////

          };

    typedef struct partition PART;

    第一步:(第13周完成)

    完成程序数据结构的创建,初始化内存分配情况,创建空闲分区表和已分配分区表。

     

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 typedef struct process
      5 {
      6     int number;
      7     char name[20];
      8     int begin;
      9     int size;
     10     char status;
     11 
     12 }Pro ;
     13 
     14 
     15 
     16 int main()
     17 
     18 {
     19 
     20    int sys=1024;
     21     char s;
     22     int x=0;  
     23     int c1=0;        //开始
     24     int c2=0;         //大小
     25     int number=1;
     26     char j[10];   //进程名
     27     Pro part[10];
     28 
     29     strcpy(part[0].name,"system");    //初始的数据
     30     part[0].begin=0;
     31     part[0].size=100;
     32     part[0].status='f';
     33     printf("初始化,设内存总容量为%dK
    ",sys);
     34     printf("系统从低地址部分开始使用,占用%dK
    
    ",part[0].size);
     35     
     36 
     37     printf("空闲区表:
    ");
     38     printf("	NO.0	 proname	begin	 size	 status
    ");
     39     printf("	NO.1	 ------		 %d	 %d	  f
    
    ",part[0].size,sys-part[0].size);
     40     printf("-------------------------------------------------------
    ");
     41 
     42     printf("已分配分区表:
    ");
     43     printf("	NO.0	 proname	begin	 size	 status
    ");
     44     printf("	NO.1	 %s		 %d	 %d	  %c
    ",part[0].name,part[0].begin,part[0].size,part[0].status);
     45 
     46     printf("
    
    ");
     47 
     48  
     49 
     50     printf("内存使用情况,按起始增长的排序:
    ");
     51     printf("printf sorted by address:
    ");
     52     printf("	NO.	 proname	begin	 size	 status
    ");
     53     printf("	-----------------------------------------------
    ");
     54     printf("	NO.1	 %s		 %d	 %d	  u
    ",part[0].name,part[0].begin,part[0].size);
     55     printf("	NO.2	 ------		 %d	 %d	  f
    
    ",part[0].size,sys-part[0].size);
     56 
     57  
     58 
     59     printf("
    
    ");
     60     
     61 
     62     x=1;
     63 
     64     while (1) 
     65 
     66     {
     67 
     68         printf("请选择:
    1.添加
    2.回收
    0.退出
    ");
     69 
     70         scanf("%s",&s);
     71 
     72         switch (s)
     73 
     74         {
     75 
     76         case '1':             //添加
     77 
     78             printf("请输入进程名:");
     79             scanf("%s",&part[x].name);
     80             printf("请输入进程大小:");
     81             scanf("%d",&part[x].size);
     82             part[1].begin=100;    //开始
     83             part[x].status='u';
     84             number++;   //进程数
     85 
     86  
     87 
     88             printf("完成添加!
    ");
     89             printf("空闲区表:
    ");
     90             printf("	NO.0	 proname	begin	 size	 status
    ");
     91             for (x=0;x<number;x++)
     92             { 
     93 
     94                 part[x+1].begin=part[x].begin+part[x].size;
     95                 c1=part[x+1].begin;   //开始位置
     96                 c2=sys-c1;           //剩余空间大小
     97 
     98             }
     99 
    100                 printf("	NO.1	 ------		 %d	 %d	  f
    
    ",c1,c2);
    101 
    102                     part[0].status='u';
    103                 printf("-------------------------------------------------------
    ");
    104                 printf("已分配分区表:
    ");
    105                     printf("	NO.0	 proname	begin	 size	 status
    ");
    106                 for(x=0;x<number;x++)
    107                 {
    108                     part[x+1].begin=part[x].begin+part[x].size;
    109                     printf("	NO.%d	 %s		 %d	 %d	  %c
    ",x+1,part[x].name,part[x].begin,part[x].size,part[x].status);
    110                 }
    111 
    112                 printf("
    
    ");
    113                 printf("内存使用情况,按起始增长的排序:
    ");
    114                 printf("printf sorted by address:
    ");
    115                 printf("	NO.0	 proname	begin	 size	 status
    ");
    116                 printf("	-----------------------------------------------
    ");
    117                 for (x=0;x<number;x++)
    118                 {
    119                 printf("	NO.%d	 %s		 %d	 %d	  %c
    ",x+1,part[x].name,part[x].begin,part[x].size,part[x].status);
    120                 }
    121                 printf("	NO.%d	 ------		 %d	 %d	  f
    
    ",number+1,c1,c2);
    122                 break;
    123 
    124                 case '2':                     //回收
    125 
    126                printf("输入进程名:");
    127                 scanf("%s",&j);
    128                 printf("回收成功!
    ");
    129                 for (x=0;x<number;x++)
    130                 {
    131                     if (strcmp(j,part[x].name)==0)    //当为----为空闲
    132                     {
    133                         strcpy(part[x].name,"------");
    134                         part[x].status='f';
    135                     }
    136                 }
    137                 
    138                 printf("空闲区表:
    ");
    139                 printf("	NO.0	 proname	begin	 size	 status
    ");
    140                 for (x=0;x<number;x++)
    141                 {
    142                     if (part[x].status=='f')
    143                     {
    144                         printf("	NO.%d	 %s		 %d	 %d	  %c
    ",x,part[x].name,part[x].begin,part[x].size,part[x].status);}
    145                     }
    146                 printf("	NO.%d	 ------		 %d	 %d	  f
    
    ",number-1,c1,c2);       //当前进程数减一
    147                 printf("-------------------------------------------------------
    ");
    148         
    149             printf("已分配分区表:
    ");
    150             printf("	NO.0	 proname	begin	 size	 status
    ");
    151             for(x=0;x<number;x++)
    152             {
    153                 if (part[x].status=='u')
    154                 {
    155                     printf("	NO.%d	 %s		 %d	 %d	  %c
    ",x,part[x].name,part[x].begin,part[x].size,part[x].status);}
    156                 }
    157             printf("
    
    ");
    158             printf("内存使用情况,按起始增长的排序:
    ");
    159             printf("printf sorted by address:
    ");
    160             printf("	NO.0	 proname	begin	 size	 status
    ");
    161             printf("	-----------------------------------------------
    ");
    162             for (x=0;x<number;x++)
    163 
    164                 {
    165                     printf("	NO.%d	 %s		 %d	 %d	  %c
    ",x+1,part[x].name,part[x].begin,part[x].size,part[x].status);
    166                 }
    167                 printf("	NO.%d	 ------		 %d	 %d	  f
    
    ",number+1,c1,c2);
    168 
    169             break;
    170 
    171             case '0':
    172             exit(0);
    173             break;
    174 
    175         }
    176 
    177     }
    178     return 0;
    179 
    180 }
  • 相关阅读:
    window安装配置 zookeeper 单机模式
    Gradle安装配置
    Window安装配置Redis
    springBoot2.0 配置@ControllerAdvice 捕获异常统一处理
    java中的String,StringBuffrer,Stringbuilder的区别
    springBoot2.0 配置shiro实现权限管理
    Vue双向绑定实现原理demo
    springBoot2.0 配置 mybatis+mybatisPlus+redis
    vue-cli3.0 使用图形化界面创建和管理项目
    vue-cli3.0 脚手架搭建项目
  • 原文地址:https://www.cnblogs.com/cjh123/p/5614698.html
Copyright © 2011-2022 走看看