操作系统NO.3 | 详解操作系统的连续内存管理(清华大学 操作系统原理)

本文详细介绍了操作系统的虚拟内存管理,包括覆盖技术、交换技术和虚拟存储技术,重点阐述了虚拟内存的页式管理,讨论了页面置换算法如最优、FIFO、LRU和Clock算法,以及页面置换的性能和全局页面置换算法,揭示了局部性和工作集模型在内存管理中的应用。

 创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜    


系列文章目录

操作系统NO.2 | 详解操作系统的非连续内存管理(清华大学 操作系统原理)

操作系统NO.1 | 了解操作系统的基础知识


概述

操作系统NO.3 |  详解操作系统的连续内存管理,通过本期内容你将了解覆盖技术、交换技术、虚存技术,以及页面置换算法。


目录

系列文章目录

概述

虚拟内存

起因

覆盖技术

交换技术

覆盖与交换技术的比较

虚存技术

目标

程序局部性原理

基本概念

基本特征

虚拟页式内存管理

虚拟内存性能

页面置换算法

功能与目标

局部页面置换算法

最优页面置换算法

先进先出算法

最近最久未使用算法

时钟页面置换算法

二次机会算法

最不常用算法(LFU)

Belady现象(科学家名字)

LRU / FIFO 和 Clock 的比较

全局页面置换算法

工作集模型

工作集

工作集页置换算法

缺页率置换算法

抖动问题


虚拟内存

起因

       程序规模的增长远大于存储器容量的发展的速度,为了让更多的程序运行在有限的内存中,理想情况下,我们希望有更大、更快、更便宜的非易失性存储器。

       在实际中的存储器情况如下:

       从图中我们可以得出,把容量小、速度快的存储器我们希望放在靠近CPU的地方,让CPU可以更快的运行;由于内存相对于寄存器的速度较慢,因此寄存器和内存之间还有一层Cache,Cache目的是缓存内存的数据使得CPU尽量可以从Cache中获得内存数据,而不用每次访问主存,这样保证了CPU访问数据的效率更高。

       操作系统支持存储器可以达到更大、更快、更便宜好用的理想状态,但是数据随着掉电会丢失的影响的情况还存在。

       如果程序太大,超过了内存的容量,可以采用手动的覆盖技术,只把需要的指令和数据保存至内存中;

       如果程序太多,超过了内存的容量,可以采用自动的交换技术,把暂时不能执行的程序送到外存中;

       如果想要在有限容量的内存中,以更小的页力度为单位装入更多更大的程序,可以采用自动的虚拟存储技术

覆盖技术

如果是程序太大, 超出了内存的容量, 可以采用手动的覆盖(overlay)技术, 只把需要的指令和数据保存在内存当中。

目的 : 是在较小的可用内存中运行较大的程序, 常用于多道程序系统, 与分区存储管理配合使用

原理 :

       把程序按照其自身逻辑结构, 划分为若干个功能上相互独立的程序模块, 那些不会同时执行的模块共享同一块内存区域, 按时间先后来运行。(分时共享内存区域)

必要部分(常用功能)的代码和数据常驻内存;

可选部分(不常用功能)在其他程序模块中实现, 平时存放在外存中, 在需要用到时才装入内存;

不存在调用关系的模块不必同时装入到内存, 从而可以相互覆盖, 即这些模块共用一个分区。

也就是说,程序松耦合的部分可以按需装入内存,不需要的时候放在外存中,多个不常用部分共用一个分区.

实例讲解

A(20k) | B(50k) ____ C(30k) | ____ D(30k) ____ E(20k)  F(40k)

因此不需要将整个程序190k的数据全部放入内存中, 而是划分为常驻区(20k) 覆盖区0(50k)覆盖区1(40k) 压缩至了110k的内存空间使用

缺点 :

     由程序员来把一个大的程序划分为若干个小的功能模块, 并确定各个模块之间的覆盖关系, 费时费力, 增加了编程的复杂度;

     覆盖模块并从外存装入内存, 实际上是以时间延长来换取空间节省。

Turbo Pascal的Overlay系统单元支持程序员控制的覆盖技术。

交换技术

目标:多道程序在内存中运行时,让正在运行的程序或需要运行的程序获得更多的内存资源。

实现方法

       可将暂时不能运行的程序送到外存,从而获得空闲内存空间;

       操作系统把一个进程的整个地址空间的内容保存到外存中(患处swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。换入和换出内容的大小为整个程序的地址空间。

交换技术实现中的几个问题

       交换时机的确定:何时需要发生交换?只当内存空间不够或有不够的危险时换出;

       交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像进行直接存取;

       程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗?最好采用动态地址映射方法

覆盖与交换技术的比较

1.覆盖只能发生在那些相互之间没有调用关系的程序模块之间,因此程序员必须经常手动指定程序内各模块的逻辑覆盖结构;

2.交换技术是以在内存中的程序大小为单位来进行的,它不需要程序员给出各个模块之间的逻辑覆盖技术。

3.总的来说,交换发生在内存中程序与管理程序或操作系统之间,而覆盖技术发生在运行程序的内部。

虚存技术

目标

1.像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。但做得更好,由操作系统自动来完成,无需程序员的干涉

2.像交换技术那样, 能够实现进程在内存与外存之间的交换, 因而获得更多的空闲内存空间. 但做的更好, 只对进程的部分内容在内存和外存之间进行交换

程序局部性原理

程序的局部性原理:指程序在执行过程中的一个较短时期,程序所执行的指令地址和指令的操作数地址,分别局限于一定区域。

时间局部性 : 一条指令的一次执行和下次执行, 一个数据的一次访问和下次访问都集中在一个较短时期内

空间局部性 : 当前指令和邻近的几条指令, 当前访问的数据和邻近的几个数据都集中在一个较小区域内

程序的局部性原理表明, 从理论上来说, 虚拟存储技术是能够实现的,而且在实现了以后应该是能够取得一个满意的效果。

实例讲解:

页面大小为4k, 分配给每个进程的物理页面是1。在一个进程中, 定义了如下的二维数组 int A[1024][1024]. 该数组按行存放在内存, 每一行放在一个页面中.考虑一下程序的编写方法对缺页率的影响?

程序编写方法一 : (发生了1024*1024次缺页中断)

for(j = 0; j < 1024; j++)

for(i = 0; i < 1024; i++)

A[i][j] = 0;

程序编写方法二 : (发生了1024次缺页中断)

for(i = 0; i < 1024; i++)

for(j = 0; j < 1024; j++)

A[i][j] = 0;

基本概念

虚存技术可以在页式或段式内存管理的基础上实现。

在装入程序时, 不必将其全部装入内存, 而只需将当前需要执行的部分页面或段装入到内存中, 就可以让程序开始执行;

在程序执行过程中, 如果需执行的指令或访问的数据尚未在内存中(称为缺页或缺段), 则由处理器通知操作系统将相应的页面或段调入到内存, 然后继续执行程序;

另一方面, 操作系统将内存中暂时不使用的页面或段调出保存在外存上, 从而腾出更多空闲内存空间存放将要装入的程序以及将要调入的页面或段。

基本特征

大的用户空间 : 通过把物理内存和外存相结合, 提供给用户的虚拟内存空间通常大于实际的物理内存, 即实现了这两者的分离. 如32位的虚拟地址理论上可以访问4GB, 而可能计算机上仅有256M的物理内存, 但硬盘容量大于4GB.

部分交换 : 与交换技术相比较, 虚拟存储的调入和调出是对部分虚拟地址空间进行的;

不连续性 : 物理内存分配的不连续性, 虚拟地址空间使用的不连续性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaochao️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值