273-内存管理的需求

内存管理的需求

对内存管理提出来了5点需求:
重定位,保护,共享,逻辑组织,物理组织

重定位

在多道程序设计系统中,可用的内存空间通常被多个进程共享。
通常情况下,程序员并不能事先知道在某个程序执行期间会有其他哪些程序驻留在内存中。此外还希望通过提供一个巨大的就绪进程池,能够把活动进程换入或者换出内存,以便使处理器的利用率最大化。一旦程序被换出到磁盘,当下一次被换入时,如果必须放在和被换出前相同的内存区域,那么这将会是一个很大的限制。为了避免这种限制,我们需要把进程重定位到内存的不同区域。
因此,我们事先不知道程序将会被放置到哪个区域,并且我们需要允许程序通过交换技术在内存中移动。这关系到一些与寻址相关的技术问题。
如下图所示
该图描述了一个进程映像。为了简单起见,假设该进程映像占据了内存中的一段相邻的区域。显然,操作系统需要知道进程控制信息和执行栈的位置,以及该进程开始执行程序的入口点
在这里插入图片描述

由于操作系统管理内存并负责把进程放入内存,因此可以很容易地访问到这些地址。此外,处理器必须处理程序内部的内存访问跳转指令包含下一步将要执行的指令的地址,数据访问指令包含被访问数据的字节或字的地址。处理器硬件和操作系统软件必须能够通过某种方式把程序代码中的内存访问转换成实际的物理内存地址,并反映程序在内存中的当前位置。

保护

每个进程都应该受到保护,以免被其他进程有意或者无意地干涉。
因此,该进程以外的其他进程中的程序不能未经授权地访问(进行读操作或写操作)该进程的内存单元。在某种意义上,要满足重定位的需求增加了满足保护需求的难度。由于程序在内存中的位置是不可预测的,因而在编译时不可能检查绝对地址来确保保护。并且大多数程序设计语言允许在运行时进行地址的动态计算(例如,通过计算数组下标或者数据结构中的指针)。因此,必须在运行时检查进程产生的所有内存访问,以确保它们只访问了分配给该进程的存储空间。现在已经有了既支持重定位也支持保护需求的机制了。
通常,用户进程不能访问操作系统的任何部分,不论是程序还是数据。并且,一个进程中的程序通常不能跳转到另一个进程中的指令 。如果没有特别的许可,一个进程中的程序不能访问其他进程的数据区。处理器必须能够在执行时终止这样的指令。
注意!!!内存保护的需求必须由处理器(硬件)来满足,而不是由操作系统(软件)来满足!!!
这是因为操作系统不能预测程序可能产生的所有内存访问;即使可以预测,提前审查每个进程中可能存在的内存违法访问也是非常费时间的。因此,只能在指令访问内存时来判断这个内存访问是否违法(存取数据或跳转)。为实现这一点,处理器硬件必须具有这个能力。

共享

任何保护机制都必须具有一定的灵活性,以允许多个进程访问内存的同一部分。
例如,如果多个进程正在执行同一个程序,则允许每个进程访问该程序的同一个副本要比让每个进程有自己单独的副本更有优势。
合作完成同一个任务的进程可能需要共享访问相同的数据结构。因此内存管理系统必须允许对内存共享区域进行受控访问,而不会损害基本的保护。我们将会看到用于支持重定位的机制也支持共享。

逻辑组织

计算机系统中的内存总是被组织成线性的(或者一维的)地址空间,并且地址空间是由一系列字节或字组成的
外部存储器(简称外存)在物理层上也是按类似方式组织的。尽管这种组织方式类似于实际的机器硬件,但它并不符合程序构造的典型方法。大多数程序被组织成模块,某些模块是不可修改的(只读、只执行),某些模块包含可以修改的数据。如果操作系统和计算机硬件能够有效地处理以某种模块的形式组织的用户程序和数据,则会带来很多好处
1、可以独立地编写和编译模块,系统在运行时解析从一个模块到其他模块的所有引用。
2、通过适度的额外开销,可以给不同的模块以不同的保护级别(只读、只执行)。
3、可以引入某种机制,使得模块可以被多个进程共享。在模块级提供共享的优点在于它符合用户看待问题的方式,因此用户也可以很容易地指定需要的共享。

最易于满足这些需求的工具是分段

物理组织

计算机存储器至少要被组织成两级,称为内存和外存。
内存提供快速的访问,成本也相对比较高。并且内存是易失性的,也就是说,它不能提供永久存储。外存比内存慢而且便宜,它通常是非易失性的。因此,大容量的外存可以用于长期存储程序和数据,而较小的内存则用于保护当前使用的程序和数据。
在这种两级方案中,系统主要关注的是内存和外存之间信息流的组织。可以让程序员组织这个信息流,但是由于以下两方面的原因,这种方式是不切实际的,也是不合乎要求的:
1、可供程序和数据使用的内存可能不足。在这种情况下,程序员必须采用覆盖技术来组织程序和数据。不同的模块被分配到内存中同一块区域,主程序负责在需要时换入或者换出模块。即使有编译工具的帮助,覆盖技术的实现仍然非常浪费程序员的时间。
2、在多道程序设计环境中,程序员在编写代码时并不能知道可用空间的大小及位置。
显然,在两级存储器间移动信息的任务应该是一种系统责任,而该任务恰恰就是存储管理的本质所在。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值