资源简介
操作系统内存分配与回收C语言模拟。包含源代码和.exe可执行文件
代码片段和文件信息
#define minisize 50 /*空闲区_申请空间≤minisize 时,分配整个空闲区*/
#define m 20 /*假定系统允许的空闲区表最大为m*/
#include “stdio.h“
/*系统中主要数据结构*/
struct
{float address; /*空闲区起始地址*/
float length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标记,用0表示空栏目,用1表示未分配*/
}free_table[m]; /*空闲区表*/
struct
{
float address;
float length;
int flag;
}used_table[m];
void init_free_table() //采用最佳适应算法初始化内存分区
{
int i;
free_table[0].address=0;
free_table[0].length=200;
free_table[0].flag=1;
for(i=1;i {
free_table[i].address=free_table[i-1].address+free_table[i-1].length;
free_table[i].length=free_table[i-1].length+300;
free_table[i].flag=1;
}
}
void init_used_table()
{
int i;
for(i=0;i {
used_table[i].address=0;
used_table[i].length=0;
used_table[i].flag=0;
}
}
float xk0=0;//定义一个全局变量存储实际分配长度
float input()
{
float a;
while(1)
{
fflush(stdin);
printf(“请输入要装入的程序的大小:“);
scanf(“%f“&a);
if(a<=0)
printf(“输入数值不合法!“);
else
break;
}
return a;
}
float allocate(float xk)
{
int ik;
float ad;
k=-1;
for(i=0;i if((free_table[i].flag==1) && (free_table[i].length>=xk))
{k=i;
break;}
if(k==-1) /* 无可用空闲区返回 */
{printf(“no free space\n“);
return(-1);
}
if(free_table[k].length-xk<=minisize) /* 找到可用空闲区开始分配 */
{free_table[k].flag=0;
ad=free_table[k].address;
xk=free_table[k].length;
}
else
{free_table[k].length=free_table[k].length-xk;
ad=free_table[k].address+free_table[k].length;
}
xk0=xk;
return(ad);
}
void record(float xk1) //记录已分配内存
{
static int used_i=0; //只初始化一次
float ad1;
ad1=allocate(xk1);
if(ad1==-1)
{
printf(“无法装入该程序!“);
return;
}
used_table[used_i].address=ad1;
used_table[used_i].length=xk0;
used_table[used_i].flag=1;
used_i++;
}
void display_free()
{
int i;
printf(“未分配内存:\n“);
printf(“编号 开始地址 结束地址 长度 状态\n“);
for(i=0;i {
if(free_table[i].flag==1)
{
printf(“ %2d %5g %5g %5g 未分配\n“i+1free_table[i].addressfree_table[i].address+free_table[i].lengthfree_table[i].length);
}
}
printf(“\n\n“);
}
void display_used()
{
int i;
printf(“已分配内存:\n“);
printf(“编号 开始地址 结束地址 长度 状态\n“);
for(i=0;i {
if(used_table[i].flag==1)
{
printf(“ %2d %5g %5g %5g 已分配\n“i+1used_table[i].addressused_table[i].address+used_table[i].lengthused_table[i].length);
}
}
printf(“\n\n“);
}
void re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6656 2014-06-22 15:19 collect.exe
文件 5484 2014-06-22 15:19 main.c
- 上一篇:使用c语言写的卷积运算程序
- 下一篇:c++面向对象程序设计 谭浩强第二版习题答案
相关资源
- 操作系统实验——spooling技术
- 操作系统使用C语言链表实现进程管理
- 哲学家进餐实验报告
- 《基于Linux的设备分配及磁盘调度》
- 操作系统生产者与消费者综合性实验
- C语言实现调度算法源代码-山东大学操
- 操作系统文件管理系统c++
- 基于FCFS和SPF的进程管理系统可用资源
- 操作系统课程设计 linux文件系统
- c++写的操作系统课程设计:模拟文件
- 操作系统文件管理系统模拟实现
- 处理机调度的模拟实现_C语言
- 操作系统课程设计,设备分配与磁盘
- 多道批处理系统两级调度的模拟
- 空闲分区链源代码
- 操作系统 4种经典同步互斥问题
- 广工操作系统课设:多道批处理系统
- 操作系统抢占式动态优先级调度算法
- 操作系统课设__多道批处理系统两级调
- 计算机操作系统实验报告,C语言实现
- 操作系统基本分页存储系统
- 操作系统实验报告处理机调度算法的
- 安徽大学操作系统实验九最终考试内
- 动态分区分配方式的模拟
- 操作系统电梯调度算法
- nachos操作系统实验三
- 用C\\C++实现操作系统经典同步问题,
- NUR算法和OPT算法实现-----操作系统实验
- 操作系统模拟实现单级目录的文件系
- FCFS和SJF调度算法C++
评论
共有 条评论