操作系统
第三章 内存管理
author:slightwjq
2022年12月31日
3.1 内存管理概念
内存管理就是对内存的划分与动态分配。
主要功能有:内存空间的分配与回收、地址转换、内存空间的扩充、内存共享、存储保护。
程序的链接与装入
将用户源程序变为可执行程序步骤:编译、连接、装入。
连续分配管理方式
连续分配方式是指为用户程序分配一个连续的内存空间。
- 单一连续分配:内存分为系统区和用户区,用户区中仅有一道用户程序,不支持并发。
- 固定分区分配:将用户空间划分为若干固定大小的区域,每个分区装入一道作业。为了便于内存的分配,通常将分区按大小排队,并为之建立一张分区说明表,其中各表项包括每个分区的始址,大小及状态。
- 动态分区分配:按照实际的需要为进程动态地分配内存。随着时间推移会产生越来越多小的内存碎片,称为内部碎片。装入时考虑以下几种算法:
- 首次适应算法:空闲分区按地址递增链接,找到大小能满足的第一个空闲分区分配给作业。
- 临近适应算法:分配内存从上次查找结束的位置开始继续查找。
- 最佳适应算法:空闲分区按容量递增次序链接,找到第一个能满足要求且最小的分区分配给作业。
- 最坏适应算法:空闲分区以容量递减次序链接,找到第一个能满足要求的最大的分区,从中分割一部分给作业。
基本分页
进程中的块称为页,内存中的块称为页框。外存也以同样的单位进行划分,称为盘块。
地址结构分为页号和页内偏移两部分。
页表:为了便于在内存中找到进程的每个页面对应的物理块,系统为每个进程建立一张页表,它记录在内存中对应的物理块号,页表一般存放在内存中。
基本分段
段式管理按照用户进程自然段划分逻辑空间。每个进程都有一张内存空间与逻辑空间映射的段表,每个段表项对应一段,段表项记录段在内存中的始址和长度。
段号和段内偏移要显式给出,分段的地址空间是二维的。
段页式管理
见计算机组成原理部分对应内容。
3.2 虚拟内存管理
虚拟内存的基本概念
3.1节的内存管理策略都有一次性(作业必须一次装入内存后才可以运行),驻留性(作业被装入内存后就一直驻留在内存中)。
基于局部性原理,在程序装入时,仅须将程序当前要运行的少数页面或段先装入内存,而将部分暂留在外存,便可启动程序执行。另一方面操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入的内存信息。
虚拟存储器有以下三个主要特征:多次性(指无需在作业运行是一次装入内存)、对换性(无需在作业运行时一直常驻内存)、虚拟性(逻辑上扩充内存的容量)。
请求分页管理方式
请求分页系统中,只要求将当前需要的一部分页面装入内存,便可以启动作业运行。作业执行过程中,访问的页面不在内存中时,再通过调页功能将其调入,同时还可以通过置换将暂时不用的页面换出到外存上,腾出内存空间。
每当所要访问的页面不在内存中时,便产生一个缺页中断,请求调入内存。缺页中断在指令执行期间产生,属于内部异常。
页框分配
给一个进程分配的物理页框的集合就是这个进程的驻留集。
- 分配给一个进程的页框越少,驻留在内存中的进程越多,从而提升CPU利用率。
- 若一个进程在主存中的页面过少,缺页率扔相对较高。
- 若分配过多,由于局部性原理,对该进程缺页率没太明显的影响。
内存分配有固定分配局部置换、可变分配全局置换、可变分配局部置换。
页面置换算法
- 最佳置换算法OPT:淘汰最长时间内不再被访问的页面,无法实现。
- 先入先出置换算法FIFO:优先淘汰最早进入内存的页面,与实际运行时的规律不符。可能出现Belady异常。
- 最近最久未使用算法LRU:选择最长时间未访问过的页面淘汰。是堆栈类算法。
- 时钟置换算法CLOCK
- 改进型时钟置换算法:设置访问为和修改位,最佳淘汰页是访问位和修改位均为0的,其次是访问位是0修改位是1的,然后是访问位为1修改位为0的,最后是访问位修改位均为1的。
抖动:刚刚换出的页面马上又要换入主存,刚刚换入主存的马上又要换出主存。根本原因是系统中同时运行的进程太多。
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2023/10/17/操作系统-第三章/
- 版权声明: 该文章来源及最终解释权归作者所有