您的位置:首页 > 其它

操作做系统—进程管理

2020-04-02 18:59 211 查看

进程管理:

进程的概念:
进程是操作系统中资源分配的最小单位,也是独立运行的基本单位,独立运行的最小单位是线程,进程里面包括了多个线程。进程主要是由进程控制块(PCB),程序段,数据段,进程标识符等部分组成,其中PCB是进程存在的唯一标志,首先PCB保证了进程的并发执行,创建进程就是常见进程的PCB,撤销进程就是撤销进程的PCB。系统通过控制进程的PCB从而控制整个进程。
进程的状态和切换:
进程有五种状态,分别是就绪态,阻塞态,运行态,创建态,结束态。
进程的状态并不是固定不变的,会随着系统资源的分配而不断的变化,首先进程被创建,同时进程被分配资源,此时此进程被进程调度程序选择上,则进程的状态从就绪态转化成执行态,操作系统给进程分配CPU。若此时该进程的时间片用完,则该进程从执行态转化成就绪态。若进程的某个资源被剥夺,需要等待该资源才能继续执行时,进程转化成阻塞态,这个过程常是使用了一个P原语造成的。当这个进程需要的资源被重新分配时,该进程则从阻塞态转化成就绪态,常是使用了一个v原语。
线程的概念:
线程的引入,则是为了减少进程并发执行时的系统开销,使系统有更好的并发性。线程是进程的一个内部单位,是一个可以调度的实体,但不具有资源。线程又分为内核级线程和用户级线程,内核级线程是指依赖于内核,有操作系统内核完成创建和撤销工作的线程。用户级线程是指不依赖于操作系统的内核,由进程提供的线程库提供的创建,同步,调度的函数来管理线程。

处理器的三层调度:

处理器分成三层调度,分别为作业调度,内存调度,进程调度。
作业调度:
作业调度主要是将处于外存的作业,按照某种调度的算法,将作业调度到内存中,为其分配资源和创建进程。作业调度的频率比较低,通常是几分钟一次。常用的调度算法由先来先服务算法和短作业优先算法。
内存调度:
内存调度是是为了提高内存的利用率和系统的吞吐量。是按照一定的原则将处在外存对换区的进程调入到内存中。可以理解是将外存的页面调入到内存中去,用的是页面置换算法,比如先进先出算法,最近最少使用算法。
进程调度:
进程调度是在就绪队列里面按照某种算法,选择一个进程将CPU分配给他,进程的状态从就绪态转变成执行态。常采用的算法,有先进先出算法,时间片轮转调度算法,短作业优先算法,优先级调度算法,多级队列调度算法,多级反馈队列调度算法。

调度算法:

先来先服务算法:
这个算法用于作业调度和进程调度。算法的思想很简单,就是根据作业到达的额先后顺序,依次进行处理。这个算法不会产生死锁的情况。这个算法对长作业比较友好,对短作业不利。
短作业优先算法:
这个调度算法用于作业调度和进程调度。在作业调度的情况下,该算法是将后备作业队列中的作业调入到内存中,同时为其分配资源,创建进程,并放到就绪队列。
在进程调度中,是在就绪队列里面选择一个执行时间最短的进程,把处理器分配给这个进程。
短作业优先算法对长作业不利,可能造成饥饿的状态。
优先级调度算法:
优先级调度算法可以用于作业调度和进程调度中,这个算法的思想是将处理器分配给优先级最高的进程。
其中进程的优先级,可以按照进程的类型确定,按照作业的资源确定,按照用户的类型确定。
时间片轮转调度算法:
这个算法只能用在进程的调度算法中,时间片轮转调度算法是给就绪队列中每个排在第一位的进程分配一个时间片,时间篇用完之后,进程回到就绪队列的尾部,系统再把时间片分给下一个进程。时间片轮转调度算法,时间片的大小设置很重要。
高响应比算法:
高响应比调度算法综合了先来先服务算法和短作业优先算法的优点。高响应比算法主要用于作业调度。算法的思想是,再每次进行作业调度的时候,先去计算响应比,响应比=(作业等待时间+估计运行时间)/估计运行时间。
多级队列调度算法:
将进程划分为多个队列,每个队列采取不同的调度算法。
多级反馈队列调度算法:
这个算法是将时间片轮转调度算法和优先级调度算法结合起来的算法。设置多个队列,每个队列的优先级不同,第一级的队列优先级最高,依次递减,同时分配的时间片越长。

同步和互斥

同步:
某一进程收不到另外一个进程给他的消息,则无法继续进行,则为同步。
互斥:
一个进程需要一个资源,但是这个资源被其他的进程占用,这样的情况成为互斥。

信号量机制

信号量是一个二元组(s,q)其中s是一个非负的整型变量,q是一个初试状态为空的队列。
P(s)操作:首先执行s=s-1,如果s>=o,则程序继续进行,如果s<=0,则进程阻塞。
v(s)操作:首先执行s=s+1,如果s>0,则进程继续执行,不是的话,进程进入就绪状态。

死锁

死锁产生的条件:
互斥条,不剥夺的条件,请求和保持的条件,环路等待的条件
处理死锁的四个方法:
鸵鸟算法,预防死锁,避免死锁,检测和解除死锁
鸵鸟算法:
对死锁视而不见。
预防死锁:
通过限制条件,去破坏死锁产生的四个条件。比如可以将一个进程需要的所有资源再运行之前,全部分配给这个资源。或者是将资源编号,按照标号的顺序去申请资源,这样也不会产生死锁。
避免死锁:
安全状态:再某个时刻,系统能够按照某个顺序为每个进程分配所需要的资源,直至最大的需求。可以是进程顺利地完成,就是安全状态。
安全状态下,系统不会发生死锁,不安全的状态下,系统有可能会发生死锁,也有可能不会发生死锁。
避免死锁的办法,有银行家算法,银行家算法使用的数据结构有可利用资源向量,最大需求矩阵,分配矩阵,需求矩阵。
过程:一个进程向系统要求一系列的资源,系统首先检查进程要求的资源是否足够提供,如果能提供,就将资源分配给他,并将相应的数据结构内容进行修改,比如可以用资源的数量要减去分配的资源的数量,该进程的需求矩阵要减去刚刚分配给他的资源数量。数据结构的内容修改完毕之后,进行安全性检查算法,安全性检查的算法内容就是将剩余的资源按照一定的顺序进行分配,能够满足所有的进程的需要,找出一个安全性序列,说明这个分配就是安全的。如果,找不到安全序列,则说明系统处于不安全的这状态,要把分配出去的资源收回来,相应的数据结构改回原来的状态。
死锁检测和死锁的解除:
死锁的检测主要是用两种方法,一个是用资源分配图进行死锁的检测,宁外一个是利用死锁检测算法进行检测。
死锁检测算法的大致过程和安全性检查算法的过程类似,使用的数据结构也相同。
死锁的解除,有三个办法,分别是撤销进程,剥夺资源,进程回退。所谓剥夺资源是指将产生死锁的进程占用的部分资源剥夺走,分配给其他的进程,从而破坏死锁。
死锁和饿死:
当进程长时间得不到响应的现象称为饥饿现象,当饥饿到一定的程度,进程永远得不到响应的现象称为饿死。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
还不快点滚去看书? 发布了8 篇原创文章 · 获赞 0 · 访问量 223 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: