考虑一种情况,如果需要运行一个程序,按照之前学习,应该是将该进程全部装入内存中,但是,如果进程所占内存过大,内存不够使用,怎么办?使用虚拟内存。
虚拟内存:每个程序拥有自己的地址空间,这个空间被分割成多块,每一块称作一页,或者页面,每一页有连续的地址范围。这些页被映射到物理地址空间中。如果运行程序时,没有在内存中找到该页,由操作系统负责将缺失的部分装入物理内存,并重新执行。
分页程序产生的地址被称为虚拟地址,程序运行时,使用虚拟地址通过mmu映射到物理地址。
虚拟内存对应的物理单元被称为页框。
使用分页时,虚拟地址空间被分为固定大小的页面。
虚拟地址映射过程
通过进程给定的虚拟地址,将虚拟地址送给mmu,(假定虚拟地址是16位)mmu将地址前四位和后十二位进行分割,前四位在mmu中进行虚拟地址的查找,并将虚拟地址映射到物理地址,后十二位是偏移量,通过mmu将前四位虚拟地址映射后,将映射后的前四位地址和后十二位的地址进行拼接,得到的就是物理地址。
快表
当内存大,每个页面小时,就会导致页表项多,此时,如果在mmu中查找页面,就会更消耗时间。解决方案是使用转换检测缓冲区,将最近一些使用的页面映射关系进行缓存。可以更快的找到并映射。
页面置换算法有时虚拟内存大于实际内存,所以进程有时会遇到缺页,操作系统会将页面从磁盘调入内存中,但是既然有调入磁盘的页面,一般就会有被覆盖的页面。所以出现了页面置换算法。
最优页面置换算法
最优页面置换算法规定应该置换标记最大的页面。如果一个页面在800万条指令内不会被使用,另一个页面在600万条指令内不会被使用,则置换前一个页面。
最近未使用页面置换算法
将一个页面增加两个标记,一个R标记,一个M标记,当被读时,R标记为1,当被写时,M被标记为1,所以有四种组合方式,最近未使用算法随机的从编号较小的页面中随机淘汰一个。也就是说淘汰一个没有被访问已修改的页面,比淘汰一个频繁使用的干净页面好。
先进先出页面置换算法
当发生缺页中断时,淘汰表头的页面,并添加一个页面在表尾。
第二次机会页面置换算法
在表中从头开始查找,检查最老页面的R位,如果R位为0,则该页面既早又没有被使用则替换该页面。
时钟页面置换算法
第二次机会页面置换算法要经常移动页面。所以使用环形链表,表针指向最老的页面,如果该页面的R位为0,则淘汰该页面,如果该页面R位为1,则表针前移一个位。
最近最少使用页面置换算法
在缺页中断发生时,置换未使用时间最长的页面。每执行一条指令所对应的页面加1,当置换页面时,找到值最小的页面。
分段分段与分页不同的是,分页中,每一页的大小是相同的,并且是一维的,但是在分段中,每段大小不同,是二维的。



