2026/08/20 linux嵌入式系统的进程

进程的概念

当源文件编译通过并且完成链接动作之后,则得到一个可以执行的ELF文件,ELF文件中包含了程序的指令和数据以及相关函数接口的跳转地址等信息,当用户运行程序时,操作系统就会把程序相关的指令和数据载入内存,并为程序分配对应的内存空间,然后通知CPU完成程序的相关动作。

用户编写的源文件是存储在外存(磁盘)中的,而使用编译器生成的ELF可执行文件也是存储在外存中的,这两者都是静态的,操作系统也并没有为两者分配系统资源。

当可执行文件得到运行,操作系统才会把可执行文件中的指令和数据从外存中读取出来并写入内存,并且会为程序分配系统资源(内存空间、CPU使用权等),所以程序从静态变为动态,这种正在进行中的程序,操作系统就把其称之为进程(process)。也可以理解为进程是程序在处理器上的一次执行过程。

进程定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例。

注意:进程是操作系统分配资源的基本单位!操作系统是以进程为单位来分配系统资源的,比如内存空间、CPU使用权等。 线程是操作系统调度资源的最小单位! 进程包含线程!

进程的特征

进程具有四个基本特征,分别是动态性、并发性、独立性、异步性,具体的区别如下所示:

(1)动态性:进程是程序在处理器上的一次执行过程,因而是动态的。比如进程会在程序运行时被创建出来,当无法获取足够的系统资源时进程会暂停,当得到资源后会继续执行。

(2)并发性:多个进程同时存在于内存中,目的是与其他程序并发执行,提高资源的利用率。

(3)独立性:进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的独立单位。

(4)异步性:指的是进程以各自独立的、不可预知的速度向前推进。一个进程的执行过程可能是无法被预测的,因为会受到各方面因素的影响,比如当系统资源不够时或者出现其他进程抢占资源时,都会影响进程的执行进度。

进程的组成
一般进程在创建之后,操作系统都会为进程分配一块内存来记录进程的各项参数信息,所以这块内存被称为进程控制块(Processing Control Block,缩写为PCB)。每个进程都有PCB,用于标识进程的存在以及记录进程的信息。

在Linux系统中进程控制块PCB是以一个名称叫做struct task_struct的结构体作为载体来存储信息的,该结构体被定义在一个名称叫做sched.h的头文件中。
image
进程一般由三个部分组成,分别是进程控制块、代码段、数据段。代码段指的是进程中能被调度程序调度到CPU上执行的程序代码段,数据段指的是进程对应的程序原始数据或者程序执行过程中产生的中间数据等。

不同操作系统对于一个进程的信息记录是不同的,也就是PCB中的内容会有一些区别,但是大同小异,基本都会包含以下内容:
1)进程标识符

每个进程都有一个有系统分配的唯一的PID进程标识符(process identifier),用于区分系统中的其他进程,这个PID也是Linux内核提供给用户访问进程的一个接口,用户可以通过PID控制进程。
Linux系统中提供了关于获取进程状态的shell命令:ps ,该命令的使用方法详见man手册,一般使用 ps -ef 或者 ps -axu来查看Linux系统中所有用户相关的进程的所有信息。
image
image

2)进程当前状态

在进程的运行过程中由于系统中多个进程的并发运行和相互制约的结果,所以使进程的状态不断发生变化。操作系统以进程的状态来作为调度程序分配处理器的依据。

通常一个运行中的进程至少可划分为5种基本状态:就绪态、运行态、阻塞态、创建态、结束态。当然进程状态的叫法是比较灵活的,大家不用死记硬背,重在理解相关概念。
A.创建态

指的是进程正在被创建,但是还没有准备好,也就是还没有达到就绪状态,此时系统申请进程PCB需要的内存空间,并向PCB中填写关于进程的管理信息,然后系统分配进程运行需要的资源,最后把进程转换为就绪状态。

B.就绪态

指的是进程已经获得了除了处理器之外的其他资源,相当于“万事俱备,只欠东风”,只要进程获得处理器资源,就可以立即执行。

C.执行态

执行态也被称为运行态,指的是进程已经获得了其他资源和处理器资源,并正在被CPU执行的状态。

D.阻塞态

阻塞态也被称为暂停态,指的是进程在执行过程中由于某个事件导致无法继续执行下去,此时进程处于暂时停止的状态。

E.结束态

指的是进程正在从系统中消失,原因可能是进程正常退出或者由于其他问题中断退出运行。有一种情况比较特殊,就是如果该进程退出之后资源还没有释放,但是此时进程已经无法被调度和运行,进程就会进入僵尸态,此时用户需要对这类进程进行处理,避免占用过多资源。
image

注意:进程不是一直处于某一个状态,进程的状态会受到外界因素和执行进度的影响而发生改变,当然,进程的状态在某一个时刻是唯一的,也就是在某一时刻进程必须且只能处于一种状态。

在Linux系统的终端中输入shell指令: ps -aux,就可以看到当前系统中运行的进程状态。
image
image

posted @ 2026-08-21 02:40  !城北徐公.!  阅读(4)  评论(0)    收藏  举报