第2章(Part II)进程的描述与控制
冯诺依曼体系结构:存储程序计算机,将计算本身进行分解并按时序串行执行。
并发是针对单核CPU 提出的
并行是针对多核CPU 提出的
单核CPU同一时刻只能运行一个程序,各个程序只能并发的执行(交替的使用CPU)!
多核CPU同一时刻可以执行多个程序,多个程序可以并行的执行(同时发生运行)
程序顺序执行
一个较大的程序通常都由若干个程序段组成
程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
前趋图
有向无循环图,用于描述进程之间执行的先后顺序
结点表示进程或程序段,有向边表示前趋关系
间断性:并发程序之间相互制约。执行——暂停执行——执行。
失去封闭性:多个程序共享全机资源。执行状态受外界因素影响。
不可再现性:程序经过多次执行后,虽然其执行时的环境和初始条件都相同,但得到的结果却各不相同。
几种典型定义
进程是程序的一次执行。
进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
进程定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征
进程同程序的差别
} 进程是程序的执行,属于动态,程序是静态的
} 进程的存在是暂时的,程序的存在是永久的
} 进程=程序+数据+PCB (进程控制块,process control block),即进程是一个程序及其数据在处理机上顺序地执行时所发生的活动。
} 一个程序可以对应多个进程
} 一个进程可以包含多个程序
进程的状态及转换
创建状态(new)
就绪状态(ready):只需要再获得CPU
一个较大的程序通常都由若干个程序段组成
程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
执行状态(running):已获得CPU,正在执行的状态
单处理机:一个进程处于执行状态
多处理机:多个进程处于执行状态
阻塞状态(block / waiting):进程等待某些事件发生的状态
正在执行的进程由于发生某事件而暂时无法继续执行的状态
典型事件:请求I/O、申请缓冲空间
根据阻塞原因,设置多个阻塞队列
终止状态(terminated)
引入挂起操作后三个进程状态的转换
} 活动就绪——〉静止就绪(挂起)
} 活动阻塞——〉静止阻塞(挂起)
} 静止就绪——〉活动就绪(激活)
} 静止阻塞——〉活动阻塞(激活)
} 静止阻塞——〉静止就绪
进程控制块PCB
PCB是进程的一部分,是操作系统中最重要的记录型数据结构,是进程存在的唯一标志,常驻内存。
PCB的作用:
➢ 作为独立运行基本单位的标志;
➢ 能实现间断性运行方式;
➢ 提供进程管理所需要的信息;
➢ 提供进程调度所需要的信息;
➢ 实现与其他进程的同步与通信。
PCB的信息
进程标识信息:PID, PPID
➢ 用于惟一地标识一个进程。一个进程通常有两种标识符: 1)内部标识符,数字标识符;2)外部标识符,它由创建者提供,描述进程的家族关系。
➢ 处理器状态信息:PC, PSW, 堆栈指针、寄存器
➢ 进程调度信息:与进程调度和进程对换有关的信息,包括:进程状态、进程优先级、进程调度所需的其它信息、事件
➢ 进程控制信息:程序和数据的地址、进程同步和通信机制、资源清单、链接指针
思考:PCB是进程存在的唯一标志 为什么?
因为PCB 1、包含了进程的描述信息和控制信息,2、是进程的动态特征的集中反映,3、系统根据PCB而感知某一进程的存在,所以PCB是进程存在的唯一标志。(只有在多任务即多道批处理系统中,才可能建立PCB结构,该系统才具有进程活动)
进程创建过程:① 申请空白PCB;② 分配所需资源;③ 初始化PCB;④ 插入就绪队列。
进程的终止过程:
1 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;
2 若被终止进程正处于执行状态,应立即终止该进程的执行,并设置调度标志为真,用于指示该进程被终止后应重新进行调度;
3 若该进程还有子孙进程,还应将其所有子进程予以终止;(部分级联终止系统)
4 将该进程所拥有的全部资源,或者归还给其父进程或系统;
5 将被终止进程(PCB)从所在队列中移去。
引起进程阻塞和唤醒的事件
➢ 向系统请求共享资源失败;等待某种操作的完成;新数据尚未到达;等待新任务的到达。
进程阻塞过程
➢ 阻塞原语Block()。➢ 进程的阻塞是进程自身的一种主动行为。
➢ 具体过程:停止执行;状态由执行改为阻塞;将PCB插入阻塞队列。
进程唤醒过程
➢ 唤醒原语Wakeup()。
➢ 具体过程:从阻塞队列中移出;状态由阻塞改为就绪;将PCB插入就绪队列。
➢ 必须成对使用Block和Wakeup原语。
进程的挂起
◼ Suspend()原语
进程的激活过程
◼ Active()原语
进程状态的转换
操作系统内并发执行的进程可以是独立进程或协作进程。
进程通信是指进程之间的信息交换(各进程为了保持联系而交换信息)
低级进程通信:所交换的信息量相对较少,例如:进程的同步和互斥
效率低
通信对用户不透明
高级进程通信:用户可直接利用OS所提供的一组通信命令,高效地传送大量数据的一种通信方式
使用方便
高效地传送大量数据
共享存储器系统(shared memory)
基于共享数据结构的通信方式(效率低)
基于共享存储区的通信方式(高级,共享内存)
消息传递系统(message passing):必须要有通信线路
直接通信方式:通信线路是通过系统调用自动建立的。
间接通信方式(通过邮箱):通信线路是通过不同进程共享邮箱时建立的。
1. 进程不把消息直接发给接收者进程,而把消息放在某个双方共知的信箱(Mailbox)中
2. 既可以实现实时通信,又可以实现非实时通信
3. 系统提供若干原语,分别用于信箱的创建、撤销和消息的发送、接收
私用信箱:用户进程可为自己建立一个新信箱,并作为该进程的一部分。信箱的拥有者有权从信箱中读取消息,其他用户则只能将自己构成的消息发送到该信箱中
➢ 公用信箱:它由操作系统创建,并提供给系统中的所有核准进程使用。核准进程既可把消息发送到该信箱中,也可从信箱中读取发送给自己的消息
➢ 共享信箱:它由某进程创建,在创建时或创建后,指明它是可共享的,同时须指出共享进程(用户)的名字。信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息
小结:
1.当前应用最广泛的进程间通信机制
2.系统提供发送消息Send(message)与接收消息Receive(message) 两个操作,进程间则通过使用这两个操作进行通讯,无需共享任何变量
3.实现方式的不同分成直接通信方式和间接通信方式两种
4.进程间的数据交换,以格式化的消息为单位。所谓“信息”通常由消息头和消息正文构成
5.实现了大量数据的传递,隐藏了实现细节,简化了程序编制复杂性,使用最广泛
管道通信(pipe)
管道:用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
管道机制的协调能力:互斥:即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待
同步:指当写(输入)进程把一定数量的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后,再把他唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒
对方是否存在:确定对方是否存在,只有确定了对方已存在时,才能进行通信。
向管道提供输入的发送进程(即写进程),以字符流形式将大量的数据送人管道;而接收进程(即读进程),可从管道中接收数据
客户机-服务器系统
套接字(Socket):IP地址(哪一台电脑)+端口号(哪一个程序)
引入进程的目的:使多个程序并发执行、提高资源利用率及系统吞吐量
进程的2个基本属性:进程是一个可拥有资源的独立单位;进程是一个可独立调度和分派的基本单位。
提出线程的目的:减少程序在并发执行时所付出的时空开销;使OS具有更好的并发性
进程是拥有资源的基本单位(传统进程称为重型进程)
线程作为调度和分派的基本单位(又称为轻型进程)
调度的基本单位
➢在传统的OS中,拥有资源、独立调度和分派的基本单位都是进程;
➢在引入线程的OS中,线程作为调度和分派的基本单位,进程作为资源拥有的基本单位;
➢在同一进程中,线程的切换不会引起进程切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程切换。
并发性
➢在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,也可并发执行
拥有资源
➢进程是系统中拥有资源的一个基本单位,它可以拥有资源。
➢线程本身不拥有系统资源,仅有一点保证独立运行的资源。
➢允许多个线程共享其隶属进程所拥有的资源。
独立性
➢同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
系统开销
➢在创建或撤消进程时,OS所付出的开销将显著大于创建或撤消线程时的开销。
➢线程切换的代价远低于进程切换的代价。
➢同一进程中的多个线程之间的同步和通信也比进程的简单。
线程状态
➢ 执行态、就绪态、阻塞态
➢ 线程状态转换与进程状态转换一样
线程控制块(thread control block,TCB)
➢ 线程标识符、一组寄存器、线程运行状态、优先级、线程专有存储区、信号屏蔽、堆栈指针
内核支持线程KST
优点:
➢在多处理机系统中,内核可同时调度同一进程的多个线程
➢如一个线程阻塞了,内核可调度其他线程(同一或其他进程)。
➢线程的切换比较快,开销小。
➢内核本身可采用多线程技术,提高执行速度和效率。
缺点:
➢对用户线程切换,开销较大。
用户级线程ULT
优点:
➢线程切换不需要转换到内核空间。
➢调度算法可以是进程专用的。
➢线程的实现与OS平台无关。
缺点:
➢系统调用的阻塞问题。
➢多线程应用不能利用多处理机进行多重处理的优点。
多对一模型
多个用户级线程映射到一个内核线程。
一对一模型
每个用户级线程映射到一个内核线程。
多对多模型
多个用户级线程映射为相等或小于数目的内核线程。