书籍详情

IA-64 Linux内核设计与实现

IA-64 Linux内核设计与实现

作者:(美)David Mosberger,(美)Stephane Eranian著;梁金昆等译;梁金昆译

出版社:清华大学出版社

出版时间:2004-11-01

ISBN:9787302096108

定价:¥45.00

购买这本书可以去
内容简介
  本书是操作系统软件发展史上的一个里程碑,将介绍一种强大而又完全开放的操作系统,并采用独特视角分析了将其内核移植到一个崭新的CPU架构上的内核设计师们的设计思路。本书适用于学习操作系统编程的学生,也能教给经验丰富的内核程序员一两个窍门。本书从技术角度深入地介绍了现代CPU及其指令集和架构,以及Linux内核;并展示了现代微处理器的设计师们如何从效率和可伸缩性的角度来构建微处理器:另外还介绍了在与硬件无关的层次上内核的设计目标,以及介于与硬件无关的部分和IA-64架构之间的特定实现。本书涵盖了内核设计师在把Linux移植到IA-64的过程中所做出的全部决策,这展示了他们如何将硬件和软件整合为一个能正常运转的系统。本书的作者之一跻身于能接替LinusTorvalds领导Linux内核开发的最后候选人之列。两位作者均受聘于HP的研究实验室,HP公司创造了IA-64的直系祖先及其架构,后来与Intel合作开发IA-64架构。两位作者领导了Linux内核向IA-64处理器的移植,因此他们是讲述这一主题的最佳人选。如果想从系统程序员的角度理解IA-64架构,或者想更深刻地理解Linux内核,或是面临着以下任务:改进软件对处理器的利用,把某个操作系统移植到一种新型的处理器上,乃至设计一种新型的CPU,本书都将很适合你。本书为学习操作系统的学生提供了理论联系实际的重要桥梁。这面临着一个严峻的考验:保持架构整洁和可移植的抽象目标面临着必须在实际的CPU上高效且可靠运行的挑战。但最具革命意义的一点是对于所有读者来说,本书实际上是完全可用的。仅仅几年前,本书的内容和相关源代码很可能还属于商业秘密,而拥有这些资料的公司估计它们具有数千万美元的价值。就算只是想看看IA-64内核源代码,就必须先在HP的少数几个部门之中找到一份工作。只是好奇的人或者学生是没有这样的机会的。实际上,在20世纪90年代初,AT&T估计其UNIX系统的知识产权价值为2.5亿美元。资金雄厚的大学有时候会购买允许研究生使用UNIX源代码的授权,但是一旦如此,那些研究员便加入了一份令人反感的非公开协定。时代已经改变了:现在你已被授权使用该操作系统内核的全部源代码,甚至可以随意把它复制给你的朋友!是什么使这一改变成为可能呢?原因就是LinusTorvalds和数百名合作者以源代码的形式公开了Linux内核,而最重要的是有了革命性的GNU通用公共许可(GNU GPL)。GPL的自由软件(FreeSoftware)模型允许对该系统及其源代码的自由使用和分发,允许任何人参加该系统的开发,使独立的开发人员和商业界结成伙伴,但同时限制了合作的任何一方不公平地利用另一方。欢迎你加入其中。要理解GPL对Linux的重要性,必须要考虑20世纪80年代末到90年代初,UNIX所面临的走向衰落的困境。商业人士深信Microsoft NT很快将一统天下。在那个时期,甚至连Apple和NeXT的创立者SteveJobs都让步了,在其Pixar的台式机上安装了Windows系统,而不是他自己的产品。但下面两个因素拯救了UNIX:Microsoft承诺发布企业级NT,但该计划延误了5年多的时间:而GNU/Linux系统复兴了UNIX的革命。GNU和Linux重新点燃了UNIX世界的希望,这完全是因为它们具有开放、共享的特性,并将其统一为一个能在所有厂商的硬件平台上运行的通用操作系统。UNIX曾饱受过度分化的痛苦:为了紧紧抓住客户,每个厂商都对系统进行了修改,而厂商非常渴望挣回数量相当大的研发费用,以至于他们按用户数量对UNIX客户收费,并限制其系统只允许客户授权已付费的用户登录。而遵循GPL的Linux则不易受到强制分化和知识产权保护问题的困扰:GPL的条款要求对软件的改进必须与所有人共享,而且规定拥有软件的任何人都能对其进行修改。一旦能修改软件,你就能去除对系统的任何限制。GPL对于共享和类似于共享的规定趋向于涵盖操作系统和底层硬件。这侵犯了厂商的利润,但完全符合客户的利益。实际效果是厂商开始把操作系统看作支持软件,而不是利润的直接来源。做到这一点是可能的,因为自由软件的协作特性意味着任何个人或公司都不需要过多地负担开发和服务的费用。公司可以与其直接的竞争对手共享这种五分化软件的开发,有些公司已经这样做了。例如,IBM和HP虽然为Linux的市场份额而竞争,但它们都热衷于在许多自由软件项目上进行合作。通过这种方式,这两家公司可以共同完成无法独立靠各自的预算来进行的工作。这就是自由软件革命的合理结果:你现在可以研究和修改那些几年前还是私有的成果,取得这些成果的人也不再保护其技术只限于其雇员使用,而会毫无保留地告诉你他们是如何取得这一成果的。本书从技术上深入地介绍了IA-64架构及其相应版本的Linux内核。因为你可以随心所欲地探索Linux系统,所以本书对你没有丝毫的隐瞒。通过这些课程,你能学会把Linux内核移植到另一种处理器上,向内核添加新的特性,乃至为IA-64编写一个全新的操作系统。你也可以选择只是更加深入地了解应用程序如何获得操作系统提供的服务,以及它们为何采取现有的运行方式。如何使用这些信息完全取决于你的选择。它们不再是实验室里的秘密,相关的知识产权保护问题也已不复存在,操作系统的大门被猛然地推开。革命已经到来:进来探索其中的奥秘吧。——BrucePerenS
