1、虚拟存储
1.1 定义
虚拟存储器是指,具有调入功能和置换功能,能从逻辑上对内存的空间进行扩充的一种存储器,实际不存在,逻辑容量与内存容量和外存容量的和有关系。运行速度接近内存,但是每单位成本接近外存。
1.2 作用
虚拟存储就是在逻辑上扩大内存的容量,从而使用户感觉到内存的容量比实际的内存容量大得多,但是它并没有从物理上扩大内存的容量。
1.3 虚拟存储器的特点
- 多次性:是相对于传统的存储器而言的,是指一个作业中的程序和数据无需一次性全部调入内存中,而是允许被分成多次调入内存之中。
- 置换性:是相对于传统存储器的驻留性而言的,是指一个作业的程序和数据,无需在作业运行时一直驻留在内存中,而是允许在作业运行过程中进行换如、换出。换入换出可以提高内存的利用率
- 虚拟性:是指能够从逻辑上扩充内存的容量,使用户看到的内存远大于真实的内存,这样就可以使一个较大的作业在较小的内存中运行,或者提高多道程序。从而提高系统的利用率和程序的并发程度。
- 虚拟性是以多次性和置换性为基础的
- 多次性和置换性是建立在==离散分配==的基础之上的。
1.4 优点
- 扩大了内存的容量,可以使比内存容量大的多的程序正常运行
- 让更多的用户程序可以并发执行。
- 方便了用户
- 改善了系统的性能。
2、传统存储管理的特点
- 一次性,是指作业必须一次性的全部装入内存后才可以运行。从而导致大作业无法在校内存在中运行,以及无法进一步提高系统的多道程序,限制了处理机的利用率和系统的吞吐率。
- 驻留性,是指作业装入内存后,整个作业一直停留在内存中,其中任何部分都不会被换出,直至整个作业运行完毕。尽管某些进程会因为某种原因而被阻塞或者某个模块用了一次后就不在使用了,但是他们还会驻留在内存中,从而造成了内存资源的浪费,因为内存资源本身就十分珍贵,所以一定要避免这种现象的产生。
3、程序局部性原理
3.1 定义
程序在运行时存在局部性现象,即在一较短时间内,程序的执行仅局限于某个部分,相应的它所访问的存储空间也局限于某个区域。
3.2 局部性原理的表现
- 程序执行时,除了少数的转移指令和过程调用指令外,在大多数情况下都是顺序执行的。
- 过程调用将会使程序的执行轨迹从一个区域转移到另一个区域。
- 程序中存在很多循环结构,这些循环结构虽然只有少量的指令,但是它们将被执行的次数比较多。
- 程序中好包括许多对数据结构的处理,但这些处理往往够局限于很小的范围之内。
3.2.1 局限性的其他几个表现方面
- 时间局限性:是指程序中的某条指令被执行,则在不久后该指令还可能要被执行,或者某条数据被访问后,则在不久后该数据还可能要被访问。产生时间局部性的原因主要和程序的==循环操作==有关。
- 空间局限性: 是指程序访问了某个存储单元后,则在不久后,其附近的存储单元可能也要被访问。产生空间局部性的原因主要和程序的==顺序操作==有关。
4、虚拟存储的工作原理
基于程序运行的局部性原理可知,当一个应用程序运行之前没必要将全部装入内存中,只需要将当前运行所需要的少数页面或者段先装入内存,使程序能够运行即可,求部分暂留在外存上(磁盘上)。程序在运行时,如果它
要访问 的页或者段已经调入内存中,便可以继续执行下去,如果所要访问的页或者段不在内存中时,即缺页或者缺段,此时就会发出缺页或者缺段中断请求,此时CPU便会响应中断请求,向OS发出控制,OS便会利用请求调页或者调段功能将其调入内存中,使程序继续运行下去,如果内存已满,无法装入新的页或者段的时候。os便会利用页(段)置换算法,将内存中暂时不用的页或者段调出内存,腾出足够的空间,将新的页或者段调入内存中,使程序继续运行下去 。这样就可以使一个较大的程序在一个较小的内存中运行,同时也可以提高并发度。
5、虚拟存储器的实现方法
5.1 实现方法
现在所有的虚拟存储器主要采用分页请求和请求分段的方法实现。
5.1.1 分页请求系统
分页请求系统是在分页系统的基础上增加请求调页功能和分页置换功能所形成的页式虚拟存储系统。它允许用户程序只装入少量的页面的程序以及数据,可以启动即可,后面慢慢调入和置换。当运行时所访问的页面不在内存时(缺页),此时就会请求调页把需要的页面的程序以及数据调入内存,使程序能够继续执行,当内存中有不需要的页面时,就会通过置换功能(以页面为单位进行置换),把它置换到外存上,腾空空间给调入的页面使用。为了实现置换和请求调页功能,系统需要硬件机制和实现请求分页的软件。
1、硬件机制
(1) 请求分页的页表机制:在纯分页的页表机制上增加若干项形成的,作为请求分页的数据结构。
(2) 缺页中断机制:
(3) 地址变换机制:在纯分页的地址变化机制上增加若干项形成的。
2、请求分页软件
这个主要包括 实现请求调页和置换功能的软件。
5.1.2 请求分段系统
请求分段系统是在分段系统的基础上增加请求调页段和分段置换功能所形成的段式虚拟存储系统 。它允许用户程序只装入少量段的程序以及数据,可以启动即可,后面慢慢调入和置换。当运行时所访问的段不在内存时(缺段),此时就会请求调段和置换功能把需要的段的程序以及数据调入内存,使程序能够继续执行,当内存中有不需要的段时,就会通过置换功能(以段为单位进行置换),把它置换到外存上,腾空空间给调入的段使用。为了实现置换和请求调段功能,系统需要硬件机制和实现请求分段的软件。
1、硬件机制
(1) 请求分段的段表机制:在纯分段的段表机制上增加若干项形成的,作为请求分段的数据结构。
(2) 缺段中断机制:
(3) 地址变换机制:在纯分段的地址变化机制上增加若干项形成的。
2、请求分段软件
这个主要包括 实现请求调段和置换功能的软件。
区别
- 请求分页系统换入和换出的基本单位大小固定。但是请求分段系统的换入和换出的基本单位是段,大小不固定,类似于动态分区分配方式。
- 请求分页系统在内存分配和回收时比较容易,而请求分段系统在在内存分配和回收时比较麻烦。
- 请求分页系统实现比较容易,而请求分段系统实现比较麻烦。
6、请求分页存储管理方式
6.1 请求分页中的硬件支持
6.1.1 请求分页的页表机制
请求分页的页表机制是在纯分页的页表机制上增加若干项形成的,作为请求分页的数据结构,其作用是将用户地址中的逻辑地址映射成内存的物理地址。其中增加的若干项分别为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpCB7Krk-1622380847049)(虚拟存储.assets/image-20210530203632340.png)]
(1)状态位P(存在位):主要用来指示该也是否调入内存,供程序调用时参考。
(2)访问字段A:用于记录在一段时间内本页被访问的次数,或者记录本页最近已有多长时间未被访问,供置换时(换出)参考。
(3)修改位M:标识该页面是否被修改过。因为内存中的每一页都在外存中保留一份副本,因此在置换时,若该页面没有被修改过就不需要写会外存,若被修改过,为 了保证数据的一致性,则需要将修改过的内容重新写会外存。供调换时参考。
(1)外存地址:主要用来指名该页面在外存中的地址,供供置换时(换入)时参考。
6.1.2 缺页中断机构
在请求分页系统中,当访问的页面不在内存时便会产生缺页中断,然后将做需要的页面调入内存中。缺页中断和其他中断类似也要经历:保护现场(CPU环境)、分析中断原因、中断处理、恢复现场(CPU的环境),但是缺页中断又和其他的中断有差别
(1)在指令执行期间产生和处理中断信号。
通常情况下,CPU只有在一条指令执行完成后,才会检查是否有中断请求,如果有便去相应它,如果没有就继续执行下一条指令。但是缺页中断却是在指令执行期间,如果有缺页中断(就是所需要的页面不在内存时)就会去相应它,将所需要的页面调入内存。
(2)一条指令在执行期间可能会产生多次缺页中断。
6.1.3 地址变换机制
请求分页系统中的地址变换机制在分页系统的地址变化机制基础上增加若干项形成的。