操作系统实践-基于Linux的应用与内核编程 本书特色
本书结合多年操作系统课程理论与实践教学经验,基于当前流行的开源操作系统ubuntu14.04lts (linux内核3.13.0)设计了一组操作系统课程实验。全书可分为两大部分,**部分是linux操作与应用编程,包括linux常用命令、c语言编程工具和典型的linux应用开发,如多进程、进程通信等,并提供一个基于开源的qt框架和mysql数据库的综合实训案例; 第二部分是linux内核编程,这一部分紧密结合操作系统课程的教学内容,包含进程管理、内存管理、设备驱动程序和虚拟文件系统等。实验安排循序渐进,每个实验都有相应的原理性内容作为铺垫。配套电子资源提供所有实验的源代码及其他相关资料,可从清华大学出版社网站下载。本书特点是实验环境新、内容结构层次分明、经典与前沿兼顾,并与理论教学内容相呼应。
本书既可作为高等院校计算机、电子信息类等专业的操作系统实验课程教材,也可作为linux编程相关课程的教材。另外,致力于转向*新linux开源开发环境的读者也可以将其作为快速入门教程。
操作系统实践-基于Linux的应用与内核编程 目录
第1章linux概述
1.1linux的发展
1.1.1linux概念
1.1.2linux和unix的渊源
1.1.3与linux相关的协议和标准
1.2linux的内核架构
1.2.1linux操作系统结构
1.2.2linux内核体系结构
1.2.3内核版本和获取
1.2.4内核源代码目录结构
1.3linux的主要版本
1.3.1linux版本介绍
1.3.2ubuntu的首次使用
1.4本章小结
习题
第2章linux基本命令与应用
2.1认识命令行
2.1.1terminal
2.1.2命令用法初体验
2.1.3其他虚拟终端
2.1.4相关概念
2.2使用文本文件
2.2.1创建文本文件
2.2.2查看文本文件内容
2.2.3查找及统计
2.3目录和文件
2.3.1目录及文件的基本操作
2.3.2文件权限
2.4管理用户和用户组
2.4.1相关配置文件
2.4.2相关操作
2.5其他常见命令
2.5.1挂载和卸载设备
2.5.2安装和卸载软件
2.6本章小结
习题
练习
第3章从hello linux程序开始
3.1hello linux
3.1.1hello_linux的诞生
3.1.2linux平台c语言编码风格
3.1.3开发工具
3.2gcc编译
3.2.1单文件的编译
3.2.2多个源文件的编译
3.2.3其他介绍
3.3gdb调试
3.3.1gdb介绍
3.3.2使用gdb调试c语言文件
3.4本章小结
习题
练习
第4章利用makefile管理一个工程
4.1**个makefile
4.1.1利用make编译一个程序文件
4.1.2利用make编译多个程序文件
4.2makefile的基本概念与规则
4.2.1makefile的基本概念
4.2.2规则
4.3本章小结
习题
练习
第5章linux系统中的时间
5.1时间表示
5.1.1linux系统时间
5.1.2linux应用程序时间函数
5.2利用程序显示系统时间
5.2.1常用时间函数
5.2.2高级时间函数
5.3时间的测量与计时
5.3.1时间测量
5.3.2计时器
5.4本章小结
习题
练习
第6章多进程程序开发
6.1进程概念
6.2进程的创建
6.3连续调用多次fork函数
6.4启动外部程序
6.5本章小结
习题
练习
第7章进程间通信
7.1概述
7.2管道通信
7.2.1管道概述
7.2.2无名管道
7.2.3命名管道
7.3套接字通信
7.3.1用文件套接字实现本地进程通信
7.3.2用网络套接字实现网络进程通信
7.4本章小结
习题
练习
第8章利用qt开发gui应用程序
8.1qt及qt creator
8.1.1qt简介
8.1.2qt creator
8.1.3qt的安装和启动
8.1.4qt creator的界面组成
8.2用qt creator完成一个gui项目
8.2.1创建qt gui项目
8.2.2程序的运行
8.3信号和槽
8.3.1信号和槽的概念
8.3.2用信号槽机制响应gui事件
8.3.3关于信号槽的进一步说明
8.4qt设计师
8.4.1简介
8.4.2qt设计师的功能
8.5本章小结
习题
练习
第9章mysql数据库
9.1安装mysql
9.2mysql的基本用法
9.2.1mysql管理
9.2.2数据库操作
9.2.3数据类型
9.2.4表操作
9.2.5创建一个数据库
9.3使用c语言访问mysql数据库
9.3.1连接数据库
9.3.2执行sql语句
9.3.3处理数据
9.4本章小结
习题
练习
第10章linux综合应用
10.1概述
10.1.1系统需求
10.1.2本章内容结构
10.2原型设计
10.2.1添加资源文件
10.2.2界面设计
10.2.3界面布局
10.2.4添加动作
10.3系统设计
10.3.1系统架构
10.3.2客户端功能设计
10.3.3服务器功能设计
10.4系统实现
10.4.1数据结构(通信协议)
10.4.2客户端实现
10.4.3服务器端实现
10.4.4几点说明
10.5linux应用综合实训
10.6本章小结
第11章构建linux内核系统
11.1概述
11.2内核初始化
11.3内核配置
11.4内核构建
11.5本章小结
练习
第12章添加*简单的linux内核模块
12.1用户态与内核态
12.1.1c/c++应用程序的运行机制
12.1.2linux内核模块
12.2添加*简单的linux内核模块
12.2.1lkm代码框架
12.2.2lkm编译
12.2.3kello.c的编译、添加和删除
12.2.4lkm与c应用程序的差异
12.3printk和某些常见宏
12.3.1实时显示内核模块运行信息
12.3.2显示位置信息
12.4本章小结
练习
第13章基于proc的linux进程控制块信息读取
13.1proc伪文件系统
13.1.1proc中的文件
13.1.2proc中文件的内容
13.1.3proc伪文件系统介绍
13.2linux中的进程控制块
13.2.1linux进程控制块task_struct
13.2.2进程重要信息解读
13.3通过proc读取linux进程信息
13.3.1创建proc文件
13.3.2基于seq_file机制的proc文件操作
13.3.3task_struct信息读取过程
13.3.4tasklist内核模块编译和添加
13.3.5tasklist内核模块工作流程
13.4task_struct重要信息
13.4.1linux进程调度策略
13.4.2进程优先级
13.4.3进程控制块中的其他信息
13.5向proc文件写入数据
13.5.1用户空间和内核空间之间传递数据
13.5.2内核空间内存分配
13.5.3proc文件的写操作函数
13.6本章小结
习题
练习
第14章posix多任务及同步机制
14.1fork创建进程
14.1.1fork创建进程的流程
14.1.2fork/exec创建进程的流程
14.1.3fork进阶问题
14.2posix线程机制
14.2.1posix概述
14.2.2posix线程创建
14.3posix多线程及同步机制
14.3.1多个线程的资源竞争访问
14.3.2posix同步机制
14.4条件变量与生产者消费者问题
14.4.1同步与互斥
14.4.2posix条件变量
14.4.3条件变量在生产者消费者问题中的应用
14.5本章小结
习题
练习
第15章用户态和内核态信号量
15.1信号量与同步问题
15.1.1信号量概述
15.1.2同步问题
15.2posix信号量
15.2.1无名信号量
15.2.2有名信号量
15.2.3posix信号量用于线程同步问题
15.2.4posix信号量用于进程间同步
15.2.5linux中的信号量技术
15.3内核信号量和内核线程
15.3.1linux内核信号量
15.3.2linux内核线程
15.3.3内核信号量和线程的例子
15.3.4linux内核同步技术
15.4本章小结
习题
练习
第16章基于共享内存的进程间通信
16.1共享内存
16.2共享内存映射文件
16.2.1单个进程的内存映射文件
16.2.2多个进程间的内存映射文件的同步
16.3posix共享内存对象
16.4本章小结
习题
练习
第17章linux内存管理
17.1linux物理内存管理机制
17.1.1内存结点node
17.1.2内存结点zone
17.1.3物理页框page
17.2ia32的寻址机制
17.2.1ia32的段机制
17.2.2ia32的页面映射机制
17.2.3ia32中的控制寄存器以及pae、pse
17.3ia32结构上的linux地址映射机制
17.3.1linux中段地址映射机制
17.3.2ia32 linux段地址映射实验
17.3.3ia32 linux页地址映射
17.3.4ia32 linux页地址映射实验
17.4linux进程地址空间
17.4.1linux中进程的虚拟地址空间
17.4.2获取进程虚拟地址空间信息
17.4.3linux中进程的虚拟存储区域vma
17.4.4获取进程的虚拟内存区域信息
17.4.5linux中进程、内存和文件的关系
17.5本章小结
习题
练习
第18章linux设备驱动程序
18.1概述
18.1.1设备管理基本概念
18.1.2linux字符设备管理
18.2字符设备cmos驱动程序
18.2.1cmos rtc信息
18.2.2获取cmos rtc信息的驱动程序内核模块
18.2.3cmos rtc驱动程序内核模块测试
18.3基于内存映射的杂项设备驱动程序
18.3.1linux中的杂项设备
18.3.2设备驱动中的内存映射
18.3.3基于内存映射的杂项设备驱动程序
18.3.4测试
18.4本章小结
习题
练习
第19章linux虚拟文件系统
19.1概述
19.1.1vfs在linux中的作用
19.1.2vfs支持的文件系统类型
19.1.3vfs的基本数据结构
19.2vfs对象的操作
19.2.1注册文件系统
19.2.2文件系统装载
19.2.3与进程相关的文件系统数据结构
19.2.4从当前进程访问linux内核vfs文件系统
19.3proc文件系统
19.3.1主要数据结构
19.3.2proc文件系统的操作
19.4本章小结
习题
练习
参考文献
实验目录
第2章linux基本命令与应用
实验1: 认识命令行的相关实验
实验2: 创建文本文件
实验3: 查看文本文件
实验4: 文本文件查找及统计
实验5: 目录及文件基本操作
实验6: 文件权限
实验7: 管理用户和用户组
实验8: 其他常见操作
第3章从hello linux程序开始
实验1: 简单程序开发
实验2: 单步编译和多步编译
实验3: 浏览gdb内置命令
实验4: 利用gdb调试程序
第4章利用makefile管理一个工程
实验1: makefile与命令行编译的比较
实验2: 编写makefile
第5章linux系统中的时间
实验1: 编程显示系统时间
实验2: linux中的时间测量
实验3: linux中的计时器
第6章多进程程序开发
实验1: 利用fork创建进程
实验2: 连续调用多次fork函数
实验3: 启动外部程序
第7章进程间通信
实验1: 管道通信
实验2: 文件套接字通信
实验3: 网络套接字通信
第8章利用qt开发gui应用程序
实验1: qt的安装与启动
实验2: 创建qt gui项目
实验3: 信号槽机制
第9章mysql数据库
实验1: mysql数据库操作
实验2: mysql表操作
实验3: 创建一个mysql数据库
实验4: 用c语言访问mysql数据库
第12章添加*简单的linux内核模块
实验1: 添加*简单的内核模块kello
实验2: 内核模块输出信息显示
第13章基于proc的linux进程控制块信息读取
实验1: 测试proc文件系统功能
实验2: 创建显示系统进程信息的proc模块
实验3: 显示linux进程控制块中更多的信息
第14章posix多任务及同步机制
实验1: linux进程创建
实验2: posix线程创建
实验3: posix线程互斥和参数传递
实验4: 使用posix条件变量实现线程同步
第15章用户态和内核态信号量
实验1: 使用posix信号量实现线程同步
实验2: 使用posix信号量实现进程同步
实验3: 创建linux内核线程并使用内核信号量实现同步
第16章基于共享内存的进程间通信
实验1: 使用内存映射文件实现进程间通信
实验2: 使用共享内存对象实现进程同步
第17章linux内存管理
实验1: 获取ia32段寄存器中的描述符
实验2: 获取ia32中的全局段表信息
实验3: 获取c程序中一个逻辑地址对应的物理地址
实验4: 显示进程的虚拟内存地址空间分布信息
实验5: 获取一个进程的虚拟存储区域信息
第18章linux设备驱动程序
实验1: 实现读取cmos实时时钟信息的驱动程序
实验2: 实现一个基于内存映射的设备驱动程序
第19章linux虚拟文件系统
实验1: 访问linux内核虚拟文件系统
实验2: 加载newproc文件系统