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

RTX基于32位Windows实时操作系统 主要特点: 提供一个位于Windows上运行的实时子系统(RTSS) 提供精确的IRQs,I/O和内存控制 性能和分区专用核心 RTX执行实时线程的确定性排序 基于RTX的应用程序在Windows崩溃时保持正常 应用: 保证程序精确运行时间,设置定时器时间到1微秒; 非常小的时间延迟10微秒。 独立于Windows的运行——RTX下程序运行流程独立,Windows不会干扰到你实时应用程序。 可伸缩性——一个调度器使用所有实时处理器。 感知smp调度器使用priority-driven和先发制人的算法,以 阅读详情

做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现优快云上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platform team封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统?

1. 首先说一下实时的定义及要求:

参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。
http://www.faqs.org/faqs/realtime-computing/faq/

一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。这是一个基本的问题:并不是Windows不够快或效率不够高,而是因为它不能提供确定性,所以,Windows不是一个实时操作系统。

根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费的,我们公司本来的产品就是基于VxWorks的,现在业界都在Cost Reduction,为了响应号召,正在调研如何把平台换成免费的嵌入式实时Linux。同学们,如何选择,自己考虑吧:-)

硬实时 - 代表产品 VxWorks

举一个经常使用的实例,中高档汽车中使用的气囊。当报告车辆碰撞的传感器中断CPU后,操作系统应快速地分配展开气囊的任务,并且不允许任何其他非实时处理进行干扰,晚一秒钟展开气囊比没有气囊的情况更糟糕,这就是一个典型的必须使用硬实时的系统。

硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。

软实时 - 代表产品 软实时Linux

再举一个实例,IPTV数字电视机顶盒,需要实时的处理(解码)视频流,如果丢失了一个或几个视频帧,显然会造成视频的品质更差,但是只要做过简单的抖动处理的系统,丢失几个视频帧就不会对整个系统造成不可挽救的影响。

软实时系统就是那些从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误。

---------------------------------------------

请注意:讲到这里,想花点墨水区分一下实时和嵌入式的概念,因为笔者也长时间把这两者混为一谈。实时操作系统的概念上文已经讲的很清楚了,主要就是要能确定性的满足时间要求。嵌入式系统很难下一个定义,有兴趣的可以百科一下“嵌入式系统”,一般可以认为是板子或芯片上软硬件的总和,嵌入式系统一定要对实时任务有很强的支持能力,所以一般嵌入式系统都会采用实时操作系统,根据不同应用,选择采用硬实时或软实时。

---------------------------------------------

2. 如何衡量一个实时操作系统的实时性能?

主要有以下两个重要指标:

指标1、中断响应时间(可屏蔽中断)

计算机接收到中断信号到操作系统作出响应,并完成切换转入中断服务程序的时间。对于抢先式内核,要先调用一个特定的函数,该函数通知内核即将进行中断服务,使得内核可以跟踪中断的嵌套。抢先式内核的中断响应时间由下式给出:
中断响应时间=关中断的最长时间+保护CPU 内部寄存器的时间+进入中断服务函数的执行时间+开始执行中断服务例程(ISR)的第一条指令时间

 

请注意:中断响应时间是系统在最坏情况下响应中断的时间,某系统100次中有99次在50ms之内响应中断,只有一次响应中断的时间是250ms,只能认为中断响应时间是250ms。

指标2、任务切换时间

除为中断处理提供确定性外,实时处理也需要支持周期性间隔的任务调度。大量控制系统要求周期性采样与处理。某个特定任务必须按照固定的周期(p)执行,从而确保系统的稳定性。考虑一下汽车的防抱死系统(ABS)。控制系统对车辆的每个车轮的转速进行采样(每秒最多 20 次)并控制每个制动器的压力(防止它锁死)。为了保持控制系统的正常工作,传感器的采样与控制必须按照一定的周期间隔。这意味着必须抢占其他处理,以便 ABS 任务能按照期望的周期执行。

当多任务内核决定运行另外的任务时,它把正在运行任务的当前状态(即CPU 寄存器中的全部内容)保存到任务自己的栈区之中。然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU 的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。做任务切换所需要的时间取决于CPU 有多少寄存器要入栈。CPU 的寄存器越多,额外负荷就越重。

