新書推薦:
《
社会正义谬误:机会平等比结果平等更重要
》
售價:HK$
75.9
《
汗青堂丛书152·草原帝国:阿提拉、成吉思汗与帖木儿
》
售價:HK$
165.0
《
DK拆解科技大百科
》
售價:HK$
140.8
《
逆龄之路(减龄10岁的变美魔法书,女性全身抗衰指南)
》
售價:HK$
74.8
《
厚土无疆:古代中国的今生与来世
》
售價:HK$
96.8
《
画龙西方传世影像里的中国形象1500-1949
》
售價:HK$
173.8
《
似锦
》
售價:HK$
82.5
《
首饰之美:国宝里的中式美学
》
售價:HK$
173.8
編輯推薦:
·对基于闪存的固态硬盘(SSD)等现代存储方案进行了全面的讨论。 ·包含事件驱动服务器、现代64位架构、文件系统、输入/输出、虚拟化、云计算等方面的新进展。 ·安全部分聚焦于与操作系统设计和结构直接相关的主题,如新的攻击和防御方法。 ·实例研究部分从Windows 8.1更新为Windows 11,关于Linux和Android的部分也做了全面更新。
內容簡介:
本书是操作系统领域的经典教材,涵盖操作系统设计师需要掌握的所有核心概念,并深入探讨了进程与线程、内存管理、文件系统、输入/输出、死锁、虚拟化和云、多处理机系统、操作系统设计等主题。案例研究部分详细分析了Windows、Android和Linux等流行的操作系统。第5版对知识点做了与时俱进的更新,更加关注现代存储方案、新的安全防御方法等,同时优化篇章结构,全面反映了当代操作系统的技术动向与发展趋势。本书适合作为高等院校计算机专业的操作系统课程教材,也适合相关技术人员参考。
關於作者:
安德鲁·S.塔嫩鲍姆(Andrew S. Tanenbaum)拥有麻省理工学院理学学士学位和加州大学伯克利分校哲学博士学位,现为荷兰阿姆斯特丹自由大学计算机科学方向的荣休教授。他曾担任计算与图像高级学院院长,这是一个主要研究高级并行、分布式以及图像系统的跨学科研究生院。同时,他也是荷兰皇家艺术与科学院的学院教授。此外,他还赢得过享有盛名的欧洲研究理事会卓越贡献奖。过去一段时间里,他的主要研究方向是编译器、操作系统、网络以及分布式系统。在这个研究方向上,他已经发表了200多篇期刊论文。塔嫩鲍姆教授还撰写或参与撰写了5本教材,已经被翻译成20多种语言,其中包括巴斯克语和泰语。这些教材被全球的大学生使用,总计有163个版本。塔嫩鲍姆教授还编写了大量的软件,特别是MINIX,它是一个小型的UNIX,并为Linux以及Linux最初开发的平台提供了宝贵的灵感。如今的MINIX版本是MINIX 3,其开发目标是成为一个非常可靠和安全的操作系统。只有当任何用户都不会遇到操作系统崩溃的情况时,塔嫩鲍姆教授才认为他完成了自己的工作。MINIX 3是一个欢迎所有人来完善的开放源代码项目,可以访问www.minix3.org下载MINIX 3的免费版本,并试着运行它。x86和ARM版本都可用。塔嫩鲍姆教授的博士生在毕业后都有很好的前途,他们当中有些人成为教授,有些人则在政府组织和行业中发挥了领导作用。对此,教授本人感到非常自豪。在培养学生方面,他可以说是桃李满天下。塔嫩鲍姆教授是ACM会士、IEEE会士,也是荷兰皇家艺术与科学院院士。他荣获了相当多的ACM、IEEE和USENIX奖项。如果你对此感到好奇,可以去他的Wikipedia主页查看。他还拥有两个荣誉博士学位。赫伯特·博斯(Herbert Bos)拥有荷兰特温特大学硕士学位和英国剑桥大学博士学位。此后,他为Linux类操作系统的可信I/O架构做了大量工作,同时也基于MINIX 3研究操作系统。他现在是荷兰阿姆斯特丹自由大学计算机科学学院系统安全研究小组的教授,主要研究方向是系统安全。他的研究小组发现并分析了硬件和软件中的许多漏洞。从有缺陷的内存芯片到易受攻击的CPU,从操作系统中的缺陷到新奇的开发技术,他的研究已经修复了大多数主流操作系统、流行的浏览器和所有现代Intel处理器所遇到的问题。在赫伯特教授看来,攻击性研究是有价值的,因为导致当今安全问题的主要原因是系统变得如此复杂,以至于我们不再理解它们。通过研究如何使系统以意想不到的方式运行,我们可以更多地了解它们的(真实)本质。而有了这个知识库,开发人员就可以在未来改进他们的设计。事实上,虽然复杂的新漏洞攻击更容易得到关注,但赫伯特把大部分时间都花在开发防御技术上,从而提高安全性。赫伯特教授的学生(包括已毕业的)都很优秀。由于学生的优异表现,赫伯特教授在拉斯维加斯的黑帽会议上获得了5次Pwnie奖。此外,他的5名学生获得了ACM SIGOPS EuroSys Roger Needham奖,该奖颁发给系统领域欧洲最佳博士论文;两名学生获得了ACM SIGSAC博士论文奖,该奖项颁发给安全领域最佳博士论文;另外两名学生则因可靠性方面的研究获得了William C. Carter博士论文奖。
目錄 :
目 录译者序前言作者简介第1章 引论11.1 什么是操作系统21.1.1 作为扩展机器的操作系统31.1.2 作为资源管理器的操作系统41.2 操作系统的历史51.2.1 第一代计算机(1945~ 1955年):真空管和穿 孔卡片51.2.2 第二代计算机(1955~ 1965年):晶体管和批 处理系统51.2.3 第三代计算机(1965~ 1980年):集成电路芯 片和多道程序设计71.2.4 第四代计算机(1980年 至今):个人计算机111.2.5 第五代计算机(1990年 至今):移动计算机131.3 计算机硬件简介141.3.1 处理器151.3.2 存储器171.3.3 非易失性存储器201.3.4 I/O设备211.3.5 总线231.3.6 启动计算机 241.4 操作系统大观园251.4.1 大型机操作系统251.4.2 服务器操作系统261.4.3 个人计算机操作系统261.4.4 智能手机和掌上计算机操作 系统261.4.5 物联网和嵌入式操作系统261.4.6 实时操作系统271.4.7 智能卡操作系统271.5 操作系统概念281.5.1 进程281.5.2 地址空间291.5.3 文件301.5.4 输入/输出321.5.5 保护321.5.6 shell321.5.7 个体重复系统发育331.6 系统调用351.6.1 用于进程管理的系统调用381.6.2 用于文件管理的系统调用401.6.3 用于目录管理的系统调用411.6.4 各种系统调用421.6.5 Windows API431.7 操作系统结构451.7.1 单体系统451.7.2 层次式系统461.7.3 微内核461.7.4 客户端-服务器模式481.7.5 虚拟机491.7.6 外核和unikernel521.8 依靠C的世界521.8.1 C语言531.8.2 头文件531.8.3 大型编程项目541.8.4 运行模型551.9 有关操作系统的研究551.10 本书其他部分概要561.11 公制单位561.12 小结57习题57第2章 进程与线程602.1 进程602.1.1 进程模型602.1.2 进程的创建622.1.3 进程的终止632.1.4 进程的层次结构642.1.5 进程的状态652.1.6 进程的实现662.1.7 多道程序设计模型672.2 线程682.2.1 线程的使用682.2.2 经典的线程模型712.2.3 POSIX线程742.2.4 在用户空间中实现线程752.2.5 在内核中实现线程782.2.6 混合实现792.2.7 使单线程代码多线程化792.3 事件驱动服务器822.4 同步和进程间通信842.4.1 竞争条件842.4.2 临界区852.4.3 忙等待的互斥862.4.4 睡眠与唤醒902.4.5 信号量922.4.6 互斥量952.4.7 管程982.4.8 消息传递1032.4.9 屏障1052.4.10 优先级反转1062.4.11 避免锁:读-复制-更新1072.5 调度1082.5.1 调度简介1082.5.2 批处理系统中的调度1132.5.3 交互式系统中的调度1142.5.4 实时系统中的调度1182.5.5 策略和机制1192.5.6 线程调度1192.6 有关进程与线程的研究1212.7 小结121习题122第3章 内存管理1273.1 无内存抽象1273.2 一种内存抽象:地址空间1303.2.1 地址空间的概念1303.2.2 交换技术1323.2.3 空闲内存管理1343.3 虚拟内存1363.3.1 分页1373.3.2 页表1393.3.3 加速分页过程1423.3.4 针对大内存的页表1443.4 页面置换算法1473.4.1 最优页面置换算法1483.4.2 最近未使用页面置换算法1483.4.3 先进先出页面置换算法1493.4.4 第二次机会页面置换算法1493.4.5 时钟页面置换算法1503.4.6 最近最少使用页面置换算法1513.4.7 用软件模拟LRU1513.4.8 工作集页面置换算法 1523.4.9 工作集时钟页面置换算法1553.4.10 页面置换算法小结1573.5 分页系统中的设计问题1573.5.1 局部分配策略与全局分配 策略1583.5.2 负载控制1593.5.3 清除策略1603.5.4 页面大小1613.5.5 分离的指令空间和数据空间1623.5.6 共享页面1633.5.7 共享库1643.5.8 内存映射文件1653.6 有关实现的问题1663.6.1 与分页有关的操作系统工作1663.6.2 缺页中断处理1663.6.3 指令备份1673.6.4 锁定内存中的页面1683.6.5 后备存储1683.6.6 策略和机制的分离1693.7 分段1713.7.1 纯分段的实现1723.7.2 分段和分页结合:MULTICS1733.7.3 分段和分页结合:Intel x861763.8 有关内存管理的研究1763.9 小结177习题178第4章 文件系统1844.1 文件1854.1.1 文件命名1854.1.2 文件结构1864.1.3 文件类型1874.1.4 文件访问1894.1.5 文件属性1894.1.6 文件操作1904.1.7 使用文件系统调用的一个 示例程序1914.2 目录概述1934.2.1 一级目录系统1934.2.2 层次目录系统1944.2.3 路径名1944.2.4 目录操作1954.3 文件系统的实现1964.3.1 文件系统布局1964.3.2 文件的实现1984.3.3 目录的实现2014.3.4 共享文件2034.3.5 日志结构文件系统2054.3.6 日志文件系统2064.3.7 闪存文件系统2074.3.8 虚拟文件系统 2104.4 文件系统管理和优化2134.4.1 磁盘空间管理2134.4.2 文件系统备份2174.4.3 文件系统的一致性2214.4.4 文件系统性能2234.4.5 磁盘碎片整理2274.4.6 压缩和重复数据删除2274.4.7 文件安全删除和磁盘加密2284.5 文件系统实例2294.5.1 MS-DOS文件系统2294.5.2 UNIX V7 文件系统2314.6 有关文件系统的研究2334.7 小结234习题234第5章 输入/输出2385.1 I/O硬件原理2385.1.1 I/O设备2385.1.2 设备控制器2395.1.3 内存映射I/O2405.1.4 直接存储器存取2435.1.5 重温中断2455.2 I/O软件原理2485.2.1 I/O软件的目标2495.2.2 程序控制I/O2505.2.3 中断驱动I/O2515.2.4 使用DMA的I/O2525.3 I/O软件层次2525.3.1 中断处理程序2525.3.2 设备驱动程序2535.3.3 与设备无关的I/O软件2565.3.4 用户空间的I/O软件2605.4 大容量存储:磁盘和固态硬盘2615.4.1 磁盘2625.4.2 固态硬盘2705.4.3 RAID2735.5 时钟2775.5.1 时钟硬件2775.5.2 时钟软件2785.5.3 软定时器2805.6 用户界面:键盘、鼠标和显示器2815.6.1 输入软件2815.6.2 输出软件2865.7 瘦客户机2985.8 电源管理2995.8.1 硬件问题3005.8.2 操作系统问题3015.8.3 应用程序问题3055.9 有关输入/输出的研究3055.10 小结306习题307第6章 死锁3126.1 资源3126.1.1 可抢占资源和不可抢占资源3126.1.2 资源获取3136.1.3 哲学家进餐问题3146.2 死锁概述3176.2.1 资源死锁的条件3176.2.2 死锁模型3176.3 鸵鸟算法3196.4 死锁检测和死锁恢复3206.4.1 每种类型一个资源的死锁 检测3206.4.2 每种类型多个资源的死锁 检测3226.4.3 从死锁中恢复3236.5 死锁避免3246.5.1 资源轨迹图3256.5.2 安全状态和不安全状态3266.5.3 单个资源的银行家算法3276.5.4 多个资源的银行家算法3276.6 死锁预防3286.6.1 破坏互斥条件3296.6.2 破坏占有并等待条件3296.6.3 破坏不可抢占条件3296.6.4 破坏循环等待条件3306.7 其他问题3306.7.1 两阶段加锁3306.7.2 通信死锁3316.7.3 活锁3326.7.4 饥饿3336.8 有关死锁的研究3346.9 小结334习题335第7章 虚拟化和云3397.1 历史3407.2 虚拟化的必要条件3427.3 第一类和第二类虚拟机管理程序3447.4 高效虚拟化的技术3457.4.1 在不支持虚拟化的平台上 实现虚拟化3457.4.2 虚拟化的开销3477.5 虚拟机管理程序是正确的 微内核吗3487.6 内存虚拟化3507.7 I/O虚拟化3537.8 多核CPU上的虚拟机3557.9 云3557.9.1 云即服务3567.9.2 虚拟机迁移3567.9.3 检查点3577.10 操作系统级虚拟化3577.11 案例研究:VMware3597.11.1 VMware的早期历史3597.11.2 VMware Workstation3607.11.3 将虚拟化引入x86的挑战3617.11.4 VMware Workstation解决 方案概览3627.11.5 VMware Workstation的演变3677.11.6 VMware的第一类虚拟机 管理程序ESX Server3687.12 有关虚拟化和云的研究3697.13 小结370习题370第8章 多处理机系统3728.1 多处理机3738.1.1 多处理机硬件3748.1.2 多处理机操作系统类型3828.1.3 多处理机同步3858.1.4 多处理机调度3888.2 多计算机3948.2.1 多计算机硬件3948.2.2 低层通信软件3988.2.3 用户层通信软件3998.2.4 远程过程调用4028.2.5 分布式共享存储器4048.2.6 多计算机调度4078.2.7 负载平衡4078.3 分布式系统4108.3.1 网络硬件4118.3.2 网络服务和协议4148.3.3 基于文档的中间件4168.3.4 基于文件系统的中间件4178.3.5 基于对象的中间件4218.3.6 基于协作的中间件4228.4 有关多处理机系统的研究4248.5 小结425习题426第9章 安全4299.1 操作系统安全基础4309.1.1 CIA安全三要素4319.1.2 安全原则4319.1.3 操作系统结构的安全性4339.1.4 可信计算基4349.1.5 攻击者4359.1.6 可信系统4379.2 保护机制4389.2.1 保护域4389.2.2 访问控制列表4409.2.3 权能字4429.3 安全系统的形式化模型4459.3.1 多级安全4469.3.2 密码学4479.3.3 可信平台模块4509.4 认证4519.4.1 密码4519.4.2 使用物理识别的认证方式4569.4.3 使用生物识别的认证方式4579.5 软件漏洞4589.5.1 缓冲区溢出攻击4599.5.2 格式化字符串攻击4659.5.3 UAF攻击4689.5.4 类型混淆漏洞4689.5.5 空指针间接引用攻击4709.5.6 整数溢出攻击4709.5.7 命令注入攻击4719.5.8 检查时间/使用时间攻击4729.5.9 双重获取漏洞4729.6 利用硬件漏洞4739.6.1 隐蔽信道4739.6.2 侧信道4759.6.3 瞬态执行攻击4779.7 内部攻击4819.7.1 逻辑炸弹4819.7.2 后门陷阱4819.7.3 登录欺骗4829.8 操作系统加固4829.8.1 细粒度随机化4839.8.2 控制流限制4849.8.3 准入限制4859.8.4 代码和数据完整性检查4889.8.5 使用可信平台模块的远程 认证4889.8.6 封装不受信任的代码4909.9 有关安全的研究4919.10 小结492习题493第10章 实例研究1:UNIX、Linux 和Android49810.1 UNIX与Linux的历史49810.1.1 UNICS49810.1.2 PDP-11 UNIX49910.1.3 可移植的UNIX50010.1.4 伯克利UNIX50110.1.5 标准UNIX50110.1.6 MINIX50210.1.7 Linux50310.2 Linux概述50510.2.1 Linux的设计目标50510.2.2 到Linux的接口50610.2.3 shell50710.2.4 Linux应用程序50910.2.5 内核结构51110.3 Linux中的进程51310.3.1 基本概念51310.3.2 Linux中进程管理相关的系统 调用51510.3.3 Linux中进程与线程的实现51810.3.4 Linux中的调度52310.3.5 Linux中的同步52610.3.6 启动Linux系统52610.4 Linux中的内存管理52810.4.1 基本概念52910.4.2 Linux中的内存管理系统 调用53110.4.3 Linux中内存管理的实现53210.4.4 Linux中的分页53610.5 Linux中的I/O系统53810.5.1 基本概念53810.5.2 网络53910.5.3 Linux中的I/O系统调用54110.5.4 I/O在Linux中的实现54110.5.5 Linux中的模块54410.6 Linux文件系统54410.6.1 基本概念54410.6.2 Linux中的文件系统调用54810.6.3 Linux文件系统的实现55110.6.4 网络文件系统55710.7 Linux的安全性56110.7.1 基本概念56110.7.2 Linux中安全相关的系统 调用56310.7.3 Linux中的安全实现56410.8 Android56410.8.1 Android与Google56510.8.2 Android的历史56510.8.3 设计目标56910.8.4 Android体系结构56910.8.5 Linux扩展57110.8.6 ART57410.8.7 Binder IPC57510.8.8 Android应用58110.8.9 意图58910.8.10 进程模型59010.8.11 安全和隐私59410.8.12 后台执行和社会工程60610.9 小结610习题611第11章 实例研究2:Windows 1161611.1 通过Windows11简述Windows的 历史61611.1.1 20世纪80年代:MS-DOS61711.1.2 20世纪90年代:基于MS- DOS的Windows61711.1.3 21世纪最初十年:基于NT 的Windows61811.1.4 Windows Vista62011.1.5 Windows 862011.1.6 Windows 1062111.1.7 Windows 11 62211.2 Windows编程62211.2.1 通用Windows平台62311.2.2 Windows子系统62411.2.3 本地NT API62511.2.4 Win32 API62711.2.5 Windows 注册表63011.3 系统结构63111.3.1 操作系统结构63211.3.2 启动Windows64311.3.3 对象管理器的实现64511.3.4 子系统、DLL和用户态服务65411.4 Windows中的进程和线程65511.4.1 基本概念65611.4.2 作业、进程、线程和纤程 管理API调用65911.4.3 进程和线程的实现66311.4.4 WoW64和模拟67011.5 内存管理67311.5.1 基本概念67311.5.2 内存管理系统调用67711.5.3 内存管理的实现67811.5.4 内存压缩68511.5.5 内存分区68711.6 Windows的高速缓存68911.7 Windows的I/O69011.7.1 基本概念69011.7.2 I/O的API调用69111.7.3 I/O实现69311.8 Windows NT 文件系统69711.8.1 基本概念69711.8.2 NTFS的实现69811.9 Windows电源管理70511.10 Windows虚拟化70711.10.1 Hyper-V70711.10.2 容器71211.10.3 基于虚拟化的安全71611.11 Windows的安全71711.11.1 基本概念71811.11.2 安全相关的API调用72011.11.3 安全性的实现72011.11.4 安全修复72211.12 小结728习题729第12章 操作系统设计73312.1 设计问题的本质73312.1.1 目标73312.1.2 设计操作系统为什么困难73412.2 接口设计73612.2.1 指导原则73612.2.2 范型73712.2.3 系统调用接口74012.3 实现74212.3.1 系统结构74212.3.2 机制与策略74412.3.3 正交性74512.3.4 命名74612.3.5 绑定的时机74712.3.6 静态与动态结构74712.3.7 自顶向下与自底向上的 实现74812.3.8 同步通信与异步通信74912.3.9 实用技术75012.4 性能75412.4.1 操作系统为什么运行缓慢75412.4.2 什么应该优化75412.4.3 空间-时间的权衡75512.4.4 缓存75712.4.5 线索75812.4.6 利用局部性75812.4.7 优化常见的情况75812.5 项目管理75912.5.1 人月神话75912.5.2 团队结构76012.5.3 经验的作用76112.5.4 没有银弹762习题762第13章 参考书目与文献76513.1 进行深入阅读的建议76513.1.1 引论76513.1.2 进程与线程76513.1.3 内存管理76613.1.4 文件系统76613.1.5 输入/输出76713.1.6 死锁76813.1.7 虚拟化和云76813.1.8 多处理机系统76813.1.9 安全76913.1.10 实例研究1:UNIX、Linux 和Android77013.1.11 实例研究2:Windows 1177013.1.12 操作系统设计77013.2 按字母顺序排列的参考文献771
內容試閱 :
前 言这一版与第4版有很大的不同。由于操作系统并非一成不变,所以书中随处可见许多为介绍新内容而做的细小改动。例如,第4版几乎只关注用于存储的磁盘,而第5版则对基于闪存的固态硬盘(SSD)给予了与其受欢迎程度相匹配的关注。关于Windows 8.1的章节已被新的关于Windows 11的章节完全取代。我们重写了安全相关章节的大部分内容,更多地关注与操作系统直接相关的主题(以及新的攻击和防御方法),同时减少了对密码学和隐写术的讨论。以下是有关各章节更改的概要。第1章在许多地方进行了大量修改和更新,但除了删去对CD-ROM和DVD的描述,引入使用SSD和持久性存储器等现代存储解决方案外,没有增加或删除任何主要部分。第2章增加了对事件驱动服务器的讨论,并提供了一个包含伪代码的详尽示例。我们将优先级反转作为独立的一小节,并在其中讨论了处理该问题的方法。本书重新排列了一些章节,以使讨论更加清晰。例如,在介绍生产者-消费者后立即讨论了读者-写者问题,并将哲学家进餐问题完全转移到第6章。除了许多细节更新外,还删除了一些较为陈旧的内容,如调度程序激活和弹出线程。第3章现在关注的是现代64位体系结构,包含了对分页和TLB的更为精确的解释。例如,描述了操作系统如何使用分页,以及一些操作系统如何将内核映射到用户的进程地址空间。第4章的内容有很大变化,删除了对CD-ROM和磁带的冗长描述,增加了有关基于SSD的文件系统、在现代基于UEFI的计算机系统中引导以及安全文件删除和磁盘加密的内容。第5章介绍了更多关于固态硬盘和NVMe的内容,并使用现代USB键盘而不是第4版中旧的PS/2键盘来解释输入设备。此外,还阐明了中断、陷阱、异常和故障之间的关系。如前所述,本书在第6章中增加了哲学家进餐的例子。除此之外,这一章几乎没有变化。死锁这一主题相当稳定,基本没有新的研究成果。第7章中,在现有的(和更新的)基于虚拟化管理程序的介绍中增加了关于容器的内容。有关VMware的资料也已更新。第8章是关于多处理机系统的更新版本,增加了关于同时多线程的小节,并讨论了新型的协处理器。同时删除了一些小节,如过时的关于IXP网络处理器的内容和(现在已经失效的)关于CORBA中间件的内容。新增的一小节讨论了安全性调度。第9章经过了大量修订并重新组织了内容,增加了对与操作系统相关的内容的关注,减少了对加密货币的关注。现在,我们从讨论安全设计的原则以及与操作系统结构的关联性开始本章。我们讨论了令人兴奋的新硬件开发,如Meltdown和Spectre瞬态执行漏洞,这些漏洞自第4版以来就已曝光。此外,我们还描述了对操作系统很重要的新的软件漏洞。最后,大幅扩展了对操作系统硬化方式的描述,深入讨论了控制流完整性、细粒度ASLR、代码签名、访问限制和证明。由于这一领域有许多正在进行的研究,因此增加了新的参考文献,并重写了研究部分。第10章反映了Linux和Android的最新发展。自第4版以来,Android已经有了相当大的进展,因此,本章详细介绍了Android的当前版本,相关小节已基本重写。第11章变化很大。第4版介绍的是Windows 8.1,而现在介绍的是Windows 11。这基本上是一个全新的章节。第12章在第4版的基础上略有修订。本章介绍了系统设计的基本原则,这些原则在过去几年中没有太大变化。第13章是一份更新的建议阅读书目清单。此外,参考文献列表也进行了更新,收录了在本书第4版推出后发表的100多篇新论文。此外,为了反映最新的操作系统研究成果,本书的研究部分已完全重写。而且,所有章节都增加了新的问题。教师的补充资料(包括PowerPoint)放在https://www.pearsonhighered.com/cs-resources上。许多人参与了第5版的修订工作。第7章中有关VMware的内容(见7.11节)是由Edouard Bugnion完成的,他来自洛桑联邦理工学院(EPFL)。Edouard是VMware的创始人之一,他比任何人都更了解VMware,我们非常感谢他的大力支持。佐治亚理工学院的Ada Gavrilovska是Linux内核专家,她更新了本书的第10章,并且第4版的第10章也是她编写的。第10章中关于Android的内容是由Google的Dianne Hackborn撰写的,她是Android系统的主要开发者之一。Android是智能手机上最流行的操作系统,所以我们非常感谢Dianne的帮助。如今第10章篇幅较长且内容十分详尽,UNIX、Linux和Android的粉丝可以从中学到很多。然而,我们并没有忽略Windows。微软的Mehmet Iyigun更新了本书的第11章,这一章详细介绍了Windows 11。Mehmet对Windows有着丰富的知识和足够的洞察力,能够判断微软正确和错误的地方。他也得到了Andrea Allievi、Pedro Justo、Chris Kleynhans和Erick Smith的大力协助。Windows的粉丝肯定会喜欢这一章。由于这些专家的努力,本书变得更好了。在此,再一次感谢他们提供的帮助。还有几位审稿人阅读了本书草稿,并对章末习题提出了新的建议。他们是Jeremiah Blanchard(佛罗里达大学)、Kate Holdener(圣路易斯大学)、Liting Hu(弗吉尼亚理工大学)、Jiang-Bo Liu(布拉德利大学)和Mai Zheng(爱荷华州立大学)。当然,我们仍然对任何出现的错误负责。阿姆斯特丹自由大学VUSec团队的几位成员在这一版中也发挥了重要作用。我们非常感谢Cristiano Giuffrida对第4版内容增删提出的诸多宝贵建议。同时,Erik van der Kouwe、Sebastian Osterlund和Johannes Blaser在安全章节所有新增内容的反馈上展现出了惊人的速度。我们也要感谢编辑Tracy Johnson,她确保这个项目能顺利进行,协调好所有的人和事,尽管这些工作是线上进行的。Erin Sullivan负责审稿过程,Carole Snyder负责制作工作。最后(放在最后但并非不重要),Barbara、Marvin和Matilde还是那么出众。Aron和Nathan是好孩子,Olivia和Mirte对我们来说是珍宝。当然,我要感谢Suzanne的爱和耐心,更不用说那些美味的druiven(葡萄)、kersen(樱桃)和sinaasappelsap(橙汁)以及其他农产品了。(来自Tanenbaum)与以往一样,我非常感谢Marieke、Duko和Jip。感谢Marieke,在我写本书的无数个小时里一直陪伴在我身边。感谢Duko和Jip把我从写书中拽出来,不分昼夜地去打篮球!也很感激邻居们容忍我们的午夜篮球比赛。(来自Bos)Andrew S. TanenbaumHerbert Bos