基于C语言的分页管理方式下存储分配情况模拟

简介: 基于C语言的分页管理方式下存储分配情况模拟

1. 题目简介


借用外存空闲分区管理中位示图的方法来表示主存分配情况,实现主存空间的分配和回收

要求能显示和打印分配或回收前后的位示图和当前空闲块数,对完成一次分配后还要显示或打印为作业建立的页表


2. 所用数据结构

为要分配的作业建立数据结构


typedefstructjob{
  intpage[64];// 页表
  intjobname;
  intsize;
  intpresent;// 表示作业的状态, 执行还是结束
  strcutjob*next;}JN,*jobnode;


3. 程序代码描述


voidinit()//初始化作业链
voidshowbitgraph()//显示位示图
voidmemoryallocate()//分配内存
voidmemoryrecycle()//回收内存
voidshowjob()//显示内存中还有多少作业
voidshowpagetable()//显示页表

核心代码:

voidmemoryallocate()//内存分配
{
  inti,j,k=0;
  jobnodep=newJN;
  jobnodeq=head;
  cout<<"请输入作业的名称:"<<endl;
  cin>>p->jobname;
  cout<<"请输入作业所需的内存大小:"<<endl;
  cin>>p->size;
  p->present=1;
  if(p->size>64-::count)
    cout<<"作业所需的内存大小不能满足,分配失败"<<endl;
  else
  {
    intcontrol=1;
    for(i=0;i<8&&control;i++)
    {
      for(j=0;j<8&&control;j++)
      {
        if(bitgraph[i][j]==0)
        {
          p->page[k]=8*i+j;
          bitgraph[i][j]=1;
          ::count++;
          k++;
          if(k==p->size)
            control=0;
        }
      }
    }
    while(q->next!=NULL)
    {
      q=q->next;
    }
    q->next=p;
    p->next=NULL;
  }
  cout<<endl;
  showbitgraph();}voidmemoryrecycle()//内存回收
{
  inti;
  intm,n,symbol=0;
  intid;
  cout<<"请输入执行结束作业的名称:"<<endl;
  cin>>id;
  jobnodepoint=head->next;
  while(point!=NULL)
  {
    if(id==point->jobname)
    {
      for(i=0;i<point->size;i++)
      {
        m=point->page[i]/8;
        n=point->page[i]%8;
        bitgraph[m][n]=0;
        ::count--;
      }
      point->present=0;
    }
    else
    {
      point->present=1;
    }
    point=point->next;
  }
  jobnoder=head->next;
  while(r!=NULL)
  {
    if(r->present==0)
    {
      cout<<"内存回收成功!"<<endl;
      showbitgraph();
    }
    r=r->next;
  }}

4. 运行结果


e26ce98a0f0cc4613f7d32affdffa61a.png


分配主存:d7067b778fffa9318a27388aab4a3bb6.png

显示作业和页表:

d48024ef82263de43129f815c0b88304.png


回收主存:


7bba065cf672577b5637e350d5003e72.png


完整的代码+数据:

https://download.csdn.net/download/qq_38735017/87380378?spm=1001.2014.3001.5501

相关文章
|
1天前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
1天前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
1天前
|
存储 小程序 编译器
【C语言基础】:数据在内存中的存储
【C语言基础】:数据在内存中的存储
TU^
|
1天前
|
程序员 编译器 C语言
C语言之动态内存管理
C语言之动态内存管理
TU^
5 1
|
10天前
|
存储 编译器 C语言
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)二
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)二
11 0
|
10天前
|
存储 编译器 C语言
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
19 2
|
10天前
|
存储 程序员 C语言
C语言黑魔法第三弹——动态内存管理
C语言黑魔法第三弹——动态内存管理
C语言黑魔法第三弹——动态内存管理
|
12天前
|
存储 编译器 数据库
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
|
18天前
|
存储 算法 C语言
C语言指针与二维数组在函数参数传递和动态内存管理中的应用
C语言指针与二维数组在函数参数传递和动态内存管理中的应用
19 0
|
18天前
|
存储 C语言
C语言进阶 数据的存储(上)
C语言进阶 数据的存储(上)
19 0