操作系统学习笔记(4. 存储管理)

个人用书:操作系统教程 第五版 费翔林
学习视频: 王道计算机考研 操作系统.

内存

什么是内存,有何作用

内存可存放数据。程序执行前放到内存中才能被CPU处理——缓和CPU与硬盘之间的矛盾。

内存从0开始,每一个地址对应一个存储单元。

  • 按字节编址:一个单元是1B,8位。
  • 按字编址:一个单元是2B,16位。

指令的工作原理

内存中有程序段,数据段。

  • 逻辑地址:相对于进程起始地址而言的地址。
  • 物理地址:内存中的绝对地址。

程序经过编译链接后生成的指令中指明的是 逻辑地址。

装入的三种方式

源程序要运行先要通过三步:编译,链接,装入

绝对装入

定义:在编译时,如果直到程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

绝对装入只适用于单道程序环境。

可重定位装入

静态重定位:又称可重定位装入。编译,链接后的地址都是从‘0’开始,装入内存的时候,对地址重定位,将逻辑地址变成物理地址。(装入的时候一次性完成)

必须分配其要求的全部内存空间,没有足够的内存,就不能装入作业。
运行期间程序就不可移动,也不能再申请内存空间。

动态运行时装入

动态重定位:在真正需要执行的时候才开始地址转换。装入的依然是逻辑地址,需要一个重定义寄存器的支持。

动态重定位允许程序在内存中发生移动。

内存管理的概念

内存管理需要完成的几个工作:(下面会展开细讲)

  1. 内存的分配和回收。
  2. 操作系统需要提供某种技术从逻辑上对内存空间扩充。
  3. 提供地址转换功能,把 逻辑地址 和 物理地址 相互转换。(上面的三种装入方式)
  4. 内存保户:保证各个进程在各自的内存空间运行,相互不能干扰。

内存保护的两种方法:

  1. 在CPU设置上下寄存器。
  2. 采用重定位寄存器,界地址寄存器进行越界检查。重定位寄存器中是 逻辑地址。 界地址寄存器中是 物理地址。

覆盖与交换

覆盖技术

覆盖技术:解决程序大小超过物理内存总和的问题。

覆盖技术的思想:将程序分段,常用的段常驻内存(固定区,调入后不调出),不常用的使用的时候调入内存(覆盖区,不用的时候调出)。

缺点:必须程序员声明覆盖结构,OS完成覆盖,对用户不透明,增加编程负担。

交换技术

交换技术:内存空间紧张,把内存中某些进程暂时换出内存,把外存中已经有运行条件的进程换入内存。(回顾中级调度,挂起相关内容,可以去看图。)

  1. 具有对换功能的OS中,把磁盘分为 文件区 和 对换区。总之对换区的i/o比文件区快。
  2. 交换通常在许多进程且内存吃紧时运行。
  3. 可优先换出阻塞进程,换出优先级低的进程。

!!!PCB不会被换出内存。

连续分配管理方式

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

单一连续分配

内存被分为 系统区 和 用户区。

内存中只能有一道用户程序。

优点:实现简单,无外部碎片。不一定需要采取内存保护。
缺点:只适用于单用户,单任务的OS,有内部碎片(没有用上的内存区域)

固定区分配

将整个用户空间划分为若干个固定大小的分区,每个分区中只放入一个作业。

  • 分区大小相等:缺乏灵活性,但是适用于一台计算机控制多个相同对象的场合。
  • 分区大小不等:增加灵活性,可以满足不同大小的进程需求。

OS需要建立一个分区说明表,记录每个分区的分配与回收,表项需要包括对应分区的大小,起始地址,状态。

优点:实现简单,无外部碎片。
缺点:用户程序太大可能分区都不满足需求。也会产生内部碎片

动态分区分配

又称可变分区分配。不会预先划分内存分区,而是在装入内存时,根据进程的大小动态的建立分区。

  1. OS会使用 空闲分区表 或 空闲分区链 记录内存的使用情况。

  2. 把一个新作业装入内存时,需要按照一定的动态分区算法。

  3. 需要一个表记录内存的信息,回收时会把空闲分区和回收的分区合并成一个大的分区。各表的顺序不一定递增,需要分配算法。

    动态分区分配没有内部碎片,但是有外部碎片(一些太小的分区太小难以使用)。可以通过紧凑技术来解决外部碎片。

动态分区分配算法

首次适应算法

算法思想:每次从低地址开始查找到,找到一个满足大小的分区。
实现:空闲分区地址递增的次序排列。每次分配内存时顺序查找空闲分区链。

最佳适应算法

算法思想:为了保证大进程到来有大空间,可以尽可能多留下大片的空闲区。
实现:空闲分区按容量递增次序链接。每次分配内存查找空闲分区链。

缺点:会留下越来越多的,很小的难以使用的内存块。

最坏适应算法

算法思想:每次分配优先使用最大的空闲区。防止留下小碎片。
实现:空闲分区按容量递减次序排列。每次分配内存查找空闲分区链。

缺点:每次都使用大分区,会导致分区越来越小。

邻近适应算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值