系统实时性能重要指标的典型值
-----------------------------------------------------
                  VxWorks    uC/OS-II        RT-Linux2.0  QNX6  
硬件平台  MC68000  33MHz-486  60MHz-486   33MHz-486  
任务切换  3.8us          < 9us            不详                12.57us  
中断响应  < 3us          < 7.5us         25us                7.54us  
-----------------------------------------------------

参考文献:《4种实时操作系统实时性的分析对比》 - 百度一下可以搜到

3. 实时操作系统的核心 - 任务调度(VxWorks)

既然实时性对于实时操作系统如此重要,同学们,我们下面就来学习一下实现实时性的核心模块 - 任务调度。笔者所在的公司花了大把银子购买风河的VxWorks,但是为了实现自己的可控性,除了任务调度模块以外全部重写,包括内存管理、文件管理等其他核心模块,但唯独任务调度模块除外,这可是人家的压箱底法宝:-)

构成应用软件系统的程序集合中,独立的、相互作用的程序单元,在其执行时称之为任务,从系统的角度来看,任务是竞争系统资源的最小运行单元。单个CPU 中,多任务机制制造了一个多个任务同时执行的假象。其实系统只是根据一个多任务调度算法,将内核插入到这些任务中执行。实时系统VxWorks的一个任务可有多种状态,但最基本的状态有以下四种:

1) 就绪态(Ready):任务只等待系统分配CUP资源。
2) 挂起态(Pend):任务需等待某些不可利用的资源而被阻塞。
3) 休眠态(Sleep):如果系统不需要某一个任务工作,则这个任务处于休眠状态。
4) 延迟态(Delay):任务被延迟时所处的状态。

大家可以在网上搜一下VxWorks任务调度的相关文章,一般都会配状态机图。

----------------------------

请注意:任务(task)、进程(process)、线程(thread)等概念相互联系又相互区别,因为不是本文的重点,这里不多解释,如果想详细了解推荐看一看“Windows Kernel Programming”。在VxWorks中,因为每个任务没有自己独立的虚拟内存空间,可以把任务理解为线程。 

----------------------------

任务由系统内核调度运行一段固定长度的时间,称为时间片。调度是指为任务分配资源和时间,使系统满足特定的性能要求。调度算法的目的是在正常情况下,尽可能满足所有任务的时限:在峰值负载条件下,保证强实时任务满足时限。因为时限是区分实时系统和非实时系统的关键因素,因此调度算法是实时系统的基本问题。实时操作系统所具有的运行性能,如吞吐量的大小、周转时间的长短、相应的及时性和可预测性等在很大程度上都取决于实时调度。

进程调度可采用下述两种方式:

1. 非抢占方式。采用这种调度方式,一旦把处理机分配给某进程后,便让该进程一直执行,直到该进程完成或发生某事件而被阻塞,才再把处理机分配给其他进程,决不允许某进程抢占已经分配出去的处理机。显然它难于满足紧急任务的要求,实时系统中不宜采用这种调度方式。

2. 抢占方式。允许调度程序根据某种原则,去停止某个正在执行的进程,将已分配给该进程的处理机,重新分配给另一进程。抢占的原则有:

- 时间片原则。各进程按时间片运行,当一个时间片用完后,便停止该进程的执行而重新进行调度。

- 优先权原则。当一个进程到来时,如果其优先级比正在执行的进程的优先级高,便停止正在执行的进程,将处理机分配给优先级高的进程,使之执行。实时系统中一般采用基于优先级的抢占式调度和轮转调度的进程调度和中程调度相结合的调度策略。因此既可具有较大的灵活性,又能获得极小的调度延迟。

VxWorks的wind内核缺省调度机制为基于优先级的抢占式调度。采用这种机制时,系统把处理机分配给优先级最高的进程,使之执行。一旦出现了另一个优先级更高的进程时,进程调度程序剥夺当前任务的执行,将处理机分配给高优先级任务。而在相同优先级的多个任务之间,采用时间片轮转调度机制。采用这种机制时,当一个任务到达时,它被排在轮转队列的后面,等待分配给自己的时间片的到来,如果在时间片内没有结束,则再等待属于自己的时间片的到来,直到任务完成。

- 优先级抢占式
    采用基于优先级的抢占式调度,系统中每个任务都有一个介于最高0到最低255之间的优先级。任一时刻,系统内核一旦发现一个优先级更
