第2章进程的描述与控制
2.1前趋图和程序执行
2.1.1程序顺序执行
一个较大的程序通常都由若干个程序段组成,程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
程序的各操作间是依序执行的,程序与程序之间是串行执行的,这种执行程序的方式称为程序的顺序执行。
2.1.2 顺序执行程序的特点:
•顺序性:程序在CPU上是顺序执行的。
•封闭性:只有程序本身才能改变程序的运行环境。
•可再现性:程序执行的速度与最后的结果无关。
2.1.2 程序并发执行的特征
间断性
并发程序之间相互制约。执行——暂停执行——执行。
失去封闭性
多个程序共享全机资源,执行状态受外界因素影响。
不可再现性
程序经过多次执行后,虽然其执行时的环境和初始条件都相同,但得到的结果却各不相同。
2.2进程的定义和特征
2.2.1 进程的特点:
进程是计算机程序运行时的抽象(静态部分:程序运行需要的代码和数据;动态部分:程序运行期间的状态(程序计数器、堆、栈……))
进程具有独立的虚拟地址空间(每个进程都具有“独占全部内存”的假象;内核中同样包含内核栈和内核代码、数据)
进程的定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个 独立单位
进程控制块(process control block, PCB
) :专门的数据结构,与进程一一对应。
2.2.2 进程的特征
动态性(最基本的特征):进程由创建而产生, 由调度而执行,由 撤销而消亡
并发性:一段时间内同 时运行
独立性:进程实体是一个能独立运行的基本单位;是系统中独立获得资源 和独立调度的基本单位
异步性:按各自独立的、 不可预知的速度 向前推进
2.2.3 进程和程序的区别
进程是程序的一个实例、一次执行、是活动的、在内存中的; 程序是静态的、在外存中的、是进程的代码部分
2.2.4 进程的状态及转换
创建、阻塞、就绪、运行、终止、挂起、激活
就绪状态
• 一个较大的程序通常都由若干个程序段组成
• 程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
执行状态
:已获得CPU,正在执行的状态
• 单处理机:一个进程处于执行状态
• 多处理机:多个进程处于执行状态
阻塞状态
• 正在执行的进程由于发生某事件而暂时无法继续执行的状态
• 典型事件:请求l/O、申请缓冲空间
• 根据阻塞原因,设置多个阻塞队列
创建状态
申请一个空白PCB;填写PCB;分配资源;设置就绪状态插入就绪队列
终止状态
等待OS善后; 收回PCB
**挂起:**引入挂起操作的原因,是基于系统和用户的如下需要: (1) 终端用户的需要。 (2) 父进程请求。 (3) 负荷调节的需要。 (4) 操作系统的需要
激活:(1) 活动就绪→静止就绪。 (2) 活动阻塞→静止阻塞。 (3) 静止就绪→活动就绪。 (4) 静止阻塞→活动阻塞。
2.3. 进程控制块PCB(1)
PCB是进程的一部分,是操作系统中最重要的记录型数据结构,是进程存在的唯一标志,常驻内存。
PCB的作用:
作为独立运行基本单位的标志;实现间断性运行方式; 提供进程管理需要的信息; 提供进程调度需要的信息; 实现与其他进程的同步与通信
。
2.3.1 进程控制块PCB(2)
PCB的信息
① 进程标识符 ② 处理机状态 ③ 进程调度信息 ④ 进程控制信息
PCB的组织方式
① 线性方式 ② 链接方式 ③ 索引方式
2.1.10 PCB链接组织方式
2.4进程控制
2.4.1 进程创建
2.4.2 进程终止
2.4.3 进程的阻塞与唤醒
2.5 进程通信
(1)独立进程存在的问题
①相同的功能却要在每个进程中独自写一遍:大量重复实现
②不同的进程侧重点不同,因此相同的功能在不同的进程间可能效率不同,无法做到优势互补:低效实现
③即使A进程获得了计算结果,B进程由于和A完全独立,所以还是需要自己再算一遍:没有信息共享
(2)为了解决上述问题,我们提出了进程协作:
①模块化: 数据库单独在一个进程中,可以被复用
②加速计算: 不同进程专注于特定的计算任务,性能更好
③信息共享: 直接共享已经计算好的数据,避免重复计算
进程的协作依赖于进程间通信
,通信的内容一般叫做“消息”
进程间通信: 两个(或多个)不同的进程,通过内核或其他共 享资源进行通信,来传递控制信息或数据
低级进程通信 :进程的同步和互斥(效率低 一次只能存一个/放一个、通信对用户不透明)
高级进程通信:(使用方便 OS隐藏了实现进程通信的具体细节 、高效地传送大量数据 用户可直接利用高级通信命令(原语)高效地传送大量的数据。)
举例:JAVA语言的Synchronized多线程锁
(3)进程通信的类型:
共享存储器系统
(基于共享数据结构的通信方式(效率低)、基于共享存储区的通信方式(高级))
管道通信(
用于连接一个读进程和一个写进程以实现它们之间通信的 一个共享文件,又名pipe文件),拥有互斥、同步、确定对方存在才通信
的能力
管道的特点:单向通信,当缓冲区满时阻塞;一个管道有且只能有两个端口: 一个输入,一个输出;数据不带类型,即字节流
Unix 管道
(管道是Unix等宏内核系统中非常重要的进程间通信机制、是两个进程间的一根通信通道) 示例:常见命令 ls | grep
消息传递系统
(直接通信方式、间接通信方式(通过邮箱))
客户机-服务器系统(计算机间的进程通信)(套接字(Socket)、远程过程调用(RPC)和远程方法调用(RMI,Java))
(4)消息传递通信的实现方式
直接通信方式
发送原语:send(receiver, message) 、接收原语:receive(sender, message)
进程的同步方式 在进程之间进行通信时,同样 需要有进程同步机制,以使诸进程 间能协调通信。最常用的是:发送进程不阻塞,接 收进程阻塞。
间接通信方式
:通过信箱来完成
发送原语:send(mailbox, message) 、接收原语:receive(mailbox, message)
分类:私用邮箱,公共邮箱,共享邮箱
2.6 线程的基本概念
1.线程的不足:创建进程的开销较大、隔离性过强、内部无法支持并行
2.进程是拥有资源
的基本单位(传统进程称为重型进程)
线程作为调度和分派
的基本单位(又称为轻型进程)
3.线程只包含运行时的状态(
静态部分由进程提供、包括了执行所需的最小状态)
一个进程可以包含多个线程
(每个线程共享同一地址空间、允许进程内并行)
4.进程 VS 线程
基本单位:在引入线程的OS中,线程作为调度和分派的基本单位,进程作为资源拥有的 基本单位;
切换:同一进程线程的切换不会引起进程切换;但一个进程中的线程切换到另一个进程中的线程将会引起进程切换
并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的 多个线程之间,也可并发执行。
拥有资源:进程:是系统中拥有资源的一个基本单位,它可以拥有资源,许多个线程共享其隶属进程所拥有的资源。
线程:本身不拥有系统资源,仅有一点保证独立运行的资源;
独立性:同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
系统开销:线程切换的代价远低于进程切换的代价;同一进程中的多个线程之间的同步和通信也比进程的简单
支持性:线程支持多处理机系统
5.线程的状态:
执行态、就绪态、阻塞态。转换过程和进程的一样
6.线程控制块(TCB)
2.7.线程的实现
1.实现方式:
内核支持线程KST、用户级线程ULT
2.具体实现
:内核支持线程的实现(利用系统调用)、用户级线程的实现(借助中间系统)
内核空间实现:内核本身可采用多线程技术,提高执行速度和效率、线程的切换比较快,开销小。但是对用户线程切换,开销较大
用户空间实现:调度算法可以是进程专用的、线程的实现与OS平台无关、不需要切换到内核空间。但是不能利用多处理机进行多重处理的优点