资源简介
用C/C++语言模式Linux操作系统主存的分配与回收,希望采纳!
代码片段和文件信息
#include
#include
#include
#include
#include
typedef struct QNode{
char name[10];
int address; //起始地址
int flag; //状态,空闲0,分配1
int length; //长度
struct QNode *next; //指针指向下一个结点
}QNode;
typedef struct{
QNode *front; //指向头结点
QNode *rear; //指向尾结点
} LiQueue;
/*****************************初始化***************************/
void InitQueue(LiQueue *&q)
{
q=(LiQueue *)malloc(sizeof(LiQueue));//q是指针
QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s->address=0; //初始地址为0
s->flag=0; //初始状态为空闲
printf(“初始化主存空间的大小:“);
scanf(“%d“&s->length);
s->next=NULL;
q->front=q->rear=s;
}
/****************************内存分配**************************/
void enQueue(LiQueue *&qint lengthchar name[])//q是指针
{
QNode *s=q->front;
while(s->flag||s->length {
if(s==q->rear)
break;
else
s=s->next;
}
if(s==NULL||s->flag||s->length {
printf(“内存不足\n“);
}
else if(s->length==length)
{
strcpy(s->namename);
s->flag=1;
}
else//空闲区长度大于所需长度
{
QNode *t;
t=(QNode *)malloc(sizeof(QNode));
t->address=s->address+length;//下一个节点的基地址
t->flag=0;//下个节点未分配
t->length=s->length-length;//剩余内存
t->next=NULL;
s->flag=1;//上个节点表明已经分配
s->length=length;//修改分别的长度
strcpy(s->namename);//分配的进程名称
if(s==q->rear)
{
q->rear=t;
s->next=t;
}
else
{
t->next=s->next;
s->next=t;
}
}
getchar();
}
/******************************回收内存**************************/
void ClearQueue(LiQueue *&q)
{
char name[10];
printf(“输入进程名:“); scanf(“%s“name);
QNode *s=q->front;//指向链表的头结点
//判断是否释放的是头结点
if(q->front->flag && !strcmp(q->front->namename)) //进程头结点
{
if(q->front->next!=NULL && !q->front->next->flag)//如果下一个结点空闲,结点合并
{
q->front->length+=q->front->next->length;
//断开第二个节点的连接,接上后面的节点
q->front->next=q->front->next->next;
q->front->flag=0;//
}
else //否则直接将结点状态改为空闲
q->front->flag=0;
}
else if(q->rear->flag && !strcmp(q->rear->namename))//进程在尾结点
{
QNode *t=q->front;
while(t!=q->rear)//查找上一个结点s
{
s=t;
t=t->next;
}
if(!s->flag)//如果上一个结点空闲结点合并
{
s->length+=q->rear->length;
q->rear=s;
s->next=NULL;
- 上一篇:TMS320C6416的SDRAM测试程序代码
- 下一篇:RSA加密算法C语言实现
相关资源
- 北京化工大学计算方法(C/C++)讲义
- Linux c语言 学生成绩管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- XUnZip Zip解压缩.rar
- Windows_API_函数大全 C/C++
- C语言程序设计教材习题参考答案.do
- Linux开发工具手册
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- Linux操作系统下C语言编程从零开始
- 高效FFT的C/C++代码实现包括基2的DIF和
- c/c++开发网络验证和本地验证
- 操作系统存储管理实验报告c/c++
- 基于Linux下C语言开发的员工管理系统
- C++编写的万年历源码
- 超级玛丽c++源码win32Linux平台
- C语言进阶源码---基于graphics实现图书
- 井字棋三连棋的AI实现,C/C++
- 《水果忍者》设计报告.doc
- MFC实现的红绿灯程序
- UNIX/LINUX下C语言中文短信UCS2编码和解
- 嵌入式工程师必知必会 (完整高清中
- linux-2.6.24.rar
- Win32简易画图程序
- C++网络爬虫项目
- 泡泡堂(炸弹人)小游戏C/C++完整源码
- 使用C/C++读取BITMAP的内容
- VC图像处理-用Canny算子提取边缘
- C/C++视频教程
- Linux下C语言操作静态ARP表,包括增加
- 个人总结的一些C/C++编码规范
评论
共有 条评论