
无论是计算机软件系统的开发者、管理者,还是使用者,都需要了解和掌握操作系统的相关知识。借助于操作系统的知识和功能,开发者可以编写出运行速度更快的应用程序;管理者可以合理配置出性能更优的应用系统;使用者可以更好地理解系统功能,从而高效、安全地使用计算机系统。本书根据上述需求,以通俗易懂的语言,阐述了操作系统的基本原理知识,内容包括总体结构、中断/异常处理、进程管理、存储管理、并发与通信、设备管理、文件系统和系统安全,同时以Linux操作系统的相关内容作为辅助实例。 本书可以作为高等院校计算机专业及相关专业本科学生的教材或参考书,也可作为计算机管理、服务、软件开发技术人员以及计算机爱好者阅读和自学读物。
前 言 在信息时代的今天,人们的日常生活与计算机密切相关。当人们旅行时,需要通过计算机订购电子机票和预定旅馆房间;当坐在电影院里看电影时,那些令人惊叹的宏伟大片都使用了计算机特效技术。在办公室,可以使用自动化办公系统,轻松完成日常工作;回到家里,还可以上网聊天,放松自己。计算机为人们带来越来越多的便利,每天都有包含计算机技术的新产品和新功能出现。所有这些不仅依赖于功能强大的计算机硬件,也依赖于同样功能强大的操作系统。 操作系统是计算机系统中的最基本的核心软件。无论是计算机软件系统的开发者、管理者,还是使用者,都需要了解和掌握操作系统的相关知识,以便更好地理解计算机系统的行为和能力。借助于操作系统的知识和功能,开发者可以编写出运行速度更快的应用程序;管理者可以配置出性能更优的应用系统;使用者可以更好地理解系统功能,从而高效、安全地使用计算机系统。 然而,操作系统又是计算机系统中最复杂的软件。它包含众多的、相互关联的功能模块和复杂的资源管理机制,为用户提供了方便快捷的使用界面,使普通用户远离计算机硬件、设备及其繁琐的操作过程。因此,对于普通用户来说,学习操作系统不是一件容易的事情。因为操作系统的功能机制深藏于“用户界面”之下,人们几乎不与它们直接交互,所以对于操作系统中的概念和机制,许多人感觉比较抽象和不易理解。 市面上有不少关于Windows或Linux的书,它们只介绍操作系统的命令和使用方法,不讨论操作系统的基本概念和实现原理,这类书能够帮助读者快速地掌握操作系统的命令和使用方法,可作为特定操作系统的入门指导和使用手册。但是,作者在这里建议读者至少选读一本操作系统原理的书,这样才能做到知其然知其所以然。 本书以普通大众作为主要读者对象,以通俗易懂的语言,阐述了操作系统的基本原理知识,可以作为高等院校计算机专业及相关专业的教材和参考书,也可作为从事计算机相关工作的专业技术人员以及计算机爱好者阅读和自学读物。本书内容包括操作系统总体结构、中断/异常处理、进程管理、存储管理、并发与通信、设备管理、文件系统和系统安全,同时以Linux操作系统的相关内容作为讨论背景和辅助实例。 本书是作者总结多年从事操作系统设计开发和操作系统教学工作的经验,参考近几年来国内外出版的教材和文献,精心编著而成的。书中既包含了操作系统的基本概念和理论,也介绍了与操作系统功能相关的命令和应用实例,还插入了许多说明图,力求使抽象的操作系统原理变得通俗易懂。另外,每章之后配有习题和上机实验,可帮助读者加深理解。 本书的组织: 第1章介绍操作系统的发展历史,分为两个阶段:以早期操作系统和现代操作系统为例,介绍操作系统的任务和地位、主要功能和体系结构等基本概念;以Linux和Windows XP的体系结构作为实例,让读者建立关于操作系统的整体观念。 第2章以Linux为主要背景介绍操作系统的用户界面,包括用户管理、命令解释程序Shell及其编程、常用的Linux命令、Linux联机手册的使用、用户上机过程(编辑、编译和运行程序)、Linux实用软件工具及应用实例。通过本章的学习,读者可以掌握Linux的基本使用方法,为后面章节中安排的上机实验做好准备。 第3章介绍操作系统内核的基本概念和基本机制,使读者掌握操作系统内核的工作机理和运行流程。本章讨论了核心态与用户态的作用和区别,介绍了中断/异常处理机制和系统调用机制的工作原理,以Linux系统调用机制作为实例让读者了解系统调用的实现过程。 第4章介绍进程和线程。本章从进程的定义、表示和映像等方面介绍了进程的基本概念,围绕进程的生命周期和运行状态讨论了进程管理功能,介绍了进程调度的过程、目标和主要调度算法。从讨论进程的局限性出发介绍线程概念及其优势,讨论多处理机系统中的线程调度方法。最后,介绍Linux中进程和轻权进程的管理和调度策略,以程序实例说明相关系统调用和命令的使用方法。 第5章介绍存储管理。首先介绍计算机系统中的存储体系结构,讨论存储管理系统需要实现的4个基本任务。然后,从存储管理的4个基本任务方面介绍了固定分区存储管理、可变分区存储管理和页式存储管理。本章的重点放在页式存储管理和页式虚存管理,介绍了它们的工作原理、实现机制和相关算法。最后介绍了Linux的进程地址空间管理、磁盘交换区管理和存储映射文件的应用编程。 第6章介绍进程并发与通信。本章从讨论同步互斥问题的现象和原因出发,介绍了临界段、原语和信号量等基本概念,以解决生产者和消费者问题为背景,讨论信号量的应用及特点,在此基础上介绍多元信号量概念。以Linux为背景介绍进程间通信(IPC)机制及其应用程序例子。最后介绍了进程死锁的基本概念和基本处理方法。 第7章介绍设备管理。首先介绍I/O设备的基本概念、CPU对I/O设备的控制方式和设备管理的任务,按照I/O系统的层次结构介绍I/O功能的实现原理以及从用户角度看到的输入/输出全过程。然后,讨论缓冲区管理和磁盘请求调度等I/O优化技术。最后介绍Linux的设备驱动程序接口及其动态加载机制和一个虚拟盘的驱动程序实例。 第8章介绍文件系统。本章介绍文件及文件系统的基本概念,讨论设备文件系统(即文件卷)的组织结构和实现原理,介绍文件管理系统的层次结构、主要功能和工作原理,以Linux为背景介绍文件的基本操作和应用实例,最后介绍Linux的特殊文件系统——proc文件系统。 第9章介绍操作系统的保护与安全机制。本章从讨论计算机系统面临的安全威胁出发,介绍操作系统中各种安全机制的作用和工作原理。然后,介绍Linux中的安全机制和操作系统的安全评测标准。 附录A~D包含了Linux常用的命令、系统调用函数、C函数和上机实验指导,作为参考资料提供给读者,帮助读者完成每章后面的上机实验。 由于作者才学有限,书中可能存在不足之处,恳请同行、专家及读者批评指正。 编 者
目 录
出版说明
前言
第1章 概述
1.1 早期操作系统
1.1.1 操作系统的产生
1.1.2 多道批处理系统
1.1.3 分时系统
1.2 现代操作系统
1.2.1 通用操作系统
1.2.2 UNIX操作系统
1.2.3 PC操作系统
1.2.4 实时操作系统
1.2.5 嵌入式操作系统
1.2.6 网络操作系统
1.2.7 分布式操作系统
1.3 操作系统基本概念
1.3.1 操作系统的任务和地位
1.3.2 操作系统的功能
1.3.3 操作系统的体系结构
1.3.4 Linux的体系结构
1.3.5 Windows XP的体系结构
1.4 小结
1.5 习题
第2章 操作系统用户界面
2.1 用户管理
2.1.1 用户账号
2.1.2 特权用户与普通用户
2.1.3 Linux的用户管理
2.1.4 用户登录过程
2.2 用户界面
2.2.1 命令解释程序
2.2.2 桌面管理程序
2.2.3 Linux的Shell及其编程
2.3 用户运行程序的上机过程
2.3.1 编辑程序文件
2.3.2 编译程序
2.3.3 运行程序
2. 4 Linux实用软件工具
2.4.1 流编辑器sed
2.4.2 模式文本处理器awk
2.4.3 程序自动维护工具make
2.4.4 源码级调试器gdb
2.5 小结
2.6 习题
2.7 上机实验
第3章 操作系统内核
3.1 核心态与用户态
3.2 中断和异常
3.2.1 中断的基本概念
3.2.2 异常的基本概念
3.2.3 中断/异常处理
3.3 系统调用
3.3.1 系统调用的特殊性
3.3.2 系统调用机制
3.3.3 Linux的系统调用机制
3.4 内核的运行流程
3.5 小结
3.6 习题
3.7 上机实验
第4章 进程与线程
4.1 进程的基本概念
4.1.1 进程的定义
4.1.2 进程的表示
4.1.3 进程映像
4.2 进程管理
4.2.1 进程生命周期
4.2.2 进程的创建和终止
4.2.3 进程运行状态
4.2.4 进程管理功能
4.3 进程调度
4.3.1 调度过程
4.3.2 调度目标
4.3.3 调度算法
4.4 线程
4.4.1 进程局限性
4.4.2 线程的概念
4.4.3 线程调度
4.5 Linux的进程管理
4.5.1 进程与轻权进程
4.5.2 进程管理
4.5.3 进程调度
4.5.4 系统调用和命令
4.5.5 进程信号机制
4.6 小结
4.7 习题
4.8 上机实验
第5章 存储管理
5.1 基本概念
5.1.1 存储体系结构
5.1.2 存储管理的任务
5.2 连续存储管理
5.2.1 固定分区的连续分配
5.2.2 可变分区的连续分配
5.3 页式存储管理
5.3.1 基本思想
5.3.2 地址转换和保护
5.3.3 页帧的管理
5.3.4 页表的组织
5.3.5 动态存储管理功能
5.4 页式虚存管理
5.4.1 工作原理
5.4.2 页例外处理
5.4.3 页面替换算法
5.5 Linux的存储管理
5.5.1 进程地址空间管理
5.5.2 交换区的管理
5.5.3 使用存储映射文件
5.6 小结
5.7 习题
5.8 上机实验
第6章 进程并发与通信
6.1 同步与互斥
6.1.1 同步互斥问题
6.1.2 临界段概念
6.1.3 原语和信号量
6.1.4 信号量的应用
6.2 进程间通信
6.2.1 IPC信号量
6.2.2 IPC共享存储区
6.2.3 IPC消息队列
6.2.4 应用程序例子
6.3 进程死锁
6.3.1 死锁分析
6.3.2 死锁预防
6.3.3 死锁避免
6.3.4 死锁检测和处理
6.4 小结
6.5 习题
6.6 上机实验
第7章 设备管理
7.1 基本概念
7.1.1 I/O设备分类
7.1.2 设备与CPU的连接
7.1.3 I/O控制方式
7.1.4 设备管理的任务
7.2 I/O层次结构
7.2.1 用户I/O层
7.2.2 逻辑设备I/O层
7.2.3 物理设备I/O层
7.2.4 输入/输出流程
7.3 优化输入/输出
7.3.1 缓冲区管理
7.3.2 磁盘请求调度
7.3.3 提高输入/输出效率
7.4 Linux设备驱动程序
7.4.1 设备驱动程序接口
7.4.2 内核模块加载机制
7.4.3 驱动程序实例
7.5 小结
7.6 习题
7.7 上机实验
第8章 文件系统
8.1 基本概念
8.1.1 文件存储设备
8.1.2 文件的基本概念
8.1.3 文件系统组成
8.2 设备文件系统
8.2.1 文件存储方式
8.2.2 文件目录结构
8.2.3 存储空间的管理
8.2.4 文件卷
8.2.5 Windows FAT文件系统
8.2.6 Linux EXT2文件系统
8.3 文件管理系统
8.3.1 文件目录系统
8.3.2 存取控制模块
8.3.3 逻辑文件I/O与物理文件I/O
8.3.4 文件卷管理
8.4 文件操作
8.4.1 文件的打开和关闭
8.4.2 文件的读/写
8.4.3 文件的保护
8.4.4 文件的备份
8.5 Linux的proc文件系统
8.6 小结
8.7 习题
8.8 上机实验
第9章 保护与安全
9.1 安全威胁
9.1.1 病毒
9.1.2 蠕虫
9.1.3 木马
9.1.4 隐蔽通道
9.1.5 网络攻击
9.2 安全机制
9.2.1 标识与鉴别
9.2.2 存取控制
9.2.3 最小特权控制
9.2.4 安全审计
9.2.5 入侵检测
9.2.6 数据加密
9.3 Linux的安全机制
9.4 安全评测标准
9.4.1 美国TCSEC橘皮书
9.4.2 中国国标GB 17859—1999
9.5 小结
9.6 习题
附录
附录A Linux常用命令
附录B 常用的Linux系统调用函数
附录C 常用的C函数
附录D 上机实验指导
实验1 Shell编程
实验2 Linux 程序运行环境
实验3 编译生成Linux内核
实验4 添加系统调用函数
实验5 进程同步与互斥
参考文献