没有合适的资源?快使用搜索试试~ 我知道了~
3Process Management.docx
需积分: 0 2 下载量 191 浏览量
2020-12-08
21:37:37
上传
评论
收藏 736KB DOCX 举报
温馨提示
试读
18页
This chapter introduces the concept of the process, one of the fundamental abstractions in Unix operating systems. It defines the process, as well as related concepts such as threads, and then discusses how the Linux kernel manages each process: how they are enumerated within the kernel
资源推荐
资源详情
资源评论
!"
# " $
%
"!
本章介绍了进程的概念,它是 操作系统中的基本抽象之一。 它定义了进程以及相关的概念(例如线程),然
后讨论了 ! 内核如何管理每个进程:如何在内核中枚举它们,如何创建它们以及它们最终如何死亡。 因为运行
用户应用程序是我们拥有操作系统的原因,所以进程管理是任何操作系统内核(包括 !)的关键部分。
&'() %
('*)
"
%+
%",
进程是执行过程中的程序(目标代码存储在某些介质上)。 但是,进程不仅仅是执行程序的代码(在 中通常
称为文本部分)。 它们还包括一组资源,例如打开文件和未决信号,内部内核数据,处理器状态,具有一个或多
个内存映射的内存地址空间,一个或多个执行线程以及包含全局变量的数据部分。 实际上,进程是运行程序代码
的最终结果。 内核需要高效,透明地管理所有这些细节。
*(% -
. " " %
%
/ / & ! .
#+ !(
"
执行线程(通常简化为线程)是进程内活动的对象。 每个线程都包括一个唯一的程序计数器,进程堆栈和一组处
理器寄存器。 内核调度单个线程,而不是进程。 在传统的 系统中,每个进程都包含一个线程。 但是,在现
代系统中,多线程程序(包含多个线程的程序)是常见的。 正如您将在后面看到的那样, ! 具有唯一的线程实
现:它不区分线程和进程。 对于 ! 来说,线程只是一种特殊的进程。
0% %1#%1%
%%1
23456%17
7%
28946%
% %1
在现代操作系统上,进程提供两种虚拟化:虚拟处理器和虚拟内存。 尽管可能在数百个其他进程之间共享处理器
但虚拟处理器给进程带来了一种幻象:它独自垄断了系统。 第 3 章“流程调度”讨论了这种虚拟化。 虚拟内存使进
程可以分配和管理内存,就好像它独自拥有系统中的所有内存一样。 第 89 章“内存管理”中介绍了虚拟内存。 有趣
的是,请注意线程共享虚拟内存抽象,而每个线程都接收自己的虚拟处理器。
&:%
%
程序本身不是一个进程; 进程是一个活动程序和相关资源。 实际上,可以存在两个或多个执行同一程序的进程。
实际上,可以存在两个或更多个共享各种资源的进程,例如打开的文件或地址空间。
& !"')
"')
# "')
8
"')" #
毫无疑问,一个进程在创建时就开始了它的生命。 在 ! 中,这是通过 "()系统调用发生的,该调用通过复
制现有进程来创建一个新进程。 调用 "()的进程是父进程,而新进程是子进程。 父进程恢复执行,子进程在
同一位置开始执行:"()的调用返回。 "()系统调用两次从内核返回:一次是在父进程中,另一次是在子
进程中。
0**" +')
! " "')
%')
通常,在 " 之后立即希望执行新的不同程序。 ()系列函数调用创建一个新的地址空间,并将新程序加载
到其中。 在当代的 ! 内核中,"()实际上是通过 ()系统调用实现的,这将在下一部分中进行讨论。
;%')&
.% 3')8
< 1
') ')
最后,程序通过 ()系统调用退出。 此函数终止进程并释放其所有资源。 父进程可以通过 3()8 系统调
用来查询终止子进程的状态,这使进程可以等待特定进程的终止。 进程退出时,它将被置于特殊的僵尸状态,该
状态表示终止的进程,直到父进程调用 ()或 ()为止。
8 " 3')!%2% ') ')
') 3')& +
内核实现了 3()系统调用。 ! 系统通过 2 库通常提供 (), (), ()和
3()函数。 所有这些函数都返回有关已终止进程的状态,尽管其语义略有不同。
=
&"!"""
"">%
进程的另一个名称是任务。 ! 内核在内部将进程称为任务。 在本书中,我可以互换使用术语,尽管当我说任
务的时候,从内核的角度来看,我通常指的是进程。
?"5
"""9-"
"@ ABC
内核将进程列表存储在称为任务列表的环形双向链接列表中。9 任务列表中的每个元素都是 "@ 类型
的进程描述符,在ABC中定义。 进程描述符包含有关特定进程的所有信息。
95"$!"
!"有关操作系统设计的某些文本将此列表称为任务数组。 由于 ! 实
现是一个链表而不是静态数组,因此在 ! 中将其称为任务列表。
"@%8D"9E1 %.
"
/ >
>';8)
"@ 是一个相对较大的数据结构,在 9 位计算机上约为 8DF$。 但是,考虑到结构包含内核拥有并需要的
有关进程的所有信息,此尺寸非常小。 进程描述符包含描述执行程序的数据E打开文件,进程的地址空间,未决信
号,进程的状态等(请参见图 8)。
;8"
9
&?
"@%%('289)
9G""@ ""
HG%"
< %
@ %I"'"
)"'" )5;9
通过 分配器分配 "@ 结构,以提供对象重用和缓存着色(请参见第 89 章)。 在 9G 内核系列之前,
"@ 存储在每个进程的内核堆栈的末尾。 这允许具有少量寄存器(例如 HG)的体系结构通过堆栈指
针计算过程描述符的位置,而无需使用额外的寄存器来存储位置。 现在,通过 分配器动态创建了进程描述符,
创建了一个新结构 @,该结构再次位于堆栈的底部(对于向下生长的堆栈)和堆栈的顶部(对于向
上生长的堆栈) ) 见图 9。
JE @ "
+%寄存器受限的体系结构不是创建 @
的唯一原因。 新结构还使计算汇编代码中使用的值的偏移变得相当容易。
;9""
@HGAB@C 在 HG 上的AB@C中将 @
结构定义为
-">@""
">"@
每个任务的 @ 结构都分配在其堆栈的末尾。 结构的 " 元素是指向任务实际 "@ 的指针。
5?
.%??%
.3 @ $" !
% %%9DGH')%
'ABC"%
系统通过唯一的进程识别值或 ? 识别进程。 ? 是由不透明类型 3@ 表示的数值,通常为 。 由于与早期的
和 ! 版本具有向后兼容性,因此默认最大值仅为 9DGH(较短的 值),尽管可以选择将其最大值增加
3
剩余17页未读,继续阅读
资源评论
mounter625
- 粉丝: 1040
- 资源: 85
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- oracle 触发器语法及 for each row 详细说明
- 微信小程序-豆瓣图书源码
- Fragment - Unknow animation name objectAnimator 问题解决及源码分析
- 词向量-中文文本相似度计算-采用text2vec词向量工具进行计算对比.zip
- 521293804316625base(1).apk
- ARP IP地址分类及特殊IP
- 【MySQL补丁】vcredist-x64xz MySQL必备插件
- 基于SG3525芯片PWM控制推挽隔离DCDC电源模块AD09设计硬件(原理图+PCB)工程文件.zip
- Word_20240428_092324.docx
- cloudcc_v1.1.10-release_sign.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功