一、进程相关知识点大纲图
二、知识体系框图
三、要掌握的基本要点
1.进程是一个程序对某个数据集的一次运行活动。进程是动态概念,而程序是静态概念。
2.进程的基本特征是:动态性、并发性、独立性、异步性和结构特征。
3.程序段和数据段称为进程的实体,用PCB描述实体的存在和变化,从结构上讲,进程包括程序段、、数据段和进程控制块(PCB)。
4.在操作系统中引入线程概念的主要目的是减少程序并发执行时所需要付出的时空开销,提高程序的并发程度。
5.进程的基本状态有运行、就绪和阻塞。引起状态转化的事件通常有:时间片用完(运行态转入就绪态)、等待事件(运行转入阻塞)、等待条件发生(阻塞态转入就绪态)以及进程调度(就绪态转入运行态)。
6.三级调度的运行频率:高级调度<中级调度<低级调度。
7.进程的调度方法有两类:抢占式和非抢占式。如要使当前运行进程总是优先级最高的进程,则应该选择非抢占式优先级调度算法。时间轮转调度方法也是抢占式调度方法。
8.进程调度算法采用等时间片轮转法时,若时间片过大,则会使轮转法转化为先来先服务调度算法,若时间片过小,则会在进程切换时消耗过多的系统资源和时间,效率反而会降低。
9.在所有的调度算法中,短作业优先调度算法的平均等待时间最短。
10.同时只能一个进程使用的资源称为临界资源。在进程中,访问临界资源的代码段称为临界区。为保证进程互斥访问临界资源,应在进程的临界资源之前设置进入区,在临界区后设置退出区。
11.访问临界资源应该遵循的准则:空闲让进,忙则等待,有限等待,让权等待。
12.同步是指不同进程间互相合作、相互等待、互斥是指同类进程需要互斥使用资源。同步与互斥描述了进程的两种不同的制约关系。
13.信号量的物理意义是:当信号量值大于零时,表示可用资源的数目;当信号量值小于零时,其绝对值为在该信号量上等待的进程个数。
14.死锁产生的四个必要条件:互斥、请求与保持、不剥夺和环路等待。破坏死锁时,要注意保护互斥性,其他三个条件可以打破。
15.不让死锁发生的策略可以分为静态和动态两种,死锁避免属于动态策略。
四、进程
4.1进程的概念
- 进程是程序在处理器上的一次执行过程。
- 进程是可以和别的进程并行执行的计算。
- 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
- 进程可定义为一个数据结构及能在其上进行操作的一个程序。
- 进程是一个程序关于某个数据集合在处理器上顺序执行所发生的一切。
4.2进程的组成与特征
- 进程控制块(PCB)。每个进程均有一个PCB,他是一个技能标识进程的存在、又能刻画执行瞬间特征的数据机构。当进程创建时,系统为它申请和构造一个相应的PCB。
- 程序段。程序段是进程中能被进程调度程序调度到CPU上执行的程序代码段,能实现相应的特定功能。
- 数据段。一个进程的数据段可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或结果数据。
- 进程标识符(PID)。每个进程都有唯一的进程标识符,以区别于系统内部的其他进程。在创建进程时,由系统为进程分配唯一的进程标识号。
- 进程当前状态。说明进程的当前状态,以作为进程调度程序分配处理器的依据。
- 进程队列指针。用于记录PCB队列中下一个PCB的地址。系统中的PCB可能组织成多个队列,如就绪队列、阻塞队列。
- 程序和数据地址。指出进程的程序和数据所在的地址。
- CPU现场保护区。当进程因某中原因释放处理器时,CPU现场信息(指令计数器、状态寄存器、通用寄存器)被保护在PCB的该区域中,以便该进程重新获得处理器后能继续执行。
- 通信信息。记录进程在执行过程中与别的进程所发生的信息交换情况。
- 家族联系。有的系统允许进程创建子进程,从而形成进程家族树。在PCB中,本进程与家族的关系必须指明。
- 占有资源清单。进程所需要资源及当前已分配资源清单。
- 动态性。进程是程序在处理器上的一次执行过程,因而是动态的。动态特性还表现在它因创建而产生,由调度而执行,因得不到资源而暂停,最后因撤销而消亡。
- 并发性。并发性是指多个进程同时存在于内存中,能在一段时间内同时运行。引入进程的目的就是使程序能够与其他程序并发执行,以提高资源利用率。
- 独立性。进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的独立单位。
- 异步性。异步性是指进程以各自独立的。不可预知的速度向前推进。
- 结构特征。为了描述和记录进程的运动变化的过程,并使之能正确运行,应为每个进程配置一个进程控制块。这样从结构上看,每个进程都是由程序段、数据段和一个进程控制块组成。
4.3进程的状态与转换
- 新的状态: 进程正在被创建。
- 运行状态(执行状态): 当一个进程获得了必要的资源并在CPU上被执行。
- 等待状态(阻塞状态):正在执行的程序,由于发生某件事情而暂时无法执行下去(如等待I/O 完成或收到信号)。处于阻塞状态时,即使将处理器分配给该进程,它也无法运行。
- 就绪状态: 进程已经获得了除处理器外所有的资源,等待分配处理器。
- 终止状态: 进程完成执行。
- 就绪状态->执行状态。一个进程被进程调度程序选中。
- 执行状态->阻塞状态。请求并等待某个事件发生。
- 执行状态->就绪状态。时间片用完或在抢占式调度中有更高优先级的进程变成就绪状态。
- 阻塞状态->就绪状态。进程因为等待的某个条件发生而被唤醒。
- 进程状态的转换并非都是可逆的,进程既不能从阻塞状态转换成执行状态,也不能从就绪状态转换成阻塞状态。
- 进程之间的转换状态并非都是主动的,在很多情况下都是被动的,只有从执行状态到阻塞状态是程序的自我行为,其他都是被动的。例如,从执行状态到就绪状态,通常由时钟中断引起的,从阻塞状态到就绪状态,是上一个使用处理器的进程把一个阻塞程序唤醒的。
- 进程状态的唯一性。一个具体的进程在任何一个指定的时刻必须且只能处于一种状态。
4.4进程的调度
4.4.1调度队列
pid_t pid; //process identifier
long state; //state of the process
unsigned int time_slice; // list of open files
struct mm_stuct *mm; //address space of this process
例如,进程的状态是通过这个结构中的longstate 字段来表示的。在Linux 内核里,所有活动的进程是通过一个名为taskstruct 的双向链表来表示的,内核为当前正在运行的进程保存了一个指针(current),如图所示。
- 进程可能发出一个/O请求,并被放到/O 队列中。
- 进程可能创建一个新的子进程,并等待其结束。
- 进程可能会由于中断而强制释放CPU,并被放回到就绪队列中。
4.4.2调度程序
通常对于批处理系统,进程更多地是被提交,而不是马上执行。这些进程被放到大容量存储设备(通常为磁盘)的缓冲池中,保存在那里以便以后执行。长期调度程序(long-term scheduler) 或作业调度程序(job scheduler) 从该池中选择进程,并装入内存以准备执行。短期调度程序(short-term scheduler) 或CPU 调度程序从准备执行的进程中选择进程,并为之分配CPU。
这两个调度程序的主要差别是它们执行的频率。短期调度程序必须频繁地为CPU 选择新进程。进程可能执行数毫秒(ms) 就会进行I/O 请求,短期调度程序通常每100ms至少由于来执行一次。每次执行之间的时间较短,短期调度程序必须要快。如果需要10 ms 确定执行一个运行100ms 的进程,那么10/(100+10)-9%的CPU 时间会用于(或浪费在) 调度工作上。
长期调度程序执行得并不频繁,在系统内新进程的创建之间可能有数分钟间隔。长期调度程序控制多道程序设计的程度(内存中的进程数量)。如果多道程序的程度稳定,那么创建进程的平均速度必须等于进程离开系统的平均速度。因此,只有当进程离开系统后,才可能需要调度长期调度程序。由于每次执行之间时间间隔得较长,长期调度程序能使用更多时间来选择执行进程。
4.4.3上下文切换
上下文切换时间与硬件支持密切相关。例如,有的处理器(如SunUltraSPARC) 提供了多组寄存器集合,上下文切换只需要简单地改变当前寄存器组的指针。当然,如果活动进程数超过了寄存器集合数量,那么系统需要像以前一样在寄存器与内存之间进行数据复制。而且,操作系统越复杂,上下文切换所要做的工作就越多。如第8 章将要谈到的,高级内存管理技术在各个上下文切换中要求切换更多的数据。例如,在使用下一个任务的空间之前,当前进程的地址空间需要保存。进程空间如何保存和保存它需要做多少工作,取决于操作系统的内存管理方法。