Day 14 讯息伫列

之前,我们都在讨论排程、号志的观念,在有效的排程之後,就能让任务很顺利的运作,达到一个有效的即时系统。但是,任务跟任务之间还是需要互相交换讯息,有交换讯息的功能,才能达成一个有效的即时系统,所以Kernel就提供一项讯息伫列(message queue)的功能。

维基百科对於讯息伫列的定义如下:

在电脑科学中,讯息伫列(英语:Message queue)是一种行程间通讯或同一行程的不同执行绪间的通信方式,软件的贮列用来处理一系列的输入,通常是来自使用者。讯息伫列提供了非同步的通信协定,每一个贮列中的纪录包含详细说明的资料,包含发生的时间,输入装置的种类,以及特定的输入参数,也就是说:讯息的传送者和接收者不需要同时与讯息伫列互动。讯息会储存在伫列中,直到接收者取回它。一个 WIMP 环境像是 Microsoft Windows,藉由优先的某些形式(通常是事件的时间或是重要性的顺序)来储存使用者产生的事件到一个事件贮列中。系统把每个事件从事件贮列中传递给目标的应用程序。

简单说,讯息伫列有点像是一个缓冲区,也就是上述所说,两个任务需要沟通时,就透过讯息伫列交换讯息,这个是不是就很像是一个韧体的沟通功能,只是沟通的对象不同而已。

讯息伫列的组成:一个控制区块QCB(Queue control block)、给予一个特定的名称、一个唯一的ID、储存器缓冲区、给予一个伫列长度、一个最大讯息长度以及单工或多工任务的等待列表。

讯息伫列也是依照二进位的逻辑存在,如果没有任务的情况下,他就处於0的状态,当有讯息进来时,就会慢慢的将讯息放到伫列里面,直到讯息存满的状态,此时,新的讯息就不可能再继续存入,要等待讯息伫列将里面的讯息释放出去之後,会有新的空间出现,当然也有可能里面的讯息是错误的,或者在发送时出现错误,这些情况,我们後续再讨论,逻辑上大致是如此。


<<:  关於 Weekly Updates

>>:  Parser 的单元测试

Day 02:软件业界常用软件

前言 为什麽先介绍软件 在开始进入工程师的世界之前,先来了解工程师平常使用的工具。 就能开始用这些工...

[Day16] 类别(Class) - private, protected, public

访问控制(可见性) 对属性或方法的访问控制(PHP 7.1.0 以後支持常量),通过在前面添加关键字...

Day 19:怎麽在 Angular 专案中使用 nvm 切换 Node.js 版本

前一篇谈到了 Angular 版本如何更新的议题,今天依然讨论跟版本相关的议题:如何在 Angula...

Day05-Kubernetes 那些事 -基本观念与操作

前言 接下来就正式进入本系列文的重头戏:Kubernetes,Kubernetes 可以说是近期快速...

战略思考与规划(Strategic Thinking and Planning)

使命与愿景(Mission and Vision) .一个组织不是无缘无故存在的。它是为目的而建立...