实时操作系统 (Real-Time Operating System,RTOS) 是一种为实时应用程序提供服务的操作系统,该类操作系统能快速响应并处理数据,处理时间要求以0.1秒的精度进行增量,处理结果能够在规定的时间之内控制生产过程或对处理系统做出快速响应,调度一切可利用的资源,完成实时任务的同时控制所有实时任务协调一致运行。

▲RTOS的组成
相较于通用的分时操作系统(Linux、Windows、Unix等),RTOS有着仅适用于嵌入式应用程序、基于时间片调度、抢占式内核等特点,其中断延迟可达到以微秒为单位。
RTOS根据任务时效性可分为硬实时、固定实时、软实时三种大类。
1、硬实时
在硬实时操作系统中,任务有着高实时性要求,即既定任务必须在计划时间范围内执行并完成。
示例:医疗重症监护系统、航空系统等。

2、固定实时
该类型的RTOS,任务也需要在计划时间内完成。超时虽不会导致大的影响,但会影响产品的体验。
示例:各类型多媒体应用。

3、软实时
软实时RTOS中,任务有截止时间,但可接受少量时间延迟。此类RTOS可灵活的根据任务优先级定义截止时间。
示例:在线交易系统、畜禽报价系统。

硬实时与软实时最关键的差别在于,软实时只能提供统计意义上的实时。例如,有的应用要求系统在95%的情况下都能确保在规定的时间内完成某个动作,而不一定要求100%:在操作DVD播放机时,正常播放的比例达到98%基本就可满足用户需求。但对于发射卫星、控制核反应堆的应用系统,这些系统的实时性必须达到100%,绝对不允许出现意外。
硬实时系统有着刚性的、不可改变的时间限制,不允许任何超出时限的错误,超时错误会带来损害甚至导致系统失败、或者导致系统不能实现预期目标;软实时系统的时限相对柔性灵活,可以容忍偶然的超时错误。
02.为什么要使用RTOS?
RTOS有着下列优点:
1、RTOS会基于优先级进行任务调度,优先处理更加重要的进程;
2、RTOS提供API(Application Programming Interface,应用编程接口)功能,使应用程序代码更简洁;
3、抽象时序依赖性和基于任务的设计减少了模块之间的相互依赖性;
4、RTOS提供基于任务的模块化开发,可进行基于任务的模块化测试;
5、基于任务的API模式是模块化的,团队分工得以更加明确。
6、RTOS由事件驱动,不会造成性能浪费。
这是否意味着RTOS可以代替分时操作系统?文末将会给出答案。
03.汽车软件RTOS
当前大环境下,汽车电子电气系统结构的革命正在发生,汽车中使用的软件数量、种类都出现了惊人的增长,汽车嵌入式软件面临巨大的挑战。当前汽车软件普遍使用的就是嵌入式实时操作系统——RTOS。
汽车软件RTOS有一个基本术语——任务(Task),可以简单描述为“能够共同提供某些系统功能的相关任务的集合”。普通计算机可以同步进行许多操作,即可以进行很多任务,而嵌入式计算机通常被设计为只做一件事,如汽车领域的整车控制器VCU(Vehicle Control Unit),发动机喷油点火控制器ECU(Electronic Control Unit),变速箱换挡控制器TCU(Transmission Control Unit),车身控制器BCM(body control module)等。
任务是具有特定目的的半独立程序段,大多数车辆实时应用程序都需要运行多个任务。汽车软件RTOS提供任务的并发和异步执行,调度组织车辆任务执行的顺序,在应用程序未处于活动状态时,会进入空闲机制。
除此之外,RTOS相关的基本术语还有:
作业——可分配给处理器的一小部分工作,可能需要/不需要资源;
作业发布时间——作业准备执行的时间点;
作业执行时间——作业完成执行的耗时时长;
作业截止时间——作业应完成执行的时间点;
处理器——也称活动资源,对执行工作很重要;
最长作业时间——作业允许的响应时间,也称相对截止时间;
作业响应时间——从作业发布时间到执行完成的时间长度;
绝对期限——作业相对截止时间,包括其发布时间。
04.RTOS的应用
RTOS具备约束性、可靠性、可预测性等特性,除汽车领域外,还可应用于以下领域/产品:
航空公司预订系统;
空中交通管制系统;
实时更新系统;
股票实时看盘系统;
国防应用系统,如雷达;
网络多媒体系统;
指令控制系统;
网络电话;
防抱死制动系统;
心脏起搏器。
05.RTOS的不足
RTOS的不足有:
RTOS可以连续运行基于时间片的任务,但会在包含错误的应用程序上花费过多时间。
RTOS只能集中执行少量任务,因此很难进行多任务处理;
RTOS需要特定的驱动程序,以便其对中断信号提供快速响应时间,从而保持运行速度;
RTOS使用大量资源,系统成本昂贵;
优先级低的任务等待时间长,因为RTOS需要保证正在执行的程序的准确性;
频繁切换任务而影响任务执行效率;
使用难以理解的复杂算法;
RTOS使用大量不必要的系统资源。
回溯第二段的问题,答案是显而易见的。实时操作系统与分时操作系统的设计思路、应用领域是截然不同的,各有优劣,两者并不存在替代关系,而是一种互补关系。
更多RTOS相关内容,欢迎点击查看详情或访问 www.digiproto.com 进行了解!
参考文献
[1]参考链接:https://www.guru99.com/real-time-operating-system.html
原文链接:https://mp.weixin.qq.com/s/4AD-VnYdYMR1ojV-HI3Zzw
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题: