linux系统基础与应用,Linux操作系统:基础、原理与应用

《Linux操作系统:基础、原理与应用》

第1部分基础篇

第1章操作系统概述/3

1.1认识操作系统3

1.1.1操作系统的概念3

1.1.2操作系统的功能4

1.2操作系统的发展与现状5

1.2.1操作系统的发展5

1.2.2操作系统的分类与现状7

1.3Linux操作系统概述10

1.3.1Linux的发展背景与历史10

1.3.2Linux操作系统的特点13

1.3.3Linux操作系统的组成13

1.3.4Linux操作系统的版本14

1.3.5Linux操作系统的应用与发展16

习题17

第2章 Linux操作基础/18

2.1Linux基本操作18

2.1.1登录18

2.1.2修改口令19

2.1.3退出20

2.1.4系统的关闭与重启20

2.2Linux命令20

2.2.1命令的格式21

2.2.2命令的输入与执行21

2.2.3几个简单命令22

2.2.4联机帮助25

2.3Linux文件操作25

2.3.1Linux系统的文件26

2.3.2Linux系统的目录31

2.3.3常用的目录操作命令33

2.3.4常用的文件操作命令37

2.4输入/输出重定向53

2.4.1命令的输入与输出53

2.4.2输入重定向54

2.4.3输出重定向55

2.4.4管道59

习题61

第3章vi文本编辑器/64

3.1vi文本编辑器概述64

3.1.1vi文本编辑器介绍64

3.1.2vi的工作模式65

3.1.3vi的基本工作流程66

3.2vi基本命令67

3.2.1光标定位与移动67

3.2.2文本输入与删除68

3.2.3文本修改与替换69

3.2.4文本拷贝、粘贴与选择70

3.2.5撤销与重做72

3.3vi常用末行命令72

3.3.1搜索与替换命令72

3.3.2文件操作与退出命令74

3.3.3其他常用命令74

习题75

第4章Linux C编程基础/76

4.1Linux C编程方法概述76

4.2gcc编译基础77

4.2.1gcc编译过程77

4.2.2gcc命令79

4.2.3gcc应用举例80

4.3C联机手册83

习题84

第2部分原理篇

第5章进程管理/875.1进程87

5.1.1程序的顺序执行与并发执行87

5.1.2进程的概念89

5.1.3进程控制块90

5.1.4Linux系统中的进程91

5.2进程的运行模式95

5.2.1操作系统的内核95

5.2.2中断与系统调用97

5.2.3进程的运行模式97

5.3进程的描述与组织98

5.3.1进程的资源98

5.3.2进程的描述结构99

5.3.3进程的组织100

5.4进程控制101

5.4.1进程控制的功能101

5.4.2Linux系统的进程控制102

5.4.3Shell命令的执行过程108

5.5进程调度109

5.5.1进程调度的基本原理109

5.5.2Linux系统的进程调度110

5.5.3Linux系统的进程切换113

5.6进程的互斥与同步115

5.6.1进程间的制约关系115

5.6.2信号量同步机制117

5.6.3Linux的信号量机制119

5.6.4死锁问题119

5.7进程通信121

5.7.1进程通信的方式121

5.7.2Linux信号通信原理122

5.7.3Linux管道通信原理125

5.8线程125

5.8.1线程的概念125

5.8.2线程与进程的比较126

5.8.3内核级线程与用户级线程126

5.8.4Linux中的线程127

习题128

第6章存储管理/129

6.1存储管理概述129

6.1.1内存的分配与回收129

6.1.2存储地址变换129

6.1.3内存的保护132

6.1.4内存的扩充132

6.2存储管理方案133

6.2.1分区存储管理133

6.2.2页式存储管理135

6.2.3段式存储管理137

6.2.4段页式存储管理139

6.3虚拟存储管理139

6.3.1虚拟存储技术139

6.3.2页式虚拟存储器原理140

6.4Linux的存储管理143

6.4.1x86架构的内存访问机制143

6.4.2Linux内存管理方案145

6.4.3进程地址空间的管理146

6.4.4内存空间的管理与分配150

