进程调度

进程调度

南楼画角 提交于 2020-01-13 04:18:13
在上一篇文章 Linux内核进程相关知识点总结 中介绍了进程相关的一些基础知识,包括进程的创建、运行以及终止等。这篇文章中主要介绍进程的调度。 进程调度 :举个栗子,在一个单核处理器中,同一时刻只能有一个进程拥有处理器资源,其他的进程只能在就绪队列中排序,等待处理器空闲之后才有机会获取处理器资源并开始运行。在这种情况下,操作系统就需要从众多的就绪进程中选择一个最为合适的进程来运行,这就是进程调度器,其出现的目的就是提高处理器的利用率。 进程的优先级 :Linux操作系统最早采用nice值来调整进程的优先级,取值范围是-20-19,默认值为0。Nice值越大,优先级越低。目前,Linux内核使用0-139的数值表示进程的优先级,数值越低,优先级越高。其中,0-99给实时进程用,100-139给普通进程用。另外,在用户空间有一个传统的变量nice值映射到普通进程的优先级,即100-139。 其中,static_prio指的是静态优先级,在进程启动时分配。内核不存储nice值,取而代之的是static_prio。内核中的宏NICE_TO_PRIO()实现将nice值转换为static_prio。他之所以被称为静态优先级,是因为他不会随着时间而改变,用户可以通过系统调用来改变该值。 normal_prio是基于static_prio和调度策略计算出来的

go语句及其执行规则

佐手、 提交于 2020-01-13 00:15:23
参考: https://time.geekbang.org/column/article/39841?utm_source=weibo&utm_medium=xuxiaoping&utm_campaign=promotion&utm_content=columns 不要通过共享数据来通讯,恰恰相反,要以通讯的方式共享数据。 Don’t communicate by sharing memory; share memory by communicating. 一个进程至少会包含一个线程。如果一个进程只包含了一个线程,那么它里面的所有代码都只会被串行地执行。每个进程的第一个线程都会随着该进程的启动而被创建,它们可以被称为其所属进程的主线程。 相对应的,如果一个进程中包含了多个线程,那么其中的代码就可以被并发地执行。除了进程的第一个线程之外,其他的线程都是由进程中已存在的线程创建出来的。 也就是说,主线程之外的其他线程都只能由代码显式地创建和销毁。这需要我们在编写程序的时候进行手动控制,操作系统以及进程本身并不会帮我们下达这样的指令,它们只会忠实地执行我们的指令。不过,在 Go 程序当中,Go 语言的运行时(runtime)系统会帮助我们自动地创建和销毁系统级的线程。这里的系统级线程指的就是我们刚刚说过的操作系统提供的线程。 这带来了很多优势,比如

(笔记)Linux内核学习(三)之进程调度

