
虚拟内存是存储管理中一个特别重要的概念。你应该仔细掌握虚拟内存的定义和特征。另外,你需要知道为什么要引入虚拟内存,实现虚拟内存技术的物质基础,虚拟内存容量的限制是什么。
虚拟内存的概念
(1)引入虚拟内存的好处
用户在编写程序时不必考虑内存容量的限制,只需根据实际问题的需要确定合适的算法和数据结构,可以简化编程的任务。
由于每个进程只有一部分加载到内存中,占用的内存空间更少,可以同时将更多的进程加载到一定容量的内存中,这也增加了CPU的利用率和系统的吞吐量。
为了给用户(尤其是大作业的用户)提供方便,操作系统应该统一管理各级内存。也就是说,你应该把程序当前使用的部分放在内存中,其余的放在磁盘上,在这种情况下开始进程执行。操作系统根据程序执行的要求和内存的实际使用情况,利用swap技术,随机切换每个程序的进/出。
(2)交换技术
交换技术也叫交换技术。其实现方式类似于日常生活中几个单位租用一个会议厅。A单位的租用时间到了,退出会议厅,由B单位使用;单位B到了,也会被单位C收回使用,以此类推。如果A单元还需要使用,会重新出租,由经理安排占用时间。
交换技术也用于多道程序环境。此时,内存中会保留多个进程。当内存空间不足以容纳需要进入内存的进程时,系统会将内存中暂时不可用的进程(包括程序和数据)换出到外存中为内存腾出空间,并将具备运行条件的进程从外存切换到内存中。UNIX/Linux系统中的内存管理就是利用了这种多程序交换技术。
(3)虚拟内存的概念
VirtualMemory是一个虚拟内存空间,用户可以将其视为可寻址内存。它将用户的逻辑内存和物理内存分开,是操作系统为用户提供的一个远大于真实内存空间的地址空间。也就是说,虚拟内存不是实际内存,其大小远大于内存空间;用户感觉可用的“内存”非常大,这是操作系统对逻辑内存的扩展。
实现虚拟存储技术的物质基础是二级存储结构和动态地址翻译机制。操作系统改造后,内存和外存有机链接在一起,在用户面前呈现出足以满足编程需求的超大内存空间。
虚拟内存本质上将用户地址空间与实际存储空间区分为两个不同的概念。动态地址翻译机制在程序运行时将逻辑地址转换成物理地址,实现动态定位。
需要注意的是,虽然虚拟内存为用户提供了超大的地址空间,但用户在编程时一般不用考虑可用空间有多大,但虚拟内存的容量并不是无限的。它主要受到两个方面的限制:
(1)指令中地址的字长。机器指令中代表地址的二进制数字的数量是有限的。如果地址单元以字节为单位寻址,并且代表地址的字长为16位,则可以代表的最大地址空间为64KB。如果表示地址的字长是32位,则可以表示的最大地址空间是4GB。
外部存储的容量。从实现的角度来看,用户的程序和数据必须完全存储在外部存储器(如硬盘)中。然而,外部存储容量、传输速度和使用频率都受到物理因素的限制。也就是说,磁盘的容量是有限的,并不是真正的“无限”,其传输速度也不是“无限快”,所以虚拟空间不可能是无限的。
虚拟内存的特征
虚拟内存的特点可以用16个字来概括:虚拟扩展、部分加载、离散分配、多次交换。
虚拟内存的基本概念应该从以下四个方面来理解,这四个方面也是虚拟内存的基本特征:
虚拟扩张
虚拟内存不是扩展物理内存空间,而是扩展逻辑内存容量。也就是说,用户在编程中使用的地址空间可以远大于实际的内存容量。比如实际内存只有1MB,但是用户程序和数据占用的空间可以达到10MB甚至更多。因此,用户“感觉”到内存扩大了。
部分负荷
每个进程不是一次全部装入内存,而是分成几个部分。当要执行该过程时,仅需要将当前操作所需的那些程序和数据加载到存储器中。后来,当运行过程中使用其他部件时,这些部件分别从外部存储器转移到存储器。
离散分布
一个进程被分成多个部分,它们并不都被加载到内存中。即使是加载到内存中的部分也不需要占用连续的内存空间。这样,内存中某个进程的部分可能会分散在内存的不同部分,彼此不连续。这样做不仅可以避免内存空间的浪费,还可以为进程动态转移内存提供方便。
反复交换
在一个进程的运行过程中,它需要的所有程序和数据都被多次转移到内存中。一次调入一部分,只解决当前需要,内存中暂时不用的那些程序和数据可以换出到外存的交换区;甚至将暂时不能运行的进程的内存中的所有图像换出到交换区,以便为可运行的进程释放尽可能多的内存空间。必要时,可以将传输的程序和数据传输回存储器。
根据地址空间的结构,虚拟内存可以分为分页虚拟内存和分段虚拟内存。本课程只介绍分页虚拟内存。责任编辑:抄送









