提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 2.1 进程与线程
- 2.1.1进程的定义,特征,组成,组织
- 2.1.2 进程的状态(运行、就绪、阻塞、创建、终止)及转换(就绪->运行、运行->就绪、运行->阻塞、阻塞->就绪)
- 2.1.3 原语实现对进程的控制
- 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
- 2.1.5 线程概念与多线程模型
- 2.2 处理机的调度
- 2.2.1 处理机调度的概念及层次
- 2.2.2 进程调度的时机(主动放弃与被动放弃)、切换与过程(广义与狭义)、方式(非剥夺与剥夺)
- 2.2.3 度算法的评价指标(cpu利用率、系统吞吐量、周转时间、等待时间、响应时间)
- 2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
- 2.2.5 作业/进程调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
- 2.3 进程的同步与互斥
- 2.3.1 进程的同步与互斥
- 2.3.2 实现临界区进程互斥的软件实现方法
- 2.3.3 实现临界区进程互斥的硬件实现方法
- 2.3.4 信号量机制(整型信号量、记录型信号量P、V)
- 2.3.5 信号量机制实现进程的互斥、同步与前驱关系
- 2.3.6 进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
- 2.3.7 管程和java中实现管程的机制
- 2.4 死锁
- 2.4.1 死锁详解(预防、避免、检测、解除)
2.1 进程与线程
2.1.1进程的定义,特征,组成,组织
1.进程的定义
(1)程序的概念
(2)进程的概念
进程和程序的区别和联系:
区别:
1)进程是动态的;程序是静态的。
(2)进程有独立性,能并发执行;程序不能并发执行。
(3)二者无一一对应关系。
(4)进程异步运行,会相互制约;程序不具备此特征。
但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
(5)组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
(6)程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
(7)进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
(8)一个程序可以启动多个进程来共同完成。
联系:进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
(3)进程的定义
2.进程的特征
3.进程的组成
而其中最重要的就是进程控制块PCB(Process Control Block)
PCB简介:
PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。
PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中。
可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
所以说,PCB是进程存在的唯一标志。
PCB通常包含的内容:
4.进程的组织
(1)链接方式
(2)索引方式
2.1.2 进程的状态(运行、就绪、阻塞、创建、终止)及转换(就绪->运行、运行->就绪、运行->阻塞、阻塞->就绪)
1.思维导图总览
2.进程的状态
(1)三种基本状态(就绪、运行、阻塞)
(2)创建态和结束态
创建态
结束态
3.进程状态之间的转换
2.1.3 原语实现对进程的控制
思维导图
1.什么是进程控制?
2.原语实现对进程的控制
这里说明一下调度和切换的区别:
调度是指决定资源分配给哪个进程的行为,是一种决策行为
切换是指实际分配的行为,是执行行为
一般来说现有资源调度,后有进程切换
3 进程控制的五种原语
(1)进程的创建原语
(2)进程的终止原语
(3)进程的唤醒和阻塞原语
进程的阻塞和唤醒原语是成对存在的,必须成对使用。
阻塞原语是由被阻塞进程自我调用实现的
唤醒原语是由一个被唤醒进程合作或被其他相关的进程调用实现的
(4)进程的切换原语
2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
0.思维导图
1.什么是进程通信?
2.共享存储
共享一块大家都可以访问的空间,一次只能有一个进程进行读或写操作
3.管道通信
4.消息传递
发送信息的进程将消息头写好,接受信息进程根据消息头读取信息或寻找信封是哪一个
2.1.5 线程概念与多线程模型
0.思维导图
1.为什么要引入线程?
2.什么是线程?
3.引入线程带来的变化及进程与线程的比较
4.线程的属性
5.线程的实现方式
线程的实现分为两类:用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread, KTL)l。内核级线程又称内核支持的线程。
(1)用户级线程
(2)内核级线程
6.多线程模型
(1)多对一模型
(2)一对一模型
(3)多对多模型(此种模型效率是三种模型中最好的)
2.2 处理机的调度
2.2.1 处理机调度的概念及层次
0.思维导图
1.调度的基本概念
2.调度的三个层次
(1)高级调度( 作业调度)
(2)中级调度(内存调度)
(3)进程的挂起状态与七状态模型
(4)低级调度(进程调度)
(5)三层调度的联系和对比
作业:JCB+程序+数据
作业vs进程:
作业:任务实体。(外存) —变成多个进程才能上cpu执行。
进程:执行实体。(内存)
高级:作业->内存
(后备队列-创建态)
中级:(阻塞挂起、就绪挂起)
换入(激活-原语)换出(挂起)–进程映像。
低级:cpu(就绪-执行)
2.2.2 进程调度的时机(主动放弃与被动放弃)、切换与过程(广义与狭义)、方式(非剥夺与剥夺)
0.思维导图
1.时机
(1)什么时候进行进程调度?
(2)什么时候不能进行进程调度?
(3)OS内核程序临界区与普通临界区的进程调度情况
2.进程调度的方式
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。
3.进程的切换和过程
2.2.3 度算法的评价指标(cpu利用率、系统吞吐量、周转时间、等待时间、响应时间)
0.思维导图
1.CPU利用率
2.系统吞吐量
3.周转时间
4.等待时间
5.响应时间
2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
0.思维导图
1.先来先服务—FCFS
First come first sever
2.短作业优先—SJF
Shortest Job First
非抢占式—SJF
抢占式—SJF(SRTN)
3.高响应比优先—HRRN
Highest Response Ratio Next
4.三种算法的对比和总结
2.2.5 作业/进程调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
0.思维导图
1.时间片轮转—RR
Round-Robin
2.优先级调度算法
3.多级反馈队列调度算法
4.三种算法的对比总结
2.3 进程的同步与互斥
2.3.1 进程的同步与互斥
0.思维导图
1.进程同步
同步也称为直接制约关系。
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
2.进程互斥
互斥,亦称间接制约关系。进程互斥 指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
在这里需复习一下临界资源的概念。
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。
为了禁止两个进程同时进入临界区,需遵循以下准则
2.3.2 实现临界区进程互斥的软件实现方法
0.思维导图
软件实现方法的思想:在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
1.单标志法
2.双标志先检查法
3,双标志后检查法
4.Peterson算法
2.3.3 实现临界区进程互斥的硬件实现方法
0.思维导图
1.中断隐藏方法
2.TestAndSet指令
执行TSL指令时,它的内部运转逻辑:
假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。
3.Swap指令
old是每个进程都要进行的一步,都必须将old=true
分析一下这样做的原因:
因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。
2.3.4 信号量机制(整型信号量、记录型信号量P、V)
0.思维导图
1.为什么引入信号量机制?
为了更好的解决进程互斥与同步的问题
2.什么是信号量机制?
3.整型信号量
4.记录型信号量
一:信号量:
整形信号量:
- semaphore mutex=1(互斥)/=0(同步)
大于0,表示多个资源-同步。
2.不满足让权等待=忙等
记录型型号量:
1.结构体–多了一个等待队列指针。block和wakeup用的。
可以让权等待
二.PV原语内部:
P:减法,如果小于0阻塞。
V:加法。如果大于等于0唤醒。
2.3.5 信号量机制实现进程的互斥、同步与前驱关系
0.思维导图
1.信号量机制实现进程互斥
2.信号量机制实现进程同步
3.信号量机制实现前驱关系
2.3.6 进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
0.前言
1.生产者-消费者问题
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注: 这里的“产品”理解为某种数据)
生产者、消费者共享一个初始为空、大小为n的缓冲区。
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
缓冲区是临界资源,各进程必须互斥地访问。
2.多生产者-多消费者问题
(3)实现方法
① 有mutex
③ 为什么有mutex和没有mutex一样呢?
原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…
④ 如果有两个盘子plate
总结:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的,要具体问题具体分析。
3.读者-写者问题
(3)实现方法
① 给count加mutex互斥访问
② 加一个w实现“读写公平法”
在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。
(4)知识回顾与重要考点
4.吸烟者问题
(2)问题分析
(3)实现方法
(4)知识回顾与重要考点
5.哲学家进餐问题
(2)问题分析
(3)如何实现
(4)知识回顾与重要考点
2.3.7 管程和java中实现管程的机制
0.思维导图
1.为什么引入管程?
2.管程的组成及基本特征
4.java中类似于管程的机制
2.4 死锁
2.4.1 死锁详解(预防、避免、检测、解除)
0.思维导图
1.什么是死锁?
2.死锁、饥饿、死循环的区别
3.死锁产生的四个必要条件
4.什么时候会发生死锁?
5.死锁的处理策略
(1)预防死锁
① 破坏互斥条件
② 破坏不可剥夺条件
③ 破坏请求和保持条件
④ 破坏循环等待条件
(2)避免死锁
① 什么是安全序列?
② 安全序列、安全状态、不安全状态、死锁之间的联系
③ 避免系统进入不安全状态------银行家算法
(3)死锁的检测和解除
① 死锁的检测
② 死锁的解除