动态分区的特点:
分区的个数和大小可变
存在内存碎片:动态分区,就是动态的判断某一块的内存空间能否存储,不会找到刚刚好的,一般都是能放进去就放了,其他剩下的区域,又交给其他程序进行存储,然后几轮下来,就会存在很小的空间,无法利用,这就是内存的碎片
虚拟内存管理的目标
使得大的程序能在较小的内存中运行
使得多个程序能在较小的内存中运行
使得多个程序并发运行时地址不冲突
使得内存利用效率高
虚拟内存管理实现的思路
在程序运行时,只把当前必要的很小一部分代码和数据装入内存中。其余代码和数据需要时再装入。不在运行的代码和数据及时从内存中删除
页式虚拟存储管理
将程序的逻辑地址空间(有的又叫做虚拟地址空间)划分为固定大小的页(page),而物理内存划分为同样大小的页框(pageframe)。程序加载时,可将任意一页放人内存中任意一个页框,这些页框不必连续,从而实现了离散分配。也就是把内存等分成N份,存放运行的程序时,按分成的快放置即可。
把进程空间和内存开年化成等大小的小片,小片的典型大小:1k,2k或4k
进程的小片——页(虚拟页或页面)
内存的小片——页框(物理页)
内存以页框为单位分配使用
进程以页为单位装入内存
页式虚拟存储管理:把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,然后,根据执行行为,动态调入不在主存的页,同时进行必要的页面调出,是现代OS的主流存储管理技术。
当主存空间已满而又需要装入新页时,页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去。选择淘汰页的工作称为页面调度 ,选择淘汰页的算法称为页面调度算法,页面调度算法设计不当,会出现刚被淘汰的页面立即又要调入,并如此反复,这种现象称为抖动或颠簸。
最佳页面替换算法 、 先进先出页面调度算法 、 最近最少用页面调度算法
段式存储管理
把进程按逻辑意义划分为多个段,每段有段名,长度不定。进程由多段组成
段式程序设计:把一个程序设计成多个段(代码段、数据段、堆栈段等),用户可以自己应用段覆盖技术扩充内存空间使用量。每一段都可以从“0”开始编址,段内的地址是连续的
段式内存管理系统的内存分配
以段为单位装入,每段分配连续的内存,段和段不要求相邻
段式虚拟存储管理:把进程的所有分段都存放在辅存中,进程运行时先把当前需要的一段或几段装入主存,在执行过程中访问到不在主存的段时再把它们动态装入
段式系统的缺点:
段需要连续的存储空间
段的最大尺寸受到内存大小的限制
段与页的区别:
段长可变,页面大小固定
段的划分有意义,页面无意义
段方便共享,页面不方便共享
段用户可见,页面用户不可见
段偏移有溢出,页偏移就下一页无溢出
段页式存储系统
在段式存储中结合页式存储管理技术——在段中划分页面