linux内核内存分配.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统第八次实验张焓实验名称:内存分配算法的模拟实现实验目的:了解和熟悉主要的内存分配算法,学习首次适应算法、最佳适应算法、最差适应算法的算法机制,并通过模拟深刻了解三种算法的算法效率及适用情况。实验方法//内存分配算法的模拟实现(含紧凑算法):首次适应算法、最佳适应算法、最差适应算法!(1)包含该程序需要的头文件,并声明分区数量、最大任务数量;//=========================张焓============================#includeiostream#includestring#includeiomanip#define memory_Num 10#define pro_MAX 10using namespace std;//=========================================================(2)定义两个结构体,node用于存放分区信息,process用于存放任务信息,NUM用于申请分区的程序的计数;typedef struct{int id;int size;int broken;string name;int sta_palce;bool flag;}node;node FQ[memory_Num];typedef struct{int size;string name;}process;process PR[pro_MAX];int NUM = 0;(3)定义分区初始化的函数,用于初始化分区;//----------------------初始化分区----------------------------void fq_creat()//初始化内存的各个分区的信息{int start_flag = 0;int j = 1;//为初始化分区大小定义的临时变量for (int i = 0; imemory_Num; ++i)//分区大小从1-512一共10个;{FQ[i].id = i;FQ[i].size = j;FQ[i].sta_palce = start_flag;FQ[i].flag = false;FQ[i].broken = 0;start_flag += j;j *= 2;}}//-------------------------------------------------------------(4)定义一个排序函数,以分区大小升序排列分区,在最佳适用算法与最差适应算法被配合使用;//----------------------按分区大小升序排序---------------------void order()//按分区大小排序{for (int i = 1; imemory_Num; i++) {if (FQ[i].sizeFQ[i - 1].size) //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入??{int j = i - 1;node x = FQ[i]; //复制为哨兵,即存储待排序元素??FQ[i] = FQ[i - 1]; //先后移一个元素??while (x.sizeFQ[i].size) {//查找在有序表的插入位置??FQ[j + 1] = FQ[j];j--;//元素后移??}FQ[j + 1] = x; //插入到正确位置??}}}//-------------------------------------------------------------(5)首次适应算法;//------------------------ first fit ------------------------void first_fit(string pro_name, int pro_size){cout 你选择了首次适应算法 endl;int i;for (i = 0; imemory_Num; ++i)if (FQ[i].flag == false FQ[i].size = pro_size){FQ[i].flag = true;FQ[i].name = pro_name;FQ[i].broken = FQ[i].size - pro_size;break;}if (i = memory_Num)//当所有的内存大小都小于进程所需的空间大小时,开始紧凑{i = 0;while (FQ[i].flag == true)//从最小分区开始 扫描找到第一个未被使用的分区++i;int j = i + 1;while (FQ[i].sizepro_sizejmemory_Num){FQ[i].size += FQ[j].size;FQ[j].size = 0;++j;}

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档