Linux进程编程概述

[3]进程是资源分配的最小单位

[4]每一个进程都有自己独立的地址空间与执行状态。

[5]像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程

进程数据结构

进程由三部分组成:PCB、程序段和数据段。

进程控制块PCB:用于描述进程情况及控制进程运行所需的全部信息。

代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。

数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或最终数据

进程和程序的区别

进程是动态的(进程存在的唯一标志:PCB,CPU通过PCB来控制进程),程序是静态的

进程的生命周期是相对短暂的,而程序是永久的。

一个进程只能对应一个程序,一个程序可以对应多个进程。

进程三态

进程因创建而就绪,因调度而执行;因时间片用完而重新就绪;

执行中因I/O请求而阻塞;

I/O完成而就绪

注意:阻塞以后不能直接执行,必须进入就绪状态。

Linux内核中的进程状态

运行状态(TASK_RUNNING)

可中断睡眠状态(TASK_INTERRUPTIBLE)

不可中断睡眠状态(TASK_UNINTERRUPTIBLE)

暂停状态(TASK_STOPPED)

僵死状态(TASK_ZOMBIE)

进程调度

进程调度的任务

保存处理机的现场信息

按某种算法选取进程

把处理器分配给进程

进程调度算法

1.先来先服务算法

2.短进程优先算法

3.时间片轮转算法

4.优先级调度算法

5.多级反馈队列调度算法

进程编程相关术语

进程标志:

每个进程都会分配到一个独一无二的数字编号,我们称之为“进程标识”(processidentifier),或者就直接叫它PID.

是一个正整数,取值范围从2到32768

当一个进程被启动时,它会顺序挑选下一个未使用的编号数字做为自己的PID

1号进程是特殊进程init

0号进程空闲进程

关于0,1的解释:

进程0:Linux引导中创建的第一个进程,完成加载系统后,演变为进程调度、交换及存储管理进程;

进程1:init进程,由0进程创建,完成系统的初始化.是系统中所有其它用户进程的祖先进程;

进程创建

不同的操作系统所提供的进程创建原语的名称和格式不尽相同,但执行创建进程原语后,操作系统所做的工作却大致相同,都包括以下几点:

(1)给新创建的进程分配一个内部标识,在内核中建立进程结构。

(2)复制父进程的环境

(3)为进程分配资源,包括进程映像所需要的所有元素(程序、数据、用户栈等),

(4)复制父进程地址空间的内容到该进程地址空间中。

(5)置该进程的状态为就绪,插入就绪队列。

进程撤销

进程终止时操作系统做以下工作:

(1)关闭软中断:因为进程即将终止而不再处理任何软中断信号;

(2)回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应的数据结构等;

(3)写记帐信息:将进程在运行过程中所产生的记帐数据(其中包括进程运行时的各种统计信息)记录到一个全局记帐文件中;

(4)置该进程为僵死状态:向父进程发送子进程死的软中断信号,将终止信息status送到指定的存储单元中;

(5)转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。

fork系统调用

复制一个进程映象

使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

子进程与父进程的区别:

1、父进程设置的锁,子进程不继承

2、各自的进程ID:父子进程ID不同

3、子进程的未决警告被清除;

4、子进程的未决信号集设置为空集;

fork系统调用

#include <unistd.h>pid_t fork(void);

创建一个子进程

返回值:

如果成功创建一个子进程,对于父进程来说返回子进程ID

如果成功创建一个子进程,对于子进程来说返回值为0

如果为-1表示创建失败

会让你的心态更平和更坦然,也会让你心无旁骛,更会让你的心灵得到解脱和抚慰。

Linux进程编程概述

相关文章:

你感兴趣的文章:

标签云: