首页 > 其他分享 >rtos 理解

rtos 理解

时间:2023-07-25 21:57:46浏览次数:41  
标签:45 平台 rtos 阻塞 机器码 雇工 理解 任务

1:

操作系统中挂起(suspend)和阻塞(pend/block)的区别如下:
一:挂起是一种主动行为,因此恢复也应该要主动完成;而阻塞则是一种被动行为,是在等待事件或资源时任务的表现,你不知道他什么时候被阻塞(pend),也就不能确切知道他什么时候恢复阻塞。而且挂起队列在操作系统里可以看成一个,而阻塞队列则是不同的事件或资源(如信号量)就有自己的队列;
二:阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高就永远轮不到其他任务运行,一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试;
三:pend是task主动去等一个事件(信号量/锁)或消息;suspend是直接悬挂task,以后这个task和你没任何关系,任何task间的通信或者同步都和这个suspended task没任何关系了,除非你主动 resume task;
四:任务调度是操作系统来实现的,任务调度时,直接忽略挂起状态的任务,但是会顾及处于pend状态的任务,当pend下的任务等待的资源就绪后,就可以转为ready了。ready只需要等待CPU时间,当然,任务调度也占用开销,但是不大,可以忽略。可以这样理解,只要是挂起状态,操作系统就不在管理这个任务了;
五:挂起是主动的,一般需要用挂起函数进行操作,若没有resume的动作,则此任务一直不会ready。而阻塞是因为资源被其他任务抢占而处于休眠态。两者的表现方式都是从就绪态里“清掉”,即对应标志位清零,只不过实现方式不一样

操作系统中挂起、睡眠、阻塞的区别形象解释:
你控制了一个雇工为你干活。你对雇工的控制是通过编程来实现的。
挂起的意思就是你对主动对雇工说:“你睡觉去吧,用着你的时候我主动去叫你,然后接着干活”。
睡眠的意思就是你主动对雇工说:“你睡觉去吧,某时某刻过来报到,然后接着干活”。
阻塞的意思就是,你发现你的雇工不知道在什么时候没经过你允许,自己睡觉呢,但是你不能怪雇工,肯定你这个雇主没注意,本来你让雇工扫地,结果扫帚被偷了或被邻居家借去了,你又没让雇工继续干别的活,他就只好睡觉了。雇工一旦发现扫帚回来了,他就会自己去干活的。

2:

1、所有的单片机包括计算机的CPU,都得只认识机器码(0和1的二进制串)!!!这是学计算机必须认知的基础。
2、单片机的每条指令的机器码串是不便理解的,例如:“00010100”它是什么意思呢?
在51系统中,它是将A寄存器减1,于是就用一句宜懂的:“DEC A”语句代替“00010100”,“DEC A”就是一句汇编语言。
3、汇编语言的特点是,每一句都对应一个或一串机器码!
4、由于计算机只认识机器码,并不认识汇编语言,所以程序运行前,需要有“人”做翻译,翻译成机器码,这就叫着汇编。
由于汇编语言的每一句都对应一个或一串机器码!所以汇编的翻译很方便。
这个做翻译的“人”当然让一个平台(程序)来完成了,如:KELL!
5、如果“平台”仅仅只做一个对应,也就太简单了,查个对应表就可以了,傻子也能行。
人们在写汇编程序时也总有一些更高级的想法。例如:程序中20个地方会用到“45”这个参数,但有也可能需将它改为“33”,
这对汇编来说很麻烦,要改20个地方。考虑到“平台”这个翻译功能很强大,于是就让“平台”来干这个活,但你总要告诉平台你的意图吧。
你是想用:XYZ来代替20个“45”,于是写程序时就将20处“45”写成“XYZ”,再写一句“XYZ EQU 45”来告诉“平台”翻译的时候所有的有“XYZ”的地方翻译成“45”,
这样如果你要将“45”改为“33”,你只要改一处地方就行了,就是“XYZ EQU 33”,余下的事让“平台”去做!
这个语句是违反汇编原则的,它不对应任何一个机器码,不能直接反汇编,但它很有用,是通过“平台”起作用的。
这就是伪指令!伪指令是不能直接反汇编的,它是需要通过“平台”来翻译程序员的目的,它是针对“平台”的。
所以,一条“伪指令”是什么意义,只有“平台”这个翻译知道,如果平台是“KELL”就必须看“KELL”使用说明,这样就能弄清楚“伪指令”的含义了!
记住:所有的、最终的目的都将程序员写的程序,变成计算机所能认识的机器。
更有甚哉!为了发恢平台的强大智能,将整段整段的汇编语言组合在一起,用一句话一个语句来表示,甚至都看不到汇编的影子了,这就是C语言。
更有高招!将整段整段的C组合在一起,用一句话来表示,这就是高级语言,如VB、JAVA等……。
但无如何,要使计算机能运行,翻译成“机器码”,这是根本!

