温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
Linux
操作系统
实验
教程
高等学校规划教材高等学校规划教材 国家精品课程教材国家精品课程教材 Linux 操作系统实验教程 操作系统实验教程 罗宇 陈晖燕 艳军文 编等著 Publishing House of Electronics Industry 北京BEIJING 内 容 简 介 本书是国防科技大学国家精品课程“操作系统”配套教材,系统地讲解了 Linux 操作系统原理和基于 Linux 的各种编程,特别是 Linux 操作系统内核编程。本书内容分为三部分:第一部分介绍 Linux 操作系统原理;第二部分介绍 10 个基于 Linux 的实验;第三部分附录包含 Linux 环境下的操作及与编程有关的命令和函数列表。本书适合作为高等学校计算机科学与技术、软件工程、信息安全、信息与计算科学、信息管理与信息系统等专业操作系统实验和课程设计教材,也是 Linux 开发人员熟悉 Linux 环境下应用及内核编程的入门参考书。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 Linux 操作系统实验教程罗宇等编著.北京:电子工业出版社,2009.2 高等学校规划教材 ISBN 978-7-121-08217-7 I.L.罗.Linux 操作系统高等学校教材 .TP316.89 中国版本图书馆 CIP 数据核字(2009)第 013267 号 策划编辑:童占梅 责任编辑:童占梅 印 刷:北京市海淀区四季青印刷厂 装 订:涿州市桃园装订有限公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:7871 092 1/16 印张:11.25 字数:276 千字 印 次:2009 年 2 月第 1 次印刷 印 数:4 050 册 定价:19.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至,盗版侵权举报请发邮件至。服务热线:(010)88258888。前 言 操作系统是计算机系统必不可少的关键软件。操作系统教学不但需要讲授操作系统概念、原理与方法,还要让学生动手在实用操作系统上进行编程实践,只有这样才能让学生真正理解操作系统的概念、原理与方法。编写本书的目的就是为了在学习完操作系统原理后,为操作系统实践教学提供指导。Linux 操作系统是源代码公开的广泛使用的操作系统,利用 Linux 作为操作系统课程的实验平台,不但能帮助学生进行以理解操作系统原理为目的的实验,同时也可以看作是操作系统开发实战的演练。由于 Linux 源代码公开以及 Linux 的广泛普及,我们认为将 Linux 作为操作系统实验教学平台还将为学生毕业后快速进入实战工作状态打下良好的基础。本书是国防科技大学国家精品课程“操作系统”建设的成果之一国家精品课程“操作系统”建设的成果之一,之前出版的操作系操作系统(第统(第 2 版)和本书组成了完整的理论和实践教学体系版)和本书组成了完整的理论和实践教学体系,并在教学中取得了很好的教学效果。欢迎登录“操作系统”国家精品课程网站欢迎登录“操作系统”国家精品课程网站 http:/。本书分为三部分。第一部分介绍 Linux 操作系统原理;第二部分介绍 10 个基于 Linux 的实验;第三部分附录包含 Linux 操作及编程所需的参考资料。本书可作为 CCC2002操作系统实验和课程设计 专用指导教材,其中部分内容也可以作为操作系统原理课程的课后实验。本书还是 Linux 技术人员的系统编程入门参考书。本书作者长期从事计算机操作系统研究开发及教学工作,根据多年操作系统开发及国家精品课程建设的教学经验,参考国内外近年出版的各类操作系统实验教程特色,设计了一组基于 Linux 环境的操作系统课程实验,它包括三种类型:系统管理用 shell 脚本编程及用户态运行应用程序实验;内核入门实验;内核综合实验。用户态编程实验主要是让学生体会操作系统功能及接口,在内核实验中,有内核模块实现这样的内核入门实验,也有文件系统、USB盘驱动这样的实用综合实验,目的是让学生由浅入深地实际体验 Linux 操作系统的系统能力及操作系统设计原理。本书提供了 Linux 操作系统基本实现原理,实验内容、实验背景知识、解决方案的描述,附录给出了应用和内核编程可能涉及的系统调用、多线程库函数等,读者可以在无须其他参考书的情况下实现基本的实验编程。在操作系统实验课程教学实践中,不需局限于本书所列的实验,建议任课老师将最终实验题(如动态加载模块方式的某驱动程序实现或由学生自选的某个实验)在第一次课时就布置给学生,让学生自己理解实现目标和实验所要掌握哪些基本实验,遇到问题,鼓励学生通过互联网探索解决问题的方法,这样可以发挥学生的主观能动性,以收到更好的实验效果。建议第 8 章实验作为操作系统原理课程的课后实验,第 10章的实验作为独立操作系统实验课的综合实验由学生任选,而第 9 章实验由学生根据所选综合实验需要自行实验。整个实验教学建议在实验机房进行,本书所有实验在本书所有实验在 Linux 发行版发行版Fedora 7 及内核版本及内核版本 2.6.21.7 下经过了验证。下经过了验证。本书由罗宇负责组织和统稿,罗宇、陈燕晖编写了 Linux 操作系统原理部分,文艳军编写了实验 10,其他部分均由陈燕晖编写。个别实验参考了罗宇、储瑞编著、机械工业出版社出版的操作系统课程设计。参加本书编写工作的还有李冬、晏益慧。由于编者水平有限,错误在所难免,有对本书的任何批评和建议可发送邮件到 。编著者 于湖南长沙国防科技大学计算机学院 V 目 录 第一部分 Linux 操作系统基本原理 第 1 章 Linux 操作系统简介3 1.1 Linux 的渊源和发展简史3 1.2 Linux 的基本特性4 1.3 Linux 内核的开发模式与内核版本号5 1.4 Linux 发行版介绍6 1.5 Linux 内核源代码组织结构7 1.6 学习 Linux 的辅助软件介绍8 第 2 章 Linux 的进程管理10 2.1 进程与进程描述符10 2.2 进程状态及切换时机11 2.2.1 Linux 的进程状态 11 2.2.2 进程的切换时机12 2.3 进程的调度算法13 2.4 进程的创建与消亡14 第 3 章 Linux 的存储器管理17 3.1 物理内存的管理17 3.1.1 页帧与区域17 3.1.2 伙伴算法 17 3.1.3 slab 分配器18 3.2 进程地址空间的管理19 3.2.1 页表机制 20 3.2.2 vm_area_struct 结构 21 3.2.3 进程地址空间的相关系统调用22 3.2.4 页面异常的处理22 第 4 章 Linux 的文件系统24 4.1 VFS24 4.1.1 VFS 的作用24 4.1.2 进程描述符中与文件系统相关的成员24 4.1.3 VFS 的文件模型25 4.1.4 文件系统的注册与安装 27 4.1.5 各种对象的操作接口28 4.2 EXT2 文件系统30 4.2.1 EXT2 在磁盘上的物理布局30 VI 4.2.2 主要的数据结构及其基本操作31 4.2.3 磁盘块的分配与释放34 4.3 主要文件系统的系统调用处理流程34 4.3.1 文件的 open 操作34 4.3.2 文件的 read 操作35 第 5 章 Linux 的设备管理37 5.1 设备文件的概念37 5.2 设备模型基础37 5.3 相关数据结构38 5.3.1 字符设备管理38 5.3.2 块设备管理39 5.3.3 buffer 40 5.3.4 设备请求队列和 I/O 调度算法 41 5.4 块设备文件的 open 和 read 操作41 5.4.1 块设备驱动程序组成41 5.4.2 open 函数41 5.4.3 read 函数 42 第 6 章 中断、异常及系统调用43 6.1 中断和异常的基本知识43 6.2 异常处理函数43 6.3 系统调用44 6.4 中断的处理 45 6.4.1 中断控制器45 6.4.2 管理中断的数据结构45 6.4.3 中断的处理过程47 6.5 软中断47 第 7 章 Sys V 进程间通信49 7.1 共有的特性 49 7.2 信号量50 7.3 消息队列52 7.4 共享内存54 第二部分 基于 Linux 操作系统的实验 第 8 章 用户态编程实验59 8.1 实验 1 bash 脚本编程59 8.1.1 实验内容 59 8.1.2 bash 脚本编程简介59 8.1.2.1 注释和简单命令59 8.1.2.2 环境变量60 VII 8.1.2.3 控制结构60 8.1.2.4 函数64 8.1.3 实验指南 64 8.2 实验 2 观察 Linux 行为65 8.2.1 实验内容 65 8.2.2 proc 文件系统简介65 8.2.3 实验指南 69 8.2.3.1 Linux 环境下 C 语言编程环境简介69 8.2.3.2 实验程序框架69 8.3 实验 3 实现 Linux 命令解释器70 8.3.1 实验内容 70 8.3.2 myshell 的语法70 8.3.3 myshell 的程序框架 71 8.3.4 myshell 命令行的语法分析72 8.3.5 简单命令的执行74 8.3.6 myshell 的 Makefile74 8.3.7 实验指南 75 第 9 章 内核编程基础实验76 9.1 实验 4 内核模块76 9.1.1 实验内容 76 9.1.2 Linux 内核模块简介76 9.1.3 内核符号表76 9.1.4 内核模块编程介绍77 9.1.4.1 内核模块实例77 9.1.4.2 模块编程的基本知识 78 9.1.4.3 Makefile 介绍 79 9.1.5 实验指南 80 9.1.6 测试82 9.2 实验 5 proc 文件系统编程 83 9.2.1 实验内容 83 9.2.2 proc 文件系统编程简介83 9.2.2.1 proc 文件系统编程示例 83 9.2.2.2 proc 文件系统的核心数据结构85 9.2.2.3 proc 文件系统编程接口 86 9.2.3 实验指南 88 9.3 实验 6 编译内核及增加 Linux 系统调用88 9.3.1 实验内容 89 9.3.2 Fedora 下编译内核89 9.3.2.1 第 1 步 下载内核90 VIII 9.3.2.2 第 2 步 生成内核配置文件.config90 9.3.2.3 第 3 步 编译和安装新的内核91 9.3.3 添加 psta 系统调用92 9.3.4 测试新增系统调用 psta94 9.3.5 noexec 系统调用的实现95 第 10 章 内核编程综合实验96 10.1 实验 7 进程隐藏96 10.1.1 实验内容 96 10.1.2 背景知识介绍96 10.1.3 proc 文件系统实现简介 98 10.1.4 实验指南 102 10.1.4.1 功能的实现102 10.1.4.2 功能(5)的实现103 10.1.4.3 功能(7)的实现106 10.2 实验 8 字符设备驱动开发106 10.2.1 实验内容 107 10.2.2 字符设备驱动开发介绍 107 10.2.2.1 测试字符设备109 10.2.2.2 描述设备的数据结构 110 10.2.2.3 设备号的操作110 10.2.2.4 字符设备的注册与注销111 10.2.2.5 文件操作集111 10.2.2.6 同步112 10.2.3 字符设备 chatdev 的实现113 10.2.4 聊天程序 chat 的实现114 10.3 实验 9 naive 文件系统的设计与实现115 10.3.1 实验内容 115 10.3.2 项目的准备工作及建议 115 10.3.3 实验指南 116 10.3.3