logo资料库

See.MIPS.Run.2nd.中文版(免费).pdf

第1页 / 共444页
第2页 / 共444页
第3页 / 共444页
第4页 / 共444页
第5页 / 共444页
第6页 / 共444页
第7页 / 共444页
第8页 / 共444页
资料共444页,剩余部分请下载后查看
首页
译者说明
目录
前言
MIPS 和 RISC 体系结构
流水线
什么因素使得流水线效率低下?
流水线和高速缓存
MIPS 的五级流水线
RISC 和 CISC
过去和现在的一些有代表性的 MIPS 芯片
R2000 到 R3000 处理器
R6000 处理器:一度转向
第一个 CPU 核
QED: 嵌入式系统里的快速 MIPS 处理器
R10000 处理器及其后继者
消费类电子产品领域的 MIPS 处理器
网络路由器和激光打印机领域的 MIPS
当今时代的 MIPS 处理器
今天
MIPS 和 CISC 体系结构比较
MIPS 指令集的限制
寻址和访存
MIPS 没有的特性
程序员可见的流水线效果
MIPS 体系结构
MIPS 汇编语言的风格初探
寄存器
通用寄存器的习惯命名和用法
整数乘法部件及寄存器
加载与存储:寻址方式
存储器与寄存器的数据类型
整数数据类型
未对齐的加载和存储
内存中的浮点数据
汇编语言的合成指令
MIPS I 到 MIPS64 ISA: 64 位(和其它)的扩展
发展到 64 位
谁需要 64 位?
关于 64 位与 CPU 模式切换:寄存器中的数据
基本地址空间
简单系统的寻址
核心与用户特权级
完整的图像:64 位的地址映射
流水线可见性
协处理器 0:MIPS 处理器控制
CPU 控制指令
什么时候要用到哪些寄存器?
CPU 控制寄存器及其编码
状态寄存器(SR)
原因寄存器(Cause)
异常返回地址(EPC)寄存器
无效虚拟地址(BadVaddr)寄存器
Count/Compare 寄存器:CPU 片上定时器
处理器 ID(PRId) 寄存器
Config 寄存器:CPU 资源信息和配置
EBase 和 IntCtl:中断和异常设置
SRSCtl 和 SRSMap:影子寄存器的设置
连锁加载地址(LLAddr)寄存器
CP0 遇险 ――提防落入陷阱
遇险防护指令
指令遇险和用户遇险
在 CP0 指令之间的防护
MIPS 的高速缓存工作机制
高速缓存及其管理
高速缓存是怎样工作的
早期 MIPS CPU 的透写高速缓存
MIPS CPU 的回写高速缓存
高速缓存设计的一些其它考虑
管理高速缓存
二级(L2)和三级(L3)高速缓存
MIPS CPU 的高速缓存配置
对 MIPS32/64 高速缓存的编程
cache 指令
高速缓存初始化和 Tag/Data 寄存器
CacheERR、ERR 和 ErrorEPC 寄存器:存储器/高速缓存出错处理
确定高速缓存的大小和配置
初始化程序
作废或者回写高速缓存中的存储区
高速缓存的效率
重新组织软件以影响高速缓存的效率
高速缓存重影
异常、中断及初始化
精确异常
非精确异常 ――历史上的 MIPS CPU 中的乘法器
异常发生的时机
异常向量:异常处理开始的地方
异常处理:基本过程
从异常返回
嵌套异常
异常处理例程
中断
MIPS CPU 的中断资源
软件实现中断优先级
原子性以及对 SR 的原子修改
允许中断的临界区:MIPS 式的信号量
MIPS32/64 CPU 中的向量化和 EIC 中断
影子寄存器
启动
检测和识别你的 CPU
引导步骤
启动应用程序
指令仿真
底层内存管理与 TLB
TLB/MMU 硬件及其作用
TLB/MMU 寄存器
TLB 关键字域 ――EntryHi 和 PageMask
TLB 输出域 ――EntryLo0--1
选择 TLB 的表项 ――Index、Random 和 Wired 寄存器
页表存取辅助寄存器 ―― Context 和 XContext
TLB/MMU 的控制指令
TLB 编程
重填是怎样发生的?
使用 ASID
Random 寄存器和 Wired 寄存器
对硬件友好的页表和重填机制
TLB 未命中处理
XTLB 未命中处理程序
MIPS TLB 的日常使用
更简单的操作系统中的内存管理
浮点支持
有关浮点数的基本概念
IEEE 754 标准及其历史背景
IEEE 浮点数的存储方式
IEEE 尾数和规格化
为特殊值使用而保留的指数值
MIPS FP 数据格式
MIPS 对 IEEE 754 的实现
所有 MIPS CPU 都需要浮点自陷处理程序和仿真程序
浮点寄存器
浮点寄存器的传统习惯命名和用法
浮点异常/中断
浮点控制:控制/状态寄存器
浮点实现寄存器
浮点指令指南
Load/Store
寄存器间传送
三操作数算术运算
乘加操作
单目(变号)操作
数据转换操作
条件分支和测试指令
单精度对浮点指令以及 MIPS-3D ASE
异常和单精度对浮点指令
单精度对三操作数算术运算、乘加、变号和无条件数据传送操作
单精度对的类型转换操作
单精度对的测试和条件传送指令
MIPS-3D 指令
指令时序要求
指令时序和速度
即需初始化和使能
浮点仿真
MIPS 指令集参考大全
一个简单的例子
汇编指令及其意义
带 U 和不带 U (Non-U) 的助记符
除法助记符
指令清单列表
浮点指令
与 MIPS32/64 第一版的差别
第二版增加的普通指令
第二版增加的特权指令
特殊指令及其用途
向左加载/向右加载:未对齐的加载和存储
连锁加载/条件存储
条件传送指令
可能分支
整数乘加和累加指令
浮点乘加指令
多个浮点条件位
预取
Sync:用于 load/store 的存储器防护
遇险防护指令
synci: 为改写指令的程序做高速缓存管理
读取硬件寄存器
指令编码
指令编码表中的各个域
指令编码表的几点注释
编码和简单实现
指令按功能分类
空操作
寄存器/寄存器传送
常数加载
算术/逻辑运算
整数乘法、除法和求余数
整数乘(累)加
加载和存储
跳转、子程序调用和分支
断点和自陷
CP0 功能:CPU 控制指令
浮点指令
用户态下对``地下''特性的有限访问
阅读 MIPS 汇编语言代码
一个简单的例子
语法概要
布局、定界符和标识符
指令的一般规则
计算指令:三、二、一个寄存器
带立即数的运算指令
关于 32/64 位指令
寻址模式
相对于 GP 的寻址
目标文件及其在存储器映像中的布局
包括堆和栈在内的实际的程序布局
向 MIPS 体系结构移植软件
MIPS 应用程序的底层软件:常见问题一览表
尾端:字、字节和位序
比特、字节、字和整数
软件和尾端问题
硬件和尾端
MIPS CPU 的双尾端软件
可移植性和尾端无关的代码
尾端和外来数据
高速缓存可见性带来的问题
高速缓存管理和 DMA 数据
高速缓存管理和向内存写入指令:自修改代码
高速缓存管理和非高速缓存或透写的数据
高速缓存重影和页面着色
访问内存的次序安排及调整
访存次序和写缓冲器
实现 wbflush
用 C 语言开发
用 GNU C 编译器包裹汇编代码
存储器映射的 I/O 寄存器和``volatile''
用 C 语言开发 MIPS 应用时的其它杂七杂八的问题
MIPS 软件标准 (ABI)
数据表示和对齐
基本数据类型的宽度
``long''和指针类型的宽度
对齐要求
基本类型在内存中的布局和及其随尾端的变化
结构体和数组类型的内存布局和对齐
结构体中的位域
C 中非对齐的数据
MIPS ABI 的参数传递和堆栈约定
堆栈、子程序链接和参数传递
o32 中的堆栈参数结构
用寄存器传递参数
C 语言库函数中的例子
一个反常的例子:传递结构体
传递不定数量的参数
从函数返回一个值
寄存器用法标准的演化:SGI 的 n32 和 n64
栈的布局、栈帧以及对调试器的支持
个数不固定的参数和 stdargs
MIPS 调试 ――调试和剖析
``EJTAG''片上调试单元
EJTAG 的历史
怎样控制 CPU
通过 EJTAG 的调试通信
调试模式
单步运行
dmseg 存储器译码区域
EJTAG 的 CP0 寄存器,尤其是 Debug
DCR (调试控制)存储器映射寄存器
EJTAG 的断点硬件
理解断点条件
非精确的调试断点
EJTAG 的 PC 取样
无接探器使用 EJTAG
``EJTAG''之前的调试支持 ――断点指令和 CP0 观察点
PDtrace
性能计数器
天上掉下个林妹妹 ――GNU/Linux
基本概念
内核的分层结构
异常模式中的 MIPS CPU
关闭部分或全部中断的 MIPS CPU
中断环境
在线程环境中执行内核
软硬件怎样协同工作
中断处理的过程和时间
高性能中断处理和 Linux
线程、临界区和原子性
MIPS 体系结构和原子操作
Linux 回旋锁
系统调用时发生什么
MIPS/Linux 系统的地址转换
为什么要做存储器地址转换
基本的进程布局和保护
进程地址到真实存储器的映射
分页映射
我们真正想要什么
MIPS 设计的起源
跟踪被修改的页(模拟``涂写(Dirty)''位)
内核对 TLB 重填异常的服务过程
TLB 的维护以及注意事项
存储器地址转换和 64 位指针
Linux 内核中关于 MIPS 的专门问题
直接管理高速缓存
DMA 设备存取
动态生成随后要执行的指令
高速缓存/存储器映射问题
高速缓存重影
CP0 流水线遇险
多处理器系统和高速缓存一致性
关键例程的手工调优
Linux 应用程序代码、PIC、库
链接单元怎样构成一个程序
全局偏移量表(GOT)的组织
MIPS 多线程
什么是多线程?
同时运行两个线程需要哪些资源?
为什么要用 MT?
MIPS 怎样实现多线程?
MT 新增的 CP0 寄存器
异常和中断
MIPS MT 和中断
线程优先级提示
用户权限的动态线程创建 ――fork 指令
MT 在实际中的应用
SMP Linux
用 MT 实现高速响应的程序设计
MIPS 指令集的其它可选扩展
MIPS16 和 MIPS16e ASE
MIPS16 ASE 中的特殊编码格式和指令
对 MIPS16 ASE 的评价
MIPS DSP ASE
MDMX ASE
MIPS 术语表
参考资料
译者补遗
封底
分享到:
收藏