《操作系统实践 基于Linux的应用与内核编程》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:房胜,李旭健,黄玲等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302405276
  • 页数:304 页
图书介绍:作为操作系统课程的实验教材,本书以Linux3.13.0内核版本为平台,精心设计了一系列用户空间和内核的实验。内容包括两部分,第一部分是Linux的应用与编程实践,涉及Makefile、系统调用,多进程程序和网络通信等实验,第二部分是Linux的内核实践,包括Linux内核模块与应用程序数据交换机制、进程控制块管理、虚拟内存管理、设备驱动程序和文件系统等内核实验。

第1章 linux概述 1

1.1 linux的发展 1

1.1.1 linux概念 1

1.1.2 linux和unix的渊源 1

1.1.3 与linux相关的协议和标准 3

1.2 linux的内核架构 4

1.2.1 linux操作系统结构 4

1.2.2 linux内核体系结构 5

1.2.3 内核版本和获取 6

1.2.4 内核源代码目录结构 7

1.3 linux的主要版本 9

1.3.1 linux版本介绍 9

1.3.2 ubuntu的首次使用 10

1.4 本章小结 15

习题 15

第2章 linux基本命令与应用 16

2.1 认识命令行 16

2.1.1 terminal 16

2.1.2 命令用法初体验 18

2.1.3 其他虚拟终端 20

2.1.4 相关概念 22

2.2 使用文本文件 24

2.2.1 创建文本文件 24

2.2.2 查看文本文件内容 27

2.2.3 查找及统计 28

2.3 目录和文件 30

2.3.1 目录及文件的基本操作 30

2.3.2 文件权限 35

2.4 管理用户和用户组 39

2.4.1 相关配置文件 39

2.4.2 相关操作 40

2.5 其他常见命令 42

2.5.1 挂载和卸载设备 42

2.5.2 安装和卸载软件 44

2.6 本章小结 45

习题 46

练习 46

第3章 从hello linux程序开始 47

3.1 hello linux 47

3.1.1 hello_linux的诞生 47

3.1.2 linux平台c语言编码风格 48

3.1.3 开发工具 49

3.2 gcc编译 52

3.2.1 单文件的编译 52

3.2.2 多个源文件的编译 55

3.2.3 其他介绍 56

3.3 gdb调试 57

3.3.1 gdb介绍 58

3.3.2 使用gdb调试c语言文件 59

3.4 本章小结 64

习题 64

练习 64

第4章 利用makefile管理一个工程 65

4.1 第一个makefile 65

4.1.1 利用make编译一个程序文件 65

4.1.2 利用make编译多个程序文件 66

4.2 makefile的基本概念与规则 68

4.2.1 makefile的基本概念 68

4.2.2 规则 69

4.3 本章小结 72

习题 72

练习 72

第5章 linux系统中的时间 73

5.1 时间表示 73

5.1.1 linux系统时间 73

5.1.2 linux应用程序时间函数 74

5.2 利用程序显示系统时间 76

5.2.1 常用时间函数 76

5.2.2 高级时间函数 78

5.3 时间的测量与计时 79

5.3.1 时间测量 79

5.3.2 计时器 80

5.4 本章小结 81

习题 81

练习 81

第6章 多进程程序开发 82

6.1 进程概念 82

6.2 进程的创建 83

6.3 连续调用多次fork函数 85

6.4 启动外部程序 86

6.5 本章小结 87

习题 87

练习 87

第7章 进程间通信 88

7.1 概述 88

7.2 管道通信 89

7.2.1 管道概述 89

7.2.2 无名管道 90

7.2.3 命名管道 94

7.3 套接字通信 99

7.3.1 用文件套接字实现本地进程通信 99

7.3.2 用网络套接字实现网络进程通信 103

7.4 本章小结 106

习题 106

练习 106

第8章 利用qt开发gui应用程序 107

8.1 qt及qt creator 107

8.1.1 qt简介 107

8.1.2 qt creator 108

8.1.3 qt的安装和启动 109

8.1.4 qt creator的界面组成 110

8.2 用qt creator完成一个gui项目 112

8.2.1 创建qt gui项目 112

8.2.2 程序的运行 115

8.3 信号和槽 116

8.3.1 信号和槽的概念 116

8.3.2 用信号-槽机制响应gui事件 116

8.3.3 关于信号-槽的进一步说明 117

8.4 qt设计师 118

8.4.1 简介 118

8.4.2 qt设计师的功能 119

8.5 本章小结 119

习题 120

练习 120

第9章 mysql数据库 121

9.1 安装mysql 121

9.2 mysql的基本用法 122

9.2.1 mysql管理 122

9.2.2 数据库操作 122

9.2.3 数据类型 124

9.2.4 表操作 125

9.2.5 创建一个数据库 127

9.3 使用c语言访问mysql数据库 129

9.3.1 连接数据库 129

9.3.2 执行sql语句 130

9.3.3 处理数据 135

9.4 本章小结 137

习题 137

练习 137

第10章 linux综合应用 138

10.1 概述 138

10.1.1 系统需求 138

10.1.2 本章内容结构 139

10.2 原型设计 139

10.2.1 添加资源文件 139

10.2.2 界面设计 139

10.2.3 界面布局 142

10.2.4 添加动作 142

10.3 系统设计 144

10.3.1 系统架构 145

10.3.2 客户端功能设计 145

10.3.3 服务器功能设计 145

10.4 系统实现 146

10.4.1 数据结构(通信协议) 146

10.4.2 客户端实现 146

10.4.3 服务器端实现 147

10.4.4 几点说明 148

10.5 linux应用综合实训 148

10.6 本章小结 149

第11章 构建linux内核系统 150

11.1 概述 150

11.2 内核初始化 151

11.3 内核配置 152

