第二轮408复习笔记 操作系统 第三章内存管理

第二轮408复习笔记 操作系统 第三章内存管理

内存管理的概念

内存管理的基本原理和要求

  • 内存空间的分配与回收:有操作系统负责内存空间的分配和管理,记录内存的空闲空间、内存分配情况,并回收已结束进程所占用的内存空间
  • 地址转换:由于程序的逻辑地址与内存的物理地址不可能一致,因此存储管理必须提供地址变换功能
  • 内存空间的扩充:利用虚拟存储技术从逻辑上扩充
  • 内存共享
  • 存储保护

程序的链接与装入

创建进程首先将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个不走

  • 编译:由编译程序将用户源代码编译程若干个目标模块
  • 链接: 由链接程序将编译后形成一组目标模块,以及它们所需的库函数链接在一起,形成一个完整的装入模块
    *静态链接 在程序运行之前,先将各目标模块以及它们所需的库函数链接成一个完整的装入模块,以后不再拆开
    • 装入时动态链接:边装入变链接
    • 运行时动态链接,边运行变链接
  • 装入:由装入程序将装入模块装入内存中运行
    • 绝对装入:绝对装入是使用的是绝对地址,可在编译或汇编给出,也可由程序员直接赋予。
    • 可重定位装入:经过编译链接后的装入模块的始址通常从0开始,程序使用指令和数据地址都是相对于始址的,此时应该采用可重定位装入方式
    • 动态运行时装入:动态运行时装入也称为动态重定位。程序若要在内存中发生移动。则要采用动态的装入方式。装入程序将装入模块装入内存后,并不会立即将装入模块的相对地址改为绝对地址,而是将这种地址推迟到程序真正要执行时候才执行

内存保护

每个进程都有单独的内存空间。内存分配前需要保护操作系统不受用户进程的影响,内存保护可采取两种方法:

  • 在CPU中设置一对上、下限寄存器
  • 采用可重地位寄存器和界地址寄存器进行越界检查
    内存共享
    并不是所有进程的都适合共享,只有那些只读的区域才可以共享。可重入代码也称纯代码,一个允许多个进程同时访问但不允许被任何进程修改的代码内存共享的方式:段共享和页共享方式,内存映射文件。

连续分配管理方式

  • 单一连续分配:内存被分为系统和用户区,系统仅操作系统,用户区仅一道用户程序
  • 固定分区分配:将用户内存空间划分为固定大小的分区,每个分区只装入一道作业,在划分分区时有两种方法:分区大小相等,分区大小不等。
    为了便于分配和回收,建立一张分区使用表,分区大小排队,各表项包括对应分区的始址、大小及状态

动态分区分配

动态分区分配的基本原理:动态分区分配也称可变分区分配,是指进程装入进程的实际

动态分区分配的基本原理:动态分配也称可变分区分配,是指进程装入内存时,根据进程的实际需要,动态地为之分配内存,并使分区的大小正好适合进程的需要,因此系统分区的大小和数量是可变的

设置一条空闲分区链,可以按始址排序。分配装入进程,余下部分仍然留在空间分区链中。回收内存时候,从空闲分区链中找到相应的插入点

基于顺序搜索的分配算法

  • 首次适应算法
  • 临近适应算法
  • 最佳适应算法
  • 最坏适应算法

基于索引搜索的分配算法

索引分配算法的思想是,根据其大小对空闲区的分类,对于每类空闲分区,单独设立一个空闲分区链,并设置一张索引表来管理空闲分区链。

  • 快速适应算法:空闲的分类根据进程常用的空间大小进行划分。分配过程分为两步:
    1. 根据进程长度,在索引表找到能容纳它的最小空闲分区链表
    2. 然后从链表中取出第一块进行分配。优点是查找效率高、不产生内部碎片;缺点是回收分区要有
  • 伙伴系统:规定所有的分区的大小均为2的k次幂
  • 哈希算法:构建一张以空闲分区大小为关键字的哈希表,每个表项纪录一个空闲分区的头指针

基本分页管理

分页思想:将内存分为若干固定大小的分区,称为页框,进程的逻辑地址空间也分为块大小相等的若干区域,称为页

基本地址变换机构

为了提高地址变换的速度,在系统中设置PTR,存放页表的始址F和页表长度M,在单CPU系统中只设置一个页表寄存器。平时,进程未被执行时,页表的始址和页表长度存放在本进程的PCB中,当进程被调度执行时,才将页表始址和页表长度装入页表寄存器中

基本分段存储管理

分段管理的方式提出考虑了用户和程序员,以满足方便编程、信息共享、动态增长

分段

分段系统将用户进程的逻辑空间划分为大小不等的段。用户进程由主程序段、两个子程序段、栈段、数据段的一个连续空间,并分配一个连续的地址空间
段表

每个进程都有一张逻辑空间与内存空间映射的段表,进程的每个段对应一个段表项,段表项记录了该段在内存的始址和段的长度

分页和分段的对比

  • 页是信息的物理单位
  • 页的大小固定且由系统决定,段的长度不固定
  • 分页的地址空间是一维,分段管理的地址空间是二维的

