内存管理的基本知识


内存管理的功能有:

  • 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。
  • 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。
  • 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
  • 存储保护:保证各道作业在各自的存储空间内运行,互不干扰。

一、逻辑地址和物理地址

1.基本概念

逻辑地址:CPU所生成的地址,一般由内部与编程使用,编译后总是从0地址开始的地址。列如编程中&a(取a的地址),取的就是逻辑地址。

物理地址:加载到内存地址的寄存器中的 地址,内存单元真正地址。进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位

内存保护:每个进程都应该受到保护,以免被其他进程有意或无意地进行干涉。因此该进程以外的其他进程中的程序不能未经授权地访问该进程的内存单元。当CPU调度程序选择进程执行时,派遣程序会初始化重定位寄存器和界地址寄存器。每一个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程的运行所影响。

2.地址转换

逻辑地址=段地址:偏移地址

物理地址=段地址*16+偏移地址

3、为什么会有这两种地址?

  逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观,例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。

二、内存分区

 内存管理最基本的操作就是由处理器把程序装入内存中执行。

1.固定分区

在系统生成阶段,内存被划分成了许多静态的分区,进程可以被装载到大于或等于自身大小的内存中,实现方式简单,只需要极小的操作系统开销便可以完成。 但由于有内部碎片,对内存的使用又不充分;活动中的进程最大数目是固定。

使用大小相等的固定分区有连个难点

  • 程序可能太大而不能放到一个分区中
  • 内存利用率低下

å¨è¿éæå¥å¾çæè¿°

2.动态分区

分区是动态创建的,因此使每个进程可以被装入到与自身大小等大的分区中,没有内部碎片的产生,可以充分的利用内存,但由于需要压缩外部碎片,处理器利用率低下。

动态分区的放置算法

最佳适配:选择与要求大小最接近的块

首次适配:从头开始扫描,选择大小足够的第一块可用块

下次适配:从上次放置的位置开始扫描,选择一块大小够用的可用块

其中首次适配算法最快也是最简单的。最佳适配反而是最差的。

å¨è¿éæå¥å¾çæè¿°

3.伙伴系统

 在伙伴系统中 可用内存块大小为 2^k个字   L<=k<=U

其中 2^L表示分配的最小尺寸,2^U表示分配的最大尺寸;通常2^U是提供可分配的整个内存的大小。

开始的时候,可以用于分配整个空间被看做是2^U的块。如果请求的大小s满足2^(U-1)<S<=2^U,则分配整个空间,否则,该快被分成两个大小相等的伙伴,大小均为2^(U-1)。如果有2^(U-2)<s<=2^(U-1),则分配给两个伙伴中的任意一个,否则其中一个伙伴又被分成两个。一直到产生大于或者等于s的最小的块,并分配该请求。

三、虚拟内存

  虚拟内存的中心思想是将物理主存扩大到便宜、大容量的磁盘上,即将磁盘空间看做主存空间的一部分。可以理解为是将书桌上的比较老的文件先暂时收到抽屉里,用空出来的地方来摊开新的文件。

在计算机中,体现在在内存容量不足时将不经常访问的内存空间中的数据写入硬盘,以增加“账面上”可用内存容量的手段。

原理:

    为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中

  当程序引用到不在物理内存中的页时(缺页中断),由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。

  从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。

2、虚拟内存的优缺点

【优点】:

  • 多次性,是指无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行。

  • 对换性,是指无需在作业运行时一直常驻内存,而是允许在作业的运行过程中,进行换进和换出。

  • 虚拟性,是指从逻辑上扩充内存的容量,使用户所看到的内存容量,远大于实际的内存容量

【缺点】:

  虚拟内存也有同样的缺点:硬盘的容量比内存大,但也只是相对的,速度却非常缓慢,【如果和硬盘之间的数据交换过于频繁,处理速度就会下降,表面上看起来就像卡住了一样,这种现象称为内存抖动】。

 虚拟内存的实现有以下两种方式:

  • 请求分页存储管理。

  • 请求分段存储管理

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值