3.3 例题解答
例1 简述多道程序设计对于系统中设备、内存和处理器的利用率所带来的影响。
答:如果允许若干个搭配合理的程序同时进入内存,这些程序分别使用不同的资源,那么系统中各种资源的利用率就会明显提高;同时进入系统的多道程序可以保存在内存的不同区域中,从而避免了单道程序独占内存空间而造成内存空间浪费的问题。单道程序系统中,当运行程序进行I/O操作时,处理器空闲;而多道程序系统中,当一个运行程序进行I/O操作时,处理器会执行另一个程序,这样就提高了处理器的利用率。
例2 试说明进程和程序概念的区别和联系。
答:1)进程是一个动态概念,而程序是一个静态概念。程序是指令的有序集合,没有任何执行的概念;而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。
2)进程具有并发特征,而程序没有。由进程的定义可知,进程具有并发特征的两个方面,即独立性和异步性。在不考虑资源共享的情况下,各进程执行是独立的,执行速度是异步的。
3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。
4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。
例3 简述进程和作业两个概念的区别。
答:1)作业是用户向计算机提交任务的任务实体;而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。
2)一个作业可由多个进程组成,且必须至少由一个进程组成,但反过来不成立。
3)作业的概念主要用在批处理中。像UNIX这样的分时系统中,则没有作业的概念。而进程的概念则用在几乎所有的多道程序中。
例4 什么是进程控制块?什么是作业控制块?
答:进程控制块是系统感知进程存在的唯一实体,PCB对进程的重要性有:它是进程的信息描述,包含着进程的控制信息、资源管理信息和在进程调度时对CPU现场进行保护等功能。作业控制块是系统感知作业实体存在的唯一实体,保留着作业的描述信息、控制信息等。
例5 一个单CPU的操作系统共有N个进程,不考虑进程状态过渡的情况:
1)给出运行进程的个数。
2)给出就绪进程的个数。
3)给出等待进程的个数。
答:1)0≤运行进程的个数≤1,处理器任一时刻只能处理一道程序,所以任何时候最多都只有一个运行进程。
2)0≤就绪进程的个数≤N,如果为N,此时系统没有阻塞进程,没有运行进程。
3)0≤等待进程的个数≤N,如果为N,此时系统没有就绪进程,CPU空转,等待外界中断的到来。
例6 某系统的进程状态转换图如图3-2所示,请说明:
1)引起各种状态变迁的典型事件有哪些?
2)是否会发生下述因果变迁?
2→1
3→2
4→1
图 3-2 进程状态转换图
答:1)引起各种状态变迁的典型事件有:
当进程调度程序从就绪队列选取一个进程执行时,引起变迁1。
正在执行的进程如因时间片用完而被暂时,执行就会引起变迁2。
正在执行的进程因等待发生某事件而无法执行下去时,则会引起变迁3。
当进程等待的事件发生,则会引起变迁4。
2)关于是否会发生因果变迁:
2→1:当某进程发生变迁2时,就必然引起另一个进程的变迁1。
3→2:某个进程的变迁3绝不能引起另一个进程发生变迁2。
4→1:当处理机空闲且就绪队列为空时,某一进程的变迁4会引起该进程的变迁1。
例7 使用系统共享资源最简单的办法是FCFS。在采用优先级调度的系统中,若优先级高的进程等待优先级低的进程占用的系统资源时,系统中的就绪队列如图3-3所示,图中的数字为优先级当前正占用系统资源的进程优先级为5,优先级为1的进程正等待这些资源。
图 3-3 阻塞队列和就绪队列
请设计一个算法,使高优先级进程尽可能快地得到资源后运行,而不是长期等待在阻塞队列中,直到就绪队列中的进程依次运行完毕才投入运行。
答:这实际是一个典型的优先级问题,如果解决不好,会使系统性能变坏。算法设计如下:
当高优先级的进程因等待低优先级进程占用的资源而阻塞时,让占用资源的低优先级进程继承高优先级进程的优先级,使它立即占用CPU运行,直到它释放资源,之后将它的优先级降低为原来的级别,使高优先级进程可以立即占用资源运行,以满足它的实时性要求。
例8 线程具有哪些属性?
答:线程具有如下的属性:
1)线程具有动态性,有生命周期,因而存在各种状态,如运行、就绪和等待状态等。
2)多个线程可以并发执行。
3)一个线程可以创建、撤销另一个线程。
4)每个线程有自己的数据结构,即线程控制块(Tread Control Block,TCB)。
5)在同一进程内,各线程共享同一个地址空间,即所属进程的存储空间。
6)一个进程中的线程在另一个进程中是不可见的。
7)同一个进程内的各线程间的通信主要是基于全局变量进行的。
例9 试对线程与进程两个概念进行比较。
答:进程和线程可以从以下几个方面来进行比较:
1)拥有的资源。进程是独立拥有资源的一个基本单位,它可以申请并拥有自己的资源,也可以访问其所属进程的资源。线程只拥有一些在运行中必不可少的资源,如程序计数器、一组寄存器和栈等,它与同属一个进程的其他线程共享该进程拥有的全部资源。
2)调度。引入线程的操作系统中存在两级调度:同一进程内各线程之间的调度和不同进程之间的进程调度。同一进程内的线程切换不会引起进程切换,而在由一个进程内的线程切换到另一个进程内的线程时,将引起进程切换。
3)系统开销。创建或撤销进程的系统开销远比创建或撤销一个线程的系统开销要大得多。如系统分配或者回收进程需要或占用的内存空间、I/O设备等资源;而创建或撤销线程时,只需要分配或回收很少的资源。
进程上下文切换时要保存和设置很多现场信息,需要比较大的系统开销;而同一个进程内的线程共享资源,它们的上下文切换仅仅需要保存和设置少量寄存器的内容。
此外,同一进程内线程之间的通信由于共享所属进程的存储空间,相比进程间通信更加容易。
总之,进程与线程的共同之处是:都具有并发性,都有生命周期,可处于运行、等待、就绪等状态,都有自己的程序计数器和堆栈,都可以创建子进程或子线程等。不同之处有:两者的内容和组成不同;线程不能独立存在,而进程是独立存在的;进程间有保护机制,如一个进程不能访问另一个进程的空间,而线程间没有保护机制。
例10 简述UNIX进程控制块的主要内容和特点。
答:进程控制块是进程存在的唯一标志,它保存了系统管理和控制进程所必需的信息,是进程动态特性的集中表现。PCB通常包含进程标志、进程的当前状态、进程的优先级、CPU的现场保护区、运行程序的起始地址、资源清单,以及进程之间的关系等。
UNIX系统为了节省进程控制块所占的内存空间,将每个PCB分成两部分:基本控制块proc结构和扩充控制块user结构。proc常驻内存,在proc结构中存放关于一个进程的最基本、最必需的信息,不管进程是否正占用处理器运行,系统经常会对这部分内容进行查询和处理。proc内容包括:进程状态、优先数、过程特征、数据段起始地址、等待原因和队列指针等,这是进行处理器调度时必须使用的一些主要信息。user结构不常驻内存,当进程暂时不在处理机上运行时,系统不会对这部分内容进行查询和处理,因此就把它放在磁盘的对换区中,它随用户的程序和数据一起,部分地换进或换出内存。