3:

os_delay(portMAX_DELAY):当延时值为MAX时,此延时将转别为挂起函数,即即使真的延时了portMAX_DELAY这么久,任务也不会被唤醒;而如果将延时值设为portMAX_DELAY-1,则真延时portMAX_DELAY-1这么久后,任务会被唤醒

标签:45,平台,rtos,阻塞,机器码,雇工,理解,任务
From: https://www.cnblogs.com/lance9527/p/17581143.html

相关文章

  • 阅读圣经丨测试上下文理解
    在《圣经2》中,关于上下文理解这一块,白茶看到两个有意思的小测试,决定分享给各位小伙伴。这是一份销售数据,将其导入到PowerBI中。结果如图。现在开始进行问题描述。问题一:为数据模型添加计算列,输入如下代码公式,结果是什么?销售额=SUM('示例'[销售价])A、[销售额]所在的每一行的数......
  • 深入理解Mysql索引
    在数据库中,最常用的SQL操作之一就是SELECT语句,它负责数据的检索。而在SELECT语句背后,与索引的交互密不可分。为了优化数据库性能和加快查询速度,开发者们往往优先考虑调整索引。让我们深入了解索引的背后故事。这篇文章将从什么是索引,索引的分类,索引的底层数据数据结构,跟大家一起......
  • 重学HTTP:理解同源策略和CORS
    ​每次遇到跨域、代理、CORS这几个词都懵懵的,我决定一次把他们都搞明白,以后遇到他们再也不用害怕了。一、什么是同源策略?同源策略是在1995年由Netscape公司引入到浏览器的,目前所有浏览器都支持,它是浏览器最重要的安全保障,目的是严格管理不同网站间相互的资源访问(严格来说是不同......
  • BufferCache的简单理解
    对于磁盘和文件系统来讲Buffer对应磁盘数据的缓存,用于读或写。Cache对应文件数据的页缓存,用于读或写。Buffer可以用来聚合多个写操作,Cache则可以理解为预读操作,文件系统通过这两种方式提升磁盘IO性能。对于网络协议来讲只有Buffer的概念,该Buffer对应数据的收发缓冲区。对于c......
  • 深入理解 Serverless 计算的并发度
    作者:西流背景2019年Berkeley预测Serverless将取代Serverful计算[1],成为云计算的计算新范式。Serverless为应用程序开发提供了一种全新的系统架构,其凭借着弹性伸缩省事省心,按需付费更低成本、聚焦业务降低OPS这三大核心价值,将开发人员从繁重的手动资源管理和性能成本优......
  • 深入理解 Serverless 计算的并发度
    作者:西流背景2019年Berkeley预测Serverless将取代Serverful计算[1],成为云计算的计算新范式。Serverless为应用程序开发提供了一种全新的系统架构,其凭借着弹性伸缩省事省心,按需付费更低成本、聚焦业务降低OPS这三大核心价值,将开发人员从繁重的手动资源管理和性能成......
  • 简单理解:C语言中的分支和循环语句
    一、C语言中的循环语句while循环while(//条件语句){//语句块}执行的逻辑:在执行到while()这一行时,会根据条件语句的真和假来判断是否继续进行循环,若条件语句为真则继续循环,如果条件为假则结束循环。dowhile循环do{//语句块}while(条件语句);执行的逻辑:和while类似,但是要注......
  • 深入理解 SAP Fiori Front-end Server 试读版
    从本质上说,SAPFioriFront-endServer(在SAP官方文档里经常缩写为SAPFES)是ABAP应用服务器的一个Addon.Addon是SAPABAP一个特有的概念,是一种专门设计用于扩展SAPABAP系统基本功能的软件组件。大家可以把Addon理解成逻辑上具有关联关系的,聚合在一起,共同实现一个......
  • 如何理解Spring的IOC和DI
    学习过Spring框架的人一定都会听过Spring的IoC(控制反转)、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC、DI这两个概念是模糊不清的,是很难理解的。今天我就谈谈我对IOC和DI的理解,希望对大家有帮助。1、IOC与DI介绍IOC是InversionofControl的缩写,翻译成中文是......
  • 最简单理解进制转换
    转换十进制对于十进制123我们可以表示成为\(3*10^0+2*10^1+1*10^2\),而同样对于2进制转换称为10进制可以用相同的方法,即将进制基数从最低位开始从0次方开始与其该位的数字相乘。例如:二进制1110转换十进制,进制基数就是2,从最低位\(2^0\)开始计算:\[0*2^0+1*2^1+1*2^2+1......