嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号

所有学嵌入式Linux系统的看过来了,以下内容是每一位想学习Linux嵌入式系统想要了解的内容,真的很想要分享给大家! 本文分享的内容主要如下几个方面:

4.1 进程理论

4.1.1 进程和进程控制块

4.1.2 进程状态

4.1.3 进程五状态模型

4.1.4 进程控制结构

4.1 查看进程

4.1.1 进程 ID

4.1.2 查看活动进程

4.1.3 中止一个进程

4.2 创建进程

4.2.1 使用 system

4.2.2 使用 fork 和 exec

4.2.3 进程调度

4.3 信号

4.4 进程终止

4.4.1 等待进程结束

4.4.2 wait 系统调用

4.4.3 僵尸进程

4.4.4 异步清理子进程


一个程序的一份运行中的实例叫做一个进程。如果你屏幕上显示了两个终端窗口,你很可能同时将一

个终端程序运行了两次——你有两个终端窗口进程。每个窗口可能都运行着一个 shell;每个运行中的

shell 都是一个单独的进程。当你从一个 shell 里面调用一个程序的时候,对应的程序在一个新进程中

运行;运行结束后 shell 继续工作。

高级程序员经常在一个应用程序中同时启用多个协作的进程以使程序可以并行更多任务、使程序更健

壮,或者可以直接利用已有的其它程序。

本章中将要介绍的各种进程操作函数与其它 UNIX 操作系统中的进程操作函数非常相似。多数函数都

在这个包含文件中声明了原型;检查对应的手册页以确保无误。


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号

图 4-6 显示了导致进程状态转换的事件类型。可能的转换如下:

 空 -> 新建:创建执行一个程序的新进程。该事件在表 2-1 中所列出的原因下都会发生。

 新建 -> 就绪:操作系统准备好再接纳一个进程时,把一个进程从新建态转换到就绪态。大多数系统

基于现有的进程数或分配给现有进程的虚存数量设置一些限制,以确保不会因为活跃进程的数量过

多而导致系统的性能下降。

 就绪 -> 运行:需要选择一个新进程运行时,操作系统选择一个处于就绪态的进程,这是调度器或分

派器的工作。

 运行 -> 退出:如果当前正在运行的进程表示自己已经完成或取消,则它将被操作系统终止,见表

4-2。

 运行- -> > 就绪:这类转换最常见的原因是,正在运行的进程到达了“允许不中断执行”的最长时间段;

实际上所有多道程序操作系统都实行了这类时间限定。这类转换还有很多其他原因,但它们不是在

所有的操作系统中都实现了。如果操作系统给不同的进程分配不同的优先级,进程就有可能被抢占。

假设进程 A 在一个给定的优先级运行,且具有更高优先级的进程 B 正处于阻塞态。如果操作系统知

道进程 B 等待的事件已经发生了,则将 B 转换到就绪态,然后因为优先级的原因中断进程 A 的执行,

将处理器分派给进程 B,我们说操作系统抢占了进程 A。最后一种情况是,进程自愿释放对处理器

的控制,例如一个周期性地进行审计和维护的后台进程。

 运行- -> > 阻塞:如果进程请求它必须等待的某些事件,则进入阻塞态。对操作系统的请求通常以系统服务调用的形式发出,也就是说,正在运行的程序请求调用操作系统中一部分代码所发生的过程。

例如,进程可能请求操作系统的一个服务,但操作系统无法立即予以服务,它也可能请求了一个无

法立即得到的资源,如文件或虚存中的共享区域;或者也可能需要进行某种初始化的工作,如 I/O

操作所遇到的情况,并且只有在该初始化动作完成后才能继续执行。当进程互相通信,一个进程等

待另一个进程提供输入时,或者等待来自另一个进程的信息时,都可能被阻塞。

阻塞 -> 就绪:当所等待的事件发生时,处于阻塞态的进程转换到就绪态。

就绪 -> 退出:为了清楚起见,状态图中没有表示这种转换。在某些系统中,父进程可以在任何时刻

终止一个子进程。如果一个父进程终止,与该父进程相关的所有子进程都将被终止。

阻塞 -> 退出:前面一项提供了注释。

4.1.4 进程控制结构

操作系统在管理和控制进程时,首先必须知道进程的位置;再者,它必须知道在管理时所必需的进程

属性(如进程 ID、进程状态)。

(1)进程位置

进程最少必须包括一个或一组被执行的程序,以及与这些程序相关联的局部变量、全局变量和任何已

定义常量的数据单元。因此,一个进程至少包括足够的内存空间,以保存该进程的程序和数据;此外,程序的执行通常涉及到用于跟踪过程调用和过程间参数传递的栈。最后,与每个进程相关联的还有操作系统用于控制进程的许多属性,通常,属性的集合称为进程控制块(Process Control Block,PCB)。程序、数据、栈和属性的集合称为 进程映像(见表 4-4)。

进程映像的位置依赖于使用的内存管理方案。对于最简单的情况,进程映像保存在邻近的或连续的存

储块中,进程映像保存在辅存中(通常是磁盘)。因此,如果操作系统要管理进程,其进程映像至少有一部分必须位于主存中。为执行此进程,整个进程映像必须载入主存中或至少载入虚拟内存中。因此,操作系统需要知道每个进程在磁盘中的位置,并且对于在主存中的每个进程,操作系统需要知道其在主存中的位置。来看一下第 1 章中 CTSS 操作系统关于这个方案的一个稍微复杂些的变体。在 CTSS 中,当进程被换出时,部分进程映像可保留在主存中。因此,操作系统必须跟踪每个进程映像的哪一部分仍然在主存中。


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


嵌入式Linux系统编程——linux大神深度给你讲解进程、调度、信号


分享到:


相關文章: