进程调度

什么是真正的实时操作系统(转)

余生颓废 提交于 2020-02-16 17:41:20
转载链接: https://blog.csdn.net/zhourui1982/article/details/5282361 做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platform team封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统? 1. 首先说一下实时的定义及要求: 参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。 http://www.faqs.org/faqs/realtime-computing/faq/ 一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows在CPU空闲时可以提供非常短的典型中断响应,但是

调度算法

吃可爱长大的小学妹 提交于 2020-02-13 05:16:19
在多道程序环境中,主存中有着多个进程。其数目往往多于处理机数量。这就要求系统能依照某种算法。动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由处理机调度程序完毕的。 处理机调度 在多道程序系统中。一个作业被提交后必须经过处理机调度后,方能获得处理机运行。对于批量型作业而言,通常须要经历作业调度(也称为 高级调度 )和进程调度(也称为 低级调度 )两个过程才干获得处理机;而对于终端型作业而言。通常仅仅须要经过进程调度就能够获得处理机。除了上述两种调度。操作系统中往往也设置了 中级调度 。用来提高内存的利用率。 以下我们分别来谈谈这几种调度。首先是 高级调度 。其主要功能就是依据 某种算法 ,把外存上处于后备队列中的那些作业调入内存,也就是说。调度的对象是作业。那么什么叫做作业呢? 作业 是一个比程序更为广泛的概念,它不仅包括了通常的程序和数据,并且配有一份作业说明书。系统就是依据该说明书来对程序的执行进行控制。前面所说的某种算法,就是我们后面会提到的几种经常使用 调度算法 。 低级调度 用于决定就绪队列中的哪个进程应该获得处理机。然后再由分派程序运行把处理机分派给该进程的详细操作。 中级调度 的主要目的是为了提高内存利用率和系统吞吐量。 它的工作原理就是将临时不能执行的进程调至外存上去,此时的状态称为 挂起 。相反当内存空暇时,再将他们调回内存,此时的状态称为

RT-thread内核之进程间通信

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-13 00:09:28
这里面见到的同步和互斥的概念非常清晰,转载自: http://www.cnblogs.com/King-Gentleman/p/4311582.html 一、进程间通信机制 rt-thread操作系统的IPC(Inter-Process Communication,进程间同步与通信)包含有中断锁、调度器锁、信号量、互斥锁、事件、邮箱、消息队列。其中前5个主要表现为线程间同步,邮箱与消息队列表现为线程间通信。本文主要介绍它们的一些特性及使用场合。 1、中断锁 关闭中断也叫中断锁,是禁止多任务访问临界区最简单的一种方式,即使是在分时操作系统中也是如此。当中断关闭的时候,就意味着当前任务不会被其他事件打断(因为整个系统已经不再响应那些可以触发线程重新调度的外部事件),也就是当前线程不会被抢占,除非这个任务主动放弃了处理器控制权。关闭中断/恢复中断API接口由BSP实现,根据平台的不同其实现方式也大不相同。比如在stm32平台中中断锁机制通过关闭中断函数(rt_base_t rt_hw_interrupt_disable(void),这个函数用于关闭中断并返回关闭中断前的中断状态。)以及恢复中断函数(void rt_hw_interrupt_enable(rt_base_t level),恢复调用rt_hw_interrupt_disable()函数前的中断状态)实现。 警告:

操作系统知识点

无人久伴 提交于 2020-02-08 23:45:52
操作系统是什么 管理计算机硬件与软件资源的程序,是计算机系统的内核与基石 本质上是运行在计算机上的软件程序 为用户提供一个与系统交互的操作界面 分为内核与外壳,其中内核是能操作硬件的程序,而外壳则是围绕着内核的应用程序 进程调度算法 根据系统资源分配资源所规定的资源分配算法 先来先服务调度算法 FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。 不可剥夺算法。对长作业有利,对短作业不利。有利于CPU繁忙型作业,不利于I/O繁忙型作业 时间片轮转调度法 适用于分时系统 系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。 时间片的大小对系统性能影响很大。如果时间片过短,则处理机在进程间过于频繁切换,处理机的开销增大;若过长,则退化为先来先服务算法 短进程优先调度算法 从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。 非抢占策略。但是长作业不利,不能保证紧迫性作业(进程)被及时处理

