进程调度

并发编程----线程介绍

大兔子大兔子 提交于 2019-12-06 12:30:48
线程 一, 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 进程: 划分空间,加载资源,静态的 线程: 执行代码,执行能力,动态的 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位 线程是依赖于进程,一个进程可以包含多个线程,但是一定有一个主线程.线程才是CPU执行的最小单元 二, 线程与进程的区别 线程共享创建它的进程的地址空间; 进程有自己的地址空间 线程可以直接访问其进程的数据段(同进程内数据共享); 进程有自己的父进程数据段副本(数据隔离) 线程可以直接与其进程的其他线程通信;进程必须使用进程间通信与兄弟进程通信 新线程很容易创建(创建的开销很少,速度很快);新进程需要父进程的重复(需要开辟空间,复制资源,开销比开启线程多10-100倍) 线程可以对同一进程的线程进行相当大的控制; 进程只能对子进程进行控制 对主线程的更改(取消、优先级更改等)可能会影响进程的其他线程的行为; 对父进程的更改不会影响子进程. 三, 为什么要使用多线程 多线程指的是,在一个进程中开启多个线程,简单的讲: 如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程.详细的讲分为4点: 多线程共享一个进程的地址空间 线程比进程更轻量级,线程比进程更容易创建和撤销,在许多操作系统中

2019-2020-1 20191232 《信息安全专业导论》第九周学习总结

ⅰ亾dé卋堺 提交于 2019-12-06 06:57:29
教材学习内容总结 1.现代软件:应用软件(帮助我们解决现实世界问题)、系统软件(管理计算机系统并与硬件进行交互) 2.内存管理: 三种技术的基本原理 单块内存管理 把应用程序载入一段连续的内存区域的内存管理方法 分区内存管理 固定分区法:把内存分为特定数目的分区以载入程序的内存管理方法 动态分区法:根据容纳程序的需要对内存分区的内存管理方法 页式内存管理 把进程划分为大小固定的页,载入内存时存储在帧中的内存管理方法 3. 进程状态:创建状态、准备就绪状态、运行状态、等待状态、终止状态。 4.CPU调度:抢先调度(当操作系统决定照顾另一个进程而抢占当前执行进程的CPU资源时发生的CPU调度)、非抢先调度(当前执行的进程自愿放弃了CPU时发生的CPU调度)。 5.非抢先调度(先到先服务、最短作业优先)、抢先调度(轮询法)。 从准备就绪状态首选哪个进程进入运行状态的方法 先到先服务 进程按照它们到达运行状态的顺序转移到CPU 最短作业优先 查看所有处于准备就绪状态的进程,并分派一个具有最短服务时间的 轮询法 把处理时间平均分配给所有准备就绪的进程 6.文件: 文本文件(包含字符的文件)、二进制文件(包含特定格式的数据的文件,要求给位串一个特定的解释)。 文件扩展名 : 扩展名 文件类型 txt 文本数据文件 mp3、au、wav 音频文件 gif、tiff、jpg 图像文件 doc

python 进程

自作多情 提交于 2019-12-05 16:33:53
理论 什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。 第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。[3] 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况

Spark(一): 基本架构及原理

岁酱吖の 提交于 2019-12-05 13:58:48
Spark(一): 基本架构及原理 Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求 官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍 目标: 架构及生态 spark 与 hadoop 运行流程及特点 常用术语 standalone模式 yarn集群 RDD运行流程 架构及生态: 通常当需要处理的数据量超过了单机尺度(比如我们的计算机有4GB的内存,而我们需要处理100GB以上的数据)这时我们可以选择spark集群进行计算,有时我们可能需要处理的数据量并不大,但是计算很复杂,需要大量的时间,这时我们也可以选择利用spark集群强大的计算资源,并行化地计算,其架构示意图如下: Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的 Spark

CPU上下文切换详解

二次信任 提交于 2019-12-05 13:54:12
我们都知道CPU上下文切换,会增加系统负载。那什么是CPU上下文,为什么要切换? 什么是CPU上下文 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同,CPU的上下文切换可以分为不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。 进程上下文切换 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。 内核空间(Ring 0)具有最高权限,可以直接访问所有资源;

线程调度及进程调度

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 09:06:02
一、Java线程调度    1.抢占式调度: 指的是每条线程执行的时间、线程的切换都由系统控制。 系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。    2.协同式调度: 指某一线程执行完后主动通知系统切换到另一线程上执行。 线程的执行时间由线程本身控制,线程切换可以预知,不存在多线程同步问题,但它有一个致命缺点:如果一个线程编写有问题,运行到一半就一直阻塞,那么可能导致整个系统崩溃。    3.JVM的线程调度的实现(抢占式调度): Java使用的线程调度使用抢占式调度,Java中线程会按优先级分配CPU时间片运行,且优先级越高越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。    4.线程让出CPU的情况:     1)当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield方法。     2)当前运行线程因为某些原因进入阻塞状态,例如阻塞在IO上。     3)当前运行线程结束,即运行完run方法里面的任务。 实例: 1 public

Lab6:进程的调度

