【操作系统原理概述】第七章 存储管理

第七章 存储管理

7.1 内存管理功能

  • 7.1.1 实现方式

    • (1)结构:CPU CACHE 内存 辅存
    • (2)原理:内存小时,辅存支援内存;暂不用的模块转为辅存,必要时转为内存
  • 7.1.2 地址映射(装入)

    • 定义:程序中的虚拟地址→真实物理地址
    • (1)固定地址映射:编译时直接确定好内存中位置
    • (2)静态地址映射:程序装入(如双击图标时)时操作系统决定
    • (3)动态地址映射:执行过程中被访问才映射
    • (4)代码运行全过程:预编译→编译→汇编→链接→装入→执行
  • 7.1.3 虚拟存储

    • 内存不够时/多程序并发时,在硬盘中开辟的虚拟封闭存储空间(可自己设置总大小)
  • 7.1.4 内存分配

    • 放置策略,调入策略,淘汰策略
  • 7.1.5 存储保护

    • 使用界址寄存器来防止内存越界与越权

7.2 物理内存管理

  • 7.2.1 分区存储管理

    • (1)单一区
    • (2)固定分区:限定区大小
    • (3)动态分区:程序装入时根据程序大小创建分区
  • 7.2.2 分区放置策略

    • (1)空闲区表:表中存储空闲区位置与大小
    • (2)分配过程:从表前往表后,分割空闲区,并保留被分割后的区
    • (3)放置策略:首址适应(按地址编号);最佳匹配(从小区开始);最坏匹配(从大区开始)
    • (4)分区回收:回收程序释放分区后登记如表(回收算法处理回收后的区间合并或插入)
  • 7.2.3 内存覆盖技术

    • (1)目的:小空间运行大程序
    • (2)分区:常驻区(某段),覆盖区(多段数据共享使用)
  • 7.2.4 内存交换技术

    • (1)原理:内存不够时将进程写入到硬盘(换出),进程需要运行时重新写入到内存中(换入)
    • (2)地址重定位:将原位置替换到任一空位置
  • 7.2.5 内存碎片

    • (1)定义:动态分区时产生的过小的空闲区,难以利用
    • (2)解决方案:规定门限制(不允许产生门限大小的区间);内存拼接技术(释放回收时/没有足够大区间时/定期时将所有小空闲区集中构成大空闲区;解除程序占用连续内存才能运行的限制

7.3 虚拟内存管理

  • 7.3.1 页式虚拟内存管理概念

    • (1)使用:只装入很小的代码和数据进入内存,其与需要时再装入(内存覆盖技术)
    • (2)概念:虚拟进程空间和内存空间划成等大小的小片,进程片为页,内存片为页框
  • 7.3.2 页表和页式系统映射

    • (1)页式系统地址:虚拟地址VA分解为页号P和偏移W,单位均为B(VA = 页长*P + W)
    • (2)页表:记录页与页框之间的对应关系(页号对应页框号)
    • (3)页式地址映射:虚拟地址→物理地址(MA = P’(页框号)*页大小 + W)
  • 7.3.3 快表技术和页面共享技术

    • (1)快表机制:CACHE中的页表为快表,内存中的页表为慢表;搜索时先搜快表,搜不到则搜慢表(搜到更新)
    • (2)页面共享:访问相同代码段,拥有不同数据段(如.dll库访问,访问的是相同的页框号)
  • 7.3.4 缺页中断

    • (1)分级存储:CACHE + 内存 + 辅存
    • (2)带中断位的页表:加上中断位(1在内存,0不在)和辅存地址
    • (3)带访问位和修改为的页表:访问位0未访问1已访问;修改位0未修改1已修改
    • (4)缺页中断:所访问的页不在内存中时中断(调用中断处理程序来处理)
    • (5)缺页率:f = 缺页次数/访问页面总次数
  • 7.3.5 页面淘汰

    • (1)页面抖动:页面在内存和辅存间频繁交换
    • (2)最佳算法(OPT):淘汰以后不需要/最远的将来才会用的页面(无法实现)
    • (3)先进先出淘汰算法(FIFO):淘汰内存中停留时间最长的页面
    • (4)最久未用淘汰(LRU):淘汰最长时间未被使用的页面
    • (5)LRU实现方法:硬件层通过移位寄存器R不断左移与重置,软件层通过周期置0与访问重置1
    • (6)最不经常使用(LFU):淘汰当前为止被访问次数最少的页面
  • 7.3.6 缺页因素与页式系统缺点

    • (1)缺页原因:淘汰算法
    • (2)页面大小:常见1,2,4KB,其中4KB最多
    • (3)程序编写:OS实现行遍历,故遍历数组时推荐行
  • 7.3.7 段式与段页式存储

    • (1)进程分段:进程以逻辑分为多段,每段有段名,长度不定(段号S,段偏移W)
    • (2)段表:记录每段在内存映射中的位置
    • (3)映射:逻辑地址VA(S与W)→查询段表(B基地址与L段长)→基地址MA(B + W)
    • (4)段页存储:段中划分页面,即段号S + 段内偏移W’(页号P + 页内偏移W)
    • (5)段页地址映射:一个进程一个段表,一个段一个页表,VA(S,W’)→(S,P,W)→MA

7.4 Intel CPU与LINUX内存管理

  • 7.4.1 Intel CPU物理结构

    • (1)模式切换:开机时为实模式,运行进程时为保护模式
    • (2)控制寄存器:CR0(低五位为机器状态字),CR2(引发缺页的地址),CR3(高20位位页目录地址)
    • (3)三种地址:逻辑地址→线性地址→物理地址
  • 7.4.2 Intel CPU段机制

    • (1)段与描述符:描述段的属性
    • (2)描述符表:GDT全局描述符表(仅1个,所有进程可用),LDT局部描述符表(每个进程特有的),IDT中断描述符表(包含中断服务程序)
    • (3)选择子:通过此来选择目标段的描述符(索引+TI(GDT或LDT)+特权级别)
  • 7.4.3 LINUX页面机制

    • (1)硬件分页:默认4KB的页面大小
    • (2)传统分配:4G内存,每页与页框大小为4KB,页表每个记录占4B;
      进程的页数 = 4G/4K = 1M个页,则进程页表中记录1M条记录;
      页表所占内存 = 1M记录*4B = 4M,则页表所用页框 = 4M / 4K = 1K页框
    • (3)二级页表:超大的4M页表分成多个小页表来存储,而存储这些小页表位置的为“页目录”
      在这里插入图片描述
    • (4)LINUX三级页表:页全局目录 + 页中继目录(0位未使用)+ 小页表 + 偏移
  • 7.4.4 LINUX对段的支持

    • (1)4G虚拟空间分层:3G用户空间,1G内核空间
    • (2)LINUX段机制:进程建立时通过段机制对寄存器进行初始化,start_thread

相关思维导图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方寸间沧海桑田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值