内存管理

本文为博主原创文章,未经博主允许不得转载 http://www.cnblogs.com/kiplove/p/6759538.html

一、内存的分配方式——分页与分段

1、分页管理

通过将主存划分为大小相同且固定的块(较小),作为主存的基本单位,每个进程也以块作为单位进行划分,进程在执行中,以块为单位逐个申请主存中的块空间的技术。分页管理不会产生外部碎片,但可能产生内部碎片,平均下来一个进程又半页的内部碎片。 

页面:虚拟内存空间按照固定大小划分的页面称为页面

页框:内存中对应(页面)的块成为页框

页表:为了便于内存中找到进程的每个页面对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号。也就是页面与页框的对应关系表,页面由页表项组成。针对大内存,可以采用多级页表,获得较小页表的数量。

页表项:页表项主要由页号和物理内存的块号组成,它分页存储的地址结构页内偏移量共同组成物理地址。

快表(TLB):运用高速缓冲存储器存放当前访问过若干页表项(大小不变),加速地址变换的过程。不使用TLB时,每次取数据都需要两次访问内存,即查页表获得物理地址和取数据;使用了TLB只要访问一次内存和一次TLB。

2、分段管理

采用分页内存管理有一个不可避免的问题:用户视角的内存和实际内存的分离。采用分段管理按照用户进程中的自然段划分逻辑空间更符合用户的实际需求,分段要求段内连续,段外不要求连续。

段表:每个进程都有一张逻辑空间与内存空间映射的段表,每一个段表项对应进程的一个段,段表项记录该段在内存中的起始位置的段的长度。

3、段页式管理

分段存储可以反应程序逻辑结构并有利于段的共享,分页管理有利于提高内存利用率,结合两种管理,将进程地址空间划分若干个逻辑段,每一段划分为若干个大小固定的页。

二、虚拟内存

1、局部性原理

局部性原理体现在两个方面:

时间的局部性:如果程序中某条指令(数据访问)一旦执行,不久以后可能会再次执行(访问),这主要由于程序中存在大量的循环操作。

空间的局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元可能也将被访问,这主要由于指令都属顺序存放,运行的,数据也一般以数组、表等形式存储。

虚拟内存技术就是运用的局部性原理,建立了内存—外存的两级存储器结构。在程序装入时,可以将一部分装入内存,其余部分在外存,在执行过程中,当访问的信息不在内存中时,再把需要的调入内存,继续执行程序,同时把暂时不用的内容替换到外存中。

2、虚拟内存的实现技术

  请求分页管理方式、请求分段管理、请求段页式管理

3、常见页面置换算法

  最佳置换算法(OPT)

  先进先出页面置换算法(FIFO)

  最近最久未使用置换算法(LRU)

  时钟置换算法(CLOCK、NRU)

4、页面分配策略

  固定分配局部置换:为每个进程分配一定的数目的物理块,在整个运行期不变,发生缺页,则选择内存的页面置换需要的页面;

  可变分配全局置换:为每一个进程分配一定数目的物理块,操作系统自身保持一个空闲物理块队列,当发生缺页时,系统从空闲队列中取出一个物理块分配给进程;

  可变分配局部置换:为每一个进程分配一定数目的物理块,发生缺页时,只允许从该进程内存中选一页置换,如果进程频繁缺页,系统再为其分配若干个物理块,直至缺页率趋于适当水平,反之,则减少分配给该进程的物理块。

原文地址:https://www.cnblogs.com/kiplove/p/6759538.html