进程调度

JAVA--高级基础开发

流过昼夜 提交于 2019-12-04 23:04:47
Day06【线程】 第一章 1.1 线程的基本概念 我们在之前,学习的程序在没有跳转语句的前提下,都是由上而下依次执行,只能做一件事 情,这样的程序我们也称为单线程程序;那么如果想要设计一个程序,边写代码边听歌,怎么设计呢?要解决上述问题,咱们得使用多进程或者多线程来解决。 并行:指两个或多个事件在同一时刻发生。(同时发生)。 并发:指两个或多个事件在同一个段时间内发生。 在操作系统中,安装了多个程序,并发指的是在一段时间内,宏观上有多个程序同时运行,这在CPU系统中,每一时刻只能有一个程序在执行,微观上这些程序是分时交替运行,只不过给人感觉是同时运行的,那是因为分时交替运行的时间是非常短的。 而在多个CPU操作系统中,则这些可以并发执行的程序可以分配到多个处理器上(CPU),实现多个任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样就可以完成多个程序同时执行,目前电脑市场上说的多核CPU,便是多核处理器,核数越多,并行处理的程序就越多,能大大提高电脑运行的效率。 [注意] 单核处理器的计算机肯定是不能并行处理多个任务的,只能是多个任务在cpu上并发运行,同理,线程也是一样的,从宏观角度上理解,线程是并行运行的,但是从微观角度上理解,线程是串行运行的,即一个线程一个线程的去运行,当系统只用一个cpu时,线程会以某种顺序执行多个线程,我们把这种情况叫做线程调度。 1.2

处理机调度-进程调度

て烟熏妆下的殇ゞ 提交于 2019-12-04 21:18:20
处理机调度-进程调度 为什么要进行进程调度? 用户进程数一般都多于处理机数,这将导致用户进程互相争夺处理机,那么多进程竞争处理机,处理机到底给谁呢?就涉及了进程调度的问题。因此要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程。 进程调度的功能 记录系统中所有进程的执行情况 1.进程管理模块将系统中各进程的执行情况和状态特征记录在各进程的PCB表中 2.进程管理模式根据各进程的状态特征和资源需求,将各进程的PCB表排成相应的队列并进行动态队列转接 3.进程调度模块通过PCB变化来掌握系统中所有进程的执行情况和状态特征,并在适当的时机从就绪队列中选择出一个进程占据处理机 选择占有处理机的进程 主要功能 进程调度的主要功能是按照一定的策略选择一个处于就绪状态的进程,使其获得处理机执行 选择策略决定算法性能 选择策略决定了调度算法的性能 进行进程上下文切换 什么是进程上下文 进程的上下文(context)包括进程的状态、有关变量和数据结构的值、硬件寄存器的值和PCB以及有关程序等 何时发生进程上下文的切换 当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行 进程执行的位置 进程的执行是在进程的上下文中执行 进程上下文切换的过程 1.系统首先检查是否允许做上下文切换。 2.然后,系统保留有关被切换进程的足够信息

处理机调度-分级调度

帅比萌擦擦* 提交于 2019-12-04 19:53:36
处理机调度-分级调度 为什么要调度? CPU是计算机系统中一个十分重要的资源,为了满足不同操作系统的要求,不同的CPU管理方法将为用户提供不同性能的操作系统。 衡量调度策略的最常用的几个指标 1.周转时间:将一个作业提交给计算机系统后到该作业的结果返回给用户所需要的时间。 2.吞吐率:给定时间内,一个计算机系统所完成的总工作量。 3.响应时间:从用户向计算机发出一个命令到计算机把相应的执行结果返回给用户所需要的时间。 4.设备利用率:输入输出设备的使用情况 作业的状态及其转换 各类状态 提交状态:一个作业在其处于从输入设备进入外部存储设备的过程称为提交状态。处于提交状态的作业,因其信息尚未全部进入系统,所以不能被调度程序选取 收容状态:收容状态也称为后备状态。输入管理系统不断地将作业输入到外存中对应部分(或称输入井,即专门用来存放待处理作业信息的一组外存分区)。若一个作业的全部信息已全部被输入进输入井,那么,在它还未被调度去执行之前,该作业处于收容状态 就绪状态和等待状态:为了达到内存管理扩充的目的,处于外存交换区中的就绪状态或就绪等待状态的进程调入内存,或把处于内存就绪状态或内存等待状态的进程交换到外存交换区 状态转化: 1.就绪状态的进程等待处理机调度进入执行状态 2.执行状态的进程内部发生线程调度 3.执行状态的进程由于被阻塞,进入等待状态 4

2019-2020-1 20175330 《信息安全系统设计基础》第八周学习总结

