文章目录
虚拟存储器
内存问题
计算机出现的早期,其工作内容比较简单,同一时间只做一个计算任务,然后输出结果。
但随着人类需求的提高,人们希望计算机能同时计算多个任务,提高计算机的使用率。逐渐地,多任务计算机出现,但要想同时运行多个任务,那各任务之间如何分配和使用计算机资源呢?
为了解决这个问题,人类发明出操作系统,所有的计算机资源交由操作系统统一管理,各程序需要使用资源要向操作系统提出申请,操作系统按照某种规则统一分配和管理,同时保证资源的合理分配。
内存是一段连续的地址空间,如果多个程序同时运行,对于内存的时候一不小心会不会侵入了别的程序,导致运行结果产生错误?那么如何合理地分配和保护内存资源,变得十分重要。
我们都知道,一段程序要想运行必须加载到内存,然后CPU从内存获取指令和数据进行逻辑运算和处理,但如果一段程序运行时需要的内存非常大,超过了计算机的物理内存,这种程序还能否运行呢?
我们整理一下,针对内存资源遇到的问题:
- 多个程序同时运行,如何保证各程序之间内存资源分配合理,且资源互不干扰?
- 程序运行能否突破物理内存的大小?
基于这2个问题,我们来看一下,计算机是如何解决这些问题的,这其中涉及硬件与操作系统共同的协作。
内存分区和分页
早期计算机同一时间只能运行一个程序,内存中仅包含操作系统和正在执行的一个用户程序,所以内存管理起来很简单,只需要划分操作系统区域和用户区域即可。
现代计算机采用多道程序执行方式,内存中包含操作系统和多个用户程序,为了提高计算机的利用率,应当尽可能地让用户程序使用硬件资源然后工作。
这就需要对内存进行划分和管理,划分的区域主要是“用户区”,而划分的任务交由操作系统管理,这个过程叫做“存储器管理”。
早期经常采用“交换”技术让系统尽量多地把用户程序调入到内存中,“交换“技术的实现方式主要有两种:分区和分页。
分区
分区方式将内存分为两大区域:操作系统区、用户区域。
然后对用户区域再进行分区,主要有2种方式:简单固定分区和可变长分区。
简单固定分区
如图,系统把”用户区“分成若干不等的固定分区,当一个用户程序调入内存时,分配一个最能够容纳它的最小分区给它。
例如,如果一个用户程序需要196K的内存空间,则将256K的分区给它。
很明显,每个用户程序所需的内存空间不可能正好和这些分区大小相对应,所以这种分区方式会大大浪费内存空间。
可变长分区
如图,可变长分区方式是根据用户程序所需内存空间直接分配对应大小的空间,刚开始每个程序都能分配到自己所需的内存区域,但如果程序进入IO等待状态,操作系统则将这块空间换出到磁盘,腾出空间等待别的调入其他程序。如果此时另外一个程序被调入内存,但所需空间比之前换出的内存空间小,那么这时就会产生碎片。
各程序内存交换的越频繁,碎片就越多,此时内存的利用率下降。
这2种方式都会产生“碎片”,当然,通过移动用户程序可以将“碎片”合并以提高内存利用率,但会增加CPU的额外处理时间,也增加了重定位硬件的开销。
因此,分区方式不是解决多到程序运行的有效办法,现代多任务操作系统已经不再使用这种方法,我们对其有所了解即可。
分页
另外一种方式就分页,分页具体方式如下:
- 把物理内存划分成固定且很小的块,称为页框,每个