进程管理及进程间通讯.ppt
《进程管理及进程间通讯.ppt》由会员分享,可在线阅读,更多相关《进程管理及进程间通讯.ppt(131页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 进程管理及进程间通讯n n本章介绍了本章介绍了LinuxLinux进程的管理、调度以及进程的管理、调度以及LinuxLinux系统支持的进程间通讯机制,并对某些通信手段系统支持的进程间通讯机制,并对某些通信手段的内部实现机制进行了分析。本章还讨论了的内部实现机制进行了分析。本章还讨论了LinuxLinux核心的一些基本任务和机制,将核心的一些基本任务和机制,将LinuxLinux内内核中为使内核其他部分能有效工作的用于同步的核中为使内核其他部分能有效工作的用于同步的几种机制集中起来分析,强调了它们之间在实现几种机制集中起来分析,强调了它们之间在实现和使用上的不同。和使用上的不同。5.1
2、 Linux 进程和线程 一个大型的应用系统,往往需要众多进程协作。进程 一个大型的应用系统,往往需要众多进程协作。进程是操作系统理论的核心与基础,许多概念都和进程相关。是操作系统理论的核心与基础,许多概念都和进程相关。进程的标准定义是:进程是可并发执行的程序在一个数据 进程的标准定义是:进程是可并发执行的程序在一个数据集合上的运行过程。换句话说,在自身的虚拟地址空间运 集合上的运行过程。换句话说,在自身的虚拟地址空间运行的一个单独的程序称作一个进程。在 行的一个单独的程序称作一个进程。在Linux Linux系统中,当 系统中,当一个程序开始执行后,在开始执行到执行完毕退出这段时 一个程序开
3、始执行后,在开始执行到执行完毕退出这段时间里,它在内存中的部分就被称作一个进程。进程与程序 间里,它在内存中的部分就被称作一个进程。进程与程序是有区别的,程序只是一些预先设定好的代码和数据,进 是有区别的,程序只是一些预先设定好的代码和数据,进程是一个随时都可能发生变化的、动态的、使用系统运行 程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。程序是静态的,而进程是动态的。一个程序 资源的程序。程序是静态的,而进程是动态的。一个程序可以启动多个进程。和进程联系在一起的不仅有进程的指 可以启动多个进程。和进程联系在一起的不仅有进程的指令和数据,而且还有当前的指令指针、所有的 令和数据
4、,而且还有当前的指令指针、所有的CPU CPU寄存 寄存器以及用来保存临时数据的堆栈等,所有这些都随着程序 器以及用来保存临时数据的堆栈等,所有这些都随着程序指令的执行在变化。指令的执行在变化。Linux Linux操作系统包括三种不同类型的进程,每种类型的进程 操作系统包括三种不同类型的进程,每种类型的进程都有自己的特点和属性。都有自己的特点和属性。(1)(1)交互进程交互进程由由shellshell启动的进程。交互进程既启动的进程。交互进程既可以在前台运行,也可以在后台运行。可以在前台运行,也可以在后台运行。(2)(2)批处理进程批处理进程这种进程和终端没有联系,是这种进程和终端没有联系,
5、是一个进程序列。一个进程序列。(3)(3)监控进程(也称守护进程)监控进程(也称守护进程)LinuxLinux系统启动系统启动时启动的进程,并在后台运行。时启动的进程,并在后台运行。上述三种进程各有各的作用,使用场合也有所不同。上述三种进程各有各的作用,使用场合也有所不同。5.1.1 Linux 进程管理的数据结构LinuxLinux是一个多任务的操作系统,在同一个是一个多任务的操作系统,在同一个时间内,可以有多个进程同时执行。由于单时间内,可以有多个进程同时执行。由于单CPUCPU计算机实际上在一个时间片断内只能执行一条指计算机实际上在一个时间片断内只能执行一条指令,令,LinuxLinux
6、使用了一种称为使用了一种称为“进程调度(进程调度(processprocessschedulingscheduling)”的机制。首先为每个进程指派一的机制。首先为每个进程指派一定的运行时间,然后依照某种规则,从众多进程定的运行时间,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,或因某种原因暂停,LinuxLinux就会重新进行调度,就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的挑选下一个进程投入运行。因为每个
7、进程占用的时间片都很短,在用户的角度看,就好像多个进时间片都很短,在用户的角度看,就好像多个进程同时运行一样。程同时运行一样。进程在运行过程中,要使用许多计算机资源,例如 进程在运行过程中,要使用许多计算机资源,例如 CPU CPU、内存、文件等。同时可能会有多个进程使用同一个、内存、文件等。同时可能会有多个进程使用同一个资源,因此操作系统要跟踪所有的进程及其所使用的系统 资源,因此操作系统要跟踪所有的进程及其所使用的系统资源,以便能够管理进程和资源。资源,以便能够管理进程和资源。在 在Linux Linux中,每个进程在创建时都会被分配一个数据 中,每个进程在创建时都会被分配一个数据结构,称
8、为进程控制块(结构,称为进程控制块(ProcessControlBlock ProcessControlBlock,PCB PCB)。)。PCB PCB中包含了很多重要的信息,供系统调度和进 中包含了很多重要的信息,供系统调度和进程本身执行使用,其中最重要的是进程 程本身执行使用,其中最重要的是进程ID ID(processID processID,PID PID),进程),进程ID ID也被称作进程标识符,是一个非负的整 也被称作进程标识符,是一个非负的整数,在 数,在Linux Linux操作系统中唯一地标志一个进程。在最常使 操作系统中唯一地标志一个进程。在最常使用的 用的i386 i3
9、86架构(即 架构(即PC PC使用的架构)上,使用的架构)上,PID PID的变化范围是 的变化范围是一个非负整数 一个非负整数0-32767 0-32767,这也是所有可能取到的进程,这也是所有可能取到的进程ID ID。每个进程的进程 每个进程的进程ID ID各不相同。可使用 各不相同。可使用ps ps命令看看当前系 命令看看当前系统中有多少进程在运行。除标题外,每一行都代表一个进 统中有多少进程在运行。除标题外,每一行都代表一个进程。在各列中,程。在各列中,PID PID一列代表了各进程的进程 一列代表了各进程的进程ID ID,command command一列代表了进程的名称或在 一列
10、代表了进程的名称或在shell shell中调用的命令 中调用的命令行。行。Linux Linux中的每个进程有自己的虚拟地址空间,操作系 中的每个进程有自己的虚拟地址空间,操作系统的一个最重要的基本管理目的,就是避免进程之间的互 统的一个最重要的基本管理目的,就是避免进程之间的互相影响。但有时用户也希望能够利用两个或多个进程的功 相影响。但有时用户也希望能够利用两个或多个进程的功能完成同一任务,为此,能完成同一任务,为此,Linux Linux提供许多机制,利用这些 提供许多机制,利用这些机制,进程之间可以进行通讯并共同完成某项任务,这种 机制,进程之间可以进行通讯并共同完成某项任务,这种机
11、制称为 机制称为“进程间通讯(进程间通讯(Interprocess InterprocessCommunication,IPC Communication,IPC)”。信号和管道是常见的两种。信号和管道是常见的两种 IPC IPC机制,但 机制,但Linux Linux也提供其他 也提供其他IPC IPC机制。机制。一般来说,一般来说,Linux Linux下的进程包含以下几个关键要素:下的进程包含以下几个关键要素:有一段可执行程序;有专用的系统堆栈空间;内核中有它 有一段可执行程序;有专用的系统堆栈空间;内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,的控制块(进程控制块),描
12、述进程所占用的资源,这样,进程才能接受内核的调度;具有独立的存储空间。进程才能接受内核的调度;具有独立的存储空间。LinuxLinux内核利用一个数据结构内核利用一个数据结构task_structtask_struct来代表一个进程,代表进程的数据结构指针形成来代表一个进程,代表进程的数据结构指针形成了一个了一个tasktask数组(在数组(在LinuxLinux中,任务和进程是中,任务和进程是两个相同的术语),这种指针数组有时也成为指两个相同的术语),这种指针数组有时也成为指针向量。这个数组的大小默认为针向量。这个数组的大小默认为512512,表明在,表明在LinuxLinux系统中能够同时
13、运行的进程最多可有系统中能够同时运行的进程最多可有512512。当建立新进程的时候,当建立新进程的时候,LinuxLinux为新的进程分配一为新的进程分配一个个task_structtask_struct结构,然后将指针保存在结构,然后将指针保存在tasktask数组中。数组中。task_structtask_struct结构中包含了许多字段,结构中包含了许多字段,按照字段功能,可分成如下几类:按照字段功能,可分成如下几类:n n(1)(1)标识号。系统通过进程标识号唯一识别一个进程,但 标识号。系统通过进程标识号唯一识别一个进程,但进程标识号并不是进程对应的 进程标识号并不是进程对应的tas
14、k_struct task_struct结构指针在 结构指针在 task task数组中的索引号。另外,一个进程还有自己的用户 数组中的索引号。另外,一个进程还有自己的用户和组标识号,系统通过这两个标识号判断进程对文件或设 和组标识号,系统通过这两个标识号判断进程对文件或设备的访问权。备的访问权。n n(2)(2)状态信息。一个 状态信息。一个Linux Linux进程可有如下几种状态:运行、进程可有如下几种状态:运行、等待、停止和僵死。等待、停止和僵死。n n(3)(3)调度信息。调度程序利用该信息完成进程之间的切换。调度信息。调度程序利用该信息完成进程之间的切换。n n(4)(4)有关进程
15、间通讯的信息。系统利用这一信息实现进程 有关进程间通讯的信息。系统利用这一信息实现进程间的通讯。间的通讯。n n(5)(5)进程链信息。在 进程链信息。在Linux Linux系统中,除初始化进程之外,系统中,除初始化进程之外,任何一个进程都具有父进程。每个进程都是从父进程中 任何一个进程都具有父进程。每个进程都是从父进程中“克隆 克隆”出来的。进程链则包含进程的父进程指针、和该进 出来的。进程链则包含进程的父进程指针、和该进程具有相同父进程的兄弟进程指针以及进程的子进程指针。程具有相同父进程的兄弟进程指针以及进程的子进程指针。另外,另外,Linux Linux利用一个双向链表记录系统中所有的
16、进程,利用一个双向链表记录系统中所有的进程,这个双向链表的根就是 这个双向链表的根就是init init进程。利用这个链表中的信 进程。利用这个链表中的信息,内核可以很容易地找到某个进程。息,内核可以很容易地找到某个进程。n n(6)(6)时间和定时器。系统在这些字段中保存进程的建立时 时间和定时器。系统在这些字段中保存进程的建立时间,以及在其生命周期中所花费的 间,以及在其生命周期中所花费的CPU CPU时间,这两个时 时间,这两个时间均以 间均以jiffies jiffies为单位。该时间由两部分组成,一是进程 为单位。该时间由两部分组成,一是进程在用户模式下花费的时间,二是进程在系统模式
17、下花的时 在用户模式下花费的时间,二是进程在系统模式下花的时间。间。Linux Linux也支持和进程相关的定时器,应用程序可通过 也支持和进程相关的定时器,应用程序可通过系统调用建立定时器,当定时器到期,操作系统会向该进 系统调用建立定时器,当定时器到期,操作系统会向该进程发送 程发送sigalrm sigalrm信号。信号。n n(7)(7)文件系统信息。进程可以打开文件系统中的文件,系 文件系统信息。进程可以打开文件系统中的文件,系统需要对这些文件进行跟踪。系统使用这类字段记录进程 统需要对这些文件进行跟踪。系统使用这类字段记录进程所打开的文件描述符信息。另外,还包含指向虚拟文件系 所打
18、开的文件描述符信息。另外,还包含指向虚拟文件系统(统(VirtualFileSystems VirtualFileSystems,VFS VFS)两个索引节点的指针,)两个索引节点的指针,这两个索引节点分别是进程的主目录以及进程的当前目录。这两个索引节点分别是进程的主目录以及进程的当前目录。索引节点中有一个引用计数器,当有新的进程指向某个索 索引节点中有一个引用计数器,当有新的进程指向某个索引节点时,该索引节点的引用计数器会增加计数。未被引 引节点时,该索引节点的引用计数器会增加计数。未被引用的索引节点的引用计数为 用的索引节点的引用计数为0 0,因此,当包含在某个目录,因此,当包含在某个目录
19、中的文件正在运行时,就无法删除这一目录,因为这一目 中的文件正在运行时,就无法删除这一目录,因为这一目录的引用计数大于 录的引用计数大于0 0。n n(8)(8)和进程相关的上下文信息。如前所述,进程可被看成 和进程相关的上下文信息。如前所述,进程可被看成是系统状态的集合,随着进程的运行,这一集合发生变化。是系统状态的集合,随着进程的运行,这一集合发生变化。进程上下文就是用来保存系统状态的 进程上下文就是用来保存系统状态的task_struct task_struct字段。字段。当调度程序将某个进程从运行状态切换到暂停状态时,会 当调度程序将某个进程从运行状态切换到暂停状态时,会在上下文中保存
20、当前的进程运行环境,包括 在上下文中保存当前的进程运行环境,包括CPU CPU寄存器 寄存器的值以及堆栈信息;当调度程序再次选择该进程运行时,的值以及堆栈信息;当调度程序再次选择该进程运行时,则会从进程上下文信息中恢复进程的运行环境。则会从进程上下文信息中恢复进程的运行环境。5.1.2 标识符信息和所有的和所有的UnixUnix系统一样,系统一样,LinuxLinux使用用户使用用户标识符和组标识符判断用户对文件和目录的访问标识符和组标识符判断用户对文件和目录的访问许可。许可。LinuxLinux系统中的所有文件或目录均具有所系统中的所有文件或目录均具有所有者和许可属性,有者和许可属性,Lin
21、uxLinux据此判断某个用户对文据此判断某个用户对文件的访问权限。件的访问权限。对一个进程而言,系统在 对一个进程而言,系统在task_struct task_struct结构中记录 结构中记录如表 如表5.1 5.1所示的 所示的4 4对标识符。对标识符。uid uid 和 和 gid gid 运行 运行 进 进 程所代表的用 程所代表的用 户 户 之用 之用 户标识 户标识 号和 号和 组标识 组标识 号,号,通常就是 通常就是 执 执 行 行 该进 该进 程的用 程的用 户 户。有效 有效 uid uid 和 和 gid gid 某些程序可以将 某些程序可以将 uid uid 和 和
22、gid gid 改 改 变为 变为 自己私有的 自己私有的 uid uid 和 和 gid gid。系。系 统 统 在运行 在运行 这样 这样 的程序 的程序 时 时,会根据修改,会根据修改后的 后的 uid uid 及 及 gid gid 判断程序的特 判断程序的特 权 权,例如,是否能,例如,是否能 够 够直接 直接 进 进 行 行 I/O I/O 输 输 出等。通 出等。通 过 过 setuid setuid 系 系 统调 统调 用,可将程 用,可将程序的有效 序的有效 uid uid 和 和 gid gid 设 设 置 置 为 为 其他用 其他用 户 户。在。在 该 该 程序映 程序映
23、像文件的 像文件的 VFS VFS 索引 索引 节 节 点中,有效 点中,有效 uid uid 和 和 gid gid 由索引 由索引节 节 点的属性描述。点的属性描述。文件系 文件系 统 统uid uid 和 和 gid gid 这 这 两个 两个 标识 标识 符和上述 符和上述 标识 标识 符 符 类 类 似,但用于 似,但用于 检查对 检查对文件系 文件系 统 统 的 的 访问许 访问许 可 可 时 时。处 处 于用 于用 户 户 模式的 模式的 NFS NFS 服 服 务 务器作 器作 为 为 特殊 特殊 进 进 程 程 访问 访问 文件 文件 时 时 使用 使用 这 这 两个 两个
24、标识 标识 符。符。保存 保存 uid uid 和 和 gid gid 如果 如果 进 进 程通 程通 过 过 系 系 统调 统调 用修改了 用修改了 进 进 程的 程的 uid uid 和 和 gid gid,这 这 两个 两个 标识 标识 符 符 则 则 保存 保存 实际 实际 的 的 uid uid 和 和 gid gid。5.1.3 进程状态信息Linux Linux中的进程有 中的进程有4 4种状态,如表 种状态,如表5.2 5.2所示。所示。运行状 运行状 态 态 该进 该进 程是当前正在运行的 程是当前正在运行的 进 进 程;或者,程;或者,该进 该进 程是可 程是可以运行的 以
25、运行的 进 进 程,即正在等待 程,即正在等待 调 调 度程序将 度程序将 CPU CPU 分配 分配 给 给 它。它。等待状 等待状 态 态 1.1.进 进 程正在等待某个事件或某个 程正在等待某个事件或某个 资 资 源。源。这 这 种 种 进 进 程又 程又分 分 为 为 可中断的 可中断的 进 进 程和不可中断的 程和不可中断的 进 进 程两种。可中断的等 程两种。可中断的等待 待 进 进 程可被信号中断,而不可中断的等待 程可被信号中断,而不可中断的等待 进 进 程是正在直 程是正在直接等待硬件状 接等待硬件状 态 态 条件的 条件的 进 进 程,在任何情况下都不能被中 程,在任何情况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理 通讯
限制150内