操作系统 —— 存储模型

概念

地址重定位

每个进程都有自己的地址空间,一个进程访问时不能访问另一个进程的地址空间。在进程运行前无法计算出物理地址(因为不能确定进程被加载到内存的什么地方)。为了保证CPU执行指令时可正确访问内存单元,需要将用户程序中的逻辑地址转换为运行时可由机器直接寻址的物理地址,这一过程称为 地址重定位

地址

  1. 逻辑地址(相对地址,虚拟地址)
    不能用逻辑地址在内存中读取信息
  2. 物理地址(绝对地址,实地址)
    内存中存储单元的地址,可直接寻址。

重定位

  1. 静态重定位
    当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换。(一般可以由软件完成)
  2. 动态重定位
    在进程执行过程中进行地址变化,即逐条指令执行时完成地址转换。(需要硬件部件支持)

动态重定位的实现

动态重定位的实现

物理内存管理

空闲内存管理

  • 位图
    • 适用于等长划分
    • 每个分配单元对应于位图中的一位,0表示空闲,1表示占用(或者相反)
  • 空闲区表、已分配区表
    • 适用于不等长划分
    • 表中每一项记录了空闲区(或已分配区)的起始位置、长度、标志
  • 空闲块链表
    • 将空闲区表用链串联起来

内存分配算法

① 首次适配 first fit
② 下次适配 netxt fit
③ 最佳适配 beast fit
④ 最差适配 worst fit

内存回收算法

当某一块归还后,前后空闲空间合并,修改内存空闲区表。

伙伴系统

一种经典的内存分配方案。主要思想:将内存按2的幂进行划分,组成若干空闲块链表;查找该链表找到能满足进程需求的最佳匹配块。

算法

  1. 首先将整个可用空间看作一块,2^u。
  2. 假设进程申请的空间大小为s,如果满足‘2^(u-1) < s <= 2^u’,则分配整个块; 否则,将块划分为两个大小相等的伙伴,大小为2^(u-1)。
  3. 一直划分下去直到产生大于或等于s的最小块。

基本内存管理方案1

① 单一连续区

一段时间内只有一个进程在内存。简单,内存利用率低。

② 固定分区

  • 把内存空间分割成若干区域,称为分区
  • 每个分区的大小可以相同也可以不同
  • 分区大小固定不变
  • 每个分区装一个且只能装一个进程

③ 可变分区

  • 根据进程的需要,把内存空闲空间分割出一个分区,分配给该进程
  • 剩余部分成为新的空闲区
  • 外碎片,导致内存利用率下降

碎片问题解决
紧缩技术(memory compaction)
在内存移动程序,将所有小的空闲区合并为较大的空闲区。又称:压缩技术,紧致技术,搬家技术。要考虑的问题:系统开销,移动时机。

基本内存管理方案2

一个进程进入内存中若干个不连续的区域

页式存储管理方案

设计思想

  1. 用户进程地址空间被划分为大小相等的部分,称为页或页面,从0开始编号。
  2. 内存空间按同样大小划分为大小相等的区域,称为页框(page frame),从0开始编号;也称为物理页面,页帧,内存块
  3. 内存分配(规则)
    以页为单位进行分配,并按进程需要的页数来分配;逻辑上相邻的页,物理上不一定相邻。
  4. 典型页面尺寸:4k 或 4M
  5. 逻辑地址组成 —— 20位页号,12位页内地址(偏移)(假设32位机器)。由系统自动划分。
  6. 物理地址组成 —— 页框号+页内偏移

相关数据结构及地址转换

  1. 页表
    页表项 —— 记录了逻辑页号与页框号的对应关系
    每个进程一个页表存放在内存中
  2. 空闲数据管理 —— 用位图
  3. 地址转换(为了加快过程,需要硬件支持)
    CPU取到逻辑地址,自动划分为页号和页内地址,用页号查页表,得到页框号,在与页内偏移拼接成物理地址。
  4. 内碎片
    比如进程需要5页加一条指令,由于这种内存分配方案,我们必须分配6页,这就造成了内存浪费

段式存储管理方案

设计思想

  1. 用户地址空间:按照程序自身的逻辑关系划分为若干个程序段,每个程序短篇都有一个段名
  2. 内存空间被动态划分为若干长度不同的区域,称为物理段,每个物理段由起始位置和长度决定。
  3. 内存分配(规则):以段为单位进行分配,每段在内存中占据连续空间,但隔断之前不相邻。
  4. 逻辑地址组成 —— 段号 + 段内地址

相关数据结构及地址转换

  1. 段表
  2. 物理内存管理
  3. 地址转换(硬件)
    CPU区到逻辑地址,用段号查段表,得到该段在内存的起始位置,与段内偏移地址计算出物理地址。

段页式存储管理方案

设计思想

  1. 用户进程划分:先按段划分,每一段再按页面划分。
  2. 逻辑地址:段号 + 段内地址(页号 + 页内地址)
  3. 内存划分:同页式存储管理方案
  4. 内存分配:以页为单位进行分配

数据结构及有关操作

  1. 段表:记录了每一段的页表起始位置和页表长度
  2. 页表:记录了逻辑页号与页框号的对应关系。每一段有一张页表,一个进程有多个页表。
  3. 空闲内存管理:同页式管理
  4. 内存分配、回收:同页式管理

交换技术

设计思想

内存空间紧张时,系统将内存中某些进程暂时移动到外存,把外存中某些进程换进内存,占据前者所占用的区域(进程在内存与磁盘之前的动态调度)。

  1. 运行时交换的内存:栈和堆
  2. 交换区(页文件):一般系统会指令一块特殊的磁盘区域作为交换空间,包含连续的磁道,操作系统可以使用底层的磁盘读写操作对其高效访问
  3. 何时需发生交换?内存空间不够时换出。
  4. 考虑进程的各种属性;不应患处处于等待I/O状态的进程

posted on 2020-12-13 18:59  Lemo_wd  阅读(324)  评论(0编辑  收藏  举报

导航