雨燕双飞 提交于 2019-12-05 07:30:58
CPU调度 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可使用的CPU资源 调度策略 比较调度算法的准则 CPU使用率 吞吐量 周转时间 就绪等待时间 响应时间 吞吐量与延迟 低延迟:喝水的时候想要一打开水龙头水就流出来 高带宽:给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟 处理机调度策略的响应时间目标 减少响应时间 减少平均响应时间的波动 增加吞吐量 减少等待时间 调度算法 先来先服务算法(First Come First Served, FCFS) 依据进程进入就绪状态的先后顺序排列,进程进入等待或结束状态时,就绪队列中的下一个进程占用CPU 但是FCFS的平均等待时间波动较大,I/O资源和CPU资源的利用率较低 短进程优先算法(SPN) 选择就绪队列中执行时间最短进程占用CPU进入运行状态,用历史的执行时间来预估未来的执行时间,短进程优先算法具有最优平均周转时间 但是连续的短进程流会使长进程无法获得CPU资源 最高响应比优先算法(HRRN) 选择就绪队列中响应比R值最高的进程 R=(w+s)/s w: 等待时间(waiting time) s: 执行时间(service time) 时间片轮转算法(RR, Round-Robin) 利用时间片作为分配处理机资源的基本时间单元,时间片结束时,按FCFS算法切换到下一个就绪进程

Linux进程调度原理

送分小仙女□ 提交于 2019-12-05 07:23:52
Linux进程调度原理 Linux进程调度的目标     1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;     2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间;     3.保证公平和避免饥渴;     4.SMP调度:调度程序必须支持多处理系统;     5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求; Linux进程优先级   进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。 任何时候,实时进程的优先级都高于普通进程 ,实时进程只会被更高级的实时进程抢占,同级实时进程之间是按照FIFO(一次机会做完)或者RR(多次轮转)规则调度的。    首先,说下实时进程的调度   实时进程,只有静态优先级,因为内核不会再根据休眠等因素对其静态优先级做调整,其范围在0~MAX_RT_PRIO-1间。默认MAX_RT_PRIO配置为100,也即,默认的实时优先级范围是0~99。而nice值,影响的是优先级在MAX_RT_PRIO~MAX_RT_PRIO+40范围内的进程。   不同与普通进程,系统调度时,实时优先级高的进程总是先于优先级低的进程执行。知道实时优先级高的实时进程无法执行

Operating System: Process Scheduling

谁都会走 提交于 2019-12-05 04:07:39
本文主要参考《计算机操作系统(第四版)》(西安电子科技大学出版社)以及清华大学操作系统公开课(向勇、陈渝),整理操作系统的基本概念,供自己复习查阅。 处理机调度 内存中进程的数目往往多于处理机的数目,这就要求操作系统按照某种算法把处理机动态地分配给处于就绪状态的某个进程,这就是 处理机调度(Process Scheduling) 。调度的实质就是一种 资源分配 。 调度层次 高级调度 ,又称 作业调度 ,调度对象是作业,主要功能是决定将外存上处于后备队列的哪些作业调入内存、为它们创建进程分配资源,并将它们放入就绪队列。(高级调度主要存在于多道批处理系统。) 中级调度 ,又称 内存调度 ,主要目的是提高内存利用率和系统吞吐量。该调度会把那些暂时无法运行的进程调到外存等待,此时被调进程的状态称为绪驻(挂起)状态;当它们符合继续运行的条件而且内存也有足够的空间时会被重新调入内存,此时为就绪状态,挂在就绪队列等待,中级调度实质上就是存储器管理中的 对换Swap 功能。 低级调度 ,又称 进程调度 ,调度对象是进程或者内核级线程,该调度决定就绪队列中的哪个进程应获得处理机,并由分派程序把处理机分配给被选中的进程。进程调度是最基本的调度,即多道批处理、分时、实时系统,都应该配置这类调度。 调度算法的目标 调度算法的选择和设计取决于操作系统的类型,在批处理系统、分时系统和实时系统中

进程调度算法spf,fpf,时间片轮转算法实现

最后都变了- 提交于 2019-12-05 02:38:24
调度的基本概念:从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。 进程信息 1 struct node { 2 string name;//进程名称 3 int id;//进程id 4 int time;//进程服务时间 5 int rtime;//进程服务时间(主要用于时间片轮转算法) 6 int level;//进程优先级 7 int start;//进程提交时间 8 int lst;//进程调度时间 9 }; 1 set<string> pname;//存放进程名称,防止创建重复进程 2 queue<node> qq;//时间片轮转时用到的就绪队列 3 queue<node> pp;//进程的执行队列 4 queue<node> db;//时间片算法中的调度顺序 5 priority_queue<node, vector<node>, cmpspf> spf;//短时间优先算法队列 6 priority_queue<node, vector<node>, cmpfpf> fpf;//优先级算法队列 7 vector<node> ready;//就绪队列 8 vector<node> emy;//已删除的进程 用vector容器存放就绪的进程(每插入一个,sort一下,依据进程提交时间升序排列) spf(短作业优先算法) 算法思想