¥ 76.61 7.7折 ¥ 99 九品
仅1件
作者[美]阿麦肯尚尔·拉姆阿塔德兰(Umakishore Ramachandran)、小威廉·D·莱希(William D.Leahy) 著;陈文允 译
出版社机械工业出版社
出版时间2015-07
版次1
装帧平装
货号A3
上书时间2024-12-15
《计算机系统:系统架构与操作系统的高度集成》采用集成方法,系统地讲解了计算机系统的软件和硬件知识。全书分为5个模块:处理器、内存系统、存储系统、并行系统和网络,分别介绍并讨论了处理器及其相关的软件问题、内存系统和内存分级体系、I/O和文件系统、操作系统问题及支持并行编程的多处理器中相应体系结构特点、网络硬件的发展和处理各种网络行为的网络协议堆的特点等。
Umakishore Ramachandran,
拥有威斯康星大学麦迪逊分校计算机科学专业博士学位。现在是佐治亚理工学院计算机系教授,STAR Center & Korean Programs中心主任。主要研究兴趣是体系结构设计、程序设计和并行分布式系统分析。曾获得NSF授予的美国总统青年研究人员奖、佐治亚理工学院优秀博士论文指导奖、杰出教师奖等。 2014年,他被选为IEEE会士。
William D. Leahy Jr.
现为佐治亚理工学院计算机系讲师,讲授计算机科学的入门课程。他拥有佐治亚理工学院计算机科学硕士学位,在加入学术界之前,他有24年工业界的从业经验。
陈文光,
清华大学计算机系教授。现为ACM中国理事会副主席;中国计算机学会杰出会员和杰出讲者,副秘书长。主要研究领域为操作系统、编译器与并行计算。讲授《计算机原理与系统结构》《计算机系统性能分析》等本科生、研究生课程。获国家科技进步二等奖一次,部级科技一等奖两次,部级科技进步二等奖两次。在计算机系统结构、程序设计语言与编译器、并行计算和软件的国际一流会议(如PLDI、PPoPP、PACT、ICSE、OOPSLA、Supercomputing CGO等)上连续发表多篇论文。PLDI 2012、PPoPP 2013、2014和CGO 2014程序委员会委员。任《Communication of ACM China Edition》主编,《Journal of Computer Science and Technology》《软件学报》等学术期刊编委。
出版者的话
译者序
前言
第1章 概述1
1.1 盒子里有什么1
1.2 计算机系统中的抽象层次1
1.3 操作系统的作用3
1.4 盒子里正在发生什么事5
1.4.1 在计算机上启动应用程序7
1.5 计算机硬件的演化7
1.6 操作系统的演化9
1.7 本书导读9
练习题10
参考文献注释和扩展阅读10
第2章 处理器体系结构12
2.1 处理器设计涉及什么12
2.2 如何设计指令集13
2.3 常见的高级语言功能集13
2.4 表达式和赋值语句14
2.4.1 操作数放在哪里14
2.4.2 在指令中如何指定内存地址17
2.4.3 每个操作数应该有多宽18
2.4.4 字节序9
2.4.5 操作数打包以及字操作数的对齐21
2.5 高级数据抽象22
2.5.1 结构23
2.5.2 数组23
2.6 条件语句和循环24
2.6.1 if-then-else语句25
2.6.2 switch语句26
2.6.3 循环语句27
2.7 检查点27
2.8 编译函数调用27
2.8.1 调用者的状态28
2.8.2 过程调用剩余的工作30
2.8.3 软件惯例31
2.8.4 活动记录35
2.8.5 递归36
2.8.6 帧指针36
2.9 指令集体系结构选择38
2.9.1 额外的指令38
2.9.2 额外的寻址模式39
2.9.3 体系结构类型39
2.9.4 指令格式39
2.10 LC-2200指令集42
2.10.1 指令格式42
2.10.2 LC-2200寄存器组43
2.11 影响处理器设计的问题44
2.11.1 指令集44
2.11.2 应用程序对指令集设计的影响45
2.11.3 其他驱动处理器设计的问题46
小结47
练习题47
参考文献注释和扩展阅读49
第3章 处理器实现51
3.1 体系结构与实现51
3.2 处理器实现涉及什么51
3.3 重要的硬件概念52
3.3.1 电路52
3.3.2 数据通路的硬件资源52
3.3.3 边沿触发逻辑53
3.3.4 连接数据通路元件54
3.3.5 基于总线的设计57
3.3.6 有限状态机59
3.4 数据通路设计60
3.4.1 ISA与数据通路宽度61
3.4.2 时钟脉冲宽度62
3.4.3 检查点62
3.5 控制单元设计62
3.5.1 ROM加状态寄存器63
3.5.2 FETCH宏状态65
3.5.3 DECODE宏状态68
3.5.4 EXECUTE宏状态:ADD指令(R型指令部分)68
3.5.5 EXECUTE宏状态:NAND指令(R型指令部分)71
3.5.6 EXECUTE宏状态:JALR指令(J型指令部分)71
3.5.7 EXECUTE宏状态:LW指令(I型指令部分72
3.5.8 EXECUTE宏状态:SW和ADDI指令(I型指令部分)75
3.5.9 EXECUTE宏状态:BEQ指令(I型指令部分) 75
3.5.10 设计微程序中的条件分支78
3.5.11 再谈DECODE宏状态79
3.6 控制单元设计的另一种选择80
3.6.1 微程序控制80
3.6.2 硬连线控制81
3.6.3 在两种控制设计风格中选择82
小结82
历史回顾83
练习题84
参考文献注释和扩展阅读86
第4章 中断、陷入及异常87
4.1 程序执行中的不连续性88
4.2 处理程序不连续性89
4.3 处理程序不连续性的体系结构改进91
4.3.1 修改FSM91
4.3.2 一个简单的中断处理过程92
4.3.3 处理级联中断92
4.3.4 从处理过程中返回95
4.3.5 检查点95
4.4 处理程序不连续性的硬件细节96
4.4.1 中断的数据通路细节96
4.4.2 获得处理过程地址的细节97
4.4.3 保存/恢复栈99
4.5 信息汇总100
4.5.1 体系结构和硬件改进总结100
4.5.2 工作中的中断机制100
小结102
练习题103
参考文献注释和扩展阅读104
第5章 处理器性能与流水线处理器的设计105
5.1 时间和空间性能指标 105
5.2 指令频率107
5.3 基准测试程序108
5.4 提升处理器的性能111
5.5 加速比112
5.6 提升处理器的吞吐量114
5.7 流水线简介115
5.8 指令处理流水线115
5.9 简单指令流水线的问题117
5.10 修正指令流水线里的问题118
5.11 指令流水线的数据通路元件120
5.12 针对流水线的体系结构与实现121
5.12.1 指令穿过流水线的过程
详解122
5.12.2 流水线寄存器的设计124
5.12.3 各个阶段的实现125
5.13 冒险125
5.13.1 结构性冒险126
5.13.2 数据冒险126
5.13.3 控制冒险135
5.13.4 冒险总结141
5.14 在流水线处理器里处理程序
不连续性142
5.15 处理器设计的高级话题144
5.15.1 指令级并行144
5.15.2 更深的流水线145
5.15.3 在乱序执行下再次讨论
程序不连续性147
5.15.4 管理共享资源148
5.15.5 功耗149
5.15.6 多核处理器设计149
5.15.7 Intel Core微架构:
一个流水线150
小结151
历史回顾152
练习题152
参考文献注释和扩展阅读156
第6章 处理器调度157
6.1 引言157
6.2 程序和进程158
6.3 调度环境161
6.4 调度基础162
6.5 性能指标165
6.6 非抢占式调度算法167
6.6.1 先到先服务167
6.6.2 最短作业优先170
6.6.3 优先级171
6.7 抢占式调度算法172
6.7.1 轮转调度器175
6.8 结合优先级和抢占178
6.9 元调度器178
6.10 评价179
6.11 调度对处理器体系结构的影响180
小结和展望181
Linux调度器—一个案例研究181
历史回顾183
练习题185
参考文献注释和扩展阅读186
第7章 内存管理技术187
7.1 内存管理器提供的功能187
7.2 内存管理的简单方案189
7.3 内存分配方案192
7.3.1 固定尺寸分区192
7.3.2 变长分区193
7.3.3 缩并195
7.4 分页虚拟内存196
7.4.1 页表197
7.4.2 支持分页的硬件 199
7.4.3 页表的建立 199
7.4.4 虚拟和物理内存的相对大小200
7.5 分段虚拟内存200
7.5.1 支持分段的硬件204
7.6 分页和分段的比较204
7.6.1 解读CPU生成的地址206
小结207
历史回顾208
MULTICS209
Intel的内存体系结构210
练习题211
参考文献注释和扩展阅读212
第8章 页式内存管理213
8.1 按需分页213
8.1.1 按需分页的硬件213
8.1.2 页错误处理程序214
8.1.3 按需分页内存管理的
数据结构214
8.1.4 页错误解析215
8.2 进程调度器和内存管理器间交互217
8.3 页替换策略218
8.3.1 Belady的Min算法219
8.3.2 随机替换 219
8.3.3 先进先出策略219
8.3.4 最近最少使用策略221
8.3.5 第二次机会页替换算法223
8.3.6 页替换算法回顾225
8.4 优化内存管理225
8.4.1 空闲页帧池225
8.4.2 颠簸226
8.4.3 工作集228
8.4.4 颠簸控制229
8.5 其他考虑229
8.6 旁路转换缓存230
8.6.1 TLB的地址转换231
8.7 内存管理的高级话题232
8.7.1 多级页表232
8.7.2 局部页表项的访问权限234
8.7.3 反向页表234
小结234
练习题234
参考文献注释和扩展阅读236
第9章 分级存储体系237
9.1 缓存的概念238
9.2 局部性原理238
9.3 基本术语238
9.4 多级存储层次239
9.5 缓存结构241
9.6 直接映射缓存结构241
9.6.1 缓存查找243
9.6.2 缓存项中的字段244
9.6.3 用于直接映射缓存的硬件245
9.7 流水线处理器设计的影响247
9.8 缓存读/写算法247
9.8.1 CPU对缓存的读访问248
9.8.2 CPU对缓存的写访问248
9.9 处理器流水线中的缓存缺失处理251
9.9.1 在流水线性能上缓存缺失
对内存延迟的影响252
9.10 利用空间局部性提高缓存性能253
9.10.1 增加块大小对性能的影响256
9.11 灵活的布局策略257
9.11.1 全相关缓存258
9.11.2 组相关缓存259
9.11.3 组相关的极端情况261
9.12 指令和数据缓存263
9.13 降低缺失损失264
9.14 缓存替换策略264
9.15 缺失类型简要说明266
9.16 TLB和缓存整合268
9.17 缓存控制器269
9.18 虚拟索引物理标记的缓存270
9.19 缓存设计因素概述271
9.20 主存的设计因素272
9.20.1 简单的主存272
9.20.2 与缓存块大小相匹配的主
存和总线273
9.20.3 交错式内存273
9.21 现代主存系统分析274
9.21.1 页式DRAM278
9.22 分级存储体系的性能影响279
小结280
现代处理器的分级存储体系(一个例子)281
练习题281
参考文献注释和扩展阅读283
第10章 输入/输出和稳定性存储284
10.1 CPU和I/O设备间的通信284
10.1.1 设备控制器284
10.1.2 内存映射I/O285
10.2 程控I/O287
10.3 DMA288
10.4 总线290
10.5 I/O处理器291
10.6 设备驱动292
10.6.1 例子293
10.7 外围设备295
10.8 磁盘存储器296
10.8.1 磁盘技术的传奇故事302
10.9 磁盘调度算法304
10.9.1 先到先服务305
10.9.2 最短寻道时间优先305
10.9.3 SCAN305
10.9.4 C-SCAN306
10.9.5 LOOK和C-LOOK307
10.9.6 磁盘调度总结307
10.9.7 算法比较308
10.10 固态硬盘 309
10.11 I/O总线和设备驱动的演化310
10.11.1 设备驱动的动态负载311
10.11.2 信息汇总312
小结314
练习题314
参考文献注释和扩展阅读315
第11章 文件系统317
11.1 属性317
11.2 在磁盘子系统上实现文件系统
的设计选择321
11.2.1 连续分配322
11.2.2 带有溢出区域的连续分配324
11.2.3 链接分配324
11.2.4 文件分配表325
11.2.5 索引分配327
11.2.6 多级索引分配328
11.2.7 混合索引分配328
11.2.8 不同分配策略的比较331
11.3 信息汇总331
11.3.1 索引节点336
11.4 文件系统的组件336
11.4.1 创建、写入文件的剖析337
11.5 各种子系统的交互337
11.6 文件系统在物理媒介上的布局340
11.6.1 内存中的数据结构342
11.7 处理系统崩溃343
11.8 其他物理媒介上的文件系统343
11.9 现代文件系统一览344
11.9.1 Linux344
11.9.2 Microsoft Windows348
小结349
练习题350
参考文献注释和扩展阅读352
第12章 多线程编程与多处理器353
12.1 为什么需要多线程353
12.2 线程所需的编程支持354
12.2.1 线程创建和终止354
12.2.2 线程之间的通信356
12.2.3 读/写冲突、竞争条件及不确定性357
12.2.4 线程之间的同步361
12.2.5 线程库中数据类型的内部表示365
12.2.6 简单的编程示例366
12.2.7 死锁和活锁369
12.2.8 条件变量370
12.2.9 视频处理示例的完整解决方案373
12.2.10 解决方案的讨论374
12.2.11 重新检查条件375
12.3 线程函数调用和多线程编程概念总结377
12.4 线程编程的一些注意事项379
12.5 使用线程作为软件结构抽象379
12.6 POSIX pthread库调用总结379
12.7 操作系统对线程的支持382
12.7.1 用户级线程383
12.7.2 内核级线程385
12.7.3 Solaris线程:一个内核级线程例子386
12.7.4 线程和库387
12.8 在单处理器上的多线程的硬件支持388
12.8.1 线程创建、终止以及线程间的通信388
12.8.2 线程之间的同步388
12.8.3 原子的Test-and-Set指令388
12.8.4 使用Test-and-Set指令的Lock算法390
12.9 多处理器391
12.9.1 页表391
12.9.2 分级存储体系391
12.9.3 保证原子性393
12.10 高级话题393
12.10.1 操作系统话题393
12.10.2 架构话题 403
12.10.3 未来之路:多核与众核架构412
小结413
历史回顾414
练习题 415
参考文献注释和扩展阅读417
第13章 网络与网络协议基础知识419
13.1 预备知识419
13.2 基本术语419
13.3 网络软件423
13.4 协议栈424
13.4.1 因特网协议栈424
13.4.2 OSI模型426
13.4.3 分层的实际问题427
13.5 应用层427
13.6 传输层428
13.6.1 停止并等待协议429
13.6.2 流水线协议431
13.6.3 可靠的流水线协议432
13.6.4 处理传输错误436
13.6.5 因特网上的传输协议437
13.6.6 传输层总结438
13.7 网络层439
13.7.1 路由算法439
13.7.2 因特网寻址444
13.7.3 网络服务模式446
13.7.4 网络路由与转发449
13.7.5 网络层总结450
13.8 链路层和局域网450
13.8.1 以太网451
13.8.2 CSMA/CD451
13.8.3 IEEE 802.3453
13.8.4 无线局域网与IEEE 802.11453
13.8.5 令牌环454
13.8.6 其他链路层协议456
13.9 网络硬件456
13.10 协议栈各层之间的关系460
13.11 用于数据包传输的数据结构460
13.11.1 TCP/IP包头461
13.12 消息传输时间462
13.13 协议层功能总结466
13.14 网络软件与操作系统466
13.14.1 套接字库467
13.14.2 在操作系统中实现协议栈468
13.14.3 网络设备驱动程序468
13.15 使用UNIX套接字进行网络编程469
13.16 网络服务与高层协议474
小结475
历史回顾475
练习题480
参考文献注释和扩展阅读482
第14章 尾声:旅途回顾483
14.1 处理器设计483
14.2 进程483
14.3 虚拟内存系统和内存管理483
14.4 分级存储体系484
14.5 并行系统484
14.6 输入/输出系统484
14.7 永久性存储484
14.8 网络485
结束语485
附录A 使用UNIX套接字进行网络编程486
参考文献495
索引500
— 没有更多了 —
以下为对购买帮助不大的评价