分页--内存管理

分页概念 :逻辑空间分页,物理空间分块,页与块同样大,页连续块离散,用页号查页表,由硬件做转换,页面和内存块大小一般选为2的若干次幂(便于管理)
页表作用:实现从页号到物理地址的映射

请求分页的基本思想
1.请求分页=分页+请求
2.请求分页 提供虚拟存储器
3.页表项中的状态位指示该页面是否在内存,若不在,则产生一个 缺页中断

页面置换:把一个页面从内存调换到磁盘的对换区中
抖动:在具有虚存的计算机中,由于频繁的调页活动使访问磁盘的次数过多而引起的系统效率降低的一种现象
页面走向:

常用的页面置换算法:
先进先出法 :(置换次数比较多)
最佳置换法(OPT) :选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现)
最近最少使用置换法(LRU) :当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以淘汰

最近未使用置换法(NUR):是LRU算法的近似方法,选择在最近一段时间里未被访问过的页面予以淘汰


解释1:

CPU有用户模式和核心模式。普通程序一般运行在CPU用户模式下,如果普通程序在访问硬件的时候需要转成核心模式(核心模式就是控制程序访问硬件的,如果任何一个程序能随便访问,控制硬件,那病毒还怎么杀,是吧。) 

也就是这样,普通程序通过了可以访问,修改,写入数据到内存,但是普通程序不去做自己的事,反而去访问修改其他内存怎么办?要知道操作系统也是在内存中。所以就出现了MMU,这个MMU也就是内存管理单元,一般操作系统都需要CPU内部的MMU单元(嵌入式系统除外)。 

MMU是物理地址与虚拟地址互相转换的单元,有些程序不会知道自己需要多大的内存,或许是1K,或许是1G,这个就需要操作系统系统的内存管理程序来,程序申请内存,内存管理程序就计算大概需要多少,那怎么分?要求多少分多少?不可能,如果是用多少那很难算的,因为一个程序结束了还要把内存回收,这样一来,内存分配效率会越来越低,所以要求把内存变成一个块一个块的。MMU分页有1K、4K、64K、2M、4M。一个页就好比一个块。比如MMU默认4K,一个程序要125K内存,内存管理程序就干脆分它32个块。内存回收时就简单了。 

解释2:

假设内存是连续分配的(也就是程序在物理内存上是连续的) 

1.进程A进来,向os申请了200的内存空间,于是os把0~199分配给A 
2.进程B进来,向os申请了5的内存空间,os把200~204分配给它 
3.进程C进来,向os申请了100的内存空间,os把205~304分配给它 
4.这个时候进程B运行完了,把200~204还给os 

但是很长时间以后,只要系统中的出现的进程的大小>5的话,200~204这段空间都不会被分配出去(只要A和C不退出)。 

过了一段更长的时间,内存中就会出现许许多多200~204这样不能被利用的碎片…… 

而分页机制让程序可以在逻辑上连续、物理上离散。也就是说在一段连续的物理内存上,可能0~4(这个值取决于页面的大小)属于A,而5~9属于B,10~14属于C,从而保证任何一个“内存片段”都可以被分配出去。 


解释3:

一个军长直接指挥一万名士兵会很低效,而如果他手下分成几个师,师分成团,营,连,排,班就容易管理很多。 
计算机系统也一样,很多时候要根据效率,成本等因素进行设计折中。

你可能感兴趣的:(C语言)