高的任务转变为就绪态,内核就保存当前任务的上下文并把当前任务状态转换为阻塞态,同时切换到这个高优先级任务的上下文执行。
- 轮转调度算法
    采用轮转调度算法,系统让处于就绪态的优先级相同的一组任务依次轮流执行预先确定长度的时间片。这是一种处理机平均分配的方法。如果不使用轮转调度算法,优先级相同的一组任务中第一个获得处理机的任务将不会被阻塞而独占处理机,如果没有阻塞或其他情况发生,它
不会放弃处理机的使用权。
- 抢占调度与轮转调度混合方式
    有时,基于优先级的抢占式调度可与轮转调度相结合。当优先级相同的一组任务依次轮流平均分配处理机时,若有高优先级的任务转变为
就绪态则可抢占该组任务。直到再一次符合执行条件时,该组任务才可再次共享处理机。
    为了任务控制的灵活性,VxWorks内核还提供了动态优先级机制,任务的优先级在运行期间可动态地变化。同时,为了防止优先级反转,还具有优先级继承机制,通过使用互斥信号量可以防止高优先级的任务被迫等待一段不确定时间,直到一个低优先级任务完成。

参考文献:《实时操作系统VxWorks的内核任务调度研究》 - 百度一下可以搜到

4. Linux的任务调度

通用Linux系统支持实时和非实时两种进程,实时进程相对于普通进程具有绝对的优先级。对应地,实时进程采用SCHED_FIFO或者SCHED_RR调度策略,普通的进程采用SCHED_OTHER调度策略。

在调度算法的实现上,Linux中的每个任务有四个与调度相关的参数,它们是rt_priority、policy、priority(nice)、counter。调度程序根据这四个参数进行进程调度。

在 SCHED_OTHER调度策略中,调度器总是选择那个priority+counter值最大的进程来调度执行。从逻辑上分析SCHED_OTHER 调度策略存在着调度周期(epoch),在每一个调度周期中,一个进程的priority和counter值的大小影响了当前时刻应该调度哪一个进程来执行,其中priority是一个固定不变的值,在进程创建时就已经确定,它代表了该进程的优先级,也代表这该进程在每一个调度周期中能够得到的时间片的多少;counter是一个动态变化的值,它反映了一个进程在当前的调度周期中还剩下的时间片。在每一个调度周期的开始,priority的值被赋给 counter,然后每次该进程被调度执行时,counter值都减少。当counter值为零时,该进程用完自己在本调度周期中的时间片,不再参与本调度周期的进程调度。当所有进程的时间片都用完时,一个调度周期结束,然后周而复始。另外可以看出Linux系统中的调度周期不是静态的,它是一个动态变化的量,比如处于可运行状态的进程的多少和它们priority值都可以影响一个epoch的长短。值得注意的一点是,在2.4以上的内核中,priority被nice所取代,但二者作用类似。

可见SCHED_OTHER调度策略本质上是一种比例共享的调度策略,它的这种设计方法能够保证进程调度时的公平性--一个低优先级的进程在每一个epoch中也会得到自己应得的那些CPU执行时间,另外它也提供了不同进程的优先级区分,具有高priority值的进程能够获得更多的执行时间。对于实时进程来说,它们使用的是基于实时优先级rt_priority的优先级调度策略,但根据不同的调度策略,同一实时优先级的进程之间的调度方法有所不同:

- SCHED_FIFO:不同的进程根据静态优先级进行排队,然后在同一优先级的队列中,谁先准备好运行就先调度谁,并且正在运行的进程不会被终止直到以下情况发生:1.被有更高优先级的进程所强占CPU;2.自己因为资源请求而阻塞;3.自己主动放弃CPU(调用sched_yield);

- SCHED_RR:这种调度策略跟上面的SCHED_FIFO一模一样,除了它给每个进程分配一个时间片,时间片到了正在执行的进程就放弃执行;时间片的长度可以通过sched_rr_get_interval调用得到;

由于Linux系统本身是一个面向桌面的系统,所以将它应用于实时应用中时存在如下的一些问题:

