本书分为系统编程与操作系统两大部分。第1部分介绍了语言处理程序、语言处理程序的数据结构、扫描与分析、汇编程序、宏与宏处理程序、编译程序和解释程序、连接程序和软件工具等内容;第2部分介绍了操作系统功能的演化、进程、调度、死锁、进程同步、进程间通信、存储器管理、IO组织和IO编程、文件系统、保护和安全以及分布式操作系统等内容。本书内容全面、丰富,覆盖了系统编程与操作系统的主要内容,既有基础理论,又有大量精选的实例,结构严谨,逻辑性强,深入浅出,易于理解,并且反映了计算机科学基础理论的研究成果与最新进展。本书可以作为大学计算机本科专业高年级学生相关课程的教学参考书及研究生的教材,也可以作为计算机及相关专业工程技术人员学习计算机基础理论和应用的参考资料。 \r\n
\r\n
第一部分 系统编程 \r\n\r\n 第1章 语言处理程序 \r\n\r\n 1.1 引言 \r\n\r\n 1.2 语言处理工作 \r\n\r\n 1.2.1 程序生成 \r\n\r\n 1.2.2 程序执行 \r\n\r\n 1.3 语言处理的基础 \r\n\r\n 1.3.1 简易的编译程序 \r\n\r\n 1.4 语言规格基本说明 \r\n\r\n 1.4.1 程序设计语言的语法 \r\n\r\n 练习1.4 \r\n\r\n 1.4.2 约束和约束时刻 \r\n\r\n 1.5 语言处理程序开发工具 \r\n\r\n 1.5.1 LEX \r\n\r\n 1.5.2 YACC \r\n\r\n 参考文献 \r\n\r\n 第2章 语言处理程序的数据结构 \r\n\r\n 2.1 查找型数据结构 \r\n\r\n 2.1.1 表的组织 \r\n\r\n 2.1.2 链表和树型结构组织形式 \r\n\r\n 练习2.1 \r\n\r\n 2.2 分配型数据结构 \r\n\r\n 2.2.1 栈 \r\n\r\n 2.2.2 堆 \r\n\r\n 参考文献 \r\n\r\n 第3章 扫描与分析 \r\n\r\n 3.1 扫描 \r\n\r\n 练习3.1 \r\n\r\n 3.2 分析 \r\n\r\n 3.2.1 自顶向下的分析 \r\n\r\n 练习3.2.1 \r\n\r\n 3.2.2 自底向上的分析 \r\n\r\n 练习3.2 \r\n\r\n 参考文献 \r\n\r\n 第4章 汇编程序 \r\n\r\n 4.1 汇编程序要素 \r\n\r\n 4.1.1 汇编语言语句 \r\n\r\n 4.1.2 汇编程序的优点 \r\n\r\n 4.2 简单的汇编模式 \r\n\r\n 4.3 汇编程序的遍扫描结构 \r\n\r\n 4.4 两遍扫描汇编程序的设计 \r\n\r\n 4.4.1 高级的汇编指示语句 \r\n\r\n 练习4.4.1 \r\n\r\n 4.4.2 汇编程序的第1遍扫描 \r\n\r\n 4.4.3 中间代码形式 \r\n\r\n 4.4.4 祈使语句的中间代码 \r\n\r\n 4.4.5 说明语句与汇编程序指示语句的处理 \r\n\r\n 练习4.4 \r\n\r\n 4.4.6 汇编程序的第2遍扫描 \r\n\r\n 4.4.7 列表和错误信息报告 \r\n\r\n 练习4.4.7 \r\n\r\n 4.4.8 有关组织结构的一些话题 \r\n\r\n 练习4.4.8 \r\n\r\n 4.5 用于IBM PC机的单遍扫描汇编程序 \r\n\r\n 4.5.1 Intel 8088微处理器的体系结构 \r\n\r\n 4.5.2 Intel 8088的指令 \r\n\r\n 4.5.3 Intel 8088汇编语言 \r\n\r\n 4.5.4 单遍扫描汇编程序的问题 \r\n\r\n 4.5.5 汇编程序设计 \r\n\r\n 参考文献 \r\n\r\n 第5章 宏与宏处理程序 \r\n\r\n 5.1 宏定义与宏调用 \r\n\r\n 5.2 宏扩展 \r\n\r\n 5.3 嵌套的宏调用语句 \r\n\r\n 5.4 高级宏设施 \r\n\r\n 5.4.1 条件扩展 \r\n\r\n 5.4.2 用于扩展时循环的其他设施 \r\n\r\n 5.4.3 语义扩展 \r\n\r\n 练习5.4 \r\n\r\n 5.5 宏预处理程序的设计 \r\n\r\n 5.5.1 设计概述 \r\n\r\n 5.5.2 数据结构 \r\n\r\n 5.5.3 宏定义的处理 \r\n\r\n 5.5.4 宏扩展 \r\n\r\n 5.5.5 嵌套的宏调用 \r\n\r\n 练习5.5 \r\n\r\n 5.5.6 宏-汇编程序的设计 \r\n\r\n 练习5.5 \r\n\r\n 参考文献 \r\n\r\n 第6章 编译程序和解释程序 \r\n\r\n 6.1 组成编译的各个方面 \r\n\r\n 6.2 内存分配 \r\n\r\n 6.2.1 静态和动态内存分配 \r\n\r\n 6.2.2 体结构语言的内存分配 \r\n\r\n 6.2.3 数组的分配与访问 \r\n\r\n 练习6.2 \r\n\r\n 6.3 表达式编译 \r\n\r\n 6.3.1 一个用于表达式的代码生成器 \r\n\r\n 练习6.3.1 \r\n\r\n 6.3.2 表达式的中间代码 \r\n\r\n 练习6.3.2 \r\n\r\n 6.4 对控制结构的编译 \r\n\r\n 练习6.4 \r\n\r\n 6.5 代码优化 \r\n\r\n 6.5.1 优化变换 \r\n\r\n 6.5.2 局部优化 \r\n\r\n 6.5.3 全局优化 \r\n\r\n 练习6.5 \r\n\r\n 6.6 解释程序 \r\n\r\n 6.6.1 解释程序纵观 \r\n\r\n 6.6.2 一个小(型)解释程序 \r\n\r\n 6.6.3 解释程序与不纯解释程序 \r\n\r\n 练习6.6 \r\n\r\n 参考文献 \r\n\r\n \r\n\r\n 第7章 连接程序 \r\n\r\n 7.1 重定位和连接的概念 \r\n\r\n 7.1.1 程序的重定位 \r\n\r\n 7.1.2 连接 \r\n\r\n 7.1.3 目标模块 \r\n\r\n 7.2 连接程序的设计 \r\n\r\n 7.2.1 段寻址的重定位和连接需求 \r\n\r\n 7.2.2 重定位算法 \r\n\r\n 7.2.3 连接需求 \r\n\r\n 练习7.2 \r\n\r\n 7.3 自(身)重定位程序 \r\n\r\n 练习7.3 \r\n\r\n 7.4 一个适用于MS DOS的连接程序 \r\n\r\n 练习7.4 \r\n\r\n 7.5 覆盖块的连接 \r\n\r\n 练习7.5 \r\n\r\n 7.6 装入程序 \r\n\r\n 练习7.6 \r\n\r\n 参考文献 \r\n\r\n 第8章 软件工具 \r\n\r\n 8.1 程序开发软件工具 \r\n\r\n 8.1.1 程序设计和编码 \r\n\r\n 8.1.2 程序输入和编辑 \r\n\r\n 8.1.3 程序测试与调试 \r\n\r\n 8.1.4 提高程序性能 \r\n\r\n 8.1.5 程序文档编制 \r\n\r\n 8.1.6 设计软件工具 \r\n\r\n 8.2 编辑器 \r\n\r\n 8.2.1 屏幕编辑器 \r\n\r\n 8.2.2 文字处理器 \r\n\r\n 8.2.3 结构编辑器 \r\n\r\n 8.2.4 设计编辑器 \r\n\r\n 8.3 调试监视程序 \r\n\r\n 8.4 编程环境 \r\n\r\n 练习8.4 \r\n\r\n 8.5 用户界面 \r\n\r\n 8.5.1 命令对话 \r\n\r\n 8.5.2 数据的呈现 \r\n\r\n 8.5.3 联机帮助 \r\n\r\n 8.5.4 用户界面的结构 \r\n\r\n 8.5.5 用户界面管理系统 \r\n\r\n 练习8.5 \r\n\r\n 参考文献 \r\n\r\n 第二部分 操作系统 \r\n\r\n 第9章 操作系统功能的演化 \r\n\r\n 9.1 操作系统的功能 \r\n\r\n 9.1.1 资源分配及相关功能 \r\n\r\n 9.1.2 用户接口相关功能 \r\n\r\n 9.2 操作系统功能演化 \r\n\r\n 9.3 批处理系统 \r\n\r\n 9.3.1 用户服务 \r\n\r\n 9.3.2 批监控程序的功能 \r\n\r\n 9.3.3 支持批处理的特殊特征 \r\n\r\n 练习9.3 \r\n\r\n 9.4 多道程序系统 \r\n\r\n 9.4.1 多道程序管理的结构支持 \r\n\r\n 9.4.2 用户服务 \r\n\r\n 9.4.3 多道程序管理程序的功能 \r\n\r\n 练习9.4 \r\n\r\n 9.5 分时系统 \r\n\r\n 9.5.1 调度 \r\n\r\n 9.5.2 存储器管理 \r\n\r\n 练习9.5 \r\n\r\n 9.6 实时操作系统 \r\n\r\n 练习9.6 \r\n\r\n 9.7 操作系统结构 \r\n\r\n 参考文献 \r\n\r\n 第10章 进程 \r\n\r\n 10.1 进程定义 \r\n\r\n 练习10.1 \r\n\r\n 10.2 进程控制 \r\n\r\n 10.2.1 进程创立 \r\n\r\n 10.2.2 进程状态 \r\n\r\n 10.2.3 与进程相关的事件 \r\n\r\n 10.2.4 进程控制块 \r\n\r\n 10.2.5 进程调度 \r\n\r\n 10.2.6 进程终止 \r\n\r\n 10.2.7 总结 \r\n\r\n 10.3 进程交互 \r\n\r\n 10.3.1 同步控制 \r\n\r\n 10.3.2 数据访问同步 \r\n\r\n 10.3.3 进程间通信 \r\n\r\n 练习10.3 \r\n\r\n 10.4 实现进程交互 \r\n\r\n 10.4.1 Fork-Join \r\n\r\n 10.4.2 Parbegin-Parend \r\n\r\n 10.4.3 Unix中的进程 \r\n\r\n 10.5 线程 \r\n\r\n 练习10.5 \r\n\r\n 参考文献 \r\n\r\n 第11章 调度 \r\n\r\n 11.1 调度策略 \r\n\r\n 11.1.1 非抢占调度 \r\n\r\n 练习11.1.1 \r\n\r\n 11.1.2 抢占调度 \r\n\r\n 练习11.1.2 \r\n\r\n 11.2 作业调度 \r\n\r\n 11.3 进程调度 \r\n\r\n 11.3.1 事件监视 \r\n\r\n 11.3.2 进程调度机构 \r\n\r\n 11.3.3 多道程序设计中的进程调度 \r\n\r\n 11.3.4 分时系统中的进程调度 \r\n\r\n 11.3.5 多级调度 \r\n\r\n 练习11.3 \r\n\r\n 11.4 Unix中的进程管理 \r\n\r\n 练习11.4 \r\n\r\n 11.5 多处理器操作系统中的调度 \r\n\r\n 11.5.1 主-从配置 \r\n\r\n 11.5.2 对称多处理器 \r\n\r\n 练习11.5 \r\n\r\n 参考文献 \r\n\r\n 第12章 死锁 \r\n\r\n 12.1 定义 \r\n\r\n 12.2 建立资源状态模型 \r\n\r\n 12.2.1 资源请求和分配图及等待图中的路径 \r\n\r\n 12.2.2 死锁的条件 \r\n\r\n 12.3 处理死锁 \r\n\r\n 12.4 检测和解决死锁 \r\n\r\n 12.4.1 死锁检测算法 \r\n\r\n 12.4.2 死锁解决 \r\n\r\n 12.5 避免死锁 \r\n\r\n 12.5.1 所有的请求在一起提出 \r\n\r\n 12.5.2 资源分级 \r\n\r\n 12.5.3 银行家算法 \r\n\r\n 12.6 死锁处理的混合方式 \r\n\r\n 练习12.6 \r\n\r\n 参考文献 \r\n\r\n 第13章 进程同步 \r\n\r\n 13.1 实现控制同步 \r\n\r\n 练习13.1 \r\n\r\n 13.2 临界区 \r\n\r\n 13.2.1 临界段实现的特性 \r\n\r\n 13.2.2 实现临界段的历史 \r\n\r\n 13.2.3 用临界段实现进程同步 \r\n\r\n 13.2.4 临界段的算法实现 \r\n\r\n 练习13.2 \r\n\r\n 13.3 经典的进程同步问题 \r\n\r\n 13.3.1 有限长度缓冲区的生产者消费者问题 \r\n\r\n 13.3.2 读者和写者 \r\n\r\n 13.3.3 哲学家进餐 \r\n\r\n 13.4 进程同步语言特征的演化 \r\n\r\n 13.5 信号量 \r\n\r\n 13.5.1 实现信号量 \r\n\r\n 13.5.2 使用信号量的生产者消费者 \r\n\r\n 13.5.3 使用信号量的读者和写者 \r\n\r\n 练习13.5 \r\n\r\n 13.6 临界区 \r\n\r\n 13.7 条件临界区 \r\n\r\n 练习13.7 \r\n\r\n 13.8 管程 \r\n\r\n 13.8.1 抽象 \r\n\r\n 13.8.2 封装 \r\n\r\n 13.8.3 管程特性 \r\n\r\n 13.8.4 磁盘调度器:实例分析 \r\n\r\n 练习13.8 \r\n\r\n 13.9 Ada中的并行程序设计 \r\n\r\n 13.9.1 Ada中的任务 \r\n\r\n 13.9.2 Ada中的实时程序设计 \r\n\r\n 练习13.9 \r\n\r\n 参考文献 \r\n\r\n 第14章 进程间通信 \r\n\r\n 14.1 进程间消息 \r\n\r\n 14.2 关于实现的问题 \r\n\r\n 14.2.1 命名 \r\n\r\n 14.2.2 消息传送协议 \r\n\r\n 14.2.3 进程间消息的缓冲 \r\n\r\n 14.2.4 进程间消息的传送 \r\n\r\n 练习14.2 \r\n\r\n 14.3 邮箱 \r\n\r\n 14.3.1 一个邮箱的实现 \r\n\r\n 14.3.2 使用邮箱的好处 \r\n\r\n 练习14.3 \r\n\r\n 14.4 UNIX环境下的进程间消息 \r\n\r\n 练习14.4 \r\n\r\n 14.5 MACH中的进程间消息 \r\n\r\n 练习14.5 \r\n\r\n 参考文献 \r\n\r\n 第15章 存储器管理 \r\n\r\n 15.1 内存分配的基础知识 \r\n\r\n 15.1.1 内存重用 \r\n\r\n 15.1.2 内存分配模型 \r\n\r\n 15.2 连续内存分配 \r\n\r\n 15.2.1 内存保护 \r\n\r\n 15.2.2 程序重定位 \r\n\r\n 15.2.3 内存碎片 \r\n\r\n 15.2.4 程序初始装入 \r\n\r\n 练习15.2 \r\n\r\n 15.3 不连续内存分配 \r\n\r\n 15.4 虚拟内存页式管理 \r\n\r\n 15.4.1 页. 页块和地址转换 \r\n\r\n 15.4.2 请求分页式存储管理 \r\n\r\n 15.4.3 分页硬件 \r\n\r\n 练习15.4 \r\n\r\n 15.4.4 分页软件 \r\n\r\n 15.4.5 页面淘汰 \r\n\r\n 15.4.6 控制程序的内存分配 \r\n\r\n 15.4.7 页共享 \r\n\r\n 练习15.4 \r\n\r\n 15.4.8 Unix内存管理 \r\n\r\n 15.5 虚拟内存段式管理 \r\n\r\n 15.5.1 组织多段程序 \r\n\r\n 15.5.2 管理物理内存 \r\n\r\n 15.5.3 保护和共享 \r\n\r\n 15.5.4 段页式 \r\n\r\n 15.5.5 实例研究 \r\n\r\n 练习15.5 \r\n\r\n 参考文献 \r\n\r\n 第16章 IO组织和IO编程 \r\n\r\n 16.1 IO组织 \r\n\r\n 16.2 IO设备 \r\n\r\n 练习16.2 \r\n\r\n 16.3 物理输入输出控制系统(PIOCS) \r\n\r\n 16.3.1 PIOCS的功能 \r\n\r\n 16.3.2 PIOCS的数据结构 \r\n\r\n 16.3.3 PIOCS功能的实现 \r\n\r\n 16.3.4 设备驱动程序 \r\n\r\n 练习16.3 \r\n\r\n 16.4 基本文件组织 \r\n\r\n 16.4.1 顺序文件组织 \r\n\r\n 16.4.2 直接文件组织 \r\n\r\n 16.4.3 索引顺序文件组织 \r\n\r\n 练习16.4 \r\n\r\n 16.5 高级IO程序设计 \r\n\r\n 16.5.1 记录的缓冲 \r\n\r\n 16.5.2 记录块 \r\n\r\n 练习16.5 \r\n\r\n 16.6 逻辑IOCS \r\n\r\n 16.6.1 LIOCS函数 \r\n\r\n 16.6.2 LIOCS模块 \r\n\r\n 16.6.3 LIOCS数据结构 \r\n\r\n 16.6.4 LIOCS功能的实现 \r\n\r\n 练习16.6 \r\n\r\n 16.7 处理UNIX中的文件 \r\n\r\n 练习16.7 \r\n\r\n 参考文献 \r\n\r\n 第17章 文件系统 \r\n\r\n 17.1 目录结构 \r\n\r\n 练习17.1 \r\n\r\n 17.2 文件保护 \r\n\r\n 17.3 分配磁盘空间 \r\n\r\n 17.4 实现文件访问 \r\n\r\n 17.4.1 打开文件时FS的活动 \r\n\r\n 17.4.2 文件操作时的FCB的活动 \r\n\r\n 17.4.3 FS在文件关闭时的活动 \r\n\r\n 练习17.4 \r\n\r\n 17.5 文件共享 \r\n\r\n 17.6 文件系统的可靠性 \r\n\r\n 17.6.1 FS完整性的丢失 \r\n\r\n 17.6.2 FS可靠性技术 \r\n\r\n 练习17.6 \r\n\r\n 17.7 UNIX文件系统 \r\n\r\n 练习17.7 \r\n\r\n 参考文献 \r\n\r\n 第18章 保护和安全 \r\n\r\n 18.1 数据加密 \r\n\r\n 18.1.1 对于加密系统的攻击 \r\n\r\n 18.1.2 加密技术 \r\n\r\n 18.2 保护和安全机制 \r\n\r\n 18.2.1 保护机制 \r\n\r\n 18.2.2 安全机制 \r\n\r\n 18.3 用户文件保护 \r\n\r\n 18.3.1 加密用户文件中的数据 \r\n\r\n 18.3.2 用户文件的访问控制 \r\n\r\n 18.3.3 用户的权限表(C-list) \r\n\r\n 18.4 权限 \r\n\r\n 18.4.1 基于权限的计算机系统 \r\n\r\n 18.4.2 对象的共享和保护 \r\n\r\n 18.4.3 软件权限 \r\n\r\n 参考文献 \r\n\r\n 第19章 分布式操作系统 \r\n\r\n 19.1 定义和例子 \r\n\r\n 19.1.1 分布式系统模型 \r\n\r\n 19.1.2 分布式操作系统的例子 \r\n\r\n 19.2 分布式操作系统的设计问题 \r\n\r\n 练习19.2 \r\n\r\n 19.3 网络连接问题 \r\n\r\n 19.3.1 网络拓扑结构 \r\n\r\n 19.3.2 通信 \r\n\r\n 19.3.3 交换策略 \r\n\r\n 19.3.4 路由 \r\n\r\n 19.4 通信协议 \r\n\r\n 19.4.1 阻塞协议 \r\n\r\n 19.4.2 非阻塞协议 \r\n\r\n 19.4.3 远程过程调用 \r\n\r\n 练习19.4 \r\n\r\n 19.5 系统状态和事件前趋 \r\n\r\n 19.5.1 系统状态 \r\n\r\n 19.5.2 事件前趋 \r\n\r\n 19.5.3 产生有用的时间戳 \r\n\r\n 练习19.5 \r\n\r\n 19.6 资源分配 \r\n\r\n 19.7 分布式控制算法 \r\n\r\n 19.7.1 理解分布式控制算法 \r\n\r\n 19.7.2 分布式互斥算法 \r\n\r\n 练习19.7 \r\n\r\n 19.7.3 分布式死锁处理 \r\n\r\n 练习19.7 \r\n\r\n 19.8 文件系统 \r\n\r\n 19.8.1 文件系统的透明性 \r\n\r\n 19.8.2 分布式文件系统的设计 \r\n\r\n 练习19.8 \r\n\r\n 19.9 可靠性 \r\n\r\n 19.9.1 可靠性技术的分级体系 \r\n\r\n 19.9.2 数据恢复 \r\n\r\n 19.9.3 故障的容错 \r\n\r\n 19.9.4 弹性恢复技术 \r\n\r\n 练习19.9 \r\n\r\n 19.10 安全 \r\n\r\n 19.10.1 解决消息安全威胁问题 \r\n\r\n 19.10.2 密钥分配 \r\n\r\n 19.10.3 解决消息回放攻击 \r\n\r\n 19.10.4 Kerberos \r\n\r\n 练习19.10 \r\n\r\n 参考文献 \r\n
\r\n
《系统编程与操作系统》(SYSTEMS PROGRAMMING and OPERATING SYSTEMS)是关于系统程序设计与操作系统的经典著作. 作者D M Dhamdhere是一位资深的计算机专家, 在 系统程序设计与操作系统这些计算机的核心领域有较高的学术造诣. 他长期从事计算机科学基础理论的教学与研究工作, 其著作大多数被用作计算机本科专业与研究生的教科书或教学参考文献. 在这个方面, 他可以和著名的犹太裔美籍科学家Aho及Ullman这些大师齐名.
本书分为系统编程与操作系统两大部分:第1部分为系统编程, 包括语言处理程序(Language Processors). 语言处理程序的数据结构(Data Structure for Language Processing). 扫描与分析(Scanning and Parsing). 汇编程序(Assemblers). 宏与宏处理程序(Macros and Macros Processors). 编译程序与解释程序(Compilers and Interpreters). 连接程序(Linkers)和软件工具(Software Tools)等章, 第2部分为操作系统, 所涉及的内容更为广泛, 包括操作系统功能的演化(Evolution of OS Function). 进程(Process). 调度(Scheduling). 死锁(Deadlock). 进程同步(Process Synchronization). 进程间通信(Interprocess Communication). 存储器管理(Memory Management). IO组织和IO编程(IO Organization and IO Processing). 文件系统(File System). 保护和安全(Protection and Security)以及分布式操作系统(Distributed Operating System)等章.
译者认为, 本书主要有以下特点和优点:
1. 内容丰富, 覆盖了系统编程与操作系统的主要内容, 既有基础理论, 又有大量的精选实例, 使人读后深感结构严谨. 逻辑性强. 深入浅出和易于理解.
2. 书中论述的内容反映了计算机科学基础理论的研究成果与最新进展. 在系统编程部分引进了语义空档(Semantic Gap)的新概念, 从而更科学简洁地指明了语言处理程序的工作职能模型. 在连接与装入程序章中对于“重定位”的概念又有了新的解释, 对于编译程序与解释程序的叙述也较同类书籍更有新意, 并且用专门的章讨论了众多当前先进的用于系统程序设计的软件工具, 有利于读者的应用. 在操作系统部分引入了大量的数学模型, 对操作系统的基本理论进行了严谨的论述, 尤其是对于进程同步. 进程间通信以及IO组织和IO编程部分的论述很有新意. 另外, 在操作系统的4个主要部分(处理器管理. 存储器管理. IO设备管理和文件管理)的论述中都引入了实际的操作系统作为实例, 并进行了大量的分析和比较.
3. 本书十分适合作为操作系统的教材使用. 书中章的安排都经过精心的设计, 保持了知识的连贯性, 又注重了知识介绍的易懂及深度, 还讲解了许多实例. 并且每一章都配有大量的习题, 这些习题一部分是可以从书本的论述中找到答案, 还有更大一部分是需要读者仔细分析和思考的问题, 可以提高读者的创造力和解决问题的能力.
本书由徐旭东. 金雪云和李昭智组织翻译并统稿全书译文. 其中, 金雪云负责了整个第2部分, 即操作系统部分的翻译工作(第9章. 第10章. 第11章. 第12章. 第13章. 第14章. 第15章. 第16章. 第17章. 第18章和第19章), 徐旭东负责第1部分系统编程主要章的翻译工作(第1章. 第2章. 第3章. 第6章和第7章), 李昭智负责第1部分系统编程其他章的翻译工作(第4章. 第5章和第8章). 参加本书翻译. 录入和文稿整理工作的还有:陈粤. 杨杰. 徐俊. 陈坤. 魏洁. 张璇. 徐雯. 刘准. 泱泱. 刘红. 王小舟. 高红雨. 庞洁. 李大伟. 胡轶. 黄轶. 毕兰. 杨明君. 李昭勇. 赵勇. 孟涛. 李佳. 王帅以及刘欣等同志.
本书译文若有不妥之处, 敬请读者批评指正.
译者
2001.8
第一版前言
本书是在我的一本名为《系统软件基础》的书基础上编写出的. 《系统软件基础》于1986年出版, 并作为系统编程(ACM课程68之教程4)和操作系统与计算机结构(ACM课程7之教程CS-6, 7和IEEE课程77的SE-6, 7)的推荐课本. 本书的内容涉及到很多与之相近的领域, 也结合了ACM-IEEE的联合课程大纲(计算机课程1991)的建议. 为了跟上本领域中的发展, 书中的内容做了相应的更新, 也相应改变了这些课程的教学重点. 例如, 当前在教授《系统程序设计》这门课时, 为了改变以往过于关注理论的教学方法, 我把重点放在了理解必要理论和可用的软件工具上. 在教授这些课程时, 要收集到这两方面的教学资料也十分困难. 本书的一个主要目的就是满足这方面的需要, 并结合这个领域中广泛使用的操作系统和可用软件工具的例子和实例分析. 在处理系统软件的标准组件时(即汇编程序和输入程序)是针对IBM PC的. 由于对IBM PC的广泛接受, 所以学生可以理解在设计这些系统软件组件的更细致的方面, 书中还介绍了UNIX的实例分析和基于UNIX的工具, 即viz.LEX和YACC.
本书的组织方式
本书分为两部分:系统编程和操作系统. 系统编程部分介绍了在计算机系统中执行HLL程序处理的基本模型. 在此之后, 又用不同章讲解各种软件处理程序即汇编程序. 编译程序. 解释程序和输入程序. 每章都有例子和实例研究来提高对这些主题的理解.
本书的第二部分主要是深入研究操作系统. 这部分的第7章是简介, 介绍了所有操作系统中遇到的基本功能和技术, 第8章到第10章详细论述了操作系统的处理器管理. 存储管理和信息管理的功能.
这些章中包含有启发性的讨论, 实例研究和一系列的习题, 可以鼓励学生更深入地研究这些主题. 第11章介绍操作系统中的一个重要内容:并发性程序设计. 在这章中介绍早期的和当前流行语言中对于并发性程序设计的发展, 并且深入研究并发性程序设计. 在本章中还用了一个磁盘管理器的实例研究来加深对并发性程序设计的理解. 在第12章中主要介绍分布式操作系统, 重点在于在分布式环境中操作系统所增加的功能. 由于本书内容容量有限, 因此本章只介绍分布式系统的初步知识.
如何使用本书
本书可以作为本科生和研究生的系统程序设计教材, 本科生的操作系统教材. 对于前者, 采用第一部分和第二部分第7章中的内容就足够了. 除此之外, 第12章中的部分内容可以做为课后阅读资料. 对于操作系统课程, 可以采用第二部分内容.
如果要采用本书作为教材, 建议采用并发运行的设计和实现模型项目. 典型的项目是:采用LEX和YACC开发编译程序, 并发性程序设计项目以及设备驱动程序等.
除上面的使用方法之外, 这本书还可以作为专业计算机环境中的参考手册, 或用于提高专业技能, 软件管理员也可以将本书作为进入新领域的入门书.
写这本书的主要动机来自我在系统软件领域教授各种课程的经验. 在这里我要感谢我所有的学生, 因为他们为本书做出了重要贡献.
第二版前言
这一版在系统程序设计与操作的各个专题的安排上较第一版更加符合逻辑, 这是通过重新组织下面的内容将其细化为较小的章节来实现的, 每一章仅讨论某一特定的主题.
语言处理程序在“汇编程序”. “宏及宏处理程序”. “编译程序和解释程序”和“连接程序”这几章之前增加了“语言处理程序”. “语言处理程序的数据结构”以及“扫描与分析”这3个新的章.
进程管理:进程管理由“进程”. “调度”. “死锁”. “进程同步”和“进程间通信”这些较小的章组成.
信息管理:信息管理的内容现在由“IO组织和IO编程”. “文件系统”以及“保护和安全”这些章组成.
除上所述, 教科书(第一版)的许多章节被全部重写并增加了新的定义. 实例. 图表. 小节和练习, 同时做了更新. 在“软件工具”与“分布式操作系统”等章中相应地增加了“用户界面”以及“分布式控制算法”等诸多新的小节.
我希望教师和学生们能够喜欢本书的新面貌, 非常欢迎读者的反馈新信息(最好使用电子邮件:dmd@cse.Iitb.ernet.in). 我还要感谢我妻子和家庭对我的宽容与忍耐.
第二版修订版前言
在本书的第二版出版后不久, 我就开始进行第二版修订版的编写工作. 编写第二版修订版的主要动因是想提高本书的可读性, 使之重点突出, 基本概念清晰, 并提高例子的实用性. 这需要对整本书的文字进行彻底的修正, 所有内容都有大量改进. 在此期间还更正了一些错误和不明确的地方.
除了上述改进之外, 所有的章节都增加了新的内容, 主要有:
· 操作系统功能的演化(第9章), 加入了两节关于资源分配和用户接口相关功能的内容.
· 进程(第10章):增加了关于线程的内容.
· 存储器管理(第15章):加入了一节关于内存重用的内容.
· IO组织和IO编程(第16章):增加了一节关于IO初始化的内容.
我希望读者能喜欢这种新的章节安排和简洁的文风. 与以往一样, 我希望能获得读者的意见和建议.
D M DHAMDHERE
无封面