在诞生操作系统以前,对内存的使用常采用无管理模式,这是最简单的内存使用方式。内存不划分系统区和用户区,用户程序对整个内存空间及整个计算机有着完整的控制。其优点在于:纯硬件启动装入,无其它软件支持,并提供最大的灵活性,用户可以采用任何所希望的内存控制方式。其缺点在于:没有提供任何便利性服务,用户必须整体考虑,必须考虑物理细节,有时还需要采用覆盖、动态装入等手段来缓解内存容量不足等问题。本章主要讨论操作系统中对内存的基本管理。
$4.1 内 存管理概述
一、相关的基本概念
1 、局部性原理
实验证明,在一个进程的执行过程中,在一段时间内,大部分代码、数据并不经常被访问,即 CPU 总是集中地访问其中某一部分,而不是随机地对所有部分具有平均访问概率。这种现象称之为局部性原理。与 CPU 访问该局部片段内容的 次数 相比,该该局部片段的 变动速度 是相当缓慢的,这就使得对存储进行高效的管理成为可能。这样,存储管理系统把进程中那些不经常被访问的内容放入外存中,待需要访问它们时再将它们调入内存。
2、虚拟存储器
由于局部性原理的作用,对于部分在内存部分在外存的情形,我们应该如何安排它们的地址呢?
(1) 编址方法
显然,对于不同的程序段应具有不同的地址。目前,有两种方法安排编译后的目标代码的地址:
① 物理地址法: 按照物理存储器中的位置赋予实际物理地址,即由编译链接决定实际地址 ( 链接到物理空间 ) 。这样,目标代码执行速度快,但由于物理容量限制,能装入的并发进程数将会大大减少,而且对于较大的进程来说,所需容量若超出实际容量就不可能运行。
② 虚拟地址法: 编译链接到一个始于0的线性或多维的虚地址空间 ( 逻辑空间 ) ,包括静态链接和动态链接。这样,每条指令和数据单元在这个逻辑空间中都拥有确定的地址,称为虚拟地址。显然,进程在这个逻辑空间中可以是非连续的,由相应的管理机构实现由虚拟地址到实际物理地址的变换。
(2) 虚存技术
虚拟存储器是存储管理的核心概念。 我们将进程中的目标代码、数据等的 虚拟 地址组成的 虚拟 空间称为 虚拟存储器 , 仅规定每个进程中相互关联信息的相对位置, 而 不考虑信息存放的实际位置及物理存储器的大小。每个进程都拥有自己的 虚拟存储器,其容量受计算机的地址结构和寻址方式确定。
虚存本质上就是程序的不完整装入。虚存是为了提高内存利用率而提出的一种技术。在一个操作系统下,如果不要求任一用户程序所实际占用的物理空间都大于等于该用户程序的逻辑地址空间,而且这种功能的实现对用户来说是透明的(即用户不必知道操作系统是如何实现这一功能的),则称该操作系统实现了虚存技术,相应的用户进程空间称为虚存空间或虚地址空间。
虚存有页式虚存、段式虚存、段页式虚存三种。
(3) 虚存技术的作用
虚拟存储器的主要功能就是,操作系统在相应的硬件支持的支持下,完成虚存到物理存储器的变换,统一管理内存和外存间数据和代码自动交换。由于每个进程都拥有不受物理存储器大小的限制的、自己的虚存,而系统又不可能提供足够大的内存来存放所有内容,所以内存中只能存储那些经常被访问的内容,将那些不经常被访问或在一段时间内不会被访问的信息存放于外存之中,待到进程执行过程中需要这些信息时,再从外存中调入内存--即交换调度。在操作系统中,引入虚存技术,可以解决很多技术难题,给用户提供最大的方便,具体来说,采用虚存技术带来的好处是:
① 可以解决大程序在小空间内运行的问题,即可以在比用户程序实际的逻辑空间小得多的物理空间上运行该用户程序。
② 提高了内存利用率,增加了多道数,提高了CPU利用率和系统吞吐量(但响应时间或轮转时间可能并没增加)。一个进程的一次执行中,没有执行或访问到的那些代码页和数据页,永远不会进入内存。
③ 相对于交换技术,虚存减少了装入或交换所需的IO量。虚存每次换入换出时是以页(或段)为单位,而单纯的交换技术(整体交换技术)在每次换入换出时则是以整个进程空间为单位的。
④ 相对于覆盖,用户(程序)不必畏自己划分覆盖块,简化了用户的程序设计任务。
⑤ 减轻用户存储管理的负担,以便集中精力在应用开发上。用户不必考虑空间大小问题及自己采用何种相关的技术(如覆盖),不必考虑实际地址,不必考虑实存中的洞。
使用虚存的缺点是减慢了程序运行的速度。所以如果资金充分,就配备足够大的内存。但如果资金不足,而且程序运行速度允许再慢些,那么虚存是很好的选择
3 、地址变换
计算机的内存地址的集合称为内存空间或物理地址空间,它是一个一维线性空间。所谓 地址变换 就是指把几个虚存的一维线性空间或多维线性空间 “ 变换 ” 到内存的唯一的一维物理线性地址空间。它包含两个问题: 虚拟空间的划分问题、 地址映射问题 ( 地址重定位 ) 。
(1) 虚拟空间的划分问题: ( 这主要指导编译器、链接程序的工作 )
即进程的各个正文段、数据段等如何放置于虚拟空间 ( 逻辑空间 ) 中,它与计算机体系结构相关,一般首先划分为系统空间和用户进程空间,然后在各自的空间中再行更细致的划分。
(2) 地址映射问题: ( 这主要指导内存装配进程的工作 )
即把 虚拟空间中已经链接划分好的内容装入相应内存,并将虚拟地址 映射为内存地址。地址映射 就是要建立虚拟地址与内存地址的关系,具体方法有两种:静态地址重定位和动态地址重定位
a) 静态地址重定位 : 即在 虚空间程序执行之前由装配进程完成 映射工作,完成各个首地址不同的连续地址变换,不需要硬件支持,但无法实现 虚拟存储器,不支持交换技术。 程序一旦装入内存就不能再移动和交换,而且必须在程序执行之前把有关部分全部装入内存。
b) 动态地址重定位:
即在程序执行过程中CPU 访问之前,将要访问的内容 ( 代码、数据 ) 地址转换成内存地址,它依靠硬件地址变换机制完成。
物理线性地址 = 基地址 + 程序虚地址
在保护方式下的CPU 的重定位过程就是把程序文件体中的重定位信息表 “ 转换 ” 为进程空间中的多个 “ 描述表 ” 信息 。如中断重定位信息形成中断描述表 IDT ,局部变量重定位信息形成局部描述表 LDT ,全部变量重定位信息形成全部描述表 GDT ,进而创建任务状态描述信息表 SST ,把各个分表存储段 (IDT 、 LDT 、 TSS) 的入口描述也放置于 GDT 之中,设置进程就绪状态并存放于就绪队列之中,等待被调度执行 ( 执行时个描述表入口被存放于 GDTR 、 LDTR 、 IDTR 、 TR) 。
动态地址重定位的主要优点 有:
· 可以对内存进行非连续分配;
· 提供了实现虚拟存储器的基础;
· 有利于进程和线程的共享。
本文探讨了操作系统中的内存管理,包括无管理内存的优缺点、局部性原理、虚拟存储器的概念及其作用。重点讲解了虚拟存储器的页式、段式和段页式管理,以及地址变换的过程,强调了动态地址重定位对于实现虚拟存储器和提高内存利用率的重要性。

被折叠的 条评论
为什么被折叠?



