时间:2015-01-12 来源:

操作系统——动态分区分配方式模拟 【编程语言】

这里直接给出代码承接网站前端,先在给出四中模拟算法.

请采用数组四种算法进行内存块的分配和回收,html切图报价同时显示内存块分配和回收后空闲内存分区链的情况.

 *操作系统:首次适应算法的动态分区分配方式模拟 #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<cmath> using namespace std; struct ready_node{//就绪的进程 int id;//进程编号 int flag;//表是进程的状态团队网页接活,1:表示进入内存,团队网页接活0:表示从内存撤出 int size;//进程长度 }; struct free_node{//空闲区域表的结构体,手机网页制作首地址和长度 int id;//保存在该区域的进行号 int start;//首地址 int len;//长度 }; vector<free_node> free_list;//保存空闲区域表的内容网页切图制作,分别是区域首址和区域长度 vector<free_node> used_list;//保存已占用区域表的内容,网页切图制作分别是区域首址和区域长度 queue<ready_node> ready_list;//就绪的进程队列div+css+js切图,free_node b);//定义排序的比较方式 void Show();//显示空闲区域表和已占用表的信息 void Init();//初始化等待序列 void Alloc(ready_node node);//动态分区分配函数 void Free(ready_node node);//回收过程函数 void Oper_FIRO();//操作函数 void Print();//显示最后控制台的空想区域表的状态承接网站前端,输入文件中 int main() { //重定向输入输出,承接网站前端对文件进行操作 freopen("input.txt",stdin); freopen("output8.txt",stdout); Init();//一定先进行初始化 Oper_FIRO(); //Print(); return 0; } int cmp(free_node a,free_list.end(),free_list[i].start,used_list[i].id,used_list[i].len); printf("----------------------------\n"); } } void Init(){//初始化等待序列 free_node fnod; fnod.start=0; fnod.len=640;//初始化空闲表 free_list.push_back(fnod); ready_node node; while(scanf("%d%d%d",&node.flag,free_list.end(),移除这个空闲区域 free_list.erase(it); } ok=1;//已找到匹配 break; } } if(ok==0){//证明当前进程没有匹配成功承接网站前端,则放入就绪队列 ready_list.push(node); } printf("进程%d申请进入内存,承接网站前端内存占用大小为%dkb:\n",node.size); Show(); } void Free(ready_node node){//回收过程函数 //释放内存的过程中web外包,进程正常都会在内存中出现,手机网页制作这里就假设释放的进程全部合法 free_node fnod; vector<free_node>::iterator it;//定义迭代器 for(it=used_list.begin();it!=used_list.end();++it){ if(((*it).id) == node.id){//找到撤销进程 //回收空闲空间网页切图制作,并放入空闲区域白哦,网页切图制作此时不用记录进程号div+css+js切图,因为好没有进程占有空间 fnod.start=(*it).start; fnod.len=node.size; free_list.push_back(fnod);//放入空闲区域表 (*it).len-=node.size;//修改占用区域表的信息 if((*it).len==0){//撤销内存后,网页重构报价剩余的占有空间为0,移除这个空闲区域 used_list.erase(it); } break; } } printf("进程%d申请撤销,承接网站前端收回内存大小为%dkb:\n",node.size); Show(); } void Oper_FIRO(){//操作函数 ready_node node; while(!ready_list.empty()){//首先操作第一次未匹配的进程web外包,此队列中只有进入内存的进程,div切图排版 //只组要调用分配函数Alloc()即可网页切图制作,不用调用回收函数Free() node=ready_list.front();//取出队首元素 ready_list.pop();//出队 Alloc(node); } while(!wait_list.empty()){//操作等待数列,网页切图制作有分配和回收两个过程 node=wait_list.front(); wait_list.pop(); if(node.flag==1){//申请进入内存的进程 Alloc(node); } else{//要撤出内存的进程 Free(node); } } } void Print(){//显示最后控制台的空想区域表的状态div+css+js切图,free_list.end(),free_list[i].start,free_list[i].len); } }  *操作系统:循环首次适应算法的动态分区分配方式模拟   #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<cmath> using namespace std; struct ready_node{//就绪的进程 int id;//进程编号 int flag;//表是进程的状态,psd切图html1:表示进入内存web外包,0:表示从内存撤出 int size;//进程长度 }; struct free_node{//空闲区域表的结构体,手机网页制作首地址和长度 int id;//保存在该区域的进行号 int start;//首地址 int len;//长度 }; vector<free_node> free_list;//保存空闲区域表的内容网页切图制作,分别是区域首址和区域长度 vector<free_node> used_list;//保存已占用区域表的内容,div页面分别是区域首址和区域长度 queue<ready_node> ready_list;//就绪的进程队列div+css+js切图,free_node b){//定义排序的比较方式 return a.start<b.start;//按开始地址从小到大排序 } void Show(){//显示空闲区域表和已占用表的信息 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 printf("-----------------------\n"); printf("| 空闲链表的使用情况: |\n"); printf("-----------------------\n"); printf("---------------\n"); printf("| 首址 | 长度 |\n"); printf("---------------\n"); for(int i=0;i<free_list.size();i++){ printf("| %3d | %3d |\n",free_list[i].len); printf("---------------\n"); } printf("-------------------------\n"); printf("| 已占用链表的使用情况: |\n"); printf("-------------------------\n"); printf("----------------------------\n"); printf("|运行进程 | 首址 | 长度|\n"); printf("----------------------------\n"); for(int i=0;i<used_list.size();i++){ printf("| %3d | %3d | %3d |\n",used_list[i].start,&node.id,&node.size)!=EOF){ wait_list.push(node); //cout<<node.size<<endl; } } void Alloc(ready_node node){//动态分区分配函数 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 //cout<<free_list.size()<<endl; free_node fnod; int ok=0;//表示是否匹配成功 for(int i=k;i<free_list.size();++i){ //cout<<(*it).start<<endl; if(free_list[i].len >= node.size){ //记录已占用空间 fnod.len=node.size; fnod.start=free_list[i].start; fnod.id=node.id; used_list.push_back(fnod);//放入已占用区域表 free_list[i].start+=node.size; free_list[i].len-=node.size;//修改空闲区域表的信息 /**此处应该是个bug,但是对与词组用例乜有影响,psd切图html如果出现bug, *可以在输出函数里面进行处理,div切图排版输出时跳过内容为-1的项即可. */ if(free_list[i].len==0){//剩余空闲长度为0,全部赋值为-1.移除这个空闲区域 free_list[i].id=free_list[i].start=free_list[i].len=-1; } k=i+1; if(k>=free_list.size()) k=0; ok=1;//已找到匹配 break; } } if(ok==0){//证明当前进程没有匹配成功,网页切图制作则放入就绪队列 k=0; ready_list.push(node); } printf("进程%d申请进入内存div+css+js切图,node.id,node.size); Show(); } void Free(ready_node node){//回收过程函数 //释放内存的过程中,页面div重构进程正常都会在内存中出现psd切图html,这里就假设释放的进程全部合法 free_node fnod; vector<free_node>::iterator it;//定义迭代器 for(it=used_list.begin();it!=used_list.end();++it){ if(((*it).id) == node.id){//找到撤销进程 //回收空闲空间,psd切图html并放入空闲区域白哦web外包,此时不用记录进程号,手机网页制作因为好没有进程占有空间 fnod.start=(*it).start; fnod.len=node.size; free_list.push_back(fnod);//放入空闲区域表 (*it).len-=node.size;//修改占用区域表的信息 if((*it).len==0){//撤销内存后网页切图制作,移除这个空闲区域 used_list.erase(it); } break; } } printf("进程%d申请撤销div+css+js切图,node.id,node.size); Show(); } void Oper(){//操作函数 ready_node node; while(!ready_list.empty()){//首先操作第一次未匹配的进程,承接网站前端此队列中只有进入内存的进程psd切图html, //只组要调用分配函数Alloc()即可,承接网页制作不用调用回收函数Free() node=ready_list.front();//取出队首元素 ready_list.pop();//出队 Alloc(node); } while(!wait_list.empty()){//操作等待数列web外包,有分配和回收两个过程 node=wait_list.front(); wait_list.pop(); if(node.flag==1){//申请进入内存的进程 Alloc(node); } else{//要撤出内存的进程 Free(node); } } } int main() { //重定向输入输出,手机网页制作对文件进行操作 freopen("input.txt",stdin); freopen("output9.txt",stdout); Init();//一定先进行初始化 Oper(); return 0; } *操作系统:最佳适应算法的动态分区分配方式模拟 #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<cmath> using namespace std; struct ready_node{//就绪的进程 int id;//进程编号 int flag;//表是进程的状态承接网站前端,1:表示进入内存,承接网站前端0:表示从内存撤出 int size;//进程长度 }; struct free_node{//空闲区域表的结构体psd切图html,首地址和长度 int id;//保存在该区域的进行号 int start;//首地址 int len;//长度 }; vector<free_node> free_list;//保存空闲区域表的内容,psd切图html分别是区域首址和区域长度 vector<free_node> used_list;//保存已占用区域表的内容web外包,分别是区域首址和区域长度 queue<ready_node> ready_list;//就绪的进程队列,div切图排版主要保存第一次匹配为成功的进程 queue<ready_node> wait_list;//等待的进程队列 int cmp(free_node a,free_node b){//定义排序的比较方式 if(a.len<b.len) return 1;//按内存长度从小到大排序 if(a.len==b.len&&a.start<b.start) return 1;//如果长度相同,网页切图制作按照首地址从小到大排序 return 0; } void Show(){//显示空闲区域表和已占用表的信息 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 printf("空闲链表的使用情况: \n"); printf(" 首址 长度 \n"); for(int i=0;i<free_list.size();i++){ printf(" %3d %3d \n",free_list[i].len); } printf(" 已占用链表的使用情况: \n"); printf("运行进程 首址 长度\n"); for(int i=0;i<used_list.size();i++){ printf(" %3d %3d %3d \n",used_list[i].start,&node.id,&node.size)!=EOF){ wait_list.push(node); //cout<<node.size<<endl; } } void Alloc(ready_node node){//动态分区分配函数 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 //cout<<free_list.size()<<endl; free_node fnod; int ok=0;//表示是否匹配成功 vector<free_node>::iterator it;//定义迭代器 for(it=free_list.begin();it!=free_list.end();++it){ //cout<<(*it).start<<endl; if(((*it).len) >= node.size){ //记录已占用空间 fnod.len=node.size; fnod.start=(*it).start; fnod.id=node.id; used_list.push_back(fnod);//放入已占用区域表 (*it).start+=node.size; (*it).len-=node.size;//修改空闲区域表的信息 if((*it).len==0){//剩余空闲长度为0,移除这个空闲区域 free_list.erase(it); } ok=1;//已找到匹配 break; } } if(ok==0){//证明当前进程没有匹配成功,承接网站前端则放入就绪队列 ready_list.push(node); } printf("进程%d申请进入内存psd切图html,node.id,node.size); Show(); } void Free(ready_node node){//回收过程函数 //释放内存的过程中,手机网页制作进程正常都会在内存中出现网页切图制作,这里就假设释放的进程全部合法 free_node fnod; vector<free_node>::iterator it;//定义迭代器 for(it=used_list.begin();it!=used_list.end();++it){ if(((*it).id) == node.id){//找到撤销进程 //回收空闲空间,网页切图制作并放入空闲区域白哦div+css+js切图,此时不用记录进程号,网页重构报价因为好没有进程占有空间 fnod.start=(*it).start; fnod.len=node.size; free_list.push_back(fnod);//放入空闲区域表 (*it).len-=node.size;//修改占用区域表的信息 if((*it).len==0){//撤销内存后承接网站前端,移除这个空闲区域 used_list.erase(it); } break; } } printf("进程%d申请撤销psd切图html,node.id,node.size); Show(); } void Oper(){//操作函数 ready_node node; while(!ready_list.empty()){//首先操作第一次未匹配的进程,div切图排版此队列中只有进入内存的进程网页切图制作, //只组要调用分配函数Alloc()即可,网页切图制作不用调用回收函数Free() node=ready_list.front();//取出队首元素 ready_list.pop();//出队 Alloc(node); } while(!wait_list.empty()){//操作等待数列div+css+js切图,有分配和回收两个过程 node=wait_list.front(); wait_list.pop(); if(node.flag==1){//申请进入内存的进程 Alloc(node); } else{//要撤出内存的进程 Free(node); } } } int main() { //重定向输入输出,div+css+js切图对文件进行操作 freopen("input.txt",stdin); freopen("output10.txt",stdout); Init();//一定先进行初始化 Oper(); return 0; }  *操作系统:最坏适应算法的动态分区分配方式模拟

