王道操作系统笔记——— 内存管理的基本原理和要求
Posted Xiu Yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了王道操作系统笔记——— 内存管理的基本原理和要求相关的知识,希望对你有一定的参考价值。
文章目录
一、内存的概念和作用
主存储器,简称主存,又称内存储器(内存),用来存放计算机运行期间所需的程序和数据,CPU可以直接随机地对其进行访问,程序执行前需要先放到内存中才能被CPU处理,主要作用是 缓和CPU与硬盘之间的速度矛盾。
内存中有一个个的小房间,每个小房间就是一个存储单元,内存地址从 0 开始,每个地址对应一个存储单元。如果计算机按字节编制,每个存储单元大小为 1 字节,即 8 个二进制;如果计算机按字编址,每个存储单元大小为 1 个字。若字长为 16 位,则每个存储单元大小为 16 个二进制。若字长为 32 位,则每个存储单元大小为 32 个二进制。
补充:几个常用的数量单位
1
1
1 B =
8
8
8 bit
2
10
2^10
210 =
1
1
1 K (千)
2
20
2^20
220 =
1
1
1 M (兆,百万)
2
30
2^30
230 =
1
1
1 G (千兆,十亿)
1
1
1 GB =
2
10
2^10
210 MB =
2
20
2^20
220 KB =
2
30
2^30
230 B =
8
8
8*
2
30
2^30
230 bit
例:一台手机/电脑 有 4 4 4GB 内存
是指该内存中可以存放 4 4 4* 2 30 2^30 230 个字节。如果是按字节编址的话,也就是有 4 4 4* 2 30 2^30 230 = 2 32 2^32 232 个小房间。这么多小房间,需要 2 32 2^32 232 个地址才能标识,所以地址需要用 32 32 32 个二进制位来表示( 0 0 0 ~ 2 32 2^32 232- 1 1 1)
二、内存管理的概念
虽然计算机技术飞速发展,内存容量也在不断扩大,但仍然不可能将所有用户进程和系统所需的全部程序与数据放入内存,因此操作系统对内存空间进行合理的划分和有效的动态分配。操作系统对内存的划分和动态分配,就是内存管理的概念。
操作系统作为系统资源的管理者,主要负责:
① 内存空间的分配与回收:OS 要怎么记录哪些内存区域已经被分配出去了,哪些又还空闲;当进程运行结束之后,如何将进程占用的内存空间回收。
② 内存空间的扩充:OS 利用虚拟内存技术或自动覆盖技术使得系统运行很大的程序,从逻辑上扩充内存。
③ 地址转换:为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而 逻辑地址到物理地址的转换(这个过程称为地址重定位)应该由操作系统负责,其中 地址重定位有三种方式。
④ 内存保护:保证各进程在各自存储空间内运行,互不干扰。
三、进程运行的基本原理和要求
3.1 程序执行过程
创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:
① 编译: 由编译程序将用户源代码编译成若干个目标模块,编译就是把高级语言翻译为机器语言。
② 链接: 由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
③ 装入(装载): 由装入程序将装入模块装入内存运行。
3.2 逻辑地址和物理地址
编译后,每个目标模块都是从 0 号单元开始编址,这称为该目标模块的 逻辑地址 (或相对地址)。当链接程序将各个模块连接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从 0 号单元开始编制的 逻辑地址空间。用户程序和程序员只需知道逻辑地址,而内存管理的具体机制则是完全透明的,只有系统编程人员才会涉及内存管理的具体机制。不同进程可以有相同的逻辑地址,因为这些相同的逻辑地址可以映射到内存的不同位置。
物理地址空间 是指内存中物理单元的集合,它是地址转换的最终地址。进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址(动态重定位是地址转换推迟到程序真正要执行时才进行),这个过程称为 地址重定位。
注:以上两段,重点在于理解
3.3 程序的链接
-
静态链接
在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
-
装入时动态链接
将各 目标模块装入内存时,边装入边链接的链接方式。
-
运行时动态链接
在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
3.4 程序的装入
-
绝对装入
在编译与链接后,得到的装入模块指定 直接使用了绝对地址。 -
静态重定位(可重定位装入)
装入时对地址进行重定位,即将逻辑地址变换为物理地址,地址变换是在装入时一次完成的。
静态重定位的特点: 在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。 -
动态重定位(动态运行时装入)
装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址(装入时依然保持使用逻辑地址),而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
动态重定位特点: 可以将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间;采用动态重定位时允许程序在内存中发生移动。
注:链接的作用是形成了完整的装入模块与逻辑地址,但逻辑地址到物理地址的转换过程是重定位,而不是装入。
3.5 内存保护
内存分配前,需要保护 OS 不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。用户进程可采取以下两种方法:
设置一对上下限寄存器
在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。
利用重定位寄存器 和 界地址寄存器
采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器 中存放的是进程的 起始物理地址。界地址寄存器 中存放的是进程的 最大逻辑地址。
四、覆盖与交换
在多道程序环境下用来扩充内存的两种方法:
4.1 覆盖技术
基本思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。
内存中分为一个 固定区 和若干个 覆盖区。需要常驻内存的段放在 固定区 中,调入后就不再调出(除非运行结束)。不常用的段放在 覆盖区,需要用到时调入内存,用不到时调出内存。并且 必须由程序员声明覆盖结构,操作系统完成自动覆盖。
缺点: 对用户不透明,增加了用户编程负担;覆盖技术 只用于早期的操作系统中,现在已成为历史。
4.2 交换技术
基本思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)。
中级调度(内存调度),采用的就是交换技术;暂时换出外存等待的进程状态为挂起状态(挂起态)挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
- 具有对换功能的操作系统中,通常把磁盘空间分为 文件区和对换区 两部分。 文件区 主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区 空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此 对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。总之,对换区的I/O速度比文件区的更快。
- 交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
- 可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间。
注:PCB 会常驻内存,不会被换出外存。因为进程被换出外存后,系统需要通过PCB对进程进行管理。
下列措施中,能加快虚实地址转换的是( C )。
Ⅰ.增大快表(TLB)容量 Ⅱ.让页表常驻内存 Ⅲ.增大交换区(swap)
A.仅Ⅰ B.仅Ⅱ c.仅Ⅰ Ⅱ D.仅Ⅱ Ⅲ
(来源:2014年408真题)
解析: 虚实地址转换,即逻辑地址与物理地址的转换。
增大快表容量:可增加查询快表命中的概率。
让页表常驻内存:在采用多级页表的请求分页存储管理系统中,页表常驻内存可保证在查询页表时不会发生缺页、调页的情况,从而加快地址转换。
- 当系统有足够的交换区空间时,页面的换入换出都是通过交换区进行。
- 当系统缺少足够的交换区空间时,不会被修改的文件直接从文件区调入,当它们需要换出时,由于未被修改因此不必换出,直接覆盖即可。可能被修改的页面,将其换出时必须调到交换区,以提升I/O速度。
- 页表显然是可能被修改的内容,因此即使交换区空间不足,页表在换出时也必然放在交换区。
因此,增加交换区对地址转换的速度无影响.
以上是关于王道操作系统笔记——— 内存管理的基本原理和要求的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研操作系统)第三章内存管理-第一节1:内存基础知识程序编译运行原理
(王道408考研操作系统)第三章内存管理-第二节1:虚拟内存管理基本概念
(王道408考研操作系统)第三章内存管理-第二节1:虚拟内存管理基本概念