6.4.5页面的交换153

习题154

第7章文件管理/156

7.1文件管理技术156

7.1.1文件与文件系统156

7.1.2文件的逻辑结构与存取方式158

7.1.3文件的物理结构与存储方式159

7.1.4文件的共享与保护163

7.1.5文件存储空间的管理164

7.2Linux文件系统概述165

7.2.1Linux文件系统的特点165

7.2.2Linux文件系统的结构165

7.3Ext文件系统167

7.3.1Ext文件的结构167

7.3.2Ext文件系统的磁盘布局173

7.3.3Ext文件存储分配策略178

7.4虚拟文件系统178

7.4.1VFS的对象179

7.4.2VFS对象的关联结构182

7.4.3VFS与进程的接口182

7.4.4VFS的缓存机制183

7.4.5文件系统的注册、挂装与卸载185

7.4.6文件的操作185

习题186

第8章设备管理/188

8.1设备管理概述188

8.1.1设备管理的功能188

8.1.2设备的分类189

8.1.3设备与系统的接口189

8.1.4I/O系统的硬件结构192

8.1.5I/O系统的软件结构193

8.2设备管理的相关技术194

8.2.1中断技术194

8.2.2缓冲与缓存技术196

8.2.3DMA技术198

8.3I/O控制方式199

8.3.1程序I/O方式200

8.3.2中断I/O方式200

8.3.3DMA方式201

8.3.4通道方式201

8.4设备的分配与调度202

8.4.1设备分配的基本方法202

8.4.2虚拟设备技术203

8.5设备的驱动204

8.5.1设备的驱动方式204

8.5.2驱动程序与中断处理程序204

8.6Linux设备管理205

8.6.1Linux设备管理综述205

8.6.2Linux I/O系统的软件结构207

8.6.3Linux的设备管理机制208

8.6.4字符设备的管理与驱动209

8.6.5块设备的管理与驱动211

8.6.6Linux的中断处理217

习题219

第9章操作系统接口/220

9.1操作系统接口概述220

9.1.1作业与作业调度220

9.1.2操作系统的接口221

9.1.3Linux系统的接口222

9.2Shell命令接口222

9.2.1Shell界面的组成222

9.2.2Shell的功能222

9.2.3Shell的版本223

9.2.4Shell的工作流程与原理224

9.3X图形窗口接口225

9.3.1X Window系统概述225

9.3.2X系统的体系结构与工作原理226

9.3.3X图形界面的组成228

9.3.4X系统的启动与停止232

9.3.5Linux桌面系统简介236

9.4系统调用接口241

9.4.1系统调用接口概述241

9.4.2系统调用接口的组成241

9.4.3系统调用的分类243

9.4.4系统调用的执行过程244

习题246

第3部分应用篇

第10章Shell程序设计/24910.1Shell语言概述249

10.1.1Shell语言的特点249

10.1.2Shell程序249

10.1.3Shell程序的建立与执行250

10.2Shell特殊字符251

10.2.1通配符251

10.2.2输入/输出重定向与管道符252

10.2.3命令执行控制符254

10.2.4命令组合符255

10.2.5命令替换符256

10.2.6其他元字符256

10.2.7元字符的引用256

10.3Shell变量257

10.3.1变量的定义与使用257

10.3.2变量的作用域259

10.3.3变量的分类261

10.3.4环境变量261

10.3.5特殊变量264

10.4Shell表达式268

10.4.1数字运算表达式268

10.4.2逻辑测试表达式269

10.5Shell控制结构272

10.5.1条件与条件命令273

10.5.2分支控制命令273

10.5.3循环控制命令275

10.5.4退出循环命令277

10.5.5退出命令278

10.6Shell程序综合举例278

习题282

第11章Linux系统管理/284

11.1系统管理概述284

11.1.1系统管理工作的内容284

11.1.2系统管理工具284

11.1.3root的权威性与危险性285

11.2启动与关闭系统285

11.2.1Linux系统的初始化机制285

11.2.2系统的启动与关闭操作288

11.3用户管理289

11.3.1用户管理概述289

