本书从原理、技术、实现三个方面讲述操作系统原理和编程思想以及编程方法。这种集原理、技术、实现于一身的讲述操作系统原理的方法是本书的独到之处。本书分别给出了四个大的核心层次和若干应用程序层次上的编程实例。因此,全书并没有只停留在介绍操作系统普遍使用的基本概念和基本原理,而是进一步探究Linux核心数据结构和程序设计思路以及编程方法,并在一定范围内探讨了Linux内核的实现方案所具有的优缺点,从而启迪和锻炼读者的创新意识。
作者简介\r\n前言\r\n学习/阅读本书的方法\r\n第一部分 操作系统初始化\r\n 第1章 操作系统概述\r\n 1.1 操作系统的定义\r\n 1.2 操作系统发展过程中的设计需求分析\r\n 1.3 内核体系结构模型\r\n 1.4 Linux操作系统的出现\r\n 1.5 操作系统如何运行一个用户程序\r\n 1.6 重要思想和理论\r\n 1.7 小结\r\n 1.8 练习题\r\n 1.9 参考文献\r\n 第2章 i386硬件与软件接口技术\r\n 2.1 微型计算机硬件组成\r\n 2.2 实模式软件结构 \r\n 2.3 保护模式下存储器管理单元MMU\r\n 2.4 保护模式和保护\r\n 2.5 任务切换机制\r\n 2.6 小结\r\n 2.7 练习题\r\n 2.8 参考文献\r\n 第3章 Linux系统引导过程\r\n 3.1 BIOS启动过程\r\n 3.2 引导过程\r\n 3.3 实模式下的系统初始化Startup ()函数\r\n 3.4 内核解压缩过程Startup _32()\r\n 3.5 保护模式下的系统初始化\r\n 3.6 小结\r\n 3.7 练习题\r\n 3.8 参考文献\r\n 第4章 启动Linux内核\r\n第二部分 并发控制原理及其实现\r\n 第5章 程序和进程\r\n 第6章 互斥与同步\r\n 第7章 死锁与饥饿\r\n 第8章 进程调度\r\n 第9章 中断技术\r\n 第10章 系统调用接口\r\n第三部分 OS资源管理及其实现\r\n 第11章 存储器管理及Linux实现\r\n 第12章 文件管理及Linux实现\r\n 第13章 I/O设备管理与设备驱动程序\r\n第四部分 IPC和网络编程接口\r\n 第14章 最早的IPC方法:信号与管道\r\n 第15章 System V进程间通信\r\n 第16章 Linux网络接口及内核实现\r\n 第17章 TCP套接口编程的基本方法\r\n 第18章 UDP套接口编程的基本方法\r\n 附录 Linux源代码目录结构与内容
蒋静,女,1982年毕业于华东工程学院无线电工程系,毕业后曾在军队中从事工程技术与科研工作,现任青岛大学信息工程学院副教授、硕士生导师。曾获军队科技进步奖和山东省教委科技进步奖。拥有多项国家实用新型专利。1999年-2002年在中科院计算所做高级访问学者。现主要从事计算机体系结构和操作系统领域的研究与教学工作。
计算机操作系统虽然不属于一个新的研究领域, 但由于操作系统在计算机中所处的特殊位置, 使得这门课程并不是那么容易真正学懂弄通. 通过多年的教学实践以及对学生和用人单位的跟踪调查, 发现目前存在以下问题:
(1)学生反映, 虽然学了操作系统课程, 但是由于没有亲手编写过操作系统源代码, 所以只掌握了一些肤浅的概念, 而对操作系统的基本原理还是似懂非懂, 学习效果不佳.
(2)用人单位反映, 计算机专业的本科学生, 还不能根据某种需求灵活运用操作系统原理对核心源代码进行使用. 修改和扩展, 更谈不上创新.
(3)操作系统课程所涉及的知识内容较多, 对初学者来说, 在很短的时间内全面掌握的确存在很大难度. 即使那些理解能力较强的学生, 对许多问题也存在认识上的混淆.
为了解决上述存在的问题, 本书从原理. 核心技术和编程实现三方面讲解操作系统科学.
讲述方法如下:
一. 讲原理:包括操作系统中最重要的基本概念. 算法和基本原理. 为了易学易懂, 在讲解操作系统原理时, 结合Linux/i386源代码中的内核实例进行分析, 使讲解真正达到深入浅出的目的.
二. 讲核心技术:包括实现操作系统功能的设计思路及实现方法. 对最核心的内核模块以及核心数据结构进行剖析. 并介绍在Linux内核源代码中如何用C语言实现面向对象的编程方法.
三. 讲编程实例:给出编写操作系统程序的若干大实例和小实例. 一些短小精悍的小编程实例有助于读者准确理解概念. 大的编程实例可以指导学生编写内核模块的源代码, 以便使学生在今后工作中可以根据所研发的各种操作系统技术指标要求, 对现有源代码进行改造. 扩展或压缩, 以生成适合自己需求的操作系统代码.
本书共给出5个大的编程实例:(1)编写守护进程. (2)如何修改内核调度算法. (3)如何在核心添加新编写的系统调用. (4)如何编写可加载的内核设备驱动程序模块. (5)如何编写套接口模式的客户/服务器程序.
本书内容组织如下:
第一部分中第1章讲解什么是操作系统以及操作系统的重要思想和理论进展. 其他3章主要讲述Linux操作系统上电初始化的详细过程.
第二部分共6章主要研究和讲解进程和并发机制下进程的控制原理, 包括:同步与互斥, 死锁与饥饿, 进程调度, 中断机制和系统调用接口技术.
第三部分共3章主要分析和研究操作系统管理系统资源的基本原理和关键技术以及Linux实现方法, 内容包括:存储管理, 文件管理和I/O设备管理.
第四部分共5章主要分析和研究本地进程间通信方式以及网络通信方式的基本原理和实现方法. 讲解普遍使用的TCP/IP协议和套接口编程方法.
本书的每一章都有小结. 练习题和参考文献, “小结”中列出了每章内容的基本原理. 关键技术和基本概念要点, “练习题”可以帮助读者巩固所学知识, “参考文献”提供更多信息来源, 使读者可以进一步思考和研究存在的问题, 以便加深理解内核设计原理.
实际上, 操作系统就是一个大程序, 是一个能够根据用户的要求对硬件以及软件进行操作的. 有着复杂逻辑的函数(程序)集合. 而操作系统中所有的概念. 算法和原理都是由源代码来实现的. 因此说, 源代码是这门学科的最终着陆点, 所以要重视分析和阅读源代码的工作.
本书在编写过程中参考了国内外大量的相关著作和教材, 也包括Internet上提供的技术资料. 还要特别感谢在编写本书的过程中, 中国科学院计算技术研究所提供的精良设备和宽松的环境, 使我们以十分愉快的心情从事本书的写作.
我们要特别感谢梁爽同志在百忙中调试了本书中的主要编程实例. 李伟. 冯百鸣. 李丙辰. 王源. 刘兴武. 董方鹏. 龚奕利. 谈恩华. 王宇. 刘昊植. 肖丽娟. 徐京京和汪浩同志仔细阅读了本书各个章节后给出了专业评述, 并提出了宝贵的修改意见. 在此一并表示我们最诚挚的谢意.
作 者
2003年10月于北京