- Linux系统中的调度单位为10ms,所以它不能够提供精确的定时; 
- 当一个进程调用系统调用进入内核态运行时,它是不可被抢占的; 
- Linux内核实现中使用了大量的封中断操作会造成中断的丢失; 
- 由于使用虚拟内存技术,当发生页出错时,需要从硬盘中读取交换数据,但硬盘读写由于存储位置的随机性会导致随机的读写时间,这在某
些情况下会影响一些实时任务的截止期限; 
- 虽然Linux进程调度也支持实时优先级,但缺乏有效的实时任务的调度机制和调度算法;它的网络子系统的协议处理和其它设备的中断处理都没有与它对应的进程的调度关联起来,并且它们自身也没有明确的调度机制;

参考文献:《基于Linux的实时系统》 - 百度一下可以搜到

5. 实时Linux研究

呼哧呼哧写了半天,终于到了重头戏,实时Linux研究。前文说过,风河的VxWorks虽然性能大大的好,但是要花很多银子,对于一般的软实时应用系统来说,还是用开源免费的实时Linux比较好。笔者所在的公司也正在研究将平台转为Linux。有许多种方法可以赋予普通Linux实时的能力:

5.1 瘦内核(微内核)- Thin-Kernel

瘦内核(或微内核)方法使用了第二个内核作为硬件与 Linux 内核间的抽象接口。非实时 Linux 内核在后台运行,作为瘦内核的一项低优先级任务托管全部非实时任务。实时任务直接在瘦内核上运行。瘦内核主要用于(除了托管实时任务外)中断管理。瘦内核截取中断以确保非实时内核无法抢占瘦内核的运行。这允许瘦内核提供硬实时支持。

thin-kernel

虽然瘦内核方法有自己的优势(硬实时支持与标准 Linux 内核共存),但这种方法也有缺点。实时任务和非实时任务是独立的,这造成了调试困难。而且,非实时任务并未得到 Linux 平台的完全支持(瘦内核执行称为瘦 的一个原因)。

使用这种方法的例子有 RTLinux (现在由 Wind River Systems 专有),实时应用程序接口(RTAI)和 Xenomai。

5.2 超微内核

这里瘦内核方法依赖于包含任务管理的最小内核,而超微内核法对内核进行更进一步的缩减。通过这种方式,它不像是一个内核而更像是一个硬件抽象层(HAL)。超微内核为运行于更高级别的多个操作系统提供了硬件资源共享。因为超微内核对硬件进行了抽象,因此它可为更高级别的操作系统提供优先权,从而支持实时性。

对硬件进行抽象的超微内核法

注意,这种方法和运行多个操作系统的虚拟化方法有一些相似之处。使用这种方法的情况下,超微内核在实时和非实时内核中对硬件进行抽象。这与 hypervisor 从客户(guest)操作系统对裸机进行抽象的方式很相似。

关于超微内核的示例是操作系统的 Adaptive Domain Environment for Operating Systems (ADEOS)。ADEOS 支持多个并发操作系统同步运行。当发生硬件事件后,ADEOS 对链中的每个操作系统进行查询以确定使用哪一个系统处理事件。

5.3 资源内核(Resource-kernel)

另一个实时架构是资源内核法。这种方法为内核增加一个模块,为各种资源提供预留(reservation)。这种机制保证了对时分复用(time- multiplexed)系统资源的访问(CPU、网络或磁盘带宽)。这些资源拥有多个预留参数,如循环周期、需要的处理时间(也就是完成处理所需的时间),以及截止时间。

实现资源预留的资源内核法

资源内核提供了一组应用程序编程接口(API),允许任务请求这些预留资源。然后资源内核可以合并这些请求,使用任务定义的约束定义一个调度,从而提供确定的访问(如果无法提供确定性则返回错误)。通过调度算法,如 Earliest-Deadline-First (EDF),内核可以处理动态的调度负载。

资源内核法实现的一个示例是 CMU 公司的 Linux/RK,它把可移植的资源内核集成到 Linux 中作为一个可加载模块。这种实现演化成商用的 TimeSys Linux/RT 产品。

5.4 标准的Linux内核最新版本2.6中加入了实时功能

目前探讨的这些方法在架构上都很有趣,但是它们都在内核的外围运行。然而,如果对标准 Linux 内核进行必要的修改使其支持实时性,结果会怎么样呢?

