6.3.7. 进程

6.3.7.1. 概念

进程是程序处于一个执行环境中在一个数据集上的运行过程,它是系统进行资源分配和调度的一个可并发执行的独立单位。

6.3.7.2. 状态

进程一般存在7种基础状态:D-不可中断睡眠、R-可执行(TASK_RUNNING)、S-可中断睡眠、T-暂停态、t-跟踪态(TASK_TRACED)、X-死亡态、Z-僵尸态。

不可中断睡眠态。位于这种状态的进程处于睡眠中,并且不允许被其他进程或中断)打断。因此这种状态的进程,是无法使用kill杀死的。这种状态一般由I/O等待(比如磁盘I/O、网络I/O、外设I/O等)引起,出现时间非常短暂。

可执行态。这种状态的进程都位于CPU的可执行队列中,正在运行或者正在等待运行。

可中断睡眠态。这种状态的进程虽然也处于睡眠中,但是是允许被中断的。这种进程一般在等待某事件的发生,而被挂起。系统中大部分进程都处于S态。SLEEP态进程不会占用任何CPU资源。

暂停与跟踪态。这种两种状态的进程都处于运行停止的状态,暂停态进程会释放所有占用资源。

僵尸态的进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID等)。僵尸态进程会释放除进程入口之外的所有资源。

死亡态。进程的真正结束态,这种状态一般在正常系统中无法被捕获到。

6.3.7.3. 进程创建

Linux有几种进程创建方式,一种是通过fork()系统调用创建进程,一种是在用户级通过pthread库中的pthread_create()创建线程,一种在内核级通过kthread_create()创建。

6.3.7.4. 作业调度算法

  • 先来先服务(FCFS) 有利于长作业而不利于短作业。

  • 短作业优先(SJF) 较短的作业平均等待时间 ,较大的系统吞吐率。

  • 响应比高优先(HRN) 求等待时间与执行时间两者时间之比。相对等待时间长优先。

  • 优先级调度 作业的紧急程度、资源要求、类别等。

6.3.7.5. 组成

  • 进程控制块(PCB)

  • 进程执行的程序(code)

  • 进程执行时所用的数据

  • 进程执行时使用的工作区

6.3.7.6. 进程调度

  • 先来先服务(FIFO)调度算法

  • 时间片轮转法

  • 优先级调度算法

  • 多级反馈队列调度算法

  • 实时系统调度策略

6.3.7.7. 进程间通信

  • 消息通信

  • 共享存储区

  • 管道通信