页数:69页文件大小:403.8 KB来源: 计算机操作系统ppt课件
本课件从存储管理的五大功能入手,讲解内存分区与静态等长、动态异长两类分配方法,随后展开分页、分段与段页式存储管理方式,说明地址映射机构、快表与存储保护的实现要点。
(1)位示图(bit map)用一个bit代表一页状态,0:空闲,1:占用。01……..1………001第n-1页第n-2页第Pa页………第2页第1页第0页分配:按页号从小到大查位示图,找到为0的位改为1,返回页号。去配:把页号对应的bit置为0。
(bit map)定义如下:#define N 1024char bitmap[N] ;对任意页号Pa,对应数组bitmap[ ]的数组元素bitmap[K]的第几位?解:设Pa=8×K+R则Pa对应bitmap[K]的第R位。
(2)空闲页面表:页面个数首页面号…………4120………………占用120页121页122页123页占用……内存分配/去配:需修改空闲页面表。特点:可以分配连续页面。DMA要求
(3)空闲页面链:占用占用占用head空闲页面链结构分配/去配:调整链表。特点:节省空间。(不适合外存管理)
(1)最先适应算法(First Fit) :空闲区长度空闲区首址641283225625610240…………空闲区表空闲区表:首址递增排列;申请:取第一个可满足区域;优点:尽量使用低地址空间,高区保持大空闲区域。缺点:可能分割大空闲区。如申请32将分割第一个区域。
(2)下次适应算法(Next Fit) :空闲区长度空闲区首址641283225625610240…………空闲区表空闲区表:首址递增排列;申请:从上次分配空闲区域的下一个位置开始查找第一个可满足的区域;优点:减少查表时间开销;空闲区分布均匀。缺点:可能分割大空闲区。
(3)最佳适应算法(Best Fit) :空闲区长度空闲区首址322566412825610240…………空闲区表空闲区表:空闲区长度递增排列;申请:取最小可满足区域;优点:尽量使用小空闲区,保持大空闲区域。缺点:容易形成碎片fragment。如申请30将留下长度为2的空闲区。
(4)最坏适应算法(Worst Fit) :空闲区长度空闲区首址256102464128322560…………空闲区表空闲区表:空闲区长度递减排列。申请:取最大可满足区域。优点:防止形成碎片。缺点:分割大空闲区。
例: UNIX存储分配-First Fit(见13章p384-13.4.2 )最先适应算法,空闲区首址递增排列define CMAPSIZ 100define SMAPSIZ 100struct map//存储资源表结构{ char *m_size;char *m_addr;};struct map coremap[CMAPSIZ];//内存资源表struct map swapmap[SMAPSIZ];//外存资源表
int malloc (mp, size )//存储分配函数struct map *mp;{ register int a ;register struct map *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)//当前块=sizedo { bp ++;//do循环压缩size=0的存储表项(bp-1)-> m_addr = bp-> m_addr ;} while((bp-1)->m_size = bp-> m_size);return(a);//分配成功,返回分配存储块的首地址}return(0);//分配不成功,返回0}存储分配函数:mp=coremap内存分配swapmap外存分配
mfree (mp, size, aa)struct map *mp;{ register struct map *bp ; register int t , 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_addr ;(bp-1)->m_size = bp-> m_size ;}}存储释放算法:mp=coremap释放内存swapmap释放外存
}else//是存储表项的第一项或不与前项存储块相连{ if (a+size == bp->m_addr && bp->m_size)//与后项存储块相连?{ bp-> m_addr-= size;
(Compaction):移动占用区域,使所有空闲区域连成一片(开销很大)。20KB操作系统空间0 KB10KB空闲区域20 KB30KB进程p1空间30 KB10KB空闲区域60 KB20KB进程p2空间70 KB10KB空闲区域90 KB紧凑前20KB操作系统空间0 KB30KB进程p1空间20 KB20KB进程p2空间50 KB30KB空闲区域70 KB紧凑后思考:如何编写紧凑算法(程序)?
6.3.1单一连续区存储管理也叫单对界存储管理方式:(首地址,长度)限制一个进程只占有一个连续内存区域。1.基本原理(1)内存空间划分:动态异长;(2)进程空间划分:一个进程一个区域,逻辑地址0~L-1 ;(3)进程空间与内存空间对应关系(可以浮动) :0 :L-1 :b :b+L-1 :L…………进程空间内存空间
例[覆盖技术]:四遍扫描的编译程序符号表公共例程覆盖驱动程序覆盖区50 KB…………内存Pass130 KBPass250 KBPass425 KBPass340 KB
2i第0页0×2i2i第1页1×2i…………2i第k页k×2i…………2i第2n-i-1页(2n-i-1)×2i内存空间划分n位地址码=页框首址+页内地址=页框号×2i+页内地址=页内地址页框号i位n-i位物理地址
6.3.2页式存储管理⑵进程空间划分:静态等长,2i,称为一个逻辑页面。2i第0页0×2i2i第1页1×2i…………2i第k页k×2i…………2i第l-1页(l-1)×2i进程空间划分=逻辑页首址+页内地址=逻辑页号×2i+页内地址=页内地址逻辑页号i位n-i位逻辑地址
6.3.2页式存储管理⑶进程空间与内存空间对应关系:页面连续,页框可能不连续。第3页第2页第1页第0页进程空间……第79页第78页……第47页……第18页……内存空间
页表长度寄存器页表首址寄存器bl页框号……f……逻辑页号0…p…l-1进程标识pid……页表长度l页表首址b……页表进程控制块PCB页框号逻辑页号…………fp…………快表TLBdp页内地址页号逻辑地址df页内地址页框号物理地址页式存储管理地址映射快表未查到p
页表长度寄存器页表首址寄存器bl页框号……f……0逻辑页号l-1…p…页表进程控制块PCB页框号逻辑页号…………fp…………快表TLBdp页内地址页号逻辑地址df页内地址页框号物理地址Cmp p:lb+p页式存储管理地址映射fp6.3.2页式存储管理进程标识pid……页表长度l页表首址b
有效访问时间Effective Access Time : EAT6.3.2页式存储管理EAT =快表命中率×(快表访问时间+内存访问时间)+快表不中率×(快表访问时间+2×内存访问时间) ns例:快表命中率98%,快表访问时间20ns,内存一次访问时间100ns,则EAT =98%→(20+100)+2%→(20+200)= 122 ns
01102320……95102……309498……512010230102301023…………20……95……102……309……498……512……Outer-pagetablePage tableMemory外页表对应hole的表项没有对应的内页表,访问hole表项动态建立内页表二级页表
6.3.2页式存储管理采用二级页表结构时,逻辑地址由外层页号pi,外层页内地址pj,页内地址d三部分构成。若给定一个逻辑地址空间的地址为A,系统页面大小为L,页表项的长度为N,则pi, pj和d的计算公式如下:pi = int [ int [A/L] / N ]pj = int [A/L] mod Nd = A mod L对前述二级页表结构, L=212, N=210
反置页表工作原理:……<内存访问>……dppid逻辑地址ppid程序0f…df物理地址反置页表……………………df个页框d物理内存
6.3.2页式存储管理采用散列技术的反置页表地址映射逻辑地址dppid空闲冲突计数逻辑页号进程………...12ppid…………进程散列函数fdf物理地址采用散列技术的反置页表物理内存
140 KB100 KB130 KB60 KB20 KB50 KB0 KB内存空间划分……调用[X]段入口E......访问[DATA]段A单元……调用[Y]段入口F……主程序段: [main]段号=0050KB-1......……F: …………子程序段: [Y]段号=2030KB-1………E:…………子程序段: [X]段号=3040KB-1………A: …………子程序段: [DATA]段号=1030KB-1…进程空间
6.3.3段式存储管理⑶进程空间与内存空间对应关系进程P段[main]段号=0进程P段[data]段号=1进程P段[Y]段号=2进程P段[X]段号=3050KB-100030KB-140KB-130KB-1……………………………………………………120 KB390 KB480 KB810 KB50 KB30 KB30 KB40 KB120 KB220 KB60 KB300 KB
6.3.3段式存储管理⑷所需表目①段表:段长段首址段号50 KB120 KB030 KB390 KB130 KB480 KB240 KB810 KB3②空闲表:系统一个array of (addr,size)长度首地址120 KB0 KB220 KB170 KB60 KB420 KB300 KB510 KB
l’b’…………段号0…s…l-1进程标识pid……段表长度l段表首址b……段表进程控制块PCB段长段首址段号…………l’b’s…………快表TLB段式存储管理地址映射偏移段号逻辑地址dscmp物理地址b’+d+段表长度reg段表首址regbl若快表查不到s
l’b’…………段号0…s…l-1进程标识pid……段表长度l段表首址b……段表进程控制块PCB段长段首址段号…………l’b’s…………快表TLB段式存储管理地址映射l’b’s偏移段号逻辑地址dscmp物理地址b’+d+段表长度reg段表首址regbl+cmp
2.段的共享与保护⑴段的共享:不同进程的段号Spi和Spj对应同一个段的段首址和段长即可实现不同进程对段的共享。段长度段首址…………l’b’…………P1段表……si段号段长度段首址…………l’b’…………P2段表……sj段号……共享段……b’:l’内存空间
6.3.3段式存储管理⑵段的保护:不同进程对共享段的访问权限不同,需要在段表中加上访问权限。访问权限段长度段首址EWR…………………………101l’b’…………………………段表的改进……s段号访问权限段长度段首址段号EWR…………………………101l’b’s…………………………快表的改进
6.3.3段式存储管理共享段表:系统1个,记录所有共享段。main1子程序X子程序Y……datamain2data子程序Y子程序X首址段长度P10段号P21234首址段长度0段号123段表其它段首址段长度共享计数段名2X2Y2data共享段表●●●main1XDataYmain2●●●主存
段式管理页式管理二维地址空间一维地址空间段是逻辑单位页是物理单位段的大小可变页的大小固定对用户可见对用户透明有碎片无碎片便于共享、保护通常不共享页式管理和段式管理的比较:
1.基本原理⑴内存空间划分(同页式)静态等长, 2i,称为一页框;物理地址== (f,d)。页内地址页框号n-i位i位⑵进程空间划分一个进程→若干个逻辑段;一个逻辑段→若干个逻辑页面;逻辑地址==(s,p,d)。段号页内地址逻辑页号i位j位n-i-j位
⑶进程空间与内存空间对应关系6.3.4段页式存储管理第0页第1页第2页第0页第1页第2页第0页第1页第0段第1段第2段……第11页第12页……第28页第29页……第84页……第90页……第96页……第99页……进程空间内存空间
l’b’…………段号0…s…l-1进程标识pid……段表长度l段表首址b……段表进程控制块PCB页框号页号段号…………fps…………快表TLB段页式存储管理地址映射段表长度reg段表首址regbldps偏移段号逻辑地址页号df页框号……f……逻辑页号0…p…l’-1页表物理地址偏移页框号若快表查不到(s,p)
l’b’…………段号0…s…l-1进程标识pid……段表长度l段表首址b……段表进程控制块PCB页框号页号段号…………fps…………快表TLB段页式存储管理地址映射fps段表长度reg段表首址regbldps偏移段号逻辑地址页号df页框号……f……逻辑页号0…p…l’-1页表cmp+cmp+物理地址偏移页框号
2.段的共享与保护段页式存储管理的段的共享与保护与段式存储管理类似。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}