作业1申请130KB

作业1释放130 KB

#include<iostream> #include<cstdio> #include<map> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<cmath> using namespace std; struct ready_node{//就绪的进程 int id;//进程编号 int flag;//表是进程的状态web外包,1:表示进入内存,手机网页制作0:表示从内存撤出 int size;//进程长度 }; struct free_node{//空闲区域表的结构体网页切图制作,首地址和长度 int id;//保存在该区域的进行号 int start;//首地址 int len;//长度 }; vector<free_node> free_list;//保存空闲区域表的内容,div页面分别是区域首址和区域长度 vector<free_node> used_list;//保存已占用区域表的内容div+css+js切图,分别是区域首址和区域长度 queue<ready_node> ready_list;//就绪的进程队列,div+css+js切图主要保存第一次匹配为成功的进程 queue<ready_node> wait_list;//等待的进程队列 int cmp(free_node a,free_node b){//定义排序的比较方式 if(a.len>b.len) return 1;//按内存长度从大到小排序 if(a.len==b.len&&a.start<b.start) return 1;//如果长度相同,承接网站前端按照首地址从小到大排序 return 0; } void Show(){//显示空闲区域表和已占用表的信息 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 printf("-----------------------\n"); printf("| 空闲链表的使用情况: |\n"); printf("-----------------------\n"); printf("---------------\n"); printf("| 首址 | 长度 |\n"); printf("---------------\n"); for(int i=0;i<free_list.size();i++){ printf("| %3d | %3d |\n",free_list[i].len); printf("---------------\n"); } printf("-------------------------\n"); printf("| 已占用链表的使用情况: |\n"); printf("-------------------------\n"); printf("----------------------------\n"); printf("|运行进程 | 首址 | 长度|\n"); printf("----------------------------\n"); for(int i=0;i<used_list.size();i++){ printf("| %3d | %3d | %3d |\n",used_list[i].start,&node.id,&node.size)!=EOF){ wait_list.push(node); //cout<<node.size<<endl; } } void Alloc(ready_node node){//动态分区分配函数 sort(free_list.begin(),cmp);//操作之前首先按首地址从小到大排序 //cout<<free_list.size()<<endl; free_node fnod; int ok=0;//表示是否匹配成功 vector<free_node>::iterator it;//定义迭代器 for(it=free_list.begin();it!=free_list.end();++it){ //cout<<(*it).start<<endl; if(((*it).len) >= node.size){ //记录已占用空间 fnod.len=node.size; fnod.start=(*it).start; fnod.id=node.id; used_list.push_back(fnod);//放入已占用区域表 (*it).start+=node.size; (*it).len-=node.size;//修改空闲区域表的信息 if((*it).len==0){//剩余空闲长度为0,移除这个空闲区域 free_list.erase(it); } ok=1;//已找到匹配 break; } } if(ok==0){//证明当前进程没有匹配成功,div切图排版则放入就绪队列 ready_list.push(node); } printf("进程%d申请进入内存网页切图制作,node.id,node.size); Show(); } void Free(ready_node node){//回收过程函数 //释放内存的过程中,div+css+js切图进程正常都会在内存中出现承接网站前端,这里就假设释放的进程全部合法 free_node fnod; vector<free_node>::iterator it;//定义迭代器 for(it=used_list.begin();it!=used_list.end();++it){ if(((*it).id) == node.id){//找到撤销进程 //回收空闲空间,页面div重构并放入空闲区域白哦psd切图html,此时不用记录进程号,psd切图html因为好没有进程占有空间 fnod.start=(*it).start; fnod.len=node.size; free_list.push_back(fnod);//放入空闲区域表 (*it).len-=node.size;//修改占用区域表的信息 if((*it).len==0){//撤销内存后web外包,移除这个空闲区域 used_list.erase(it); } break; } } printf("进程%d申请撤销网页切图制作,node.id,node.size); Show(); } void Oper(){//操作函数 ready_node node; while(!ready_list.empty()){//首先操作第一次未匹配的进程,div+css+js切图此队列中只有进入内存的进程承接网站前端, //只组要调用分配函数Alloc()即可,承接网站前端不用调用回收函数Free() node=ready_list.front();//取出队首元素 ready_list.pop();//出队 Alloc(node); } while(!wait_list.empty()){//操作等待数列psd切图html,有分配和回收两个过程 node=wait_list.front(); wait_list.pop(); if(node.flag==1){//申请进入内存的进程 Alloc(node); } else{//要撤出内存的进程 Free(node); } } } int main() { //重定向输入输出,承接网页制作对文件进行操作 freopen("input.txt",stdin); freopen("output11.txt",stdout); Init();//一定先进行初始化 Oper(); return 0; } 附录:

