内存/虚拟内存

来源:互联网 发布:星座软件哪个好 编辑:程序博客网 时间:2024/05/17 03:29

除CPU外,内存是操作系统管理的重要资源,程序要运行,必须先加载到内存。在操作系统出现以前,程序并不需要加载到内存才能运行,程序曾是存放在卡片上,计算机每读一张卡片,就运行一条指令。程序直接从卡片到执行。但这种从外部存储媒介上直接执行指令的做法效率极低,切灵活性很差。因此,人们发明了内存储器来讲需要运行的程序先加载,在自动执行,从而提高效率和灵活性。这也导致了“存储的程序”概念,而存储的概念又导致计算机及软件系统的革命性变化。此后,人们对内存的要求越来越多。

这里写图片描述

缓存的特点:低容量(相对于主存来说),高速度,高价格;(一般最多也就几兆)
主存的特点:中容量,中速度,中价格;(一般是几G)
磁盘的特点:大容量,低速度,低价格的存储媒介;(一般是几百G到几T)
磁带的贴点:大容量,低速度,低价格的存储媒介;

看一下程序指令执行的过程:程序指令在执行前被加载到内存,然后从内存中一条条指令读出 执行(从硬件层来看,指令的“读取-执行”循环式计算机的基本操作)。每条指令在执行的是时候需要读取操作数和写入运算结果。而读取操作数,就需要给出操作数所在的内存地址,这个地址不能使物理主存地址。这是因为该程序在何种硬件配置的机器上运行不能事先确定,操作系统自然不可能对症下药的发出对应于某台机器的物理主存。因此,指令里面的地址是程序空间(虚拟空间)的虚拟地址(程序地址),即程序发出的地址与具体机器的物理主存地址是独立的。这是内存管理要达到的另外一个目标。
内存管理一般要达到的两个目标:
- 地址保护:一个程序不能访问另一个程序地址空间。
- 地址独立:程序发出的地址应与物理主存地址无关。

虚拟内存这个概念听上去有点太虚拟,但他的实质并不难理解,我们知道一个程序如果要运行,必须加载到物理主存里。但是物理主存是非常有限的,因此一个程序如果要全部加在到物理主存,我们所能编写的程序将是很小的程序。物理主存的容量受制于主存容量(还要减去操作系统所占的空间和一些临时缓存空间)。另外,即使我们编写的每个程序都小于物理主存容量,但还是存在一个问题:主存能够存放的程序数量将极其有限,而这将极大的限制多道编程的发展。
那如何解决物理主存容量偏小的缺陷呢?最简单的办法就是购买更大的物理主存,而这将大幅的提升计算的成本,可能ineicun致使许多人买不起计算机。有没有办法在不太增加成本的情况下扩大内存容量呢? 有,那就是虚拟内存。

虚拟内存的中心思想是将物理主存扩大到便宜的。大容量的磁盘上,即将磁盘空间看做是主存的一部分。用户程序存放在磁盘上就相当于存放在主存内,用户程序既可以完全存放在磁盘中,也可以完全存放在主存中,也可以部分存放在主存、部分存放在磁盘。而程序执行的时候,程序发出的地址到底是在主存还是在磁盘则由操作系统的内存管理模块负责判断,并到相应的地方进行读写操作,事实上我们可以进一步将缓存、磁带也包括进来,构成一个效率、价格、容量错落有致的存贮架构。即虚拟内存要提供的就是一个空间像磁盘一样大、速度想缓存那样高的主存储系统。(而对程序地址所在位置‘缓存、主存、磁盘’的判断是内存管理系统的中心功能)

原创粉丝点击