段的共享与保护

  • 在分段系统中不管段有多大,只需为该段设置一个页表项
  • 在分段的保护方法有两种:存取控制保护,另一种是地址越界保护

段页式管理

错题回顾

  • 12 可重定位程序在重定位的过程中执行,重定位寄存器用于存放进程的基地址,地址变换机构用于将转换逻辑地址
  • 26 在段式存储中,若有些段被进程共享,可用共享段表描述这些段,共享物理空间只要各自段表中指向同一空间即可
  • 33 程序的动态链接与程序的逻辑结构相关,分段存储管理奖程序按照逻辑段进行划分有利于动态链接
  • 64 链接后形成的目标地址就是逻辑地址

虚拟内存管理

基于局部性原理,在程序装入时,只需将程序当前运行用到的少数页面装入内存,而将其余部分暂留在外存,便可启动程序执行。在程序执行过程中,所访问的信息不在内存时,由操作系统将所需的外存调入内存忙着就请求调页功能。当内存不够时,由操作系统负责将内存中暂时用不到的信息换出外存,从而腾出空间将要调入内存的信息,这就是页面置换功能。

虚拟存储器的三个主要特征:

  • 多次性,无须一次性全部装入内存
  • 对换性,作业运行时无需一直常驻内存
  • 虚拟性,从逻辑上扩充了内存的容量

页框分配

操作系统给特定进程分配页框的集合就是这个进的驻留集

  • 驻留集越小,驻留在内存的进程就越多,可以提高多道程序的并发度,但分配给每个进程的页框太少,导致缺页率较高
  • 驻留集越大,当分配给进程的页框超过某个数目时,再为进程增加页框对缺页率的不明显

内存分配策略

  • 固定分配局部置换:为每个进程都分配固定数目的物理块,在进程运行期间不变。所谓局部置换是指在运行过程中缺页,则只能从该进程的页面中选出一页来
  • 可变分配全局置换:若进程在运行时发生缺页,则从空闲物理块队列中取出一块分配给该进程
  • 可变分配局部置换:先分配一定数目的物理块,当进程发生缺页时,只允许从该进程在内存的页面选出一页换出,频繁发生缺页时,再给分配。当缺页率较低适当减少

物理块调入算法

  • 平均分配
  • 按比例分配
  • 优先权分配

调入页面

  • 预调页:预测不久之后可能被访问的页面,将它们预先调入内存
  • 请求调页策略:进程在运行中需要访问的页面不在内存,便提出请求,由系统将其所需页面调入内存

从何处调入页面

请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区,也称交换区。对换区采用连续分配方式,而文件区采用离散方式,因此对换区比文件区更快。

  • 系统拥有足够的对换区空间:从对换区调入
  • 系统缺少足够的对换区空间:不会修改的文件在文件区,会修改的文件在对换区
  • UNIX 与进程有关的文件都房子文件区,曾经运行过但换出的页面房子对换区

页面置换算法

  • OPT 最佳置换算法:最长时间内不再被访问的页面
  • 先进先出(FIFO):最早进入内存的页面
  • 最近最久未使用的置换算法
  • 时钟置换算法: 为每个页面设置一个访问为,当某页首次被装入或被访问时,其访问位设为1.算法将内存的页面链接成一个循环队列,并有一个替换指针与之相联。当某一页被替换时,指针指向替换页面的下一页
  • 改进型CLOCK置换算法: 在改进型CLOCK算法中,除了考虑使用使用情况,还增加了置换代价:
    • A = 0,M = 0,最近未被访问,且未被修改,最佳的淘汰页面
    • A = 0, M = 1,最近未被访问,且已被修改,是次佳的淘汰页面
    • A = 1, M = 0,最近已被访问,但未被修改
    • A = 1,M = 1,最近已被访问,且被修改

算法的执行过程:

  • 第一轮 从当前的指针开始,寻找A = 0,且 M = 0的页面不修改
  • 第二轮 寻找A = 0且 M = 1,将第一个2类页面作为淘汰页。第二轮访问位置0
  • 重复以上过程直到找到

内存映射文件

内存映射文件是操作系统向应用程序提供的一个系统调用,它与虚拟内存有些相似,在磁盘文件与进程的虚拟空间建立映射关系。进程通过该系统调用将文件映射其虚拟地址空间的某个区域,之后就用访问内存方式读写文件。

进程可通过共享内存进行通信,共享内存是通过映射相同文件到通信进程的虚拟地址来实现的

错题回顾

  • 17题 虚拟存储器的最大容量是由计算机的地址结构决定的
相关推荐
guoruijun_2012_4几秒前
fastadmin多个表crud连表操作步骤
android·java·开发语言
金星娃儿5 分钟前
MATLAB基础知识笔记——(矩阵的运算)
笔记·matlab·矩阵
Hello-Brand10 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码16 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.18 分钟前
Pod控制器
java·开发语言
2的n次方_21 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55121 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.21 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七26 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15133 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全