管理系统如 Informix中,所实现的是用户级线程;而另一些系统(如 Macintosh和0s/2)所 实现的是内核支持线程:还有一些系统如 Solaris,则同时实现了这两种不同类型的线程 (1)用户级线程。用户级线程仅存在于用户空间中,而与内核无关。就内核而言,它只是管 理常规的进程-单线程进程,而感知不到用户级线程的存在。每个线程的控制块都设置在用户 空间中,所有对线程的操作也在用户空间中由线程库中的函数(过程)完成,而无需内核的帮 助。用户级线程的优点是不需要得到内核的支持:而且,线程的切换无需陷入内核,故切换开销 小,速度非常快。另外,线程库对用户线程的调度算法与os的调度算法无关,因此,线程库可提 供多种调度算法供应用程序选择使用。但在纯用户级线程的系统中,对应用程序来讲,一个线 程的阻塞将导致整个进程中所有线程的阻塞,并且无法享用多处理机系统中多个处理器带来 的好处。 (2)内核支持线程。内核支持线程是在核心空间实现的。内核为每个线程在核心空间中设 置了一个线程控制块,用来登记该线程的线程标识符、寄存器值、状态、优先级筹信息。所布 对线程的操作,如创建、撤消和切换等,都是通过系统功能调用由内核中的相应处理程序完成 的。内核支持线程克服了用户级线程的两个缺点:首先内核可以把同一个进程中的多个线程调 度到多个处理器中:其次,如果进程中的一个线程被阻塞,内核可以调度同二个进程中的另 个线程。它的另一个优点是内核本身也可以使用多线程的方式来实现。它的主要缺点是,即使 CPU在同一个进程的多个线程之间切换,也需要陷入内核,因此,其速度和效率不如用户级线 程 (3)用户级线程和核心级线程的结合。为了同时获得用户级线程和内核支持线程的便利 某些系统(如 Salads)同时提供了这两种类型的线程。在 Solaris中除了提供内核支持线程 用户级线程这两种线程外,还在它们之间定义了一种轻型进程LWP。其中,内核支持线程和LWP 是内核实现的,而用户级线程是由用户地址空间中的线程库实现的。内核调度和分派的基本单 位是内核支持线程,而内核提供给用户的却是LWP,即每个用户进程都可拥有一个或多个LWP LWP可以看成是用户级线程与内核支持线程之间的桥梁,每个LWP都与一个内核支持线程对应, 它可将一个或多个用户级线程映射到一个内核线程。但每个内核支持的线程并不一定对应于 某个LWP,如那些为0S本身建立的内核支持线程便没有对应的LWP。通常,程序员可不考虑LWP, 而直接使用线程库编程,此时一个用户进程只对应于一个LWP,而且可获得用户级线程的所有 便利。但如果他需要优化程序的性能、获得物理上的并行,则可将自己的用户级线程连接到多 个LWP上,此时,被连接到LWP上的线程便具有了内核支持线程的所有属性 3.2重点难点学习提示 由于进程是0S中最重要的基本概念,因而本章也就成为全书中最重要的一章。读者应对 以下几个重点、难点问题进行深入的学习,切实掌握好进程和进程同步的基本概念 3.2.1进程的基本概念 进程既是os中的一个重要概念,又是系统进行资源分配和独立运行的基本单位。学习 os,首先必须理解和掌握好进程的概念,为此,应认真学习和掌握下述几个方面的内容 (1)为什么要引入进程。引入进程是为了使内存中的多道程序能够正确地并发执行。在学 习时应清楚地理解为什么程序(在未为之建立进程之前)不能与其他程序并发执行,而由PCB、 程序段和数据段三部分组成的进程实体却能与其他进程一起并发执行。 (2)进程具有哪些基本特征。进程具有动态性、并发性、独立性、异步性和结构特征。在 学习时应较好地理解每个特征的含义和形成原因,并且要特别注意比较进程和程序这两个概 念的异同之处。 (3)进程有哪些基本状态。进程具有就绪、执行和阻塞三种基本状态。在学习时必须了解 在一个进程的生命周期中,它是如何随着自身的执行和外界条件的变化不断地在各种状态之
管理系统如 Informix 中,所实现的是用户级线程;而另一些系统(如 Macintosh 和 OS/2)所 实现的是内核支持线程;还有一些系统如 Soloris,则同时实现了这两种不同类型的线程。 (1)用户级线程。用户级线程仅存在于用户空间中,而与内核无关。就内核而言,它只是管 理常规的进程-单线程进程,而感知不到用户级线程的存在。每个线程的控制块都设置在用户 空间中,所有对线程的操作也在用户空间中由线程库中的函数(过程)完成,而无需内核的帮 助。用户级线程的优点是不需要得到内核的支持:而且,线程的切换无需陷入内核,故切换开销 小,速度非常快。另外,线程库对用户线程的调度算法与 os 的调度算法无关,因此,线程库可提 供多种调度算法供应用程序选择使用。但在纯用户级线程的系统中,对应用程序来讲,一个线 程的阻塞将导致整个进程中所有线程的阻塞,并且无法享用多处理机系统中多个处理器带来 的好处。 (2)内核支持线程。内核支持线程是在核心空间实现的。内核为每个线程在核心空间中设 置了一个线程控制块,用来登记该线程的线程标识符、寄存器值、状态、优先级筹信息。所布 对线程的操作,如创建、撤消和切换等,都是通过系统功能调用由内核中的相应处理程序完成 的。内核支持线程克服了用户级线程的两个缺点:首先内核可以把同一个进程中的多个线程调 度到多个处理器中:其次,如果进程中的一个线程被阻塞,内核可以调度同二个进程中的另一 个线程。它的另一个优点是内核本身也可以使用多线程的方式来实现。它的主要缺点是,即使 CPU 在同一个进程的多个线程之间切换,也需要陷入内核,因此,其速度和效率不如用户级线 程。 (3)用户级线程和核心级线程的结合。为了同时获得用户级线程和内核支持线程的便利, 某些系统(如 Solads)同时提供了这两种类型的线程。在 Solaris 中除了提供内核支持线程、 用户级线程这两种线程外,还在它们之间定义了一种轻型进程 LWP。其中,内核支持线程和 LWP 是内核实现的,而用户级线程是由用户地址空间中的线程库实现的。内核调度和分派的基本单 位是内核支持线程,而内核提供给用户的却是 LWP,即每个用户进程都可拥有一个或多个 LWP。 LWP可以看成是用户级线程与内核支持线程之间的桥梁,每个LWP都与一个内核支持线程对应, 它可将一个或多个用户级线程映射到一个内核线程。但每个内核支持的线程并不一定对应于 某个 LWP,如那些为 OS 本身建立的内核支持线程便没有对应的 LWP。通常,程序员可不考虑 LWP, 而直接使用线程库编程,此时一个用户进程只对应于一个 LWP,而且可获得用户级线程的所有 便利。但如果他需要优化程序的性能、获得物理上的并行,则可将自己的用户级线程连接到多 个 LWP 上,此时,被连接到 LWP 上的线程便具有了内核支持线程的所有属性。 3.2 重点难点学习提示 由于进程是 OS 中最重要的基本概念,因而本章也就成为全书中最重要的一章。读者应对 以下几个重点、难点问题进行深入的学习,切实掌握好进程和进程同步的基本概念。 3.2.1 进程的基本概念 进程既是 os 中的一个重要概念,又是系统进行资源分配和独立运行的基本单位。学习 os,首先必须理解和掌握好进程的概念,为此,应认真学习和掌握下述几个方面的内容: (1)为什么要引入进程。引入进程是为了使内存中的多道程序能够正确地并发执行。在学 习时应清楚地理解为什么程序(在未为之建立进程之前)不能与其他程序并发执行,而由 PCB、 程序段和数据段三部分组成的进程实体却能与其他进程一起并发执行。 (2)进程具有哪些基本特征。进程具有动态性、并发性、独立性、异步性和结构特征。在 学习时应较好地理解每个特征的含义和形成原因,并且要特别注意比较进程和程序这两个概 念的异同之处。 (3)进程有哪些基本状态。进程具有就绪、执行和阻塞三种基本状态。在学习时必须了解 在一个进程的生命周期中,它是如何随着自身的执行和外界条件的变化不断地在各种状态之
间进行转换的 (4)进程控制块。为了描述和控制进程,os必须为每个进程建立一个进程控制块PCB。在 学习时应了解PCB具有哪些作用,为此,在PCB中必须包含哪些内容 3.2.2进程同步的基本概念 进程同步既是0S中的一个重要概念,又是保证系统中诸进程间能协调运行的关键,故应 对它有较深入的理解,并能较熟练地运用。为此,应对下述与进程同步有关的几个基本概念有 较好的理解和掌握 (1)临界资源。临界资源是指→次仅允许一个进程访问的资源。在学习时,应了解对这种资 源应采取什么样的共享方式。 (2)临界区。进程中访问临界资源的那段代码称为临界区.显然,为了实现进程互斥地访问 临界资源,诸进程不能同时进入自己的临界区。在学习时,应了解用什么样的机制(称同步机制) 来实现进程互斥地进入自己的临界区 (3)同步机制应遵循的准则。用于实现进程同步的机制有多种,但它们都应遵循”空闲让进 、"忙则等待"、"有限等待″和″让权等待”;四个准则。读者必须清楚,为什么要同时满足这四 条准则,如违背了其中的基本准则,其后果是什么。 3.2.3信号量机制及其应用 信号量机制是一种卓有成效的进程同步机制,它已被广泛地应用于各种类型的0S中。因 此,必须对下述几个与信号量有关的内容有较深刻的理解和掌握: (1)信号量的含义。 (2)信号量的物理意义。 (3)用信号量实现互斥。为了实现进程对临界资源的互斥访问,需为每类临界资源设置初值 为1的互斥信号量 mutex。在学习时,应清楚在进入临界区前或退出临界区后应对 mutex分别 执行什么操作,为什么对 mutex的P和Ⅴ操作必须成对出现,如少了其中的P操作或V操作, 会对互斥算法产生什么样的影响 (4)用信号量实现前趋关系。为实现前驱关系Pi→Pj,可为它们设置一个初值为0的信号量 S。在学习时,应清楚对S的P操作和Ⅴ操作应分别安排在什么位置,同时必须注意P(S)操作 和V(S)操作也必须成对出现 (5)经典进程的同步问题 我们以生产者一消费者为例,来说明学习此重点问题时应了解和掌握些什么。 ①生产者一消费者问题是用于解决一群生产者和消费者之间的进程互斥和进程同步问 题。在学习时首先应了解哪些资源属于临界资源,并为它们设置了哪些信号量,信号量的初值 应如何设置;其次,应了解哪些地方需要同步,并需为它们设置哪些信号量,信号量的初值又应 如何设置等。 (2)如何实现进程互斥。为实现对缓冲池的互斥访问,应为它设置一互斥信号量 mutex,读者 应在生产者进程和消费者进程中都能找到成对的用于实现互斥的P( mutex)和v( mutex)操作 ③如何实现进程同步。为实现进程同步,应为缓冲池设置表示缓冲区空和满的 empty和 ful1信号量,读者应在相互合作的进程中找到成对的P( empty)和v( empty)操作,成对的 P(fu11)和V(ful1)操作 ④对程序的阅读方式。由于生产者-消费者问题属于并发执行程序,因此在阅读时可采取 交替阅读的方式。我们可以先从任一程序(如生产者)开始阅读,当它因P操作失败而阻塞时, 该程序便不能继续往下运行,此时,可去阅读消费者程序;而当消费者唤醒阻塞的生产者,或者 消费者因P失败而受阻时,则又可返回到生产者程序继续阅读。 3.2.4消息传递通信机制 无论是单机系统、多机系统,还是计算机网络中,消息传递机制都是一种使用十分广泛的进
间进行转换的。 (4)进程控制块。为了描述和控制进程,os 必须为每个进程建立一个进程控制块 PCB。在 学习时应了解 PCB 具有哪些作用,为此,在 PCB 中必须包含哪些内容。 3.2.2 进程同步的基本概念 进程同步既是 OS 中的一个重要概念,又是保证系统中诸进程间能协调运行的关键,故应 对它有较深入的理解,并能较熟练地运用。为此,应对下述与进程同步有关的几个基本概念有 较好的理解和掌握: (1)临界资源。临界资源是指→次仅允许一个进程访问的资源。在学习时,应了解对这种资 源应采取什么样的共享方式。 (2)临界区。进程中访问临界资源的那段代码称为临界区.显然,为了实现进程互斥地访问 临界资源,诸进程不能同时进入自己的临界区。在学习时,应了解用什么样的机制(称同步机制) 来实现进程互斥地进入自己的临界区。 (3)同步机制应遵循的准则。用于实现进程同步的机制有多种,但它们都应遵循"空闲让进 "、"忙则等待"、"有限等待"和"让权等待";四个准则。读者必须清楚,为什么要同时满足这四 条准则,如违背了其中的基本准则,其后果是什么。 3.2.3 信号量机制及其应用 信号量机制是一种卓有成效的进程同步机制,它已被广泛地应用于各种类型的 OS 中。因 此,,必须对下述几个与信号量有关的内容有较深刻的理解和掌握: (1)信号量的含义。 (2)信号量的物理意义。 (3)用信号量实现互斥。为了实现进程对临界资源的互斥访问,需为每类临界资源设置初值 为 1 的互斥信号量 mutex。在学习时,应清楚在进入临界区前或退出临界区后应对 mutex 分别 执行什么操作,为什么对 mutex 的 P 和 V 操作必须成对出现,如少了其中的 P 操作或 V 操作, 会对互斥算法产生什么样的影响。 (4)用信号量实现前趋关系。为实现前驱关系 Pi→Pj,可为它们设置一个初值为 0 的信号量 S。在学习时,应清楚对 S 的 P 操作和 V 操作应分别安排在什么位置,同时必须注意 P(S)操作 和 V(S)操作也必须成对出现。 (5)经典进程的同步问题 我们以生产者一消费者为例,来说明学习此重点问题时应了解和掌握些什么。 ①生产者一消费者问题是用于解决一群生产者和消费者之间的进程互斥和进程同步问 题。在学习时首先应了解哪些资源属于临界资源,并为它们设置了哪些信号量,信号量的初值 应如何设置;其次,应了解哪些地方需要同步,并需为它们设置哪些信号量,信号量的初值又应 如何设置等。 ⑵如何实现进程互斥。为实现对缓冲池的互斥访问,应为它设置一互斥信号量 mutex,读者 应在生产者进程和消费者进程中都能找到成对的用于实现互斥的 P(mutex)和 V(mutex)操作。 ③如何实现进程同步。为实现进程同步,应为缓冲池设置表示缓冲区空和满的 empty 和 full 信号量,读者应在相互合作的进程中找到成对的 P(empty)和 V(empty)操作,成对的 P(fu11)和 V(full)操作。 ④对程序的阅读方式。由于生产者-消费者问题属于并发执行程序,因此在阅读时可采取 交替阅读的方式。我们可以先从任一程序(如生产者)开始阅读,当它因 P 操作失败而阻塞时, 该程序便不能继续往下运行,此时,可去阅读消费者程序;而当消费者唤醒阻塞的生产者,或者 消费者因 P 失败而受阻时,则又可返回到生产者程序继续阅读。 3.2.4 消息传递通信机制 无论是单机系统、多机系统,还是计算机网络中,消息传递机制都是一种使用十分广泛的进
程通信机制,必须了解以下几个问题 (1)什么是消息传递通信机制。这是指以格式化的消息为进程间数据交换单位的进程通信 方式,在学习时应了解通常在一个消息中应包含哪几方面的内容,定长格式的消息和变长格式 的消息分别具有什么优缺点。 (2)消息传递通信机制有哪几种实现方式。消息传递通信机制有直接通信和间接通信两种 实现方式,在学习时应注意比较它们在原语的提供、通信链路的建立、通信的实时性等方面的 异同。 (3)如何协调发送进程和接收进程。为了使诸进程间能协调地进行通信,必须对进程通信的 收、发双方进行进程同步,在学习时应了解常用的同步方式有哪些,它们分别适用于何种场合。 (4)消息缓冲队列通信机制。消息队列通信机制是一种常用的直接通信方式,在学习时应较 好地理解它是如何在诸进程间实现互斥和同步的,其发送和接收过程又是如何完成的 3.2.5线程的基本概念 线程在操作系统领域中是一个非常重要的机制和技术,它能有效地提高系统的性能。目 前,不仅在操作系统中,而且在数据库管理系统和其他应用软件中,都普遍引入了线程的概念。 应对下述几个问题有较好的理解 (1)为什么要引入线程。在学习时,读者必须清晰地认识到,为什么进程的并发执行需要付 出较大的时空开销,这对系统的并发程度又将产生什么样的影响:而线程机制是如何解决上述 问题的,它带来了哪些好处。 (2)线程具有哪些特征。线程实体具有轻型、可独立运行、可共享其所隶属的进程所拥有 的资源等特征。在学习时,应了解线程自己为什么还必须拥有少量的私有资源,并注意在并发 性、调度性、拥有资源和系统开销等方面对多线程0S中的线程和进程进行比较 (3)如何创建和终止线程。在学习时应了解应用程序是如何创建线程和终止线程的,还应 注意比较线程的创建和终止与传统的进程的创建和终止有什么异同之处 (4)内核支持线程和用户级线程 线程按其实现方式可分为内核支持线程和用户级线程两类。在学习时应了解以下两个方面 的内容: ①什么是内核支持线程。内核支持线程的TCB被保存在核心空间中,它的运行需获得内核 的支持。在学习时,必须了解内核支持线程的创建、撤消和切换等功能是如何实现的,内核支 持线程有哪些优点,又有哪些缺点。 ②什么是用户级线程。用户级线程是在用户空间实现的。在学习时,必须了解用户级线程 有哪些优点,通过用户空间的线程库(即运行时系统)来实现用户级线程有哪些不足之处,而将 用户级线程和核心支持线程结合起来(即内核控制的用户线程)又能带来什么样的好处 (5)进程和线程的关系 (1)线程是进程的一个组成部分。一个进程可以有多个线程,而且至少有一个可执行线程。 (2)进程的多个线程都在进程的地址空间内活动。 (3)资源是分给进程的,而不是分给线程的线程需要资源时,系统从进程的资源配额中扣 除并分配给它 (4)处理机调度的基本单位是线程。线程之间竞争处理机,真正在处理机上运行的是线程 3.3典型问题分析和解答 1.在操作系统中为什么要引入进程概念?它会产生什么样的影响? 答:在操作系统中引入进程概念,是为了实现多个程序的并发执行。传统的程序不能与其 他程序并发执行,:只有在为之创建进程后,才能与其他程序(进程)并发执行。这是因为并发执 行的程序(即进程)是"停停走走″地执行,只有在为它创建进程后,在它停下时,方能将其现场
程通信机制,必须了解以下几个问题: (1)什么是消息传递通信机制。这是指以格式化的消息为进程间数据交换单位的进程通信 方式,在学习时应了解通常在一个消息中应包含哪几方面的内容,定长格式的消息和变长格式 的消息分别具有什么优缺点。 (2)消息传递通信机制有哪几种实现方式。消息传递通信机制有直接通信和间接通信两种 实现方式,在学习时应注意比较它们在原语的提供、通信链路的建立、通信的实时性等方面的 异同。 (3)如何协调发送进程和接收进程。为了使诸进程间能协调地进行通信,必须对进程通信的 收、发双方进行进程同步,在学习时应了解常用的同步方式有哪些,它们分别适用于何种场合。 (4)消息缓冲队列通信机制。消息队列通信机制是一种常用的直接通信方式,在学习时应较 好地理解它是如何在诸进程间实现互斥和同步的,其发送和接收过程又是如何完成的。 3.2.5 线程的基本概念 线程在操作系统领域中是一个非常重要的机制和技术,它能有效地提高系统的性能。目 前,不仅在操作系统中,而且在数据库管理系统和其他应用软件中,都普遍引入了线程的概念。 应对下述几个问题有较好的理解: (1)为什么要引入线程。在学习时,读者必须清晰地认识到,为什么进程的并发执行需要付 出较大的时空开销,这对系统的并发程度又将产生什么样的影响:而线程机制是如何解决上述 问题的,它带来了哪些好处。 (2)线程具有哪些特征。线程实体具有轻型、可独立运行、可共享其所隶属的进程所拥有 的资源等特征。在学习时,应了解线程自己为什么还必须拥有少量的私有资源,并注意在并发 性、调度性、拥有资源和系统开销等方面对多线程 OS 中的线程和进程进行比较。 (3)如何创建和终止线程。在学习时应了解应用程序是如何创建线程和终止线程的,还应 注意比较线程的创建和终止与传统的进程的创建和终止有什么异同之处。 (4)内核支持线程和用户级线程 线程按其实现方式可分为内核支持线程和用户级线程两类。在学习时应了解以下两个方面 的内容: ①什么是内核支持线程。内核支持线程的 TCB 被保存在核心空间中,它的运行需获得内核 的支持。在学习时,必须了解内核支持线程的创建、撤消和切换等功能是如何实现的,内核支 持线程有哪些优点,又有哪些缺点。 ②什么是用户级线程。用户级线程是在用户空间实现的。在学习时,必须了解用户级线程 有哪些优点,通过用户空间的线程库(即运行时系统)来实现用户级线程有哪些不足之处,而将 用户级线程和核心支持线程结合起来(即内核控制的用户线程)又能带来什么样的好处。 (5)进程和线程的关系 (1)线程是进程的一个组成部分。一个进程可以有多个线程,而且至少有一个可执行线程。 (2)进程的多个线程都在进程的地址空间内活动。 (3)资源是分给进程的,而不是分给线程的。线程需要资源时,系统从进程的资源配额中扣 除并分配给它。 (4)处理机调度的基本单位是线程。线程之间竞争处理机,真正在处理机上运行的是线程。 3.3 典型问题分析和解答 1.在操作系统中为什么要引入进程概念?它会产生什么样的影响? 答:在操作系统中引入进程概念,是为了实现多个程序的并发执行。传统的程序不能与其 他程序并发执行,:只有在为之创建进程后,才能与其他程序(进程)并发执行。这是因为并发执 行的程序(即进程)是"停停走走"地执行,只有在为它创建进程后,在它停下时,方能将其现场
信息保存在它的PCB中,待下次被调度执行时,再从PCB中恢复CPU现场而继续执行,而传统的 程序却无法满足上述要求。 建立进程所带来的好处是使多个程序能并发执行,这极大地提高了资源利用率和系统吞 吐量。但管理进程也需付出一定的代价,包括进程控制块及协调各运行的机构所占用的内存空 间开销,以及为进行进程间的切换、同步及通信等所付出的时间开销。 2.作业、进程和程序之间的区别和联系 答:(1)作业、进程和程序之间的联系:一个作业通常包括程序、数据和操作说明书三 部分。每一个进程由PCB、程序和数据集合组成,这说明程序是进程的一部分,是进程的实体 因此,一个作业可划分为若干个进程来完成,而每个进程又都有其实体一程序和数据集合。 (2)进程和程序的区别 ①进程是程序的一次执行,属于动态概念,而程序是一组有序的指令,是一种静态概念。但 进程离开了程序也就失去了存在的意义。 ②一个进程可以执行一个或几个程序z反之,同一程序可能由几个进程同时执行。 ③程序可作为软件资源长期保留,而进程是程序的一次执行过程,是暂时的。进程具有生 命期 ④进程具有并发性,能与其它进程并发运行。而程序不具备这种特征 ⑤进程是一个独立的运行单位,也是系统进行资源分配和调度的一个独立单位。因此,进 程具有独立性,但有时进程间又具有相互制约性 注意:说进程是一个独立的运行单位,是指在不具有线程的系统中而言的,在引入线程的系统 中,进程不再是运行的基本单位,只是资源分配的基本单位。 3.PCB的作用是什么?为什么说PCB是进程存在的惟一标志? 答:进程控制块的作用,是使一个在多道程序环境下,不能独立运行的程序,成为一个能独 立运行的基本单位、一个能与其他进程并发执行的进程 在创建进程时,系统将为它配置一个PCB:在进行进程调度时,系统将根据PCB中的状态和 优先级等信息来选择新进程,然后将老进程的现场信息保存到它的PCB中,再根据新进程PCB 中所保存的处理机状态信息来恢复运行的现场:执行中的进程,如果需要访问文件或者需要与 合作进程实现同步或通信,则也都需要访问PCB:当进程因某种原因而暂停执行时,也必须将 断点的现场信息保存到它的PCB中:当进程结束时,系统将回收它的PCB。可见,在进程的整个 生命周期中,系统总是通过其PCB对进程进行控制和管理,亦即系统是根据其PGB而不是任何 别的什么而感知到一进程的存在,所以说,PCB是进程存在的惟一标志 4.某系统的进程状态转换图如图3.1所示,请说明: 执行 就绪 阻塞 (1)引起各种状态转换的典型事件有哪些? (2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作 次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1? (3)试说明是否会发生下述因果转换
信息保存在它的PCB中,待下次被调度执行时,再从PCB 中恢复CPU现场而继续执行,而传统的 程序却无法满足上述要求。 建立进程所带来的好处是使多个程序能并发执行,这极大地提高了资源利用率和系统吞 吐量。但管理进程也需付出一定的代价,包括进程控制块及协调各运行的机构所占用的内存空 间开销,以及为进行进程间的切换、同步及通信等所付出的时间开销。 2.作业、进程和程序之间的区别和联系 答:(1)作业、进程和程序之间的联系:一个作业通常包括程序、数据和操作说明书三 部分。每一个进程由 PCB、程序和数据集合组成,这说明程序是进程的一部分,是进程的实体。 因此,一个作业可划分为若干个进程来完成,而每个进程又都有其实体一程序和数据集合。 (2)进程和程序的区别 ①进程是程序的一次执行,属于动态概念,而程序是一组有序的指令,是一种静态概念。但 进程离开了程序也就失去了存在的意义。 ②一个进程可以执行一个或几个程序 z 反之,同一程序可能由几个进程同时执行。 ③程序可作为软件资源长期保留,而进程是程序的一次执行过程,是暂时的。进程具有生 命期。 ④进程具有并发性,能与其它进程并发运行。而程序不具备这种特征。 ⑤进程是一个独立的运行单位,也是系统进行资源分配和调度的一个独立单位。因此,进 程具有独立性,但有时进程间又具有相互制约性。 注意:说进程是一个独立的运行单位,是指在不具有线程的系统中而言的,在引入线程的系统 中,进程不再是运行的基本单位,只是资源分配的基本单位。 3.PCB 的作用是什么?为什么说 PCB 是进程存在的惟一标志? 答:进程控制块的作用,是使一个在多道程序环境下,不能独立运行的程序,成为一个能独 立运行的基本单位、一个能与其他进程并发执行的进程。 在创建进程时,系统将为它配置一个PCB:在进行进程调度时,系统将根据PCB中的状态和 优先级等信息来选择新进程,然后将老进程的现场信息保存到它的 PCB 中,再根据新进程 PCB 中所保存的处理机状态信息来恢复运行的现场:执行中的进程,如果需要访问文件或者需要与 合作进程实现同步或通信,则也都需要访问 PCB:当进程因某种原因而暂停执行时,也必须将 断点的现场信息保存到它的 PCB 中:当进程结束时,系统将回收它的 PCB。可见,在进程的整个 生命周期中,系统总是通过其 PCB 对进程进行控制和管理,亦即系统是根据其 PCB 而不是任何 别的什么而感知到一进程的存在,所以说,PCB 是进程存在的惟一标志。 4.某系统的进程状态转换图如图 3.1 所示,请说明: 2 1 3 4 (1)引起各种状态转换的典型事件有哪些? (2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作 一次状态转换。在什么情况下,当一个进程发生转换 3 时能立即引起另一个进程发生转换 1? (3)试说明是否会发生下述因果转换: 执行 就绪 阻塞
解:(1)在本题所给的进程状态转换图中,存在四种状态转换。当进程调度程序从就绪对列中选 取一个进程投入运行时引起转换1:正在执行的进程如因时间片用完而被暂停执行就会引起 转换2:正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/0)则会引起 转换3;当进程等待的事件发生时(如I/0完成)则会引起转换4 (2)如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1。这是因为 个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调 度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程 的转换3能立即引起另一个进程的转换1 (3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转 换称为因,后一个转换称为果,这两个转换称为因果转换。当然这种因果关系并不是什么时候 都能发生,而是在一定条件下才会发生。 2→1:当某进程发生转换2时,就必然引起另一进程的转换1。因为当发生转换2时,正 在执行的进程从执行状态变为就绪状态,进程调度程序必然会从就绪队列中选取一个进程投 入运行,即发生转换1。 3→2:某个进程的转换3决不可能引起另一进程发生转换2。这是因为当前执行进程从 执行状态变为阻塞状态,不可能又从执行状态变为就绪状态。 4→1:当处理机空闲且就绪队列为空时,某一进程的转换4就会引起该进程的转换1。因 为此时处理机空闲,一旦某个进程发生转换4,就意味着有一个进程从阻塞状态变为就绪状态, 因而调度程序就会将就绪队列中的此进程投入运行。 5.P1、P2、P3、P4、P5、P6、P7为一组合作进程,其前趋图如图3.2所示,试用P、V操作 描述这7个进程的同步。 图3.2说明任务启动后P1先执行,当它结束后P2、P3可以开始执行,P2完成后P4、P5 可以开始执行,P3完成后P6可以开始执行,仅当P4、P6、P6都执行完后,P7才能开始执行 为了确保这一执行顺序,设置8个同步信号量a、b、c、d、e、f、g、h分别表示进程Pl、P2 P3、P4、P5、P6是否执行完成,其初值均为0。这6个进程的同步描述如下 Var a, b, c, d, e, f, g, h: semaphore: ==0, 0, 0, 0, 0, 0, 0, 0 begin parbegin begin S1: V(a): V(b); end begin P(a): S2: V(c): V(d): end begin P(b); S3: V(e);end begin P(c): S4: V(f): end begin P(d): S5: v(g); end begin P(e): S6: V(h):end begin P(f): P(g): P(h): S7: end parend
2→1 3→2 4→1 解:(1)在本题所给的进程状态转换图中,存在四种状态转换。当进程调度程序从就绪对列中选 取一个进程投入运行时引起转换 1;正在执行的进程如因时间片用完而被暂停执行就会引起 转换 2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成 I/O)则会引起 转换 3;当进程等待的事件发生时(如 I/0 完成)则会引起转换 4。 (2)如果就绪队列非空,则一个进程的转换 3 会立即引起另一个进程的转换 1。这是因为一 个进程发生转换 3 意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调 度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程 的转换 3 能立即引起另一个进程的转换 1。 (3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转 换称为因,后一个转换称为果,这两个转换称为因果转换。当然这种因果关系并不是什么时候 都能发生,而是在一定条件下才会发生。 2→1:当某进程发生转换 2 时,就必然引起另一进程的转换 1。因为当发生转换 2 时,正 在执行的进程从执行状态变为就绪状态,进程调度程序必然会从就绪队列中选取一个进程投 入运行,即发生转换 1。 3→2:某个进程的转换 3 决不可能引起另一进程发生转换 2。这是因为当前执行进程从 执行状态变为阻塞状态,不可能又从执行状态变为就绪状态。 4→1:当处理机空闲且就绪队列为空时,某一进程的转换 4 就会引起该进程的转换 1。因 为此时处理机空闲,一旦某个进程发生转换 4,就意味着有一个进程从阻塞状态变为就绪状态, 因而调度程序就会将就绪队列中的此进程投入运行。 5.P1、P2、P3、P4、P5、P6、P7 为一组合作进程,其前趋图如图 3.2 所示,试用 P、V 操作 描述这 7 个进程的同步。 图 3.2 说明任务启动后 P1 先执行,当它结束后 P2、P3 可以开始执行,P2 完成后 P4、P5 可以开始执行,P3 完成后 P6 可以开始执行,仅当 P4、P6、P6 都执行完后,P7 才能开始执行。 为了确保这一执行顺序,设置 8 个同步信号量 a、b、c、d、e、f、g、h 分别表示进程 P1、P2、 P3、P4、P5、P6 是否执行完成,其初值均为 0。这 6 个进程的同步描述如下: Var a,b,c,d,e,f,g,h:semaphore:==0,0,0,0,0,0,0,0; begin parbegin begin S1;V(a);V(b);end a b begin P(a);S2;V(c);V(d);end begin P(b);S3;V(e);end begin P(c);S4;V(f);end c d e begin P(d);S5;V(g);end begin P(e);S6;V(h);end begin P(f);P(g);P(h);S7;end parend f g h 图 3-2 P1 1 P2 P3 P4 P5 P6 P7