技术教育社区
www.teccses.org

Linux操作系统-基础.原理与应用-(第2版)

封面

作者:张玲

页数:384

出版社:清华大学出版社

出版日期:2019

ISBN:9787302494072

电子书格式:pdf/epub/txt

内容简介

本书以理论结合实践,注重应用为原则,全面、系统地讲述操作系统的基本原理,并将其与Linux的实现和应用技术紧密结合。全书内容分为3部分:第1部分为基础篇,包括Linux系统概述、Linux系统的操作基础、vi文本编辑器的使用以及Linux C编程基础;第2部分为原理篇,介绍操作系统的基本原理和Linux内核实现技术,包括进程管理、存储管理、文件管理、设备管理和操作系统接口;第3部分为应用篇,包括Shell程序设计、Linux系统管理和网络与通信应用。

本书特色

本书以理论结合实践,注重应用为原则,全面、系统地讲述操作系统的基本原理,并将其与Linux的实现和应用技术紧密结合。全书内容分为3部分:第1部分为基础篇,包括Linux系统概述、Linux系统的操作基础、vi文本编辑器的使用以及Linux C编程基础;第2部分为原理篇,介绍操作系统的基本原理和Linux内核实现技术,包括进程管理、存储管理、文件管理、设备管理和操作系统接口;第3部分为应用篇,包括Shell程序设计、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.3 Linux操作系统概述 11
1.3.1 Linux的发展背景与历史 11
1.3.2 Linux操作系统的特点 13
1.3.3 Linux操作系统的组成 14
1.3.4 Linux操作系统的版本 14
1.3.5 Linux操作系统的应用与发展 17
习题 17
第2章Linux操作基础/ 18
2.1 Linux基本操作 18
2.1.1 登录 18
2.1.2 修改口令 19
2.1.3 退出 20
2.1.4 系统的关闭与重启 20
2.2 Linux命令 20
2.2.1 命令的格式 21
2.2.2 命令的输入与执行 21
2.2.3 几个简单命令 22
2.2.4 联机帮助 25
2.3 Linux文件操作 25
2.3.1 Linux系统的文件 26
2.3.2 Linux系统的目录 32
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文本编辑器/ 63
3.1 vi文本编辑器概述 63
3.1.1 vi文本编辑器介绍 63
3.1.2 vi的工作模式 64
3.1.3 vi的基本工作流程 64
3.2 vi基本命令 65
3.2.1 光标定位与移动 66
3.2.2 文本输入与删除 67
3.2.3 文本修改与替换 68
3.2.4 文本复制、粘贴与选择 69
3.2.5 撤销与重做 71
3.3 vi常用末行命令 71
3.3.1 搜索与替换命令 71
3.3.2 文件操作与退出命令 73
3.3.3 其他常用命令 73
习题 74
第4章Linux C编程基础/ 75
4.1 Linux C编程方法概述 75
4.2 gcc编译基础 76
4.2.1 gcc编译过程 76
4.2.2 gcc命令 78
4.2.3 gcc应用举例 79
4.3 联机手册 82
习题 82
第2部分 原理篇
第5章进程管理/ 87
5.1 进程 87
5.1.1 程序的顺序执行与并发执行 87
5.1.2 进程的概念 89
5.1.3 进程控制块 91
5.1.4 Linux系统中的进程 92
5.2 进程的运行模式 95
5.2.1 操作系统的内核 95
5.2.2 中断与系统调用 97
5.2.3 进程的运行模式 98
5.3 进程的描述与组织 98
5.3.1 进程的资源 98
5.3.2 进程的描述结构 100
5.3.3 进程的组织 100
5.4 进程控制 101
5.4.1 进程控制的功能 101
5.4.2 Linux系统的进程控制 102
5.4.3 Shell命令的执行过程 109
5.5 进程调度 110
5.5.1 进程调度的基本原理 110
5.5.2 Linux系统的进程调度 112
5.5.3 Linux系统的进程切换 117
5.6 进程的互斥与同步 120
5.6.1 进程间的制约关系 120
5.6.2 信号量同步机制 121
5.6.3 Linux的信号量机制 123
5.6.4 死锁问题 124
5.7 进程通信 125
5.7.1 进程通信的方式 126
5.7.2 Linux信号通信原理 127
5.7.3 Linux管道通信原理 132
5.8 线程 132
5.8.1 线程的概念 132
5.8.2 线程与进程的比较 133
5.8.3 内核级线程与用户级线程 133
5.8.4 Linux系统的线程 134
习题 135
第6章存储管理/ 137
6.1 存储管理概述 137
6.1.1 内存的分配与回收 137
6.1.2 存储地址变换 137
6.1.3 内存的保护 140
6.1.4 内存的扩充 140
6.2 存储管理方案 141
6.2.1 段式存储管理 141
6.2.2 页式存储管理 143
6.3 虚拟存储管理 146
6.3.1 虚拟存储技术 146
6.3.2 页式虚拟存储器原理 147
6.4 Linux的存储管理 150
6.4.1 Linux的内存访问机制 150
6.4.2 进程地址空间的管理 154
6.4.3 内存空间的管理 159
6.4.4 页面的交换 162
习题 165
第7章文件管理/ 166
7.1 文件管理技术 166
7.1.1 文件与文件系统 166
7.1.2 文件的逻辑结构与存取方式 168
7.1.3 文件的物理结构与存储方式 169
7.1.4 文件的共享与保护 173
7.1.5 文件存储空间的管理 173
7.2 Linux文件系统概述 174
7.2.1 Linux文件系统的特点 174
7.2.2 Linux文件系统的结构 175
7.3 Ext文件系统 177
7.3.1 Ext文件的结构 177
7.3.2 Ext文件系统的磁盘布局 183
7.3.3 Ext文件存储分配策略 187
7.4 虚拟文件系统 188
7.4.1 VFS的对象 188
7.4.2 VFS对象的关联结构 192
7.4.3 VFS文件与进程的接口 192
7.4.4 VFS文件与缓存的接口 194
7.4.5 文件系统的注册与挂装 195
7.4.6 文件的操作 196
习题 198
第8章设备管理/ 199
8.1 设备管理概述 199
8.1.1 设备管理的功能 199
8.1.2 设备的分类 200
8.1.3 设备与系统的接口 200
8.1.4 I/O系统的硬件结构 203
8.1.5 I/O系统的软件结构 204
8.2 设备管理的相关技术 205
8.2.1 中断技术 205
8.2.2 缓冲与缓存技术 207
8.2.3 DMA技术 209
8.3 I/O控制方式 210
8.3.1 程序控制I/O方式 211
8.3.2 中断I/O方式 211
8.3.3 DMA方式 212
8.3.4 通道方式 212
8.4 设备的分配与调度 213
8.4.1 设备分配的方法 213
8.4.2 虚拟设备技术 214
8.5 设备的驱动 215
8.5.1 设备的驱动方式 215
8.5.2 驱动程序与中断处理程序 215
8.6 Linux设备管理 216
8.6.1 Linux设备管理综述 216
8.6.2 Linux I/O系统的软件结构 218
8.6.3 Linux的设备管理机制 219
8.6.4 字符设备的管理与驱动 221
8.6.5 块设备的管理与驱动 222
8.6.6 文件的块I/O操作 225
8.6.7 Linux的中断处理 229
习题 233
第9章操作系统接口/ 234
9.1 操作系统接口概述 234
9.1.1 作业与作业调度 234
9.1.2 操作系统的接口 235
9.1.3 Linux系统的接口 236
9.2 Shell命令接口 236
9.2.1 Shell界面的组成 236
9.2.2 Shell的功能 236
9.2.3 Shell的版本 237
9.2.4 Shell的工作流程 238
9.3 Linux图形用户界面 239
9.3.1 X Window系统概述 239
9.3.2 X系统的体系结构 240
9.3.3 X图形界面的组成 242
9.3.4 新一代图形系统 246
9.3.5 Linux桌面系统简介 248
9.4 Linux系统调用接口 252
9.4.1 系统调用接口概述 252
9.4.2 系统调用接口的组成 253
9.4.3 系统调用的分类 254
9.4.4 系统调用的执行过程 255
习题 257
第3部分 应用篇
第10章Shell程序设计/ 261
10.1 Shell语言概述 261
10.1.1 Shell语言的特点 261
10.1.2 Shell程序 261
10.1.3 Shell程序的建立与执行 262
10.2 Shell特殊字符 263
10.2.1 通配符 263
10.2.2 输入输出重定向与管道符 264
10.2.3 命令执行控制符 266
10.2.4 命令组合符 267
10.2.5 命令替换符 267
10.2.6 其他元字符 268
10.2.7 元字符的引用 268
10.3 Shell变量 269
10.3.1 变量的定义与使用 269
10.3.2 变量的作用域 271
10.3.3 变量的分类 272
10.3.4 环境变量 273
10.3.5 特殊变量 275
10.4 Shell表达式 279
10.4.1 数字运算表达式 279
10.4.2 逻辑测试表达式 281
10.5 Shell控制结构 284
10.5.1 条件与条件命令 284
10.5.2 分支控制命令 284
10.5.3 循环控制命令 286
10.5.4 退出循环命令 288
10.5.5 退出命令 289
10.6 Shell程序综合举例 290
习题 293
第11章Linux系统管理/ 295
11.1 系统管理概述 295
11.1.1 系统管理工作的内容 295
11.1.2 系统管理工具 295
11.1.3 root的权威性与危险性 296
11.2 启动与关闭系统 296
11.2.1 Linux系统的引导方式 296
11.2.2 Linux系统的初始化机制 297
11.2.3 系统的启动与关闭操作 300
11.3 用户与用户组管理 301
11.3.1 用户与用户组 301
11.3.2 用户管理 303
11.3.3 用户组管理 307
11.3.4 用户权限管理 307
11.4 文件系统维护 309
11.4.1 文件系统的目录结构 309
11.4.2 文件存储设备及命名规则 311
11.4.3 建立文件系统空间 314
11.4.4 建立文件系统 316
11.4.5 挂装与拆卸文件系统 316
11.4.6 修复文件系统 319
11.5 系统备份 319
11.5.1 备份策略 320
11.5.2 备份命令 320
11.6 系统监控 323
11.6.1 监视用户的登录 323
11.6.2 监控进程的运行 324
11.6.3 监视内存的使用 329
11.6.4 监视文件系统的使用 329
11.7 软件安装 331
11.7.1 软件的打包与安装 331
11.7.2 RPM软件包管理工具 332
11.7.3 DNF软件包管理工具 335
习题 337
第12章网络与通信应用/ 338
12.1 TCP/IP网络相关概念 338
12.1.1 TCP/IP协议概述 338
12.1.2 IP地址与域名 339
12.1.3 协议端口 340
12.1.4 客户/服务器软件模型 341
12.2 Linux网络应用技术 342
12.2.1 网络应用软件概述 342
12.2.2 网络探询 343
12.2.3 DNS查询 344
12.2.4 远程执行命令 344
12.2.5 文件传输 346
12.2.6 电子邮件 347
习题 350
附录ALinux系统的安装/ 351
A.1 安装准备 351
A.1.1 获得安装映像 351
A.1.2 确定安装方式 352
A.2 在虚拟机中安装Linux系统 352
A.2.1 虚拟机技术简介 352
A.2.2 安装虚拟机软件 353
A.2.3 创建虚拟机 353
A.2.4 在虚拟机中安装Linux 358
A.3 在硬盘中安装Linux系统 363
A.3.1 制作安装引导盘 363
A.3.2 安装前操作 364
A.3.3 安装过程 365
A.3.4 设置系统引导 366
附录BLinux C开发工具简介/ 369
B.1 Linux C开发环境 369
B.2 make工具介绍 371
B.2.1 makefile文件 372
B.2.2 make命令 374
B.3 调试工具介绍 376
B.3.1 gdb命令 376
B.3.2 gdb的使用 377
参考文献/ 385