11.3.2用户管理的相关文件291

11.3.3用户管理293

11.3.4用户组管理296

11.4文件系统维护296

11.4.1文件系统的目录结构296

11.4.2存储设备命名规则298

11.4.3划分磁盘分区300

11.4.4建立逻辑卷301

11.4.5建立文件系统302

11.4.6挂装文件系统303

11.4.7拆卸文件系统305

11.4.8修复文件系统305

11.5系统备份305

11.5.1备份策略306

11.5.2备份命令306

11.6系统监控309

11.6.1监视用户的登录309

11.6.2监控进程的运行310

11.6.3监视内存的使用315

11.6.4监视文件系统的使用315

11.7软件安装317

11.7.1软件的打包与安装317

11.7.2RPM软件包管理工具318

11.7.3YUM软件包管理工具321

习题322

第12章网络与通信应用/323

12.1TCP/IP网络相关概念323

12.1.1TCP/IP协议概述323

12.1.2IP地址与域名324

12.1.3协议端口325

12.1.4客户/服务器软件模型326

12.2Linux网络应用技术327

12.2.1网络测试327

12.2.2网络查询329

12.2.3远程执行命令330

12.2.4文件传输332

12.2.5即时通信334

12.3电子邮件334

12.3.1电子邮件的结构335

12.3.2电子邮件系统的工作原理335

12.3.3在Linux中使用邮件337

习题339

附录ALinux系统的安装/341

A.1安装准备340

A.1.1获得安装介质340

A.1.2确定安装方式340

A.2在硬盘分区中安装Linux系统341

A.2.1安装前准备341

A.2.2安装过程341

A.2.3安装后设置346

A.3在虚拟机中安装Linux系统349

A.3.1虚拟机技术简介349

A.3.2安装虚拟机软件350

A.3.3创建虚拟机350

A.3.4调整虚拟机设置351

A.3.5在虚拟机中安装和运行Linux352

附录BLinux C开发工具简介/355

B.1Linux C开发环境355

B.2Make工具介绍357

B.2.1makefile文件358

B.2.2make命令360

B.3调试工具介绍362

B.3.1gdb命令362

B.3.2gdb的使用364

参考文献/371

