[架构之路-122]-《软考-系统架构设计师》-操作系统-1-操作系统原理 - 进程管理
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-122]-《软考-系统架构设计师》-操作系统-1-操作系统原理 - 进程管理相关的知识,希望对你有一定的参考价值。
前言:
操作系统的本质就是创建一个并发的应用程序执行的环境,使得各种应用程序可以动态、共享相同的计算机物理硬件资源,计算机的三大物理资源包括:
CPU
内存
外设
应用程序(管理应用程序):以进程和现成的方式组织,所有的应用程序被抽象成了一个个的进程与现成;然后,有了进程间同步、互斥与通信、进程的优先级调度等概念。
所有的外设(管理外设资源):以统一的文件来组织,所有的应用程序通过文件的方式访问所有的外设,操作系统通过把文件映射成设备的驱动程序访问外设硬件。并以中断的手段提供异步抢占的方式临时占用计算机的资源。
所有的内存(管理内存资源):一虚拟地址的方式来组织,每个应用程序拥有0G~3G的用户地址空间和3G~4G的内核专有空间,于是了内存管理、MMU和地址映射等等概念。
内核调度程序(管理CPU资源):如何管理上述资源呢?于是就有了操作系统的调度程序!
本文就是探讨操作系统上述核心理念和原理!!!
第11章 操作系统
第1节 操作系统概述
第2节 调度程序原理:管理者本身
(139条消息) [机缘参悟-96] :软件中到处充满了人类社会的气息!_文火冰糖的硅基工坊的博客-CSDN博客
第3节 进程管理:管理应用程序的机制(CPU)
3.1 进程的状态切换:三态模型 VS 五态模型
3.2 前驱图
前驱图是一种用来描述程序(或进程)之间先后执行顺序的有向无环图(简称DAG, Directed Acyclic Graph)。
前趋图由结点和有向边两部分组成,每个结点表示一个程序、进程、程序段或者一条语句,结点间的有向边表示结点之间的前驱关系。从结点Si到结点Sj的有向边表示它们的前趋关系,记为Si→Sj,即Si和Sj应顺序执行,Sj仅在Si执行完成后才能开始执行。
3.3 同步与互斥
在单CPU、多CPU以及分布式系统中,有多个进程并发甚至并行执行。对资源的共享和竞争使得并发进程之间相互制约,因为该原因通常产生意想不到的错误,且在程序逻辑上体现不出来。
原因:
①由于共享某些资源,(如变量、文件、设备)等,一个进程的执行可能影响其他进程的执行结果。
②与同一共享资源有关的程序段分散在各进程中,而且各进程的相对执行速度不可预知。
③由于每次并发执行速度顺序不同,并发进程的执行结果将不确定(无法再现),甚至可能导致错误;但由于这不可再现的原因,导致bug很难定位排除。
互斥:对临界资源的访问。
同步:不同速度线程之间的相互等待。
在上述模型中,生产者与消费者之间通过市场进行缓冲,因此生产者与消费者之间不需要完全同步,生产速度和消费速度可以一定程度的不一致。当生产速度消费速度,就出现生产过程剩,价格就会下降,促使生产者降低生产;当生产速度小于消费速度,就出现生产不足,价格机会出现上升,促使生产者加大生产,最终得到以某种平衡,这就是市场的作用。
在由操作系统管理的两个不同速率的进程之间,也是这种原理,通过中间的缓冲区(如队列、FIFO等)和同步机制,在生产者进程和消费者进程之间进行同步。不过操作系统中,没有引入价格机制,如果能够进入价格机制,这种模型就更接近现实世界了。
3.4 并发相关的基本概念
1.原子操作:一个函数(原语)或动作的指令序列不可分割,要么作为一个整体执行(不可中断),要么都不执行
2.临界资源:一次仅允许一个进程独占使用的不可剥夺的资源
3.临界区:进程访问临界资源的那段程序代码。一次仅允许一个进程在临界区中执行
4.互斥:当一个进程正在临界区中访问临界资源时,其他进程不能进入临界区
5.同步:合作的并发进程需要按先后次序执行,例如:一个进程的执行依赖于合作进程的消息或者信号,当一个进程没有得到来自于合作进程的消息或者信号时需要阻塞等待,直到消息或者信号到达后才被唤醒
6.死锁:多个进程全部阻塞,形成等待资源的循环链
7.饥饿:一个就绪进程被调度程序长期忽视、不被调度执行;一个进程长期得不到资源
3.5 PV操作
PV操作是一种实现进程互斥与同步的有效方法,是原子操作!
PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。
PV操作是典型的同步机制之一。
用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;
当信号量的值非0时,表示期望的消息已经存在。
用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
上述有两个信号量:
一个用于写同步,必须有空闲缓冲区才能写,用于检查缓冲是否满,如果满,则等待,如果不满,则写。
一个用于读同步,缓冲区中必须有数据才能读,用于检查缓冲区是否空,如果空,则等待,如果不空,则读。
为什么需要两个信号量呢???
单一的信号量只能做到互斥,无法实现读、写同步,必须有空闲缓冲区才能写,冲区中必须有数据才能读的功效!!!即一个信号量用于检查缓冲区是否空,一个用于检查缓冲区是否满。
PV操作的本质是:改变线程的状态,或者说触发线程状态的切合。
P操作本质是把进程的执行态转换到阻塞状态。
V操作的本质是进程的阻塞状态变成就绪态。
3.6 进程的死锁
3.6.1 定义
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 [1]
死锁的规范定义:集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的。
一种情形,此时执行程序中两个或多个进程发生永久堵塞(等待),每个进程都在等待被其他进程占用并堵塞了的资源。例如,如果进程A锁住了记录1并等待记录2,而进程B锁住了记录2并等待记录1,这样两个进程就发生了死锁现象。
计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。
在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。例如:事务A 获取了行 1 的共享锁。事务 B 获取了行 2 的共享锁。
3.6.2 产生条件
虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。 [2]
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合P0,P1,P2,···,Pn中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
所谓打破死锁:就是调度进程已经发现死锁,如何打破现有的死锁。
所谓预防死锁:就是死锁发生前,在设计就避免死锁的算法。
3.6.3 有序资源分配法
在每个线程所需要资源数量都减1的情况下,在增加一个资源,就能够有效的避免死锁。
3.6.4 银行算法
银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。
在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
安全序列是指一个进程序列P1,…,Pn是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
有新进程申请资源时,调度程序首先确保,分配后的剩余的资源能够保证已经申请资源的进程能够安全执行,不发生死锁,只有剩余资源能够保证所有进程不发生死锁时才会为新进程分配资源,否则暂缓分配资源。
以上是关于[架构之路-122]-《软考-系统架构设计师》-操作系统-1-操作系统原理 - 进程管理的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-111]-《软考-系统架构设计师》-软件架构设计-4-特定领域软件架构
[架构之路-109]-《软考-系统架构设计师》-软件架构设计-2-软件架构概述:架构风格
[架构之路-118]-《软考-系统架构设计师》-软架构设计-11-可靠性相关设计
[架构之路-110]-《软考-系统架构设计师》-软件架构设计-3-架构描述语言ADL与UML