2)假设初始状态如下div+css+js切图,并有下列的请求序列;

作业7申请50KB

作业5申请140 KB

1.   设计目的

作业4申请200 KB

作业3申请100KB

了解动态分区分配中使用的数据结构和分配算法承接网站前端,并进一步加深对动态分区存储管理方式及其实现过程的理解.

作业3释放100 KB

1 1 130 2 1 60 3 1 100 2 0 60 4 1 200 3 0 100 1 0 130 5 1 140 6 1 60 7 1 50 6 0 60

2.   设计内容

作业2释放60KB

1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free().其中,承接网站前端空闲分区通过空闲分区链表来管理psd切图html,在进行内存分配时,psd切图html系统优先使用空闲区低端的空间.

作业2申请60KB

作业6申请60 KB

input.txt输入文件格式:

作业6释放60 KB

点击次数:19088
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日Asp.net的GridView控件实现单元格可编辑方便用户使用2014年01月29日js电信网通双线自动选择技巧2014年01月29日linux-rsync【编程语言】2015年04月27日分享精心挑选的12款优秀jQueryAjax分页插件和教程2014年01月29日JavaWeb-21JDBC(泛型,注解,Servlet3.0,Log4j) 【数据库】2015年04月08日Discuz!X2.5RC升级后xweibo微博插件修改办法2014年01月28日VBA第六课循环判断数据 【数据库】2015年05月06日算法学习-图表示【移动开发】2015年02月04日【题解】-航电OJ1013DigitalRoots 【架构设计】2015年02月28日HDU1548Astrangelift【架构设计】2015年05月18日CentOS6.x系统安装+网卡驱动安装(RealtekPCIeGBEFamilyControllerforlinux) 【云计算】2015年01月07日Git-删除本地目录的repository(本地仓库) 【移动开发】2015年06月17日uva10245TheClosestPairProblem(暴力+剪枝) 【编程语言】2015年03月09日自定义view之圆形进度条2015年08月31日UniquePaths 【数据库】2015年02月03日OC学习篇之---总结和学习目录【移动开发】2014年12月16日数据库调优教程(十)【精华章节】解决like’%str’时索引不被使用的4种方法 【编程语言】2015年04月13日java对象与json对象间的相互转换【综合】2015年06月29日struts2配置详解 【综合】2015年05月18日一个仿WindowsUI的htmltable,兼容IE和firefox2014年01月29日Js+XML操作2014年01月29日hdu1102&poj2421ConstructingRoads【编程语言】2015年01月26日赛门铁克确认2006年产品源码大面积泄露 ,,2016年07月24日简单文本编辑器L?afpad ,,2016年06月29日Unity3D游戏开发之从"复活"和"暂停恢复"谈游戏数据配置管理 【Web前端】2015年04月03日javascriptWindow及document对象详细整理2014年01月29日java变量默认值 【编程语言】2015年01月13日RussOlsen:我得到的最佳编程建议 ,,2016年07月24日【ASP】使用类,实现模块化2014年01月29日排序总结 【架构设计】2015年08月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)