内存管理、分段、分页

内存管理

为什么要有内存管理

  多道程序操作系统中,进程的并发执行依赖于CPU调度。CPU能访问的存储器只有内存(处理器中的)寄存器(机器指令可以用内存地址作为参数)。
  寄存器价格昂贵且存储空间小,因此进程执行的指令以及指令使用的数据主要还是保存在内存上。(如果这些数据不在内存中,CPU在使用前也需要将数据移到内存中)。
  由上可见,CPU要执行的进程(指令和数据)需要存储在内存中,(而内存的空间也是有限), 那么如果进行内存的管理就是一个问题了。

如何进行内存管理

  要让CPU执行的进程保存在内存中,其实有两个内存管理的方向

  • 1. 交换: 在进程要执行时(占有CPU)再移入内存,内存中的进程不在运行时就移出内存。 由于交换(进程的滚入和滚出)有较大的时间开销,因而标准的交换应用并不广泛。
  • 2. 在内存中保存多个进程: 现代系统大多会在内存中保存多个进程。

      我们知道操作系统本身保存在内核中,进行内存管理要保证用户进程不能访问内核空间。另外,不同进程之间也不能互相访问对方的内存空间,以免造成不合法的访问。 因此,每个进程都应该有自己独立的内存空间
      为了保证每个进程由自己独立的内存空间,要为每个进程分配一块内存空间,各个进程只能访问分配给自己的内存空间。

地址绑定

  进程在调入CPU运行时,系统会为其分配内存空间。进程在执行时,需要通过内存地址访问其要使用的数据。然而,我们并不知道系统为进程分配的内存地址空间是那一段,也就是说在程序运行之前,我们并不知道数据所保存的物理地址。 这样的话,程序如何使用自己内存空间的数据呢。 系统设计人员提出了逻辑地址地址绑定的概念。
  地址绑定的原理其实就是不再使用绝对物理地址, 而是以系统分配给进程的起始地址作为基地址,然后通过相对地址(逻辑地址)来访问数据。 这样在程序执行时,系统再将逻辑地址根据绑定的映射关系转化物理地址来访问内存了。

连续内存的分配

  CPU能并发执行多个进程,操作系统要为这些进程分配内核空间。进程执行结束后,操作系统需要回收内存空间。各个进程需要的空间大小不一致,如果要为每个进程分配连续的内存空间,那么就会产生许多内存浪费(碎片)。即每个空闲的空间都不足以保存要执行的进程,但是有许多比该进程所需空间小的内存,(这些内存的总和可能远大于要执行的进程所需的内存空间)。
  可以看出连续内存的分配有很大的局限性。(尽管可以通过算法进行一定的优化,但仍然不能满足需求)。因此,为了提高内存空间的利用率,更好的方式就是支持给进程分配物理地址不连续的内存空间。 分页和分段是两种互补的(可合并的)用于分配不连续物理地址的内存空间的方法。

分页

  分页的原理是,把进程的逻辑内存空间划分为许多个固定长度的小片(称之为页、page)。对应的,物理内存空间也分为许多个固定长度的小部分(称为帧 frame)。 每个页对应一个帧(帧不需要连续)。 这样,再内存管理时,一个进程最多也就产生最后一页的一部分的空间浪费。几乎不会到时大的碎片(空间开销)。
页表:
  分页对内存管理的优化,最关键的就是使得分配给一个进程的内存不需要连续了,而是分配给进程一些不连续的帧。 既然如此,我们就需要为每个进程管理一张页表,用于告诉进程它的页分别对应到物理内存中的哪些帧。

分段

  分段的基本思想是:将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

分页与分段的主要区别

分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
 

小结

内存管理其实就是管理如何在内存中存储进程的信息。

  • 我们可以在内存中保存一个进程,也可以保存多个进程。 如果内存中,保存一个进程。那么就需要在另一进程要执行时,将该进程交换进内存。这显然要产生很多(进程滚入、滚出的)开销。 因此 标准的交换 已经很少被用到。 (在虚拟内存的管理中,会发现一些改进的交换有了很广泛的应用。)
  • 如果在内存中存储多个进程,那么进程的地址空间就不是从0地址开始了,而又可能发生变化。(不确定进程滚入时,进程的基地址)。这就有了地址绑定和逻辑地址的概念。
  • 多个进程如何在内存中存储呢?连续存储 开起来会产生很多碎片。 而分页和分段则是优化内存管理的手段。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值