今天,在 2.6 内核中,通过对内核进行简单配置使其完全可抢占,您就可以得到软实时功能。在标准 2.6 Linux 内核中,当用户空间的进程执行内核调用时(通过系统调用),它便不能被抢占。这意味着如果低优先级进程进行了系统调用后,高优先级进程必须等到调用结束后才能访问 CPU。

新的配置选项 CONFIG_PREEMPT 改变了这一内核行为,在高优先级任务可用的情况下(即使此进程正在进行系统调用),它允许进程被抢占。

允许抢占的标准 2.6 Linux 内核

但这种配置选项也是一种折衷。虽然此选项实现了软实时性能并且即使在负载条件下也可使操作系统顺利地运行,但这样做也付出了代价。代价就是略微减低了吞吐量以及内核性能,原因是 CONFIG_PREEMPT 选项增加了开销。这种选项对桌面和嵌入式系统而言是有用的,但并不是在任何场景下都有用(例如,服务器)。

在 2.6 内核中另一项有用的配置选项是高精度定时器。这个新选项允许定时器以 1μs 的精度运行(如果底层硬件支持的话),并通过红黑树实现对定时器的高效管理。通过红黑树,可以使用大量的定时器而不会对定时器子系统(O(log n))的性能造成影响。

只需要一点额外的工作,就可以通过 PREEMPT_RT 补丁实现硬实时。PREEMPT_RT 补丁提供了多项修改,可实现硬实时支持。其中一些修改包括重新实现一些内核锁定原语,从而实现完全可抢占,实现内核互斥的优先级继承,并把中断处理程序转换为内核线程以实现线程可抢占。

参考文献:实时Linux架构剖析 - M. Tim Jones, 顾问工程师, Emulex Corp.
http://www.ibm.com/developerworks/cn/linux/l-real-time-linux/#resources

 

-------------------------------------------------------------------------

 

本文就到此告一段落,结合自己的实际项目经验,总结了实时操作系统的概念,性能指标,任务调度方法,VxWorks和Linux的实时性对比,以及相应的介绍。供笔者自己学习,也供优快云各位同学参考,大部分内容来自网络,不是一篇严谨的论文,如有纰漏还请指出,共同进步。

 

转载请注明出处:http://blog.youkuaiyun.com/zhourui1982

【计算机架构】什么是实时操作系统、什么是非实时操作系统;实时操作系统和非实时操作系统的区别 一、实时操作系统 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。 案例:uCOS/VxWorks/RTLinux 二、非实时操作系统 通常的通用操作系统Windows和Linux都叫分时操作系统,一般采用公平调度算法,线程/进程一多就得分享CPU时间,Linux下有针对“实时进程”的 阅读详情

相关推荐

RTX实时操作系统

RTX实时操作系统(RTOS)简介学习笔记 RTOS:Real time Operation System Keil RTX 是免版税的确定性实时操作系统,适用于 ARM 和 Cortex-M 设备。 【RTX概述】 RTOS 可以自由地调度系统资源,比如CPU和内存,并且提供一种任务间通信机制。 RTX程序使用标准的C结构编写,运用RealView编译器进行编译。RTX.H 头文件定义了RTX函数以及宏,可以让轻松地声明任务并达到RTOS所有特性。 RTX的基本功能就是开始和停止任务...

浮若于心 4203

实时操作系统(RTOS)介绍

实时操作系统(RTOS)实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。实时操作系统经常与嵌入式操作系统一起出现,实际上这是完全不同的两种东西。

哦豁灬 1万+

111实时操作系统 和 非实时操作系统

实时操作系统是一种专门设计用来支持实时系统需求的操作系统。实时系统是指在规定的截止时间内必须完成任务的系统,如工业控制、航空电子、汽车控制等。非实时操作系统通常指的是那些不严格要求时间确定性的操作系统,如桌面操作系统(Windows、macOS)和服务器操作系统(Linux)。实时操作系统(RTOS)的任务调度算法旨在确保系统在规定的时间内完成特定任务。:RTOS通常体积较小、性能较高,能够满足嵌入式系统对资源和性能的严格要求。

wlq_567的博客 1122

嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)

嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)

个人风格极强的知识汇总 6301

常见的实时操作系统(RTOS)(嵌入式和物联网操作系统)介绍

开源实时操作系统(RTOS)在嵌入式系统和物联网(IoT)设备中扮演着重要的角色。它们提供了任务管理、内存管理、通信机制和文件系统等功能,使得开发者能够在一个可靠的环境中构建复杂的嵌入式应用。从 FreeRTOS 到 Zephyr,每个 RTOS 都有其独特的特点和优势,适用于不同的应用场景。

