2.1 进程与线程
-
为什么引入进程?
多道程序环境下,允许多个程序并发执行,为了更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性
-
进程:
-
进程控制块(process control block,PCB):利用PCB描述进程的基本情况和运行态,进而控制和管理进程。是进程存在的唯一标志。
-
程序段,数据段,PCB组成进程实体
-
进程:是进程实体的运行过程,是系统进行资源分配(资源指处理机、存储器、其他涩北服务于某个进程的时间)和调度的一个独立单位(未引入线程)
-
进程的基本特征:动态性、并发性、独立性、异步性、结构性
-
进程的状态与转换:
-
通常有5种,前3种是基本状态:运行态、就绪态、阻塞态(等待态)、创建态、结束态
-
-
进程控制:进程创建,进程终止,进程阻塞与唤醒,进程切换
-
进程的组织:
-
进程控制块:进程描述信息,进程控制和管理信息,资源分配清单和处理机相关信息;PCB组织方式有链接方式和索引方式
-
程序段:能被进程调度程序调到CPU执行的程序代码段,可被多个进程共享
-
数据段
-
-
进程通信:
-
共享存储:进程之间存在一块可直接访问的共享空间,通过对共享空间的读写实现信息交换。操作系统负责为通信进程提供可共享的存储空间和同步互斥工具
-
消息传递:以格式化的消息为单位,通过发送消息和接收消息两个原语进行数据交换
-
直接通信:直接挂在接收进程的消息队列
-
间接通信:发到某个中间实体(信箱)
-
-
管道通信:用 一个用于连接读进程和写进程的共享文件 实现通信。以字符流形式发送。管道只能半双工通信。且一旦数据被读取,就从管道中抛弃,释放空间。
-
-
-
线程:
-
引入线程的目的?
减小程序在并发执行时所付出的时空开销,提供操作系统的并发性能。
-
线程:一个基本的CPU执行单元,程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,与同属于一个进程的其他线程共享进程的资源。
-
进程内涵改变:引入线程后,进程作为除CPU外的系统资源的分配单元,线程作为处理机的分配单元
-
线程属性:轻型实体,不拥有资源,有唯一标识线程控制块;不同线程可执行相同程序;同进程中不同线程共享进程资源;线程是处理机调度单位,多线程可以并发;
-
线程实现方式:
-
用户级线程:线程管理由应用程序完成,通过线程库设计
-
内核级线程:线程管理由内核完成,应用程序没有线程管理的代码,有一个到内核级线程的编程接口
-
组合方式
-
-
-
线程与进程比较
-
调度:线程是独立调度的基本单位,线程是拥有资源的基本单位
-
拥有资源:线程没有系统资源,进程拥有资源,但线程可以访问进程的资源
-
并发性:进程可以并发,线程也可以
-
系统开销:线程开销小,进程开销大
-
地址空间和其他资源:进程地址空间相互独立,线程没有自己独立的地址空寂,它共享其所属进程的空间
-
通信:线程通信需要进程同步和互斥手段,线程可以直接读写进程数据段通信
-
-
单处理系统,发生死锁时全部进程处于阻塞态
-
阻塞态转就绪态不会引起另一个进程的状态变化
-
I/O操作完成之前进程在等待结果,状态为阻塞态;完成后进程等待事件就绪,变成就绪态。
-
运行态到阻塞态的状态转换是进程自身决定的
2.2 处理机调度
-
处理机调度:把处理机分配给某个进程,处理机调度是多道程序操作系统的基础
-
调度层次:作业调度、中级调度、进程调度,进程调度是最基本的,不可缺少
-
不能进行进程切换的情况:
-
处理中断
-
进程在操作系统内核程序临界区
-
其他需要完全屏蔽中断的原子操作过程中
-
-
进程调度方式:非剥夺,剥夺
-
调度的基本准则:
-
CPU利用率
-
系统吞吐量:单位时间内CPU完成作业的数量
-
周转时间:从作业提交到作业完成所经历的时间;周转时间 = 作业完成时间 - 作业提交时间
-
平均周转时间:多个作业周转时间的平均值
-
带权周转时间:作业周转时间/作业实际运行时间
-
等待时间
-
响应时间:从用户提交请求到系统首次产生响应所用的时间
-
-
调度算法:
-
先来先服务(FCFS):选最先进入队列的作业调入内存,分配资源创建进程放入就绪队列;不可剥夺;算法简单,对长作业有利,对短作业不利,有利于CPU繁忙型作业,不利于I/O繁忙型作业
-
短作业优先(SJF):选择运行时间最短的作业;对长作业不利,导致饥饿现象,没有考虑作业的紧迫程度;SJF平均等待时间,平均周转时间最少
-
优先级调度:选择优先级最高的作业;分非剥夺式和剥夺式;
-
高响应比优先:选择响应比最高的作业运行;响应比 = (1+等待时间/要求服务时间)
-
时间片轮转调度:适用分时系统。将就绪进程排序,每个进行运行一个时间片。
-
多级反馈队列调度算法:动态调整进程优先级和时间片的大小;设置多个就绪队列,赋予不同优先级,赋予各个队列中进程执行时间片的大小各不相同,优先级越高,时间片越小
-
-
分时操作系统调度:高响应比,时间片轮转,多级反馈队列调度
-
实时操作系统调度:优先级调度算法
2.3 进程同步
-
基本概念:
-
临界资源:一次仅允许一个进程使用的资源
-
临界区:访问临界资源的那段代码
-
同步:直接制约关系,为完成某种任务而建立的两个或多个进程,需要在某些位置上协调工作次序,传递信息所产生的制约关系
-
互斥:间接制约关系,一个进程进入临界区,另一个进程必须等待
-
同步机制准则:空闲让进,忙则等待,有限等待,让权等待
-
-
实现临界区互斥的基本办法:
-
软件实现方法:
-
单标志法
-
双标志先检查
-
双标志后检查
-
Peterson's Algorithm
-
-
硬件实现方法:
-
TestAndSet方法
-
中断屏蔽方法(关中断)
-
-
信号量:
-
P,V操作,P请求资源,V释放资源
-
同步信号量初值为0
-
互斥信号量初值为1
-
应用:若某个行为要用某种资源,在这个行为前P这种资源;若某行为提供某资源,在这个行为后V这种资源。在互斥问题中,P,V操作要求夹紧使用互斥资源的那个行为,中间不能有其他冗余代码。
-
-
管程:
-
定义:一组数据及定义在这组数据上的对这组数组的操作组成的软件模块
-
组成:局部于管程的共享数据结构说明;对该数据结构进行操作的一组过程;对局部于管程的共享数据设置初始值额语句
-
特性:局部于管程的数据只能被局部于管程内的过程所访问;一个进程只有调用管程内过程才能进入管程访问共享数据;每次运行一个进程在管程内执行某个内部过程
-
-
同步问题:
-
生产者--消费者问题
-
读者--写者问题
-
哲学家进餐问题
-
吸烟者问题
-
-
-
硬件方法实现进程同步不能实现让权等待,Peterson算法满足有限等待不满足让权等待。
2.4 死锁
-
死锁的概念:
-
死锁:指多个进程因为竞争资源而造成一种僵局,若无外力作用,这些进程都无法向前推进
-
产生原因:
-
争用系统资源
-
进程推进顺序非法
-
-
死锁产生的必要条件,只要一个不满足,死锁就不会发生
-
互斥条件
-
不剥夺条件
-
请求并保持
-
循环等待
-
-
-
死锁的处理策略
-
死锁预防:破坏死锁产生的4个必要条件之一即可
-
死锁避免
-
系统安全状态:允许进程动态申请资源,但系统在进行资源分配之前,先计算此次资源分配的安全性。若此次分配导致系统进入不安全的状态,就让进程等待,否则,分配资源。
-
银行家算法:OS为银行家,OS管理的资源为资金,进程向OS请求资源相当于贷款。OS按规则为进程分配资源。当进程首次申请资源,要测试该进程对资源的最大需求量,若可满足,则按当前申请量分配资源,否则推迟分配。当进程执行中继续申请资源,测试当前占用和申请的资源是否超过最大需求量,超过拒绝,未超过测试现有资源是否满足最大需求量,满足则分配申请的资源,否则推迟分配。
-
-
死锁检测及解除
-
资源分配图
-
死锁定理:S为死锁状态的条件是当且仅当S状态的资源分配图是不可完全简化的。
-
死锁解除:
-
资源剥夺法
-
撤销进程法
-
进程回退法
-
-
-