与世无争的帅哥 提交于 2019-12-04 18:44:27
学习目标 1、掌握三种并发的方式:进程、线程、I/O多路复用 2、掌握线程控制及相关系统调用 3、掌握线程同步互斥及相关系统调用 学习资源 教材:第十一章《网络编程》简单过一下(刘念老师讲过了,我们只考试),教材:第十二章《并发编程》。 知识点总结 1、三种并发方式 构造并发程序的方法有三种: 进程 线程 I/O多路复用 进程 :用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。 线程 :运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。 I/O多路复用 :应用程序在一个进程的上下文中显式地调度控制流。逻辑流被模型化为状态机。 2、线程控制及相关系统调用 socket编程中:线程是运行子进程上下文中的逻辑流。 线程与进程的不同: 线程的上下文切换要比进程的上下文切换快得多; 和一个进程相关的线程组成对等,独立于其他线程创建的线程。 主线程和其他线程的区别仅在于它总是进程中第一个运行的线程。 创建线程 pthread create :创建一个新的线程,在新线程的上下文中运行线程例程f。 新线程可以通过**pthread _self**获得自己的线程ID。 终止线程 一个线程的终止方式:当顶层的线程例程返回,线程会隐式地终止; pthread_exit :线程显式地终止。 注:如果主线程调用**pthread _exit**

操作系统-第3章习题解析

风流意气都作罢 提交于 2019-12-04 12:17:16
第三章习题解析 1. 高级调度不低级调度的主要任务是什么?为什么要引入中级调度? 答:高级调度的主要任务是根据某种算法,把外存上处于后备队列中的那些作业调入内存。低级调度是保存处理机的现场信息,按某种算法先取进程,再把处理器分配给进程。   引入中级调度的主要目的是为了提高内存利用率和系统吞吐量。 使那些暂时不能运行的进程不再占用内存资源,将它们调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。 2. 处理机调度算法的共同目标是什么?批处理系统的调度目标又是什么? 答: 共同目标:资源利用率,公平性,平衡性,策略强制执行。 批处理系统的调度目标:平均周转时间短,系统吞吐量高,处理机利用率高。 3. 何谓作业、作业步和作业流? 答:作业包含通常的程序和数据,还配有作业说明书。系统根据该说明书对程序的运行进行控制。批处理系统中是以作业为基本单位从外存调入内存。    作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。    作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。 4. 在什么情况下需要使用作业控制块 JCB? 其中包含了哪些内容? 答:每当作业进入系统时,系统便为每个作业建立一个作业控制块 JCB ,根据作业类型将它插入到相应的后备队列中。 JCB 包含的内容通常有: 1

进程调度

那年仲夏 提交于 2019-12-04 09:07:02
进程调度 要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 一、先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。 二、短作业优先调度算法 短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。 三、时间片轮转法 时间片轮转(Round Robin,RR)法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。在时间片轮转法中,需要将CPU的处理时间分成固定大小的时间片,例如,几十毫秒至几百毫秒。如果一个进程在被调度选中之后用完了系统规定的时间片,但又未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。 显然,轮转法只能用来调度分配一些可以抢占的资源。这些可以抢占的资源可以随时被剥夺,而且可以将它们再分配给别的进程。CPU是可抢占资源的一种

python学习笔记之---多进程

我与影子孤独终老i 提交于 2019-12-04 05:42:27
首先,思考多进程、多线程、协程的区别? 其次,什么时候该用哪种模式? 进程:一个程序在计算机里面的一次运行。 线程:进程中调度执行的最小单位。 多进程:利用多核cpu,硬件的计算能力变强了。 程序的计算要求比较高的时候。 多线程:一核cpu,硬件的计算能力变弱了。 不是强调计算能力,而是强调多io操作的时候。(什么是IO?输入,输出:从键盘接收一个东西叫输入,打印一个东西叫输出) 多个线程之间做切换,比协程的切换效率要低一些。 协程: 本质是单线程,比多线程的效率高 单线程来实现不同任务的切换,是任务本身来实现的。 多io操作。 多进程编程会比多线程编程麻烦:因为多进程之间是无法共享一个变量的,多线程之间可以共享变量(同一个进程里)的使用,比较麻烦。 什么时候该用哪种模式呢? 计算密集型的任务时使用多进程,多核cpu计算效率更高 做多io操作的时候用线程或者协程都可以,但是对于多io来说协程的效率比多线程更高一些,不过同时协程的复杂度也比多线程更高一些 区别是什么? 线程必须运行在进程里面,一个进程至少有一个线程。 进程是操作系统分配资源的最小单位。 一个进程中的不同线程,会共用一个进程中的资源。 并发和并行什么区别: 并发:一起执行,并不一定是在某一时刻就同时执行 并行:在同一时刻执行。 多进程、多线程、协程都是用来提升并发性的。 同步:注册和登录,必须按同步是按顺序执行

