内存管理
Posted yuanzhijing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存管理相关的知识,希望对你有一定的参考价值。
操作系统对内存的划分和动态分配,就是内存管理的概念。
内存管理的功能有:
1)内存空间的分配与回收,包括内存的管理和共享。
2)地址转换,把逻辑地址转换成相应的物理地址。
3)内存空间的扩充,利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
4)存储保护,保证各道作业在各自的存储空间内运行,互不干扰。
逻辑地址空间与物理地址空间:
编译后,每个目标模块都是从0号单元开始编址,称为该目标模块的相对地址(或逻辑地址)。当链接程序将各个模块连接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地地址构成统一的从0号单元开始编址的逻辑地址空间。
物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址来存取主存。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。
内存分配管理方式:
内存分配管理方式⎧⎩⎨⎪⎪⎪⎪⎪⎪连续分配(主要包括单一连续分配、固定分区分配和动态分区分配)非连续分配⎧⎩⎨⎪⎪分段存储分页存储基本分页存储管理请求分页存储管理
连续分配管理方式:是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。
非连续分配管理方式:允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为 分页存储管理方式和 分段存储管理方式。分页存储管理方式中,又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为 基本分页存储管理方式和 请求分页存储管理方式。
1. 基本分页存储管理方式:
固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就是引入了分页的思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
分页的方法从形式上看,像分区相等的固定分区技术,分页管理不会产生外部碎片。但它又有本质的不同点:块的大小相对分区要小很多,而且进程也按照块进行划分,进程运行时按块申请主存可用空间并执行。这样,进程只会在为最后一个不完整的块申请一个主存块空间时,才产生主存碎片,所以尽管会产生内部碎片,但是这种碎片相对于进程来说也是很小的,每个进程平均只产生半个块大小的内部碎片(也称页内碎片)。
分页存储的几个基本概念:
1)页面和页面大小。进程中块称为页(Page),内存中的块称为页框(Page Frame, 或页帧)。外存也以同样的单位进行划分,称为块(Block)。进程在执行时需要申请主存空间,就是要为每个页面分配主存中的可用页框,这就产生了页和页框的一一对应。为方便地址转换,页面大小应是2的整数幂,同时页面大小应该适中,考虑到空间效率和时间效率的权衡。如果页面太小,会使进程的页面数过多,这样页表就过长,占用大量内存,而且也会增加硬件地址转换的开销,降低页面换入\\换出的效率;页面过大又会使页面内碎片增大,降低内存的利用率。
2)地址结构。地址长度为32位,其中0~11位为页内地址,即每页大小为4KB;12~31位为页号,地址空间最多允许有
220
页。分页存储管理的逻辑地址结构如下图所示:
31 …… 12 | 11 …… 0 |
---|---|
页号P | 页内偏移量M |
3)页表。为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般放在内存中。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号,所以页表的作用是实现从页号到物理块号的地址映射。
2. 基本分段存储管理方式:
段式管理方式按照用户进程中的自然段划分逻辑空间,其逻辑地址由段号S与段内偏移量W两部分组成。
31 …… 16 | 15 …… 0 |
---|---|
段号S | 段内偏移量W |
在上图中,段号为16位,段内偏移量为16位,则一个作业最多可有 216=65536 个段,最大段长为64KB。
分页和分段的主要区别:
(1) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2) 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
3. 段页式管理方式:
页式存储管理能有效地提高内存利用率,而分段存储管理能反应程序的逻辑结构并有利于段的共享。将这两种存储管理方法结合起来,就形成了段页式存储管理方式。
在段页式系统中,作业的地址空间首先被分成若干逻辑段,每段都有自己的段号,然后再将每一段分成若干大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干和页面大小相同的存储块,对内存的分配以存储块为单位。
在段页式系统中,作业的逻辑地址分为三部分:段号,页号和页内偏移量。为了实现地址转换,系统为每个进程建立一张段表,而每个分段有一张页表。段表表项中至少包括段号、页表长度和页表起始地址,页表表项中至少包括页号和块号。此外,系统中还应有一个段表寄存器,指出作业的段表起始地址和段表长度。
在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。
4. 虚拟内存管理:
虚拟内存的实现有以下三种方式:
1)请求分页存储管理。
2)请求分段存储管理。
3)请求段页式存储管理。
不管哪种方式,都一定要有硬件支持,一般需要的支持有以下几个方面:
1)一定容量的内存和外存。
2)页表机制(或段表机制),作为主要的数据结构。
3)中断机构,当用户程序要访问的部分尚未调入内存,则产生中断。
4)地址变换机构,逻辑地址到物理地址的变换。
为了能够同时获得段式虚拟存储器在程序模块化方面的优点和页式虚拟存储器在管理主存和辅助物理空间方面的优点,把两种虚拟存储器结合起来就成为段页式虚拟存储器。其基本思想是对用户原来编写程序的虚拟存储空间采用分段的方法管理,而对主存储器的物理空间采用分页的方法管理。段页式虚拟存储器一方面具有段式虚拟存储器的主要优点,例如,用户程序可以模块化编写,程序段的共享和信息的保护都比较方便,程序可以在执行时再动态链接等。另一方面也具有页式虚拟存储器的主要优点,例如,主存储器的利用率比较高,对辅助存储器的管理比较容易等。
请求分页管理方式:
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟器的方法。常见的置换算法有以下三种:最佳置换算法(OPT)、先进先出(FIFO)页面置换算法、最近最久未使用方法(LRU)置换算法。
以上是关于内存管理的主要内容,如果未能解决你的问题,请参考以下文章