- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九节嵌入式操作系统 西北工业大学
第九节 实时操作系统内核原理(2) (1)消息队列:任务间通信 (2)死锁 (3)中断 消息队列 信号量:实现任务间的同步运行以及协调对共享资源的互斥访问 消息队列:实现任务间的数据通信 消息队列类似于缓冲区,通过它任务和ISR可以发送和接收消息,实现数据的通信和同步。 创立消息队列时,内核分配一个相关的队列控制块QCB、一个队列名、一个唯一的ID、存储缓冲区、一个队列长度、一个最大消息长度和一个或多个任务等待列表。 某些消息可能很长,超出最大消息长度。可以通过发送一个指向数据的指针,而不是数据本身。可以改进性能和内存利用率。 消息队列的存储: (1)系统池(system pool):所有消息队列使用一个系统池,可以节约内存;具有大消息的消息队列可能会占用大部分内存,不会为其他消息队列留下足够的内存。 (2)私有缓冲区:为每个消息队列保留足够的内存,需要较大的内存,所有的消息都预留了内存。可靠性较高。 典型的消息队列的操作 (1)创立和删除 作为全局对象不被任何任务拥有。删除一个消息队列将自动地解除等待任务阻塞。 (2)发送消息 发送消息排队方式:FIFO或紧急消息采用LIFO,当消息队列满时,开始填充发送任务的等待列表,当消息队列空时,填充接收任务的等待列表。 发送消息的任务可能的状态: ★无阻塞:对ISR和任务,消息队列满,返回错误,继续ISR或任务,ISR不能阻塞。 ★带时限的阻塞:仅对任务,被阻塞任务放在消息队列的等待任务列表中,设置为FIFO或优先权排队。超时返回错误。 ★永远阻塞:仅对任务 (3)接收消息 任务阻塞:消息队列为空、接收任务以FIFO或优先级排队造成的。 任务状态:无阻塞、带时限的阻塞、永远阻塞 读消息:破坏性读(成功读出就删除)和非破坏性读。 典型的消息队列使用 (1)非互锁的单向数据通信 ★接收的任务的优先级比发送的高,则先运行阻塞等待,发送的任务发送数据到队列,则接收任务运行接收数据。 ★发送的任务的优先级比接收的高,则发送的先运行发送数据到队列到填满或不再发送而阻塞,则接收任务运行接收消息数据。 ISR (2)互锁的单向数据通信 使用一个二值信号量,初值为0,消息队列的长度为1(即邮箱),发送任务给消息队列发送数据并阻塞在二值信号量上,接收任务接收数据并将二值信号量递增一次,从而唤醒发送任务发送数据,实现可靠的通信和任务同步。 (3)互锁的双向数据通信 在全双工时需要两个分开的 消息队列。 (4)广播通信:有些RTOS还支持广播消息,使多个任务得到消息的多个拷贝,所有等待任务推出阻塞状态。 死锁: 系统中多个任务由于请求资源而被永久阻塞。 可抢占式资源:可以被占用而不会影响任务的执行状态或结果。如寄存器,内核调度时首先保存寄存器的内容,任务切换回来后再恢复。被多个任务共享。 不可抢占式资源:如共享内存,在一个任务完成读写之前,不允许另一个任务读写。 发生死锁的四个条件: (1)互相排斥:同一时间只能有一个任务访问的资源,即排他性访问。 (2)非抢占:一个不可抢占资源不能强制的从占有它的任务中移走,仅当它的持有者自愿释放资源后才变成可用。 (3)保持和等待:任务保持已经获取的资源,同时等待其他资源可用。 (4)环形等待:多个任务之间请求的资源之间存在环形链。 死锁预防: (1)消除保持和等待条件:任务请求所有必须的资源,仅当所有的资源都能得到保证时任务才开始执行。 (2)消除不可抢占条件:如果新的请求被拒绝,任务释放已经获得的资源,相当于从某一点重新开始执行。 (3)消除环形等待条件:对资源强加一个秩序,如果一个任务占有资源Ri,后续的请求必须是对Rj的请求,且ji,依次类推。 在申请资源时可以采用等待超时,返回错误。 系统的实时性与中断响应时间: 系统的响应时间:传感器响应时间+传感器信号处理和传输时间+操作系统的响应时间+应用程序的运行时间+输出信号处理和传输的时间+执行机构的响应时间。 中断响应时间: 处理器处理时间,中断嵌套,中断禁止时间, 中断响应时间=MAX(关中断的最长时间+最长指令时间)+保存CPU状态的时间+内核的ISR进入中断服务函数的执行时间+开始执行中断服务子程序的第一条指令的时间。 应该考虑最坏的情况时的最大值。 注意事项: ISR绝不能做任何的阻塞或悬挂调用,否可能会导致系统崩溃。 (通常ISR的优先级高于任务) 在ISR中如果不允许中断,可以关中断,时间尽量短。 ISR尽量不要调用不可重入函数,如malloc等。 可重入函数:可以被一个以上的任务调用,而不必担心数据的破坏。任何时候都可以被中断。一般只使用局部变量,即变量保存在CPU寄存器中或堆栈中,如果使用全局变量应予以保护。 int temp; void
您可能关注的文档
最近下载
- 第一单元龙的传人第1课我的名字 教案(表格式)一年级美术人教版(2024版).docx
- 广州数控GSK988Ti系列 编程操作手册2017年1月.pdf
- 台达伺服ASDA-AB系列应用技术手册.pdf
- (宪法)完整版课件.ppt
- 20241103-高盛-美国经济分析:2025年消费支出展望,回归正常稳健增速(摘要).docx VIP
- 高盛-中国房地产行业2025年展望-触底在望(摘要).pdf VIP
- 张毅—潜在失效模式与效应分析(三)课件.pptx VIP
- 茶文化考核试题及答案.pdf VIP
- 人教版(2024)七年级地理上册4.2《气温的变化与分布》优质课件.pptx
- 教科版科学三年级上册2空气占据空间吗 (说课课件)(共13张PPT).pptx
文档评论(0)