细说进程五种状态的生老病死——双胞胎兄弟Java线程
java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的。
系统根据PCB结构中的状态值控制进程。
单CPU系统中,任一时刻处于执行状态的进程只有一个。
进程的五种状态:初始态,执行态,等待态,就绪态,终止态。
执行状态:一个进程获得了必要资源,并且在CPU上执行时的状态。
执行态进程因为等待某种事件的发生处于等待状态。
执行态进程的时间片用完或在抢占式调度中有更高优先级的进程时变为就绪状态。
阻塞原语:一个执行进程期待某一个事件的发生,但发生条件尚不具备,该进程自己调用阻塞原语阻塞自己。
过程:执行态进程——中断处理机和保护该CPU现场——变为阻塞状态——插入等待队列——转进程调度程序选就绪进程运行。
就绪状态的进程经调度程序选中之后才可以进入执行状态。
就绪状态的进程已经获得了除处理机以外的所有资源,一旦获得处理机就可以立即执行的状态
等待状态的进程因为等待事件发生被唤醒后,不能立刻得到处理机而进入就绪状态。
唤醒进程有两种方法:系统进程唤醒和事件发生进程唤醒
就绪态与等待态的区别:当分配给该进程处理机时,该进程能否立即执行,能就是就绪态,否则就是等待态。
初始状态:进程刚被创建时,由于其他进程正占有处理机而得不到执行,处于初始状态。(被创建的进程最初处于初始状态)
终止状态:进程执行结束后,退出执行而被终止,处于终止状态。
进程具有独立性和异步性等并发特征。
进程控制是对系统中所有进程进行管理。其功能包括进程的创建,撤销,阻塞,唤醒等。(题外话,这些功能是由操作系统内核来实现的)
进程控制是通过原语来实现的。
原语:由若干条机器指令构成的一段程序,用以完成特点的功能,这段程序在执行期间不可分割。原语的执行不能被中断。
处理机三级调度
一个作业从提交开始直到完成要经历三级调度。
1, 高级调度(作业调度)
根据一定原则从外存上处于后备状态的作业中选择一个或多个,给他们分配内存,输出输入等必要资源,并建立相应的进程,使该作业具有获得竞争处理机的权利。作业调度运行频率低,几分钟一次。
作业被选进内存时创建相应进程
作业调度的两个问题:调度程序必须决定操作系统可以接纳多少个作业,调度程序必须决定接纳那些作业。
作业调度每次要接纳多少个作业进入内存,取决于多道程序的并发程度,即允许有多少个作业同时在内存中运行。
将那些作业从外存调入内存,取决于调度算法。
先来先到算法:最早进入外存的作业最先调入内存。
短作业优先法:将外存上执行时间最短的作业最先调入内存。
2, 中级调度
将处于外存对换区中具备运行条件的进程调入内存,或将处于内存的暂时不能运行的进程交换到外存。
3, 低级调度(进程调度)
从就绪队列中选择一个进程,将处理机分配给他。
进程调度运行频率高,几十毫秒一次。
作业调度和进程调度的区别:作业调度的结果是为了创建进程,而进程调度的结果是进程被执行。
进程调度(重点)
为了实现进程调度,进程管理模块必须将系统中各进程的执行情况和状态特征记录在各个进程的PCB中,根据各个进程的状态特征和资源需求等信息将进程的PCB组织成相应的队列
进程调度方式:当一个进程正在处理机上执行时,若某个更为重要的进程需要处理(优先级更高的进程进入就绪队列),此时应该如何分配处理器。两种方式:
抢占式:一个进程正在处理机上执行,若有某个优先级更高的进程进入就绪队列,则立即暂停正在执行的进程,将处理机分配给新的进程。
非抢占式:一个进程正在处理机上执行,若有某个优先级更高的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程自动释放处理机(时间片用完,进入阻塞,完成),才将处理机分配给新的进程。
调度算法
先来先服务(作业,进程调度)
按照作业或进程的请求顺序进行调度。
注意,在进程调度中,一旦一个进程占用处理器,他就一直运行下去,直到该进程完成或变为等待状态(这里处理机没有分时间片,不存在执行到就绪的转换)。非抢占式。
短作业优先(作业,进程)
选择能最快完成的作业或进程(会出现饥饿现象)
一直独占处理机
优先级调度(作业,进程)
调用优先级最高的,一直独占处理机
细分为抢占式和非抢占式
时间片轮转法(进程)
每个进程不能一直占处理机直到完成,有执行到就绪的转换
不允许多个并发进程交叉执行的一段程序(这段程序必须一次执行完,不能中断,多线程同步代码块)称为临界部分。
进程同步与互斥
两种制约关系
间接制约(互斥):某一个进程要求使用某种资源,而该资源正在被另一个进程使用,并且这一个资源不允许两个进程同时使用,那么该进程只能等待已占用资源的进程释放后再使用。
互斥要求:
空闲让进:没有进程进入临界部分时,可以允许一个请求进入临界部分的进程立即进入临界区。
忙则等待:已有进程进入临界区,其他试图进入临界部分的进程必须等待。
有限等待:对要访问临界部分的进程,应保证在有限时间内进程临界部分。
让权等待:当一个进程因为某些原因不能进入临界部分时,应释放处理器给其他进程。
直接制约(同步):某一个进程若收不到另一进程给它提供的必要信息就不能继续运行下去。
P,V原语
使用信号量来管理临界区的公有资源。
信号量sem,sem>=0代表可供并发进程使用的资源实体数,sem<0代表正在等待使用临界区的进程数。
P操作sem-1,V操作sem+1.
当某个进程正在临界区执行时(处于执行状态),其他进程执行P原语(这里以前的疑惑是有进程在执行了,别的进程是不会执行的因为没有占用处理机。其实呢,这样考虑,进程执行临界区时,没有执行完,然后时间片用完,转就绪状态,然后其他进程在处理机执行P原语,发现无法进入临界区,阻塞自己,当临界区可以被执行后,从相同阻塞队列中选一个被唤醒,转就绪而被执行),则该进程会进入等待队列等待其他做V原语操作释放资源后,进入临界区,这是P原语才结束。
P原语操作:
1, sem-1
2, 若sem-1后>=0,则P原语返回表示,该进程可以继续执行。
3, 若sem-1后<0,则该进程被阻塞,进入对应阻塞队列,转进程调度,选择就绪队列一个进程进入执行状态。
V原语操作
1, sem+1
2, 相加大于0,V原语停止执行,该进程返回调用出处,继续执行
3, 相加<=0,从该信号等待队列中选择一个进程唤醒(因为负数代表等待进程数目,sem+1了,就说明等待进程少了一个),V原语停止执行,然后再返回原进程继续执行。
死锁四个条件
处理死锁方法
细说进程五种状态的生老病死——双胞胎兄弟Java线程的更多相关文章
- ios应运程序的五种状态
ios应运程序的五种状态即转化 从apple的官方文档扣下来的 5状态: Not running The app has not been launched or was running but w ...
- jsp页面加载readyState的五种状态根据我们状态添加进度条
这段代码放在页面最下面 原文如下: document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function subSomet ...
- 转 XMLHttpRequest().readyState的五种状态详解
转 http://javathinker.blog.ccidnet.com/blog-htm-itemid-1262479-do-showone-type-blog-uid-36384.html 在& ...
- Js--AJAX的小知识(一):ajax的五种状态
一.ajax的五种状态(readyState ) 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已 ...
- ServiceWork的五种状态
[ServiceWork的五种状态] installing.installed.activating.activated.redundant 参考:https://developer.mozilla. ...
- java线程五种状态
java线程五种状态: 创建 -> 就绪 -> 运行 -> 销毁 创建 -> 就绪 -> 运行 -> 等待(缺少资源) -> 销毁 下图:各种状态转换
- Java 多线程 线程的五种状态,线程 Sleep, Wait, notify, notifyAll
一.先来看看Thread类里面都有哪几种状态,在Thread.class中可以找到这个枚举,它定义了线程的相关状态: public enum State { NEW, RUNNABLE, BLOCKE ...
- Thread之一:线程生命周期及五种状态
<Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较 ...
- java线程的五种状态
五种状态 开始状态(new) 就绪状态(runnable) 运行状态(running) 阻塞状态(blocked) 结束状态(dead) 状态变化 1.线程刚创建时,是new状态 2.线程调用了sta ...
随机推荐
- Java接口总结
接口的定义: 使用interface来定义一个接口.接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成,定义接口的基本语法如下: [修饰符] interfac ...
- php语言
<?php//单行注释/*多行注释*///弱类型语言//var a=10;//php定义变量/*$a =10; //变量名前加$$b="hello";var_dump($a) ...
- iOS---后台运行机制详解
一.iOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking b ...
- java基础-多线程执行
package Thanqi; public class TestApple implements Runnable{ //苹果的数量 private int count = 5; //拿苹果 //s ...
- CentOS 下 MySQL DateBasic 抢救
CentOS 下 MySQL DateBasic 抢救 强 Kill 数据库进程. 分析问题:确定报错内容 报错信息:The server quit without updating PID file ...
- php相对于java、js几点不太一样的地方
1.PHP 变量作用域 在 PHP 中,可以在脚本的任意位置对变量进行声明. 变量的作用域指的是变量能够被引用/使用的那部分脚本. PHP 有三种不同的变量作用域: local(局部) global( ...
- 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案
问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...
- 深入理解DOM节点类型第七篇——文档节点DOCUMENT
× 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...
- Boot from Volume - 每天5分钟玩转 OpenStack(61)
Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume),那么如何使 volume 成为 bootable 呢? 现在我们打开 instance 的 ...
- jQuery 自带的动画效果
1.方法: show:显示选中元素. hide:隐藏选中元素. toggle:显示或隐藏选中元素. fadeIn:将选中元素的不透明度逐步提升到100%. fadeOut:将选中元素的不透明度逐步降为 ...