《操作系统复习-进程管理》由会员分享,可在线阅读,更多相关《操作系统复习-进程管理(11页珍藏版)》请在金锄头文库上搜索。
1、2.12.1 进程与线程进程与线程进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程)进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程)优先级是进程调度的重要依据,一旦确定就不能改变(错)在单 CPU 的系统中,任意时刻都有一个进程处于运行状态(错,可以空转)进程申请进程申请 CPUCPU 得不到满足时,其状态变为阻塞(错!等待得不到满足时,其状态变为阻塞(错!等待 CPUCPU 的进程处于就绪状态)的进程处于就绪状态)进程获得 CPU 运行是通过调度得到的(对)线程是一种特殊的进程(对)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对
2、)进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对)进程是进程是 PCBPCB 结构、程序和数据的集合(对)结构、程序和数据的集合(对)撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进程,另一种是撤销指定进程和其子孙进程)程,另一种是撤销指定进程和其子孙进程)线程的切换,可能会引起进程的切换(对)线程的切换,可能会引起进程的切换(对)引入线程后,处理机只在线程中切换(错!)引入线程后,处理机只在线程中切换(错!)线程是比进程更小的能独立运行的基本单位(错,这句
3、话的成立需要一定的前提条件)线程是比进程更小的能独立运行的基本单位(错,这句话的成立需要一定的前提条件)线程的引入增加了程序执行的时空开销(错,应为减少)线程的引入增加了程序执行的时空开销(错,应为减少)一个进程一定包含多个线程(错)一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)中断是进程切换的必要条件,而不是充分条件。(对)中断是进程切换的必要条件,而不是充分条件。(对)进程的基本特点:进程的基本特点:动态性,并发性,独立性,异步性,结构性动态性,并发性,独立性,异步性,结构性。
4、在多道程序设计环境下,操作系统分配资源以在多道程序设计环境下,操作系统分配资源以进程进程为基本单位为基本单位在引入线程的操作系统中,资源分配的基本单位是在引入线程的操作系统中,资源分配的基本单位是进程进程,CPUCPU 分配的基本单位是分配的基本单位是线程线程。在引入线程的操作系统中,进程是在引入线程的操作系统中,进程是资源分配资源分配的基本单位,线程是的基本单位,线程是调度调度的基本单位的基本单位从运行状态到就绪状态是由于从运行状态到就绪状态是由于时间片用完或出现了比现在进程优先级更高的进程(调度程时间片用完或出现了比现在进程优先级更高的进程(调度程序决定)序决定)从就绪状态到运行状态是从就
5、绪状态到运行状态是调度程序调度程序决定的决定的从阻塞状态到就绪状态是从阻塞状态到就绪状态是协作程序协作程序决定的决定的从运行状态到阻塞状态是从运行状态到阻塞状态是进程自身进程自身决定的(只有这个是主动的)决定的(只有这个是主动的)对进程的管理和控制使用对进程的管理和控制使用原语原语。(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)。(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)一个进程被唤醒意味着一个进程被唤醒意味着进程变为就绪状态(该进程可能重新占用进程变为就绪状态(该进程可能重新占用 CPUCPU)。(唤醒原语的功。(唤醒原语的功能是将被被唤醒进程从阻塞队列中移到就绪队列中)能是
6、将被被唤醒进程从阻塞队列中移到就绪队列中)降低进程优先级的合理时机是降低进程优先级的合理时机是进程的时间片用完进程的时间片用完。进程调度主要负责选一个进程占有 CPU。建立多线程的主要目的是建立多线程的主要目的是提高提高 CPUCPU 的利用率的利用率。进程调度的方式有抢占式,非抢占式两种。(?)以下 C 不会引起进程创建。A.用户登录用户登录 B.作业调度 C.设备分配设备分配 D.应用请求进程与程序的联系与区别:进程与程序的联系与区别:联系:进程是程序的一次执行过程,没有程序就没有进程区别:1.进程是程序的执行,所以进程属于动态概念,程序是一组指令的有序集合,是静态的概念2.进程的存在是暂
7、时的,程序的存在是永久的(相对而言)3.进程的组成包裹程序,数据和 PCB 块4.一个程序可能对应多个进程,一个进程也可以包含多个程序。也就是说,程序和进程无一一对应关系。多线程与多任务的区别:多任务是针对操作系统而言的,代表操作系统和同时执行的程序数。多线程是针对一个程序而言的,代表着一个程序内部可以同时执行的线程个数。什么是内核线程?什么是用户线程?什么是内核线程?什么是用户线程?内核线程是与操作系统内核中的程序相对应的线程。内核线程是与操作系统内核中的程序相对应的线程。用户线程是与用户的应用程序相对应的线程。用户线程是与用户的应用程序相对应的线程。什么是内核支持线程?什么是内核支持线程?
8、内核支持线程是指其创建、撤销和切换都需要内核程序支持才能实现的线程,内核通过保内核支持线程是指其创建、撤销和切换都需要内核程序支持才能实现的线程,内核通过保留一个线程控制块用于感知该线程的存在并对其控制。所对应的程序可以是内核程序,也留一个线程控制块用于感知该线程的存在并对其控制。所对应的程序可以是内核程序,也可以是用户程序,但主要是用户的应用程序可以是用户程序,但主要是用户的应用程序简述用户级线程和内核支持线程的区别。简述用户级线程和内核支持线程的区别。1.内核支持线程是操作系统内核可感知的,而用户级线程是操作系统内核不可感知的。2.用户级线程的创建,撤销和调度不需要操作系统内核的支持,是在
9、语言这一级处理的(如运行在 Java 虚拟机中的程序);而内核支持线程的创建,撤销,调度都需要操作系统内核提供支持,而且与进程的创建,撤销和调度大体上是相同的。3.在只有用户级线程的系统内,CPU 调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU 调度则以线程为单位,由操作系统的线程调度程序负责线程的调度。4.用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是运行在任何状态下的程序。2.22.2 处理机调度处理机调度调度的层次:高级调度(作业调度,宏观调度),中级调度(中程调度,交换调度),低调度的层次:
10、高级调度(作业调度,宏观调度),中级调度(中程调度,交换调度),低级调度(进程调度,微观调度,短程调度)。级调度(进程调度,微观调度,短程调度)。运行频率:高级调度=0,则进程继续执行,否则,阻塞该进程,插入等待队列队尾。2.V 操作,完成下述动作:.S.value=S.value+1;.若 S.value=0,则操作系统从信号量的等待队列中移出队头,放入就绪队列中,否则,什么也不发生经典同步问题:生产者-消费者问题sem_t full = 0, empty = n, mutex = 1;producer() while(1) P(empty)P(mutex)生成一个产品V(mutex)V(f
11、ull)consumer() while(1) P(full)P(mutex)取出一个产品V(mutex)V(empty)读者写者问题sem_t mutex = 1, db = 1int rc = 0reader() P(mutex)rc += 1if(rc = 1)P(db)V(mutex)读P(mutex)rc -= 1if(rc = 0)V(db)V(mutex)writer() P(db)写V(db)上述算法实际上不太利于写者,要想置两者于平等地位,需要再加一个信号量哲学家进餐问题sem_t stick5 = 1,1,1,1,1philosopher(int i) / i:04whil
12、e(1) 思考if(i % 2 =0) P(sticki) / 取左边筷子P(stick(i+1)%5) / 取右边筷子 else P(stick(i+1)%5) / 取右边筷子P(sticki) / 取左边筷子进餐V(sticki) / 放回左边筷子V(stick(i+1)%5) / 放回右边筷子理发师问题/ 互斥量 理发椅个数 空椅子个数 是否有顾客准备好 理发师是否完成理发sem_t mutex = 1, bchair = 1, wchair = 5, ready = 0, finish = 0int waiting = 0barber() while(1) P(ready)理发V(fi
13、nish)customer() P(mutex)if(waiting 6) waiting += 1V(mutex)else V(mutex)离开P(wchair) / 在等待区坐下P(bchair) / 等待理发椅V(wchair) / 释放等待区座位V(ready) / 告诉理发师可以理发了P(finish) / 等理发师理完V(bchair) / 离开理发椅P(mutex)waiting -= 1V(mutex)在操作系统中,要对并发进程进行同步的原因是并发进程是异步的。2.42.4 死锁死锁死锁是指多个进程因竞争系统资源或相互通信而永久处于阻塞状态。产生原因:系统资源不足,进程推进顺序
14、不当处理策略:忽略,预防,避免,检测及解除死锁预防:死锁预防:要想防止死锁的发生,只需破坏死锁产生的 4 个必要条件之一即可(1)互斥条件,不太可能(2)不剥夺条件,常用与状态易于保存和恢复的资源,如 CPU 和内存,一般不能用于打印机之类的资源(3)请求和保持条件(部分分配条件),可以采用静态资源分配法。静态资源分配法要求进程在其运行之前申请他所需要的全部资源。这种方法既简单又安全,但降低了资源利用率。(4)循环等待条件(环路等待条件),可以采用有序资源分配法,实现思想是将系统中的所有资源都按类型赋予一个编号,要求每一个进程均严格按照编号递增的顺序来申请资源,同类资源一次申请完。这种方法存在
15、的主要问题是各种资源编号后不宜修改;而且容易浪费资源。预防死锁的几种策略,总的来说都对资源的使用施加了较强的限制条件,虽然实现起来较简单,但却严重损害了系统性能。死锁避免:死锁避免:银行家算法实现思想:允许进程动态的申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全,便将资源分配给进程,否则不分配银行家算法有较好的理论意义,但在实际系统中却难以实施。因为难以预先获得进程申请的最大资源数;运行过程中的进程的个数是不断变化的,所以银行家算法难以解决实际中的死锁问题死锁检测和解除:死锁检测和解除:(1)资源分配图(2)死锁定理:若 S 状态的资源分配图不可完全化简(化简过程类似银行家算法),则 S为死锁状态(3)死锁检测算法。需要确定何时使用死锁检测,一种实现方法是每次分配资源后进行死锁检测,但是会花费大量 CPU 时间,另一种方法是定期检测,如每隔一段时间检测一次,或当 CPU 使用率下降到某个下限值时进行检查。死锁的解除:资源剥夺法,撤销进程法在有 m 个进程的系统中出现死锁,死锁进程个数 k 的取值范围是 1k=m。