存储器管理也称存储管理,本博客中,将主存和虚存(逻辑上扩充的空间)一同作为存储器管理的对象。存储器管理的主要任务是为OS中的多道程序的运行提供良好的环境,提高存储器的利用率,方便用户使用,并能从逻辑上扩充内存。
并且存储器一直都是计算机系统的重要组成部分。近年来,随着技术的发展,虽然存储器的容量一直在不断扩大,但是仍不能满足现代软件发展的需要。存储器仍然是一种宝贵而稀缺的资源。如何有效的来管理存储器,不仅直接影响到存储器的利用率,而且对系统的性能也有重大影响。
文章目录
- 1.逻辑地址与物理地址
- 2.存储器管理管理的存储对象
- 3.存储器管理的主要功能
- 4.存储器管理的主要模式
- 5.虚拟存储器的概念
- 6.总结
要理解存储器的管理,首先我们需要先明白逻辑地址和物理地址两个概念。
逻辑地址:又称为相对地址,即用户编程所使用的的地址空间,逻辑地址都是从0开始编号,其有两种形式:1.一维逻辑地址(地址),所有的程序和数据组织成一维的逻辑地址;2.二维逻辑地址(段号:段内地址),主要涉及段的概念,即一个用户程序可以设计成多个段,每个段的地址都是从0开始的。(关于段的讨论不在此处展开)
物理地址:又称为绝对地址,即程序执行所使用的的地址空间,CPU在执行指令时必须要按照物理地址进行。因为物理地址是实实在在内存中的地址,虚拟技术扩充的是OS的逻辑地址。
首先我们来看下计算机系统中的存储层次,如下图所示,存储层次至少应具有三级:CPU寄存器、主存、辅存。还可以按照具体的功能细分为寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质。在存储层次中,层次越高(越靠近CPU),存储介质的访问速度越快,价格也越高,相对的计算机中配置的容量也越小。
存储器管理需要管理以下存储对象:
- 主存储器:这也是存储管理管理的主要对象(上图中的主存);
- 高速缓存:为了获得更好的处理性能,部分主存程序与数据(特别是关键性能数据)被调入高速缓存,存储管理需要对其进行管理,甚至包含对联想存储器的管理(快表);
- 辅存:为了获得更大的虚拟地址空间,存储器管理需要对存放在硬盘、可移动存储介质上的虚拟存储器文件进行管理。注:有些版把对硬盘的管理功能划分到文件管理中,仅把对磁盘缓存的管理归为存储器管理,这里因为涉及到虚拟存储器管理,因此博主这里把对整个辅存的管理功能都划分到存储器管理。
为了实现存储器管理的目标:为OS中的多道程序的运行提供良好的环境,提高存储器的利用率,方便用户使用,并能从逻辑上扩充内存,存储器管理需要有以下功能:
- 地址映射:也称地址转换、重定位,能够将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址。
- 内存分配:主要包含为每道程序分配内存空间;提高存储器的利用率,尽量减少不可用的内存空间(内部碎片、外部碎片);允许正在运行的程序申请附加的内存空间,以适应程序和数据的动态增长。
- 内存保护:内存保护的主要任务为:①确保每道程序程序都仅在自己的内存空间执行,彼此互不干扰,因此需要对主存中的程序和数据进行保护,做到私有主存储区中的信息可读可写、公共区中的共享信息根据授权、非本进程中的信息不可读写。②不允许用户程序访问OS的程序和数据,也不允许用户程序转移到非共享的其它用户程序中去执行(会覆盖其它程序的程序和数据)。
- 内存扩充:借助于虚拟存储技术,从逻辑上扩充内存的容量,使用户感觉到的内存容量比实际内存容量大得多。需要把磁盘作为主存的扩充,只把部分进程或者进程的部分内容装入内存。扩充容量有两种方式,分别为对换和虚拟技术。
要将存储器的管理模式前,我们需要理解下主存储器复用概念。
主存储器的复用:多道程序系统需要为多个进程来划分使用主存(需要装入内存执行),而主存储器复用有两种方式:①按照分区复用:主存划分为多个固定/可变尺寸的分区,一个进程/程序段占用一个分区;②按照页架复用:把主存划分成多个相同大小(固定)的页架(物理块),一个程序或程序段分别自动的占用多个页架。
在上文中我们也提到了逻辑程序设计的过程中,OS提供了单连续的一维地址空间(地址)和多连续的二维地址空间(段号:段内地址),结合主存储器复用的分区复用和页架复用两种方式,两两结合,主存储器管理的基本模式就有四种:
- 单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区,不可虚拟,不可共享;
- 段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区,可虚拟,可共享;
- 页式存储管理:一维逻辑地址空间的程序占用多个主存页架区,逻辑程序直接划分为多个页(不一定连续),可虚拟,可共享;
- 段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页帧区,程序划分为多个段,每个段占用多个页架,可虚拟,可共享;
其组合示意图和每种管理模式的特性如下图所示:
图中也对应着程序执行需要的三个步骤:编译、链接、装入。
虚拟存储器就是作为主存储器空间扩充的一种方式,也是以上文中提到的虚拟技术来扩充的逻辑地址空间。虚拟存储器的提出主要是因为主存资源的不足,主存容量的限制带来了许多的不便,如用户编写程序必须受到最大主存的限制,否则太大的软件根本无法装入主存,也就无法执行;多道程序设计的道数(可同时在OS中运行的作业数)也受到限制,影响OS的并发性。
基于程序运行时的局部性原理,主要包括时间局部性和空间局部性,因此考虑部分调入进程内容,以此为基础形成虚拟存储器的概念。
虚拟存储器的基本思想是:存储器管理把进程的全部信息放到辅存中,执行时先将其中的一部分装入主存,以后根据执行行为随用随调入,并且当主存中没有足够的内存空间时,存储器管理依据某些算法(页面置换算法或者是分区淘汰算法)淘汰内存中的页或者是分区。
对上面的描述进行总结,可以知道,虚拟存储器就是:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储系统。
本文是对存储器管理的重要概念做一个总的概括,如果是刚接触存储器管理,其中许多概念难免会不明白,不过没关系,后面博主会对上文中出现的重要概念分别展开讨论,最终把整个存储器管理给讲完整。
后续博客,还请继续关注。
又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,如果有什么错误,还请批评指正。
喜欢的话,就给个赞;原创不易,评论支持;期待后续,点个关注。
如有兴趣,还可以查看我的其他几篇博客,都是OS的干货,喜欢的话还请点赞、评论加关注_。