【清华大学】深入理解操作系统(陈渝) 第四章
目录
- 非连续内存分配的必要性
- 连续内存分配的缺点
- 非连续内存分配的优点
- 非连续内存分配的缺点
- 非连续内存分配
- 分段寻址方案
- 分页(Paging)
- 帧(Frame)**
- 页表(Page Table)
- 分页机制的性能问题
非连续内存分配的必要性
连续内存分配的缺点
- 分配给一个程序的物理内存是连续的
- 内存利用率低
- 有外碎片 / 内碎片的问题
非连续内存分配的优点
- 一个程序的物理地址空间是非连续的
- 更好的内存利用和管理
- 允许共享代码与数据(共享库等…)
- 支持动态加载和动态链接
非连续内存分配的缺点
1.建立虚拟地址和物理地址的转换难度大
- 软件方案
- 硬件方案(采用硬件方案) : 分段 / 分页
非连续内存分配
分段(Segmentation)
段 : 在程序中会有来自不同文件的函数 ; 在程序执行时, 不同的数据也有不同的字段, 比如 : 堆 / 栈 / .bss / .data 等
**分段 : **更好的分离和共享
程序的分段地址空间如下图所示 :
分段寻址方案
逻辑地址空间连续,但是物理地址空间不连续,使用映射机制进行关联.
一个段 : 一个内存"块"
程序访问内存地址需要 : 一个二维的二元组(s, addr) → (段号, 地址)
操作系统维护一张段表, 存储(段号, 物理地址中的起始地址, 长度限制)
物理地址 : 段表中的起始地址 + 二元组中的偏移地址
分页(Paging)
分页地址空间**
划分物理内存至固定大小的帧(Frame)
- 大小是2的幂, 512 / 4096 / 8192
划分逻辑地址空间至相同大小的页(Page)
- 大小是2的幂, 512 / 4096 / 8192
建立方案 → 转换逻辑地址为物理地址(pages to frames) - 页表
- MMU / TLB
帧(Frame)**
物理内存被分割为大小相等的帧. 一个内存物理地址是一个二元组(f, o) → (帧号, 帧内偏移)
帧号 : F位, 共有2^F个帧
帧内偏移 : S位, 每帧有2^S个字节
物理地址 = 2^S * f + o
(例子 : 16-bit地址空间, 9-bit(512 byte) 大小的页帧 物理地址 = (3,6) 物理地址 = 2^9 * 3 + 6 = 1542)
- 分页和分段的最大区别 : 这里的 S 是一个固定的数, 而分段中的长度限制不定
页(Page)
一个程序的逻辑地址空间被划分为大小相等的页. 页内偏移的大小 = 帧内偏移的大小 页号大小 <> 帧号大小
一个逻辑地址是一个二元组(p, o) → (页号, 页内偏移)
页号 : P位, 共有2^P个页
页内偏移 : S位, 每页有2^S个字节
虚拟地址 = 2^S * p + o
页寻址方案
操作系统维护一张页表, 页表保存了逻辑地址——物理地址之间的映射关系
存储 : (页号, 帧号)
- 逻辑地址空间应当大于物理内存空间
- 页映射到帧
- 页是连续的虚拟内存
- 帧是非连续的物理内存(有助于减少碎片的产生)
- 不是所有的页都有对应的帧
页表(Page Table)
页表概述
每一个运行的程序都有一个页表
- 属于程序运行状态, 会动态变化
- PTBR : 页表基址寄存器
转换流程
CPU根据程序的page的页号的若干位, 计算出索引值index, 在页表中搜索这个index, 得到的是帧号, 帧号和原本的offset组成物理地址.
页表中还有一些特殊标志位
- dirty bit,
- resident bit, (0 : 对应的物理页帧在内存中不存在 ; 1 : 存在)
- clock /reference bit
转换实例
16位地址的系统
- 32KB的物理内存
- 每页的 1024 byte
逻辑地址空间 : (4, 0) … (3, 1023)
页表 :
Flags | Frame nums
1 0 1 0 0 0 0 0 → 内存访问异常(可能要杀死程序)
0 1 1 0 0 1 0 0 → 页帧是4 偏移是 1023 → 物理地址 (4, 1023)
分页机制的性能问题
访问一个内存单元需要2次内存访问
- 一次用于获取页表项
- 一次用于访问数据
页表可能非常大
- 64位机器如果每页1024字节, 那么一个页表的大小会是多少?(2^64 / 2^10 = 2^54 存放不下)
- 每一个运行的程序都需要有一个页表
如何处理?
- 缓存(Caching)
- 间接(Indirection)访问
转换后备缓冲区(TLB)
缓解时间问题
Translation Look-aside Buffer(TLB) 是一个缓冲区. CPU中有快表TLB(可以将经常访问的页表存放在这边)
缓存近期访问的页帧转换表项
- TLB使用关联内存实现, 具备快速访问性能
- 如果TLB命中, 物理页号可以很快被获取
- 如果TLB未命中,对应的表项被更新到TLB中(x86的CPU由硬件实现, 其他的可能是由操作系统实现)
二级/多级页表
时间换空间
二级页表
- 将页号分为两个部分, 页表分为两个, 一级页号对应一级页表, 二级页号对应二级页表.
- 一级页号查表获得在二级页表的起始地址,地址加上二级页号的值, 在二级页表中获得帧号
- 节约了一定的空间, 在一级页表中如果resident bit = 0,可以使得在二级页表中不存储相关index,而只有一张页表的话, 这一些index都需要保留
多级页表
- 通过把页号分为k个部分, 来实现多级间接页表, 建立一棵页表"树"
反向页表
解决大地址空间问题
目的 : 根据帧号获得页号
反向页表只需要存在一张即可
- 有大地址空间(64-bits), 前向映射页表变得繁琐. 比如 : 使用了5级页表
- 不是让页表与逻辑地址空间的大小相对应, 而是当页表与物理地址空间的大小相对应. 逻辑地址空间增长速度快于物理地址空间
基于页寄存器(Page Registers)的方案
存储 (帧号, 页号) 使得表大小与物理内存大小相关, 而与逻辑内存关联减小.
每一个帧和一个寄存器关联, 寄存器内容包括 :
- resident bit : 此帧是否被占用
- occupier : 对应的页号 p
- protection bits : 保护位
实例 :
- 物理内存大小是 : 4096 * 4096 = 4K * 4KB = 16 MB
- 页面大小是 : 4096 bytes = 4 KB
- 页帧数 : 4096 = 4 K
- 页寄存器使用的空间(假设8 bytes / register) : 8 * 4096 = 32Kbytes
- 页寄存器带来的额外开销 : 32K / 16M = 0.2%
- 虚拟内存大小 : 任意
优势 :
- 转换表的大小相对于物理内存来说很小
- 转换表的大小跟逻辑地址空间的大小无关
劣势 :
- 需要的信息对调了, 即根据帧号可以找到页号
- 如何转换回来? (如何根据页号找到帧号)
- 在需要在反向页表中搜索想要的页号
基于关联内存(associative memory)的方案
硬件设计复杂, 容量不大, 需要放置在CPU中
如果帧数较少, 页寄存器可以被放置在关联内存中
在关联内存中查找逻辑页号
成功 : 帧号被提取
失败 : 页错误异常 (page fault)
限制因素:
- 大量的关联内存非常昂贵(难以在单个时钟周期内完成 ; 耗电)
基于哈希(hash)的方案
哈希函数 : h(PID, p) 从 PID 标号获得页号
在反向页表中通过哈希算法来搜索一个页对应的帧号
- 对页号做哈希计算, 为了在帧表中获取对应的帧号
- 页 i 被放置在表 f(i) 位置, 其中 f 是设定的哈希函数
- 为了查找页 i ,执行下列操作 :
1.计算哈希函数 f(i) 并且使用它作为页寄存器表的索引, 获取对应的页寄存器
2.检查寄存器标签是否包含 i, 如果包含, 则代表成功, 否则失败
【清华大学】深入理解操作系统(陈渝) 第四章相关推荐
- 【清华大学】操作系统 陈渝——Part6 全局页面置换算法
[清华大学]操作系统 陈渝--Part6 局部页面置换算法 6.8 局部页面替换算法的问题,工作集模型 局部页面替换算法的问题 工作集模型 6.9 全局页面置换算法 1. 工作集页置换算法 2. 可变 ...
- 【清华大学】操作系统 陈渝 Part3 ——物理内存管理 之 连续内存分配
[清华大学]操作系统 陈渝 Part3 --物理内存管理 之 连续内存分配 3.1计算机体系结构及内存分层 计算机体系机构 内存体系层次 管理内存方法 3.2地址空间 & 地址生成 地址空间定 ...
- 《深入理解分布式事务》第四章 分布式事务的基本概念和理论知识
<深入理解分布式事务>第四章 分布式事务的基本概念和理论知识 文章目录 <深入理解分布式事务>第四章 分布式事务的基本概念和理论知识 一.分布式系统架构 1.简介 2.分布式事 ...
- 操作系统考研复习——第四章(文件管理)
操作系统考研复习--第四章(文件管理) 4. 文件管理 4.1 文件管理基础 4.1.1 文件的概念 1. 数据项.记录和文件 2. 文件属性 3. 文件系统的接口 4. 文件的基本操作 5. 文件的 ...
- 操作系统课后答案第四章
**操作系统课后答案** 第四章 存储器管理 1.为什么要配置层次式存储器? 答:设置多个存储器可以使存储器两端的硬件能并行工作:采用多级存储系统,特别是Cache 技术,是减轻存储器带宽对系统性能影 ...
- 【高级操作系统-陈渝】tendency_Of_OS---PerformanceReliabilityCorrectness
目录 1.Performance 2.Reliability 3.Correctness 1.Performance 2.Reliability 3.Correctness
- 操作系统学习笔记 第四章:存储器管理(王道考研)
本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...
- [深入理解Android卷一全文-第四章]深入理解zygote
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerService
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...
- 华文慕课北大操作系统陈向群第二章课后题解析
1.(5分) 控制和状态寄存器用于控制处理器的操作,在某种特权级别下可以访问.修改.下列哪一个不是控制和状态寄存器 A. 程序计数器(PC) B. 指令寄存器(IR) C. 程序状态字(PSW) D. ...
最新文章
- docker run后台启动命令_Docker命令详解之run
- python基础教程第二版和第三版哪个好-最好的Python入门教材是哪本?
- 【Linux 内核】Linux 内核源码几个重要的入口源文件及函数介绍 ( 系统初始化 | 内存管理 | 虚拟文件系统 | 网络管理 )
- android 定位信息存哪,安卓手机便签系统存储位置在哪
- Spring 容器(Spring 的上下文)
- 爱奇艺的测试工程师笔试题
- grep 多模式匹配
- c语言复杂数据类型存储,C语言基础-复杂数据类型
- PHP九宫格翻牌抽奖,PHP 九宫格抽奖代码
- deepin下安装QT
- WEB程序设计 第7版.pdf
- 我应该怎么学习SAP?
- Python暂停的几种方法
- 50元打造双网卡负载均衡服务器(Network Load Balancing)
- UITextView内边距设置
- Linux树莓派实战案例论文,树莓派|树莓派使用实例之:2 Pi R
- 航天工程系统是什么?
- 广告系统架构:要啥自行车!
- 马云是唯一出现在西雅图科学馆名人栏的中国人
- java字符串转数组遍历,深入分析