u013558123的博客 8060

深入探究Chibios实时操作系统

Chibios提供了丰富的标准设备驱动库,包括I2C、SPI、UART等。使用标准设备驱动时,开发者需要了解各个接口的配置方法,例如:// UART配置示例115200,0,halInit();// 启动Shell// 其他任务...这段代码配置了串口通信参数,并启动了UART通信。了解每个参数的含义对正确使用标准设备驱动至关重要。当标准驱动不能满足特定需求时,就需要自定义设备驱动。开发自定义驱动涉及硬件抽象层(HAL)的深入理解和编程,通常步骤包括:硬件研究。

weixin_26854475的博客 1555

什么是实时操作系统(UCOS简介)

什么是实时操作系统(UCOS简介)

m0_73931287的博客 3332

deepin搭建samba服务器

一.为什么要用Samba? Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。二.需要的软件? 我是在deepin上实现的,在终端中使用一下两句命令,就可以安装Samba的软件包 $sudo apt-get install samba //安装samba 三.Samba服务的组成 Samba的核心是两个守护进程smbd和nmbd。当然,它

xbrother123的博客 8598

什么是实时操作系统(RTOS)

同时,由于实时操作系统的特性,它并不是一个应用场景广泛的系统,一些人认为学嵌入式就是学实时操作系统,这种认识其实是不正确的,现在嵌入式开发,不一定需要在实时操作系统下完成。由于关中断等原因,通常情况下,操作系统的调度器不会太精确的产生周期性的调度,比如x86早期的默认60的时钟周期(clock rate),抖动范围可能在15-17ms之间。由于应用场景的差异,会出现有些用户需要实时性的驱动,有些用户需要高性能的驱动,因此实时操作系统实际上要提供多种形式的配置以满足不同实时性需求的用户。

usstmiracle的博客 2万+

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9002

OpenCV实战:5分钟搞定图像拼接(附Python代码)

本文通过OpenCV实战教程,详细讲解如何使用Python在5分钟内完成图像拼接。重点介绍`findHomography`函数和单应性矩阵的应用,提供完整的代码示例和常见问题解决方案,帮助开发者快速掌握图像拼接技术。

weixin_26833503的博客 120

嵌入式实时操作系统1——初识嵌入式实时操作系统

嵌入式实时操作系统是什么 嵌入式实时操作系统是一个特殊的程序,是一个支持多任务的运行环境。嵌入式实时操作系统最大的特点就是“实时性”,如果有一个任务需要执行,实时操作系统会立刻执行该任务,不会有较长的延时。典型的实时操作系统有uCOS ,RT-Thread,FreeRTOS ,VxWorks,WinCE等。 嵌入式实时操作系统是一个特殊的程序(通常称为内核),它可以创建,销毁,控制所有任务。嵌入式实时操作系统除了包含一个内核以外,还提供其他服务,如文件系统,协议栈,图形用户界面等。本文的重点在于了解嵌入式

li_man_man_man的博客 1万+

基于pytest+Allure+Python+CANoe的汽车诊断自动化测试框架搭建实战

自动化测试是提升软件质量和研发效率的关键技术,其核心原理是通过脚本模拟人工操作,实现测试用例的自动执行与结果验证。在汽车电子领域,诊断服务测试是确保车辆ECU(电子控制单元)功能正常的重要环节,传统手动测试在面对海量用例和频繁回归时效率低下。本文聚焦于如何利用Python的pytest测试框架、Allure报告工具以及Excel数据驱动,构建一个与Vector CANoe仿真测试环境深度集成的自动化测试解决方案。该方案通过Python调用CANoe的COM接口,实现了诊断报文的自动发送与响应验证,并结合Al

weixin_30384217的博客 677

【实时操作系统】实时操作系统和非实时操作系统

VxWorks就是实时系统 实时操作系统的特征: 实时操作系统是抢占式操作系统,如果你的进程优先级高,则肯定第一个得到执行,直至结束执行,中间的时间通过CPU频率等可以推算出来。 其实就是要求你对他的请求,他得在一定时限内给你结果,而不能因为系统忙或调度算法的原因拖沓,也就是只要指定了时间或发生了高优先级时间,无论任何操作,必须立刻中断,即使内核也是.........