第1章 操作系统概述 1 1.1 认识操作系统 1 1.1.1 从使用者角度 1 1.1.2 从程序开发者角度 2 1.1.3 从操作系统在整个计算机系统中所处位置 2 1.1.4 从操作系统设计者的角度 3 1.2 操作系统的发展 4 1.2.1 操作系统的演变 4 1.2.2 硬件的发展轨迹 5 1.2.3 软件的轨迹 6 1.2.4 单内核与微内核操作系统 7 1.3 开放源代码的Unix/Linux操作系统 8 1.3.1 Unix的诞生和发展 8 1.3.2 Linux的诞生 9 1.3.3 操作系统标准POSIX 9 1.3.4 GNU和Linux 9 1.3.5 Linux的开发模式 10 1.4 Linux内核 10 1.4.1 Linux内核的位置 10 1.4.2 Linux内核的作用 11 1.4.3 Linux内核子系统 11 1.5 Linux内核源代码 13 1.5.1 多版本的内核源代码 13 1.5.2 Linux内核源代码的结构 13 1.5.3 Linux内核源代码分析工具 14 习题1 15 第2章 内存寻址 17 2.1 内存寻址简介 17 2.1.1 Intel x86 CPU寻址方式的演变 18 2.1.2 IA32寄存器简介 19 2.1.3 物理地址、虚拟地址及线性地址 21 2.2 分段机制 22 2.2.1 地址转换及保护 24 2.2.2 Linux中的段 24 2.3 分页机制 25 2.3.1 页与页表 25 2.3.2 线性地址到物理地址的转换 28 2.3.3 分页示例 28 2.3.4 页面高速缓存(cache) 29 2.3.5 Linux中的分页机制 30 2.4 Linux中的汇编语言 31 2.4.1 AT&T与Intel汇编语言的比较 31 2.4.2 AT&T汇编语言的相关知识 32 2.5 Linux系统地址映射示例 33 习题2 35 第3章 进程 37 3.1 进程介绍 37 3.1.1 程序和进程 37 3.1.2 进程的层次结构 38 3.1.3 进程状态 39 3.1.4 进程实例 40 3.2 进程控制块 41 3.2.1 进程状态 42 3.2.2 进程标识符 43 3.2.3 进程之间的亲属关系 43 3.2.4 进程控制块的存放 44 3.3 进程的组织方式 45 3.3.1 进程链表 45 3.3.2 散列表 46 3.3.3 可运行队列 47 3.3.4 等待队列 47 3.4 进程调度 48 3.4.1 基本原理 48 3.4.2 时间片 50 3.4.3 Linux进程调度时机 50 3.4.4 进程调度的依据 51 3.4.5 调度函数schedule()的实现 52 3.5 进程的创建 54 3.5.1 创建进程 55 3.5.2 线程及其创建 56 3.6 与进程相关的系统调用及其应用 58 3.6.1 fork系统调用 58 3.6.2 exec系统调用 59 3.6.3 wait系统调用 60 3.6.4 exit系统调用 62 3.6.5 进程的一生 63 3.7 与调度相关的系统调用及应用 63 习题3 65 第4章 内存管理 67 4.1 Linux的内存管理概述 67 4.1.1 虚拟内存、内核空间和用户空间 67 4.1.2 虚拟内存实现机制间的关系 69 4.2 进程用户空间的管理 70 4.2.1 进程用户空间的描述 71 4.2.2 进程用户空间的创建 74 4.2.3 虚存映射 76 4.2.4 进程的虚存区示例 76 4.2.5 与用户空间相关的系统调用 78 4.3 请页机制 79 4.3.1 缺页异常处理程序 79 4.3.2 请求调页 81 4.3.3 写时复制 83 4.4 物理内存的分配与回收 83 4.4.1 伙伴算法 85 4.4.2 物理页面的分配 86 4.4.3 物理页面的回收 88 4.4.4 slab分配模式 89 4.4.5 内核空间非连续内存区的分配 93 4.5 交换机制 95 4.5.1 交换的基本原理 95 4.5.2 页面交换守护进程kswapd 99 4.6 内存管理实例 99 4.6.1 相关背景知识 100 4.6.2 代码体系结构介绍 100 4.6.3 实现步骤 103 4.6.4 程序代码 103 习题4 108 第5章 中断和异常 110 5.1 中断的基本知识 110 5.1.1 中断向量 110 5.1.2 外设可屏蔽中断 111 5.1.3 异常及非屏蔽中断 112 5.1.4 中断描述符表 112 5.1.5 相关汇编指令 113 5.2 中断描述符表的初始化 114 5.2.1 IDT表项的设置 114 5.2.2 对陷阱门和系统门的初始化 115 5.2.3 中断门的设置 116 5.3 中断处理 116 5.3.1 中断和异常的硬件处理 116 5.3.2 中断请求队列的建立 117 5.3.3 中断处理程序的执行 119 5.3.4 从中断返回 121 5.4 中断的下半部处理机制 121 5.4.1 为什么把中断分为两部分来处理 122 5.4.2 小任务机制 122 5.4.3 下半部 124 5.4.4 任务队列 125 5.5 中断应用——时钟中断 125 5.5.1 时钟 125 5.5.2 时钟运作机制 126 5.5.3 Linux的时间系统 127 5.5.4 时钟中断处理程序 128 5.5.5 时钟中断的下半部处理 129 5.5.6 定时器及其应用 129 习题5 132 第6章 系统调用 133 6.1 系统调用与应用编程接口、系统命令、内核函数的关系 133 6.1.1 系统调用与API 133 6.1.2 系统调用与系统命令 134 6.1.3 系统调用与内核函数 134 6.2 系统调用处理程序及服务例程 135 6.2.1 初始化系统调用 136 6.2.2 system_call()函数 136 6.2.3 参数传递 137 6.2.4 跟踪系统调用的执行 139 6.3 封装例程 140 6.4 添加新系统调用 141 6.5 实例——利用系统调用实现一个调用日志收集系统 143 6.5.1 代码体系结构 143 6.5.2 把代码集成到内核中 146 6.5.3 实现步骤 148 习题6 148 第7章 内核中的同步 149 7.1 临界区和竞争状态 149 7.1.1 临界区举例 149 7.1.2 共享队列和加锁 150 7.1.3 确定保护对象 151 7.1.4 死锁 152 7.1.5 并发执行的原因 153 7.2 内核同步方法 153 7.2.1 原子操作 153 7.2.2 自旋锁 155 7.2.3 信号量 156 7.3 并发控制实例 157 7.3.1 内核任务及其并发关系 158 7.3.2 实现机制 158 7.3.3 关键代码解释 162 7.3.4 实现步骤 163 习题7 164 第8章 文件系统 165 8.1 Linux文件系统基础 165 8.1.1 Linux文件结构 165 8.1.2 Linux文件系统 166 8.1.3 文件类型 167 8.1.4 文件访问权限 168 8.2 虚拟文件系统 168 8.2.1 虚拟文件系统的引入 168 8.2.2 VFS中的数据结构 170 8.2.3 VFS超级块数据结构 171 8.2.4 VFS的索引节点 173 8.2.5 目录项对象 174 8.2.6 与进程相关的文件结构 176 8.2.7 主要的数据结构之间的关系 179 8.3 文件系统的注册、安装与卸载 180 8.3.1 文件系统的注册和注销 180 8.3.2 文件系统的安装 181 8.3.3 文件系统的卸载 183 8.4 页缓冲区 183 8.4.1 address_space对象 183 8.4.2 address_space对象的操作函数表 184 8.5 文件的打开与读写 185 8.5.1 打开文件 185 8.5.2 读写文件 187 8.6 编写一个文件系统 189 8.6.1 Linux文件系统的实现要素 189 8.6.2 什么是romfs文件系统 191 8.6.3 romfs文件系统的布局与文件结构 191 8.6.4 具体实现的对象 192 习题8 195 第9章 设备驱动 196 9.1 概述 196 9.2 设备驱动程序基础 198 9.2.1 I/O端口 199 9.2.2 设备文件 200 9.2.3 中断处理 201 9.2.4 设备驱动程序框架 203 9.3 字符设备驱动程序 204 9.3.1 字符设备驱动程序的注册 204 9.3.2 简单的字符设备驱动程序示例 205 9.4 块设备驱动程序 208 9.4.1 块设备驱动程序的注册 209 9.4.2 块设备请求 212 习题9 215 附录A 内核中的链表 216 A.1 链表数据结构简介 216 A.2 内核链表数据结构的定义及初始化 217 A.3 操作链表的接口 218 A.4 遍历链表 219 附录B 内核模块 221 B.1 什么是模块 221 B.2 编写一个简单的模块 221 B.3 模块编程的基础知识 222 B.4 模块的编译 224 B.5 模块实用程序modutils 226 附录C Linux内核编译 228 C.1 内核简介 228 C.2 为什么重新编译内核 228 C.3 内核编译模式 229 C.4 新版本内核的获取和更新 229 C.5 内核编译 230 C.6 修改并重启管理器 232 附录D Linux编程基础(C语言环境) 233 D.1 Linux编程常识 233 D.1.1 相关标准(ANSI C、POSIX、SVID、XPG) 233 D.1.2 函数库和系统调用 234 D.1.3 在线文档(man、info、HOWTO) 235 D.1.4 C语言编程风格 237 D.2 Linux上的C/C++编译器和调试器 238 D.2.1 运行gcc/egcs 238 D.2.2 gcc/egcs的主要选项 240 D.2.3 gdb简介 240 D.2.4 gdb的常用命令 241 D.2.5 gdb使用示例 242 D.3 GNU make和makefile 243 D.3.1 GNU make 243 D.3.2 makefile的基本结构 243 D.3.3 makefile的变量 244 D.3.4 GNU make的主要预定义变量 245 D.3.5 GNU make的隐含规则 245 D.3.6 运行make 246
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值