第 9 章 ARM 存 储 管 理 本 章 内 容 是 对 ARM 存 储 管 理 的 基 本 概 念 进 行 阐 述, 将 这 一 内 容 放 在 最 后 是 基 于 读 者 对 象 考 虑 的 如 果 是 从 事 上 层 软 件 开 发 的 读 者, 对 于 本 章 内 容 作 概 要 了 解 即 可 对 于 从 事 底 层 硬 件 开 发 人 员 来 说, 如 果 有 进 一 步 深 入 研 究 的 必 要, 可 以 详 细 阅 读 本 章 内 容 在 现 代 电 子 设 备 中, 存 储 设 备 是 不 可 缺 少 的 核 心 组 件, 即 使 是 一 个 最 小 的 嵌 入 式 系 统, 存 储 设 备 也 是 必 需 的 本 章 主 要 介 绍 存 储 设 备 的 基 本 概 念 以 及 ARM 处 理 器 的 存 储 管 理 方 式 本 章 9.1 节 主 要 介 绍 存 储 设 备 的 基 本 概 念, 包 括 存 储 设 备 的 分 类 常 见 RAM 处 理 器 和 Flash 的 特 点 及 应 用 领 域 本 章 9.2 节 主 要 介 绍 ARM 处 理 器 的 MMU( 存 储 管 理 单 元 ) 进 行 内 存 映 射 的 基 本 原 理 方 法, 对 MMU 内 存 管 理 单 元 的 结 构 访 问 方 式 转 换 过 程 等 进 行 详 细 介 绍 9.1 存 储 设 备 概 念 无 论 是 计 算 机 系 统 还 是 嵌 入 式 系 统 都 会 包 含 必 要 的 存 储 设 备 一 般 来 说, 根 据 掉 电 是 否 丢 失 信 息 可 以 将 存 储 器 分 为 ROM 类 型 和 RAM 类 型, 其 中 RAM 在 系 统 掉 电 后 将 丢 失 信 息, 但 由 于 RAM 运 行 速 度 较 快, 所 以 一 般 被 用 做 内 存 单 元 在 嵌 入 式 设 备 中, 掉 电 后 所 存 储 信 息 不 丢 失 的 外 部 存 储 设 备 主 要 为 Flash, 这 种 存 储 设 备 可 以 反 复 擦 写 如 表 9.1 所 示, 根 据 存 储 容 量 和 存 储 速 度, 嵌 入 式 设 备 可 以 分 为 4 级, 分 别 是 寄 存 器 (Register) 缓 存 (Cache) 内 存 (RAM) 外 存 (Disk), 其 存 储 容 量 以 10 3 增 加, 速 度 也 成 次 方 速 率 下 降 表 9.1 常 见 类 型 嵌 入 式 设 备 存 储 设 备 类 型 存 储 速 度 容 量 级 别 在 嵌 入 式 设 备 位 置 常 见 类 型 举 例 寄 存 器 (Register) 最 快 Bit 直 接 位 于 CPU 中 ARM 处 理 器 的 R0~R15 CPSR SPSR 绝 大 多 数 ARM 处 理 器 中 的 数 据 缓 存 (Cache) 次 之 KB 位 于 处 理 器 中 内 存 (RAM) 较 慢 MB 与 处 理 器 数 据 总 线 直 接 相 连 Cache 和 指 令 Cache, 如 ARM9 内 核 处 理 器 S3C2410 自 带 16KB 的 数 据 Cache 和 指 令 Cache 如 HY57V561620B(L/S)T RAM 存 储 芯 片 容 量 大 小 为 4Banks*4M*16bit SDRAM
第 9 章 ARM 存 储 管 理 215 存 储 设 备 类 型 存 储 速 度 容 量 级 别 在 嵌 入 式 设 备 位 置 常 见 类 型 举 例 续 表 在 嵌 入 式 设 备 中 常 用 Flash 代 替, 容 量 外 存 (Disk) 最 慢 GB 与 处 理 器 相 连 为 几 十 至 几 百 兆 字 节, 如 K9F2808U0C 为 16M 8 bit, 8M x 16 bit NAND Flash 9.1.1 常 见 存 储 设 备 名 词 解 析 在 存 储 设 备 发 展 历 程 中, 诞 生 了 大 量 存 储 设 备 专 用 名 词, 主 要 包 括 以 下 名 词 ROM: 只 读 存 储 器 一 旦 写 入, 存 储 内 容 便 不 能 再 更 改 通 常,ROM 是 指 不 易 写 入 的 非 易 失 性 存 储 器 PROM: 可 编 程 ROM, 只 可 写 入 一 次, 是 真 正 的 只 读 存 储 器 EPROM: 可 编 程 ROM, 可 以 使 用 特 定 的 设 备 写 入, 并 可 用 紫 外 线 擦 除 重 新 写 入 EEPROM: 可 擦 除 可 编 程 ROM, 用 电 擦 除 而 不 是 像 EPROM 那 样 用 紫 外 线 擦 除, 可 利 用 微 控 制 器 写 入 Flash: 一 种 容 易 写 入, 但 速 度 较 慢 的 非 易 失 性 存 储 器 RAM: 随 机 存 取 存 储 器 每 一 存 储 单 元 都 可 方 便 而 快 速 地 存 取 通 常,RAM 是 指 任 何 快 速 可 写 的 易 失 性 存 储 器 DRAM: 动 态 RAM 这 种 存 储 器 必 须 周 期 性 地 动 态 刷 新, 否 则, 存 储 单 元 将 因 放 电 而 失 去 记 忆 的 数 据 SRAM: 静 态 RAM 静 态 是 指 一 旦 写 入, 只 要 有 供 电 数 据 就 可 一 直 保 持 SDRAM: 同 步 DRAM 同 步 是 指 数 据 由 时 钟 信 号 控 制 存 取 9.1.2 RAM 存 储 设 备 在 电 子 设 备 应 用 领 域, 目 前 常 见 的 RAM 设 备 有 DRAM SDRAM 和 RDRAM, 另 外, 在 台 式 计 算 机 内 存 中 出 现 了 DDR SDRAM 内 存 在 选 择 存 储 设 置 时, 主 要 考 虑 的 因 素 有 速 度 容 量 和 成 本, 但 太 注 重 其 中 一 个 就 会 牺 牲 另 外 两 个 另 外,DRAM 用 户 在 注 意 这 3 个 因 素 的 同 时 还 必 须 考 虑 第 4 个 因 素, 即 存 储 器 的 控 制 协 议 DRAM 一 般 要 求 多 条 控 制 线, 而 且 时 序 要 准 确 DRAM 控 制 器 曾 经 是 单 独 的 芯 片, 但 现 在 高 端 处 理 器 已 将 DRAM 控 制 功 能 集 成 进 去 另 外,DRAM 对 于 速 度 匹 配 问 题 需 要 严 格 设 计 例 如, 普 通 DRAM 的 存 取 速 度 大 致 为 60 ns, 与 频 率 为 4 MHz 的 总 线 ( 周 期 250 ns) 匹 配 没 有 问 题, 而 要 与 频 率 为 100 MHz 的 总 线 匹 配 就 会 出 现 问 题, 因 为 总 线 的 周 期 为 10 ns, 控 制 器 需 要 等 待 几 个 周 期 才 能 将 数 据 存 储 到 所 需 的 存 储 器 同 步 DRAM(SDRAM) 解 决 了 上 述 问 题, 它 按 额 定 的 频 率 存 取 数 据, 可 与 总 线 时 钟 同 步 虽 然 SDRAM 需 要 设 置 时 间, 而 且 可 能 存 在 一 些 等 待 状 态, 但 是 大 部 分 数 据 是 按 额 定 频 率 存 取 的 把 频 率 为 100 MHz 的 SDRAM 接 到 频 率 为 100 MHz 的 总 线 上, 会 得 到 一 个 匹 配 良 好 的 高 速 系 统 当 有 存 取 请 求 时, 标 准 DRAM 才 启 动 存 取 过 程, 然 后 等 待 存 储 器 准 备 就 绪 而 SDRAM 在 每 个 时 钟 周 期 都 可 存 取 数 据, 它 由 两 块 存 储 器 组 成, 当 一 块 被 读 取 时, 另 外 一 块 预 先 写 入 215
216 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 双 数 据 速 率 (DDR)SDRAM 的 名 字 来 自 其 双 倍 于 SDRAM 存 取 数 据 的 能 力 DDR 是 SDRAM 的 进 化, 它 在 时 钟 信 号 的 上 升 沿 和 下 降 沿 都 可 以 存 取 数 据 在 相 同 时 钟 下, 其 吞 吐 量 是 SDRAM 的 两 倍 1. SDRAM 内 存 SDRAM 是 Synchronous Dynamic Random Access Memory( 同 步 动 态 随 机 存 储 器 ) 的 简 称, 是 前 几 年 普 遍 使 用 的 内 存 形 式 SDRAM 采 用 3.3V 工 作 电 压, 带 宽 64 位,SDRAM 将 CPU 与 RAM 通 过 一 个 相 同 的 时 钟 锁 在 一 起, 使 RAM 和 CPU 能 够 共 享 一 个 时 钟 周 期 SDRAM 基 于 双 存 储 体 结 构, 内 含 两 个 交 错 的 存 储 阵 列, 当 CPU 从 一 个 存 储 体 或 阵 列 访 问 数 据 时, 另 一 个 就 已 为 读 / 写 数 据 做 好 了 准 备, 通 过 这 两 个 存 储 阵 列 的 紧 密 切 换, 读 取 效 率 就 能 得 到 成 倍 提 高 SDRAM 不 仅 可 用 做 主 存, 在 显 卡 的 显 存 方 面 也 有 广 泛 应 用 SDRAM 曾 经 是 长 时 间 使 用 的 主 流 内 存, 但 随 着 DDR SDRAM 的 普 及,SDRAM 也 正 在 慢 慢 退 出 主 流 市 场 2. DDR SDRAM 内 存 DDR SDRAM 是 Double Data Rate Synchronous Dynamic Random Access Memory( 双 数 据 率 同 步 动 态 随 机 存 储 器 ) 的 简 称 DDR SDRAM 采 用 2.5V 工 作 电 压, 它 允 许 在 时 钟 脉 冲 的 上 升 沿 和 下 降 沿 传 输 数 据, 这 样 不 需 要 提 高 时 钟 的 频 率 就 能 加 倍 提 高 SDRAM 的 速 度, 并 具 有 比 SDRAM 多 一 倍 的 传 输 速 率 和 内 存 带 宽 DDR2(Double Data Rate 2) SDRAM 是 由 JEDEC( 电 子 设 备 工 程 联 合 委 员 会 ) 进 行 开 发 的 新 生 代 内 存 技 术 标 准, 它 与 上 一 代 DDR 内 存 技 术 标 准 最 大 的 不 同 就 是, 虽 然 同 是 采 用 了 在 时 钟 的 上 升 / 下 降 沿 同 时 进 行 数 据 传 输 的 基 本 方 式, 但 DDR2 内 存 却 拥 有 两 倍 于 上 一 代 DDR 内 存 预 读 取 能 力 9.1.3 NAND Flash 和 NOR Flash 存 储 设 备 NOR 和 NAND 是 现 在 市 场 上 两 种 主 要 的 非 易 失 闪 存 技 术 Intel 于 1988 年 首 先 开 发 出 NOR Flash 技 术 紧 接 着,1989 年, 东 芝 公 司 发 表 了 NAND Flash 结 构, 强 调 降 低 每 比 特 的 成 本, 具 有 更 高 的 性 能, 并 且 像 磁 盘 一 样 可 以 通 过 接 口 轻 松 升 级 NOR 的 特 点 是 芯 片 内 执 行, 这 样 应 用 程 序 可 以 直 接 在 Flash 闪 存 内 运 行, 不 必 再 把 代 码 读 到 系 统 RAM 中 另 外,NOR 的 传 输 效 率 很 高, 在 1~4 MB 的 小 容 量 时 具 有 很 高 的 成 本 效 益, 但 是 很 低 的 写 入 和 擦 除 速 度 大 大 影 响 了 它 的 性 能 NAND 结 构 能 提 供 极 高 的 单 元 密 度, 可 以 达 到 高 存 储 密 度, 并 且 写 入 和 擦 除 的 速 度 也 很 快 应 用 NAND 的 困 难 在 于 Flash 的 管 理 和 需 要 特 殊 的 系 统 接 口 1. 性 能 比 较 Flash 闪 存 是 非 易 失 存 储 器, 可 以 对 以 块 为 单 位 的 存 储 器 单 元 块 进 行 擦 写 和 再 编 程 任 何 Flash 器 件 的 写 入 操 作 只 能 在 空 或 已 擦 除 的 单 元 内 进 行 大 多 数 情 况 下, 在 进 行 写 入 操 作 之 前 必 须 先 执 行 擦 除 NAND 器 件 执 行 擦 除 操 作 是 十 分 简 单 的, 而 NOR 则 要 求 在 进 行 擦 除 前 先 要 将 目 标 块 内 所 有 的 位 都 写 为 0 由 于 擦 除 NOR 器 件 时 是 以 64~128 KB 的 块 进 行 的, 执 行 一 个 写 入 / 擦 除 操 作 的 时 间 为 216
第 9 章 ARM 存 储 管 理 217 5 s; 与 此 相 反, 擦 除 NAND 器 件 是 以 8~32 KB 的 块 进 行 的, 执 行 相 同 的 操 作 最 多 只 需 要 4 ms 执 行 擦 除 时 块 尺 寸 的 不 同 进 一 步 拉 大 了 NOR 和 NADN 之 间 的 性 能 差 距, 统 计 表 明, 对 于 给 定 的 一 套 写 入 操 作 ( 尤 其 是 更 新 小 的 文 件 时 ), 更 多 的 擦 除 操 作 必 须 在 基 于 NOR 的 单 元 中 进 行 这 样, 当 选 择 存 储 解 决 方 案 时, 设 计 师 必 须 权 衡 以 下 各 项 因 素 NOR 的 读 速 度 比 NAND 稍 快 一 些 NAND 的 写 入 速 度 比 NOR 快 很 多 NAND 的 4 ms 擦 除 速 度 远 比 NOR 的 5 s 快 大 多 数 写 入 操 作 需 要 先 进 行 擦 除 操 作 NAND 的 擦 除 单 元 更 小, 相 应 的 擦 除 电 路 更 少 2. 接 口 差 别 NOR Flash 带 有 SRAM 接 口, 有 足 够 的 地 址 引 脚 来 寻 址, 可 以 很 容 易 地 存 取 其 内 部 的 每 一 个 字 节 NAND 器 件 使 用 复 杂 的 I/O 口 来 串 行 存 取 数 据, 各 个 产 品 或 厂 商 的 方 法 可 能 各 不 相 同 NAND 读 和 写 操 作 采 用 512B 的 块, 这 一 点 有 点 像 硬 盘 管 理 操 作, 很 自 然 地, 基 于 NAND 的 存 储 器 就 可 以 取 代 硬 盘 或 其 他 块 设 备 3. 容 量 和 成 本 NAND Flash 的 单 元 尺 寸 几 乎 是 NOR 器 件 的 一 半, 由 于 生 产 过 程 更 为 简 单,NAND 结 构 可 以 在 给 定 的 模 具 尺 寸 内 提 供 更 高 的 容 量, 也 就 相 应 地 降 低 了 价 格 NOR Flash 占 据 了 容 量 为 1~16 MB 闪 存 市 场 的 大 部 分, 而 NAND Flash 只 是 用 在 8~ 128 MB 的 产 品 中, 这 也 说 明 NOR 主 要 应 用 在 代 码 存 储 介 质 中 NAND 适 合 于 数 据 存 储, 它 在 CompactFlash Secure Digital PC Cards 和 MMC 存 储 卡 市 场 上 所 占 份 额 最 大 4. 可 靠 性 和 耐 用 性 采 用 Flash 介 质 时, 一 个 需 要 重 点 考 虑 的 问 题 是 可 靠 性 在 NAND 闪 存 中 每 个 块 的 最 大 擦 写 次 数 是 100 万 次, 而 NOR 的 擦 写 次 数 是 10 万 次 NAND 存 储 器 除 了 具 有 10 比 1 的 块 擦 除 周 期 优 势, 典 型 的 NAND 块 尺 寸 要 比 NOR 器 件 小 8 倍, 每 个 NAND 存 储 器 块 在 给 定 的 时 间 内 的 删 除 次 数 要 少 一 些 9.2 ARM 内 存 管 理 单 元 MMU 本 节 主 要 描 述 ARM 处 理 器 中 存 储 器 管 理 单 元 系 统 结 构, 包 含 存 储 器 管 理 单 元 的 结 构 存 储 器 访 问 的 顺 序 表 转 换 过 程 访 问 权 限 以 及 域 和 异 常 等 基 本 概 念 9.2.1 存 储 器 管 理 单 元 的 结 构 1. MMU 属 性 存 储 器 单 元 (Memory Management Unit,MMU) 的 结 构 实 现 对 存 储 器 系 统 的 精 细 控 制, 217
218 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 MMU 把 CPU 产 生 的 虚 拟 地 址 转 换 成 物 理 地 址 去 访 问 外 部 存 储 器 大 部 分 的 控 制 细 节 由 存 储 器 中 的 转 换 表 提 供 这 些 表 的 入 口 定 义 了 大 小 从 1 KB 到 1 MB 的 各 种 存 储 器 区 域 的 属 性 包 括 以 下 几 种 (1) 虚 拟 地 址 到 物 理 地 址 映 射 ARM 处 理 器 产 生 的 地 址 称 为 虚 拟 地 址,MMU 允 许 把 这 个 虚 拟 地 址 映 射 到 一 个 不 同 的 物 理 地 址 这 个 物 理 地 址 表 示 了 被 访 问 的 主 存 储 器 的 实 际 位 置 ARM 允 许 用 很 多 方 式 管 理 物 理 存 储 器 的 位 置, 例 如, 可 以 用 具 有 潜 在 冲 突 的 地 址 映 射 为 不 同 的 进 程 分 配 存 储 器, 或 允 许 具 有 不 连 续 地 址 的 应 用 将 它 映 射 到 连 续 的 地 址 空 间 (2) 存 储 器 访 问 权 限 这 些 权 限 控 制 包 括 不 可 访 问 权 限 只 读 权 限 读 / 写 权 限 当 访 问 没 有 访 问 权 限 的 存 储 器 时, 会 有 一 个 存 储 器 异 常 来 通 知 ARM 处 理 器 另 外, 允 许 的 权 限 级 别 也 受 程 序 是 运 行 在 用 户 状 态 还 是 特 权 状 态 的 影 响, 以 及 是 否 使 用 了 与 域 有 关 的 影 响 (3) 高 速 缓 存 和 缓 冲 位 2. TLB 查 找 整 个 地 址 转 换 表 的 过 程 称 做 转 换 表 遍 历 为 了 减 小 存 储 器 访 问 的 平 均 消 耗, 转 换 表 遍 历 结 果 被 高 速 缓 存 在 一 个 或 多 个 TLBs(Translation Lookaside Buffers) 中 在 ARM 的 实 现 中, 通 常 每 个 内 存 接 口 有 一 个 TLB (1) 有 一 个 存 储 器 接 口 的 系 统 通 常 对 应 一 个 唯 一 的 TLB (2) 指 令 和 数 据 的 内 存 接 口 分 开 的 系 统 通 常 有 两 个 TLB, 分 别 是 指 令 TLB 和 数 据 TLB (3) 如 果 当 前 系 统 有 高 速 缓 存, 高 速 缓 存 的 数 量 也 通 常 是 由 同 样 的 方 法 确 定 的 为 此, 在 高 速 缓 存 的 系 统 中, 每 个 高 速 缓 存 有 一 个 TLB 当 存 储 器 中 的 转 换 表 被 改 变, 或 选 中 了 不 同 的 转 换 表 ( 通 过 写 CP15 的 寄 存 器 2), 先 前 高 速 缓 存 的 转 换 表 遍 历 结 果 将 不 再 有 效,MMU 结 构 提 供 重 新 刷 新 TLB 的 操 作 MMU 结 构 也 允 许 特 定 的 转 换 表 遍 历 结 果 被 锁 定 在 一 个 TLB 中, 从 而 保 证 了 对 某 些 存 储 器 区 域 的 访 问 不 会 导 致 整 个 转 换 表 遍 历 9.2.2 存 储 器 的 访 问 1. 访 问 顺 序 如 图 9.1 所 示 为 高 速 缓 存 的 MMU 存 储 器 系 统 当 ARM 要 访 问 存 储 单 元 时,MMU 先 查 找 TLB 中 的 虚 拟 地 址 表, 如 果 ARM 的 结 构 支 持 分 开 的 地 址 TLB 和 指 令 TLB, 则 : 图 9.1 高 速 缓 存 的 MMU 存 储 器 系 统 218
第 9 章 ARM 存 储 管 理 219 (1) 取 指 令 时 使 用 指 令 TLB (2) 其 他 的 访 问 类 别 用 数 据 TLB 如 果 TLB 中 没 有 虚 拟 地 址 的 入 口, 则 转 换 表 遍 历 硬 件 存 储 在 主 存 中 的 转 换 表, 获 取 转 换 和 访 问 权 限 一 旦 获 取 到, 这 些 信 息 将 被 放 在 TLB 中, 存 储 在 一 个 没 有 使 用 的 入 口 处 或 覆 盖 一 个 已 有 的 入 口 一 旦 获 得 TLB 的 入 口 信 息, 这 些 信 息 将 被 用 于 : C( 高 速 缓 存 Cache) 和 B( 缓 冲 区 Buffer) 位 用 来 控 制 高 速 缓 存 和 写 缓 冲 区, 并 决 定 是 否 实 现 高 速 缓 存 如 果 系 统 中 没 有 高 速 缓 存 和 写 缓 冲, 则 对 应 的 位 将 被 忽 略 访 问 权 限 和 域 位 用 来 控 制 访 问 是 否 被 允 许 如 果 不 允 许, 则 MMU 将 向 ARM 处 理 器 发 送 一 个 存 储 器 异 常 ; 否 则 访 问 将 被 允 许 进 行 对 没 有 高 速 缓 存 的 系 统, 物 理 地 址 将 被 用 做 主 存 储 器 访 问 的 地 址 2. 禁 止 和 使 能 MMU 通 过 写 系 统 控 制 协 处 理 器 的 寄 存 器 1 的 第 0 位 可 以 允 许 和 禁 止 MMU 在 复 位 后 该 位 为 0,MMU 被 禁 止 此 时, 存 储 器 访 问 将 作 如 下 处 理 : (1) 使 用 Defined 来 确 定 MMU 被 禁 止 时 是 否 能 够 允 许 高 速 缓 存 和 写 缓 冲 操 作 1 当 MMU 被 禁 止, 且 不 允 许 高 速 缓 存 和 写 缓 冲 时,C 和 B 位 不 起 作 用 2 当 MMU 被 禁 止, 但 允 许 高 速 缓 存 和 写 缓 冲 时, 访 问 数 据 时 被 认 为 没 有 高 速 缓 存 和 写 缓 冲 (C==0,B==0) 访 问 指 令 时, 当 系 统 只 有 一 个 的 TLB 时, 则 认 为 是 没 有 高 速 缓 存 (C==0); 当 系 统 有 独 立 的 指 令 TLB 时, 则 认 为 是 可 高 速 缓 存 (C==1) (2) 没 有 存 储 器 访 问 权 限 的 检 查,MMU 将 不 产 生 异 常 信 号 (3) 物 理 地 址 与 虚 拟 地 址 相 同 ( 即 所 谓 的 平 坦 地 址 映 射 模 式 ) 在 允 许 MMU 之 前, 必 须 在 内 存 中 建 立 适 当 的 转 换 表, 并 且 所 有 相 关 的 CP15 寄 存 器 要 初 始 化 正 确 因 为 允 许 和 禁 止 MMU 直 接 改 变 了 虚 拟 地 址 到 物 理 地 址 的 映 射 ( 除 非 转 换 表 设 定 为 平 坦 地 址 映 射 模 式 ), 所 以 很 可 能 在 允 许 MMU 时 所 有 的 高 速 缓 存 需 要 被 刷 新 另 外, 如 果 允 许 MMU 的 指 令 的 物 理 地 址 和 虚 拟 地 址 不 同, 取 指 令 将 变 得 复 杂 所 以, 强 烈 建 议 允 许 MMU 的 指 令 具 有 相 同 的 物 理 地 址 和 虚 拟 地 址 9.2.3 转 换 过 程 MMU 支 持 基 于 节 或 页 的 存 储 器 访 问 (1) 节 (Section):1MB 的 存 储 器 块 (2) 页 (Page): 有 3 种 不 同 的 尺 寸 1 微 页 (Tiny Page):1 KB 的 存 储 器 块 2 小 页 (Small Page):4 KB 的 存 储 器 块 3 大 页 (Large Page):64 KB 的 存 储 器 块 其 中, 节 和 大 页 是 支 持 允 许 只 用 一 个 TLB 入 口 去 映 射 大 的 存 储 器 区 间 小 页 和 大 页 有 附 加 的 访 问 控 制 : 小 页 分 成 1 KB 的 子 页 大 页 分 成 16 KB 的 子 页 微 页 没 有 子 页, 对 微 页 的 访 问 控 制 是 对 整 个 页 219
220 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 转 换 表 有 两 个 级 别 : 第 1 级 表 存 储 节 的 转 换 表 和 指 向 第 2 级 表 的 指 针 第 2 级 表 存 储 大 页 和 小 页 的 转 换 表 其 中, 二 级 表 也 存 储 微 页 转 换 表 1. 转 换 表 基 址 寄 存 器 当 片 上 (On-Chip) 的 TLB 中 不 包 含 要 求 的 虚 拟 地 址 的 入 口 时, 转 换 过 程 将 被 启 动 转 换 表 基 址 寄 存 器 (CP15 的 寄 存 器 2) 保 存 着 第 1 级 转 换 表 基 址 的 物 理 地 址 此 寄 存 器 只 有 Bits[31 14] 有 效, 而 Bits[13 0] 为 0(SBZ), 第 1 级 表 必 须 在 16 KB 内 2. 访 问 第 1 级 表 如 图 9.2 所 示, 转 换 表 基 址 寄 存 器 的 Bits[31:14] 与 虚 拟 地 址 的 Bits[31 20] 和 两 个 0 位 连 接 形 成 32 位 物 理 地 址 这 个 地 址 选 择 了 一 个 4B 的 转 换 表 入 口, 它 是 第 1 级 描 述 符 或 是 指 向 第 2 级 页 表 的 指 针 3. 第 1 级 描 述 符 图 9.2 访 问 转 换 表 第 1 级 描 述 符 如 图 9.3 所 示, 第 1 级 表 的 每 个 入 口 是 一 个 描 述 它 所 关 联 的 1 MB 虚 拟 地 址 映 射 描 述 符 的 方 法 根 据 Bits[1 0] 的 组 合, 有 以 下 4 种 可 能 如 果 Bits[1 0]==0b00, 所 关 联 的 地 址 没 有 被 映 射, 试 图 访 问 将 产 生 一 个 转 换 异 常 (Fault) 因 为 访 问 将 被 硬 件 忽 略, 所 以 软 件 可 以 利 用 此 描 述 符 的 Bits[31 2] 如 果 Bits[1 0]==0b10, 这 个 入 口 是 它 所 关 联 地 址 的 节 描 述 符 如 果 Bits[0 0]==0b11, 这 个 入 口 给 出 粗 糙 第 2 级 表, 描 述 了 它 所 关 联 的 1 MB 存 储 区 域 的 映 射 粗 糙 第 2 级 表 较 小, 每 个 表 1 KB, 但 粗 糙 第 2 级 表 只 能 映 射 大 页 和 小 页 如 果 Bits[0 0]==0b01, 这 个 入 口 给 出 精 细 第 2 级 表, 描 述 了 它 所 关 联 的 1 MB 存 储 区 域 的 映 射 精 细 第 2 级 表 为 4 KB, 但 精 细 第 2 级 表 可 以 映 射 大 页 小 页 和 微 页 图 9.3 第 1 级 描 述 符 格 式 类 型 220
第 9 章 ARM 存 储 管 理 221 4. 节 描 述 符 和 节 转 换 参 考 如 图 9.4 所 示, 如 果 第 1 级 描 述 符 是 节 描 述 符, 那 么 各 个 字 段 有 如 下 的 意 义 Bits[1 0] 描 述 符 类 型 标 识 (0b10 表 示 节 描 述 符 ) Bits[3 2] 高 速 缓 存 和 缓 冲 位 Bits[4] 由 具 体 实 现 定 义 Bits[8 5] 是 描 述 符 控 制 节 的 16 种 域 之 一 Bits[9] 现 在 没 有 使 用, 应 该 为 0 Bits[11 10] 访 问 控 制 Bits[19 12] 现 在 没 有 使 用, 应 该 为 0 Bits[31 20] 节 基 址, 形 成 物 理 地 址 的 高 12 位 5. 粗 糙 页 表 描 述 符 图 9.4 节 描 述 符 和 节 转 换 示 意 图 如 图 9.5 所 示, 如 果 第 1 级 描 述 符 是 粗 糙 页 表 描 述 符, 那 么 各 个 字 段 有 如 下 的 意 义 图 9.5 第 1 级 粗 糙 页 表 描 述 符 221
222 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 Bits[1 0] 描 述 符 类 型 标 识 (0b01 表 示 粗 糙 页 表 描 述 符 ) Bits[4 2] 由 具 体 实 现 定 义 Bits[8 5] 这 个 描 述 符 控 制 页 的 16 种 域 之 一 Bits[9] 现 在 没 有 使 用, 应 该 为 0 Bits[31 10] 页 表 基 地 址 是 一 个 指 向 第 2 级 粗 糙 页 表 的 指 针, 它 给 出 第 2 级 表 访 问 的 基 地 址, 而 第 2 级 粗 糙 页 表 必 须 在 1 KB 边 界 对 齐 6. 精 细 页 表 描 述 符 如 图 9.6 所 示, 如 果 第 1 级 描 述 符 是 精 细 页 表 描 述 符, 那 么 各 个 字 段 有 如 下 的 意 义 Bits[1 0] 描 述 符 类 型 标 识 (0b11 表 示 精 细 页 表 描 述 符 ) Bits[4 2] 由 具 体 实 现 定 义 Bits[8 5] 这 个 描 述 符 控 制 页 的 16 种 域 之 一 Bits[11 9] 现 在 没 有 使 用, 应 该 为 0 Bits[31 10] 页 表 基 地 址 是 一 个 指 向 第 2 级 精 细 页 表 的 指 针, 它 给 出 第 2 级 表 访 问 的 基 地 址, 而 第 2 级 精 细 页 表 必 须 在 4 KB 边 界 对 齐 7. 第 2 级 描 述 符 图 9.6 访 问 精 细 页 表 第 2 级 描 述 符 每 个 粗 糙 第 2 级 表 对 应 着 以 4 KB 为 单 位 的 虚 拟 地 址 范 围, 每 个 精 细 第 2 级 表 对 应 着 以 1KB 为 单 位 的 虚 拟 地 址 范 围 如 图 9.7 所 示, 对 于 一 个 第 2 级 描 述 符, 由 描 述 符 的 Bits[1:0] 选 择 有 以 下 4 种 可 能 : 如 果 Bits[1 0]==0b00, 关 联 的 虚 拟 地 址 没 有 被 映 射, 任 何 对 这 些 虚 拟 地 址 的 访 问 将 会 导 致 转 换 错 误 软 件 可 以 利 用 这 样 的 描 述 符 的 Bits[31 2], 因 为 它 们 被 硬 件 忽 略 推 荐 为 描 述 符 继 续 保 持 正 确 的 访 问 权 限 如 果 Bits[1 0]==0b01, 这 个 入 口 是 大 页 描 述 符, 描 述 64 KB 的 虚 拟 地 址 一 个 大 页 描 述 符 在 精 细 第 2 级 表 中 必 须 被 重 复 64 次, 在 粗 糙 第 2 级 表 中 必 须 被 重 复 16 次 以 保 证 所 有 的 虚 拟 地 址 都 被 描 述 如 果 Bits[1 0]== 0b10, 这 个 入 口 是 小 页 描 述 符, 描 述 4 KB 的 虚 拟 地 址 一 个 小 页 描 222
第 9 章 ARM 存 储 管 理 223 述 符 在 精 细 第 2 级 表 中 必 须 被 重 复 4 次, 以 保 证 所 有 的 虚 拟 地 址 都 被 描 述 在 粗 糙 第 2 级 表 中 只 有 一 种 方 式 如 果 Bits[1 0]== 0b11, 这 个 入 口 是 微 页 描 述 符, 描 述 1 KB 的 虚 拟 地 址 在 精 细 第 2 级 表 中 只 需 要 一 个 微 页 描 述 符 的 实 例 微 页 描 述 符 不 能 在 粗 糙 第 2 级 表 中 出 现, 如 果 出 现 了, 结 果 不 可 预 测 图 9.7 第 2 级 描 述 符 格 式 (1) 大 页 描 述 符 字 段 大 页 描 述 符 的 字 段 有 如 下 意 义 Bits[1 0] 表 示 描 述 符 的 类 型 Bits[3 2] 高 速 缓 存 和 缓 冲 位 Bits[11 4] 访 问 权 限 位 这 些 位 控 制 对 页 的 访 问 大 页 被 分 成 4 个 子 页 AP0 编 码 对 第 1 个 子 页 的 访 问 权 限 AP1 编 码 对 第 2 个 子 页 的 访 问 权 限 AP2 编 码 对 第 3 个 子 页 的 访 问 权 限 AP3 编 码 对 第 4 个 子 页 的 访 问 权 限 Bits[15 12] 现 在 没 有 使 用, 应 该 为 0 Bits[31 16] 用 来 形 成 物 理 地 址 的 对 应 位 (2) 小 页 描 述 符 字 段 小 页 描 述 符 的 字 段 有 如 下 意 义 Bits[1 0] 表 示 描 述 符 的 类 型 Bits[3 2] 高 速 缓 存 和 缓 冲 位 Bits[11 4] 访 问 权 限 位 这 些 为 控 制 对 页 的 访 问 小 页 被 分 成 4 个 子 页 AP0 编 码 对 第 1 个 子 页 的 访 问 权 限 AP1 编 码 对 第 2 个 子 页 的 访 问 权 限 AP2 编 码 对 第 3 个 子 页 的 访 问 权 限 AP3 编 码 对 第 4 个 子 页 的 访 问 权 限 Bits[31 12] 用 来 形 成 物 理 地 址 的 对 应 位 (3) 微 页 描 述 符 字 段 微 页 描 述 符 的 字 段 有 如 下 意 义 Bits[1 0] 表 示 描 述 符 的 类 型 Bits[3 2] 高 速 缓 存 和 缓 冲 位 Bits[5 4] 访 问 权 限 位 这 些 为 控 制 对 页 的 访 问 Bits[9 6] 现 在 没 有 使 用, 应 该 为 0 Bits[31 10] 用 来 形 成 物 理 地 址 的 对 应 位 8. 转 换 大 页 方 式 如 图 9.8 所 示 为 在 粗 糙 第 2 级 表 中 转 换 一 个 64 KB 的 大 页 的 完 整 顺 序 与 在 精 细 第 2 223
224 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 级 表 中 的 转 换 顺 序 页 相 似, 只 是 第 2 级 描 述 符 的 地 址 如 精 细 页 表 描 述 符 第 一 节 所 决 定 而 已 页 索 引 的 高 4 位 和 第 2 级 表 的 低 阶 4 位 重 叠, 在 粗 糙 页 表 中 大 页 的 每 个 页 表 入 口 必 须 被 重 复 16 次 在 精 细 页 表 中 大 页 的 每 个 页 表 入 口 必 须 被 重 复 64 次 图 9.8 转 换 大 页 的 完 整 顺 序 9. 转 换 小 页 方 式 图 9.9 显 示 了 在 粗 糙 第 2 级 表 中 转 换 一 个 4 KB 的 小 页 的 完 整 顺 序 与 在 精 细 第 2 级 表 中 的 转 换 顺 序 页 相 似, 只 是 第 2 级 描 述 符 的 地 址 如 精 细 页 表 描 述 符 第 一 节 所 决 定 图 9.9 转 换 小 页 的 完 整 顺 序 224
第 9 章 ARM 存 储 管 理 225 当 小 页 出 现 在 精 细 第 2 级 表 中 时, 页 索 引 的 高 2 位 和 第 2 级 表 的 低 阶 2 位 重 叠, 在 精 细 页 表 中 小 页 的 每 个 页 表 入 口 必 须 被 重 复 4 次 10. 转 换 微 页 如 图 9.10 所 示 为 在 精 细 第 2 级 表 中 转 换 1 KB 微 页 的 完 整 过 程 图 9.10 转 换 微 页 的 完 整 过 程 9.2.4 访 问 权 限 在 节 和 页 描 述 符 中 的 访 问 权 限 位 控 制 对 相 应 的 节 和 页 的 访 问 访 问 权 限 由 CP15 的 寄 存 器 1 的 System(S) 和 ROM(R) 位 修 改 表 9.2 描 述 了 MMU 访 问 权 限 位 和 S 位 R 位 相 互 作 用 时 的 意 义 如 果 访 问 了 没 有 访 问 权 限 的 存 储 器 空 间, 将 会 产 生 权 限 错 误 表 9.2 MMU 访 问 权 限 A P S 位 R 位 Privileged Permissions 0b00 0 0 不 能 访 问 0b00 1 0 只 读 0b00 0 1 只 读 0b00 1 1 不 可 预 测 0b01 X X 读 / 写 0b10 X X 读 / 写 0b11 X X 读 / 写 225
226 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 9.2.5 域 域 是 节 大 页 和 小 页 的 集 合,ARM 结 构 支 持 16 个 域, 对 域 的 访 问 由 域 访 问 控 制 寄 存 器 的 2 个 位 字 段 控 制 因 为 每 个 字 段 对 访 问 对 应 域 的 使 能 非 常 迅 速, 所 以 整 个 存 储 器 区 间 能 很 快 地 交 换 进 出 虚 拟 存 储 器 这 里 支 持 2 种 域 访 问 方 式 (1) 客 户 域 的 用 户 ( 执 行 程 序, 访 问 数 据 ), 被 形 成 该 域 的 节 或 页 来 监 督 访 问 权 限 (2) 管 理 者 控 制 域 的 行 为 ( 域 中 的 当 前 节 和 页, 对 域 的 访 问 ), 而 不 是 形 成 这 个 域 的 节 或 页 来 监 督 访 问 权 限 一 个 程 序 可 以 是 一 些 域 的 客 户, 也 可 以 是 另 外 一 些 域 的 管 理 者, 同 时 没 有 对 其 他 域 的 访 问 权 限 这 允 许 对 程 序 访 问 不 同 存 储 器 资 源 的 非 常 灵 活 的 存 储 器 保 护 表 9.3 说 明 了 域 访 问 控 制 寄 存 器 的 位 编 码 方 式 表 9.3 域 访 问 的 控 制 寄 存 器 的 位 编 码 方 式 值 访 问 方 式 描 述 0b00 不 能 访 问 任 何 访 问 都 将 导 致 一 个 域 异 常 (Domain Fault) 0b01 客 户 能 否 访 问 将 根 据 节 或 页 描 述 符 中 的 访 问 权 限 位 确 定 0b10 保 留 使 用 这 个 值 将 导 致 不 可 预 料 的 结 果 0b11 管 理 者 不 是 根 据 节 或 页 描 述 符 中 的 访 问 权 限 位 确 定 能 否 访 问, 所 以 不 会 产 生 权 限 异 常 9.2.6 异 常 由 于 存 储 器 访 问 的 约 束 而 导 致 ARM 处 理 器 停 止 执 行 的 机 制 有 : MMU 异 常,MMU 检 测 到 约 束 机 制 外 部 异 常, 外 部 存 储 器 系 统 发 出 一 个 非 法 存 储 器 访 问 信 号 如 果 导 致 异 常 的 存 储 器 操 作 是 取 指 令, 那 么 当 处 理 器 去 执 行 这 个 非 法 访 问 得 到 的 指 令 时 产 生 一 个 预 取 指 令 异 常 如 果 导 致 异 常 的 存 储 器 操 作 是 存 取 数 据, 那 么 产 生 一 个 数 据 异 常 1. MMU 异 常 类 型 MMU 产 生 4 种 类 型 的 异 常 : 对 齐 异 常 转 换 异 常 域 异 常 和 权 限 异 常 存 储 器 系 统 能 终 止 以 下 3 种 类 型 的 访 问 Line Fetch 存 储 器 访 问 ( 没 有 高 速 缓 存 和 没 有 缓 冲 的 访 问 ) 转 换 表 访 问 MMU 检 测 到 的 异 常 将 在 任 何 外 部 存 储 器 访 问 发 生 之 前 被 停 止, 终 止 导 致 外 部 异 常 的 外 部 访 问 是 外 部 系 统 的 职 责 系 统 有 2 个 寄 存 器 控 制 协 处 理 器, 当 外 部 访 问 被 终 止 时 被 更 新 由 于 程 序 流 程 的 改 变, 产 生 异 常 的 指 令 没 有 被 执 行, 指 令 预 取 异 常 将 不 更 新 这 些 寄 存 器 (1) 地 址 异 常 寄 存 器 (FAR) 和 状 态 异 常 寄 存 器 (FSR) 数 据 异 常 会 被 CPU 立 即 响 应,FSR 被 一 个 4 位 的 异 常 状 态 (FS[3:0]) 和 域 序 号 更 新, 虚 拟 地 址 被 写 入 FAR 如 果 数 据 访 问 连 续 地 产 生 多 个 数 据 异 常, 则 它 们 的 优 先 级 如 表 9.4 所 示 226
第 9 章 ARM 存 储 管 理 227 表 9.4 异 常 优 先 级 优 先 级 源 FSR[3:0] Domain[3:0] FAR 最 高 Terminal Exception 0b0010 无 效 具 体 应 用 定 义 Vector Exception 0b0000 无 效 有 效 Alignment 0b00x1 无 效 有 效 External Abort Translation:1st level 0b1100 无 效 有 效 External Abort Translation:2nd level 0b1110 有 效 有 效 Translation: Section 0b0101 无 效 有 效 Translation: Page 0b0111 有 效 有 效 Domain: Section 0b1001 有 效 有 效 Domain: Page 0b1011 有 效 有 效 Permission: Section 0b1101 有 效 有 效 Permission: Page 0b1111 有 效 有 效 External Abort on Linefetch: Section 0b0100 有 效 有 效 External Abort on Linefetch: Page 0b0110 有 效 有 效 External Abort on Non_lineFetch: Section 0b1000 有 效 有 效 最 低 External Abort on Non_lineFetch: Page 0b1010 有 效 有 效 由 取 指 令 产 生 的 异 常 在 指 令 进 入 指 令 流 水 线 时 被 标 记 只 有 在 指 令 执 行 时 才 会 产 生 预 取 异 常 通 常, 当 进 入 预 取 指 令 异 常 服 务 程 序 时, 异 常 所 关 联 的 地 址 被 放 在 R14_abt 寄 存 器 中 当 预 取 指 令 异 常 产 生 时 由 程 序 设 定 是 否 更 新 FSR 和 FAR 但 是, 在 数 据 异 常 产 生 ( 更 新 FAR 和 FSR) 和 进 入 数 据 异 常 向 量 入 口 时 是 不 能 更 新 FSR 和 FAR 的 也 就 是 说 数 据 异 常 可 以 使 用 FAR 和 FSR 的 值, 它 们 不 会 被 预 取 指 令 异 常 破 坏 2.MMU 异 常 检 测 顺 序 MMU 对 节 和 页 的 异 常 检 测 顺 序 不 太 一 样, 如 图 9.11 所 示 为 异 常 检 测 顺 序 3.MMU 异 常 类 型 MMU 异 常 类 型 有 以 下 几 种 (1) Terminal Exception 终 端 异 常 这 标 志 着 发 生 一 个 不 可 挽 回 的 错 误, 这 是 在 ( 如 果 至 少 ) 具 体 实 现 决 定 的 情 况 下 发 生 的 (2) Vector Exception 向 量 异 常 当 处 理 器 是 32 位 配 置 (PROG32 被 激 活 ) 或 26 位 模 式 (CPSR[4]=0) 下, 数 据 访 问 ( 不 是 取 指 令 ) 异 常 向 量 表 ( 地 址 0x00~0x1F) 将 导 致 一 个 数 据 异 常, 这 称 为 向 量 异 常 (3) Alignment Fault: 对 齐 异 常 如 果 对 齐 异 常 被 允 许, 则 当 访 问 一 个 不 在 字 对 齐 地 址 的 数 据 字 ( 虚 拟 地 址 位 Bits[1 0]!=0b00) 或 访 问 一 个 不 在 半 字 对 齐 地 址 的 数 据 半 字 ( 虚 拟 地 址 位 Bits[0]!=0) 时 产 生 对 齐 异 常 取 指 令 和 字 节 访 问 将 不 产 生 对 齐 异 常 227
228 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 图 9.11 异 常 检 测 顺 序 (4) Translation Fault: 转 换 异 常 有 两 类 转 换 异 常 : 节 当 第 1 级 描 述 符 被 标 志 为 无 效 时 产 生 描 述 符 为 Bits[1 0]==0b00 页 当 第 2 级 描 述 符 被 标 志 为 无 效 时 产 生 描 述 符 为 Bits[1 0]==0b00 (5) Domain Fault: 域 异 常 有 两 类 域 异 常 : 节 异 常 页 异 常 在 这 两 种 情 况 下, 第 1 级 描 述 符 中 有 4 位 域 字 段 用 来 选 择 16 个 域 中 的 一 个 域 由 域 访 问 控 制 寄 存 器 中 的 两 个 位, 这 两 个 位 用 来 检 查 访 问 权 限 如 果 是 节, 则 域 访 问 的 检 查 在 第 1 级 描 述 符 返 回 时 进 行 如 果 是 页, 则 域 访 问 的 检 查 在 第 2 级 描 述 符 返 回 时 进 行 如 果 特 定 的 访 问 在 域 访 问 控 制 寄 存 器 中 被 标 识 为 不 可 访 问, 则 会 产 生 一 个 节 域 异 常 或 页 域 异 常 (6) Permission Fault: 权 限 异 常 有 节 权 限 异 常 和 子 页 权 限 异 常, 权 限 异 常 与 域 异 常 的 检 查 同 时 进 行 如 果 那 两 个 位 的 域 字 段 返 回 的 是 客 户, 权 限 检 查 进 行 如 下 228
第 9 章 ARM 存 储 管 理 229 节 如 果 第 1 级 描 述 符 定 义 了 一 个 节 访 问, 那 么 描 述 符 的 AP 位 定 义 了 访 问 是 否 允 许 如 果 访 问 不 允 许, 那 将 产 生 节 权 限 异 常 子 页 如 果 第 1 级 描 述 符 定 义 了 一 个 页 映 射 的 访 问, 那 么 第 2 级 描 述 符 可 以 定 义 一 个 微 页 小 页 或 大 页 如 果 第 2 级 描 述 符 定 义 了 一 个 微 页, 那 么 它 只 有 一 个 AP 位, 这 个 位 适 用 于 整 个 页 ; 否 则 第 2 级 描 述 符 有 4 个 AP 位 (AP3 AP2 AP1 和 AP0), 每 一 个 对 应 1/4 页 如 果 第 2 级 描 述 符 定 义 的 是 小 页, 那 么 AP3 选 择 顶 上 的 1 KB, AP0 选 择 底 下 的 1 KB 如 果 第 2 级 描 述 符 定 义 的 是 大 页, 那 么 AP3 选 择 顶 上 的 16 KB,AP0 选 择 底 下 的 16 KB, 被 选 择 的 AP 位 与 节 完 全 一 样 地 解 释, 只 是 产 生 的 是 子 页 错 4. 外 部 异 常 除 了 MMU 异 常,ARM 结 构 还 定 义 了 一 个 外 部 异 常 引 脚, 可 以 用 来 标 识 访 问 外 部 存 储 器 错 误 然 而 不 是 所 有 的 访 问 都 能 用 这 种 方 式 终 止, 为 此 这 个 引 脚 必 须 被 谨 慎 使 用 以 下 的 访 问 可 以 被 外 部 终 止 并 安 全 地 重 新 启 动 读 访 问 无 缓 冲 的 写 访 问 取 第 1 级 描 述 符 访 问 取 第 2 级 描 述 符 访 问 在 没 有 高 速 缓 存 和 没 有 缓 冲 的 存 储 器 区 域 的 信 号 访 问 行 读 取 能 够 在 行 传 送 的 任 何 一 个 字 上 安 全 地 终 止 如 果 异 常 发 生 在 处 理 器 请 求 的 数 据 上 ( 不 是 在 Cache Line 上 读 取 的 数 据 ), 则 访 问 被 终 止 对 于 不 是 立 刻 访 问 的 数 据 ( 在 Cache Line 上 取 的 数 据 ), 则 只 在 访 问 它 们 时 产 生 异 常 FAR 寄 存 器 由 具 体 实 现 确 定 是 指 向 Cache Line 的 起 始 地 址 还 是 指 向 产 生 异 常 的 地 址 缓 冲 的 写 访 问 不 能 被 外 部 终 止 系 统 必 须 配 置 成 不 能 标 识 外 部 异 常 的 存 储 器 区 进 行 缓 冲 的 写 访 问, 或 者 用 不 同 的 机 制 标 志 的 异 常 ( 如 中 断 ) 产 生 异 常 后, 那 个 存 储 器 空 间 的 值 是 不 确 定 的 9.2.7 CP15 寄 存 器 MMU 由 系 统 控 制 2 3 4 5 6 8 10 号 寄 存 器 和 1 号 寄 存 器 的 一 些 控 制 位 1. 寄 存 器 1 的 MMU 控 制 位 寄 存 器 1 的 如 下 这 些 位 用 来 控 制 MMU: M(Bit[0]): 使 能 MMU 0= 禁 止 MMU,1= 允 许 MMU 在 没 有 MMU 和 保 护 单 元 的 系 统 上, 这 个 位 应 该 读 出 为 0, 并 忽 略 写 A(Bit[1]): 使 能 对 齐 异 常 检 查 0= 禁 止,1= 允 许 S(Bit[8]): 系 统 保 护 位 R(Bit[9]):ROM 保 护 位 2. 寄 存 器 2 转 换 表 基 地 址 寄 存 器 2 各 位 分 配 如 图 9.12 所 示 229
230 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 图 9.12 寄 存 器 2 各 位 分 配 读 CP15 寄 存 器 2 时,Bits[31 14] 返 回 当 前 活 动 的 第 1 级 转 换 表 的 物 理 地 址,Bits[13 0] 不 确 定 CRm 和 操 作 数 2 被 忽 略, 值 为 0 写 CP15 寄 存 器 2 时, 在 Bits[31 14] 更 新 当 前 活 动 的 第 1 级 转 换 表 的 物 理 地 址,Bits[13 0] 应 该 写 0 或 是 先 前 读 访 问 的 值 CRm 和 操 作 数 2 被 忽 略, 值 为 0 3. 寄 存 器 3 域 访 问 控 制 域 访 问 控 制 寄 存 器 包 含 16 个 2 位 的 字 段, 它 定 义 了 对 应 域 的 访 问 权 限 寄 存 器 3 各 位 分 配 如 图 9.13 所 示 图 9.13 寄 存 器 3 各 位 分 配 读 CP15 寄 存 器 3 时, 返 回 域 访 问 控 制 寄 存 器 的 值 CRm 和 操 作 数 2 被 忽 略, 值 为 0 写 CP15 寄 存 器 3 时, 更 新 域 访 问 控 制 寄 存 器 的 值 CRm 和 操 作 数 2 被 忽 略, 值 为 0 4. 寄 存 器 4 保 留 读 / 写 CP15 寄 存 器 4 不 可 预 料 结 果 5. 寄 存 器 5 错 误 状 态 FSR 寄 存 器 5 各 位 分 配 如 图 9.14 所 示 图 9.14 寄 存 器 5 各 位 分 配 读 CP15 寄 存 器 5 时, 返 回 FSR 寄 存 器 的 值 FSR 包 含 最 近 一 次 数 据 异 常 的 信 息 只 有 低 9 位 有 效, 高 23 位 不 确 定 FSR 指 出 异 常 发 生 时 的 域 和 试 图 访 问 的 类 型 Bit[8]: 返 回 0 Bit[7:4]: 指 出 错 位 发 生 时 访 问 的 域 Bit[3:0]: 试 图 访 问 的 类 型 FSR 在 数 据 错 时 更 新 由 具 体 实 现 确 定 取 指 令 异 常 是 否 更 新 FSR CRm 和 操 作 数 2 被 忽 略, 值 为 0 写 FSR 将 把 FSR 设 定 成 写 的 值 这 对 于 程 序 调 试 器 非 常 有 用, 可 以 用 来 恢 复 FSR 的 值 高 24 位 应 该 写 0 或 是 上 次 读 访 问 的 值 CRm 和 操 作 数 2 被 忽 略, 值 为 0 230
第 9 章 ARM 存 储 管 理 231 6. 寄 存 器 6 错 误 地 址 FAR 读 CP15 寄 存 器 6 返 回 FAR 的 值 FAR 保 存 着 错 误 产 生 时 访 问 的 虚 拟 地 址, 在 数 据 错 时 更 新 FAR 由 具 体 实 现 确 定 取 指 令 异 常 是 否 更 新 FSR CRm 和 操 作 数 2 被 忽 略, 值 为 0 写 FSR 将 把 FAR 设 定 成 写 的 值 这 对 于 程 序 调 试 器 非 常 有 用, 可 以 用 来 恢 复 FAR 的 值 高 24 位 应 该 写 0 或 是 上 次 读 访 问 的 值 CRm 和 操 作 数 2 被 忽 略, 值 为 0 7. 寄 存 器 8TLB 功 能 当 CP15 的 寄 存 器 8 用 来 控 制 TLB 时 是 只 读 寄 存 器 表 9.5 显 示 了 定 义 的 TLB 功 能 和 在 MCR 指 令 中 用 的 CRm 和 第 2 个 操 作 数 <opcode2> 的 值 使 用 没 有 在 表 中 的 CRm 和 opcode2 的 组 合 将 导 致 不 可 预 料 的 结 果 表 9.5 TLB 功 能 功 能 Opcode2 CRm Data 指 令 无 效 的 唯 一 指 令 TLB 或 数 据 TLB 0b000 0b0111 SBZ MCR p15,0,rd,c8,c7,0 无 效 的 唯 一 的 单 一 入 口 0b001 0b0111 Virtual Address MCR p15,0,rd,c8,c7,1 无 效 的 整 个 指 令 TLB 0b000 0b0101 SBZ MCR p15,0,rd,c8,c5,0 无 效 的 指 令 单 一 入 口 0b001 0b0101 Virtual Address MCR p15,0,rd,c8,c5,1 无 效 的 整 个 数 据 TLB 0b000 0b0110 SBZ MCR p15,0,rd,c8,c6,0 无 效 的 数 据 单 一 入 口 0b001 0b0110 Virtual Address MCR p15,0,rd,c8,c6,1 如 果 下 面 的 任 何 操 作 被 用 在 单 一 TLB 的 实 现 中, 则 在 单 一 TLB 中 实 现 相 同 的 功 能 无 效 的 指 令 TLB (Invalidate Instruction TLB) 无 效 的 指 令 单 一 入 口 (Invalidate Instruction Single Entry) 无 效 的 整 个 数 据 TLB(Invalidate Entire Data TLB) 无 效 的 数 据 单 一 入 口 (Invalidate Data Single Entry) 否 则, 如 果 执 行 一 个 与 特 定 实 现 不 相 关 的 功 能, 会 导 致 不 确 定 的 结 果 当 只 有 很 少 量 的 存 储 器 被 重 新 映 射 时, 无 效 的 单 一 入 口 操 作 能 被 用 来 在 一 些 实 现 中 改 善 性 能 对 每 个 被 重 新 映 射 的 存 储 器 区 域 ( 节 小 页 或 大 页 ), 无 效 的 单 一 入 口 操 作 需 要 在 存 储 器 区 域 的 虚 拟 地 址 上 执 行 性 能 的 改 善 来 源 于 不 用 重 新 装 载 与 没 有 被 重 新 映 射 的 存 储 器 区 域 相 关 的 TLB 入 口 8.TLB 锁 定 过 程 转 换 表 遍 历 的 执 行 需 要 一 定 的 时 间, 特 别 当 访 问 慢 速 的 主 存 储 器 时 在 实 时 中 断 处 理 程 序 中, 当 TLB 不 包 含 中 断 处 理 程 序 的 转 换 和 / 或 要 访 问 的 数 据 时, 中 断 延 迟 会 大 量 加 长 TLB 锁 定 是 一 些 ARM 存 储 器 系 统 的 特 性, 它 允 许 把 特 定 的 转 换 表 遍 历 的 结 果 装 载 到 TLB 中 这 种 方 式 不 会 被 后 来 的 转 换 表 遍 历 的 结 果 覆 盖, 由 CP15 寄 存 器 10 设 定 设 W=LOG2(TLB 入 口 数 ), 如 果 需 要 的 话 取 整 (Round-Up), 则 CP15 寄 存 器 10 的 格 式 如 图 9.15 所 示 231
232 嵌 入 式 ARM 系 统 原 理 与 实 例 开 发 图 9.15 CP15 寄 存 器 10 的 格 式 如 果 具 体 的 实 现 有 分 开 的 指 令 和 数 据 TLB, 那 么 有 2 个 不 同 的 寄 存 器, 由 访 问 寄 存 器 10 的 MCR 或 MRC 指 令 中 的 opcode2 字 段 选 择 : opcode2=0 选 择 数 据 TLB 锁 定 寄 存 器 opcode2=1 选 择 指 令 TLB 锁 定 寄 存 器 如 果 具 体 的 实 现 只 有 唯 一 的 TLB, 那 么 只 有 1 个 寄 存 器,opcode2 字 段 应 该 为 0 访 问 寄 存 器 10 的 MCR 或 MRC 指 令 中 的 CRm 总 应 该 为 0 写 寄 存 器 10 有 如 下 结 果 : Victim 字 段 表 示 下 次 TLB 失 败 (Miss) 时, 转 换 表 遍 历 的 结 果 替 代 该 TLB 入 口 Base 字 段 包 含 TLB 替 换 的 策 略, 只 使 用 从 Base 到 (TLB 入 口 为 -1 的 TLB 入 口 Victim 应 该 在 该 区 间 转 换 表 遍 历 的 结 果 在 写 到 TLB 入 口 时, 若 P=1 则 它 被 保 护, 不 受 寄 存 器 8 使 整 个 TLB 禁 止 操 作 影 响 ; 若 P=0 则 会 由 于 那 些 操 作 而 导 致 禁 止 通 常 锁 定 N 个 TLB 入 口 的 过 程 如 下 (1) 禁 止 中 断, 保 证 该 过 程 执 行 时 不 会 产 生 异 常 (2) 如 果 一 个 指 令 TLB 或 唯 一 TLB 被 锁 定, 用 Base=N Index=N 和 P=0 写 到 适 当 版 本 的 寄 存 器 10 如 果 可 能, 将 其 他 指 令 预 取 很 难 理 解 的 分 支 预 测 功 能 关 掉 (3) 将 被 锁 定 的 整 个 TLB 失 效 (4) 如 果 指 令 TLB 锁 定, 要 确 保 剩 下 的 锁 定 过 程 所 要 预 取 的 指 令 相 关 的 TLB 入 口 都 被 装 载 ( 要 注 意 锁 定 开 始 的 地 址, 通 常 包 含 在 TLB 入 口 地 址 此 时 TLB 被 禁 止 后 的 第 一 条 指 令 能 完 成 该 功 能 ) 如 果 是 数 据 TLB 锁 定, 要 确 保 剩 下 的 锁 定 过 程 所 要 访 问 数 据 的 相 关 的 TLB 入 口 都 被 装 载 它 包 含 被 代 码 用 到 的 嵌 入 文 字 (Inline Literals)( 通 常 最 好 避 免 在 锁 定 过 程 中 使 用 嵌 入 文 字, 并 把 所 有 的 数 据 放 在 一 个 由 TLB 入 口 所 包 含 的 区 域, 并 从 该 处 加 载 一 个 数 据 ), 如 果 一 个 唯 一 TLB 被 锁 定, 则 执 行 以 上 所 有 的 过 程 (5) i 从 0 到 N-1 循 环 1 用 Base=i Index=i 和 P=1 写 到 寄 存 器 10 2 强 迫 被 锁 定 到 TLB 入 口 i 处 的 转 换 表 遍 历 结 果 的 存 储 器 区 域 发 生 转 换 表 遍 历 如 果 是 数 据 TLB 或 唯 一 TLB 被 锁 定, 则 需 从 该 区 域 加 载 一 个 数 据 ; 如 果 是 指 令 TLB 被 锁 定, 则 需 用 B5-15 页 所 描 述 的 指 令 预 取 高 速 缓 冲 寄 存 器 7 来 在 该 区 域 产 生 指 令 预 取 (6) 用 Base=N Index=N 和 P=0 写 到 寄 存 器 10 9. TLB 解 锁 过 程 用 上 面 的 过 程 解 锁 被 锁 定 的 TLB 部 分 : (1) 用 寄 存 器 8 的 操 作 使 每 个 被 锁 定 的 单 一 入 口 失 效 (2) 用 Base=0 Index=0 和 P=0 写 到 寄 存 器 10 232
第 9 章 ARM 存 储 管 理 233 内 存 管 理 单 元 是 嵌 入 式 设 备 底 层 软 件 开 发 最 为 重 要 的 部 分 之 一, 本 章 在 内 存 管 理 部 分 为 读 者 介 绍 了 存 储 器 的 基 本 原 理 及 常 见 存 储 设 备 的 基 本 特 点 和 使 用 根 据 存 储 容 量 和 存 储 速 度, 嵌 入 式 设 备 可 以 分 为 寄 存 器 (Register) 缓 存 (Cache) 内 存 (RAM) 外 存 (Disk) 等 4 级, 其 存 储 容 量 以 一 个 10 3 增 加, 速 度 也 成 次 方 速 率 下 降 寄 存 器 级 硬 件 主 要 在 底 层 硬 件 程 序 中 使 用 汇 编 指 令 来 访 问 和 存 取, 内 存 缓 存 及 外 存 管 理 由 操 作 系 统 完 成, 从 而 为 用 户 提 供 文 件 及 数 据 管 理 接 口, 上 层 应 用 开 发 者 一 般 不 用 太 多 关 注 存 储 器 具 体 管 理 实 现 本 章 9.1 节 主 要 介 绍 存 储 设 备 的 基 本 概 念, 包 括 存 储 设 备 的 分 类 常 见 RAM 及 Flash 的 特 点 及 应 用 领 域 本 章 9.2 节 主 要 介 绍 ARM 处 理 器 的 MMU( 存 储 管 理 单 元 ) 进 行 内 存 映 射 的 基 本 原 理 方 法, 详 细 介 绍 MMU 内 存 管 理 单 元 的 结 构 访 问 方 式 转 换 过 程 等 读 者 完 成 本 章 学 习 后, 应 该 对 存 储 设 备 的 基 本 原 理 基 本 概 念 有 一 个 比 较 清 楚 的 认 识, 对 ARM 处 理 器 的 MMU 管 理 方 案 有 一 个 初 步 认 识, 能 够 理 解 ARM 处 理 器 的 MMU 管 理 方 案 的 各 部 分 功 能 1. 常 见 的 存 储 器 设 备 有 哪 些, 各 有 哪 些 特 点? 2. 根 据 存 储 容 量 和 存 储 速 度 可 以 将 存 储 设 备 分 为 哪 些 类 型? 在 运 行 速 率 和 存 储 容 量 上 各 类 型 存 储 设 备 具 有 哪 些 主 要 特 点? 3. 试 分 析 DRAM SDRAM 和 RDRAM 的 特 点 4. 试 分 析 NAND 和 NOR Flash 存 储 设 备 的 主 要 特 点 及 区 别 5. 什 么 是 MMU TLB?MMU 管 理 单 元 的 主 要 功 能 是 什 么? 6. 试 画 出 高 速 缓 存 的 MMU 存 储 器 系 统 的 主 要 结 构 图 及 各 部 分 主 要 功 能 7. 试 分 析 各 级 内 存 单 元 转 换 过 程 233