我与影子孤独终老i 提交于 2020-01-11 09:13:53
进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统。 一 调度策略 1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。 综合型:既是I/O消耗型又是处理器消耗型。 调度策略要在 :进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡。 2 调度概念 优先级:基于进程价值和对处理器时间需求进行进程分级的调度。 时间片:表明进程被抢占前所能持续运行的时间,规定一个默认的时间片。时间片过长导致系统交互性的响应不好,       程序并行性效果差;时间片太短增大进程切换带来的处理器耗时。矛盾! 时间片耗尽进程运行到期,暂时不可运行状态。直到所有进程时间片都耗尽,重新计算进程时间片。 Linux调度程序提高交互式程序优先级,提供较长时间片;实现动态调整优先级和时间片长度机制。 进程抢占:Linux系统是抢占式,始终运行优先级高的进程。 3 调度算法 可执行队列:runqueue;给定处理器上可执行进程的链表,每个处理器一个。每个可执行进程都唯一归属于一个可执行队列。 运行队列是调度程序中最基本的数据结构: struct runqueue {   spinlock_t lock; /*

Linux2.6内核--进程调度理论

为君一笑 提交于 2020-01-10 22:25:23
从1991年Linux的第1版到后来的2.4内核系列,Linux的调度程序都相当简陋,设计近乎原始,见 0.11版内核进程调度 。当然它很容易理解,但是它在众多可运行进程或者多处理器的环境下都难以胜任。 正因为如此,在Linux2.5开发系列的内核中,调度程序做了大手术。开始采用了一种叫做O(1)调度程序的新调度程序——它是因为其算法的行为而得名的。它解决了先前版本Linux调度程序的许多不足,引入了许多强大的新特性和性能特征。O(1)调度程序虽然对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面系统上则表现不佳,因为其缺少交互进程。 自2.6内核系统开发初期,开发人员为了提高对交互程序的调度性能引入了新的进程调度算法。其中最为著名的是“反转楼梯最后期限调度算法”(RSDL),该算法吸取了队列理论,将公平调度的概念引入了Linux调度程序。并且最终在2.6.23内核版本中替代了O(1)调度算法,它此刻被称为“完全公平调度算法”,或者简称CFS。 1.策略 策略决定调度程序在何时让什么进程运行。调度器的策略往往就决定系统的整体印象,并且,还要负责优化使用处理器时间。无论从哪个方面来看,它都是至关重要的。 进程可以被分为I/O消耗型和处理器消耗型。 1.1.进程优先级 调度算法中最基本的一类就是基于优先级的调度。Linux采用了2种不同的优先级范围。第一种是用nice值

记录——时间片轮转调度算法模拟程序,用Java实现

谁说胖子不能爱 提交于 2020-01-10 06:53:22
前言 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分, 对于不同的系统和系统目标,通常采用不同的调度算法。采用算法时,则要考虑多方面因素,以便达到最佳效果。在分时系统中,最简单也是较常见的是基于时间片的轮转调度算法,因此采用时间片轮转调度算法来实现模拟进程调度任务的执行过程。 一、目标及分析 目标: 1、合理设计PCB结构,设计模拟指令格式,并以文件形式存储,程序能够读取文件并自动生成指令序列。 2、根据文件内容,建立模拟进程队列,并能采用时间片轮转调度算法对模拟进程进行调度。 分析: 1、首先编写一个进程序列描述文件:包括进程的个数,进程的内容(即进程的功能序列); 2、程序应具有选择、读取、解析进程序列描述文件功能,根据解析的内容生成指令序列; 3、根据时间片轮转算法,应具有设置时间片大小功能; 4、开始调度按钮,进行模拟调度功能,界面显示调度过程; 5、停止调度功能按钮,停止模拟调度功能,整个系统中的进程调度程序都被停止,界面也应该有相应的显示; 6、将调度过程记录为文档。 二、进程序列描述文件 根据分析,进行描述文件设计 模拟指令的格式:操作命令+操作时间 ● C : 表示在CPU上计算 ● I : 表示输入 ● O : 表示输出 ● W

《Linux内核设计与实现》 Chapter4 读书笔记

浪尽此生 提交于 2020-01-09 05:02:22
《Linux内核设计与实现》 Chapter4 读书笔记 调度程序负责决定将 哪个进程投入运行,何时运行以及运行多长时间 ,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。 一、多任务 多任务操作系统就是能同时 并发地交互执行 多个进程的操作系统。 多任务系统可以划分为两类: 非抢占式多任务 进程会一直执行直到自己主动停止运行 抢占式多任务 Linux/Unix使用的是抢占式的方式;强制的挂起进程的动作就叫做抢占。 像所有unix的变体和许多其他现代操作系统一样,Linux提供了抢占式的多任务模式。 进程的时间片:进程在被抢占之前能够运行的时间是预先设置好的。 二、Linux 的进程调度 O(1)调度器虽然在拥有数以十计(不是数以百计)的多处理器的环境下尚能表现出近乎完美的性能和可扩展性,但是时间证明该调度算法对于调度那些响应时间敏感的程序却有一些先天不足,这些程序我们称其为交互进程一它无疑包括了所有需要用户交互的程序。 因此: O(1)调度程序虽然对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面系统上则表现不佳,因为其缺少交互进程,自2.6内核系统开发初期,开发人员为了提高对交互程序的调度性能引入了新的进程调度算法,其中最为著名的是“反转楼梯最后期限调度算法,该算法吸取了队列理论,将公平调度的概念引入了Linux调度程序。并且最终在2.6

Nachos-Lab2-线程调度模块实现

纵然是瞬间 提交于 2020-01-08 21:12:39
源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到“扩展调度算法”的目标。本次实验主要是要理解Timer、Scheduler和Interrupt之间的关系,从而理解线程之间是如何进行调度的。 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Challenge1 第一部分 Y Y Y Y 具体Exercise的完成情况 Exercise1 调研 调研Linux或Windows中采用的进程/线程调度算法。具体内容见课堂要求。 linux-4.19.23进程调度策略 : SCHED_OTHER 分时调度策略, SCHED_FIFO 实时调度策略(先到先服务), SCHED_RR 实时调度策略(时间片轮转)。 RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 RR进程和FIFO进程都采用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执行哪一个是由其在队列中的位置决定的,这样导致一些不公正性(优先级是一样的,为什么要让你一直运行?)

第 5 章 进程调度

穿精又带淫゛_ 提交于 2020-01-06 20:51:27
  CPU调度是多道程序操作系统的基础。 5.1 CPU调度程序   CPU调度的任务是,从就绪队列中选择一个等待进程,并未其分配CPU。进程选择采用短期调度程序,调度程序从内存中选择一个能够执行的进程并为其分配CPU。   就绪队列不必是FIFO队列,队列内的记录通常为进程控制块PCB。 5.1.1 抢占调度   需要CPU调度的情况可分为以下四种: 当一个进程从运行状态切换到等待状态时(例如,I/O请求,或wait()调用以便等待子进程的终止) 当一个进程从运行状态切换到就绪状态时(例如出现中断时) 当一个进程从等待状态切换到就绪状态时(例如I/O完成) 当一个进程终止时   对于第一和第四中情况,除了调度没有选择。一个新进程必须被选择执行。   如果调度只发生在第一和第四种情况下,则调度方案称为非抢占的或协作的;否则,调度方案称为抢占的。在非抢占调度下,一旦某个进程分配到CPU,该进程就会一直使用CPU,直到它终止或切换到等待状态。 5.1.2 调度程序   与CPU调度功能有关的另一个组件是调度程序。调度程序是一个模块,用来将CPU控制交给短期调度程序选择的进程。这个功能包括: 切换上下文 切换到用户模式 跳转到用户程序的合适位置,以便重新启动程序   调度程序应尽可能块,因为在每次进程切换时都要使用。调度程序停止一个进程而启动另一个进程所需要的时间称为调度延迟。 5.2

第 5 章 进程调度

雨燕双飞 提交于 2020-01-05 00:29:06
  CPU调度是多道程序操作系统的基础。 5.1 CPU调度程序   CPU调度的任务是,从就绪队列中选择一个等待进程,并未其分配CPU。进程选择采用短期调度程序,调度程序从内存中选择一个能够执行的进程并为其分配CPU。 5.1.1 抢占调度   需要CPU调度的情况可分为以下四种: 当一个进程从运行状态切换到等待状态时(例如,I/O请求,或wait()调用以便等待子进程的终止) 来源: https://www.cnblogs.com/astonc/p/12150941.html

操作系统-处理机调度与死锁

五迷三道 提交于 2020-01-04 14:47:15
第三章 处理机调度与死锁 summary:In a multiprogramming environment,there are more processes in memory than there are processors.This requires the system to be able to dynamically assign processors to a process in a ready state to execute according to some algorithm.The task of assigning a processor is done by the processor scheduler. *调度层次算法目标 高级调度, 作业 调度,决定外存上处于后备队列中的哪几个队列中的哪几个作业调入内存;低级调度, 进程 调度,决定就绪队列中的哪几个进程获得处理机;中级调度, 内存 调度,存储器中管理的对换功能;资源利用率(处理机和资源处于忙碌状态),公平性(时间相对公平,无进程饥饿),平衡性(进程种类,计算型与I/O型),策略强制执行;相应时间快,均衡性,截至时间的保证(开始执行的最迟时间,完成的最迟时间),可预测性(连续,实时) *作业与作业调度 作业(程序,数据,作业说明书),作业步(每一个对作业加工步骤);作业控制块PCB