完全公平调度器

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-07 01:48:17
CFS实现的公平的基本原理是这样的:指定一个 周期 ,根据进程的数量,大家” 平分 “这个调度周期内的CPU使用权,调度器保证在一个周期内所有进程都能被执行到。CFS和之前O(n)调度器不同, 优先级高的进程能获得更多运行时间,但不代表优先级高的进程一定就先运行: 调度器使用 vruntime 来统计进程运行的累计时间,理想状态下,所有进程的vruntime是相等时代表当前CPU的时间分配是完全公平的。但事实上,即使是多核的系统一般进程数也是大于核心数的,所以一旦有进程占用CPU运行势必会造成不公平,完全公平调度器通过让当前遭受不公最严重(vruntime最小)的进程优先运行来缓解不公平的情况。当然,vruntime所指的运行时间并未非和以往一样每个或每几个cpu tick周期增加1,需要 经过优先级加权换算 ,优先级高的进程可能运行10个tick之后vruntime才加1,反之优先级低的进程可能运行1个tick之后vruntime就被加了10。 附一张图: 1.调度周期如何规定? CFS引入了一个动态变化的调度周期:period。看两个CFS开放给用户的参数: {//字面意思调度最小粒度,即进程每次被调度到最少要占用多长时间CPU .procname = "sched_min_granularity_ns", .data = &sysctl_sched_min

操作系统--CPU调度(二)

耗尽温柔 提交于 2020-02-06 21:26:18
6.2 调度准则 不同的CPU调度算法具有不同属性,且可能对某些进程更为有利。为了选择算法以使用于特定情况,必须分析各个算法的属性。 为了比较CPU调度算法,分析员提出了许多准则,用来进行比较的特征对确定最佳算法有很大影响。这些准则包括如下: CPU使用率 :需要使CPU尽可能忙。CPU使用率从0% 到 100%。对于真实系统,它应从40% (请负荷系统)到90%(重负荷使用的系统)。 吞吐量 :如果CPU忙于执行进程,那么就要评价其工作量。其中一种测量工作量的方法称为 吞吐量 ,它指一个时间单元内所完成进程的数量。对于长进程,吞吐量为每小时一个进程;对于短进程事务,吞吐量可能为每秒十个进程。 周转时间 :从一个特定进程的角度来看,重要准则是运行该进程需要花费多长时间。从进程提交到进程完成的时间间隔称为 周转时间 。周转时间是所有时间段之和,包括等待进入内存、在就绪队列中等待、在CPU上执行和I/O执行。 等待时间 :CPU调度算法并不影响进程运行和执行I/O 的时间量;它只影响进程在就绪队列中等待所花费的时间。等待时间是在就绪队列中等待所花时间之和。 响应时间 :对于交互式系统,周转时间并不是最佳准则。通常,进程能相当早就产生某些输出,并能继续计算新结果同时输出以前的结果给用户。因此,另一时间度量是从提交请求到产生第一响应的时间。这种度量称为 响应时间 ,是开始响应所需要的时间

并发,并行,异步,多线程

痞子三分冷 提交于 2020-02-05 13:29:48
文章目录 例子一 例子二 例子三 进程与线程 进程和线程的关系 个人理解 异步与多线程 基本概念 深层次理解 多线程和异步操作的异同 异步操作的本质 线程的本质 异步操作的优缺点 多线程的优缺点 适用范围 并发、并行和多线程的关系 小结 例子一 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 你吃饭吃到一半,电话来了,你 停了下来接了电话,接完后继续吃饭 ,这说明你支持并发。 (不一定是同时的) 你吃饭吃到一半,电话来了,你一边 打电话一边吃饭 ,这说明你支持并行。 例子二 并发是两个队列,使用一台咖啡机,并行是两个队列,使用两台咖啡机。如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人便秘了去厕所呆半天,后面的人也只能死等着他回来才能去接咖啡,这效率无疑是最低的。 例子三 去吃虾滑,一个师傅有2个锅子。师傅同时做经典虾滑和牛肉虾滑,类似于(周伯通左右互搏)是并行。一旦师傅停下一方去做另外一方,那就是并发。 我觉得边吃饭边打电话是一个核心,多台处理器同时处理多个任务是多个核心。应该说并行的判断条件是 同一时间点能处理多个事件 。 进程与线程 1、 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体

操作系统(四)

感情迁移 提交于 2020-02-04 04:31:49
CPU调度 上下文切换: ->切换CPU的当前任务,从一个进程/线程转换到另一个进程/线程; ->但是切换之前要保护现场,保存当前进程/线程在PCB/TCP中的执行上下文(也就是CPU的状态); ->切换任务,当然要读取下一个进程/线程的上下文。 CPU调度: ->从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程; ->需要调度程序(挑选进程/线程的内核函数); ->需要考虑的问题是 调度的时机。 在进程/线程生命周期的什么时候进行调度? 从一个状态到另一个状态的时候会发生调度。 内核运行调度程序的条件(满足其一即可) ->一个进程从运行状态切换到等待状态 ->一个进程被终结了 CPU调度方式 (1)不可抢占 ->调度程序必须等待事件结束(效率低,不采用); (2)可以抢占 ->调度程序在中断被响应后执行; ->当前的进程从运行切换到就绪,或者一个进程从等待切换到就绪; ->当前运行的进程可以被换出。 注意,以上一般指用户态;内核态也可能涉及到是否抢占。 调度原则 (1)调度策略 (2)程序执行模型 执行模型:程序在CPU突发和I/O中交替 ->每个调度决定都是关于在下一个CPU突发时将哪个工作交给CPU; ->在时间分片机制下,线程可能在结束当前CPU突发前被迫放弃CPU; (3)比较调度算法的准则 CPU使用率:CPU处于忙状态所占时间的百分比; 吞吐量

4.操作系统_处理器调度

╄→гoц情女王★ 提交于 2020-02-04 02:39:00
1. 处理器调度 文章目录 1. 处理器调度 1.1. 概念 1.2. 处理器调度的层次 1.2.1. 高级调度 1.2.2. 中级调度 1.2.3. 低级调度 1.2.4. 处理器三级调度模型 1.2.5. 处理器二级调度模型 1.3. 选择调度算法的原则 1.3.1. 资源利用率 1.3.2. 响应时间 1.3.3. 周转时间 1.3.4. 吞吐率 1.3.5. 公平性 1.4. 作业周转时间 1.4.1. 作业周转与平均周转时间 1.4.2. 作业带权周转时间和平均作业带权周转时间 1.5. 作业的管理与调度 1.5.1. 批处理作业的组织和管理 1.1. 概念 在计算机系统中,可能有很多批处理作业同时存放在磁盘的后备作业队列中,或者有很多终端与主机相连,交互塑作业不断地进人系统,这样主存和处理器等资源便供不应求。按照何种原则挑选批处理作业进入主存运行、能否继续接纳分时用户. 如何在进程之间分配处理器资源,无疑是操作系统进行资源管理所要面对的重要问题,由处理器调度完成涉及处理器调度和资源分配的工作。 1.2. 处理器调度的层次 1.2.1. 高级调度 高级调度( high level scheduling)又称作业调度、长程调度,在多道批处理操作系统中, 从输人系统的一批作业中按照预定的调度策略挑选若干作业进入主存,为其分配所需资源

0512 操作系统进程调度实验

我只是一个虾纸丫 提交于 2020-02-04 02:33:17
实验三进程调度模拟程序 专业:商软2班 姓名:韩麒麟 学号:201406114253 一. 目的和要求 1.1. 实验目的 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 1.2. 实验要求 1.2.1例题:设计一个有 N个进程并发执行的进程调度模拟程序。 进程调度算法:采用最高优先级优先的调度算法(即把处理机分配给优先级最高的进程)和先来先服务(若优先级相同)算法。 (1). 每个进程有一个进程控制块(PCB)表示。进程控制块包含如下信息:进程名、优先级、到达时间、需要运行时间、已用CPU时间、进程状态等等。 (2). 进程的优先级及需要的运行时间可以事先人为地指定,进程的运行时间以时间片为单位进行计算。 (3). 每个进程的状态可以是就绪 r(ready)、运行R(Running)、或完成F(Finished)三种状态之一。 (4). 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 (5). 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待调度。 (6). 每进行一次调度程序都打印一次运行进程、就绪队列中各个进程的 PCB,以便进行检查