11.4 内核构建 153

11.5 本章小结 154

练习 154

第12章 添加最简单的linux内核模块 155

12.1 用户态与内核态 155

12.1.1 c/c++应用程序的运行机制 155

12.1.2 linux内核模块 156

12.2 添加最简单的linux内核模块 157

12.2.1 lkm代码框架 157

12.2.2 lkm编译 159

12.2.3 kello.c的编译、添加和删除 160

12.2.4 lkm与c应用程序的差异 161

12.3 printk和某些常见宏 162

12.3.1 实时显示内核模块运行信息 162

12.3.2 显示位置信息 163

12.4 本章小结 163

练习 163

第13章 基于proc的linux进程控制块信息读取 164

13.1 proc伪文件系统 164

13.1.1 proc中的文件 164

13.1.2 proc中文件的内容 165

13.1.3 proc伪文件系统介绍 167

13.2 linux中的进程控制块 168

13.2.1 linux进程控制块task_struct 169

13.2.2 进程重要信息解读 170

13.3 通过proc读取linux进程信息 172

13.3.1 创建proc文件 172

13.3.2 基于seq_file机制的proc文件操作 173

13.3.3 task_struct信息读取过程 176

13.3.4 tasklist内核模块编译和添加 178

13.3.5 tasklist内核模块工作流程 178

13.4 task_struct重要信息 180

13.4.1 linux进程调度策略 180

13.4.2 进程优先级 181

13.4.3 进程控制块中的其他信息 182

13.5 向proc文件写入数据 183

13.5.1 用户空间和内核空间之间传递数据 183

13.5.2 内核空间内存分配 183

13.5.3 proc文件的写操作函数 185

13.6 本章小结 185

习题 186

练习 186

第14章 posix多任务及同步机制 187

14.1 fork创建进程 187

14.1.1 fork创建进程的流程 187

14.1.2 fork/exec创建进程的流程 190

14.1.3 fork进阶问题 192

14.2 posix线程机制 194

14.2.1 posix概述 194

14.2.2 posix线程创建 195

14.3 posix多线程及同步机制 198

14.3.1 多个线程的资源竞争访问 198

14.3.2 posix同步机制 200

14.4 条件变量与生产者-消费者问题 202

14.4.1 同步与互斥 202

14.4.2 posix条件变量 203

14.4.3 条件变量在生产者-消费者问题中的应用 204

14.5 本章小结 206

习题 207

练习 208

第15章 用户态和内核态信号量 209

15.1 信号量与同步问题 209

15.1.1 信号量概述 209

15.1.2 同步问题 210

15.2 posix信号量 212

15.2.1 无名信号量 213

15.2.2 有名信号量 214

15.2.3 posix信号量用于线程同步问题 215

15.2.4 posix信号量用于进程间同步 218

15.2.5 linux中的信号量技术 223

15.3 内核信号量和内核线程 224

15.3.1 linux内核信号量 224

15.3.2 linux内核线程 224

15.3.3 内核信号量和线程的例子 226

15.3.4 linux内核同步技术 228

15.4 本章小结 229

习题 229

练习 229

第16章 基于共享内存的进程间通信 231

16.1 共享内存 231

16.2 共享内存映射文件 234

16.2.1 单个进程的内存映射文件 234

16.2.2 多个进程间的内存映射文件的同步 235

16.3 posix共享内存对象 237

16.4 本章小结 239

习题 239

练习 240

第17章 linux内存管理 241

17.1 linux物理内存管理机制 241

17.1.1 内存结点node 242

17.1.2 内存结点zone 242

17.1.3 物理页框page 243

17.2 ia32的寻址机制 244

17.2.1 ia32的段机制 244

17.2.2 ia32的页面映射机制 247

17.2.3 ia32中的控制寄存器以及pae、pse 248

17.3 ia32结构上的linux地址映射机制 250

17.3.1 linux中段地址映射机制 250

17.3.2 ia32 linux段地址映射实验 252

17.3.3 ia32 linux页地址映射 256

17.3.4 ia32 linux页地址映射实验 259

17.4 linux进程地址空间 263

17.4.1 linux中进程的虚拟地址空间 263

17.4.2 获取进程虚拟地址空间信息 267

17.4.3 linux中进程的虚拟存储区域vma 268

17.4.4 获取进程的虚拟内存区域信息 270

17.4.5 linux中进程、内存和文件的关系 272

17.5 本章小结 274

习题 275

练习 276

第18章 linux设备驱动程序 277

18.1 概述 277

18.1.1 设备管理基本概念 277

18.1.2 linux字符设备管理 279

18.2 字符设备cmos驱动程序 282

18.2.1 cmos rtc信息 282

18.2.2 获取cmos rtc信息的驱动程序内核模块 282

18.2.3 cmos rtc驱动程序内核模块测试 284

18.3 基于内存映射的杂项设备驱动程序 286

18.3.1 linux中的杂项设备 286

18.3.2 设备驱动中的内存映射 286

18.3.3 基于内存映射的杂项设备驱动程序 287

18.3.4 测试 289

18.4 本章小结 289

习题 290

练习 290

第19章 linux虚拟文件系统 292

19.1 概述 292

19.1.1 vfs在linux中的作用 293

19.1.2 vfs支持的文件系统类型 293

19.1.3 vfs的基本数据结构 294

19.2 vfs对象的操作 296

19.2.1 注册文件系统 296

19.2.2 文件系统装载 297

19.2.3 与进程相关的文件系统数据结构 298

19.2.4 从当前进程访问linux内核vfs文件系统 299

19.3 proc文件系统 300

19.3.1 主要数据结构 300

19.3.2 proc文件系统的操作 302

19.4 本章小结 303

习题 303

练习 303

参考文献 304