节选

第5章
进 程 管 理 在多道程序系统中,同时存在多个程序在运行。它们共享系统的资源,轮流使用CPU,彼此之间相互制约和依赖,表现出复杂的行为特性。进程是为了刻画并发程序的执行过程而引入的概念,进程管理就是对并发程序的运行过程的管理,也就是对CPU的管理。 进程管理的功能是跟踪和控制所有进程的活动,为它们分配和调度CPU,协调进程的运行步调。进程管理的目标是最大限度地发挥CPU的处理能力,提高进程的运行效率。
5.1 进程 进程是现代操作系统的核心概念,它用来描述程序的执行过程,是实现多任务操作系统的基础。操作系统的其他所有内容都是围绕着进程展开的。因此,正确地理解和认识进程是理解操作系统原理的基础和关键。
5.1.1 程序的顺序执行与并发执行
1. 程序的顺序执行 如果程序的各操作步骤之间是依序执行的,程序与程序之间是串行执行的,这种执行程序的方式就称为顺序执行。顺序执行是单道程序系统中的程序的运行方式。 程序的顺序执行具有如下特点: (1)顺序性。CPU严格按照程序规定的顺序执行,仅当一个操作结束后,下一个操作才能开始执行。多个程序要运行时,仅当一个程序全部执行结束后另一个程序才能 开始。 (2)封闭性。程序在封闭的环境中运行,即程序运行时独占全部系统资源,只有程序本身才能改变程序的运行环境。因而程序的执行过程不受外界因素的影响,结果只取决于程序自身。 (3)可再现性。程序执行的结果与运行的时间和速度无关,结果总是可再现的,即无论何时重复执行该程序都会得到同样的结果。 总的说来,这种执行程序的方式简单,且便于调试。但由于顺序程序在运行时独占全部系统资源,因而系统资源利用率很低。DOS程序就是采用顺序方式执行的。
2. 程序的并发执行 单道程序、封闭式运行是早期操作系统的标志,而多道程序并发运行是现代操作系统的基本特征。由于同时有多个程序在系统中运行,使系统资源得到充分的利用,系统效率大大提高。 程序的并发执行是指若干程序或程序段同时运行。它们的执行在时间上是重叠的。程序的并发执行有以下特点: (1)间断性。并发程序之间因竞争资源而相互制约,导致程序运行过程的间断。例如,在单CPU的系统中,多个程序需要轮流占用CPU运行,未获得CPU的程序就必须等待。 (2)没有封闭性。当多个程序共享系统资源时,一个程序的运行受其他程序的影响,其运行过程和结果不完全由自身决定。例如,一个程序计划在某一时刻执行一个操作,但很可能在那个时刻到来时它没有获得CPU,因而也就无法完成该操作。 (3)不可再现性。由于没有了封闭性,并发程序的执行结果与执行的时机以及执行的速度有关,结果往往不可再现。 可以看出,并发执行程序虽然可以提高系统的资源利用率和吞吐量,但程序的行为变得复杂和不确定。这使程序难以调试,若处理不当还会带来许多潜在问题。
3. 并发执行的潜在问题 程序在并发执行时会导致执行结果的不可再现性,这是多道程序系统必须解决的问题。我们用下面的例子来说明并发执行过程对运行结果的影响,从而了解产生问题的 原因。 设某停车场使用程序控制电子公告牌来显示空闲车位数。空闲车位数用一个计数器C记录。车辆入库时执行程序A,车辆出库时执行程序B,它们都要更新同一个计数器C。程序A和程序B的片段如图5-1所示。 图5-1 两个程序并发运行,访问计数器C 更新计数器C的操作对应的机器语言有3个步骤:读取内存C单元的数据到一个寄存器中,修改寄存器的数值,然后再将其写回C单元中。 由于车辆出入库的时间是随机的,程序A与程序B的运行时间也就是不确定的。当出入库同时发生时,将使两个程序在系统中并发运行。它们各运行一次后C计数器的值应保持不变。但结果可能不是如此。 如果两个程序的运行时序如图5-2(a)所示,即一个程序对C进行更新的操作是在另一个程序的更新操作全部完成之后才开始,则C被正确地更新了。如果两个程序的运行时序如图5-2(b)所示穿插地进行,即当一个程序正在更新C,更新操作还未完成时,CPU发生了切换,另一个程序被调度运行,并且也对C进行更新。在这种情况下会导致错误的结果。 图5-2 并发程序的执行时序影响执行结果 可以看出,导致C更新错误的原因是两个程序交叉地执行了更新C的操作。概括地说,当多个程序在访问共享资源时的操作是交叉执行时,则会发生对资源使用上的错误。
5.1.2 进程的概念 进程的概念最早出现在20世纪60年代中期,此时操作系统进入多道程序设计时代。多道程序并发显著地提高了系统的效率,但同时也使程序的执行过程变得复杂与不确定。为了更好地研究、描述和控制并发程序的执行过程,操作系统引入了进程的概念。进程概念对于理解操作系统的并发性有着极为重要的意义。
1. 进程 进程(process)是一个可并发执行的程序在一个数据集上的一次运行。简单地说,进程就是程序的一次运行过程。 进程与程序的概念既相互关联又相互区别。程序是进程的一个组成部分,是进程的执行文本,而进程是程序的执行过程。两者的关系可以比喻为电影与胶片的关系:胶片是静态的,是电影的放映素材。而电影是动态的,一场电影就是胶片在放映机上的一次“运行”。对进程而言,程序是静态的指令集合,可以永久存在;而进程是动态的过程实体,动态地产生、发展和消失。 此外,进程与程序之间也不是一一对应的关系,表现在以下两点: (1)一个进程可以顺序执行多个程序,如同一场电影可以连续播放多部胶片一样。 (2)一个程序可以对应多个进程,就像一本胶片可以放映多场电影一样。程序的每次运行就对应了一个不同的进程。更重要的是,一个程序还可以同时对应多个进程。例如系统中只有一个vi程序,但它可以被多个用户同时执行,编辑各自的文件。每个用户的编辑过程都是一个不同的进程。
2. 进程的特性 进程与程序的不同主要体现在进程有一些程序所没有的特性。要真正理解进程,首先应了解它的基本性质。进程具有以下几个基本特性: (1)动态性。进程由“创建”而产生,由“撤销”而消亡,因“调度”而运行,因“等待”而停顿。进程从创建到消失的全过程称为进程的生命周期。 (2)并发性。在同一时间段内有多个进程在系统中活动。它们宏观上是在并发运行,而微观上是在交替运行。 (3)独立性。进程是可以独立运行的基本单位,是操作系统分配资源和调度管理的基本对象。因此,每个进程都独立地拥有各种必要的资源,独立地占有CPU运行。 (4)异步性。每个进程都独立地执行,各自按照不可预知的速度向前推进。进程之间的协调运行由操作系统负责。
3. 进程的基本状态 在多道系统中,进程的个数总是多于CPU的个数,因此它们需要轮流地占用CPU。从宏观上看,所有进程同时都在向前推进;而在微观上,这些进程是在走走停停之间完成整个运行过程的。为了刻画一个进程在各个时期的动态行为特征,通常采用状态模型。 进程有3个基本的状态: (1)就绪态。进程已经分配到了除CPU之外的所有资源,这时的进程状态称为就绪状态。处于就绪态的进程,一旦获得CPU便可立即执行。系统中通常会有多个进程处于就绪态,它们排成一个就绪队列。 (2)运行态。进程已经获得CPU,正在运行,这时的进程状态称为运行态。在单CPU系统中,任何时刻只能有一个进程处于运行态。 (3)等待态。进程因某种资源不能满足,或希望的某事件尚未发生而暂停执行时,则称它处于等待态。系统中常常会有多个进程处于等待态,它们按等待的事件分类,排成多个等待队列。
4. 进程状态的转换 进程诞生之初处于就绪态,在其后的生存期间内不断地从一个状态转换到另一个状态,最后在运行态结束。图5-3所示是一个进程的状态转换图。 图5-3 进程的状态转换图 引起状态转换的原因如下:
最 运行态→等待态:正在执行的进程因为等待某事件而无法执行下去。例如,进程申请某种资源,而该资源恰好被其他进程占用,则该进程将交出CPU,进入等待状态。
最 等待态→就绪态:处于等待状态的进程,当其所申请的资源得到满足时,则系统将资源分配给它,并将其状态变为就绪态。
最 运行态→就绪态:正在执行的进程的时间片用完了,或者有更高优先级的进程到来,系统会暂停该进程的运行,使其进入就绪态,然后调度其他进程运行。
最 就绪态→运行态:处于就绪态的进程,当被进程调度程序选中后,即进入CPU运行。此时该进程的状态变为运行态。
5.1.3 进程控制块 进程由程序、数据和进程控制块3个基本部分组成。程序是进程执行的可执行代码,数据是进程所处理的对象,进程控制块用于记录有关进程的各种信息。它们存在于内存,其内容会随着执行过程的进展而不断变化。在某个时刻的进程的执行内容(指代码、数据和堆栈)被称为进程映像(process image)。进程映像可以看作是进程的剧本,决定了进程推进的路线和行为。进程控制块则是进程的档案。系统中每个进程都是唯一的。即使两个进程执行的是同一映像,它们也都有各自的进程控制块,因此是不同的进程。 进程控制块(Process Control Block,PCB)是为管理进程而设置的一个数据结构,用于记录进程的相关信息。当创建一个进程时,系统为它生成PCB;进程完成后,撤销它的PCB。因此,PCB是进程的代表,PCB存在则进程就存在,PCB消失则进程也就结束了。在进程的生存期中,系统通过PCB来感知进程,了解它的活动情况,通过它对进程实施控制和调度。因此,PCB是操作系统中最重要的数据结构之一。 PCB记录了有关进程的所有信息,主要包括以下4方面的内容。 (1)进程描述信息。 进程描述信息用于记录一个进程的标识信息和身份特征,如家族关系和归属关系等。通过这些信息可以识别该进程,了解进程的权限,以及确定这个进程与其他进程之间的关系。 系统为每个进程分配了一个唯一的整数作为进程标识号PID,这是最重要的标识信息。系统通过PID来标识各个进程。 (2)进程控制与调度信息。 进程的运行需要由系统进行控制和调度。进程控制块记录了进程的当前状态、调度策略、优先级、时间片等信息。系统依据这些信息实施进程的控制与调度。 (3)资源信息。 进程的运行需要占用一些系统资源,必要的资源包括进程的地址空间、要访问的文件和设备以及要处理的信号等。进程是系统分配资源的基本单位。系统将分配给进程的资源信息记录在进程的PCB中。通过这些信息,进程就可以访问分配到的各种资源。 (4)现场信息。 进程现场也称为进程上下文(process context),包括CPU的各个寄存器的值。这些值刻画了进程的运行状态和环境。退出CPU的进程必须保存好这些现场信息,以便在下次被调度时继续运行。当进程被重新调度运行时,系统用它的PCB中的现场信息恢复CPU现场。现场一旦恢复,进程就可以从上次运行的断点处继续执行下去了。 5.1.4 Linux系统中的进程 在Linux系统中,进程也称为任务(task),两者的概念是一致的。
1.Linux进程的状态 Linux系统的进程有5种基本状态,即可执行态(运行态与就绪态)、可中断睡眠态、不可中断睡眠态、暂停态和僵死态。状态转换图如图5-4所示。 图5-4 Linux系统的进程状态转换图 Linux进程的基本状态定义如下: (1)可执行态(runnable):可执行态包含上述状态图中的运行和就绪两种状态。处于可执行态的进程均已具备运行条件。它们或正在运行,或准备运行。 (2)睡眠态(sleeping):即等待态。此时进程正在等待某个事件或某个资源。睡眠态又细分为可中断的(interruptable)和不可中断的(uninterruptable)两种。它们的区别在于,在睡眠过程中,处于不可中断状态的进程会忽略信号,而处于可中断状态的进程如果收到信号会被唤醒而进入可执行态,待处理完信号后再次进入睡眠态。 (3)暂停态(stopped或traced):处于暂停态的进程是由运行态转换而来的,等待某种特殊处理。当进程收到一个暂停信号时则进入暂停态,等待恢复运行的信号。 (4)僵死态(zombie):进程运行结束或因某些原因被终止时,它将释放除PCB外的所有资源。这种占有PCB但已经无法运行的进程就处于僵死态。
2.Linux进程的状态转换过程 Linux进程的状态转换过程如下。 新创建的进程处于可执行的就绪态,等待调度执行。 处于可执行态的进程在就绪态和运行态之间轮回。就绪态的进程一旦被调度程序选中,就进入运行状态。当进程的时间片耗尽或有更高优先级的进程就绪时,调度程序将选择新的进程来抢占CPU运行。被抢占的进程将交出CPU,转入就绪态等待下一次的调度。处于此轮回的进程在运行态与就绪态之间不断地高速切换,可谓瞬息万变。因此,对观察者(系统与用户)来说,将此轮回概括为一个相对稳定的可执行态才有意义。 运行态、睡眠态和就绪态形成一个回路。处于运行态的进程,有时需要等待某种资源或某个事件的发生,这时已无法占有CPU继续运行,于是它退出CPU,转入睡眠态。当该进程等待的事件发生后,进程被唤醒,进入就绪态。 运行态、暂停态和就绪态也构成一个回路。当处于运行态的进程接收到暂停执行信号时,它就放弃CPU,进入暂停态。当暂停的进程获得恢复执行信号时,就转入就绪态。 处于运行态的进程执行结束后进入僵死态。待父进程(即创建此进程的进程)对其进行相应处理后撤销它的PCB。此时,这个进程就完成了它的使命,从僵死走向彻底 消失。
3.Linux的进程描述符 Linux系统用task_struct结构来记录进程的信息,称为进程描述符,也就是通常所说的PCB。系统中每创建一个新的进程,就给它建立一个task_struct结构,并填入进程的控制信息。task_struct中的字段很多,主要包括以下内容:
最 进程标识号(pid):标识该进程的一个整数。
最 归属关系(uid、gid):进程的属主和属组的标识号。
最 家族关系(parent、children、sibling):关联父进程、子进程及兄弟进程的链接 指针。
最 链接指针(tasks、run_list):将进程链入进程链表和可执行队列的指针。
最 状态(state):进程当前的状态。
最 调度信息(policy、prio、time_slice):调度使用的调度策略、优先级和时间片等。
最 记时信息(start_time、utime、stime):进程建立的时间以及执行用户代码与系统代码的累计时间。
最 信号信息(signal、sighand):进程收到的信号以及使用的信号处理程序。
最 退出码(exit_code):进程运行结束后的退出代码,供父进程查询用。
最 文件系统信息(fs、files):包括文件系统及打开文件的信息。
最 地址空间信息(mm):进程使用的地址空间。
最 硬件现场信息(thread):进程切换时保存的CPU寄存器的内容。
最 运行信息(thread_info):有关进程运行环境、状况的CPU相关信息

下载地址

立即下载

(解压密码:www.teccses.org)

Article Title:《Linux操作系统-基础.原理与应用-(第2版)》
Article link:https://www.teccses.org/1048466.html