CN111432899A - 用于管理对共享端口的多核访问的系统和方法 - Google Patents

用于管理对共享端口的多核访问的系统和方法 Download PDF

Info

Publication number
CN111432899A
CN111432899A CN201880060905.4A CN201880060905A CN111432899A CN 111432899 A CN111432899 A CN 111432899A CN 201880060905 A CN201880060905 A CN 201880060905A CN 111432899 A CN111432899 A CN 111432899A
Authority
CN
China
Prior art keywords
port
core
buffer
pointer
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201880060905.4A
Other languages
English (en)
Other versions
CN111432899B (zh
Inventor
A·里维斯
N·M·迪戴耶兹
J·米泽拉克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BAE Systems Controls Inc
Original Assignee
BAE Systems Controls Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BAE Systems Controls Inc filed Critical BAE Systems Controls Inc
Publication of CN111432899A publication Critical patent/CN111432899A/zh
Application granted granted Critical
Publication of CN111432899B publication Critical patent/CN111432899B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/521Atomic

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Information Transfer Systems (AREA)
  • Multi Processors (AREA)

Abstract

提供了一种端口,该端口利用各种技术通过控制在可用计算系统内的多核组件中写入端口或从端口读取的数据来管理争用。当端口是采样端口时,组件可以包括至少两个核,与至少一个采样端口可操作地通信的多个缓冲器,包括多个指针的非阻塞争用管理单元,所述多个指针共同操作以管理多核计算系统中共享端口的争用。当端口是排队端口时,组件可以包括与排队端口通信的缓冲器,并且缓冲器配置为将多个消息保存在排队端口中。该组件可以管理多核计算系统中共享排队端口的争用。

Description

用于管理对共享端口的多核访问的系统和方法
相关申请的交叉引用
本申请要求于2017年9月19日提交的申请号为62/560,632的美国临时申请的权益;通过引用将其公开内容并入本文。
技术领域
本发明涉及用于管理对共享端口的争用的系统和方法,以使得每个端口可以被两个或更多个不同的核同时读取和写入,而不会丢失、复制或破坏数据。
背景技术
数据结构是能够有效访问和修改的数据组织、管理和存储格式。更准确地说,数据结构是数据值、它们之间的关系、以及可以应用于数据的功能或操作的集合。采样端口是由ARINC 653定义的一种数据结构,用于分区之间的通信。此外,采样端口可以包括用于交换参数数据的一组标准化的数据结构。这些可以帮助减少参数格式中不必要的可变性,从而减少对自定义输入/输出(I/O)处理的需求。采样端口可以进一步实施应用程序的可移植性,并提高核软件的效率。根据一个方面,示例性采样端口可以规定其每个条目具有固定的尺寸,并且只能从该端口读取写入该端口的最后一条消息。
计算机核或中央处理单元(CPU)是指计算机内的电子电路,该计算机通过执行指令所指定的基本算术、逻辑、控制和I/O操作来执行计算机程序的指令。多核处理器是具有两个或多个称为核的独立处理单元的单个计算组件,该处理单元读取并执行程序指令。这些指令是普通的CPU指令(例如添加、移动数据、和分支),但是单个处理器可以同时在单独的核上运行多个指令,从而提高了适用于并行计算的程序的整体速度。
发明内容
在多核系统中,当一个核试图读取采样端口而另一核正在写入同一端口时,则存在核间争用。如果未正确管理此争用,则读取核可能会读取损坏的条目,其中先前写入采样端口的消息已被写入核的新消息部分覆盖。适当的用于采样端口的非阻塞争用管理方案可确保读取核始终读取该端口中最新的完全写入的条目。因此,当存在用于读取和写入同一端口的核间争用时,采样端口仍然存在问题。本发明通过提供至少一种在不牺牲时序性能的情况下安全地管理多核系统中的端口争用的技术来解决这些和其它问题,从而使其特别适合于实时系统。更具体地,在一个示例性解决方案中,本发明提供了争用管理性质或非阻塞争用管理的实施。在典型的数据共享方案中,要么强制写入步骤等待直到读取完成,要么强制读取等待直到写入完成。本发明管理争用而无需等待访问。这允许在时序方面更具确定性,并且在某些处理环境中可以更有效地利用处理器时间。
根据一个方面,本发明的示例性实施例可以提供一种通过将采样端口组织为缓冲器来管理采样端口上的争用的方案或框架。在一个示例中,缓冲器是三重缓冲器,并且是三个内存块(缓冲器)的环形阵列,每个内存块可以在采样端口中保存一条消息。通过确保读取的缓冲器与写入的缓冲器不同,这种安排允许在不损坏数据的情况下,将数据同时写入端口和从端口读取数据。
根据另一方面,本发明的示例性实施例可以提供一种用于在多核系统中管理共享端口的争用的系统或方法,包括:多个采样端口,其中多核系统中的至少一个核读取和/或写入采样端口;多个缓冲器,其配置为耦合到采样端口,其中耦合到每个采样端口的缓冲器的数量比多核系统的核的数量多,并且缓冲器配置为在采样端口保存单个消息;非阻塞争用管理单元,其包括多个指针,其中该指针管理缓冲器。该示例性实施例可以进一步提供其中有两个核并且缓冲器是三重缓冲器的情况。该示例性实施例可以进一步提供,其中采样端口是由ARINC 653定义的用于通信的数据结构的类型。该示例性实施例可以进一步提供多个指针来管理缓冲器。该示例性实施例可以进一步提供,其中指针包括头指针、尾指针和忙指针。该示例性实施例可以进一步提供新鲜度报告操作。
根据另一方面,本发明的示例性实施例可以提供一种用于在多核系统中管理共享端口的争用的系统或方法,包括:多个排队端口,其中多核系统中的至少一个排队端口的读取和/或写入排队端口;至少一个环形先进先出(FIFO)缓冲器,配置为保存多个消息,其中FIFO缓冲器中的条目包括消息和标题;非阻塞争用管理单元,其包括多个指针和计数器,其中指针和计数器管理FIFO缓冲器。该示例性实施例可以进一步提供,其中排队端口是由ARINC 653定义的用于通信的数据结构的类型。该示例性实施例可以进一步提供,其中指针包括头指针和尾指针,并且计数器包括推入计数器和弹出计数器。
根据另一方面,本发明的示例性实施例可以提供一种组件,该组件包括:至少一个采样端口;至少两个核,其中第一核读取采样端口,第二核写入采样端口;多个缓冲器,其与至少一个采样端口可操作地通信,其中缓冲器的数量的比核的数量至少多一个,并且缓冲器配置为在采样端口中保持单个消息;非阻塞争用管理单元,其包括多个指针,其中指针管理缓冲器;并且其中组件适合于管理多核计算系统中的共享端口的争用。该示例性实施例可以进一步提供:其中第一核专门是读取核;并且其中第二核专门是写入核。本示例性实施例还可以提供第一缓冲器、第二缓冲器、和第三缓冲器;其中,第一核从第一缓冲器读取数据同时第二核将数据写入第二缓冲器。本示例性实施例可以进一步提供头指针、尾指针、和忙指针,该头指针指示最近写入了哪个缓冲器数据;该尾指针指示下一步将写入哪个缓冲器数据;该忙指针指示正在读取缓冲器。本示例性实施例可以进一步提供其中每个核有一个忙指针。本示例性实施例还可以提供写入指令和读取指令,该写入指令在由处理器执行时仅更新头指针和尾指针;该读取指令,该指令在由处理器执行时仅更新与第一核相关联的忙指针;其中写入指令和读取指令适用于减少在指针上争用的可能性或排除(即完全消除)争用。本示例性实施例可以进一步提供,其中指针可以由第一核和第二核读取,但是仅由第二核修改。本示例性实施例可以进一步提供访问逻辑,该访问逻辑以原子方式访问指针以减少由同时读取和写入操作引起的指针争用或损坏的可能性。本示例性实施例还可以提供指令,该指令在由处理器执行时将尾指针移动到后续缓冲器,并且如果尾指针等于忙指针,则将尾指针前进到附加的缓冲器;还可以提供指令指令,该指令在由处理器执行时,将数据写入尾指针所指示的缓冲器中;还可以提供指令,该指令在由处理器执行时,在数据如尾指针所指示的那样写入时,将头指针设置为等于尾指针。本示例性实施例可以进一步提供指令,该指令在由处理器执行时,通过以下方式之一报告缓冲器中数据的新鲜度:(i)新鲜度标志和(ii)唯一消息ID。本示例性实施例可以进一步提供指令,该指令在由处理器执行时,通过新鲜度标志来报告数据的新鲜度,以维持指示端口是否包含新鲜数据或过期数据的标志;还可以提供指令,该指令在由处理器执行时,在写入数据时将新鲜度标志设置为新鲜,而在读取数据时将新鲜度标志设置为过期;其中,如果读取操作和写入操作同时发生,则通过访问头指针来确定顺序。本示例性实施例还可以提供指令,该指令在由处理器执行时,在第一核可以读取头指针并更新新鲜度标志之前更新新鲜度标志(即,原子性地更新新鲜度标志和头指针,从而从另一个核的角度看该更新似乎同时发生)。本示例性实施例还可以提供指令,该指令在由处理器执行时,在访问头指针的同时更新新鲜度标志(即,原子性地更新新鲜度标志和头指针,从而从另一个核的角度看该更新似乎同时发生)。本示例性实施例还可以提供指令,该指令在由处理器执行时,为写入采样端口的每个消息分配唯一的ID;还可以提供指令,该指令在由处理器执行时,将每个消息的唯一ID与从采样端口读取的先前消息的唯一ID进行比较;其中,如果ID相等,则端口过期;如果ID不相等,则端口新鲜。
在另一方面,本发明的示例性实施例可以提供一种方法,包括:由第一核从采样端口读取至少一个缓冲器;以及由第二核从采样端口写入至少一个缓冲器;使用多个指针来管理对采样端口中的缓冲器的争用,以管理多核计算系统中共享端口的争用。本示例性实施例或另一示例性实施例可以进一步提供:由第一核从第一缓冲器读取数据,同时第二核将数据写入第二缓冲器。本示例性实施例或另一示例性实施例可以进一步提供:通过头指针来指示最近写入了哪个缓冲数据;通过尾指针指示接下来将写入哪个缓冲数据;并通过忙指针指示正在读取缓冲器。本示例性实施例或另一示例性实施例可以进一步提供:原子性地访问指针,以减少由同时的读取和写入操作引起的指针损坏或争用的可能性。本示例性实施例或另一示例性实施例可以进一步提供:将尾指针移动到随后的缓冲器,并且如果尾指针等于忙指针,则将尾指针前进到附加的缓冲器;通过尾指针将数据写入指示的缓冲器;在如尾指针所指示而写入数据时将头指针设置为等于尾指针。本示例性实施例或另一示例性实施例可以进一步提供:通过新鲜度标志来报告数据的新鲜度,以维持指示端口是否包含新鲜数据或过期数据的标志;写入数据时将新鲜度标志设置为新鲜,读取数据时将新鲜度标志设置为过期;其中,如果读取操作和写入操作同时发生,则通过访问头指针来确定顺序。本示例性实施例或另一示例性实施例可以进一步提供:在第一核可以读取头指针并更新新鲜度标志之前进一步更新新鲜度标志。或者,原子性地更新新鲜度标志和头指针,从而从另一个核的角度看该更新似乎同时发生。本示例性实施例或另一示例性实施例可以进一步在访问头指针的同时提供更新新鲜度标志。或者,更新新鲜度标志并原子性地读取头指针,而从另一个核的角度看该更新似乎同时发生。本示例性实施例或另一示例性实施例可以进一步提供:向写入采样端口的每个消息分配唯一的ID;将每个消息的唯一ID与从采样端口读取的先前消息的唯一ID进行比较;并且其中,如果ID相等,则端口是过期的;如果ID不相等,则端口是新鲜的。
在另一方面,本发明的示例性实施例可以提供一种组件,该组件包括:至少一个排队端口;至少两个核,其中第一核读取采样端口,第二核写入采样端口;多个缓冲器,其与所述至少一个排队端口可操作地通信,其中缓冲器的数量比核的数量至少多一个,并且所述缓冲器被配置为在所述排队端口中保持多个消息;非阻塞争用管理单元,其包括多个指针,其中所述指针管理所述缓冲器;并且其中,该组件适于管理多核计算系统中共享排队端口的争用。本示例性实施例或另一示例性实施例还可以提供:多个排队端口,其中多核系统中的至少一个核对排队端口进行读取或写入;多个环形FIFO缓冲器,配置为耦合到排队端口,其中FIFO缓冲器中的条目包括消息和标题;非阻塞争用管理单元,其包括多个指针和计数器,其中所述指针和计数器管理所述FIFO缓冲器。本示例性实施例或另一示例性实施例可以进一步提供多个指针,其包括头指针和尾指针;推入计数器,用于计算推入或写入操作的数量;和弹出计数器,用于计算读取或弹出操作的数量。本示例性实施例或另一示例性实施例可以进一步提供指令,该指令在由处理器执行时,使用头指针和尾指针来访问环形FIFO缓冲器中的消息,以确定在环形FIFO缓冲器中剩余多少空间;还可以进一步提供指令,该指令在由处理器执行时,确定环形FIFO缓冲器是满还是空的。
附图说明
在以下描述中阐述本发明的示例性实施例,在附图中示出本发明的示例性实施例,并且在所附权利要求中特别且清楚地指出和阐述了本发明的示例性实施例。
图1描绘了采样端口及其相关指针的初始状态。
图2描绘了写入操作期间的采样端口。
图3描绘了写入操作之后的采样端口。
图4描绘了读取操作期间的采样端口。
图5描绘了读取操作之后的采样端口。
图6描绘了具有新数据或新鲜数据的采样端口。
图7描绘了正在进行慢速读取操作的采样端口。
图8描绘了在慢速读取操作期间发生第一写入操作的采样端口。
图9描绘了在慢速读取操作期间发生第二写入操作的采样端口。
图10描绘了在慢速读取操作期间发生第三写入操作并标识了三重缓冲器保持新鲜数据一致性的能力的采样端口。
图11描绘了在慢速读取操作期间发生第四写入操作并标识了三重缓冲器保持新鲜数据一致性的能力的采样端口。
图12描绘了慢速读取操作期间的四个写入操作之后的采样端口。
图13描绘了具有新数据或新鲜数据的采样端口。
图14描绘了具有正在读取的新鲜数据的采样端口。
图15描绘了具有旧数据或过期数据的采样端口。
图16描绘了具有正在读取的过期数据的采样端口。
图17描绘了具有单个消息、作为写入核的第一核、作为读取核的第二核、以及共享存储器的排队端口。
图18描绘了在弹出操作之后排队端口变空的情况。
图19描绘了具有环绕的尾指针的排队端口。
图20描绘了由于可用空间不足而导致的排队端口的推入操作失败。
图21描绘了在成功的推入操作之后排队端口变满的情况。
图22描绘了在弹出操作之后排队端口不再满的情况。
在整个附图中,相似的附图标记指代相似的部件。
具体实施方式
在讨论本发明的示例性方面之前,本发明提供了计算环境的简要讨论和介绍,在该计算环境中,核和采样端口(在下面介绍和讨论)在其中运行。
通常,核和采样端口的各方面存在于执行计算功能的示例性计算机内,并且可以包括处理器、存储器以及通过总线可操作地连接的输入/输出端口。在一个非限制性示例中,计算机包括读取和写入逻辑,该读取和写入逻辑被配置为通过核之一将数据写入采样端口中的多个缓冲器之一或从采样端口中的多个缓冲器之一读取数据。在不同的示例中,逻辑可以以硬件、软件、固件、和/或其组合来实施。因此,该逻辑可以提供用于从采样端口中的缓冲器写入或读取数据的框架(例如硬件、软件、和固件)。尽管逻辑的某些方面可以是附接到总线的硬件组件,但是应当理解,在一个替代示例中,逻辑可以在处理器中实施。
通常描述计算机的示例配置,处理器可以是包括双微处理器和其它多处理器架构的各种处理器。存储器可以包括易失性存储器和/或非易失性存储器。非易失性存储器可以包括例如ROM、PROM、EPROM、和EEPROM。易失性存储器可以包括例如RAM、同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDR SDRAM)、和直接RAM总线RAM(DRRAM)。
磁盘可以经由例如输入/输出接口(例如卡、设备)和输入/输出端口可操作地连接到计算机。磁盘可以是例如磁盘驱动器、固态磁盘驱动器、软盘驱动器、磁带驱动器、Zip驱动器、闪存卡、和/或记忆棒。此外,盘可以是CD-ROM、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)、和/或数字视频ROM驱动器(DVD ROM)。存储器例如可以存储步骤和/或数据。磁盘和/或存储器可以存储控制和分配计算机资源的操作系统。
总线可以是单个内部总线互连架构和/或其它总线或网状架构。尽管在一个实施例中设想了单个总线,但是应当理解,计算机可以使用其它总线(例如PCIE、SATA、InfiniBand、1394、USB、以太网)与各种设备、逻辑和外围设备进行通信。总线可以是包括例如存储器总线、存储器控制器、外围总线、外部总线、纵横开关、和/或本地总线的类型。
计算机可以通过输入/输出接口和输入/输出端口与输入/输出设备交互。输入/输出设备可以是例如键盘、麦克风,指向和选择设备、照相机、无人驾驶飞行器(即无人机)、视频卡、显示器、磁盘、网络设备等。输入/输出端口可以包括例如串行端口、并行端口、和USB端口。
计算机可以在网络环境中操作,因此可以通过输入/输出接口和/或输入/输出端口连接到网络设备。通过网络设备,计算机可以与网络交互。通过网络,计算机可以逻辑上连接到远程计算机(即接收方计算机)。计算机可以与之交互的网络包括但不限于局域网(LAN)、广域网(WAN)、和其它网络。网络可以是有线和/或无线网络。
图1-图15总体上在附图标记10处描绘了计算机的硬件组件。硬件组件10与软件、逻辑或其它计算机体系结构或框架协作,以形成可用的计算系统。硬件组件10可以包括第一核12、第二核14、和采样端口16。采样端口16是允许分区访问被配置为以采样模式操作的通信信道的机制。这意味着当接收到新数据并将其存储在此端口中时,它将替换端口上的先前数据。它不会像队列或排队端口那样附加其它数据。采样端口16可以直接或间接地与多个缓冲器18耦合。可选地,采样端口16可以包括多个缓冲器18。在每种情况下,缓冲器18的数量等于核的数量加一。因此,图1-图15描绘了具有第一缓冲器18A、第二缓冲器18B、和第三缓冲器18C的采样端口16。本发明的硬件组件10可以用附加的核来扩展。这样,采样端口16将在其中扩展缓冲器18的数量从而容纳核14的数量加一。例如,如果硬件组件10包括三个核14,则采样端口16将具有四个缓冲器18。如果硬件组件10具有四个核14,则采样端口16将具有五个缓冲器18,依此类推。
硬件组件10还包括用于管理采样端口16中的缓冲器18的指针。在一个特定实施例中,存在三种类型的指针,称为:头指针20、尾指针22、和忙指针24。指针20、22、24可以是非阻塞争用管理单元的一部分,该非阻塞争用管理单元使指针能够管理缓冲器18。非阻塞争用管理单元指的是一种设备或逻辑,其在典型的数据共享场景中,要么迫使写入步骤等待读取完成,要么迫使读取等待写入完成。一种示例性方法无需等待访问即可管理争用。这允许在时序方面更具确定性,并且在某些处理环境中可以更有效地利用处理器时间。
在一个特定实施例中,采样端口16定义共享存储器,其中第一缓冲器18A、第二缓冲器18B和第三缓冲器18C协作以由第一核接收并启用缓冲器18中的数据读取。尽管附图示出了第一缓冲器18A位于第二缓冲器18B的垂直上方,第二缓冲器18B位于第三缓冲器18C的上方,但是附图中示意性地示出的布置是用于说明目的和图12的第二核14的物理构造。缓冲器18可以以任何方式实施。
在描述可用计算机系统中的硬件组件10的操作之前,将参考附图和其中描述的结构。
图1描绘了第一核12是消耗核,其从采样端口16读取数据以用于可用计算系统中的应用软件。第二核14是生产核,其从外部通信源接收数据,以便可以将其写入采样端口16。头指针20和尾指针22都指向或导向采样端口16中的第一缓冲器18A。忙指针24等于空值,因此在图1中未示出。因此,图1大体描绘了采样端口16的初始状态,并且第一核12是消耗数据的读取核,而第二核14是产生数据的写入核。
图2描绘了在写入操作期间的硬件组件10,并且更具体地描绘了采样端口16。在图2的写入操作期间,头指针和尾指针20、22被指向并导向第一缓冲器18A。框26表示第二核14在第一缓冲器18A中写入新数据。忙指针24未示出,因为它仍然等于空值。
图3描绘了硬件组件10,即图2描绘的写入操作之后的采样端口16。第一缓冲器18中的框28表示在图2的写入操作之后存储在第一缓冲器18A中的新鲜数据。在写入操作之后,头指针20指向或导向第一缓冲器18A。尾指针22指向或导向第二缓冲器18B。忙指针24未示出,因为它仍然等于空值。
图4描绘了硬件组件10,即图3的框28所示的新鲜数据的读取操作期间的采样端口16。通过第一端口12从第一缓冲器18A读取数据来完成读取操作。在读取操作期间,忙指针24指向第一缓冲器18A。头指针20指向或导向第一缓冲器18A,而尾指针22指向或导向第二缓冲器18B。框30表示第一缓冲器18A中的数据被第一核12标记为过期或读取。
图5描绘了硬件组件10,即图4的读取操作之后的采样端口16。第一缓冲器18A中的框32表示在由第一核12执行的读取操作之后数据是过期的。由于读取操作完成,所以第一核12的忙指针24等于空,因此在图5中未示出。头指针指向或导向第一缓冲器18A,而尾指针22指向或导向第二缓冲器18B。
图6描绘了硬件组件10,即采样端口16,其中新鲜数据和来自图5的所有先前数据已被删除。框34表示第三缓冲器18C中的新鲜数据。头指针20指向或导向第三缓冲器18C,而尾指针22指向或导向第一缓冲器18A。
图7描绘了硬件组件10,即正在进行慢速读取操作的采样端口16。当进行慢速读取操作时,头指针20指向第三缓冲器18C,而尾指针22指向第一缓冲器18A。忙指针24指向第三缓冲器18C,指示第一核12正在读取或以其它方式消费数据。第三缓冲器18C中的框36表示已经在图6中先前新鲜的数据已被标记为过期或已读取。注意,如果在多个第二核14更新期间第一核12继续读取,则第二核14将连续更新并且剩余的两个缓冲器(第一缓冲器18A和第二缓冲器18B)未被第一核12读取。
图8描绘了硬件组件10,即采样端口16,其中在图7中引入的慢速读取操作期间发生第一写入操作。在第一写入操作中,头指针20指向或导向第一缓冲器18A,而尾指针22指向或导向第二缓冲器18B。忙指针24指向第三缓冲器18C。如框38所示,指向第三缓冲器18C的忙指针24指示第一核12正在读取仍由第一核12读取的数据。框38中的数据仍在第三缓冲器18C中读取的同时,如框40所示,由第二核14产生并写入新鲜的数据。如框38所示,如果在多个第二核14更新期间,第一核12如框38所示继续读取数据,则第二核14将连续更新第一核12未读取的两个剩余缓冲器。
图9描绘了硬件组件10,即采样端口16,其具有在图7中引入的慢速读取操作期间(在图8的第一写入操作之后)发生的第二写入操作。在第二写入操作中,忙指针24仍指向第三缓冲器18C,并且框38继续呈现仍由第一核12读取的数据。头指针20导向第二缓冲器18B,而尾部指针22导向第一缓冲器18A。框42表示由第二核14写入第二缓冲器18B的新鲜数据。如果第一核12在多个第二核14更新期间继续读取,则第二核14将连续更新剩余的未被第一核12读取的两个缓冲器。
图10描绘了硬件组件10,即采样端口16,其中在图9的第二操作之后的慢速读取操作期间发生第三写入操作。在图10的第三写入操作期间,头指针20指向或导向第一缓冲器18A,而尾指针22指向第二缓冲器18B。忙指针24仍指向第三缓冲器18C,如框38所示,其指示第一核12正在继续读取仍在读取的数据。如框44所示,第二核14写入新数据。进入第一缓冲器18A。如果第一核12在多个第二核14更新期间继续读取,则第二核14将连续更新第一核12未读取的其余两个缓冲器。
图11描绘了硬件组件10,即采样端口16,其中在图10所示的第三写入操作之后的慢速读取操作期间发生了第四写入操作。在图10的第三写入操作之后,第四写入操作指示头指针20指向第二缓冲器18B。尾指针22指向第一缓冲器18A。由于慢速读取操作仍在发生,所以仍在第三缓冲器18C中读取的数据由框38指示,并且尾指针24指向相同,使得第一核12正在读取第三缓冲器18C中的数据。如框46所示,第二核14将新鲜数据写入第二缓冲器18B。如果在多个第二核14更新期间第一核12继续读取,则第二核14将继续更新未被第一核12读取的其余缓冲器。
图12描绘了硬件组件10,即,在慢速读取操作期间发生的图8、图9、图10、和图11的四个写入操作之后的采样端口16。现在认为以前由图8-图11中的框38表示的数据是过期的,并由第三缓冲器18C中的框48表示。忙指针为空(因此未显示),因为未执行任何读取操作。头指针20指向或导向第一缓冲器18A,而尾指针22指向或导向第二缓冲器18B。框50表示被写入第一缓冲器18A的新鲜数据。
图13与图3相似之处在于,它表示采样端口16,其中新鲜数据被写入第一缓冲器18A。与图3相似,图13用框28标记出新鲜数据。
图14表示采样端口16,其中读取了新鲜数据,类似于图4中所示。因此,在图14中,框30表示来自框13的数据在被读取时被标记为过期,如由忙指针24从第一核12所指示的那样。
图15表示采样端口16,其在图14所示的读取操作之后具有过期数据。过期的数据由框52表示。头指针20指向第一缓冲器18A,尾指针22指向第二缓冲器18B。忙指针24等于空值,因此在图15中未示出。
图16描绘了硬件组件10,即,从图15读取过期数据之后的采样端口16。当读取来自图15的过期数据52时,来自第一核12的忙指针24指向第一缓冲器18A。在过期的数据读取期间,第一缓冲器18A将其数据标记为过期或已读取,如框54所示。头指针20指向第一缓冲器18A,尾指针22指向第二缓冲器18B。换句话说,图16指示第一核12能够读取先前在图15中描绘的过期数据。
图17-图22描绘了根据本发明的一方面的替代实施例。图17-图22描绘了通常在110处的计算设备的硬件组件。第二实施例的硬件设备110可以包括第一核112、第二核114、和排队端口116。在硬件设备110中,第一核112是写入核,第二核114是读取核。排队端口116可以包括控制结构118和数据缓冲器120。控制结构118包括头指针122、尾指针124、弹出计数器126、和推入计数器128。数据缓冲器120被配置为接收消息在其中,如将在下面更详细地描述的。
图17描绘了排队端口116包括由第一消息尺寸132和第一消息数据134组成的单个消息130。头指针122指向第一消息130的开头,尾指针124指向第一消息130的末尾。第一核112使发送者能够通过将尾指针124递增到指向将要写入下一条消息的位置来跟踪所发送的消息。第二核114使接收器能够通过将头指针122递增到指向将要读取下一条消息的位置来跟踪接收到的消息。因此,在这种情况下,由于第二核114是读取核,所以图17指示第一消息130将被读取,如由指向下一条消息(即第一消息130)将被读取的位置的头指针122所指示的那样。
图18描绘了在弹出操作之后排队端口116变空。第二核114读取第一消息130(图17)并且使头指针122以消息尺寸而前进,其中,图18中的“已读”表示正在读取的第一消息。排队端口116的数据缓冲器120现在为空。当排队端口116的数据缓冲器120为满或空时,头指针122和尾指针124将相等。图18进一步描述了排队端口116的数据缓冲器120是空的。当排队端口116的数据缓冲器120未满时,弹出计数器126和推入计数器128将相等。在一个特定实施例中,如果头指针122等于尾指针124并且推入计数器128等于弹出计数器126,则排队端口116的数据缓冲器120为空。
图19描绘了排队端口116,其尾指针环绕。即,第一核112已经写入了多个消息并且到达了数据缓冲器120的末端,并且尾指针124已经返回到数据缓冲器120队列的开始。更特别地,第二消息136包括第二消息尺寸138和第二消息数据140。第三消息142包括第三消息尺寸144和第三消息数据146。第四消息148包括第四消息尺寸150和第四消息数据152。
继续参考图19,头指针122导向第二消息136的开始,指示第二核114将要开始读取第二消息136。因为尾指针124跟踪已发送的消息并将尾指针递增以指示下一条消息将被写入的位置。图19表示排队端口116,它将引导第二核114读取第二消息136,然后是第三消息142,然后是第四消息148。
图20描绘了由于数据缓冲器120中的可用空间不足而在推入操作中失败的排队端口116。数据缓冲器120中的空空间被表示为154。第五消息156包括第五消息尺寸158和第五消息数据160。图20指示第一核112尝试写入第五消息156,但是数据缓冲器120中没有足够的空间。换句话说,第五消息156超过了数据缓冲器120中的空间154的尺寸。即,第一核112确定头指针122是否小于尾指针124的尺寸加上第五消息156的尺寸。如果头指针122小于尾指针124加上第五消息156,则丢弃第五消息156。换句话说,第一核112响应于确定尾指针124加上第五消息156大于由头指针122的位置所指示的空白空间154,则丢弃第五消息156。
图21描绘了在成功的推入操作之后,排队端口116,即数据缓冲器120变满。第六消息162包括第六消息尺寸164和第六消息数据166。第一核112写入第六消息162,并且数据缓冲器120中有足够的空间容纳第六消息162。这样,尾指针124现在等于头指针122。因此,如在计数器128中由“1”所指示的那样,计数器128递增到1。数据缓冲器120已满。值得注意的是,当头指针122等于尾指针124并且推入计数器128不等于弹出计数器126时,则排队端口116的数据缓冲器120已满。
图22描绘了在弹出操作之后,排队端口116的数据缓冲器120不再满。第二消息136显示为已读,如词语“已读”所示。头指针122前进到第三消息144的开始。尾指针124保持在第六消息162的末尾。推入计数器128和弹出计数器126不相等。因此,弹出计数器如弹出计数器124中的数字“1”所示而递增。由于尾指针124不等于头指针122,而推入计数器128等于弹出计数器126,因此指针的数据缓冲器120排队端口116不再满。
如此描述了图1至图16的硬件组件10和图17至图22的硬件组件110的结构,现在参考其操作和示例性功能。
在一个示例中,并且相对于图1至图16,采样端口16的三重缓冲器18方案被设计为允许同时生产(写入)和消耗(读取)数据。数据可以由一个核(例如核14)写入一个缓冲器18,而另一个核(例如核12)则从采样端口16中的另一个缓冲器18读取数据。
指针20、22、和24用于管理缓冲器18以跟踪数据并管理缓冲器18。如上所述,头指针20指示最后写入哪个槽/缓冲器数据。尾指针22指示接下来将写入哪个槽/缓冲器数据。忙指针24指示正在读取缓冲器槽。在一个示例中,每个核可能有一个忙指针,在端口之间共享(因为每个核一次只能从一个端口读取),该核指示另一个核不要写入此槽,以防止读取的数据损坏。指针与指令协作,这些指令在由处理器执行时将尾指针移至后续缓冲器,如果尾指针等于忙指针,则将尾指针前进至其它缓冲器。此外,还有一些指令,当它们由处理器执行时,会将数据写入尾指针所指示的缓冲器。另外,指令由处理器执行时,如尾指针指示的那样,在写入数据时将头指针设置为等于尾指针。
在一个示例中,其中多个采样端口16耦合在一起以形成可用的计算系统,每个采样16端口可以具有其自己的头指针22,该指针指向缓冲器18,其中有条目最近被完全读取过。此外,每个采样端口16具有其自己的尾指针22,其指向缓冲器18,在缓冲器18中接下来将写入数据或当前正在写入数据。另外,每个核具有其自己的忙指针24,该忙指针24指向该核当前正在读取的缓冲器槽。如果某个核当前未读取采样端口,则该核的忙指针24应该为空(即,它不应指向任何缓冲器)。换句话说,空的忙指针24是用于将软件程序或操作系统引导到计算机存储器中的空位置的命令。空的忙指针24可以用于表示存储器搜索或处理事件的结束。忙指针可以进一步指示其它核不得写入其指向的缓冲器,因为正在读取该缓冲器,并且对其进行写入可能会导致数据损坏。
在图1-图16中的硬件组件10的采样端口16的三重缓冲器方案的一个示例中,读取数据时的缓冲器管理如下:获得采样端口16的头指针20。然后,组件10将核(例如核12)的忙指针24设置为等于采样端口的头指针20。然后,组件10可以从头指针20指示的缓冲槽读取数据。然后,组件10可以设置核(即核12)的忙指针24在完成/完成读取后会返回为空。
在操作中,图1示出了采样端口16及其关联的指针。第一核12使用以下方法、步骤或算法从采样端口16读取。即,读取端口的头指针。将核的忙指针24设置为等于端口的头指针20。然后,从头指针20指示的缓冲器中读取数据。然后,完成读取操作后,将核的忙指针24设置为空。
在操作中,图2和图3分别示出了在写入操作期间和之后的采样端口16。在此特定示例中,采样端口写入算法仅更新端口的头指针20和尾指针22,而采样端口读取算法仅更新读取核(即第一核12)的忙指针24。这确保了不存在关于端口管理指针的争用;即使它们都可以被两个核12、14读取,它们每个只能被单个核修改。访问逻辑可以原子性地访问指针,这样就不会由于同时进行读取和写入操作而导致指针损坏。
在操作中并继续参考图2和图3,组件10的缓冲器管理协议在写入数据时通过将端口的尾指针22移动到下一个缓冲器18槽进行操作。在一个示例中,这可以通过改变尾指针的值以使得尾指针指向下一缓冲器来实施。该操作通过指针分配完成。下一个缓冲器的地址是已知的,因为在实例化端口16期间,采样端口缓冲器的位置在初始分配后不会更改。如果端口的更新的尾指针22等于另一个核的忙指针24,则前进该端口的尾指针到附加的缓冲器槽(例如第二缓冲器18B)。在一个示例中,这可以通过改变尾指针的值来实施,使得尾指针指向下一个缓冲器。该操作通过指针分配完成。为了前进到另一个缓冲器槽,使用将在标志为忙的槽之后使用的槽。然后,将数据写入尾指针22指示的缓冲器槽(例如第一缓冲器18A)。然后,设置完成写入操作后,端口的头指针20等于其尾指针24。在一个示例中,仅由读取核更新忙指针24,并且仅由写入核(即第二核14)更新头指针20和尾指针22。这些方法可以通过写入指令和读取指令来实施,该写入指令当由处理器执行时仅更新头指针和尾指针,该读取指令当由处理器执行时仅更新第一核的忙指针,其中写入指令和读取指令适于减少在指针上争用的可能性或排除争用。在另一个实施例中,完全消除了指针争用。
在操作中,图4和图5分别示出了在读取操作期间和之后的采样端口16。第二核14使用以下算法或方法写入采样端口16:将数据写入尾指针22所指示的缓冲器18B。然后,将端口的头指针20设置为等于其尾指针22,则写入完成。然后,将端口的尾指针移到下一个缓冲器。在一个示例中,这可以通过改变尾指针的值来实施,使得尾指针指向下一个缓冲槽。如果端口的更新的尾指针22等于其它核的忙指针24,则将端口的尾指针22前进到附加的槽。
在操作中,图6至图12描绘了采样端口16使用三个或更多缓冲器而不是两个缓冲器的示例性原因是为了处理一个写入操作完成而另一写入操作开始,而正在进行读取操作的情况。在这种情况下,一个缓冲器包含正在读取的数据,一个缓冲器包含在读取操作期间已完成写入的数据,一个缓冲器包含在读取操作期间已开始写入的数据。在一次读取操作期间,对于任何数量的附加的写入操作,可以重复此步骤,而写入核在未被读取的两个缓冲器之间交替。
采样端口16可以进一步包括新鲜度报告特征。可以实施端口以在读取端口时报告新鲜度。“新鲜”是指向该端口写入数据的时间比从端口读取数据的时间要晚。该端口有新的未读数据。“过期”是指从端口读取数据的时间比向该端口写入数据的时间要晚。自上次读取以来,端口的数据尚未更新。有两种基本的新鲜度报告方法:(i)端口新鲜度标志和(ii)唯一消息ID。
继续新鲜度报告,端口新鲜度标志方法可以通过端口保持指示端口是否包含新鲜或过期数据的标志来进行操作。该标志可以保留在端口的管理结构中。然后,在写入数据时将新鲜度标志设置为“新鲜”。将数据写入端口的例程利用原子性操作来同时更新新鲜度标志和头指针。然后,在读取数据时将新鲜度标志设置为“过期”。从端口读取数据的例程利用原子性操作同时读取头指针并清除新鲜度标志。如果同时发生读取操作和写入操作,则通过访问端口的头指针20确定顺序。当头指针20更新时(在写入操作结束时),新鲜度标志设置为“新鲜”。从端口读取数据的例程利用原子性操作同时读取头指针并清除新鲜度标志。
继续本实施例或另一实施例中的端口新鲜度标志方法,访问头指针20并且原子性地产生新鲜度标志。在一个示例中,新鲜度指示器使读取分区可以确定自分区上次读取数据以来数据是否已更新。如果写入分区未同时更新指向数据源的指针和新鲜度指示器,则读取分区可能会将新鲜数据解释为过期,反之亦然。在写入核更新头指针20之后,还必须允许它在读取核(即第一核12)可以读取头指针20并更新新鲜度标志之前更新新鲜度标志,否则新鲜度标志可能指示“新鲜”,即使已经读取了最新的数据。在一个示例中,这可以通过允许原子性操作的处理器中存在的处理器指令来执行。在读取核(即第一核12)读取头指针20之后,还必须允许它读取和更新新鲜度标志,然后另一个核才能更新头指针20和新鲜度标志,否则新鲜度标志可能指示“过期”,即使尚未读取写入端口的最新数据。这可以通过指令来实施,该指令在由处理器执行时在访问头指针的同时更新新鲜度标志。
在端口新鲜度标志方法的一个实施例中,每个采样端口具有其自己的标志:新鲜度标志,可以读取该标志来确定端口是新鲜还是过期。新鲜度标志在访问头指针20的同时被更新,因为新鲜度是由头指针20所指向的端口的最近写入的消息的状态(已读或未读)所确定的。
在一个示例性实施例中,通过访问头指针而原子性地进行对新鲜度标志的更新。在此示例中,新鲜度标志或新鲜度指示器允许读取分区确定自分区上次读取数据以来数据是否已更新。如果写入分区未同时更新指向数据源的指针和新鲜度指示器,则读取分区可能会将新鲜数据解释为过期,反之亦然。当一个核(例如第二核14)访问头指针20时,在另一个核(例如第一核12)可以为了端口状态保持一致而修改头指针20或新鲜度标志之前,还必须允许该一个核更新新鲜度标志。例如,以下命令序列将使采样端口报告其“过期”,即使它具有新的未读取数据:(写入步骤1)写入第二核14开始写入消息。(读取步骤1)读取第一核12读取指向最近的完全写入的消息的头指针20。(写入步骤2)写入第二核14完成了消息的写入并且移动了头指针20以指向新消息。然后,写入第二核14将新鲜度标志设置为“新鲜”,指示有新消息可用,其中这可以通过在原子性操作期间将标志设置为“1”来实施。读取第一核12将新鲜度标志设置为“过期”,表示已读取一条消息,但已读取的消息不再是端口的最新消息。然后,通过对头指针20的访问将对新鲜度标志的更新实施为原子性更新,将强制命令2(即,读取头指针)和5(即,将新鲜度标志设置为过期)连续发生,伴随着在此之前或之后发生的由写入核进行的的头指针20和新鲜度标志的中间更新(例如步骤3和4)。
因此,用于读取使用新鲜度标志报告新鲜度的采样端口16的方法、步骤、或算法包括原子性地读取端口的头指针20并将端口的新鲜度标志设置为“过期”。在一个示例中,新鲜度标志或新鲜度指示器允许读取分区确定自分区上次读取数据以来数据是否已更新。如果写入分区未同时更新指向数据源的指针和新鲜度指示器,则读取分区可能会将新鲜数据解释为过期,反之亦然。然后,将第一核的12忙指针24设置为等于端口的头指针20。然后,从由头指针20指示的缓冲器18读取数据。然后,在读取完成时将第一核的12忙指针24设置为空。写入使用新鲜度标志的采样端口的方法、步骤、或算法包括将数据写入尾指针22指示的缓冲器18。然后,完成写入后,原子性地设置端口的头指针20等于其尾指针22,并设置端口的新鲜度标志为“新鲜”。然后,将端口的尾指针22移动到下一个缓冲器18。如果端口的更新后的尾指针22等于其它核的忙指针24,则将端口的尾指针22前进一个额外的缓冲器18槽。
跟踪采样端口新鲜度的另一种方法是唯一消息ID方法。在这种方法中,唯一的ID(例如时间戳)将分配给写入采样端口的每个消息。读取采样端口后,可以将消息的ID与从该端口读取的上一条消息的ID进行比较:如果ID相等,则表明该端口已过期(消息已读);如果ID不相等,则端口为新端口(消息未读)。换句话说,对于唯一消息ID方法,当(例如,通过第二核14)将数据条目写入端口时,会将唯一ID(例如时间戳)分配给该条目。无论何时读取端口,都会将正在读取的条目的ID与从该端口读取的最后一个条目的ID进行比较。如果读取的ID等于从该端口读取的最后一个ID,则该端口的数据已过期;否则它是新鲜的。
多核扩展-尽管上述提出的采样端口无阻塞争用管理方案是针对具有两个核(一个核写入端口,一个核读取端口)的系统描述的,但该方案很容易扩展为多核系统,其中一个核写入端口,而多个核可以从端口读取。需要进行以下修改才能将这种方案推广到单写入器、多读取器系统。对于多核扩展,增加每个端口中的缓冲器数量,以使缓冲器数量等于1+核数量。换句话说,端口16可以添加额外的缓冲槽,使得缓冲槽数量=核数量+1。(例如,三核解决方案将使用四缓冲器而不是三缓冲器。)因此,双核解决方案将使用三缓冲器,而三核解决方案将使用四缓冲器。因此,缓冲器计数比核计数多一。另外,缩放需要添加额外的忙指针,以使每个读取核都保持自己的忙指针。此外,当写入核在写入操作结束时更新尾指针时,它应继续前进尾指针,直到找到所有忙指针均未指向的缓冲器为止。该采样端口添加了额外的忙指针,使得每个核都有自己的忙指针。当写入核正在搜索要向其写入下一条消息的缓冲器时,对照所有其它核的忙指针检查该缓冲器,以确保没有核在读取该消息。
这样已经参照图1至图16描述了采样端口16的操作和示例性优点,现在参考排队端口116的第二实施例。
排队端口-排队端口,例如端口116,是由ARINC 653定义的用于分区之间通信的一种数据结构。ARINC 653(航空电子应用标准软件接口)是用于安全关键型航空电子实时操作系统(RTOS)中的时空划分的软件规范。它允许在集成模块化航空电子架构的背景下,在同一硬件上托管不同软件级别的多个应用程序。它是ARINC 600系列数字飞机和飞行模拟器标准的一部分。为了使实时操作系统平台与应用程序软件脱钩,ARINC 653定义了一个称为APplication EXecutive(APEX)的API。每个应用程序软件都称为一个分区,并且具有自己的存储空间。它还具有由APEX API分配的专用时隙。在每个分区内,允许多任务处理。APEX API提供了服务来管理分区、进程和计时,以及分区/进程通信和错误处理。可以通过使用管理程序将分区映射到虚拟机来实施分区环境,但这不是必需的。通常,ARINC 653平台包括:允许实时计算确定性服务的硬件平台;抽象层,管理平台的计时器和空间分区约束(内存,CPU,输入/输出);ARINC 653服务的实施(APEX API);以及能够配置平台及其使用范围的界面。
与采样端口16(其中只能读取最新消息)不同,排队端口116可以保存多个消息。可以使用先进先出(FIFO)模式访问排队端口中的消息:读取端口时,将获取写入端口的最新消息并从该端口中丢弃;下次读取该端口时,将获取并丢弃最近的最近消息;等等。存储在排队端口中的每个消息的尺寸不必固定,但是排队端口的总尺寸是有限的并且是固定的。如果端口没有足够的空间容纳消息,则尝试将消息写入排队端口将失败。
在排队端口的上下文中,写入操作被称为“推入”,而破坏性的读取操作(其中消息是由核获得并从端口丢弃的)被称为“弹出”。
与采样端口不同,排队端口本质上没有对每个消息中包含的数据的争用,因为未读消息永远不会在排队端口中被覆盖。但是,争用可能存在于排队端口的控制数据上(例如,指示队列是满还是空,或将在哪里写入下一条消息的字段)。本文档中描述的方案可以安全地管理此争用,从而允许同时生产(写入)和消耗(读取)消息。
FIFO(先进先出)结构–排队端口可以包括多个消息,这些消息可以被破坏性地读取(“弹出”)。端口尺寸受到限制和固定,如果端口没有足够的空间容纳新消息,则写入(“推入”)尝试将失败。
排队端口–环形FIFO缓冲器:在一个示例性实施例中,每个条目可以以条目尺寸的指示器开始。这可以被设计为允许同时产生(写入)和消耗(读取)数据。排队端口本质上没有数据争用,因为未读消息永远不会被覆盖(与采样端口不同)。该设计也没有控制争用,因为每个队列管理变量都由读取核或写入核更新,但不能同时由两者更新。指针和计数器用于管理缓冲器,其中头指针122指示要从其读取的下一个位置,尾指针124指示要写入的下一个位置。当队列在推入后变满时,推入计数器128会递增。当弹出之后(推入计数器128不等于弹出计数器126)时,弹出计数器126递增。
当读取(“弹出”)数据时,队列管理通过验证队列不为空来进行操作。当头指针等于尾指针且推入计数器等于弹出计数器时,队列被解释为空。然后,在头指针122处读取条目。如果推入计数器128不等于弹出计数器126,则使弹出计数器126递增。在这种情况下,读取分区将值1添加到当前计数器值。推入和弹出计数器的值仅用于检查它们是否相等,否则不使用。然后,更新头指针122,使得新的头指针等于头指针加上条目尺寸,其中,如果新的头指针大于最大条目尺寸,则将新的头指针设置为队列的开始。在一个示例中,管理结构包含一个指向队列开始的指针,该指针在实例化之后不会更改。当读取分区确定头指针的设置超出从指针到队列开头的最大条目尺寸时,会发生这种情况
在另一个特定实施例中,当写入(“推入”)数据时,队列管理通过验证队列具有足够的可用空间来进行操作。然后,在尾指针处写入一个新条目。然后,确定尾指针的新值,但尚未实际更新尾指针(新尾指针=当前尾指针+条目尺寸)(如果新尾指针>最大条目尺寸,则将新尾指针设置为队列的开始)。如果用于尾指针124的新值等于头指针122,则使推入计数器128递增。然后,将尾指针124更新为先前确定的新值(例如,新尾指针=当前尾指针+条目尺寸)。显然,在一个示例性实施例中,仅通过读取核来更新头指针和弹出计数器,而仅通过写入核来更新尾指针和推入计数器。
通过确定头指针是否等于尾指针以及推入计数器是否等于弹出计数器来确定队列是否为空,然后队列为空。通过确定头指针是否等于尾指针以及推入计数器是否不等于弹出计数器来确定队列是否有足够的空间用于新消息,然后队列已满。如果尾指针<头指针<(尾指针+条目尺寸),则队列未满,但没有足够的可用空间容纳消息。在这种情况下,尾指针将必须传递头指针以写入消息,这将破坏头指针指向的任何数据。
根据组件110,排队端口116被实施为环形FIFO缓冲器排队端口。FIFO缓冲器排队端口116中的每个条目都包括一条消息和一个标题,其中包含该消息的长度(以及其它可选的依赖于实施的元数据)。以下控制字段可用于管理FIFO的状态,以便头指针122指向下一个要从FIFO中读取的位置。然后,尾指针124指向下一个要写入FIFO缓冲器排队端口的位置。在执行推入操作之后,当头指针122等于尾指针124时,可以使推入计数器128递增。在一个示例中,仅当队列已满时,才因为将数据推入到队列而使头指针和尾指针相等。推入计数器递增,从而队列将被解释为已满。递增该计数器的失败将导致队列被解释为空。当在执行弹出操作之后推入计数器128不等于弹出计数器126时,弹出计数器126递增。在又一示例中,推入和弹出计数器不相等表示队列已满。由于刚刚从队列中删除了一条消息,因此该消息不再完整。预期该递增将使推入和弹出计数器相等,因此不再表示已满。
在操作中,图17示出了排队端口116及其控制结构。头指针122和尾指针124用于访问FIFO缓冲器排队端口116(即数据缓冲器120)中的消息,并确定FIFO缓冲器排队端口116(特别是数据缓冲器120)中剩余多少空间,而推入和弹出计数器用于确定FIFO缓冲器排队端口116,即数据缓冲器120是满还是空。这可以通过以下指令来实施:由处理器执行时使用头指针和尾指针访问环形FIFO缓冲器中的消息以确定环形FIFO缓冲器中还有多少剩余空间的指令,以及由处理器执行时确定环形FIFO缓冲器是满还是空的指令。
在操作中,图18示出了空的排队端口。如果满足以下条件,则可以认为FIFO缓冲器排队端口116的数据缓冲器120为空:头指针122等于尾指针124;推入计数器128等于弹出计数器126。
在操作中,图21示出了满的排队端口。如果满足以下条件,则FIFO缓冲器排队端口116的数据缓冲器120已满:头指针等于尾指针;推入计数器不等于弹出计数器。
在操作中,图20示出了由于队列空间不足而被拒绝的消息。可以使用以下标准来测试新消息是否适合FIFO缓冲器排队端口116的数据缓冲器120:如果FIFO缓冲器排队端口116的数据缓冲器120已满(请参见上文),则该消息将不合适;如果头指针122大于尾指针124并且小于(消息尺寸+尾指针),则该消息没有足够的空间。这是因为推入消息将导致尾指针124前进经过头指针122,从而覆盖头指针122指向的任何消息。如果以上条件均不满足,则该消息将适合FIFO缓冲器排队端口116中的数据缓冲器120。
通过验证FIFO缓冲器排队端口116的数据缓冲器120不为空(参见上文),可以使用以下方法、步骤、或算法来对排队端口116执行读取(弹出)操作:如果为空,则中止。然后,读取头指针122指向的条目。如果推入计数器128不等于弹出计数器126,则将弹出计数器126递增。
更新头指针122是通过将条目的尺寸添加到头指针122来进行的。如果新的头指针122将超过数据缓冲器120的结束地址,则将新的头指针122设置为数据缓冲器120的起始地址。
在操作中,图21和图22描绘了弹出操作之前和之后的排队端口的图示。注意,在这种情况下,FIFO缓冲器排队端口116的结束地址的数据缓冲器120是消息可以开始的最后一个地址(即,头指针122或尾指针124可以指向的最后一个地址),而不是最后一个可以包含消息数据的地址。必须在FIFO缓冲器排队的端口116结束地址的数据缓冲器120之后分配等于该端口的最大支持消息尺寸的附加内存,以支持从FIFO缓冲器排队端口116的数据缓冲器120的结束地址开始的最大尺寸消息的最坏情况。
通过验证排队端口116的数据缓冲器具有用于新消息的足够的可用空间,可以使用以下方法、步骤、或算法来执行写(推入)操作。然后,从尾指针124开始写入新条目。然后,通过将条目的尺寸添加到尾指针124,确定尾指针124的新值(但尚未实际更新尾指针)。如果尾指针124将超过数据缓冲器120的结尾,则将新的尾指针124设置为数据缓冲器120的开头。如果尾指针124的新值等于头指针122,则使推入计数器128递增。然后,将尾指针124更新为确定的新值。
在操作中,图19和图21示出了在成功的推入操作之前和之后的排队端口。注意,头指针122和弹出计数器126仅由读取核更新,而尾指针124和推入计数器128仅由写入核更新。这可以防止排队端口的控制字段被多个核同时修改而损坏。
除了以上讨论的实施例之外,其它示例性实施例可以利用子虚拟链路(VL)FIFO队列。子VL FIFO队列是ARINC 664定义的一种数据结构。ARINC664将子VL FIFO队列定义为发送端口的集合。每个发送端口恰好属于一个子VL。子VL FIFO队列是一个调度工具,可跟踪子VL的端口的传输开始顺序,以确保消息以正确的顺序传输。
子VL FIFO队列的工作方式类似于排队端口,其中每个条目都是端口标识符。在子VL FIFO队列中调度传输时,可以应用以下规则。如果将消息发送或推入到属于子VL的排队端口中,则将排队端口标识符无条件地推入到子VL FIFO中(前提是FIFO具有足够的空间),因为所有消息都放在排队端口中最终将被传输。如果将消息发送或推入到属于子VL的采样端口中,则仅当子VL FIFO中尚未存在该端口时,采样端口标识符才被推入到子VL FIFO中。这是因为将仅发送采样端口中的最近或最新消息,因此不应调度该端口多次发送。
在将采样端口从子VL弹出的同时将采样端口推入到子VL FIFO队列的情况下,子VL FIFO队列上的核间争用会导致数据丢失。(一个采样端口包含新鲜数据,并且其端口标识符位于子VL FIFO的最前面。)在一个示例性特殊争用方案中,该序列包括包含新鲜数据的采样端口,并且其ID位于子VL FIFO中。然后,使用读取核读取采样端口。然后,使用写入核将新消息写入采样端口。写入核可能不会将采样端口的ID放入子VL FIFO中,因为它已经存在。然后,使用读取核从子VL FIFO队列中弹出采样端口的ID。这导致采样端口具有一个新消息,该消息永远不会被安排发送,因为端口标识符尚未放置在子VL FIFO中。写入采样端口的消息已有效丢失。
在另一个示例中,通过允许将每个采样端口放置在子VL FIFO队列中两次来实施缓解。每个采样端口都会计算其子VL FIFO队列中存在的其端口ID实例的数量。该计数器由写入核递增,由读出核递减。因此,必须使用头指针对其进行原子性更新(即,采样端口新鲜度标志管理)。如果发送调度程序从子VL FIFO队列中读取了一个过期的采样端口,则它将弹出该端口并读取子VL FIFO队列中的下一个端口。
在另一示例性解决方案中,可以通过允许每个采样端口的标识符在子VL FIFO队列中最多具有两个实例而不是仅一个实例来实施缓解。每个采样端口都会保持其子VLFIFO中存在的端口ID实例数。当端口被推入子VL FIFO队列时,该计数器可以由写入核进行递增;当端口从子VL FIFO队列弹出时,该计数器可以由读取核进行递减。由于两个核都修改了计数器,因此对头指针的访问与对计数器的访问之间必须是原子性的(如上述采样端口“新鲜度标志”)。
当将消息写入采样端口时,写入核首先检查计数器,并且仅当计数器小于二时,端口标识符才被推入子VL FIFO队列。从子VL FIFO队列上的端口读取消息时,如果该端口是过期的采样端口,则该端口将从子VL FIFO队列中弹出,子VL FIFO队列上的下一个端口被读取。
因此,消息不会冗余传输。
前述示例性解决方案/方案在以下假设下工作。即,每个采样或排队端口一次只能被一个核写入。因此,一个核能够写入端口,而另一个核能够读取端口,但是如果两个核试图同时写入端口,则端口的状态可能会损坏。此外,每个排队端口一次只能被一个核读取。如果多个端口试图同时从同一排队端口弹出消息,则排队端口的状态可能已损坏。此外,读取和写入例程一定不能被打断,并且每个核的读取和写入算法中的每条指令的执行之间也不能有很大的差距,否则端口状态会被破坏。而且,硬件必须确保核有平等的机会访问共享内存。也就是说,一个核的内存访问可能不会“饿死”另一个核的访问。通常,这是通过多核处理器中的处理器一致性模块来确保的。通常,处理器的一致性模块通过仲裁内存访问以防止饥饿来处理此问题。
有一些替代实施例或方法也可以实施相似的目标。例如,有两种常见的现有方法可处理共享端口上的核间争用:信号量和时间分区。与本发明中描述的方案相比,这些方法中的每一个均具有某些缺点。
关于信号量或信号量方法,希望访问端口(用于读取或写入)的核通过设置称为信号量的标志来保留整个端口。核访问完端口后,它将清除端口的信号量。如果核尝试访问端口时已经设置了端口的信号量,则核必须等待直到信号量被清除后才能继续进行访问。在一些实施中,如果在核等待清除信号量的同时经过了一定的时间,则核将“超时”并中止其访问尝试。信号量方法虽然相对容易实施,但最坏情况下的时序却很糟糕,这使其不适用于实时系统。(在非实时系统中这不是一个大问题,在非实时系统中,核可以等待清除信号量的同时执行其它有用的任务。)本文档中描述的方案允许多个核访问端口的数据同时运行,因此核无需等待访问端口数据。
信号量方法不允许同时从两个核进行端口访问。如果两个核都希望同时访问端口,则一个核将获得预约,而其它核则必须等待。如果其它核未释放预约,则端口访问可能“超时”并失败。最差的最坏情况时序–必须假设每次访问都需要最长的等待时间才能清除预约。
关于时间划分或时间划分方法,对每个核的端口访问进行了调度,以使得对同一端口的访问永远不会同时发生,从而完全避免了内存争用的问题。这种方法需要同步核的调度,这在某些系统中可能不可行(例如,当两个核的帧长度不同时)。本文档中描述的方案不限制何时进行对每个端口的访问。总而言之,时间划分方法不允许同时从两个核进行端口访问,要求同步核,并且在某些系统上是不可能的。
各种发明构思可以体现为一种或多种方法,已经提供了一个示例。作为该方法的一部分执行的动作可以以任何合适的方式排序。因此,可以构造这样的实施例,其中以与所示出的顺序不同的顺序执行动作,即使在说明性实施例中被示为顺序动作,该动作也可以包括同时执行一些动作。
尽管这里已经描述和示出了各种发明实施例,但是本领域普通技术人员将容易想到用于执行功能和/或获得结果和/或一个或多个优点的多种其它手段和/或结构。此处描述的优点以及每个这样的变化和/或修改被认为在本文描述的发明实施例的范围内。更一般地,本领域技术人员将容易地理解,本文描述的所有参数、尺寸、材料、和构造均是示例性的,并且实际参数、尺寸、材料、和/或构造将取决于一个或多个特定应用。使用本发明的教导。仅通过常规实验,本领域技术人员将认识到或能够确定本文所述的具体发明实施方案的许多等同方案。因此,应当理解,前述实施方式仅以举例的方式给出,并且在所附权利要求及其等同物的范围内,可以以不同于具体描述和要求保护的方式来实践本发明的实施方式。本发明的发明实施例涉及本文所述的每个单独的特征、系统、物品、材料、套件、和/或方法。另外,如果这样的特征、系统、物品、材料、套件、和/或方法不是相互矛盾的,则包括两个或更多个这样的特征、系统、物品、材料、套件、和/或方法的任意组合也在本发明的发明范围内。
上述实施例可以以多种方式中的任何一种来实施。例如,可以使用硬件、软件、或其组合来实施本文公开的技术的实施例。当以软件实施时,软件代码或指令可以在任何合适的处理器或处理器的集合上执行,无论是在单台计算机中提供还是在多台计算机中分布。此外,指令或软件代码可以存储在至少一种非暂时性计算机可读存储介质中。
这里已经阐述了许多具体细节以提供对实施例的透彻理解。然而,普通技术人员将理解,可以在没有这些具体细节的情况下实践实施例。在其它情况下,没有详细描述众所周知的操作、组件、和电路,以免混淆实施例。可以理解的是,本文公开的具体结构和功能细节可以是代表性的,而不必限制实施例的范围。另外,尽管已经以结构特征和/或方法动作专用的语言描述了主题,但是应当理解,所附权利要求书中定义的主题不必限于本文所述的特定特征或动作。相反,本文描述的特定特征和动作被公开为实施权利要求的示例形式。
本文所采用的术语和表达用作描述性术语,而非限制性的,并且在使用此类术语和表达时,无意排除所示和所述特征的任何等同形式(或部分),并且应当认识到,在权利要求书的范围内可以进行各种修改。因此,权利要求书旨在覆盖所有这些等同物。本文已经描述了各种特征、方面、和实施例。如本领域技术人员将理解的,特征,方面和实施例易于彼此组合以及变化和修改。因此,应当认为本发明包括这些组合、变化、和修改。意图是,本发明的范围不限于该详细描述,而是由所附权利要求书来限定。要求本申请的优先权的未来提交的申请可以以不同的方式要求公开的主题,并且通常可以包括如本文中以各种方式公开或以其它方式证明的一个或多个元件的任何集合。
此外,用于经由其处理器执行软件代码或指令的可用计算环境的计算机或智能电话可以具有一个或多个输入和输出设备。这些设备尤其可以用于呈现用户界面。可以用来提供用户界面的输出设备的示例包括用于视觉呈现输出的打印机或显示屏,以及用于听觉呈现输出的扬声器或其它声音生成设备。可以用于用户界面的输入设备的示例包括键盘和指示设备,例如鼠标、触摸板、和数字化平板电脑。作为另一个示例,计算机可以通过语音识别或其它可听格式接收输入信息。
这样的计算机或智能电话可以通过任何适当形式的一个或多个网络互连,包括局域网或广域网,例如企业网络和智能网络(IN)或Internet。这样的网络可以基于任何适当的技术,并且可以根据任何适当的协议进行操作,并且可以包括无线网络、有线网络、或光纤网络。
本文概述的各种方法或步骤可以被编码为可在采用多种操作系统或平台中的任何一种的一个或多个处理器上执行的软件/指令。另外,可以使用多种合适的编程语言和/或编程或脚本编写工具中的任何一种来编写这样的软件,并且还可以将其编译为可执行的机器语言代码或在框架或虚拟机上执行的中间代码。
在这方面,各种发明构思可以体现为用一个或多个程序进行编码的计算机可读存储介质(或多个计算机可读存储介质)(例如,计算机存储器、一个或多个软盘、磁盘、光盘、磁带、闪存存储器、USB闪存驱动器、SD卡、现场可编程门阵列或其它半导体设备、或其它非暂时性介质或有形计算机存储介质中的电路配置),在一个或多个计算机或其它处理器上执行时,执行以上讨论的本发明的各种实施例的方法。计算机可读介质或多个计算机可读介质可以是可移动的,从而可以将存储在其上的一个或多个程序加载到一个或多个不同的计算机或其它处理器上,以实施如上所述的本发明的各个方面。
本文在一般意义上使用术语“程序”或“软件”或“指令”来指代可用于对计算机或其它处理器进行编程以用于对计算机或其它处理器进行编程的任何类型的计算机代码或计算机可执行指令集。实施如上所述的实施例的各个方面。另外,应意识到,根据一个方面,当执行本发明的方法时,一个或多个计算机程序不需要驻留在单个计算机或处理器上,而是可以以模块化的方式分布在多个不同的计算机或处理器之间以实施本发明的各个方面。
计算机可执行指令可以是许多形式,例如由一个或多个计算机或其它设备执行的程序模块。通常,程序模块包括执行特定任务或实施特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,在各种实施例中,程序模块的功能可以根据需要进行组合或分布。
此外,数据结构可以以任何合适的形式存储在计算机可读介质中。为了简化说明,可以将数据结构显示为具有通过数据结构中的位置相关的字段。同样地,可以通过在计算机可读介质中传达字段之间的关系的位置为字段分配存储来实施这种关系。但是,可以使用任何合适的机制来建立数据结构的字段中的信息之间的关系,包括通过使用指针、标签或在数据元素之间建立关系的其它机制。
如本文所定义和使用的所有定义应被理解为控制字典定义,通过引用并入的文档中的定义和/或所定义术语的普通含义。
如本文中所使用,“逻辑”包括但不限于硬件、固件、软件、和/或每一个的组合以执行一个或多个功能或动作,和/或引起一个或多个来自其它逻辑、方法、和/或系统的功能或动作。例如,基于期望的应用或需求,逻辑可以包括软件控制的微处理器,诸如处理器(例如微处理器)的离散逻辑、专用集成电路(ASIC)、经编程的逻辑设备、包含指令的存储设备、具有存储器等的电子设备。逻辑可以包括一个或多个门、门的组合、或其它电路组件。逻辑也可以完全体现为软件。在描述多个逻辑的情况下,有可能将多个逻辑合并到一个物理逻辑中。类似地,在描述单个逻辑的地方,有可能在多个物理逻辑之间分配该单个逻辑。
此外,本文提出的用于实施该系统的各种方法的逻辑可以针对可能不具有先前的模拟版本的现有的以计算机为中心或以互联网为中心的技术的改进。逻辑可以提供与解决并解决本文所确定的一些问题的结构直接相关的特定功能。逻辑还可以通过提供示例性发明构思作为方法和系统的特定逻辑结构和一致功能来提供解决这些问题的明显更多的优点。此外,一个或多个逻辑还可以提供在现有技术步骤上改进的特定计算机实施的规则。本文提供的逻辑不仅限于收集数据,分析信息和显示结果。此外,本发明的部分或全部可以依赖于从本文所述的设备或部件的特定布置得出的基本方程式。因此,本发明的与部件的具体布置有关的部分不针对抽象思想。此外,本发明和所附权利要求书提出的教导不仅涉及执行行业先前已知的,易于理解的,常规的和常规的活动。在可以结合自然现象的某些方面的本发明的一些方法或步骤中,该步骤或方法步骤是新的且有用的附加特征。
如在说明书和权利要求书中使用的冠词“一”和“一个”,除非明确指出相反,否则应理解为表示“至少一个”。在说明书和权利要求书中(如果有的话),在本文中使用的短语“和/或”应该理解为是指这样结合的元件中的“一个或两个”,即在某些情况下结合存在的元件。并在其它情况下分开显示。用“和/或”列出的多个元素应以相同的方式解释,即,如此连接的元素中的“一个或多个”。除了由“和/或”字句明确标识的元素之外,还可以可选地存在其它元素,无论与那些具体标识的元素相关还是无关。因此,作为非限制性示例,在与一个开放式语言(例如“包含”)结合使用时,对“A和/或B”的引用在一个实施例中可以仅指A(可选地包括B之外的其它元素);在另一个实施例中,仅针对B(可选地包括A之外的其它元素);在又一个实施例中,针对A和B(可选地包括其它元素);等等。如本文在说明书和权利要求书中所使用的,“或”应被理解为具有与以上定义的“和/或”相同的含义。例如,当将列表中的项目分开时,“或”或“和/或”应解释为包含性的,即包含多个或多个元素列表中的至少一个,但也包括不止一个,以及(可选)其它未列出的项目。仅明确指出相反的术语,例如“仅一个”或“恰好一个”,或当在权利要求书中使用时,“由...组成”将指的是仅包括一个或多个列表中的一个元素。一般而言,本文中使用的术语“或”仅应在排他性术语(例如“一个”、“仅一个”、“仅其中之一”或“恰好其中之一”。当在权利要求书中使用时,“基本上由...组成”应具有专利法领域中所使用的普通含义。
如本文在说明书和权利要求书中所使用的,在提及一个或多个元素的列表时,短语“至少一个”应理解为是指选自以下任何一个或多个的至少一个元素:元素列表中的元素,但不一定包括元素列表中具体列出的每个元素中的至少一个,并且不排除元素列表中元素的任何组合。该定义还允许除了短语“至少一个”所指代的元素列表中明确标识的元素之外,还可以选择性地存在其它元素,无论与具体确定的那些元素相关还是无关。因此,作为非限制性示例,“A和B中的至少一个”(或等效地,“A或B中的至少一个”,或等效地“A和/或B中的至少一个”)可以指代在一个实施方案中,为任选地包括一个以上的A,不存在B(并且任选地包括除B以外的元素);在另一个实施方案中,为任选地包括一个以上的B,不存在A(并且任选地包括除A以外的元素);在又一个实施例中,至少一个,可选地包括一个以上的A,以及至少一个,可选地包括一个以上的B(以及可选地包括其它元素);等等。
当特征或元件在本文中被称为在另一特征或元件“上”时,它可以直接在另一特征或元件上,或者也可以存在中间特征和/或元件。相反,当特征或元件被称为“直接在”另一特征或元件“上方”时,则不存在中间特征或元件。还应理解,当特征或元件被称为“连接”、“附接”或“耦合”至另一特征或元件时,其可以直接连接、附接或耦合至另一特征或元件或可能存在中间特征或元素。相反,当特征或元件被称为“直接连接”、“直接附接”、或“直接耦合”至另一特征或元件时,则不存在中间特征或元件。尽管关于一个实施例进行了描述或示出,但是如此描述或示出的特征和元件可以应用于其它实施例。本领域的技术人员还将意识到,提及与另一特征“相邻”设置的结构或特征可具有与相邻特征重叠或位于其附近的部分。
为了便于描述,在本文中可以使用空间相对术语,例如“之下”、“下方”、“下面”、“之上”、“上方”等,以描述一个元件或特征与另一元件的关系。如图所示。将理解的是,除了附图中描绘的取向之外,空间相对术语还意图涵盖装置在使用或操作中的不同取向。例如,如果附图中的装置被倒置,则描述为在其它元件或特征“之下”或“之下”的元件将被定向为在其它元件或特征“之上”。因此,示例性术语“在...下方”可以包括上方和下方两个方位。可以以其它方式定向设备(旋转90度或其它方向),并据此解释此处使用的空间相对描述语。类似地,除非另外具体指出,否则本文仅使用术语“向上”、“向下”、“竖直”、“水平”、“侧向”等进行说明。
尽管在本文中可以使用术语“第一”和“第二”来描述各种特征/要素,但是除非上下文另外指出,否则这些特征/要素不应被这些术语所限制。这些术语可以用于将一个特征/元素与另一特征/元素区分开。因此,在不脱离本发明的教导的情况下,下面讨论的第一特征/元件可以被称为第二特征/元件,并且类似地,下面讨论的第二特征/元件可以被称为第一特征/元件。
实施例是本发明的实施方式或示例。说明书中对“一实施例”、“一个实施例”、“一些实施例”、“一个特定实施例”、“示例性实施例”、或“其它实施例”等的引用是指特定特征,结构,结合实施例描述的特征或特征包括在本发明的至少一些实施例中,但不一定是所有实施例中。各种写法“一实施例”、“一个实施例”、“一些实施例”、“一个特定实施例”、“示例性实施例”、或“其它实施例”等不一定都指相同的实施例。
如果本说明书指出“可以”、“可能”或“可”包括组件、特征、结构、或特性,则不需要包括该特定组件、特征、结构、或特性。如果说明书或权利要求书提及“一”或“一个”元素,则并不意味着仅存在一个元素。如果说明书或权利要求书提及“附加”元素,则不排除存在一个以上附加元素。
如本文在说明书和权利要求书中所使用的,包括在实施例中所使用的,并且除非另有明确说明,否则所有数字都可以被读作好像由单词“约”或“大约”开头,即使该术语没有明确地出现。当描述幅度和/或位置时,可以使用短语“约”或“大约”来指示所描述的值和/或位置在值和/或位置的合理预期范围内。例如,数字值的值可以是所述规定值(或值的范围)的+/-0.1%、所述规定值(或值的范围)的+/-1%、所述规定值(或值的范围)的+/-2%、所述规定值(或值的范围)的+/-5%、所述规定值(或值的范围)的+/-10%等。本文列举的任何数值范围是旨在包括其中包含的所有子范围。
另外,执行本发明的方法可以以与本文描述的顺序不同的顺序发生。因此,除非明确说明,否则不应将方法的顺序理解为限制。可以认识到,以不同顺序执行该方法的某些步骤可以达到相似的结果。
在权利要求书以及以上说明书中,所有过渡性短语,例如“包括”、“包括”、“携带”、“具有”、“包含”、“涉及”、“持有”、“组成”等应理解为开放式的,即意味着包括但不限于。如美国专利局专利审查程序手册中所述,仅过渡短语“由……组成”和“基本上由……构成”应分别是封闭的或半封闭的过渡短语。
在前面的描述中,为了简洁、清楚、和理解,使用了某些术语。在此,除了现有技术的要求之外,没有暗示任何不必要的限制,因为这些术语用于描述性目的并且旨在被广泛地解释。
此外,本发明的各种实施例的描述和图示是示例,并且本发明不限于所示出或描述的确切细节。

Claims (30)

1.一种组件,包括:
至少一个采样端口;
至少两个核,其中,第一核读取该采样端口,第二核写入该采样端口;
多个缓冲器,其与至少一个该采样端口中的每个采样端口可操作地通信,其中,与每个该采样端口相关联的该缓冲器的数量比该核的数量至少多一个,并且该缓冲器被配置为在该采样端口中保持单个消息;
非阻塞争用管理单元,其包括多个指针,其中,该指针管理该缓冲器处的争用,并防止多核计算系统中的共享端口的阻塞。
2.根据权利要求1所述的组件,还包括:
其中,该第一核专门是读取核;和
其中,该第二核专门是写入核。
3.根据权利要求1所述的组件,其特征是,该多个缓冲器包括:
第一缓冲器、第二缓冲器、和第三缓冲器;
其中,该第一核从一个缓冲器读取数据,同时该第二核将数据写入不同的缓冲器。
4.根据权利要求1所述的组件,其特征是,该多个指针包括:
头指针,其指示最近写入了哪个缓冲器数据;
尾指针,其指示接下来将写入哪个缓冲器数据;和
忙指针,其指示正在读取缓冲器。
5.根据权利要求4所述的组件,其特征是,每个该读取核有一个该忙指针。
6.根据权利要求4所述的组件,还包括:
写入指令,其在由处理器执行时仅更新该头指针和该尾指针;
读取指令,其在由处理器执行时仅更新该第一核的该忙指针;并且
其中,该写入指令和该读取指令适用于减少在该指针上争用的可能性或排除争用。
7.根据权利要求6所述的组件,其特征是,该指针可以由该第一核和该第二核读取,但是仅由该第二核修改。
8.根据权利要求4所述的组件,还包括:
访问逻辑,其原子性地访问指针,以减少由于同时进行读取和写入操作而导致指针损坏的可能性。
9.根据权利要求4所述的组件,还包括:
指令,其在由处理器执行时,将该尾指针移至后续缓冲器,如果该尾指针等于该忙指针,则将该尾指针前进至附加的缓冲器,其中该缓冲器处于环形布置,以便在最后一个缓冲器,该尾指针返回到第一个缓冲器;和
指令,其在由处理器执行时,将数据写入该尾指针所指示的该缓冲器;和
指令,其在由处理器执行时,如该尾指针所指示的那样,在写入数据时将该头指针设置为等于该尾指针。
10.根据权利要求9所述的组件,还包括:
指令,当由处理器执行时,它们通过以下方式之一报告该缓冲器中数据的新鲜度:(i)新鲜度标志和(ii)唯一消息ID。
11.根据权利要求10所述的组件,还包括:
指令,其在由处理器执行时,为写入该采样端口的每条消息分配唯一ID;
指令,其在由处理器执行时,将每个消息的唯一ID与从该采样端口读取的先前消息的唯一ID进行比较;并且
其中,如果该ID相等,则该端口过期;如果该ID不相等,则该端口新鲜。
12.根据权利要求10所述的组件,还包括:
指令,其在由处理器执行时,使用该新鲜度标志报告数据的新鲜度,以保持指示该端口包含新鲜数据还是过期数据的标志;
指令,其在由处理器执行时,在写入数据时将新鲜度标志设置为新鲜,而在读取数据时将新鲜度标志设置为过期;并且
其中,如果该读取操作和该写入操作同时发生,则通过访问该头指针来确定顺序。
13.根据权利要求12所述的组件,还包括:
指令,其在由处理器执行时,原子性地更新该新鲜度标志和该头指针,其中,从该第一核和该第二核中的每一个看,该更新是同时发生的。
14.根据权利要求12所述的组件,还包括:
指令,其在由处理器执行时,原子性地更新该新鲜度标志并读取该头指针,其中,从该第一核和该第二核中的每一个看,该更新和该读取是同时发生的。
15.一种方法,包括:
通过第一核从采样端口或排队端口读取至少一个缓冲器;
使用第二核向该采样端口或该排队端口写入至少一个缓冲器;
用非阻塞争用管理单元,通过多核计算系统中的共享端口的多个指针,管理采样端口或排队端口中的缓冲器的争用。
16.根据权利要求15所述的方法,其特征是,该非阻塞争用管理基本上没有访问等待时间。
17.如权利要求15所述的方法,还包括:
用该第一核从第一缓冲器读取数据,同时用该第二核并将数据写入第二缓冲器。
18.如权利要求15所述的方法,还包括:
用头指针指示最近写入了哪个缓冲数据;
用尾指针指示接下来将写入哪个缓冲数据;和
用忙指针指示正在读取缓冲器。
19.根据权利要求18所述的方法,还包括:
原子性地访问指针,以减少由于同时进行读取和写入操作而导致指针损坏的可能性。
20.根据权利要求18所述的方法,还包括:
将该尾指针移到后续缓冲器,如果该尾指针等于该忙指针,则将该尾指针前进到另一个缓冲器;
通过该尾指针将数据写入所指示的缓冲器;和
如该尾指针所所示的那样能够,在写入数据时将该头指针设置为等于该尾指针。
21.根据权利要求18所述的方法,还包括:
为每个写入该采样端口的消息分配唯一ID;
比较每条消息的唯一ID和从该采样端口读取的前一条消息的唯一ID;和
其中,如果该ID相等,则该端口过期;如果ID不相等,则该端口新鲜。
22.根据权利要求18所述的方法,还包括:
使用新鲜度标志报告数据的新鲜度,以保持指示该端口包含新鲜数据还是过期数据的标志;
写入数据时将该新鲜度标志设置为新鲜,读取数据时将该新鲜度标志设置为过期;和
其中,如果该读取操作和该写入操作同时发生,则通过访问该头指针来确定顺序。
23.根据权利要求22所述的方法,还包括:
在第一核能够读取该头指针并更新该新鲜度标志之前,更新该新鲜度标志。
24.根据权利要求23所述的方法,还包括:
在访问该头指针的同时更新该新鲜度标志。
25.根据权利要求15所述的方法,还包括:
从子虚拟链路(VL)先进先出(FIFO)队列中的端口读取消息,其中,如果该端口是过期的采样端口,则该端口将从子VL FIFO队列中弹出并且读取该子VL队列中的下一个端口,以确保不冗余传输消息。
26.一种组件,包括:
至少一个排队端口;
至少两个核,其中,第一核读取该排队端口,第二核写入该排队端口;
缓冲器,其与至少一个该排队端口中的每一个可操作地通信,其中,一个该缓冲器与每个该排队端口相关联,并且该缓冲器配置为在该排队端口中保持多个消息;
非阻塞争用管理单元,其包括多个指针,其中,该指针管理该缓冲器而无需等待访问;并且
其中,该组件适于管理多核计算系统中的共享排队端口的争用。
27.根据权利要求26所述的组件,还包括:
多个排队端口,其中,该多核系统中的至少一个该核读取或写入该排队端口;
多个环形先进先出(FIFO)缓冲器,其配置为耦合到该排队端口,其中,该FIFO缓冲器中的条目包括消息和标题;和
非阻塞争用管理单元,其包括多个指针和计数器,其中,该指针和计数器管理该FIFO缓冲器。
28.根据权利要求26所述的组件,还包括:
多个指针,其包括头指针和尾指针;
推入计数器,其用于计算推入或写入操作的数量;和
弹出计数器,其用于计算读取或弹出操作的数量。
29.根据权利要求26所述的组件,还包括:
指令,其在由处理器执行时,使用该头指针和该尾指针访问该环形FIFO缓冲器中的消息,以确定该环形FIFO缓冲器中剩余多少空间;和
指令,其在由处理器执行时,至少部分地根据该头指针、该尾指针、该推入计数器、和该弹出计数器确定该环形FIFO缓冲器是满还是空。
30.根据权利要求26所述的组件,还包括:
子虚拟链路(VL)FIFO队列中带有计数器的采样端口标识(ID)的两个或更少实例,当该端口被推入该子VL FIFO队列时,第二核使该计数器递增,并且当该端口从该子VL FIFO队列弹出时,该第一核使该计数器递减。
CN201880060905.4A 2017-09-19 2018-09-19 用于管理对共享端口的多核访问的系统和方法 Active CN111432899B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762560632P 2017-09-19 2017-09-19
US62/560,632 2017-09-19
PCT/US2018/051703 WO2019060386A2 (en) 2017-09-19 2018-09-19 SYSTEM AND METHOD FOR MANAGING MULTI-HEART ACCESS TO SHARED PORTS

Publications (2)

Publication Number Publication Date
CN111432899A true CN111432899A (zh) 2020-07-17
CN111432899B CN111432899B (zh) 2022-04-15

Family

ID=65810944

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880060905.4A Active CN111432899B (zh) 2017-09-19 2018-09-19 用于管理对共享端口的多核访问的系统和方法

Country Status (4)

Country Link
US (1) US11397560B2 (zh)
EP (1) EP3668615A4 (zh)
CN (1) CN111432899B (zh)
WO (1) WO2019060386A2 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11461030B2 (en) * 2019-07-15 2022-10-04 Micron Technology, Inc. Transferring data between clock domains using pulses across a queue
CN111459872B (zh) * 2020-04-22 2023-05-12 中国科学院上海微系统与信息技术研究所 一种多核并行计算的快速核间数据同步方法
JP2023537720A (ja) * 2020-08-05 2023-09-05 アップル インコーポレイテッド 古いcsiレポートを含むチャネル状態情報(csi)レポート
CN115442281B (zh) * 2022-08-20 2024-01-16 西安翔腾微电子科技有限公司 一种基于arinc664协议的采样方法

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5602536A (en) * 1985-10-16 1997-02-11 Supra Products, Inc. Data synchronization method for use with portable, microprocessor-based device
US5838684A (en) * 1996-02-22 1998-11-17 Fujitsu, Ltd. Low latency, high clock frequency plesioasynchronous packet-based crossbar switching chip system and method
US6378035B1 (en) * 1999-04-06 2002-04-23 Microsoft Corporation Streaming information appliance with buffer read and write synchronization
US6408341B1 (en) * 1996-10-22 2002-06-18 International Business Machines Corporation Multi-tasking adapter for parallel network applications
US20070195761A1 (en) * 2006-02-21 2007-08-23 Cisco Technology, Inc. Pipelined packet switching and queuing architecture
CN101605100A (zh) * 2009-07-15 2009-12-16 华为技术有限公司 队列存储空间的管理方法和设备
CN101911033A (zh) * 2008-03-05 2010-12-08 密克罗奇普技术公司 在至少一个直接存储器存取外围装置与以正交时钟操作的中央处理单元之间共享单端口静态随机存取存储器的带宽
US20120131139A1 (en) * 2010-05-17 2012-05-24 Wal-Mart Stores, Inc. Processing data feeds
WO2012069831A1 (en) * 2010-11-24 2012-05-31 Tte Systems Ltd Method and arrangement for a multi-core system
US9098462B1 (en) * 2010-09-14 2015-08-04 The Boeing Company Communications via shared memory
US20160011996A1 (en) * 2010-01-08 2016-01-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
CN106250244A (zh) * 2016-07-15 2016-12-21 北京金山安全软件有限公司 一种释放互斥锁的方法、装置及电子设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0296862B1 (en) 1987-06-24 1995-05-10 Westinghouse Electric Corporation Multiprocessor information exchange
US5459864A (en) 1993-02-02 1995-10-17 International Business Machines Corporation Load balancing, error recovery, and reconfiguration control in a data movement subsystem with cooperating plural queue processors
US6807615B1 (en) 1999-04-08 2004-10-19 Sun Microsystems, Inc. Apparatus and method for providing a cyclic buffer using logical blocks
US7426210B1 (en) 2001-04-03 2008-09-16 Yt Networks Capital, Llc Port-to-port, non-blocking, scalable optical router architecture and method for routing optical traffic
US20020184381A1 (en) 2001-05-30 2002-12-05 Celox Networks, Inc. Method and apparatus for dynamically controlling data flow on a bi-directional data bus
US7395274B2 (en) 2002-07-16 2008-07-01 Sun Microsystems, Inc. Space- and time-adaptive nonblocking algorithms
CN1269045C (zh) 2003-06-04 2006-08-09 中兴通讯股份有限公司 一种实现多个数据队列处理时动态分配存储器的方法
US7360035B2 (en) 2004-09-01 2008-04-15 International Business Machines Corporation Atomic read/write support in a multi-module memory configuration
JP4749002B2 (ja) 2005-02-25 2011-08-17 ルネサスエレクトロニクス株式会社 データ転送装置、画像処理装置及びデータ転送制御方法
US7979844B2 (en) * 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
US8078851B2 (en) 2008-12-18 2011-12-13 Faraday Technology Corp. Processor and method for recovering global history shift register and return address stack thereof by determining a removal range of a branch recovery table
US9507404B2 (en) 2013-08-28 2016-11-29 Via Technologies, Inc. Single core wakeup multi-core synchronization mechanism
CN104679667B (zh) 2013-11-28 2017-11-28 中国航空工业集团公司第六三一研究所 高效采样端口缓冲管理方法
US10048878B2 (en) 2015-06-08 2018-08-14 Samsung Electronics Co., Ltd. Nonvolatile memory module and storage system having the same
US10050765B2 (en) 2016-01-08 2018-08-14 Ge Aviation Systems Llc Providing an interface for an avionics data transfer system

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5602536A (en) * 1985-10-16 1997-02-11 Supra Products, Inc. Data synchronization method for use with portable, microprocessor-based device
US5838684A (en) * 1996-02-22 1998-11-17 Fujitsu, Ltd. Low latency, high clock frequency plesioasynchronous packet-based crossbar switching chip system and method
US6408341B1 (en) * 1996-10-22 2002-06-18 International Business Machines Corporation Multi-tasking adapter for parallel network applications
US6378035B1 (en) * 1999-04-06 2002-04-23 Microsoft Corporation Streaming information appliance with buffer read and write synchronization
US20070195761A1 (en) * 2006-02-21 2007-08-23 Cisco Technology, Inc. Pipelined packet switching and queuing architecture
CN101911033A (zh) * 2008-03-05 2010-12-08 密克罗奇普技术公司 在至少一个直接存储器存取外围装置与以正交时钟操作的中央处理单元之间共享单端口静态随机存取存储器的带宽
CN101605100A (zh) * 2009-07-15 2009-12-16 华为技术有限公司 队列存储空间的管理方法和设备
US20160011996A1 (en) * 2010-01-08 2016-01-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US20120131139A1 (en) * 2010-05-17 2012-05-24 Wal-Mart Stores, Inc. Processing data feeds
US9098462B1 (en) * 2010-09-14 2015-08-04 The Boeing Company Communications via shared memory
WO2012069831A1 (en) * 2010-11-24 2012-05-31 Tte Systems Ltd Method and arrangement for a multi-core system
CN106250244A (zh) * 2016-07-15 2016-12-21 北京金山安全软件有限公司 一种释放互斥锁的方法、装置及电子设备

Also Published As

Publication number Publication date
EP3668615A2 (en) 2020-06-24
EP3668615A4 (en) 2021-04-28
WO2019060386A2 (en) 2019-03-28
US20210326108A1 (en) 2021-10-21
CN111432899B (zh) 2022-04-15
WO2019060386A3 (en) 2020-03-19
US11397560B2 (en) 2022-07-26

Similar Documents

Publication Publication Date Title
CN111432899B (zh) 用于管理对共享端口的多核访问的系统和方法
CN110226157B (zh) 用于减少行缓冲冲突的动态存储器重新映射
JP3987384B2 (ja) 実行キュー管理
US9098462B1 (en) Communications via shared memory
KR101086514B1 (ko) 연속 매체 우선순위 인식 저장장치 스케줄러
US20150186068A1 (en) Command queuing using linked list queues
US20210019185A1 (en) Compute task state encapsulation
CN108958907A (zh) 用于数据存储系统的上下文感知动态命令调度
US7478179B2 (en) Input/output priority inheritance wherein first I/O request is executed based on higher priority
US20030018737A1 (en) System and method for a distributed shared memory
EP2686774B1 (en) Memory interface
EP1271314A2 (en) Sleep queue management for operating systems
CN113377695B (zh) 读写分离的固态存储设备的数据分布方法
CN107728935B (zh) 对分布式计算系统中的数据重新分区
CN106095604A (zh) 一种多核处理器的核间通信方法及装置
US8166246B2 (en) Chaining multiple smaller store queue entries for more efficient store queue usage
US20190384743A1 (en) Method, device and computer readable storage medium for deleting snapshot data
CN115840654B (zh) 消息的处理方法、系统、计算设备及可读存储介质
US10379899B2 (en) Systems and methods for frame presentation and modification in a networking environment
US9965321B2 (en) Error checking in out-of-order task scheduling
US8219745B2 (en) Memory controller to utilize DRAM write buffers
RU2643622C1 (ru) Вычислительный модуль
CN112767978B (zh) 一种ddr命令调度方法、装置、设备及介质
US20120311236A1 (en) Memory system, data control method, and data controller
CN113821175A (zh) 基于存储内容优先的ssd指令调度方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant