2022年2022年进程 .pdf
《2022年2022年进程 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年进程 .pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、http:/操作系统概念(第六版)第四章进程更新日期: 2004-8-12 0:37 早期的计算机只允许同时运行一个程序。这个程序完全控制计算机并能够访问所有的系统资源。当今的计算机系统允许同时将多个程序载入内存并行执行。这种发展需要更稳固的控制和对各种程序更合理的分类。这些需要造就了进程 的概念,进程是执行中的程序(The process is a program in execution.) 。在现代分时系统中,一个进程是一个工作单元。操作系统越复杂,期望它能够为用户做的事情越多。虽然它主要关注用户程序的执行,但是也需要处理内核自身之外的各种系统任务。所以系统由进程集合组成:操作系统进程执
2、行系统代码,用户进程执行用户代码。通过CPU 在进程间多路复用,所有这些进程潜在的能够并行执行。通过在进程间转换CPU,操作系统可以使计算机获得更好的性能。4.1 进程概念在讨论操作系统时所遇到的一个问题是怎样定义CPU 活动。(One impediment to our discussion of operating systems is the question of what to call all the CPU activities.)批处理系统执行作业,而分时系统拥有用户程序或任务。甚至在单用户系统(如Microsoft Windows和 Macintosh OS )中,一个用户也
3、可以同时运行多个程序:一个字处理软件、网页浏览器和电子邮件包。即使用户同时只能够执行一个程序,操作系统可能需要支持其内部程序化的活动(如存储器管理)。在许多方面,这些活动是相似的,因此我们称之为进程。在本书中,术语 “作业” 和“进程” 几乎是可以交换使用的。虽然我(们) 个人更倾向于术语“进程”,但是在操作系统的主要活动被作为作业处理的一段时期内许多的操作系统理论和术语不断发展。使用公认的术语可以避免很多误解,这包括了单词job (如 job scheduling ) , 仅仅是因为 “进程” 已经取代了 “作业”。4.1.1 进程非正式的,进程是运行中的程序。进程不仅仅是程序代码,有时也称
4、之为代码段 (text section ) 。它也包含了当前的状态, 这由 程序计数器 和处理器中的寄存器表示。另外,进程通常包含了进程栈 (process stack)(如方法参数(method parameters) 、返回地址和本地变量)和一个数据段(存储全局变量)。我们强调程序本身不是进程;程序是静态实体(就像是存储在磁盘上的文件),进程是动态实体,它有一个程序计数器指明下一条要执行的指令,并且拥有一组相关的资源。虽然两个进程可能会关联到同样的程序,但仍被视为两个独立的执行序列。例如,几个用户可能会同时运行主程序的不同拷贝,用户也可能会执行多个编辑程序拷贝。那么其中的每一个都是一个独立
5、的进程,而且虽然其文本段是相同的,但是数据段不同。一个进程运行时产生多个进程也是很普遍的。我们将在4.4节讨论这些。4.1.2 进程状态在进程运行时,它会改变自身状态。进程的状态 部分由该进程的当前活动定义。每个进程可能会处于下列几种状态之一:l新:进程正被创建。l运行 : (进程的)指令正被执行。l等待 :进程正在等待发生一些事件(如I/O 完成或接收一个信号) 。l就绪 :进程正等待分配处理器。l终止 :进程结束运行。这些状态名称是任意的,各个操作系统有着不尽相同的定义。然而可以在所有的系统中找到对状态的表示。某些操作系统更好的描述了进程状态。虽然可能有多个进程处于就绪和等待状态,但是处理
6、器(不管是什么样的处理器)任意时刻只能执行一个进程。图4.1 表示了相应的状态图。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - http:/Figure 4.1 Diagram of process state 4.1.3 进程控制块操作系统通过进程控制块(PCB)表示进程,进程控制块也被称为任务控制块。图4.2 描述了一个进程控制块。它存储了某一具体进程的信息,这包括:Figure 4.2 Process control
7、block (PCB). l进程状态 :该状态可能是新、就绪、运行、等待、停止等等。l程序计数器 :该计数器指明了该进程要执行的下一条指令的地址。lCPU 寄存器 :基于计算机体系结构,这些寄存器的数量和类型很不相同。这包括了累加器、变址寄存器、栈指针、通用寄存器,以及条件信息(condition-code information) 。连同程序计数器,在 中断发生时必须要保存这些状态信息,这样便于后来进程继续正确执行(图 4.3) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2
8、 页,共 22 页 - - - - - - - - - http:/lCPU 调度信息 :包括进程优先权、指向调度队列的指针和其它的调度参数。(第六章描述进程调度。)l存储器管理信息:可能包括诸如基址寄存器和界限寄存器值、页表或段表,这取决于操作系统所选用的存储系统(第九章)。l记账信息( accounting information) :包括 CPU 数量和实时使用量、时间限制、账户数目、作业或进程数目等等。lI/O 状态信息 :包括分配给该进程的I/O 设备的列表、打开的文件的列表等等。Figure 4.3 Diagram showing CPU switch from process t
9、o process. PCB 只是存储信息,而进程间的这些信息是不同的。4.1.4 线程目前为止,进程意味着是执行单个线程的程序。例如,如果一个进程正在运行一个字处理程序,那么就会执行一个单指令线程。这个单独的控制执行序列允许进程只执行一个任务。(This single thread of control allows the process to perform only one task at one time. )例如,用户不能够在同一个进程中同时键入字符和运行拼写检查程序。许多现代操作系统扩展了进程概念,允许一个进程有多个线程。从而允许进程一次执行多个任务。第五章探讨了多线程进程(mu
10、ltithreaded process) 。4.2 进程调度多道程序设计的目标是为了保持总是有多个进程运行,以最大化CPU 利用率。分时系统的目标是为了在进程之间频繁转换CPU 以便于用户与运行的程序交互。一个单处理机系统只能够执行一个进程。如果存在更多的进程,那么其他的进程必须要等待CPU 空闲下来才能够被调度。4.2.1 调度队列名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - http:/进程进入系统之后,它们被放到作业队
11、列 里。这个队列由系统中的所有进程组成。驻留在主存储器中处与就绪状态等待执行的进程被保留在一个列表中,这个列表被称为就绪队列 。这个队列通常存储为链表。就绪队列的头部保存了指向列表中首个和最后一个PCB 的指针。我们扩展了每个PCB,使他们包含一个指针字段来指向就绪队列中的下一个PCB。操作系统也有其它的队列。当一个进程分配到CPU 时,它执行一段时间并最终退出、被中断或等待特定事件的发生(如一个I/O 请求的完成) 。在等待 I/O 请求的情况下,这样的一个请求可能会针对一个磁带驱动器或一个共享设备(如磁盘)。因为系统中有多个进程,所以磁盘可能会忙于应付其它进程的I/O 请求。因此这个进程必
12、须要等到磁盘空闲下来。等待某一特定I/O 设备的进程列表被称为设备队列。每个设备都有自己的 设备队列 (图 4.4) 。Figure 4.4 The ready queue and various I/O device queues. 一个通用的进程调度的表示法是队列状态图 (queueing diagram ) ,如图 4.5。每个矩形框表示一个队列。有两种类型的队列:就绪队列和设备队列。圆圈表示服务于队列的资源,箭头指示系统中的进程流。新进程最初被放在就绪队列中。它在就绪队列中等待,直到被选中执行(或调度 ) 。一旦进程获得了CPU 并执行,可能会发生下面的某个事件:l进程可能发出一个I/
13、O 请求,然后被放置在I/O 队列中。l进程可以创建新的子进程并等待它终止。l发生一个中断,导致进程被强行从CPU 中移出并返回就绪队列。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - http:/Figure 4.5 Queueing-diagram representation of process scheduling. 在前两种情况下,进程最终会从等待状态转换为就绪状态,并返回就绪队列中。一个进程会持续这个循环直到终止
14、执行,此时退出所有对列并释放自己的PCB 和资源。4.2.2 调度程序进程在其生命周期中于各种调度队列之间转移。为了进行调度,操作系统必须要以某种方式从这些队列里选择进程。而调度程序 负责选择进程。在批处理系统中,提交的进程数量常常要多于能够立即执行的进程数量。这些进程存储在大容量存储器(典型的是磁盘)中以备稍后执行。长程调度程序 (或作业调度程序)从这个池中选择进程并将其载入内存。 近程调度程序(或 CPU 调度程序)从这些进程中选择就绪进程并为其中某个分配CPU。这两种调度程序的主要区别在于他们的运行频率。短程调度程序必须要频繁的为CPU 选择一个新进程。一个进程可能在等待一个I/O 请求
15、之前仅仅执行数毫秒。通常短程调度程序至少每隔100 毫秒执行一次。因为两次执行的间隔时间很短,所以短程调度程序必须要快速。如果它需要10 毫秒来决定一个进程,而进程运行100 毫秒,那么 10/(100 + 10) = 9% 的 CPU 仅仅被用于调度工作 (或者说是浪费在调度工作上)。另一方面,长程调度程序就不那么频繁执行了。在系统中,可能数分钟才会创建一个新进程。长程调度程序控制着 多道程序度 内存中(同时存在)的进程数量。如果多道程序度是固定的,那么进程创建的平均频率要与进程(终止)离开系统的平均频率相同。如此,长程调度程序可能仅仅在进程离开系统的时候被调用。因为两次执行的间隔时间较长,
16、所以长程调度程序能够提供更多的时间来选择一个进程。长程调度程序必须要小心选择。通常,大多数的进程是I/O 繁忙型( I/O bound )或 CPU 繁忙型( CPU bound) 。I/O 繁忙型 进程在 I/O 上耗费的时间要多于在计算上耗费的。另一方面,CPU 繁忙型 进程很少产生 I/O 请求,与I/O 繁忙型进程相比更多的时间消耗在计算上。长程调度程序应该选择一个由I/O 繁忙型和 CPU 繁忙型进程组成的进程混合集 (process mix ) 。如果所有的进程都是I/O 繁忙型的,那么就绪队列几乎总是空的,而且短程调度程序几乎无事可做。如果所有的进程都是CPU 繁忙型的,那么I/
17、O 等待队列几乎总是空的, 设备将处于空闲状态,系统将失去平衡。性能最好的系统要有一个CPU 繁忙型和I/O 繁忙型进程的组合。有些系统中的长程调度程序可能没有或很小。例如,分时系统(如UNIX )常常没有长程调度程序,只是简单的为短程调度程序把新进程放置到内存中。这些系统的稳定性取决于实际的条件限制(如可用的终端的数量)或用户的自我调节。如果性能下降到不可接受的地步,只是简单的使部分用户退出。有些操作系统(如分时系统)可能会引入另外一种中间级的调度。图4.6 描述了这种 中程调度程序,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
18、 - 名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - - - http:/将进程从内存中移除(不再占用CPU)并降低了多道程序度。稍后再把进程重新载入内存并从停止的地方继续运行。这种机制被称为交换 。通过 中程调度程序,进程被换出,然后被换入。为了改善进程混合集,或者内存需求过多或者太多空闲了,就有必要进行交换。第九章讨论交换技术。Figure 4.6 Addition of medium-term scheduling to the queueing diagram. 4.2.3 上下文转换要将 CPU 转向另一个进程需要保存当前进程的状态并载
19、入为新进程存储的状态。这个工作被称为上下文转换 。一个进程的 上下文 表示在进程的PCB 中;它包括了CPU 寄存器值、进程状态(图4.1)和内存管理信息。 当上下文转换发生时,内核存储当前进程PCB 中的上下文信息并载入被调度运行的新进程存储的上下文信息。上下文转换时间是纯粹的开销,因为在转换进行时系统不能做任何有用的工作。根据内存速度、必须要拷贝的寄存器数量和是否存在用于上下文转换的专门指令(例如有独立的指令来载入或存储所有的寄存器) ,转换速度与具体的机器有关。典型的速度范围在1 到 1000 毫秒之间。上下文转换时间在很大程度上取决于硬件的支持。例如,有些处理器(如Sun UltraS
20、PARC)提供了多个寄存器组。上下文转换只是将指针指向当前寄存器组。当然,如果活动的进程太多,超过了寄存器组的数目,那么就需要像以前那样将寄存器里面的数据转移到内存中了。(Of course, if active processes exceed register sets, the system resorts to copying register data to and from memory, as before. )而且,操作系统越复杂,上下文转换中的工作就越多。就像我们将在第九章中看到的那样,高级内存管理在上下文转换中需要处理额外的数据。例如,必须要保存当前进程的地址空间,因为这个
21、地址空间将作为下一个任务的地址空间准备使用。怎样保存地址空间和保存它需要作什么工作基于操作系统的存储器管理策略。就像我们将在第五章中看到的那样,上下文转换成了一个性能瓶颈,只要有可能,程序就会使用新的结构(线程)来避免。4.3 进程上的操作进程在系统中能够并行执行,并且它们必须要动态的创建和删除。因此,操作系统必须要提供进程创建和终止的机制(或方法)。4.3.1 进程的创建进程在运行期间通过创建进程系统调用可以创建多个新进程。创建进程的进程(the creating process)被称为 父进程( parent ) ,而新进程被称为子进程( children ) 。每个新进程都可以创建另外的
22、进程,从而形成一个进程树(图4.7) 。通常一个进程需要特定的资源(如CPU 时间、内存、文件、I/O 设备)。当一个进程创建了一个子进程时,这个子进程可能直接从操作系统获取它所需的资源或者获取父进程资源的一部分。父进程可能必须要把自己的资源分配给它的子进程,也可能在它的若干个子进程之间共享某些资源(如内存或文件)。通过限制子进程只能够获取父进程的部分资源可以阻止进程通过创建过多的子进程而导致系统过载。当一个进程被创建时,除了获取各种物理和逻辑资源外,初始化数据(或输入)可能也要从父进程传名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
23、- - 名师精心整理 - - - - - - - 第 6 页,共 22 页 - - - - - - - - - http:/送给子进程。例如,考虑一个进程,它的功能是在终端屏幕上显示一个文件(Fl)的状态信息。当它被创建时,它将获得文件Fl的名称(作为来自其父进程的一个输入)并且将利用这个数据来获取所需的信息。它可能也会获取输出设备的名称。有些操作系统将资源传递给子进程。在这样的系统中,新进程可能会获取两个打开文件,Fl和终端设备,并且可能只需在二者之间传输数据。Figure 4.7 A tree of processes on a typical UNIX system. 当一个进程创建了一
24、个新进程时,会以两种可能的方式执行:1.父进程(继续执行)与子进程并行执行。2.父进程等待部分或全部子进程终止执行。新进程的地址空间也有两种可能:1.子进程是父进程的一个拷贝。(The child process is a duplicate of the parent process. )2.载入一个程序运行。 (The child process has a program loaded into it. )为了阐明这两种不同的实现,让我们参考UNIX 操作系统。在UNIX 中,进程通过 进程标识符 来识别,进程标识符是一个唯一的整数。通过fork 系统调用创建一个新进程。新进程由原始进程
25、的地址空间的一个拷贝构成。 (The new process consists of a copy of the address space of the original process.)这种机制允许父进程简易的与子进程通信。两个进程(父进程和子进程)在fork 系统调用之后继续执行,但是有一点不同:在新(子)进程中fork 的返回码是零,而父进程中fork 的返回码是子进程的进程号(非零)。一般父进程或子进程(为了开始一个新程序)在fork 系统调用之后调用execlp 系统调用来载入一个新程序到自己的地址空间中。execlp 系统调用将一个二进制文件载入内存(销毁包含着execlp 系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年进程 2022 进程
限制150内