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 }
  • 相关阅读:
    解析大型.NET ERP系统 权限模块设计与实现
    Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
    解析大型.NET ERP系统 单据编码功能实现
    解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
    Windows 10 部署Enterprise Solution 5.5
    解析大型.NET ERP系统 设计异常处理模块
    解析大型.NET ERP系统 业务逻辑设计与实现
    解析大型.NET ERP系统 多国语言实现
    Enterprise Solution 管理软件开发框架流程实战
    解析大型.NET ERP系统 数据审计功能
  • 原文地址:https://www.cnblogs.com/cjh123/p/5614698.html
Copyright © 2011-2022 走看看