作者简介
  David Mosberger是惠普实验室的高级研究专家。在1998年初,他创立了一个项目,将Linux引入IA-64平台,随后开发了第一个IA-64 Linux内核源代码方面的首席设计师、开发人员和负责人。Stephane Eranian是惠普实验室的高级研究专家。他从1998年下半年开始从事将Linux引入IA-64平台的工作。他是内核性能监控子系统的主要设计师,兼任Linux/IA-64elilo引导装载程序的负责人。
目录
第1章 引言
 1.1 微处理器:从CISC到EPIC
  1.1.1 微处理器分类小结
  1.1.2 IA-64的架构和安腾
 1.2 Linux简史
  1.2.1 早期发展
  1.2.2 分支发展:Linux走向多平台
  1.2.3 IA-64 Linux
  1.2.4 Linux发展史小结
 1.3 Linux内核概述
  1.3.1 主要概念
  1.3.2 硬件模型
  1.3.3 内核组件
  1.3.4 内核源码
 1.4 小结
第2章 IA-64架构
 2.1 用户级指令集的架构
  2.1.1 指令格式
  2.1.2 指令顺序化
  2.1.3 寄存器组
  2.1.4 指令集概述
  2.1.5 整型数与SIMD指令
  2.1.6 内存/信号量指令
  2.1.7 分支指令
  2.1.8 与寄存器堆栈有关的指令
  2.1.9 控制指令
  2.1.10 浮点型指令
  2.1.11 模调度循环
 2.2 运行时/软件规范
  2.2.1 数据模型
  2.2.2 寄存器用法
  2.2.3 过程链接
  2.2.4 内存堆栈
  2.2.5 寄存器堆栈
  2.2.6 全局指针
  2.2.7 IA-64汇编语言编程
 2.3 系统指令集架构
  2.3.1 系统寄存器组
  2.3.2 特权指令
  2.3.3 中断
 2.4 寄存器堆栈引擎
  2.4.1 寄存器堆栈配置寄存器
  2.4.2 处理NaT位
  2.4.3 RSE算术
  2.4.4 RSE算术辅助例程
  2.4.5 影响RSE的指令
 2.5 小结
第3章 进程、任务和线程
 3.1 Linux任务
  3.1.1 创建任务
  3.1.2 历史的观点
 3.2 线程接口
  3.2.1 pt_regs结构
  3.2.2 switch_stack结构
  3.2.3 线程结构
  3.2.4 IA-64寄存器堆栈
  3.2.5 IA-64线程状态小结
  3.2.6 运行线程
  3.2.7 创建线程
  3.2.8 终止线程
  3.2.9 跨地址空间边界移动线程
 3.3 线程同步
  3.3.1 并发模式
  3.3.2 原子操作
  3.3.3 信号量
  3.3.4 中断屏蔽
  3.3.5 自旋锁
 3.4 小结
第4章 虚拟内存
 4.1 虚拟内存系统简介
  4.1.1 虚拟地址到物理地址的转换
  4.1.2 请求页面调度
  4.1.3 页面调度和交换
  4.1.4 保护
 4.2 Linux进程的地址空间
  4.2.1 用户地址空间
  4.2.2 页表映射的内核段
  4.2.3 一对一映射的内核段
  4.2.4 IA-64地址空间的结构
 4.3 页表
  4.3.1 折叠页表层
  4.3.2 虚拟映射的线性页表
  4.3.3 Linux/ia64页表的结构
  4.3.4 页表项
  4.3.5 页表访问
  4.3.6 页表目录的创建
 4.4 旁路转换缓冲区
  4.4.1 IA-64 TLB架构
  4.4.2 TLB一致性的维护
  4.4.3 迟缓的TLB清除
 4.5 页面错误处理
  4.5.1 示例:写时复制的工作原理
  4.5.2 Linux页面错误处理程序
  4.5.3 IA-64实现
 4.6 内存一致性
  4.6.1 Linux内核中的一致性维护
  4.6.2 IA-64实现
 4.7 切换地址空间
  4.7.1 地址空间切换的接口
  4.7.2 IA-64实现
 4.8 讨论与总结