我的笔记本 7674

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 470

眼动数据分析基础_AOI分析动态刺激物

如果您正在研究人们对如视频、动画等动态刺激物的视觉行为,动态AOI工具可为您提供类似静态AOI工具对于图片及其他静止刺激物分析的同样功能。创建和编辑动态AOI的过程和静态AOI相似。 关于动态AOI工具的使用,有几点非常重要: 多个看到相同线性动态刺激物的用户的眼动数据叠加是有价值的; 动态AOI不能用于非线性动态记录的分析; 动态AOI不能用于静态刺激物,如图片的分析; 动态AOI可以被开启、关闭、移动、调整大小及跟踪相关分析对象 首先,我们来定义两种不同的动态刺激物:线性动态刺激物(LDS),是指固

Kobe123brant的博客 3501

实时操作系统分类、特点及实现原理

本章节将介绍各类操作系统的特点。 裸机系统 单片机的程序可以分为三种:轮循系统、前后台系统和多任务系统。 轮询系统 即在裸机编程时,先初始化相关硬件,让主程序在一个死循环里面不断循环,顺序地处理各种事件。不能说轮询是低端的,轮询系统是一种非常简单的软件结构,但适用于仅需要顺序执行代码且不需要外部事件来驱动就能完成的事情,这会变得简单可靠。 如果加入按键操作等需要检测外部信号的事件,整个系统的实时响应能力就会体现不好。试想一下,但按键按下时,程序正在运行顺序1程序,而且顺序1程序占用的程序时间片比较长,系统就

言京的博客 2万+

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | 离线蒸馏(附代码 + 完整文件 + 解析教程)

这篇文章给大家带来的最新改进是模型的蒸馏,利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv8的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 4318

Free RTOS实时操作系统

FreeRTOS 包含 Demo 例程和内核源码(比较重要,我们就需要提取该目录下的大部 分文件)。FreeRTOS 文件夹下的 Source 文件夹里面包含的是 FreeRTOS 内核的源代码, 我们移植 FreeRTOS 的时候就需要这部分源代码;

m0_71813740的博客 1715

Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_pre

Sigrity System SI SerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查的项目,通过协议分析视为满足设计要求,下面介绍pcie3_client_single_pre仿真分析,具体操作如下。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1.24%UI RMS(平均值),即和标准值的偏差为1.24%UI。

weixin_54787054的博客 597

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

图解实时操作系统和非实时操作系统的区别

对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少? 实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 我也只能列举出来这么多了。 重点不在这里,重点在于他们之间的区别,详见下图: 在上面的图中右边的任务优先级高于左边的任务,先看实时操作系统的,当优先级更高的任务2就绪的时候,即便任务1正在运行

技术改变生活,创新让世界更美 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

实时操作系统——非实时操作系统

 嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统。作为一种嵌入式操作系统,它具有嵌入式软件共有的可裁剪、低资源占用、低功耗等特点;而作为一种实时操作系统(本文对实时操作系统特性的讨论仅限于强实时操作系统,下面提到的实时操作系统也均指强实时操作系统),它与通用操作系统(如Windows、Unix、Linux等)相比有很大的差别,下面我们将通过比较这两

学习不停,进步不止! 2238

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

FreeRTOS实时操作系统

FreeRTOS实时操作系统

jcf5832的博客 2253

实时操作系统与非实时操作系统(包含 硬实时和软实时)

实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。 实时操作系统与非实时操作系统区别: 一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。 ...

weixin_43581427的博客 3114

实时操作系统和非实时操作系统的区别

实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 他们之间的区别,详见下图: 在上面的图中右边的任务优先级高于左边的任务,先看实时操作系统的,当优先级更高的任务2就绪的时候,即便任务1正在运行中,也必须立刻交出CPU的使用权,就跟中断一样,先执行任务2,等任务2执行完或者主动挂起(sleep)让出CPU的时候,任务1才能接着运行。 uCOS就是这样的实时操作系统,它是可抢占性的内核。我曾跟很多同事争辩过uCOS高优先级任务就绪而.

肥嘟嘟的左卫门 2366
上一篇: 内存泄露 内存溢出 内存碎片
下一篇: 13个代码注释的小贴士
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值