第二十二讲 授课教师 : 陆俊林王箫音 2012 年春季学期
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 教材相关章节 : 微型计算机基本原理与应用 ( 第二版 ) 第 15 章 80x86/Pentium 保护模式原理与结构 1
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 2
回顾 : 三种工作模式之间的转换 从加电启动或复位到操作系统运行之前 操作系统和应用程序的运行 运行兼容 8086 程序 加电启动 实模式 设置 PE=1 设置 PE=0 保护模式 作业切换中断返回 中断 异常 复位复位复位 虚拟 8086 模式 * 注 :PE 即 保护模式允许, 是 80x86 控制寄存器 CR0 中的控制位 3
回顾 : 实模式下物理地址的产生 逻辑地址 段寄存器段基值 (16 位 ) 移位器 偏移量 (16 位 ) 物理地址 = 段基值 16+ 偏移量 段基值 (16 位 ) 0000 地址加法器 物理地址 物理地址 (20 位 ) 4
分段式存储系统示意 边界寄存器 段边界 <_ 越界? MOV AX, [10H] 有效地址 + 物理地址 当前段 基址寄存器 程序地址空间 段基址 存储器 5
分段式存储系统的特点 存储器被划分为不同大小的段 (Segment) 必须为程序分配连续的存储器空间 当程序需要较大的空间时, 难以充分利用若干个不连续的较小的段, 导致碎片问题严重 6
存储器碎片 (Memory Fragmentation) User 4&5 Arrive User 2&5 Leave Free OS Space OS Space OS Space User 1 16KB User 1 16KB User 1 16KB User 2 24KB User 2 24KB 24KB 32KB User 4 16KB 16KB User 4 16KB 16KB User 3 32KB User 3 32KB User 3 32KB 24KB User 5 24KB 24KB 7
如何缓解碎片问题? 分页式存储系统 存储器被划分为固定大小的页 (Page) 可以为程序分配不连续的存储器空间 当程序需要较大的空间时, 可以充分利用若干不连续的页面, 有效缓解碎片问题 8
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 9
分页式存储系统示意 0xFFFFF 0xFFFFE 页 (Page) 9 虚拟地址空间 0x00006 0x00005 0x00004 0x00003 0x00002 0x00001 0x00000... 8 7 6 5 4 3 2 1 0 物理存储器 10
虚拟页和页帧 ( 虚拟页号 ) virtual page number 虚拟页 (Virtual Page) 页帧 (Page Frame) page frame number ( 页帧号 ) 11
地址映射 (Mapping) 虚拟页到页帧的对应 一个虚拟页只能对应到一个页帧 一个页帧有可能和多个虚拟页对应 如何管理地址映射? 12
页表 (Page Table) 页表由若干页表项组成 页表项的内容通常包括 : 地址映射 : <virtual page number, page frame number> 读写权限 :Read/Write/Execute 访问情况 :Reference/Modify 每个进程都拥有独立的页表 13
页表如何存放 页表所占用的存储空间与进程所使用的虚拟地址空间及系统中进程的数目成正比 由于占用空间较大, 页表通常存放在主存中 每次访存请求都要额外增加一次存储器访问 1 使用虚拟地址访问页表, 从页表项中获取物理地址 ( 额外的存储器访问 ) 2 使用物理地址进行存储器访问 14
分页式存储系统的访存过程示意 页 (Page) 进程 1 的页表 进程 1 虚拟地址空间 进程 2 的页表 存储器 进程 2 虚拟地址空间 15
存储器容量的限制 20 世纪 60 年代初期, 很多应用程序所需要的地址空间已经大于存储器容量 分页式存储系统的特点 优势 : 能够有效缓解碎片问题 不足 : 需要一次性地将程序的指令和数据全部加载到主存中, 才能开始执行程序 16
早期解决方法 :Overlay 实现方式 编程时将程序划分为若干个相对完整的块 通过编程指定这些块的加载顺序 通过编程指定哪些块可以同时加载 这给程序员进行编程带来很大的限制和负担 17
按需调页 (Demand Paging) 只有当 CPU 真正需要数据时, 才从二级存储中将需要的页面调入主存中 主存只需要存放当前访问的页面, 程序就可以执行, 从而摆脱了主存容量对程序的限制 1962 年, 由曼彻斯特大学的 Tom Kilburn 提出, 并在 Ferranti 公司设计制造的 Atlas 计算机中实现 18
Atlas 计算机的存储系统结构 Effective Address Compare the effective address against all 32 PARs normal access page fault 缺页 Initial Address Decode Page Address Registers 0... 31... 主存 32 pages ROM 16 pages 2 subsidiary pages 二级存储 192 pages System Code System Data 19
缺页 (Page Fault) 处理步骤 1. 为引发缺页的虚拟地址 ( 简称缺页地址 ) 在主存中寻找空闲页帧 2. 如果没有空闲页帧, 选择主存中已使用的页帧作为替换页帧 3. 将替换页帧的数据回写二级存储或丢弃 4. 将缺页地址的数据从二级存储调入主存中已分配的物理页帧 ( 空闲页帧或替换页帧 ) 5. 在页表中建立缺页地址到物理页帧的映射关系 20
层级页表示例 Virtual Address Level1 Level2 Page Offset Page table + base register L1 Page Table Page Table Entry... + L2 Page Table Page Table Entry... Physical Address Page frame number Page Offset 21
对比 :Caching vs. Demand Paging Cache Main Memory Main Memory 二级存储 Caching Cache line Block(~32 bytes) Cache miss rate(1% to 20%) Cache hit(~2 cycles) Cache miss(~100 cycles) A miss is handled in hardware Demand Paging Page frame Page(~4K bytes) Page miss rate(<0.001%) Page hit(~100 cycles) Page miss(~5m cycles) A miss is handled mostly in software 22
虚拟存储的主要作用 提供一种理想中的容量非常大的存储器 多个进程的存储器空间总和可大于物理存储器 每个进程的存储器空间可大于物理存储器 提供各个进程存储区域之间的保护与共享 将各个进程的数据和指令进行隔离和保护 提供多个进程之间进行数据共享的机制 对实际的物理存储器资源进行统一管理 每个进程都可以视为独自占有物理存储器资源 虚拟存储的主要代价 : 增加了地址转换过程 23
虚拟存储系统应用现状 桌面计算机与服务器 具有完备的支持按需调页的虚拟存储系统 支持进程之间的存储保护与共享 超级计算机 具有地址转换与存储保护的支持 有些不支持按需调页, 将程序的所有页面放入超大容量的主存, 目的是加快程序执行速度 嵌入式系统的微控制器 出于成本考虑, 不支持虚拟存储系统 只在固定容量的存储器中运行定制的应用程序 24
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 25
保护模式 (Protected Mode) 保护模式, 又可称为本性模式 (Native State), 80386 及以上的微处理器的主要工作模式 支持多任务 支持设置特权级 支持特权指令的执行 支持访问权限检查 可以访问 4GB 的物理存储空间 引入了虚拟存储器的概念 保护模式让操作系统加强了对应用软件的控制, 使得系统运行更安全高效 26
保护模式的主要特点 存储器用逻辑地址空间 线性地址空间和物理地址空间三种形式来描述 寻址机制 : 需要通过 描述符表 的数据结构实现对存储器的访问 段寄存器 : 保存内容为 段选择符, 作为索引 描述符表 的变址寄存器来使用 可以使用四级特权保护功能 27
段描述符 (Segment Descriptor) 存放一个段的信息的数据结构, 共 8 字节长 存放信息包括 : 段基址 段长 ( 段的字节数 ) 类型 访问权限和其他属性信息 有两种类型的段描述符 : 1 非系统段描述符 : 即应用程序段, 包括代码段 数据段和堆栈段 2 系统段描述符 : 包括任务状态段 (Task State Segment) 和称作门 (Gates) 的特殊段描述符等 28
描述符表 (Descriptor Table) 把系统中的段描述符按线性表的形式来组织, 即构成描述符表 (Descriptor Table) 描述符表由操作系统建立 维护和管理 有三种类型的描述符表 : 1 全局描述符表 (GDT): 含有可供系统中所有任务使用的段描述符 2 局部描述符表 (LDT): 只含有与系统中某一个给定任务相关联的段描述符 3 中断描述符表 (IDT): 含有指出各中断服务程序位置及相关属性信息的段描述符 29
段选择符 (Segment Selector) 每个段描述符都有一个与之对应的段选择符 在保护模式下,16 位段寄存器的内容即为段选择符, 指向定义段的段描述符 15 3 2 1 0 Index TI RPL Table Indicator 0 = GDT 1 = LDT Requested Privilege Level(RPL) 30
回顾 : 实模式下物理地址的产生 逻辑地址 段寄存器段基值 (16 位 ) 移位器 偏移量 (16 位 ) 物理地址 = 段基值 16+ 偏移量 段基值 (16 位 ) 0000 地址加法器 物理地址 物理地址 (20 位 ) 31
回顾 : 虚拟页和页帧 ( 虚拟页号 ) virtual page number 虚拟页 (Virtual Page) 页帧 (Page Frame) page frame number ( 页帧号 ) 32
保护模式下的寻址机制 物理地址 (Physical Address) 信息在存储器中实际存放的地址 CPU 访问存储器时实际输出的地址 逻辑地址 (Logical Address) 编程时所使用的地址 保护模式下由 段选择符 和 偏移量 两部分构成 线性地址 (Linear Address) 分段机制将逻辑地址转换为一维的中间地址, 这种中间地址称为线性地址 33
保护模式下物理地址的产生 两级地址转换 : 1 逻辑地址 经过分段部件转换, 得到 线性地址 2 线性地址 经过分页部件转换, 得到 物理地址 34
特权级 (Privilege Level) 保护环 (Protection Ring) Level 0 ( 操作系统内核 ) Level 1 ( 操作系统服务 ) Level 2 ( 操作系统服务 ) Level 3 ( 应用程序 ) 35
特权级检查 CPL(Current privilege level) 当前特权级 当前正在执行的程序或任务的特权级 DPL(Descriptor privilege level) 描述符特权级 RPL(Requested privilege level) 请求特权级 分配给段选择符的特权级 MAX(CPL,RPL) DPL 36
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 37
64 位虚拟存储管理 使用 64 位虚拟地址的影响 为程序员提供更大的编程空间 为进程提供更大的寻址空间 流水线中使用的地址宽度增加 页表级数增加 TLB 表项宽度增加 使用 64 位物理地址的影响 支持更大的物理内存 页表项宽度增加 总线地址位宽增加 TLB 表项宽度增加 Cache 表项宽度增加 当前处理器实际支持的虚拟地址和物理地址位宽往往不足 64 位 38
64 位体系结构实例 :AMD64 Long Mode:64 位虚拟存储管理 Legacy Mode:32 位虚拟存储管理 兼容 32 位操作系统 39
AMD64 Long Mode 最大支持 64 位虚拟地址和 52 位物理地址 处理器实际实现 48 位虚拟地址和 40 位物理地址 64-bit Mode 的特性 不兼容 32 位应用程序 不再支持段式存储管理 Support only a flat address space with single code, data, and stack space 支持页式存储管理 Compatibility Mode 的特性 兼容 32 位应用程序 仍旧支持段页式存储管理 40
AMD64 Long Mode 页式存储管理 48 位虚拟地址空间 : 四级页表结构 页表项大小由 32 位时的 4 字节变为 8 字节 41
主要内容 一 实模式回顾 二 虚拟存储机制 三 保护模式 四 64 位模式 五 多线程技术 42
单个串行程序提高性能的方法 减少处理器周期时间 电路设计 体系结构 提高指令级并行程度 超标量 编译 分支预测 减少程序的指令数目 算法 编译 43
多线程技术特性 目标 每个 CPU 能够执行多个线程 目的 保持 CPU 的繁忙, 提高 CPU 的利用率 切换线程的时机 等待 I/O 事件 Cache 失效 44
多线程处理器的设计方案 显示多线程 (EMT) 单芯片多处理器 (CMP) 细粒度多线程 (FGMT) 粗粒度多线程 (CGMT) 同时多线程 (SMT) 隐式多线程 (IMT) 45
多线程技术特点比较 单芯片多处理器细粒度多线程粗粒度多线程同时多线程 46
下讲预告 下讲 主题 先进技术实例 - 硬件篇 学习 资料 47
谢谢! 48