第5章 内核入口与出口
 5.1 中断
  5.1.1 内核入口路径
  5.1.2 内核出口路径
  5.1.3 讨论
  5.1.4 IA-64实现
  5.1.5 切换IA-64寄存器堆栈
 5.2 系统调用
  5.2.1 错误信号
  5.2.2 重新启动系统调用执行
  5.2.3 从内核调用系统调用
  5.2.4 IA-64实现
 5.3 信号
  5.3.1 与信号有关的系统调用
  5.3.2 信号递交
  5.3.3 IA-64实现
 5.4 内核存取用户内存
  5.4.1 示例:gettimeofday()如何返回timeval结构
  5.4.2 禁用合法性检测
  5.4.3 IA-64实现
 5.5 小结
第6章 栈展开
 6.1 IA-64 ELF展开段
 6.2 内核展开接口
  6.2.1 管理展开表
  6.2.2 遍历调用链
  6.2.3 访问当前帧的CPU状态
  6.2.4 展开接口的使用
 6.3 在汇编代码中嵌入展开信息
  6.3.1 区间指令
  6.3.2 序言指令
  6.3.3 过程体指令
  6.3.4 通用指令
  6.3.5 实例
 6.4 实现方面
  6.4.1 帧信息结构
  6.4.2 展开描述符处理
  6.4.3 展开脚本
  6.4.4 迟缓初始化和脚本提示
  6.4.5 综合考虑
 6.5 小结
第7章 I/O设备
 7.1 简介
  7.1.1 现代计算机的结构
  7.1.2 现代计算机上的I/O软件支持
 7.2 编程I/O
  7.2.1 内存映射I/O
  7.2.2 端口I/O
 7.3 直接内存访问
  7.3.1 PCIDMA接口
  7.3.2 示例:发送网络数据包
  7.3.3 IA-64实现
 7.4 设备中断
  7.4.1 IA-64硬件中断架构
  7.4.2 设备中断接口
  7.4.3 中断处理
  7.4.4 管理IA-64中断定向逻辑
 7.5 小结
第8章 对称多处理
 8.1 Linux中的多处理
 8.2 Linux锁定
  8.2.1 锁定规则
  8.2.2 大内核锁
 8.3 多处理机支持接口
  8.3.1 支持实用工具
  8.3.2 IA-64实现
 8.4 CPU相关数据
  8.4.1 错误共享
  8.4.2 CPU相关数据的虚拟映射
 8.5 挂钟时间维护
  8.5.1 多处理机中的挂钟时间维护
  8.5.2 同步MP机器上的周期计数器
 8.6 小结
第9章 系统性能
 9.1 IA-64性能监测单元概述
  9.1.1 PMU寄存器组
  9.1.2 控制监测
  9.1.3 处理计数器溢出
 9.2 扩展安腾PMU
  9.2.1 安腾PMU的额外功能
  9.2.2 安腾PMU寄存器组
  9.2.3 安腾PMU事件
  9.2.4 事件采样的硬件支持
  9.2.5 事件地址寄存器
  9.2.6 分支追踪缓冲区
  9.2.7 其他特性
 9.3 内核性能监测支持
  9.3.1 perfmon接口
  9.3.2 perfmon实现
  9.3.3 perfmon接口应用示例
 9.4 小结
第10 章 启动
 10.1 IA-64固件概述
  10.1.1 处理器抽象层
  10.1.2 系统抽象层
  10.1.3 高级配置和电源接口
  10.1.4 可扩展固件接口
 10.2 启动装载程序
  10.2.1 装载内核映像
  10.2.2 装载初始RAM磁盘
  10.2.3 装载FPSWA
  10.2.4 收集启动参数
  10.2.5 启动内核
 10.3 内核初始化
  10.3.1 引导接口
  10.3.2 IA-64实现
 10.4 小结
第11章 IA-32兼容性
 11.1 对1A-32的架构支持
  11.1.1 IA-32用户级机器状态
  11.1.2 IA-32用户级机器状态与IA-64寄存器之间的映射
  11.1.3 IA-32分段与内存寻址
  11.1.4 IA-32与IA-64之间的控制权传递
 11.2 Linux对IA-32应用程序的支持
  11.2.1 IA-32任务的内核表示
  11.2.2 模拟IA-32任务的地址空问
  11.2.3 绝对文件系统路径
  11.2.4 启动IA-32可执行程序
  11.2.5 系统调用模拟
  11.2.6 信号传递
  11.2.7 访问I/O端口空间
 11.3 小结
附录A IA-64 CPU模型
附录B 内核寄存器用法
附录C IA-64指令
 C.1 整数指令
 C.2 内存指令
 C.3 信号量指令
 c.4 分支指令
 C.5 控制指令
 C.6 多媒体指令
 C.7 浮点指令
 C.8 特权指令
附录D 安腾PMU事件
附录E 词汇表
参考文献
猜您喜欢

读书导航