线程的实现,调度和生命周期

家住魔仙堡 提交于 2019-12-04 01:48:56
前言 经常在面试的时候问到Java的线程生命周期,虽然实际运用中不会关注这些。但了解Java线程的实现,调度和生命周期,对编程就会豁然开朗。 1. 线程的实现 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源和执行调度分开,各个线程既可以共享进程资源(内存地址、文件IO等),又可以独立调度, 线程是CPU调度的基本单位 。 1.1 内核线程实现 直接由操作内核支持的线程,由内核完成线程的切换。 程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口-轻量级进程。 局限性:需要系统调度,系统调度代价大,需要在用户态和内核态来回切换;内核进程数量有限。 1.2 用户线程实现 完全建立在用户空间的线程库上,系统内核无感知。JDK1.2之前使用这种模式。 优势:性能极强。用户线程的建立,同步,销毁和调度完全在用户态中完成,操作非常快,低消耗,无需切换内核态。 局限性:所有操作都需要自己实现,逻辑极其复杂。 1.3 用户线程和轻量级进程混合实现 用户线程负责创建,切换,析构等操作,而轻量级进程则负责用户线程和内核的交互,使用内核提供线程调度和处理器映射能力。JDK1.2开始支持。 2. Java线程的调度 就是对线程分配处理器的使用权 。 2.1. 协同式 一个线程干完活通知系统让另一个线程干活,实现简单;执行时间不受控制,一个线程阻塞,会直接阻塞整个进程。 2.2

线程的实现模型

被刻印的时光 ゝ 提交于 2019-12-04 01:47:53
一 用户级线程(User-Level Thread,ULT): (1)定义:应用程序可以通过使用线程库来设计多线程程序。线程库是用户级线程管理的一个包,它包含用于创建和销毁线程、在线程间传递信息和数据、调度线程执行的代码以及保存和恢复线程上下文的代码。 (2)优点: 1.最快的切换时间:所有线程的管理数据结构都在一个进程的地址空间内,线程切换不需要内核支持。 2.调度可以是和应用程序相关的。 3.用户级线程可以在任何操作系统上运行,不需要对底层内核进行修改以支持用户级线程。 (3)缺点: 1.内核看不到多线程的存在,继续以进程为单位进行调度,当执行系统调用时,不仅这个线程会被阻塞,进程中的所有线程都被阻塞。 2.在纯粹的用户级线程策略中,一个多线程应用程序不能利用多处理技术,内核一次只为一个进程分配给一个处理器。 二 内核级线程(Kernel-Level Thread,KLT): (1)定义:在一个纯粹的内核级线程中,有关线程管理的所有工作都由内核完成(Windows)。调度是内核基于线程完成的。 (2)优点: 1.内核可以同时把一个进程中的多个线程调度到多个处理器上。 2.一个线程被阻塞,内核可以调度同一个进程中的另外一个线程执行。 (3)缺点: 1.线程环境切换速度相对较慢:把控制从一个线程转移到同一进程的另一个线程时需要到内核的状态切换。 三 轻量级进程(LWP):本质是进程

用户级线程与核心级线程

时间秒杀一切 提交于 2019-12-04 01:44:29
1、用户级线程 把整个线程实现部分放在用户空间中,内核对线程一无所知,内核看到的就是一个单线程进程。 只有一个用户栈 优点: 1)整个用户级线程的切换发生在用户空间,这样的线程切换至少比陷入内核要快一个数量级(不需要陷入内核、不需要上下文切换、不需要对内存高速缓存进行刷新,这就使得线程调度非常快捷) 2)用户级线程有比较好的可扩展性,线程能够利用的表空间和堆栈空间比内核级线程多,这是因为在内核空间中内核线程需要一些固定的表格空间和堆栈空间,如果内核线程的数量非常大,就会出现问题。 3)可以在不支持线程的操作系统中实现。 4)创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多, 因为保存线程状态的过程和调用程序都只是本地过程 5)允许每个进程定制自己的调度算法,线程管理比较灵活。这就是必须自己写管理程序,与内核线程的区别 6)线程的调度不需要内核直接参与,控制简单。 缺点: 1)一个线程阻塞,会阻塞该进程中其他所有的线程(具体,举个例子) 比如:线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程 页面失效也会产生类似的问题。 2)如果一个线程开始运行,那么该进程中其他线程就不能运行,除非第一个线程自动放弃CPU。因为在一个单独的进程内部,没有时钟中断,所以不能用轮转调度(轮流)的方式调度线程 2