【操作系统复习】408王道视频总结 第三章:内存管理

这是我自己看王道系列视频总结的,我是在专注笔记里写好然后粘过来的(给大家安利专注笔记,是我用过无数笔记软件后留下的😂),需要原笔记文件的可以给我评论哈

第一章计算机系统概述 总结:https://blog.youkuaiyun.com/Tangli_yzy/article/details/113737141

第二章进程管理 总结:https://blog.youkuaiyun.com/Tangli_yzy/article/details/113772355

第三章内存管理 总结:

 

内存管理/存储器管理

内存基础知识

  • 内存:存放数据。用于缓和CPU和硬盘之间的速度矛盾
  • 进程运行的基本原理
    • 指令的工作原理:指令的工作基于地址
    • 逻辑地址vs物理地址
      • 逻辑地址:相对于进程起始地址而言
      • 物理地址:实际地址
    • 如何实现地址转换
      • 绝对装入:先前就知道程序将放到哪个位置,编译连接后直接使用物理地址(适用于单道程序环境)
      • 可重定位装入:在程序装入内存的时候进行“重定位”,逻辑变为物理。特点:在一个作业装入内存时必须分配其要求的全部内存空间;进入内存后,运行期间就不能移动,也不能再申请内存空间
      • 动态运行装入:把地址转换推迟到程序真正要执行时才进行,所以装入内存后依然是逻辑地址。需要重定位寄存器(粗放装入模块存放的起始位置)。允许程序在内存中移动,并且可将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
    • 从写程序到程序运行的过程
      • 编辑 源代码.c文件
      • 编译成目标模块 .o文件
      • 链接成一个完整的装入模块(可执行文件) .exe文件
      • 装入:地址转换,装入内存运行
      • 3种链接方式:
        • 静态链接:在程序运行之前,将各个目标模块及所需要的库函数连接成一个完整的可执行文件(形成完整的逻辑地址),之后不再拆开
        • 装入时动态链接将各个目标模块装入内存时,边装入边链接的链接方式(边装入边形成逻辑地址)
        • 运行时动态链接:在程序执行中需要该目标模块时才进行装入并链接(不需要的模块不用链接)。便于修改和更新和实现对目标模块的共享,也可提升对内存的利用率。

内存管理的概念

  • 内存空间的分配与回收
    • 连续分配管理方式
    • 非连续分配管理方式
  • 内存空间的扩充(实现虚拟性)
    • 覆盖技术(下节)
    • 交换技术(下节)
    • 虚拟存储技术
  • 地址转换/重定位
    • os负责实现地址转换
    • 三种装入方式(上节有)
  • 存储保护
    • 在CPU中设置一对上下限寄存器,存放进程的上下限地址。进程的指令要访问某个地址时,CPU检查是否越界
    • 采用重定位寄存器(起始物理地址)和界地址寄存器(最大逻辑地址)进行越界检查。

覆盖与交换

  • 覆盖技术:解决程序大小超过物理内存总和的问题(现在已经不使用了)
    • 思想:将程序分段,常用的段常驻内存,不常用的需要时调入;内存分为一个固定区(常用段,调入后直到运行结束才调出)和若干个覆盖区(不常用段)。按照程序的逻辑结构,不可能被同时访问的程序段共享一个覆盖区。
    • 必须由程序员声明覆盖结构,os完成自动覆盖
    • 缺点:对用户不透明,增加了用户编程负担
  • 交换技术:进程在内存与磁盘间动态调度
    • 中级调度(内存调度):决定将哪个处于挂起状态(暂时换出外存等待)的进程重新调入内存
    • 在外存的什么位置保存被换出的进程?对换区
      • 磁盘空间:
        • 文件区:存放文件,追求存储空间的利用率,采用离散分配方式
        • 对换区(小部分):追求换入换出速度,采用连续分配方式,IO速度比文件区快
    • 什么时候交换?许多进程运行且内存吃紧时,系统负载降低时暂停
    • 换出哪些进程?优先换出阻塞进程,优先级低的进程,有时还考虑进程在内存的驻留时间(避免优先级低的被调入内存后很快调出产生饥饿)
    • PCB会常驻内存,不会被换出

连续分配管理方式

连续分配:为用户进程分配的必须是一个连续的内存空间

内部碎片:分配给某进程的内存区域中,有的地方没用上

外部碎片:内存中某些空闲分区由于太小而难以利用

  • 单一连续分配
    • 内存分为系统区和用户区
    • 内存用户区同一时间中只能有一道用户程序
    • 优点:实现简单,无外部碎片,可采用覆盖技术,不一定需要采取内存保护(因为只有一道程序)
    • 缺点:只能用于单用户单任务的os中;有内部碎片,内存利用率低,存储器利用率极低
  • 固定分区分配:整个用户控件划分为若干固定大小的分区,每个分区只装入一道作业。需要分区说明表(各个分区的大小、起始地址、分配状态)
    • 分区大小相等:适合用一台计算机控制多个相同对象的场合
    • 分区大小不等:灵活,可满足不同大小的进程需求,根据常在系统中运行的作业大小情况进行划分
    • 优点:实现简单,无外部碎片
    • 缺点:当用户程序太大,则必须使用覆盖技术(会降低性能);会产生内部碎片,内存利用率低
  • 动态分区分配:不会预先划分内存分区,在进程装入内存时根据进程的大小动态地建立分区
    • os使用空闲分区表或空闲分区链记录内存的使用情况
    • 当多个空闲分区都满足需求时,采用动态分区分配算法进行分配
    • 如何进行分区的分配和回收:
      • 回收:如果发现有一些空闲分区时相邻的,那么需要将它们合并
      • 分配:没有内部碎片,有外部碎片(用“紧凑”技术解决)
    • 应采用动态重定位装入方式(便于进程移动位置,实现紧凑)

 

动态分区分配算法

  • 首次适应算法First Fit:从低地址进行查找,找到第一个能满足大小的分区
    • 缺点:每次都从低地址查找,导致低地址部分出现很多小的空闲分区
    • 综合看性能是最好的,算法开销小,回收分区后不需对空闲分区队列重新排序
  • 最佳适应算法Best Fit:优先使用更小的空闲区,尽可能多地留下大片空闲区(保证大进程到时能有连续的大片空间)
    • 缺点:会产生很多很小的外部碎片,算法开销大,回收分区后可能需对空闲分区队列重新排序
  • 最坏/大适应算法Worst Fit:优先使用更大的空闲区,这样剩下的空闲区就不会太小,更方便使用
    • 缺点:导致大的连续空闲区迅速用完,大进程可能没有空间可用;算法开销大,回收分区后可能需对空闲分区队列重新排序
  • 邻近适应算法Next Fit:每次都从上次查找结束的位置开始检索(减少了开销),其他的和首次适应算法相同
    • 缺点:导致高低地址部分的空闲分区有相同概率被使用,高地址部分的大分区更可能被使用划分成小分区,最后导致无大分区可用(最大适应算法的缺点)
    • 算法开销小(理由同首次适应算法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值