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. 进程间通信¶
消息通信
共享存储区
管道通信