欢迎来到天天文库
浏览记录
ID:27104914
大小:492.00 KB
页数:61页
时间:2018-12-01
《存储管理存储管理功能内存资源管理存储管理方式外存空间管理虚拟存储系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章存储管理存储管理功能内存资源管理存储管理方式外存空间管理虚拟存储系统6.1存储管理功能存储分配和去配分配去配对象内存、外存(相同方法)分配去配时刻进程创建、撤销、交换、长度变化(栈溢出,execl)存储共享目的:节省内存、相互通讯内容:代码、数据存储保护防止地址越界防止操作越权6.1存储管理功能(Cont.)存储扩充内存、外存结合,虚拟存储体系速度接近内存,容量相当外存地址映射逻辑地址=>物理地址硬件支持基址寄存器(base)、限长寄存器(limit)、快表;使用上述寄存器完成地址映射过程;不能正常完成地址映射时产生中断。6.2内存资源管理6.2.1内存分区分区时刻静态分区:系统初
2、始化时分;动态分区:申请时分。分区大小等长分区:2i异长分区:依程序、程序单位、对象大小。通常作法静态+等长(页式、段页式)动态+异长(段式、界地址)6.2.2内存分配静态等长分区的分配字位映象图空闲页面表空闲页面链动态异长分区的分配最先适应(FirstFit)最佳适应(BestFit)最坏适应(WorstFit)位示图(bitmap)100…1...10第0页第2页第1页第k页第n页......分配:自头寻找第一个为0的位,改为1,返回页号;去配:页号对应的位(bit)置为0。用一个bit代表一页状态,0表空闲,1表占用。(多单元)空闲页面表首页号空页数............1204
3、特点:可以分配连续页面。DMA要求占用占用120页121页122页123页......空闲页面链占用占用占用Head:优点:节省空间。(不适合管理外存)动态异长分区的分配空闲区首址空闲区长度............25001500数据结构:Criteria:尽量使空闲区域连续。初始时一个连续空闲区。长度=0为表尾。最先适应算法(FirstFit)空闲区首址空闲区长度128641024256322560......空闲区:首址递增排列;申请:取第一个可满足区域;优点:尽量使用低地址空间,高区保持大空闲区域。缺点:可能分割大空闲区。Eg.申请32将分割第一个区域。最佳适应算法(BestFit
4、)空闲区:首址递增排列;申请:取最小可满足区域;优点:尽量使用小空闲区,保持大空闲区。缺点:可能形成碎片(fragment)。Eg.申请30将留下长度为2的空闲区。空闲区首址空闲区长度128641024256322560......最坏适应算法(WorstFit)空闲区:首址递增排列;申请:取最大可满足区域;优点:防止形成碎片。缺点:分割大空闲区域。空闲区首址空闲区长度128641024256322560......UNIX存储分配--FFstructmap{char*m_size;char*m_addr;};structmapcoremap[CMAPSIZ];structmapswap
5、map[SMAPSIZ];defineCMAPSIZ100defineSMAPSIZ100malloc(mp,size)structmap,*mp;{registerinta;registerstructmap*bp;for(bp=mp;bp->m_size;bp++){if(bp->m_size>=size){a=bp->m_addr;bp->m_addr=+size;if((bp->m_size=-size)==0)do{bp++;(bp-1)->m_addr=bp->m_addr;}while((bp-1)->m_size=bp->m_size);return(a);}}retur
6、n(0);}mfree(mp,size,aa)structmap*map;{registerstructmapbp;registerintt,a;a=aa;for(bp=mp;bp->m_addr<=a&&bp->m_size!=0;bp++);if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_size==a){//与前合并(bp-1)->m_size=+size;if(a+size==bp->m_addr){//前后合并(bp-1)->m_size=+bp->m_size;while(bp->m_size){bp++;(bp-1)->m_addr=bp->m_add
7、r;(bp-1)->m_size=bp->m_size;}}}else{if(a+size==bp->m_addr&&bp->m_size){//与后合并bp->m_addr=-size;bp->m_size=+size;}elseif(size)do{//无合并t=bp->m_addr;bp->m_addr=a;a=t;//a与bp->m_addr交换t=bp->m_size;bp->m_size=size;bp++;//size
此文档下载收益归作者所有