CN112306647A - 面向对象存储器 - Google Patents

面向对象存储器 Download PDF

Info

Publication number
CN112306647A
CN112306647A CN202010747281.2A CN202010747281A CN112306647A CN 112306647 A CN112306647 A CN 112306647A CN 202010747281 A CN202010747281 A CN 202010747281A CN 112306647 A CN112306647 A CN 112306647A
Authority
CN
China
Prior art keywords
oriented
hardware
memory device
message
memory
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.)
Pending
Application number
CN202010747281.2A
Other languages
English (en)
Inventor
N·克里斯曼
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.)
Marvell Asia Pte Ltd
Original Assignee
Marvell Asia Pte Ltd
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 Marvell Asia Pte Ltd filed Critical Marvell Asia Pte Ltd
Publication of CN112306647A publication Critical patent/CN112306647A/zh
Pending legal-status Critical Current

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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/465Distributed object oriented systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1064Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in cache or content addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • 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/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • 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/466Transaction processing
    • 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/542Event management; Broadcasting; Multicasting; Notifications
    • 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
    • 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/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/403Error protection encoding, e.g. using parity or ECC codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)
  • Multi Processors (AREA)
  • Storage Device Security (AREA)

Abstract

本公开涉及一种面向对象存储器。一种系统和对应的方法采用了面向对象存储器设备。面向对象存储器设备包括至少一个物理存储器和硬件控制器。硬件控制器在面向对象存储器设备内部被耦合到至少一个物理存储器。硬件控制器(i)对从面向对象存储设备的硬件客户端接收的面向对象消息进行解码,并且(ii)基于所接收和解码的面向对象消息,执行针对硬件客户端的动作。该面向对象消息与在至少一个物理存储器中被实例化或将要被实例化的对象相关联。动作与对象关联。面向对象存储器设备使得(多个)硬件客户端不必管理存储在至少一个物理存储器中的相应数据结构,从而避免了用于管理这些数据结构的硬件客户端之中的代码重复以及避免了对数据结构进行设计和验证的努力。

Description

面向对象存储器
相关申请的交叉引用
本申请要求于2019年7月29日提交的第62/879,795号美国临时申请和2020年7月27日提交的第16/940,217号美国专利申请的权益的权益。以上申请的全部教导通过引用的方式并入本文。
背景技术
线性存储器模型是指存储器寻址范例,其中存储器显示为单个连续的地址空间,其中存储器的客户端(诸如中央处理单元CPU)可以直接、并且线性地寻址所有可用的存储器位置。线性存储器模型的关键特性是整个存储器空间是线性的、序列的和连续的。
在不需要也不期望存储器管理的单一任务嵌入式应用中,线性存储器模型是合适的,这是因为它从程序员的视角提供了最简单的接口,具有对所有存储器位置的直接访问,以及最小化的设计复杂度。然而,通用计算机系统需要多任务、资源分配和保护。因此,存储器管理和地址转换通常在线性存储器模型上被实现,以便例如帮助操作系统、资源保护或多任务的功能性。存储器管理通常通过专用硬件(在CPU内部或外部)和内置于操作系统中的软件的组合来实现。处理器体系架构通常实现线性存储器模型,并且因此,在线性存储器模型上实现了高级存储器管理和保护技术。
发明内容
根据示例实施例,面向对象存储器设备包括至少一个物理存储器和硬件控制器。硬件控制器在所述面向对象存储器设备内部耦合到至少一个物理存储器,并且被配置为:(i)对从面向对象存储器设备的硬件客户端接收的面向对象消息进行解码,以及(ii)基于所接收和解码的面向对象消息,执行针对硬件客户端的动作。该面向对象消息与在至少一个物理存储器中被实例化或将要实例化的对象相关联。动作与对象关联。
硬件控制器还可以被配置成将对所接收和解码的面向对象消息的响应进行编码,将所编码的响应传输到硬件客户端。响应基于所执行的动作而被编码。
硬件控制器和至少一个物理存储器可以被集成在单个集成电路上,并且其中由硬件控制器,在面向对象存储器设备内部执行对至少一个物理存储器的访问。
至少一个物理存储器可以包括静态随机存取存储器(SRAM)存储器、动态随机存取存储器(DRAM)、非易失性随机存取存储器(NVRAM)、具有可寻址数据位置的线性阵列或其组合。然而,应当理解,至少一个物理存储器不限于SRAM、DRAM、NVRAM或其组合。
面向对象存储器设备还可以包括至少一个通信端口。硬件客户端可以被称为给定硬件客户端。给定硬件客户端可以是面向对象存储器设备的至少一个硬件客户端中的特定客户端。给定硬件客户端可以耦合到至少一个通信端口的给定通信端口。给定通信端口可以单独分配给给定硬件客户端,或者可以在给定硬件客户端和至少一个硬件客户端中的至少一个其他硬件客户端中被共享,以用于与面向对象存储器设备通信面向对象消息。给定硬件客户端可以经由总线耦合到面向对象存储器设备的给定通信端口,面向对象消息在该总线上被通信。总线可以包括两个单向流消息总线(SMBus)总线。
对象可以由对象类定义。对象可以包括至少一个数据成员和由对象类定义的至少一种方法。
面向对象存储器设备还可以包括类库(包括至少一个类定义)和方法库。方法库可以包括与至少一个类定义中的给定类定义相关联的至少一种相应方法。至少一种相应的方法可以包括用于由硬件控制器执行的相应编译代码。硬件控制器还可以被配置为:采用给定类定义,以在至少一个物理存储器中对对象进行实例化。实例化的对象可以包括至少一个相应方法的相应编译代码或到所实例化的所述对象的指针。
对象类可以是缓冲器对象类、队列对象类、堆栈对象类、或广播对象类。然而,应理解的是,对象类不限于缓冲器对象类、队列对象类、堆栈对象类、或广播对象类。
在对象类是缓冲器对象类的情况下,至少一个数据成员可以包括缓冲器,并且至少一种方法可以分别包括读取方法和写入方法,以用于读取和写入缓冲器。
在对象类是队列对象类的情况下,至少一个数据成员可以包括先进先出(FIFO)数据结构、读取指针和写入指针;并且至少一个方法可以包括推送方法和弹出方法,分别用于将数据推送到FIFO数据结构、以及从FIFO数据结构弹出数据。推送和弹出方法可以分别采用写入指针和读取指针。
在对象类是堆栈对象类的情况下,至少一个数据成员可以包括先进后出(FILO)数据结构、读取指针和写入指针;并且至少一个方法可以包括推送方法和弹出方法,分别用于将数据推送到FILO数据结构、以及从FILO数据结构弹出数据。推送和弹出方法可以分别使用写入指针和读取指针。
在对象类是广播对象类的情况下,至少一个数据成员可以包括至少一个变量,至少一种方法可以包括读取方法和写入方法,分别用于读取和写入至少一个变量的给定变量。至少一种方法还可以包括订阅方法和取消订阅方法,订阅方法用于注册以接收在给定变量的值中变化的通知,取消订阅方法用于取消注册以接收通知。
在给定变量的值发生变化的情况下,硬件控制器还可以被配置成:生成与对象相关联的面向对象通知消息,以及将生成的面向对象通知消息传输给面向对象存储器设备的订阅接收该通知的每个硬件客户端。
至少一种方法可以包括分配方法、取消分配方法、尺寸方法、写入方法、读取方法、推送方法、弹出方法、现场修改方法、复制方法、循环冗余校验(CRC)生成方法、CRC校验方法、纠错码(ECC)方法、随机化方法或以上各项的组合。然而,应当理解,所述至少一种方法不限于包括分配方法、取消分配方法、尺寸方法、写入方法、读取方法、推送方法、弹出方法、现场修改方法、复制方法、CRC生成方法、CRC校验方法、ECC方法、随机化方法或以上各项的组合。
对象可以是将要在至少一个物理存储器中被实例化的新对象,并且面向对象消息可以是声明新对象的请求。请求可以包括针对新对象的对象类,该对象类定义新对象。
所执行的动作可以包括:分配唯一句柄值,该唯一句柄值标识所声明的新对象;对包含所分配的唯一句柄值的响应进行编码;以及将所编码的响应传输到硬件客户端。
面向对象存储器设备还可以包括至少一个通信端口。硬件客户端可以被耦合到至少一个通信端口中的给定通信端口。所编码的响应可以经由给定通信端口来传输。
可以经由至少一个通信端口中的给定通信端口接收请求。编码可以包括从请求获取唯一硬件客户端标识符,或者基于给定通信端口导出唯一硬件客户端标识符,唯一硬件客户端标识符与硬件客户端相关联。编码可以包括在所编码和传输的响应中的唯一硬件客户端标识符。
面向对象消息可以是调用在对象中包括的给定方法的请求。请求可以包括对象的句柄和给定方法的方法标识符。
所执行的动作可以包括基于句柄和方法标识符,标识给定方法,以及在面向对象存储器设备内部执行所标识的给定方法。
面向对象消息可以包括至少一个参数。并且执行所标识的给定方法包括采用所包括的至少一个参数。
所标识的给定方法可以是分配方法。至少一个参数可以包括缓冲器尺寸。执行可以包括根据所包括的缓冲器尺寸,用对象缓冲器对在至少一个物理存储器中的对象进行实例化。
对象可以在至少一个物理存储器中被实例化,并且可以包括对象缓冲器。所标识的给定方法可以是取消分配方法。执行可以包括用对象缓冲器对对象进行取消实例化。
所执行的动作还可以包括:基于执行的结果对响应进行编码,以及将经编码的响应传输给硬件客户端。
结果可以是所标识和执行的给定方法是否成功完成的指示。编码可以包括:将指示包括在所编码和传输的响应中。
结果可以包括由所标识和执行的给定方法返回的数据。编码可以包括:将数据包括在所编码和传输的响应中。
可以由硬件控制器将所编码的响应经由通信端口传输给硬件客户端。
面向对象存储器设备还可以包括至少一个处理电路,并且执行可以包括采用至少一个处理电路中的给定处理电路来执行所标识的给定方法。
给定处理电路可以是算术逻辑单元(ALU)、CRC生成器、CRC校验器、ECC引擎、矩阵引擎、其他计算引擎、直接存储器存取(DMA)引擎或其组合。然而,应当理解,给定处理电路不限于ALU、CRC生成器、CRC校验器、ECC引擎、矩阵引擎、其他计算引擎、DMA引擎或其组合。
硬件控制器可以包括硬件消息接口,被配置成:(i)基于定义一组面向对象消息请求和响应及其格式的通信协议,对所接收的面向对象消息进行解码,(ii)基于通信协议生成响应,以及(iii)将生成的响应传输到硬件客户端。
所定义的面向对象消息请求和响应可以是变化的或相同长度的数据包。
硬件控制器可以包括存储器管理器,被配置为分配和释放与相应的对象类、数据成员和方法相关联的对象的至少一个物理存储器的存储器。
硬件控制器可以包括存储器管理器,被配置为对在至少一个物理存储器中的对象进行实例化欧。
存储器管理器还可以被配置为将所实例化的对象与硬件客户端的唯一硬件客户端标识符相关联。
面向对象存储器设备还可以包括类库,配置为存储对象类定义。存储器管理器还可以被配置为采用类库的给定类来在至少一个物理存储器中对对象进行实例化,给定类定义对象。
硬件控制器可以包括存储器管理器,该存储器管理器被配置成执行垃圾收集,以基于面向对象存储器设备内部的对象的非实例化来回收至少一个物理存储器的物理空间。
至少一个物理存储器可以是用于存储与多个硬件客户端相关联的对象的共享资源。硬件控制器可以被配置成对存储在共享资源中的对象实施数据隐私和保护。
与硬件客户端相关联的数据可以被包括在至少一个物理存储器中被实例化的对象中。所执行的动作可以包括经由定义对象的对象类的至少一个方法来访问针对硬件客户端的数据,并且向硬件客户端传输响应,该响应与访问的数据一起传输。
硬件客户端可以是至少一个硬件客户端中的给定硬件客户端,并且至少一个硬件客户端可以包括中央处理单元(CPU)、外围组件互连快速(PCIe)设备、以太网设备、加速器设备、数字信号处理(DSP)设备的相应硬件处理,或者它们的组合。然而,应当理解,至少一个硬件客户端不限于包括CPU、PCIe设备、以太网设备、加速器设备、DSP设备或其组合的相应硬件处理。
硬件客户端可以是硬件处理,被配置为与操作系统的堆栈交互,并且面向对象消息可以源自堆栈。
硬件客户端可以是硬件处理,被配置为采用存储在至少一个物理存储器中的数据,并且硬件控制器还可以配置为:经由对象,对在至少一个物理存储器中的针对硬件处理的数据的结构进行管理。
硬件客户端可以是硬件处理,对象可以是硬件处理所采用的私有存储缓冲器,所执行的操作可以包括访问用于硬件处理的私有存储缓冲器。
对象可以是纠错码(ECC)对象。所执行的动作可以包括采用对象,以将ECC校正应用于硬件客户端的有效载荷。有效载荷可以被包括在接收的面向对象消息中。
对象可以是先进先出(FIFO)对象。硬件控制器还可以被配置成管理指向FIFO对象的读取和写入指针(尤其是在面向对象存储器设备内部)。类似地,对象可以是后进先出(LIFO)对象。硬件控制器还可以被配置成管理指向LIFO对象的读取和写入指针(尤其是在面向对象存储器设备内部)。
硬件控制器还可以被配置为基于读取和写入指针来确定FIFO或LIFO对象的空或满状态,并且,在确定FIFO或LIFO对象已满的情况下,硬件控制器还可以被配置为经由通知消息通知来硬件客户端。
所执行的动作可以包括:将数据推送至FIFO或LIFO对象,并且更新写指针。所推送的数据可以被包括在所接收的面向对象消息中。
响应于推送针对硬件客户端的数据,硬件控制器还可以被配置为通知另一硬件客户端。
硬件控制器还可以被配置成:在从另一个硬件客户端接收到另一个面向对象消息、并且由硬件控制器响应该消息而将数据推送到FIFO或LIFO对象的情况下,通知硬件客户端。
所执行的动作可以包括从FIFO或LIFO对象弹出数据。硬件控制器还可以被配置成:返回在传输到硬件客户端的响应消息中弹出的数据,并且更新读取指针。
对象可以是堆栈对象,并且所执行的动作可以包括将嵌套线程上下文保存到针对硬件客户端的堆栈对象中,该嵌套线程上下文被包括在接收的面向对象消息中。
硬件客户端可以是第一硬件处理。对象可以是第一FIFO对象。第一FIFO对象和第二FIFO对象可以在至少一个物理存储器中被实例化。硬件控制器还可以被配置成:通过管理在面向对象存储器设备内部的第一FIFO对象和第二FIFO对象,启用第一硬件处理和第二硬件处理之间的双向通信。应当理解,这种双向通信不限于使用第一FIFO对象和第二FIFO对象来实现相同的,并且可以使用另一种类型的对象或对象类型的组合。
硬件控制器还可以配置为生成未经请求的消息,并且将该未请求消息广播到第一硬件处理和第二硬件处理。未请求的消息可以指示:第一FIFO对象和第二FIFO对象或者用于双向通信的其他类型的对象可用于在第一硬件处理和第二硬件处理之间的双向通信。
所接收的面向对象消息可以包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或其组合。然而,应当理解,消息不限于包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或其组合。
对象可以包括至少一个对象。
硬件控制器还可以被配置为将对象与元数据相关联。元数据可以包括订阅对象的硬件客户端的相应硬件客户端标识符,但是,应当理解,这样的元数据不限于此。
根据另一示例性实施例,方法包括:在面向对象存储器设备处,对从面向对象存储器设备的硬件客户端接收的面向对象消息进行解码。该方法还包括:在面向对象存储器设备内部执行动作,基于所接收和解码的面向对象消息针对硬件客户端执行动作。面向对象消息与在所述面向对象存储器设备的至少一个物理存储器中被实例化或将要被实例化的对象相关联。动作与对象关联。
结合示例面向对象设备实施例,备选方法实施例并行于上文所述的这些方法。
根据另一示例实施例,面向对象存储器设备可以包括至少一个物理存储器和硬件控制器。硬件控制器可以在面向对象存储器设备内部耦合到至少一个物理存储器,并且配置为基于面向对象消息事务与至少一个硬件客户端通信。替代基于地址数据的存储器读取和写入事务,面向对象消息事务使至少一个硬件客户端能够将数据读取和写入到至少一个物理存储器。
根据另一示例实施例,高速缓存设备可以包括至少一个物理存储器和硬件控制器。硬件控制器可以在高速缓存设备内部耦合到至少一个物理存储器,并且配置为:基于与在至少一个物理存储器中被实例化的高速缓存对象相关联的面向对象消息事务,与至少一个硬件客户端通信。硬件控制器还可以被配置成在至少一个硬件客户端中的给定硬件客户端已订阅高速缓存对象、并且该高速缓存对象已被至少一个硬件客户端中的另一个硬件客户端无效的情况下,通知该给定硬件客户端。
根据另一示例实施例,分布式高速缓存可以包括至少一个物理存储器和硬件控制器。硬件控制器可以在分布式高速缓存内耦合到至少一个物理存储器,并且配置为:基于与在至少一个物理存储器中实例化的多个高速缓存对象相关联的面向对象消息事务,与多个硬件客户端通信。硬件控制器还可以被配置为:更新在多个高速缓存对象中的数据的副本,以复制对在多个高速缓存对象中的给定高速缓存对象中的数据的给定副本所做的更改,以及向多个硬件客户端中的订阅多个高速缓存对象的相应高速缓存对象的每个硬件客户端广播更改的通知。
根据另一示例实施例,面向对象存储器设备包括至少一个物理存储器和硬件控制器,硬件控制器被配置成对至少一个物理存储器进行预处理,以创建面向对象虚拟机,虚拟机将面向对象消息处理为对所述至少一个物理存储器的的本机存储器读取和写入请求。硬件控制器包括编解码器。编解码器被配置为拦截至少一个被编码为面向对象消息的存储器读取和写入请求,并将面向对象消息解码成由所创建的虚拟机实现的相应的本机存储器读取和写入请求。
硬件控制器还被配置为:通过使用面向对象库,初始化至少一个物理存储器来预处理至少一个物理存储器,该库使预处理的至少一个经物理存储器将面向对象消息解释为本机存储器读取和写入请求,使得经预处理的至少一个物理存储器将面向对象消息处理为本机块存储器指令。
根据另一示例实施例,方法包括通过面向对象存储器设备与基于面向对象消息事务的至少一个硬件客户端通信。该面向对象存储器设备包括至少一个物理存储器。该方法还包括使至少一个硬件客户端能够基于面向对象消息事务而不是基于基于地址数据的存储器读取和写入事务,将数据读取和写入到至少一个物理存储器。
根据另一示例实施例,方法包括通过面向对象存储器设备,基于与在该面向对象存储器设备的至少一个物理存储器中被实例化的高速缓存对象相关联的面向对象消息事务,与至少一个硬件客户端通信。该方法还包括:在至少一个硬件客户端中的给定硬件客户端已订阅高速缓存对象、并且该高速缓存对象已被至少一个硬件客户端中的另一个硬件客户端无效时,通过面向对象存储器设备,通知给定硬件客户端。通知包括传输与高速缓存对象相关联的面向对象消息。
根据另一示例实施例,方法包括通过面向对象存储器设备,基于面向对象消息事务(其与在面向对象存储器设备的至少一个物理存储器中实例化的多个高速缓存对象相关联),与至少一个硬件客户端通信。该方法还包括更新在多个高速缓存对象中的数据的副本,更新包括复制对多个高速缓存对象中的给定高速缓存对象中的给定数据副本所做的更改。方法还包括向多个硬件客户端的订阅多个高速缓存对象中的相应高速缓存对象的每个硬件客户端广播更改的通知,其中该通知是与相应的高速缓存对象相关联的面向对象消息。
根据另一示例实施例,方法包括:对面向对象存储器设备的至少一个物理存储器进行预处理,以创建面向对象虚拟机,虚拟机将面向对象消息处理为对至少一个物理存储器的本机存储器读取和写入请求。方法还包括拦截至少一个被编码为面向对象消息存储器读取和写入请求,并且将该面向对象消息解码成由所创建的虚拟机实现的相应的本机存储器读取和写入请求。
方法还可以包括:通过使用面向对象库初始化至少一个物理存储器,对至少一个物理存储器进行预处理,该库使经预处理的至少一个物理存储器将面向对象消息解释为本机存储器读取和写入请求,使得经预处理至少一个物理存储器将面向对象消息处理为本机块存储器指令。
应被理解的是,本文所公开的示例实施例,可以在以下形式中被实现:方法、装置、系统或在其上实现了程序代码的计算机可读介质。
附图说明
从以下对示例实施例的更具体的描述中,上述内容将显而易见,如在附图中所图示的,其中相同的附图标记在不同视图中指代相同的部分。附图不一定按比例绘制,重点在于图示实施例。
图1A是用户与包括至少一个面向对象存储器设备的移动设备交互的示例实施例的框图。
图1B是面向对象存储器设备的示例实施例的框图。
图2是包括耦合到多个硬件客户端的面向对象存储器设备的系统的示例实施例的框图。
图3是包括耦合到多个硬件客户端的面向对象存储器设备的系统的另一示例实施例的框图。
图4是存储在面向对象存储器设备的至少一个物理存储器中的对象的示例实施例的框图。
图5是包括类库和方法库的面向对象存储器设备的示例实施例的框图。
图6是面向对象存储器设备的示例实施例的框图,该面向对象存储器设备具有在至少一个物理存储器中被实例化的先进先出(FIFO)对象、计数器对象和缓冲器对象的。
图7是具有在至少一个物理存储器中被实例化的缓冲器对象的面向对象存储器设备的示例实施例的框图。
图8是具有在至少一个物理存储器中被实例化的纠错码(ECC)对象的面向对象存储器设备的示例性实施例的框图。
图9是具有在至少一个物理存储器中被实例化的FIFO对象的面向对象存储器设备的示例实施例的框图。
图10是具有在至少一个物理存储器中被实例化的堆栈对象的面向对象存储器设备的示例实施例的框图。
图11是具有FIFO对象的面向对象存储器设备的示例性实施例的框图,该FIFO对象在至少一个物理存储器中被实例化并且用于在面向对象存储器设备的硬件客户端之间进行双向消息传递。
图12是具有在至少一个物理存储器中被实例化的通知对象的面向对象存储器设备的示例实施例的框图。
图13A是读取请求消息的示例实施例的框图。
图13B是读取响应消息的示例实施例的框图。
图14是本文公开的面向对象消息的报头和参数键值对的示例实施例的框图。
图15A是用于声明和构造对象的信令的示例实施例的信令图。
图15B是用于调用对象的写入方法的信令的示例实施例的信令图。
图15C是用于调用对象的读取方法的信令的示例实施例的信令图。
图16是采用面向对象存储器设备作为高速缓存设备的系统的示例性实施例的框图。
图17是使用面向对象存储器设备作为分布式高速缓存的系统的示例实施例的框图。
图18是面向对象存储器设备的另一示例实施例的框图。
图19是包括集中式面向对象存储器设备和多个硬件客户端的系统的示例实施例的框图。
图20是包括多个面向对象存储器设备和多个硬件客户端的系统的示例实施例的框图。
图21是面向对象存储器设备的硬件客户端的示例性实施例的框图。
图22至图29是方法的示例实施例的流程图。
图30是可选地在本文所公开的实施例中的计算机的示例内部结构的框图。
具体实施方式
以下是示例实施例的描述。
如本文所公开的,硬件客户端在本文中可互换地称为存储器客户端。硬件客户端在本文中也可以互换地称为硬件块,并且可以是独立设备、在现场可编程门阵列(FPGA)或专用集成电路(ASIC)上采用的可配置或不可配置的硬件逻辑块、或在独立设备或可配置或不可配置的硬件逻辑块上执行的硬件处理(hardware process)。可以经由地址和数据总线以及读/写信号来执行本文所公开的读取或写入指令/操作/事务。如本文所公开的,消息事务可以是单向或双向消息通信。如本文所公开的,本机指令是可以是不需要翻译以便被执行的机器代码的指令。如本文所公开的,虚拟机可以是类似于物理计算机的能够运行操作系统和应用程序的计算机系统。尽管本文中可以公开多种类型的对象、对象类和对象方法,但是应当理解,对象,对象类和对象方法不限于本文所公开的这样的类型。此外,应当理解,在存储器中被实例化的对象存在于该存储器中,即,该对象已经被分配了存储器的区域并被存储在其中。
大规模定制设计经常内部静态随机存取存储器(SRAM)支持的存储器中的特征,该存储器具有多个连接的硬件块,诸如外围组件快速互连(PCIe)硬件块、以太网硬件块、中央处理器(CPU)集群硬件块、加速器块、数字信号处理(DSP)硬件块、或采用存储器以用于执行硬件功能的任何其他硬件块。
通常,每个硬件块具有其自己的用于存储器访问的读取和写入硬件端口。硬件块执行各种不同的功能,并且存储器通常是硬件块之间的共享资源。共享存储器(诸如SRAM存储器或其他类型的存储器),通常被建模为块存储器,在本文中也可互换地称为线性存储器,即,可以被写入或读取的可寻址数据位置的线性阵列。这样,硬件块通常经由以下两种机制之一访问存储器内的数据:写入(地址,数据)或读取(地址)。硬件块通常是存储器地址空间的已分配区域,并负责管理这样的已分配区域。
块存储器模型本身不适应许多软件使用模型。例如,软件通常将数据集作为先进先出的FIFO数据结构、邮箱、队列、堆栈、关联数组或阵列等进行处理。块存储器模型将大部分针对相同数据组织的复杂性强加给硬件客户端,诸如上文所公开的硬件块,或强加给可以直接与存储器接口的其他硬件客户端。这样,存储器的硬件客户端通常采用存储器管理。这既效率低下又容易出错,因为每个硬件客户端都会重复这种在一些情况下可能很复杂的存储器管理。
块/线性存储器设备通常不提供固有的数据保密性或保护。因此,当用作共享资源时,意外数据损坏的风险可能很大。例如,如果处理超出了其被分配的数据范围,则它可以静默破坏被分配给另一处理的无关存储器区域中的数据。例如,在发布其中可能发生这种数据损坏的产品之前,通常很难标识这种静默损坏,并且通常很难调试这种静默损坏。静默存储器损坏的弱点已广为人知,并且在很大程度上是在包含共享存储器资源的系统内精心制定存储器保护机制的原因。
共享传统的块/线性存储器的硬件客户端具有限定它们的存储器空间的相应指派范围的相应的下限和上限,并且被期望自我管理它们的被存储在其中的相应的数据。硬件客户端还被期望自我检查它们未在其相应指派范围之外的区域中操作。这样,硬件客户端可以具有:上层,用于实现关于存储在它们的相应分配范围中的数据的“感兴趣的”功能;以及下层,用于管理存储器中该数据的结构。
例如,两个硬件客户端可以具有生产者-消费者关系,并且可以通过块/线性存储器中的共享的先进先出(FIFO)数据结构来传递数据。在这样的示例中,生产者的“感兴趣的”功能是将数据推送到FIFO数据结构,而消费者的“感兴趣的”功能是将数据从FIFO数据结构中弹出。但是,两个硬件客户端都需要管理FIFO数据结构本身(诸如通过管理对该FIFO数据结构的读取/写入指针,计算差异以确定FIFO数据结构是空还是已满)、计算FIFO数据结构的下一个偏移量等等。
块/线性存储器不提供共同结构或机制,其可用于使这种硬件客户端能够专注于它们相应的“感兴趣的”功能。由于不存在用于使能这种硬件客户端的共同结构或机制,因此硬件客户端要承担实现数据结构层管理的负担,这又导致硬件客户端处的代码重复以及在每个硬件客户端处增加数据结构层的设计和验证的工作量。
本文所公开的新型存储器设备的示例实施例使数据的使用(the use of data)与存储器中数据的结构去耦合,并减轻了硬件客户端实现数据结构管理的负担,从而减少了在硬件客户端中的每个硬件客户端处的占用空间(例如,逻辑门的数目),并避免了每个硬件客户端处进行数据结构层的设计和验证。根据示例实施例,新型存储器设备基于硬件级别的面向对象机制,并且在本文中被称为面向对象存储器设备。
根据示例实施例,可以将由数据和(多个)方法定义的对象存储在诸如SRAM或任何其他类型的物理存储器之类的物理存储器中,并且减轻硬件客户端管理用来存储该数据和方法的存储器的结构的负担。与读取和写入地址/数据类型的事务相反,面向对象存储器设备与硬件客户端(在本文中也可互换地称为存储器客户端)之间的接口基于面向对象消息事务。这样,面向对象存储器设备自然地与存储器的软件使用保持一致,在该存储器内部,由类定义的对象被存储并且由软件进程使用。这种面向对象存储器设备可以用于采用存储器的任何系统中,诸如下文所公开的图1A的移动设备。然而,应当理解,本文所公开的面向对象存储器设备的示例实施例不限于移动设备。
图1A是用户与移动设备95进行交互的示例实施例的框图,移动设备95包括至少一个面向对象存储器设备(诸如下文进一步公开的图1B的面向对象存储器设备110)。至少一个面向对象存储器设备自然地与存储器的软件使用保持一致,在该存储器中,由类(class)定义的对象被存储并由硬件控制器采用,该硬件控制器在至少一个面向对象存储器设备上执行使得移动设备95的性能能够相对于采用线性/块存储器类型的(多个)设备的另一移动设备有所改进。
面向对象存储器设备的示例实施例使得能够将面向对象编程(OOP)的丰富功能扩展下降到硬件级别。OOP几十年来一直是软件领域的支柱,并且已经成为规模、稳定性和生产率的推动者。根据示例实施例,下文表1中所公开的OOP的主要原理适用于面向对象存储器设备的示例实施例。
Figure BDA0002608793150000161
表格1
存储器中对象的概念当前被保留给上层客户端和软件。然而,如下文进一步公开的,面向对象存储器设备的示例实施例使得硬件客户端能够通过内置功能来声明对象、构造对象、以及与该对象进行交互,该对象被存储在面向对象存储器设备上。
根据示例实施例,硬件客户端可以通过依赖于面向对象存储器设备的集中式“智能”来避免复杂的存储器管理,与典型的存储器设备不同,面向对象存储器设备的示例实施例是对象感知的(object aware)。面向对象存储器设备的示例实施例基于面向对象存储器(OOMem)模型。
在OOMem模型中,对象是由类定义的,包括数据和(多个)方法,并由对象句柄(handle)/指针(pointer)引用。如本文所公开的,到对象的句柄是该对象的唯一标识符,并且可以是整数、指针或可以唯一地标识对象的任何其他标识符。代替经由地址和数据总线执行的读取和写入事务,基于OOMem模型的面向对象存储器设备与硬件客户端交互,该硬件客户端基于可在消息总线上传输的基于消息的事务。OOMem模型可以定义“API”,“API”是消息传递接口,在该接口中,消息以对象的方法为目标或通过对象的方法而被生成。下文所公开的表2是示例OOMem消息和对应描述的列表。然而,应当理解,本文所公开的面向对象消息不限于下文表2的OOMem消息。
消息 描述
句柄请求 请求针对<类>(<class>)的新对象的句柄
句柄响应 利用<句柄>(<handle>)进行响应.
对象方法请求 针对具有<句柄>的对象,请求<方法>
对象方法响应 来自对象<句柄>的<方法>的响应
表格2
下文参考图1B,公开了基于面向对象存储器(OOMem)模型的面向对象存储器设备的示例实施例。
图1B是面向对象存储器设备110的示例实施例的框图100。面向对象存储器设备110包括至少一个物理存储器102和硬件控制器104。硬件控制器104在面向对象存储器设备110的内部耦合到至少一个物理存储器102,并被配置为:(i)解码从面向对象存储器设备110的硬件客户端108接收的面向对象消息106,并且(ii)基于已接收和已解码的面向对象消息106执行用于硬件客户端108的动作(未示出)。面向对象消息106与在至少一个物理存储器102中被实例化或将要被实例化的对象112相关联。动作与对象112相关联。
硬件控制器104还可以被配置为对已接收和已解码的面向对象消息106的响应114进行编码,并将编码后的响应114传输给硬件客户端108。编码后的响应114可以基于所执行的动作。然而,应当理解,响应114是可选的。应当理解,从面向对象存储器设备110到硬件客户端108的通信不限于诸如可选响应114之类的响应,并且可以例如包括如下文进一步公开的异步通知。可以在采用存储器的任何系统中采用面向对象存储器设备110。例如,面向对象存储器设备110可以被采用在基于处理器的系统中,诸如上文所公开的图1A的移动设备95、个人计算机(PC)、以太网交换机、存储系统或采用存储器的任何其他系统。
面向对象存储器设备110可以是独立设备,或者可以被实现为现场可编程门阵列(FPGA)或专用集成电路(ASIC)的一部分。硬件控制器104和至少一个物理存储器102可以被集成在单个集成电路(未示出)上,其中对至少一个物理存储器102的访问在面向对象存储器设备110内部由硬件控制器104执行。至少一个物理存储器102可以包括静态随机存取存储器(SRAM)存储器、动态随机存取存储器(DRAM)、非易失性随机存取存储器(NVRAM)、具有可寻址数据位置的线性阵列、或其组合。然而应理解,至少一个物理存储器102不限于SRAM、DRAM、NVRAM、或其组合。
面向对象消息106可以包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数(argument)列表或其组合,诸如下文关于图14进一步公开的。然而应理解,面向对象消息106不限于包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或其组合。对象112可以包括至少一个其他对象(未示出)。硬件控制器104还可以被配置为将对象112与元数据相关联。元数据可以包括订阅该对象112的硬件客户端的相应硬件客户端标识符,但是应当理解,这样的元数据不限于此。
在图1B的示例实施例中,面向对象存储器设备110包括通信端口116。硬件客户端108经由消息总线118(在本文中也称为硬件通信接口)耦合到面向对象存储器设备110,通过该总线,诸如面向对象消息106和响应114之类的面向对象消息被传达。硬件控制器104经由第一内部总线111耦合至通信端口116,并且经由第二内部总线113耦合至至少一个物理存储器102。
第一内部总线111使硬件控制器能够经由通信端口116分别接收面向对象消息106并传输响应114。第二内部总线113由硬件控制器104采用以执行写入操作105,从而将由写入操作105指定的数据(未示出)存储在被指定为写入操作105的一部分的地址(未示出)处。硬件控制器104还采用第二内部总线113来执行读取操作107,以读取被存储在至少一个物理存储器102的地址(未示出)处的数据(未示出)。该地址被指定为读取操作107的一部分。
硬件客户端108可以是经由消息总线118耦合到面向对象存储器设备110的至少一个硬件客户端中的给定硬件客户端,在该消息总线118上,诸如面向对象消息106和响应114之类的面向对象消息被传达。通信端口116可以仅分配给硬件客户端108(诸如下文参考图3进一步公开的),或者可以在硬件客户端108和用于与面向对象存储器设备110进行面向对象消息通信的至少一个其他硬件客户端之间被共享。例如,硬件客户端108可以是多个硬件客户端中的给定硬件客户端,该多个硬件客户端诸如是如下所述的共享通信端口的图2的多个硬件客户端208。
图2是系统200的示例实施例的框图,系统200包括耦合到多个硬件客户端208的面向对象存储器设备210。参照图1B和图2,图1B的硬件客户端108可以用作多个硬件客户端208中的给定硬件客户端。硬件客户端108可以是外围组件快速互连(PCIe)设备208a、以太网设备208b、中央处理单元(CPU)集群208c、加速器设备208d、数字信号处理(DSP)设备208e、或其他硬件客户端208n的硬件处理。应当理解,多个硬件客户端208不限于包括CPU集群、PCIe设备、以太网设备、加速器设备、DSP设备、或其组合的硬件处理。此外,应当理解,设备可以是独立设备,或例如在FPGA或ASIC中采用的可配置或不可配置的硬件逻辑块。
在图2的示例实施例中,面向对象设备210包括硬件控制器204,该硬件控制器在面向对象存储器设备210内部耦合到至少一个物理存储器202。至少一个物理存储器202可以是共享资源,其用于存储与多个硬件客户端208中的相应硬件客户端相关联的对象(诸如对象212a-m)。硬件控制器204可以被配置为实施被存储在共享资源中的对象212a-m的数据保密和保护,并缓解相应的硬件客户端执行相同操作的问题。如下文进一步公开的,对象212a-m由相应的对象类定义。
硬件控制器204还耦合到第一通信端口216a。多个硬件客户端208经由两个单向流消息总线(SMBus)总线(即,第一SMBus 218a和第二SMBus 218b)耦合到面向对象存储器设备110,在这两个单向流消息总线上,面向对象消息请求206和面向对象消息响应214可以分别被传达。由于第一通信端口216a经由两个单向流消息总线SMBus总线和第二通信端口216b而被耦合到多个硬件客户端208,所以面向对象消息请求206可以包括指定面向对象消息请求206的源的多个硬件客户端208中的给定硬件客户端的唯一标识符。类似地,面向对象消息响应214可以利用将接收面向对象消息响应214的给定硬件客户端的唯一标识符而被编码。备选地,面向对象消息响应214可以不被编码为包括给定硬件客户端的唯一标识符,并且因此可以被传达给多个硬件客户端208。
应该理解的是,多个硬件客户端208不需要共享用于与面向对象存储器设备210传达面向对象消息的通信端口。例如,面向对象存储器设备210可以包括多个通信端口,其一部分可以是共享的或不共享的,诸如下文关于图3所公开的。
图3是系统300的另一示例实施例的框图,该系统300包括面向对象存储器设备310。在图3的示例实施例中,多个硬件客户端,即PCIe设备308a、以太网设备308b、CPU集群308c、加速器设备308d、DSP设备308e、和其他硬件客户端308n耦合到相应的通信端口,即通信端口316a、316b、316c、316d、316e、和316n,诸如图3中所公开的,这些通信接口各自可以单独地被分配给耦合到其的相应硬件客户端。备选地,通信端口316a-n的一部分可以是共享的或不共享的。在消息总线上,即在消息总线318a、318b、318c、318d、318e和318n上传达的面向对象消息可能不会被编码为包括硬件客户端的相应唯一标识符,因为如果通信端口不被共享,则这样的标识符可能基于传输或接收相同消息的相应通信端口来确定。
返回参考图1B,对象112可以是在至少一个物理存储器102中要被实例化的新对象,并且面向对象消息106可以是声明新对象的请求。该请求可以包括用于新对象的对象类,该对象类定义了该新对象,诸如下文关于图4进一步公开的。所执行的动作可以包括:分配标识所声明的新对象的唯一句柄值(未示出);对包括所分配的唯一句柄值的响应进行编码;以及将编码后的响应(即,响应114)传输给硬件客户端108。经由通信端口116传输编码后的响应114。
经由通信端口116接收请求,即,面向对象消息106,该通信端口116是至少一个通信端口中的给定通信端口。编码可以包括:从请求(即从面向对象消息106)获得唯一的硬件客户端标识符(未示出),或者基于给定通信端口(即通信端口116)推导唯一的硬件客户端标识符,诸如上文关于图2所公开的。编码可以包括在编码后和已传输的响应114中的唯一硬件客户端标识符。
面向对象消息106可以是:在至少一个物理存储器102中已经被实例化的对象112的情况下,调用被包括在对象112中的给定方法(未示出)的请求。请求可以包括针对对象112的句柄(未示出)和给定方法的方法标识符(未示出)。所执行的动作可以包括:基于句柄和方法标识符来标识给定方法;以及在面向对象存储设备110内部执行所标识的给定方法。这样的执行可以由硬件控制器104执行。
面向对象消息106可以包括至少一个参数(未示出)。执行所标识的给定方法可以包括采用所包括的至少一个参数。所标识的给定方法可以是分配方法(未示出)。至少一个参数可以包括缓冲器大小(未示出)。执行可以包括:根据所包括的缓冲器大小,利用对象缓冲器(未示出)在至少一个物理存储器102中实例化对象112。在这样的实例化之后,可以传输随后的面向对象消息。基于相同方法所标识的给定方法可以是解除分配方法。这样,执行可以包括:利用对象缓冲器取消实例化对象112。
所执行的动作还可以包括:基于执行的结果(未示出)对响应114进行编码,并且将编码后的响应114传输给硬件客户端108。该结果可以是所标识的给定方法是否被成功地执行并完成的指示(未示出)。编码可以包括:在被编码和被传输的响应114中包括指示。结果可以包括响应于执行由所标识的给定方法返回的数据(未示出)。编码可以包括:在被编码和被传输的响应114中包括数据。编码后的响应114可以由硬件控制器104经由给定通信端口(即,通信端口116)而被传输给硬件客户端108。
面向对象存储器设备110还可以包括至少一个处理电路(未示出)。执行可以包括采用至少一个处理电路中的给定处理电路(未示出)来执行所标识的给定方法。给定处理电路可以是ALU(未示出)、CRC生成器(未示出)、CRC校验器(未示出)、ECC引擎(未示出)、矩阵引擎(未示出)、其他计算引擎(未示出)、DMA引擎(未显示)、或其组合。然而,应理解,给定处理电路不限于ALU、CRC生成器、CRC校验器、ECC引擎、矩阵引擎、其他计算引擎、DMA引擎、或其组合。
硬件控制器104可以包括:硬件消息传递接口(未示出),其被配置为基于通信协议(未示出)来解码面向对象消息106,该通信协议定义了一组面向对象消息请求(未示出)、响应(未示出)及其格式(未示出)。硬件控制器104还可以被配置为基于通信协议来生成响应114,并且将所生成的响应114传输给硬件客户端108。所定义的面向对象消息请求和响应可以是长度不同或相同的分组。
硬件控制器104可以包括存储器管理器(未示出),该存储器管理器被配置为在至少一个物理存储器102中实例化对象112。存储器管理器还可以被配置为将已实例化的对象112与硬件客户端108的唯一的硬件客户端标识符相关联。唯一的硬件客户端标识符可以从面向对象消息106获得或基于接收该消息的通信端口116而推导出。存储器管理器还可以被配置为:针对与相应的对象类、数据成员和方法相关联的对象,分配和解除分配至少一个物理存储器102中的存储器,诸如下文关于图4所公开的。
图4是被存储在面向对象存储器设备的至少一个物理存储器402中的对象412的示例实施例的框图,面向对象存储器设备诸如上文分别关于图1B、图2和图3所公开的面向对象存储器设备110、面向对象存储器设备210、面向对象存储器设备310、或本文所公开的任何其他面向对象存储器设备。对象412由对象类420定义。对象412包括至少一个数据成员422和至少一种方法424,如对象类420所定义的。对象类420可以是缓冲器对象类、队列对象类、堆栈对象类、或广播对象类。然而,应当理解,对象类不限于此。
在对象类420是缓冲器对象类的情况下,至少一个数据成员422可以包括缓冲器,并且至少一种方法424可以包括分别用于读取和写入缓冲器的读取方法和写入方法,诸如下文关于图6和图7进一步公开的。
在对象类420是队列对象类的情况下,至少一个数据成员422可以包括先进先出(FIFO)数据结构、读取指针和写入指针;至少一种方法424可以包括推送方法和弹出方法,用于分别将数据推送到FIFO数据结构和将数据从FIFO数据结构中弹出,诸如下文关于图6和图9进一步公开的。推送方法和弹出方法可以分别采用写入和读取指针。
在对象类420是堆栈对象类的情况下,至少一个数据成员422可以包括先进后出(FILO)数据结构、读取指针和写入指针;至少一种方法424可以包括推送方法和弹出方法,用于分别将数据推送到FILO数据结构和将数据从FILO数据结构中弹出,诸如下文关于图10进一步公开的。推送和弹出方法可以分别采用写入和读取指针。
在对象类420是广播对象类的情况下,至少一个数据成员422可以包括至少一个变量(未示出),至少一种方法424可以包括用于读取和写入至少一个变量的给定变量的读取方法和写入方法。至少一种方法424还可以包括:订阅方法,用于注册以接收给定变量的值改变的通知;和取消订阅方法,用于撤销注册以接收该通知。
在给定变量的值改变的情况下,诸如以上公开的图1的硬件控制器104、或本文公开的其他硬件控制器之类的硬件控制器还可以被配置为:生成与对象412相关联的面向对象通知消息(未示出),并将所生成的面向对象通知消息传输给面向对象存储器设备的订阅以接收通知的每个硬件客户端,诸如下文关于图12进一步公开的。
继续参照图4,至少一种方法424可以包括分配方法、解除分配方法、尺寸方法(size method)、写入方法、读取方法、推送方法、弹出方法、现场修改方法,复制方法、循环冗余校验(CRC)生成方法、CRC校验方法、纠错码(ECC)方法、随机化方法、或其组合。然而,应当理解,至少一种方法不限于此。可以在包括在面向对象存储器设备中的类库中定义对象类420,类库诸如以下关于图5公开的面向对象存储器设备510的类库526。
图5是包括类库526和方法库530的面向对象存储器设备510的示例实施例的框图。面向对象存储器设备510包括由内部总线513耦合的至少一个物理存储器502和硬件控制器504。内部总线513由硬件控制器504用来执行写入操作505,以将由写入操作505指定的数据(未示出)存储在被指定为写入操作505的一部分的地址(未示出)处。内部总线513还被硬件控制器504用来执行读取操作507,以读取被存储在至少一个物理存储器502的地址(未示出)处的数据(未示出)。该地址被指定为读取操作507的一部分。
面向对象存储器设备510可以被实现为分别在上文公开的图1、图2和图3的面向对象存储器设备110、面向对象存储器设备210、或面向对象存储器设备310、或本文公开的另一面向对象存储器设备。类库526包括至少一个类定义520。方法库530包括与至少一个类定义520中的给定类定义520′相关联的至少一种相应方法524。至少一种相应方法524可以包括相应编译代码528,以供硬件控制器504或对其的指针(未示出)执行。
硬件控制器504还可以被配置为:采用给定类定义520'来在至少一个物理存储器502中实例化对象512。被实例化的对象512可以包括至少一种相应的方法524或其指针的相应编译代码528。根据示例实施例,面向对象存储器设备510可以包括非易失性存储器(未示出),诸如只读存储器(ROM)或其他类型的非易失性存储器,并且类库526和方法库530可以被存储在非易失性存储器中。
如上所述,面向对象存储器设备510可以被实现为以上公开的图1B的面向对象存储器设备110。参考图1B和图5,硬件控制器104可以包括存储器管理器(未示出)。面向对象存储器设备110还可以包括类库,诸如上文公开的图5的类库526,该类库被配置为存储对象类定义。存储器管理器还可以被配置为采用类库526的给定类定义520'在至少一个物理存储器102中实例化对象112。给定类定义520'定义对象112。
根据示例实施例,存储器管理器还可以被配置为:响应于面向对象存储器设备110内部的对象的未实例化,执行垃圾收集以回收至少一个物理存储器102的物理空间。这样的垃圾收集可以作为由存储器管理器执行的后台任务(未示出)的一部分被执行,或者响应于可以由硬件控制器504经由面向对象存储器设备110的管理端口(未示出)接收的命令(未示出),而被执行。
根据示例实施例,如果对象112在至少一个物理存储器102中被实例化,则与硬件客户端108相关联的数据(未示出)可以被包括在该对象112中。所执行的动作可以包括:经由定义对象112的对象类的至少一种方法,访问针对硬件客户端108的数据,该方法诸如以上关于图5公开的给定类定义520'的至少一种相应方法524。
返回参考图1B,所执行的动作还可以包括将响应114传输给硬件客户端108,其中将响应114与响应114中包含的被访问的数据一起传输。根据示例实施例,硬件客户端108可以是硬件处理(未示出),其被配置为与硬件客户端108的操作系统的堆栈(未示出)交互。面向对象消息106可以来源于该堆栈。因为面向对象存储器设备110被配置为解释面向对象消息,所以减轻了硬件客户端108进行如下操作的负担:将该面向对象消息转换为与至少一个物理存储器102交互的读取和写入事务、管理与该面向对象消息相关的数据的数据结构,并且通过采用面向对象存储器设备110而不是采用非对象感知的块/线性存储器设备,可以提高硬件客户端108的性能。
根据示例实施例,硬件处理可以被配置为采用被存储在至少一个物理存储器102中的数据(未示出),并且硬件控制器102还可以被配置为:经由对象112,管理在至少一个物理存储器102中的用于硬件处理的数据的结构。对象112可以是可以由硬件处理(即,硬件客户端108)采用的私有存储缓冲器,诸如在下文公开的图6中的对象-3612c。所执行的动作可以包括访问针对硬件处理的私有存储缓冲器,诸如下文关于图6公开的。
图6是具有被存储在至少一个物理存储器602中的先进先出(FIFO)对象612a(即,对象-1)、计数器对象612b(即,对象-2)和缓冲器对象612c(即对象-3)的面向对象存储器设备610的框图。应当理解,被存储在至少一个物理存储器602中的对象不限于FIFO对象、计数器对象、缓冲器对象、或其组合。面向对象存储器设备610可以被实现诸如上文分别关于图1B、图2和图3所公开的面向对象存储器设备110、面向对象存储器设备210、或面向对象存储器设备310、或本文所公开的其他面向对象存储器设备。
在图6的示例实施例中,FIFO对象612a包括FIFO数据成员622a、推送方法624a-1和弹出方法624a-2。计数器对象612b包括计数器数据成员622b、递增方法624b-1和递减方法624b-2。缓冲器对象612c包括缓冲器数据成员622c、写入方法624c-1和读取方法624c-2。面向对象请求消息606可以由硬件客户端608a、硬件客户端608b或硬件客户端608n中的给定硬件客户端传输,以调用在至少一个物理存储器602中被实例化的相应对象的方法。
在给定硬件客户端与相应对象相关联的情况下,面向对象存储器设备610的硬件控制器(未示出)可以依次执行经由面向对象请求消息606所调用的方法,并且这样的执行可以操纵相应对象的相应数据成员的数据。例如,面向对象请求消息606可以是对FIFO对象612a的推送方法624a-1的调用,并且可以包括针对该对象的数据。通过执行可以将数据推送到FIFO数据成员622a的推送方法624a-1,硬件控制器可以将数据推送到FIFO对象612a。面向对象请求消息606可以是对FIFO对象612a的弹出方法624a-2的调用。通过执行可以从FIFO数据成员622a弹出数据的弹出方法624a-2,硬件控制器可以从FIFO对象612a弹出数据,并经由面向对象响应消息614将其返回给硬件客户端。
面向对象请求消息606可以是对计数器对象612b的递增方法624b-1或递减方法624b-2的调用。硬件控制器可以分别通过执行递增方法624b-1或递减方法624b-2来递增或递减计数器数据成员622b的计数器值,并且可以可选地经由面向对象响应消息614将这样执行的状态返回给硬件客户端。该状态例如可以指示成功、计数器下溢、计数器溢出(counter overflow)或与该执行有关的任何其他状态。
面向对象请求消息606可以是对写入方法624c-1的调用并且可以指定针对其的数据,或者可以是对缓冲器对象612c的读取方法624c-2的调用。硬件控制器可以分别通过执行写入方法624c-1或读取方法624c-2来写入或读取缓冲器区数据成员622c的数据值,并且可以可选地经由面向对象响应消息614将这样执行的结果返回给硬件客户端。例如,结果可能是由读取方法624c-2返回的数据值、或者可能指示成功/失败或其他结果。根据示例实施例,缓冲器对象612c可以用作针对硬件客户端的私有缓冲器,诸如下文关于图7所公开的。
图7是面向对象存储器设备710的示例实施例的框图,面向对象存储器设备710具有在至少一个物理存储器702中实例化的缓冲器对象712。缓冲器对象712包括缓冲器数据成员722、写入方法724-1和读取方法724-2。缓冲器对象712可以是由诸如硬件客户端708之类的硬件处理所采用的私有存储缓冲器。诸如上文公开的图1B的硬件控制器104之类的硬件控制器被包括在面向对象存储器设备710中,并且响应于从硬件处理接收到面向对象消息706(例如,调用),可以执行动作,该动作可以包括访问针对硬件处理的私有存储缓冲器。
例如,硬件处理可以是需要私有存储缓冲器的单个处理,私有存储缓冲器诸如仅与硬件处理有关的一小块存储器,并且缓冲器内部的数据格式仅对于该硬件处理是已知的。期望该处理将随意存储和取回数据,这样,缓冲器对象712包括写入方法724-1和读取方法724-2,其可以由硬件客户端708经由面向对象消息706调用并由硬件控制器执行。附加的操作可能包括归零缓冲器区、用于读取-修改-写入数据的基本ALU操作、用于还原XOR以生成奇偶校验的分析功能等。
由于硬件客户端708或其他硬件客户端(未示出)的缓冲器大小要求可以变化,可以针对尺寸来对定义缓冲器对象712的缓冲器类(未示出)进行参量化。缓冲器对象的方法,诸如写入方法724-1、读取方法724-2、或可以返回包括在响应714内的成功/失败的指示的另一方法(例如,返回方法)。这样的方法可以采用参数,并且与参数相关联的值可以包括在面向对象消息706中。
返回参考图1B,诸如硬件客户端108之类的硬件处理可以被配置为:在实现流水线操作时,校验和/或校正给定有效载荷中的数据。这通常看起来像单个位奇偶校验(简单XOR)、循环冗余校验(CRC)码或纠错码(ECC)奇偶校验。根据示例实施例,对象112可以是纠错码ECC对象,诸如下文公开的图8的ECC对象812。
图8是具有在至少一个物理存储器802中实例化的ECC对象812的面向对象存储器设备810的示例实施例的框图。ECC对象812包括:多个数据成员,即,数据822-1和奇偶校验822-2;以及多种方法,即写入方法824-1、CRC校验方法824-2和读取方法824-3。响应于接收到面向对象消息806,面向对象存储器设备810的硬件控制器(未示出)可以执行动作(该动作包括:采用ECC对象812以对有效载荷(未示出)应用ECC校正),并且可以基于这种ECC校正的执行而返回响应814。有效载荷可以包括在接收的面向对象消息806中。
返回参考图1B,根据示例实施例,对象112可以是先进先出(FIFO)对象。硬件控制器104还可以被配置为:在面向对象存储器设备110内部,排外地管理到FIFO对象的读取指针(未示出)和写入指针(未示出)。硬件控制器104还可以被配置为:基于读取指针和写入指针,确定针对FIFO对象的空状态(未示出)或满状态(未示出),并且在确定FIFO对象为满状态的情况下,硬件控制器104还可以被配置为:经由通知消息(未示出)来通知硬件客户端108,该通知消息经由消息总线118被传输给硬件客户端108。
所执行的动作可以包括将数据推送到FIFO对象并更新写入指针。所推送的数据可以被包括在所接收的面向对象消息106中。硬件控制器104还可以被配置为:响应于推送用于硬件客户端108的数据,通知另一硬件客户端(未示出)。硬件控制器104还可以被配置为:在另一面向对象消息(未示出)被接收自另一硬件客户端(未示出)的情况下,通知硬件客户端108,并且响应于此,通过硬件控制器104,将数据推送到FIFO对象。
所执行的动作可以包括从FIFO对象弹出数据。硬件控制器104还可以被配置为:以被传输给硬件客户端108的诸如响应114之类的响应消息,返回所弹出的数据,并且硬件控制器104还可以被配置为更新读取指针。下文关于图9公开了使用FIFO对象的示例实施例。
图9是具有在至少一个物理存储器902中实例化的FIFO对象912的面向对象存储器设备910的示例实施例的框图。FIFO对象912是先进先出类型的对象,与诸如下文公开的图10的堆栈对象1012之类的后进先出(LIFO)类型的对象相反。图9的FIFO对象912可以包括:至少一个数据成员,即数据922;以及多种方法,即推送方法924-1和弹出方法924-2。在示例实施例中,生产者处理908a可以通过传输一系列面向对象消息(包括面向对象消息906)来将一系列固定大小的数据项推送到FIFO对象912,一系列面向对象消息可能是用于调用推送方法924–1的请求。
由生产者处理908a推送的这样的数据项可以被存储在FIFO对象912的至少一个数据成员922中,并由诸如消费者处理908b之类的另一处理所消耗。消费者处理908b可以通过传输一系列面向对象消息(包括面向对象消息906b)来消费数据项,该一系列面向对象消息可能是对调用弹出方法924-2的请求,并且这样的数据项可以经由面向对象响应(诸如响应914b)被返回给消费者处理908b。FIFO对象912可以包括用于自动计算任何指针并管理空和满场景的方法。
FIFO对象912还可以被配置为基于FIFO对象活动为生产者处理908a或消费者处理908b生成中断(interrupt),并且这样的中断可以作为从硬件控制器(未示出)传输到生产者处理908a或消费者处理908b的面向对象消息被传达。根据示例实施例,在推送至满的类型场景或从空中弹出的类型场景中,FIFO对象912可以失败或停顿(阻止)。可以将这种失败作为面向对象消息被传达,该面向对象消息由硬件控制器传输给生产者处理908a、消费者处理908b或其组合。这样的面向对象消息可以包括到FIFO对象912的句柄以及失败类型的指示。
返回参考图1B所示,对象112可以是堆栈对象,诸如下文参考图10公开的堆栈对象。
图10是具有在至少一个物理存储器1002中实例化的堆栈对象1012的面向对象存储器设备1010的示例实施例的框图。根据示例实施例,堆栈对象是LIFO类型的对象。堆栈对象1012包括:至少一个数据成员,即数据1022;以及多种方法,即推送方法1024-1和弹出方法1024-2。应当理解,堆栈对象1012可以包括附加方法,诸如用于从缓冲器对象(诸如从以上关于图7公开的缓冲器对象712)中取回数据1022的当前深度或填充该数据1022的方法,或者将数据1022复制到另一对象,诸如复制到缓冲器区对象712。
继续参照图10,根据示例实施例,由面向对象存储器设备1010的硬件控制器(未示出)执行的动作可以基于已接收和已解码的面向对象消息1006,并且这样的动作可以包括将嵌套线程上下文(未示出)保存到针对硬件客户端1008的堆栈对象1012。嵌套线程上下文可以被包含在接收的面向对象消息1006中,也可以被存储在数据1022中。堆栈对象1012可以包含推送方法1024–1,其可以由硬件控制器采用以存储嵌套线程上下文。响应1014可以是包括堆栈对象1012的句柄(未示出)的面向对象消息,并且可以返回嵌套线程上下文的可以由硬件控制器经由弹出方法1024-2而取回的至少一部分。与上文公开的图9的FIFO对象912或下文公开的图11的FIFO对象所采用的顺序相反,硬件控制器可以以先进后出(FILO)顺序保存/取回嵌套线程上下文。
图11是具有FIFO对象的面向对象存储器设备1110的示例实施例的框图,FIFO对象在至少一个物理存储器1102中被实例化,并且用于在面向对象存储器设备1110的硬件客户端(即第一硬件客户端1108a和第二硬件客户端1108b)之间进行双向消息传递。FIFO对象包括第一FIFO对象1112a和第二FIFO对象1112b。上面公开了硬件控制器(未示出)面向对象存储设备1110(如图1B的硬件控制器104)还可以被配置成:通过在面向对象存储器设备1110内部管理第一FIFO对象1112a和第二FIFO对象1112b,启用在第一硬件客户端1108a与第二硬件客户端1108b之间的双向通信。
硬件控制器可以被配置成:生成未经请求的消息(未示出),并且将该未经请求的消息广播到第一硬件客户端1108a和第二硬件客户端1108b。该未经请求的消息可以指示:第一FIFO 1112a和第二FIFO1112b可用于在第一硬件客户端1108a与第二硬件客户端1108b之间的双向通信。
第一FIFO对象1112a可用于在从第一硬件客户端1108a到第二硬件客户端1108b的方向上的通信。第一硬件客户端1108a可以传输由面向对象存储器设备1110的硬件控制器(未示出)接收和解码的面向对象消息1106a。硬件控制器可以对接收的面向对象消息1106a进行解码,并且通过调用第一FIFO对象1112a的推送方法(未示出)来执行针对硬件客户端1108的动作,以将从第一硬件客户端1108a接收的数据推送到第一FIFO对象1112a。硬件控制器可以生成到第二硬件客户端1108b的中断(interrupt),该中断可以是传输到第二硬件客户端1108b的面向对象消息1114b。
第二硬件客户端1108b可以服务于中断(该中断作为面向对象消息1114b被传输),以及利用到第一FIFO对象1112a的句柄以及用于调用第一FIFO对象1112a的弹出方法(popmethod)的请求,而将面向对象消息1106b传输到面向对象存储器设备1110。硬件控制器可以执行弹出方法,并且将数据从第一FIFO对象1112a返回到第二硬件客户端1108b,由此将消息从第一硬件客户端1108a传递到第二硬件客户端1108b。
同样,硬件控制器可以对从第二硬件客户端1108b接收的面向对象消息1106b进行解码,并且通过调用第二FIFO对象1112b的推送方法(未示出)来执行针对第二硬件客户端1108b的动作,以将从第二硬件客户端1108b接收的数据推送到第二FIFO对象1112b,并且可以生成到第二硬件客户端1108b的中断,该中断可以是被传输到第一硬件客户端1108a的面向对象消息1114a。
第一硬件客户端1108a可以服务于中断(该中断作为面向对象消息1114a而被传输),以及利用到第二FIFO对象1112b的句柄以及用于调用第二FIFO对象1112b的弹出方法的请求而将面向对象消息1106a传输到面向对象存储设备1110。硬件控制器可以执行弹出方法,并且将数据从第二FIFO对象1112b返回到第二硬件客户端1108b,由此将消息从第二硬件客户端1108b传递到第一硬件客户端1108a。
根据示例实施例,在FIFO中的条目可以是其他“消息”对象的句柄,这些对象包括用于在硬件客户端之间通信的数据。根据另一示例实施例,FIFO(即第一FIFO对象1112a或第二FIFO对象1112b)中的任一个可以包括快速归零/清空这样的用于回收消息对象的方法。
图12是具有通知对象1212的面向对象存储器设备1210的示例实施例的框图,该通知对象在至少一个物理存储器1202中被实例化并且可以由面向对象存储设备1210的硬件客户端用于彼此警报。例如,在示例实施例中,主处理1208a可以使用通知对象1212,以向订阅者处理1208b广播通知,该订阅者处理可以是分别订阅通知对象1212的多个订阅者处理。
通知对象1212包括至少一个数据成员,即数据1222,以及多个方法,即订阅方法1224-1和写入方法1224-2。通过利用到通知对象1212的句柄(未示出)以及对订阅者方法1224–1的调用而将面向对象消息1206b传输到面向对象存储器设备1210,订阅者处理1208可以订阅从主处理1208a接收的警报。
类似地,通过利用到通知对象1212的句柄(未示出)和对通知对象1212的取消订阅方法(未示出)的调用而将面向对象消息1206b传输到面向对象存储器设备1210,订阅者处理1208可以取消这种警报的订阅。主处理1208a可以经由面向对象消息1214a收到这种取消订阅。
通过利用对写入方法1224–2的调用来传输面向对象消息1206a,主处理1208a可以生成警报,而写入方法1224–2转而又可以导致面向对象存储器设备1210的硬件控制器执行该操作,并且经由面向对象消息1214b向订阅者处理1208b传输中断。这样,通知对象1212可以由诸如主处理1208a的硬件处理所采用,从而以“敲钟”式中断的形式或可以被通信给订阅者处理1208b的消息的其它形式,来警告订阅者处理1208b。这种通知可以包括处理标识符(PID),以唯一地标识源处理和目标处理。订阅方法1224–1的参数可以包括标识订阅处理的对应PID。通知/中断可以作为未经请求的读取响应/返回面向对象消息而进行通信。
如上文关于图1B所公开的,OOMem模型可以定义“API”,“API”是消息传递接口,其中消息以对象112的方法为目标,或由对象112的方法来产生该消息。根据示例实施例,用于创建对象112的消息事务的示例集合包括面向对象消息106,该消息可以是来自硬件客户端108的请求,其中硬件客户端108请求处理创建给定类<class>的对象112。面向对象存储器设备110可以利用响应114来回应,该响应114可以包括<handle>值。硬件客户端108可以传输后续的面向对象消息106,该消息是<handle>.分配(<size>)的方法请求,以利用<size>的缓冲器对对象进行实例化,面向对象存储器设备110可以利用响应114来响应该对象,该响应114可以指示状态=成功(status=success)。
在这样的对象实例化之后,可以使用对象112。例如,硬件客户端108可以经由对<句柄>.写入_缓冲器(<偏移>,<数据>)(<handle>.write_buffer(<offset>,<data>))的方法请求进行写入,并且继而,面向对象存储器设备110可以将数据存储在至少一个物理存储器102中,并且用状态=成功(status=success)来进行响应。另一硬件客户端(未示出)可以经由对<句柄>.读取_缓冲器(<偏移>)(<handle>.read_buffer(<offset>))的方法进行读取,并且继而,面向对象存储器设备110可以传输具有<数据>(<data>)的响应。如上所公开的,对象112由对象类定义。下面的表格3是一些对象类的列表的示例实施例;但是,应该理解的是,对象类不限于下面表3中的对象类。
描述
缓冲器 简单读取/写入缓冲器,非常类似于线性块存储器。
队列 具有内部指针的FIFO。推送至后方。从前方弹出。
堆栈 类似于队列,但是由FILO代替FIFO。
广播 多个客户端可以订阅该广播以接收数据值的更新。
表格3.示例对象类
此外,如上所述,对象类为对象定义了至少一个方法。下面的表格4是一些对象方法的列表的示例实施例;但是,应该理解的是,对象方法不限于表4中的对象方法。
Figure BDA0002608793150000341
Figure BDA0002608793150000351
表格4
参照图1B,面向对象存储器设备110包括至少一个物理存储器102和硬件控制器104。硬件控制器104在面向对象存储器设备110内部耦合到至少一个物理存储器102,并且被配置成:基于面向对象消息事务(诸如面向对象消息106和响应114),与至少一个硬件客户端(即硬件客户端108)通信。替代基于地址数据的存储器读取和写入事务,面向对象消息事务使得至少一个硬件客户端108能够将数据读取和写入到至少一个物理存储器102。
根据示例性实施例,在硬件客户端108与面向对象存储设备110之间交换的面向对象消息可以是多种类型的,包括请求、响应和通知类型。可以同时有多个未完成请求。出于性能的考虑,可以由面向对象存储器设备110无序地处理这些请求。
根据示例实施例,请求类型的面向对象消息是方法调用。这样的请求包括方法运行所需的字段。下面的表格5是面向对象消息的字段列表的示例实施例。然而,应当理解,上文公开的诸如图1B的面向对象消息106的面向对象消息的字段不限于下面表格5的字段。
Figure BDA0002608793150000352
Figure BDA0002608793150000361
表格5
根据示例实施例,可以响应于方法返回、并且可以对应于特定的请求而生成面向对象消息响应。下面的表格6是面向对象消息响应的字段列表的示例实施例。然而,应当理解,诸如上文公开的图1B的面向对象消息响应114的面向对象消息响应的字段不限于下面表格6的字段。
字段 描述
消息类型 与请求相同
处理ID 与请求相同
处理标记 与请求相同
对象ID 与请求相同
方法ID 与请求相同
离开值 指示请求是否成功完成或发生了其他情况。
参数列表 特定于每个方法的参数的列表和意义。
表格6
通知类型的面向对象消息可以作为具有上下文的中断(interrupt)。这样的通知可以显示为未经请求的响应,并且使得面向对象存储器设备110能够向硬件客户端自愿提供信息。例如,当FIFO对象912已被配置为允许在它们之间的通信时,上面公开的图9的生产者和消费者处理可以各自获得通知。通知类型的面向对象消息的格式可以与响应类型的面向对象消息的格式相同,唯一的差异是在消息类型字段中使用的值。
根据示例实施例,至少一个物理存储器102可以具有在面向对象存储器设备通电后在其中被实例化的至少一个对象,并且在没有硬件客户端请求的情况下,通过硬件控制器104可以对至少一个对象进行实例化。由硬件控制器104自动实例化的这种默认对象在这里可以称为“管理对象”,并且这种对象具有唯一方法,该方法可以用于声明要在面向对象存储器设备110中被实例化的所有其他对象。这样的管理对象会实施针对消息的“对象.方法”通信范式。根据示例实施例,管理对象构造静态的和由面向对象存储设备110自我管理的其他对象。
根据示例实施例,用于FIFO声明的伪码可以包括:
#使用管理对象以创建FIFO类的新对象。
#任何处理可以做到这点
fifo_obj=admin_obj.declare(C_FIFO)
但是,为了简洁起见,在上面的伪码中跳过了错误校验等。此外,应当理解,这里呈现的伪码是示例性的,并且是非限制性的。
根据示例实施例,对象声明可以创建针对对象112的句柄,但不分配资源或数据空间。下一步是构造对象112,向它馈送可能需要被构建的任何因数参数。下面是该伪代码的示例实施例:1
#利用任何合理的因数来构造对象。
fifo_obj.construct(size=1024)
假设生产者处理和消费者处理准备就绪、并且等待其各自的中断/通知以开始运行,那么它们与FIFO对象(如上面公开的图9的FIFO对象912)的运行时交互可能如下所示:
#在ProcP循环中的某处……
if(!fifo_obj.is_full())
fifo_obj.push(data=XYZ)
#Somewhere in a ProcC loop...
if(!fifo_obj.is_empty())
data=fifo_obj.pop()
当然,运行交互会有更多细节,尤其是在流量控制方面(FIFO为空或满)。应该理解,确切的运行交互流取决于对象类及其用例。下面公开的是类的示例实施例。
类–C_NULL
根据示例实施例,面向对象存储器设备110可以包括基本类(未扩展),该基本类可以用于所有其他对象类,但不可以被实例化。这样的基本类在本文中可以被称为C_NULL,并且可以被包括在类库中(例如上面公开的图5的类库526)。
C_NULL–特性
根据示例实施例,特性可以被命名为经由.set_prop()方法和.get_prop()方法访问的整数值。它们可以在构造期间被分配给针对.construct()的相应的默认值或覆盖参数。除非本文另有说明,特性可以经由.set_prop()修改。表格7包括类特性的示例实施例。
Figure BDA0002608793150000381
表格7
C_NULL–数据
没有针对该类的数据。
C_NULL-方法
注意:调用/请求(call/request)和返回/响应(return/response)二者的方法参数都被格式化为键值对,如下面的表格8所公开的。符号“arg_foo”意味着“key_foo=value_foo”。这种格式允许以任意顺序将参数传递给方法或从方法传递出,并且仍然可以被正确地标识。这反过来又提供了省略针对较短消息的参数(使用默认值)的能力,以及在将来添加新参数选项而不破坏向后兼容性的能力。
Figure BDA0002608793150000382
Figure BDA0002608793150000391
表格8
C_NULL–参数
注意:大多数参数都将具有默认值,并且因此是可选的。为“-”的默认值表示“不关心”,其中该值被忽略或不可选,如在下面的表格9中所指示的。
参数 默认 描述
arg_class - 类特性
表格9
类–C_ADMIN
扩展C_NULL。面向对象存储器设备有一个已构造的C_ADMIN类的对象。这是实用对象,并且可以被限制为每个面向对象存储器设备的单一实例(即,不能声明另一个)。
C_ADMIN–特性
Figure BDA0002608793150000392
表格10
C_ADMIN–Data
没有针对该类的数据。
C_ADMIN–方法
Figure BDA0002608793150000393
表格11
C_ADMIN–参数
参数 默认 描述
arg_num_objects - num_objects特性。请求至被忽略。
arg_handle - .declare()方法的返回值。
表格12
类–C_BYTES
扩展C_NULL。这是针对使用打包列表的字节作为主数据的对象的基本类。
C_BYTES-特性
特性 默认 描述
num_bytes 64 在bytes[]数据中字节的数目
length 0 到/来自bytes[]的访问的长度(字节)
write_offset 0 针对下一写访问的默认偏移
read_offset 0 针对下一读访问的默认偏移
表格13
C_BYTES-数据
Figure BDA0002608793150000401
表格14
C_BYTES-方法
Figure BDA0002608793150000402
Figure BDA0002608793150000411
表格15
根据示例实施例,当在arg_bytes[]中的字节数目与arg_length不匹配时,行为可以如下所示:
-arg_length<length(arg_bytes[])->内部中断arg_bytes[]以匹配arg_length
-arg_length>length(arg_bytes[])->内部零扩展arg_bytes[]以匹配arg_length
注意:越界请求(例如arg_offset+arg_length>=num_bytes)将导致错误响应,而不会更新内部参数或数据。换句话说,这里的界限是严格执行的。
C_BYTES–参数
Figure BDA0002608793150000412
Figure BDA0002608793150000421
表格16
类-C_FIFO
从C_BYTES扩展。C_FIFO类是简单先入先出缓冲器。
注意:预期的用例假设该类的对象将被构造成具有所期望的arg_length,以便该参数是预先定义的,并且在推送/弹出请求中被省略。
C_FIFO–特性
特性 默认 描述
num_valid 0 只读。在FIFO中填充/有效的字节数目。
is_empty 1 只读。is_empty=(num_valid==0)
is_full 0 只读。is_full=(num_valid==num_bytes)
表格17
C_FIFO–数据
与母类相同。
C_FIFO–方法
Figure BDA0002608793150000422
表格18
注意:C_FIFO将bytes[]视为循环队列。这意味着当偏移量将超过num_bytes-1时,偏移量将自动“换行(wrap)”到较低的值。
C_FIFO–参数
参数 默认 描述
arg_num_valid - num_valid特性。请求值被忽略。
arg_is_emtpy - is_empty特性。请求值被忽略。
arg_is_full - is_full特性。请求值被忽略。
表格19
如上文关于图1B所公开的,对与面向对象存储器设备110交换的面向对象消息进行编码。下面公开了相同的示例。
图13A是读取请求消息1306的示例实施例的框图。读取请求消息1306被格式化为参数列表,并且参数被格式化为键值对。
图13B是读取响应消息1314的示例实施例的框图。读取请求消息1314被格式化为参数列表,并且参数被格式化为键值对。
根据示例实施例,消息字段可以是固定尺寸的。参数键值对也可以是固定尺寸;但是,列表的长度可以是无限的。因此,对于面向对象存储器设备来说,在多个周期(即,流式总线)上传输消息可能是线效率高的。
表格20(下方)是字段编码的示例实施例。
Figure BDA0002608793150000431
Figure BDA0002608793150000441
表格20
注意,由于不存在针对反射(reflect)/传递(pass-through)的请求标记,所以在通知消息中的ptag可以被设置为零。
图14是本文公开的面向对象消息的报头1432和参数键值对1434的示例实施例的框图。在示例实施例中,报头1432和参数键值对1434二者都是40比特宽的,并且按照公开的方式进行分组。然而,应当理解,报头1432和参数键值对1434不限于40比特宽,并且不限于如图14所公开的那样被分组。下面公开的表21包括报头1432的消息类型(mtype)1434的示例实施例。
Figure BDA0002608793150000442
表格21
表格22(在下方公开),包括报头1432的离开值(exit value,eval)1436的示例实施例。
Figure BDA0002608793150000443
Figure BDA0002608793150000451
表格22
在报头1432中的处理ID(pid)1438可以是数字源/目标处理标识符的二进制编码;但是,应该理解,pid 1438不限于二进制编码。根据示例实施例,pid值0可以表示“默认/管理处理”。面向对象存储器设备可以将该处理作为尚未具有连接的处理的目标。例如,参照上文公开的图1B,如果硬件控制器104在至少一个物理存储器102中检测到不可纠正的错误,并且根据示例实施例,这可能是在面向对象存储器设备110外部运行的固件应当处理相同的错误的指示。
处理标记(ptag)1440可以是允许处理将响应与请求相关联的数字值。对象ID(oid)1442可以是数字对象句柄/指针的二进制编码,其中管理对象可以与oid==0相关联。但是,应该理解,与管理对象相关联的oid 1442可以有与0不同的另一个值。
下面的表23是与枚举成员相关联的方法ID(mid)1444值列表的示例实施例。然而,应当理解的是,mid 1444枚举成员和相关联的值不限于如下表23中所公开的。
Figure BDA0002608793150000452
Figure BDA0002608793150000461
表格23
下面的表格24是参数键值对1434的参数键(argkey)1446的枚举成员和相关值的列表的示例实施例。然而,应当理解的是,argkey1446并不局限于此。
Figure BDA0002608793150000462
表格24
根据示例实施例,参数键值对1434的参数值(argval)1448可以取决于参数类型(例如,类ID或特性值)。当将要通信的值与argval宽度(例如,属性)匹配时,只需argkey->argval的一个循环即可工作。当通信的值(例如,16比特对象句柄)比argval宽度窄时,则未使用的argval比特可以设置为0(零扩展)。当所通信的值大于argval宽度时,则所通信的值可在多个总线周期上分散。在这种情况下,相同类型的多个参数可以按升序(由小至大)顺序进行通信。
例如,对于将64B数据(0xFEDC_BA98_7654_3210)写入至C_BYTES对象的偏移0xFACE的情况,请求消息周期可以如下面的表25所公开的那样。然而,应该理解的是,请求消息周期并不限于相同的。
Figure BDA0002608793150000471
表格25
其他消息编码
根据示例实施例,类参数可以是8比特枚举类型,其编码如下表26所公开的。然而,应当理解,类参数不限于8比特或下面表格26的编码。
Figure BDA0002608793150000472
表格26
4.2.2数字
下面的表格27是示例实施例,列出了若干特性和参数值,这些特性和参数值本质上是数字。然而,应当理解,本文公开的特性和参数值不限于所列出的特性和参数值。
Figure BDA0002608793150000481
表格27
接口
如上面关于图2所公开的,处理块(即,硬件客户端)和面向对象存储器设备210可以由两个单向流消息总线耦合,即,第一SMBus总线218a和第二SMBus总线218b。根据示例实施例,这种流式消息总线可以作为简单的点到点比特导体,具有最小的消息结束(EOM)分隔符。根据示例实施例,总线信号可以如在下面的表格28中所公开的那样。然而,应当理解,总线信号不限于此。
Figure BDA0002608793150000482
Figure BDA0002608793150000491
表格28
端口和协议
根据示例实施例,面向对象存储器设备和硬件客户端的对应通信端口可以是对称的。下面的表格29公开了关于相同的示例的细节。然而,应当理解的是,关于此类通信端口的细节不限于下文表29中公开的那些。
端口 I/O 类型 注释
rst in 1-bit 重置。异步断言和同步反断言。
clk in 1-bit 时钟。正边是活动边。
rx in SMBus 针对入站消息的接收总线。
tx out SMBus 针对出站消息的传输总线。
表格29
图15A是上面公开的用于声明和构造C_BYTES类的对象的信令的示例实施例的信令图1580。例如,这样的信令可以通过上面公开的图1B的消息总线118,在硬件客户端108与面向对象存储器设备110之间发生。图15A的信令图1580包括:时钟信号(即clk 1581a)、接收有效信号(即,rx.valid 1582a)、接收消息结束信号(receive end-of-message signal,即,rx.eom 1583a)、接收数据信号(即,rx.data 1584a)、传输有效信号(即,tx.valid1585a)、传输消息结束信号(transmit end-of-message signal,即,tx.eom 1586a),和传输数据信号(即,tx.data 1587a)。
在图15A的示例实施例中,rx.valid 1582a、rx.eom 1583a和rx.data 1584a信号由硬件客户端(例如图1B的硬件客户端108或本文公开的任何其他硬件客户端)驱动。rx.valid 1582a、rx.eom 1583a和rx.data 1584a信号根据clk 1581a信号的上升或下降沿转换。硬件客户端驱动rx.valid 1582a信号,以在由rx.data 1584a信号驱动的面向对象消息请求的数据有效时,指示到面向对象存储器设备(诸如上文所公开的图1B的面向对象存储器设备110、或本文公开的任何其他面向对象存储器设备)。rx.eom 1583a被硬件客户端采用以提供针对面向对象消息请求的消息结束指示器。
tx.valid 1585a、tx.eom 1586a、和tx.data 1587a信号由面向对象存储器设备驱动。tx.valid 1585a、tx.eom 1586a、和tx.data 1587a信号根据clk 1581a信号的上升或下降沿转换。面向对象存储器设备驱动tx.valid 1585a信号,以在由tx.data 1587a信号驱动的面向对象消息响应的数据有效时,指示到硬件客户端。tx.eom 1586a被面向对象存储器设备采用以提供针对面向对象消息响应的消息结束指示符。
图15B是用于调用C_BYTES类的对象的写入方法,以写入64比特项(例如C_BYTES.write())的信令示例实施例的信令图1588。图15B的信令图1588包括:时钟信号(即,clk 1581b)、接收有效信号(即,rx.valid 1582b)、接收消息结束信号(即,rx.eom1583b)、接收数据信号(即,rx.data 1584b)、传输有效信号(即,tx.valid 1585b)、传输消息结束信号(即,tx.eom 1586b),和传输数据信号(即,tx.data 1587b)。
在图15B的示例实施例中,rx.valid 1582b、rx.eom 1583b和rx.data 1584b信号由硬件客户端驱动。rx.valid 1582b、rx.eom 1583b和rx.data 1584b信号根据clk 1581b信号的上升或下降沿转换。硬件客户端驱动rx.valid 1582b信号,以在由rx.data 1584b信号驱动的面向对象消息请求的数据有效时,指示到面向对象存储器设备。rx.eom 1583b被硬件客户端采用以提供针对面向对象消息请求的消息结束指示器。
tx.valid 1585b、tx.eom 1586b和tx.data 1587b信号由面向对象存储器设备驱动。tx.valid 1585b、tx.eom 1586b和tx.data 1587b信号根据clk 1581b信号的上升或下降沿进行转换。面向对象存储器设备驱动tx.valid 1585b信号,以在由tx.data 1587b信号驱动的面向对象消息响应的数据有效时,指示到硬件客户端。tx.eom 1586b被面向对象存储器设备采用以提供针对面向对象消息响应的消息结束指示符。
图15C是信令示例实施例的信令图1590,该信令用于调用C_BYTES类的对象的读取方法来读取经写入的64比特项(例如C_BYTES.read())。图15C的信令图1590包括:时钟信号(即,clk 1581c)、接收有效信号(即,rx.valid 1582c)、接收消息结束信号(即,rx.eom1583c)、接收数据信号(即,rx.data 1584c)、传输有效信号(即,tx.valid 1585c)、传输消息结束信号(即,tx.eom 1586c),和传输数据信号(即,tx.data 1587c)。
在图15C的示例实施例中,rx.valid 1582c、rx.eom 1583c和rx.data 1584c信号由硬件客户端驱动。rx.valid 1582c、rx.eom 1583c和rx.data 1584c信号根据clk 1581c信号的上升或下降沿转换。硬件客户端驱动rx.valid 1582c信号,以在由rx.data 1584c信号驱动的面向对象消息请求的数据有效时,指示到面向对象存储器设备。rx.eom 1583c被硬件客户端采用以提供针对面向对象消息请求的消息结束指示器。
tx.valid 1585c、tx.eom 1586c和tx.data 1587c信号由面向对象存储器设备驱动。tx.valid 1585c、tx.eom 1586c和tx.data 1587c信号根据clk 1581c信号的上升或下降沿进行转换。面向对象存储器设备驱动tx.valid 1585c信号,以在由tx.data 1587c信号驱动的面向对象消息响应的数据有效时,指示到硬件客户端。tx.eom 1586c被面向对象存储器设备采用以提供针对面向对象消息响应的消息结束指示符。
应该理解。上面公开的图15A至图15C是可以在硬件客户端和面向对象存储器设备(诸如,上面公开的图1B的硬件客户端108和面向对象存储器设备110)之间发生的信令的示例。然而,在硬件客户端与面向对象存储器设备之间的通信不限于此。回到图1B,面向对象存储器设备110可以用于各种使用情况,诸如,用于上面公开的在硬件客户端与其他使用之间的双向消息传递,并且可以用作高速缓存设备,诸如下面公开的图16的高速缓存设备1610。
图16是使用面向对象存储器设备作为高速缓存设备1610的系统1600的示例性实施例的框图。高速缓存设备1610包括至少一个物理存储器1602和硬件控制器1604。硬件控制器1604在高速缓存设备1610内部耦合到至少一个物理存储器1602,并且配置为:基于与在至少一个物理存储器1602中被实例化的高速缓存对象1612相关联的面向对象消息事务1609,与至少一个硬件客户端1608通信。硬件控制器1604还可以被配置成在至少一个硬件客户端1608中的给定硬件客户端1608a已订阅高速缓存对象1612,并且高速缓存对象1612已经被至少一个硬件客户端1608的另一个硬件客户端1608n无效的情况下,通知该给定硬件客户端1608a。
在图16的示例性实施例中,硬件控制器1604经由第一内部总线1611耦合到通信端口1616,并且经由第二内部总线1613耦合到至少一个物理存储器1602。第一内部总线1611使得硬件控制器1604能够基于面向对象消息事务1609、经由通信端口1616,与至少一个硬件客户端1608通信。第二内部总线1613由硬件控制器1604采用以用于执行写入操作(未示出),以将由写入操作指定的数据(未示出)存储在由写入操作指定的地址(未示出)处。第二内部总线1613还由硬件控制器1604采用以用于执行读取操作(未示出),以读取存储在至少一个物理存储器1602的地址(未示出)处的数据(未示出)。应当理解,通信端口1616可以是单个共享通信端口或者可以是多个通信端口,多个通信端口可以分别专用于特定硬件客户端,或者可以包括共享通信端口的子集。
除了被用作上面公开的图16的高速缓存设备1610之外,本文公开的面向对象存储器设备可以被用作分布式缓存,诸如下面公开的图17的分布式缓存1710。
图17是将面向对象存储器设备用作分布式高速缓存1710的系统1700的示例实施例的框图。分布式高速缓存1710包括至少一个物理存储器1702和硬件控制器1704。硬件控制器1704在分布式高速缓存1710内部耦合到至少一个物理存储器1702,并且配置成:基于与在至少一个物理存储器1702中被实例化的多个高速缓存对象1712相关联的面向对象消息事务1709,与多个硬件客户端1708通信。硬件控制器1704还被配置为:更新在多个高速缓存对象1712中的数据1791-n的副本,以复制对多个高速缓存对象1712中的给定缓存对象1712-1中的数据1791-1的给定副本所做的更改,并向多个硬件客户端1708中的订阅多个高速缓存对象1712中的相应缓存对象的每个硬件客户端广播该更改的通知1792。
在图17的示例实施例中,硬件控制器1704经由第一内部总线1711耦合到通信端口1716,并且经由第二内部总线1713耦合到至少一个物理存储器1702。第一内部总线1711使得硬件控制器1704能够基于面向对象消息事务1709、经由通信端口1716,与多个硬件客户端1708通信。第二内部总线1713由硬件控制器1704采用以用于执行写入操作(未示出),以将由写入操作指定的数据(未示出)存储在由写入操作指定的地址(未示出)处。第二内部总线1713还由硬件控制器1704用于执行读取操作(未示出),以读取存储在至少一个物理存储器1702的地址(未示出)处的数据(未示出)。应当理解,通信端口1716可以是单个共享通信端口,或者可以是多个通信端口,多个通信端口可以分别专用于特定硬件客户端,或者可以包括共享通信端口的子集。
根据示例实施例,硬件控制器1704可以包括面向对象消息编码器或解码器(编解码器)(未示出),由硬件控制器1704可以使用该编码器或解码器,对作为面向对象消息事务1709一部分而通信的面向对象消息进行编码或解码。这样的编解码器可以被包括在本文公开的面向对象存储器设备的硬件控制器中,诸如下面公开的图18的面向对象存储器设备1810、或本文公开的另一个面向对象存储器设备。
图18是面向对象存储器设备1810的另一示例实施例的框图。面向对象存储器设备1810包括至少一个物理存储器1802和硬件控制器1804,硬件控制器1804被配置成预处理至少一个物理存储器1802,以创建面向对象虚拟机1894,虚拟机1894将面向对象消息1806处理为对至少一个物理存储器1802的本机存储器读取和写入请求。硬件控制器1804包括编解码器1807(CODEC)。编解码器1807被配置成拦截被编码为面向对象消息1806的面向对象消息的至少一个存储器读取和写入请求,并将该面向对象消息解码为将由所创建的虚拟机1894实现的相应本机存储器读取或写入请求。
硬件控制器1804还可以被配置为:通过使用面向对象库(未示出)初始化至少一个物理存储器1802,来预处理至少一个物理存储器1802,该面向对象库使至少一个经预处理的物理存储器1802将面向对象消息1806解释为本机存储器读取和写入请求,使得经预处理的至少一个物理存储器1802将面向对象消息1806处理为本机块存储器指令,即本机存储器读取和写入指令。预处理至少一个物理存储器1802可以包括自动实例化管理性(即,管理)对象(未示出),例如上面公开的管理对象。面向对象库可以包括要由硬件控制器1804执行的预编译指令。这样的预编译指令可以用在至少一个物理存储器1802中被实例化的对象中,例如下面公开的在图19的至少一个物理存储器1902中被实例化的对象1912。
图19是包括集中式面向对象存储器设备1910和多个硬件客户端1908的系统1900的示例实施例的框图。集中式面向对象存储器设备1910可以理解为“集中式”,这是因为它是多个硬件客户端1908的中心的面向对象存储器设备,因为多个硬件客户端1908的每个硬件客户端经由相应的消息接口(未示出)(例如上面公开的图1B的消息总线118)耦合到该集中式面向对象存储器设备1910。集中式面向对象存储器设备1910可以经由在其中被实例化的至少一个对象(例如对象1912)来控制多个硬件客户端1908之中的硬件客户端间通信1903。
在图19的示例实施例中,多个硬件客户端1908被配置成经由面向对象消息事务1909a……1909n直接与集中式面向对象存储器设备1910通信。集中式面向对象存储器设备1910基于面向对象消息事务1909和1909n,实施在多个硬件客户端1908之中的硬件客户端间通信1903。
集中式面向对象存储器设备1910包括至少一个物理存储器1902。多个对象(未示出)可以在至少一个物理存储器1902中被实例化。多个对象的每个对象可以由相应的对象类定义。每个对象可以包括至少一个相应的数据成员和至少一个相应的方法(如上面关于图4所公开的由各个对象类所定义的)。
至少一个物理存储器1912可以具有在其中被实例化的至少一个对象(例如对象1912)。至少一个对象与相应的对象类相关联,并且包括由相应对象类定义的至少一个相应的数据成员和至少一个相应方法(如上文关于图4所公开的)。集中式面向对象存储器设备1910可以被配置为使用至少一个对象来实施硬件客户端间通信1903。
一对先进先出(FIFO)对象(未示出)可以在至少一个物理存储器1902中被实例化,如上面关于图11所公开的。集中式面向对象存储器设备1910可以被配置成使用一对FIFO对象来实施硬件客户端间通信1903。然而,应当理解,集中式面向对象存储器设备1910可以使用(多个)其他对象来实施这样的硬件客户端间通信1903,并且不限于使用一对FIFO对象来实施相同的操作。
集中式面向对象存储器设备1910包括硬件控制器1904。硬件控制器1904可以被配置成通过管理面向对象存储器设备1910内部的FIFO对象对,来启用在第一硬件客户端1908a与多个硬件客户端(例如第n硬件客户端1908n)的第二硬件客户端之间的双向通信。
面向对象消息事务1909a……1909n可以包括与FIFO对象对的句柄(未示出)相关联的未经请求的消息(未示出)。硬件控制器1910还可以配置为生成未经请求的消息,并且将所生成的未请求消息广播到第一和第二硬件客户端。未经请求的消息可以指示该对FIFO可用于双向通信。
集中式面向对象存储器设备1910可以被配置为使用一对FIFO对象中的第一FIFO对象(未示出)来实施从多个硬件客户端1908的第一硬件客户端1908a到在多个硬件客户端1908中的第二硬件客户端(例如第n硬件客户端1908n)的通信。集中式面向对象存储器设备1910还可以配置为使用FIFO对象对中的第二FIFO对象(未示出)来实施从第二硬件客户端到第一硬件客户端1908a的通信。
面向对象消息事务1909a……1909n可以包括由第一硬件客户端1908a传输到集中式面向对象存储器设备1910的第一面向对象消息(未示出),以及由集中面向对象存储器设备1910传输到第二硬件客户端的第二面向对象消息(未示出)。
硬件控制器1904可以被配置成解码第一面向对象消息,并且执行第一FIFO对象的推送方法(未示出),以推送从第一硬件客户端1908a接收的数据(未示出)。数据可以被包括在第一面向对象消息中。第一FIFO对象和推送方法可以在第一面向对象消息中被标识。硬件控制器1904还可以被配置成通过向第二硬件客户端传输第二面向对象消息来生成到第二硬件客户端的中断(未示出)。该中断可以向第二硬件客户端通知来自第一硬件客户端1908a的硬件客户端间消息(未示出)。该数据可以表示硬件客户端间消息。
面向对象消息事务1909a……1909n可以包括第三面向对象消息(未示出),其由第二硬件客户端响应于服务中断(其作为第二面向对象消息传输)而传输到集中式面向对象存储器设备1910。面向对象消息事务1909a……1909n可以包括第四面向对象消息(未示出)。第三面向对象消息可以是调用弹出方法(未示出)的请求,并且可以包括第一FIFO对象的句柄(未示出)。硬件控制器1904还可以被配置为执行第一FIFO对象的弹出方法,并且经由第四面向对象消息,将由所执行的弹出方法返回的数据传输到第二硬件客户端,从而将硬件间客户端消息从第一硬件客户端传递到第二硬件客户端。
硬件控制器1904可以被配置为解码第二面向对象消息,并且执行第二FIFO对象的推送方法(未示出),以推送从第二硬件客户端接收的数据。数据可以被包括在第二面向对象消息中。第二FIFO对象和推送方法可以在第二面向对象消息中被标识。硬件控制器1904还可以被配置成通过向第一硬件客户端传输第一面向对象消息来生成到第一硬件客户端1908a的中断(未示出)。中断可以向第一硬件客户端1908a通知来自第二硬件客户端的硬件客户端间消息。数据可以表示硬件客户端间消息。第三面向对象消息可以:响应于服务于作为第一面向对象消息而传输的中断,由第一硬件客户端1908a传输到集中式面向对象存储器设备1910。
第三面向对象消息可以是调用弹出方法(未示出)的请求,并且可以包括到第二FIFO对象的句柄(未示出)。硬件控制器1904还可以被配置成执行第二FIFO对象的弹出方法,并且经由第四面向对象消息,将由所执行的弹出方法返回的数据传输到第一硬件客户端1908a,从而将硬件客户端间消息从第二硬件客户端传递到第一硬件客户端。
因此,可以使用上面公开的诸如图9的面向对象存储器设备1910的面向对象存储器设备,或者可以使用本文公开的其他面向对象存储器设备来“解决”附加的处理块(例如本文公开的任何硬件客户端)的处理间通信。然而,将所有通信的处理块附加到单个集中的面向对象存储器设备上,在物理上可能并不实际。因此,可以采用多个面向对象存储器设备的分布式布置。
以这样的布置,硬件客户端可以“认为”它们是直接附接的,但是物理上附接到本地面向对象存储器设备节点/区域。根据示例实施例,面向对象存储器设备可以采用一种方法来确定面向对象存储器设备是本地的还是远程的。这种指示可以表示为在处理标识符或对象标识符中的区域指示嵌入器。本地面向对象存储器设备节点/区域可以被配置为处理多个面向对象存储器设备的底层网络需求。因此,本文公开的面向对象存储器设备的示例实施例可以包括“后端”接口,该接口包括如下的给定通信端口,其被配置为与至少一个其他面向对象存储器设备进行节点间通信(即,在多个面向对象存储器设备之间的通信),本文称为面向对象存储器设备间通信,例如下面进一步公开的图20的面向对象存储器设备间通信2052。
图20是包括多个面向对象存储器设备2010和多个硬件客户端2008的系统2000的示例实施例的框图。多个面向对象存储器设备2020能够进行面向对象存储器设备间通信2052。在图20的示例实施例中,多个硬件客户端2008的每个硬件客户端被配置为:经由面向对象消息事务,直接与多个面向对象存储器设备2010的相应面向对象存储器设备通信。
例如,多个面向对象存储器设备2020的第一硬件客户端2008a和第n硬件客户端2008n被配置成分别直接与多个面向对象存储器设备2010中的第一面向对象存储器设备2010a和第n面向对象存储设备2010n通信。面向对象存储器设备间通信2052基于面向对象消息事务2009a和2009n在多个硬件客户端2008中实施硬件客户端间通信2003。下面根据图21公开了这种硬件客户端的示例实施例。
图21是面向对象存储器设备2110的硬件客户端2108的示例实施例的框图。在图21的示例实施例中,面向对象存储器设备2110包括通信端口2116。经由消息总线2118(在本文中也称为硬件通信接口),硬件客户端2108被耦合到面向对象存储器设备2110,在消息总线2118上,诸如面向对象消息2106的面向对象消息被通信。消息总线2118耦合到面向对象存储器设备2110的通信端口2116。
面向对象存储器设备2110包括硬件控制器2104,硬件控制器2104经由第一内部总线2111耦合到通信端口2116,并且经由第二内部总线2113耦合到至少一个物理存储器2102。
第一内部总线2111使硬件控制器2104能够接收面向对象消息2106,并且可选地经由通信端口2116传输响应(未示出)。第二内部总线2113由硬件控制器2104采用以用于执行写入操作2105,以将由写入操作2105指定的数据(未示出)存储在指定为写入操作2105的一部分的地址(未示出)处。第二内部总线2113还由硬件控制器2104采用以用于执行读取操作2107,以读取存储在至少一个物理存储器22102的地址(未示出)处的数据(未示出)。该地址被指定为读取操作2107的一部分。
在图21的示例实施例中,硬件客户端2108被配置成生成与对象类2120的对象2112相关联的面向对象消息2106。硬件客户端2108可以包括用于生成该面向对象消息2106的编码器(未示出),并且可以包括用于解码从面向对象存储器设备2110接收的面向对象消息的解码器(未示出)。
如上所述,面向对象消息2106与对象类2120的对象2112相关联。对象类2120包括至少一个数据成员2122和至少一个方法2124。硬件客户端2108还被配置成经由硬件通信接口(即,将硬件客户端2108耦合到面向对象存储器设备2110的消息总线2118)将所生成的面向对象消息2106传输到面向对象存储器设备2110。根据对象类2120,对象2112被实例化或将被实例化在面向对象存储器设备2102的至少一个物理存储器2102中。至少一个方法2124使得面向对象存储器设备2110能够访问用于硬件客户端2108的至少一个数据成员2122。
如上面关于图14所公开的,面向对象消息2106可以包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或它们的组合。如上面关于图2公开的,硬件客户端2108可以是中央处理单元(CPU)、外围组件互连快速(PCIe)设备、以太网设备、加速器设备或数字信号处理(DSP)设备。如上文关于图2公开的,硬件通信接口2118可以包括两个单向流消息总线(SMBus)总线。
根据示例实施例,对象类2120可以是上面公开的缓冲器对象类、队列对象类、堆栈对象类或广播对象类。然而,应当理解,对象类2120不限于此。至少一种方法2124可以包括分配方法、取消分配方法、尺寸方法、写入方法、读取方法、推送方法、弹出方法、现场修改方法、复制方法、循环冗余校验(CRC)生成方法、CRC校验方法、纠错码(ECC)方法、随机化方法或其组合。然而,应当理解,至少一种方法2124不限于此。
对象2112可以是将要在至少一个物理存储器2102中实例化的新对象。面向对象消息2106可以是声明新对象的请求。请求可以包括针对该新对象的对象类2120。对象类2120可以定义新对象。
面向对象消息2106可以是调用至少一个方法2124的给定方法的请求,并且该请求可以包括针对对象2112的句柄(未示出)和至少一个方法2124的给定方法(未示出)的方法标识符(未示出)。面向对象消息2106可以包括至少一个参数(未示出)。面向对象存储器设备2110可以使用所包括的至少一个参数来执行至少一个方法2124的给定方法。
硬件客户端2108可以是配置成与操作系统(未示出)的堆栈(未示出)交互的硬件处理。面向对象消息2106可以源自于堆栈。硬件处理可以被配置为采用存储在至少一个物理存储器2102中的数据(未示出)。面向对象存储器设备2110可以被配置成经由对象2112来管理用于硬件处理的、在至少一个物理存储器2102中的数据的结构。如上面公开的,对象2112可以是由硬件处理所采用的私有存储缓冲器。至少一个数据成员2122可以被存储在私有存储缓冲器中。
对象2112可以是纠错码(ECC)对象。有效载荷(未示出)可以被包括在面向对象消息2106中。至少一个数据成员2122可以包括有效载荷的ECC校正版本。对象2112可以是如上文所公开的先进先出(FIFO)对象。至少一个数据成员2122可以是FIFO对象的数据元素。对象2112可以是堆栈对象,并且至少一个数据成员2122可以包括嵌套的线程上下文。
图22是方法的示例实施例的流程图。方法在面向对象存储器设备处开始(2202)并且对从面向对象存储器设备(2204)的硬件客户端接收的面向对象消息进行解码。该方法在面向对象存储器设备内部执行动作,基于所接收和解码的面向对象消息针对硬件客户端执行该动作(2206)。面向对象消息与在面向对象存储器设备的至少一个物理存储器中被实例化或将要被实例化的对象相关联。动作与对象相关联。此后,在示例实施例中,该方法结束(2208)。
该方法还可以包括对所接收和解码的面向对象消息的响应进行编码,并将经编码的响应传输到硬件客户端,响应基于所执行的动作而被编码。
该方法还可以包括在由对象类(对象类定义对象)定义的对象中包括至少一个数据成员和至少一个方法。
该方法还可以包括在至少一个物理存储器中基于对象类实例化对象,对象类包括至少一个方法的相应编译代码,或指向被实例化对象中相应编译代码的相应指针。
对象类可以是缓冲器对象类、队列对象类、堆栈对象类或广播对象类。在对象类是缓冲器对象类的情况下,该方法还可以包括:在至少一个数据成员中包括缓冲器,以及在至少一个方法中包括读取方法和写入方法,以分别读取和写入缓冲器。
在对象类是队列对象类的情况下,方法还可以包括:在至少一个数据成员中包括先进先出(FIFO)数据结构、读取指针和写入指针;在至少一种方法中包括推送方法和弹出方法,分别用于将数据推送到FIFO数据结构,以及从FIFO数据结构中弹出数据;以及分别在推送和弹出方法中采用写入指针和读取指针。
在对象类是堆栈对象类的情况下,该方法还可以包括:在至少一个数据成员中包括先进后出(FILO)数据结构、读取指针和写入指针;在至少一个方法中包括推送方法和弹出方法,分别用于将数据推送到FILO数据结构,以及从FILO数据结构弹出数据;以及分别在推送和弹出方法中采用写入指针和读取指针。
在对象类是广播对象类的情况下,该方法还可以包括在至少一个数据成员中包括至少一个变量;在至少一个方法中包括读取方法和写入方法,分别用于读取和写入至少一个变量的给定变量;在至少一个方法中包括订阅方法,以用于注册以接收给定变量的值中的改变的通知;并且在至少一个方法中包括取消订阅方法,以用于取消注册以接收通知。
在给定变量的值改变的情况下,该方法还可以包括生成与该对象相关联的面向对象通知消息;以及将所生成的面向对象通知消息传输给面向对象存储器设备的订阅接收该通知的每个硬件客户端。
对象可以是将要在至少一个物理存储器中被实例化的新对象,并且面向对象消息可以是声明新对象的请求。请求可以包括新对象的对象类。对象类定义新对象。
执行该动作可以包括分配唯一句柄值,该唯一句柄值标识所声明的新对象;对包括所分配的唯一句柄值的响应进行编码;以及将经编码的响应传输到硬件客户端。
硬件客户端可以耦合到面向对象存储器设备的至少一个通信端口中的给定通信端口,并且传输可以包括经由给定通信端口传输经编码的响应。
请求可以经由面向对象存储器设备的至少一个通信端口中的给定通信端口来接收,并且编码可以包括从请求中获得与硬件客户端相关联的唯一硬件客户端标识符、或者基于给定通信端口导出唯一硬件客户端标识符。编码还可以包括:在所编码和传输的响应中包括唯一硬件客户端标识符。
面向对象消息可以是调用包括在对象中的给定方法的请求,并且该方法还可以包括在请求中包括对象的句柄和给定方法的方法标识符。
执行该动作可以包括基于句柄和方法标识符来标识给定方法,并且在面向对象存储器设备内部执行所标识的给定方法。该方法还可以包括在面向对象消息中包括至少一个参数,并且执行可以包括采用所包括的至少一个参数。所标识的给定方法可以是分配方法。至少一个参数可以包括缓冲器尺寸,并且执行可以包括根据所包括的缓冲器尺寸,用对象缓冲器对在至少一个物理存储器中的对象进行实例化。
对象可以在至少一个物理存储器中被实例化,并且可以包括对象缓冲器。所标识的给定方法可以是取消分配方法,并且执行可以包括用对象缓冲器对对象进行取消实例化。
执行该动作可以包括:基于执行和向硬件客户端传输经编码的响应的结果,对响应进行编码。结果可以是指示所标识和执行的给定方法是否成功完成,并且编码可以包括:在经编码和传输的响应中包括指示。结果可以包括由所标识和执行的给定方法返回的数据,并且编码可以包括:在经编码和传输的响应中包括数据。硬件客户端可以耦合到面向对象存储器设备的至少一个通信端口中的给定通信端口,并且传输可以包括经由给定通信端口将经编码的响应传输到硬件客户端。编码可以包括从请求获得与硬件客户端相关联的唯一硬件客户端标识符,或者基于给定通信端口导出唯一硬件客户端标识符。编码还可以包括:在经编码和传输的响应中包括硬件客户端标识符。执行可包括:采用面向对象存储器设备的至少一个处理电路中的给定处理电路,执行所标识的给定方法。
该方法还可以包括:基于定义一组面向对象消息请求和响应及其格式的通信协议,对所接收的面向对象消息进行解码;基于通信协议生成响应;以及将所生成的响应传输到硬件客户端。
该方法还可以包括:经由位于面向对象存储器设备内的存储器管理器,分配和取消分配至少一个物理存储器中的存储器,针对与相应的对象类、数据成员和方法相关联的对象,该存储器被分配或被取消分配。
该方法还可以包括:经由位于面向对象存储器设备内部的存储器管理器,对在至少一个物理存储器中的对象进行实例化。该方法还可以包括:将所实例化的对象与硬件客户端的唯一硬件客户端标识符相关联。面向对象存储器设备可以包括类库,该类库存储对象类定义,实例化可以包括:采用类库的给定类来在至少一个物理存储器中对对象进行实例化,给定对象类定义对象。
该方法还可以包括:由位于面向对象存储器设备内部的存储器管理器执行垃圾收集,以响应于对象定向存储器设备内部的对象的取消实例化而回收至少一个物理存储器的物理空间。
至少一个物理存储器可以是用于存储与多个硬件客户端相关联的对象的共享资源,并且该方法还可以包括在面向对象存储器设备内部对存储在共享资源中的对象实施数据隐私和保护。
与硬件客户端相关联的数据可以被包括在至少一个物理存储器中被实例化的对象中,并且执行该动作可以包括经由定义对象的对象类的至少一个方法来访问针对硬件客户端的数据,并向硬件客户端传输响应,所传输的响应具有所访问的数据。
方法还可以包括与操作系统的堆栈交互,并且从堆栈获取面向对象消息。
硬件客户端可以是配置为采用存储在至少一个物理存储器中的数据的硬件处理,并且该方法还可以包括:经由对象,对在至少一个物理存储器中的针对硬件处理的数据的结构进行管理。
硬件客户端可以是硬件处理。对象可以是由硬件处理所使用的私有存储缓冲器,并且执行该动作可以包括访问用于硬件处理的私有存储缓冲器。
对象可以是纠错码(ECC)对象,并且执行该动作可以包括采用该对象以在硬件客户端的有效载荷上应用ECC校正,其中有效载荷被包括在接收的面向对象消息中。
该对象可以是先进先出(FIFO)对象,并且该方法还可以包括:尤其在面向对象存储器设备内部对指向FIFO对象的读取和写入指针进行管理。
该方法还可以包括基于读取和写入指针来确定FIFO对象的空或满状态,并且在确定FIFO对象已满的情况下,该方法还可以包括经由通知消息来通知硬件客户端。执行该动作可以包括:将数据推送到FIFO对象和更新写入指针,其中所推送的数据被包括在接收的面向对象消息中。方法还可以包括响应于推送针对硬件客户端的数据,而通知另一硬件客户端。该方法还可以包括:在从另一硬件客户端接收到另一个面向对象消息、并且响应于该消息将数据推送到FIFO对象的情况下,通知硬件客户端。执行该动作可以包括:从FIFO对象弹出数据;将在传输至硬件客户端的响应消息中弹出的数据返回;以及更新读取指针。
该对象可以是堆栈对象,并且执行该动作可以包括将嵌套线程上下文保存到针对硬件客户端的堆栈对象中,嵌套线程上下文被包括在接收的面向对象消息中。
硬件客户端可以是第一硬件处理,对象可以是第一FIFO对象,第一FIFO对象和第二FIFO对象可以在至少一个物理存储器中被实例化,并且该方法还可以包括:通过管理在面向对象存储器设备内部的第一和第二FIFO,实现在第一硬件处理与第二硬件处理之间的双向通信。该方法还可以包括生成未经请求的消息,并且将所生成的未请求消息广播给第一和第二硬件处理,该未请求消息指示第一和第二FIFO可用于在第一与第二硬件处理之间的双向通信。
接收的面向对象消息可以包括消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或其组合。该对象可以包括至少一个其他对象。该方法还可以包括将对象与元数据相关联,元数据包括订阅对象的硬件客户端的各个硬件客户端标识符。
图23是方法的示例实施例的流程图2300。方法开始于(2302),并且通过面向对象存储器设备基于面向对象消息事务与至少一个硬件客户端通信(2304)。面向对象存储器设备包括至少一个物理存储器。该方法使得至少一个硬件客户端能够基于面向对象消息事务、而不是基于基于地址数据的存储器读取和写入事务(2306)来向至少一个物理存储器读取和写入数据,并且该方法随后在示例实施例中结束(2308)。
图24是方法的示例实施例的流程图2400。该方法开始于(2402),并且通过面向对象存储设备基于面向对象消息事务与至少一个硬件客户端通信(2404),该面向对象消息事务与在面向对象存储设备的至少一个物理存储器中被实例化的高速缓存对象相关联。方法在至少一个硬件客户端中的给定硬件客户端已订阅高速缓存对象、并且该高速缓存对象已被至少一个硬件客户端中的另一个硬件客户端无效的事件中,通过面向对象存储器设备通知该给定硬件客户端(2406)。通知包括传输与高速缓存对象相关联的面向对象消息。之后,在示例实施例中,该方法结束(2406)。
图25是方法的示例实施例的流程图2500。方法通过面向对象存储器设备,基于面向对象消息事务与至少一个硬件客户端通信(2504),该面向对象消息事务与在面向对象高速缓存设备的至少一个物理存储器中实被例化的多个高速缓存对象相关联,。该方法更新在多个缓存对象中的数据的副本,更新包括复制对在多个高速缓存对象中的给定缓存对象中的给定数据副本所做的更改(2506)。该方法向多个硬件客户端中的订阅多个高速缓存对象中的相应高速缓存对象的每个硬件客户端广播更改的通知,其中通知是与相应高速缓存对象相关联的面向对象消息(2508),并且该方法随后在示例实施例中结束(2510)。
图26是方法的示例实施例的流程图2600。方法开始于(2602),并且对面向对象存储器设备的至少一个物理存储器进行预处理,以创建面向对象虚拟机,虚拟机将面向对象消息处理为对至少一个物理存储器的本机存储器读取和写入请求(2604)。该方法拦截被编码为面向对象消息的至少一个存储器读取和写入请求,并将该面向对象消息解码成由所创建的虚拟机实现的相应的本机存储器读取和写入请求(2608)。此后,在示例实施例中,该方法结束(2610)。
方法还可以包括通过使用面向对象库初始化至少一个物理存储器来预处理至少一个物理存储器,该库使经预处理的至少一个物理存储器将面向对象消息解释为本机存储器读取和写入请求,使得经预处理的至少一个物理存储器将面向对象消息处理为本机块存储器指令。
图27是方法的示例实施例的流程图2700。方法开始于(2702),并且通过集中式面向对象存储设备经由面向对象消息事务(2704)直接与多个硬件客户端通信。该方法基于面向对象消息事务实施多个硬件客户端之间的硬件客户端通信(2706)。此后,在示例实施例中,该方法结束(2708)。
图28是方法的示例实施例的流程图2800。方法开始于(2802),并且在面向对象存储器设备处,经由面向对象消息事务,直接与多个硬件客户端中的硬件客户端通信,面向对象存储器设备能够进行面向对象存储设备间通信(2804)。方法基于面向对象存储器设备间通信和面向对象消息事务,在多个硬件客户端之中实施硬件客户端间通信(2806)。此后,在示例实施例中,该方法结束(2808)。备选方法实施例与上面结合上面公开的图19的示例系统实施例描述的那些方法并行。
图29是方法的示例实施例的流程图2900。方法开始于(2902),并且在面向对象存储设备的硬件客户端处,生成与对象类的对象相关联的面向对象消息,对象类包括至少一个数据成员和至少一个方法(2904)。方法经由硬件通信接口(其将硬件客户端耦合到面向对象存储器设备),将所生成的面向对象消息传输到面向对象存储器设备(2906),对象在面向对象存储设备的至少一个物理存储器中根据对象类而被对实例化或将被实例化,至少一个方法使得面向对象存储器设备能够访问针对硬件客户端的至少一个数据成员。此后,在示例实施例中,该方法结束(2908)。备选方法实施例与上面结合上面所公开的图20的示例性系统实施例描述的那些方法并行。备选方法实施例与上面结合上面所公开的图21的示例性系统实施例描述的那些方法并行。
图30是计算机3000的内部结构示例的框图,其中可以实现本公开的各种实施例。计算机3000包含系统总线3062,其中总线是用于计算机或处理系统的部件之中的数据传输的一组硬件线。系统总线3062大致上是共享管道,用于连接计算机系统的不同元件(例如,处理器、磁盘存储器、存储器、输入/输出端口、网络端口等),以实现在元件之间的信息传输。耦合到系统总线3062的是用于将各种输入和输出设备(例如,键盘、鼠标、显示器、打印机、扬声器等)连接到计算机3000的I/O设备接口3064。网络接口3066允许计算机3000连接到附接到网络的各种其他设备。存储器3068为可用于实现本公开实施例的计算机软件指令3067和数据3069提供易失性或非易失性存储器,其中易失性存储器和非易失性存储器是非瞬态介质的示例。磁盘存储器3084为可用于实现本公开实施例的计算机软件指令3067和数据3084提供非易失性存储器。中央处理器单元3008还耦合到系统总线3062,并且提供用于执行计算机指令。
中央处理器单元3008耦合到面向对象存储器设备3010,并且是其硬件客户端。中央处理器单元3008和面向对象存储器设备3010通过消息总线3018耦合,在该消息总线3018上通信本文公开的面向对象消息(未示出)。面向对象存储器设备3010可以是上面公开的图1B的面向对象存储器设备110,或者可以是本文公开的任何面向对象存储器设备,并且可以包括本文公开的面向对象存储器设备的任何示例实施例。中央处理器单元3008可以包括上面公开的硬件客户端的任何示例实施例。
存储器3068的指令3067可以基于面向对象编程(OOP),并且因为面向对象存储器设备3010自然地与之对齐,如上所述的,相对于使用线性/块存储器设备来代替面向对象存储器设备3010,中央处理器单元3008的性能可以被改善。
本文中所公开的其他示例实施例可以使用计算机程序产品进行配置;例如,可以在软件中编程以实现示例性实施例的控制。额外示例实施例可以包括包含可以由处理器执行的指令的非暂时性计算机可读介质,并且当被加载和执行时,使得处理器完成本文所述的方法。应当理解,框图和流程图的元素可以在软件或硬件中实现,例如通过上面公开的图27的电路的一个或多个布置或其等效物、固件、其组合或将来确定的其他类似实现方式。
此外,本文所述的框图和流程图的元素可以在软件、硬件或固件中以任何方式组合或分割。如果在软件中实现,则软件可以用能够支持本文所公开的示例性实施例的任何语言编写。软件可以存储在任何形式的计算机可读介质中,例如随机存取存储器(RAM)、只读存储器(ROM)、光盘只读存储器(CD-ROM)等等。在操作中,通用或特定于应用的处理器或处理核心以本领域中很好理解的方式加载和执行软件。应当进一步理解,框图和流程图可以包括更多或更少的元素,以不同的方式排列或定向,或者以不同的方式表示。应当理解,实现可以规定框图、流程图和/或网络图以及说明本文所公开的实施例的执行的框图和流程图的数量。
本文中引用的所有专利、公开申请和参考文献的教学全部内容通过引用的方式并入本文。
虽然已经具体地示出和描述了示例性实施例,但本领域技术人员将理解,在不脱离所附权利要求所包含的实施例的范围的情况下,可以在其中对形式和细节进行各种改变。

Claims (30)

1.一种面向对象存储器设备,包括:
至少一个物理存储器;以及
硬件控制器,在所述面向对象存储器设备内部被耦合到所述至少一个物理存储器,并且所述硬件控制器被配置为:(i)对从所述面向对象存储器设备的硬件客户端接收的面向对象消息进行解码,以及(ii)基于所接收和解码的所述面向对象消息,执行针对所述硬件客户端的动作,所述面向对象消息与在所述至少一个物理存储器中已被实例化或将要被实例化的对象相关联,所述动作与所述对象相关联。
2.根据权利要求1所述的面向对象存储器设备,其中所述硬件控制器还被配置为:
对所接收和解码的所述面向对象消息的响应进行编码;以及
将所编码的响应传输到所述硬件客户端,所述响应基于所执行的动作而被编码。
3.根据权利要求1所述的面向对象存储器设备,其中所述硬件控制器和所述至少一个物理存储器被集成在单个集成电路上,并且其中由所述硬件控制器,在所述面向对象存储器设备内部执行对所述至少一个物理存储器的访问。
4.根据权利要求1所述的面向对象存储器设备,其中经由两条单向流消息总线(SMBus)总线,所述硬件客户端被耦合到所述面向对象存储器设备。
5.根据权利要求1所述的面向对象存储器设备,其中所述对象由对象类定义,并且其中所述对象包括如所述对象类所定义的至少一个数据成员和至少一个方法。
6.根据权利要求5所述的面向对象存储器设备,还包括:
类库,包括至少一个类定义;以及
方法库,包括与所述至少一个类定义中的给定类定义相关联的至少一个相应方法,所述至少一个相应方法包括用于由所述硬件控制器执行的相应编译代码,其中所述硬件控制器还被配置为:采用针对所述对象类的所述给定类定义,以在所述至少一个物理存储器中实例化所述对象,并且其中所实例化的所述对象包括所述至少一个相应方法的所述相应编译代码或到所实例化的所述对象的指针。
7.根据权利要求5所述的面向对象存储器设备,其中所述对象类是缓冲器对象类、队列对象类、堆栈对象类或广播对象类,并且其中所述至少一种方法包括:分配方法、取消分配方法、尺寸方法、写入方法、读取方法、推送方法、弹出方法、现场修改方法、复制方法、循环冗余校验(CRC)生成方法、CRC校验方法、纠错码(ECC)方法、随机化方法或以上方法的组合。
8.根据权利要求1所述的面向对象存储器设备,其中所述对象是在所述至少一个物理存储器中将要被实例化的新对象,其中所述面向对象消息是声明所述新对象的请求,所述请求包括针对所述新对象的对象类,所述对象类定义所述新对象,以及其中所执行的动作包括:
分配唯一句柄值,所述唯一句柄值标识所声明的新对象;
对包括所分配的唯一句柄值的响应进行编码;以及
将所编码的响应传输到所述硬件客户端。
9.根据权利要求8所述的面向对象存储器设备,还包括至少一个通信端口,其中所述请求经由所述至少一个通信端口中的给定通信端口而被接收,并且其中编码包括:
从所述请求获得与所述硬件客户端相关联的唯一硬件客户端标识符,或者基于所述给定通信端口导出所述唯一硬件客户端标识符;以及
在所编码和传输的响应中包括所述唯一硬件客户端标识符。
10.根据权利要求1所述的面向对象存储器设备,其中所述面向对象消息是调用被包括在所述对象中的给定方法的请求,其中所述请求包括所述对象的句柄和所述给定方法的方法标识符,并且其中所执行的动作包括:
基于所述句柄和所述方法标识符,标识所述给定方法;
在所述面向对象存储器设备内部,执行所标识的给定方法;
基于执行的结果,对响应进行编码;以及
将所编码的响应传输到所述硬件客户端。
11.根据权利要求10所述的面向对象存储器设备,其中所述面向对象消息包括至少一个参数,并且其中执行所标识的给定方法包括使用所包括的所述至少一个参数。
12.根据权利要求10所述的面向对象存储器设备,还包括至少一个处理电路,并且其中执行包括使用所述至少一个处理电路中的给定处理电路来执行所标识的给定方法。
13.根据权利要求1所述的面向对象存储器设备,其中所述硬件控制器包括存储器管理器,所述存储器管理器被配置为:
针对与相应的对象类、数据成员和方法相关联的对象,分配和取消分配所述至少一个物理存储器中的存储器;
在所述至少一个物理存储器中实例化所述对象;以及
将所实例化的对象与所述硬件客户端的唯一硬件客户端标识符相关联。
14.根据权利要求13所述的面向对象存储器设备,还包括被配置为存储对象类定义的类库,并且其中所述存储器管理器还被配置为使用所述类库中的给定类,以在所述至少一个物理存储器中实例化所述对象,所述给定类定义所述对象。
15.根据权利要求1所述的面向对象存储器设备,其中所述硬件控制器包括存储器管理器,所述存储器管理器被配置为执行垃圾收集,以响应于在所述面向对象存储器设备内部的对象的取消实例化,回收所述至少一个物理存储器的物理空间。
16.根据权利要求1所述的面向对象存储器设备,其中所述硬件客户端是被配置为与操作系统的堆栈交互的硬件处理,并且其中所述面向对象消息源自于所述堆栈。
17.根据权利要求1所述的面向对象存储器设备,其中所述对象是纠错码(ECC)对象,其中所执行的动作包括使用所述对象,以在针对所述硬件客户端的有效载荷上应用ECC校正,并且其中所述有效载荷被包括在所接收的面向对象消息中。
18.根据权利要求1所述的面向对象存储器设备,其中所述对象是堆栈对象,并且其中所执行的动作包括将嵌套线程上下文保存到针对所述硬件客户端的所述堆栈对象,所述嵌套线程上下文被包括在所接收的面向对象消息中。
19.根据权利要求1所述的面向对象存储器设备,其中所述硬件客户端是第一硬件处理,其中所述对象是第一FIFO对象,其中所述第一FIFO对象和第二FIFO对象在所述至少一个物理存储器中被实例化,并且其中所述硬件控制器还被配置为:
通过管理在所述面向对象存储器设备内部的所述第一FIFO对象和所述第二FIFO对象,使得在所述第一硬件处理和第二硬件处理之间能够双向通信;以及
生成未请求消息,并且将所述未请求消息广播到所述第一硬件处理和所述第二硬件处理,所述未请求消息指示所述第一FIFO对象和第二FIFO对象能够用于所述第一硬件处理和所述第二硬件处理之间的双向通信。
20.根据权利要求1所述的面向对象存储器设备,其中所接收的面向对象消息包括:消息类型、处理标识符、处理标记、对象标识符、方法标识符、参数列表或它们的组合。
21.一种面向对象存储器设备,包括:
至少一个物理存储器;以及
硬件控制器,在所述面向对象存储器设备内部被耦合到所述至少一个物理存储器,并且被配置为:基于面向对象消息事务,与至少一个硬件客户端通信,所述面向对象消息事务使得所述至少一个硬件客户端能够将数据读取和写入到所述至少一个物理存储器,以替代基于地址数据的存储器读取和写入事务。
22.一种高速缓存设备,包括:
至少一个物理存储器;以及
硬件控制器,在所述高速缓存设备内部被耦合到所述至少一个物理存储器,并且所述硬件控制器被配置为:基于与在所述至少一个物理存储器中被实例化的高速缓存对象相关联的面向对象消息事务,与至少一个硬件客户端通信,所述硬件控制器还被配置为:在所述至少一个硬件客户端中的给定硬件客户端已订阅所述高速缓存对象、并且所述高速缓存对象已被由所述至少一个硬件客户端中的另一个硬件客户端无效的情况下,通知所述给定硬件客户端,通知包括传输与所述高速缓存对象相关联的面向对象消息。
23.一种分布式高速缓存,包括:
至少一个物理存储器;以及
硬件控制器,在所述分布式高速缓存内部被耦合到所述至少一个物理存储器,并且所述硬件控制器被配置为:基于与在所述至少一个物理存储器中被实例化的多个高速缓存对象相关联的面向对象消息事务,与多个硬件客户端通信,所述硬件控制器还配置为:更新在所述多个高速缓存对象中的数据的副本,以复制对在所述多个高速缓存对象中的给定高速缓存对象中的所述数据的给定副本所做出的更改,并且向所述多个硬件客户端中的订阅所述多个高速缓存对象中的相应高速缓存对象的每个硬件客户端广播所述更改的通知,其中所述通知是与所述相应高速缓存对象相关联的面向对象消息。
24.一种面向对象存储器设备,包括:
至少一个物理存储器;以及
硬件控制器,被配置为对所述至少一个物理存储器进行预处理,以创建面向对象虚拟机,所述虚拟机将面向对象消息处理为对所述至少一个物理存储器的本机存储器读取和写入请求,所述硬件控制器包括编解码器,所述编解码器被配置为拦截被编码为面向对象消息的至少一个存储器读取或写入请求,并且将所述面向对象消息解码成将由所创建的虚拟机实现的相应本机存储器读取或写入请求。
25.根据权利要求24所述的面向对象存储器设备,其中所述硬件控制器还被配置为:通过使用面向对象库初始化所述至少一个物理存储器来对所述至少一个物理存储器进行预处理,所述面向对象库使经预处理的所述至少一个物理存储器将面向对象消息解释为本机存储器读取和写入请求,使得经预处理的所述至少一个物理存储器将所述面向对象消息处理为本机块存储器指令。
26.一种方法,包括:
在面向对象存储器设备处,对从所述面向对象存储器设备的硬件客户端接收的面向对象消息进行解码;以及
在所述面向对象存储器设备内部执行动作,所述动作基于所接收和解码的面向对象消息针对所述硬件客户端而被执行,所述面向对象消息与在所述面向对象存储器设备的至少一个物理存储器中被实例化或将被实例化的对象相关联,所述动作与所述对象相关联。
27.一种方法,包括:
通过面向对象存储器设备,基于面向对象消息事务,与至少一个硬件客户端通信,所述面向对象存储器设备包括至少一个物理存储器;以及
使所述至少一个硬件客户端能够基于所述面向对象消息事务、而不是基于基于地址数据的存储器读取和写入事务,将数据读取和写入到所述至少一个物理存储器。
28.一种方法,包括:
通过面向对象存储器设备,基于面向对象消息事务,与至少一个硬件客户端通信,所述面向对象消息事务与在所述面向对象存储器设备的至少一个物理存储器中被实例化的高速缓存对象相关联;以及
在所述至少一个硬件客户端中的给定硬件客户端已订阅所述高速缓存对象、并且所述高速缓存对象已被所述至少一个硬件客户端中的另一个硬件客户端无效的情况下,通过所述面向对象存储器设备,通知所述给定硬件客户端,所述通知包括传输与所述高速缓存对象相关联的面向对象消息。
29.一种方法,包括:
基于面向对象消息事务,通过面向对象存储器设备,与至少一个硬件客户端通信,所述面向对象消息事务与在面向对象高速缓存设备的至少一个物理存储器中被实例化的多个高速缓存对象相关联;
更新所述多个高速缓存对象中的数据的副本,所述更新包括复制对所述多个高速缓存对象中的给定高速缓存对象中的所述数据的给定副本所做出的更改;以及
向所述多个硬件客户端中的订阅所述多个高速缓存对象中的相应高速缓存对象的每个硬件客户端广播所述更改的通知,其中所述通知是与所述相应高速缓存对象相关联的面向对象消息。
30.一种方法,包括:
对面向对象存储器设备的至少一个物理存储器进行预处理,以创建面向对象虚拟机,所述虚拟机将面向对象消息处理为对所述至少一个物理存储器的本机存储器读取和写入请求;
拦截至少一个存储器读取或写入请求,所述至少一个存储器读取和写入请求被编码为面向对象消息;以及
将所述面向对象消息解码为将由所创建的所述虚拟机实现的相应的本机存储器读取或写入请求。
CN202010747281.2A 2019-07-29 2020-07-29 面向对象存储器 Pending CN112306647A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962879795P 2019-07-29 2019-07-29
US62/879,795 2019-07-29
US16/940,217 US11966780B2 (en) 2019-07-29 2020-07-27 Object-oriented memory
US16/940,217 2020-07-27

Publications (1)

Publication Number Publication Date
CN112306647A true CN112306647A (zh) 2021-02-02

Family

ID=74259143

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202010746115.0A Pending CN112433827A (zh) 2019-07-29 2020-07-29 面向对象存储器客户端
CN202010747281.2A Pending CN112306647A (zh) 2019-07-29 2020-07-29 面向对象存储器

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202010746115.0A Pending CN112433827A (zh) 2019-07-29 2020-07-29 面向对象存储器客户端

Country Status (2)

Country Link
US (9) US11966780B2 (zh)
CN (2) CN112433827A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115065674A (zh) * 2022-08-03 2022-09-16 北京金堤科技有限公司 一种通信方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11966780B2 (en) 2019-07-29 2024-04-23 Marvell Asia Pte, Ltd. Object-oriented memory
US11544147B2 (en) 2020-05-22 2023-01-03 Vmware, Inc. Using erasure coding across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage
US11481319B2 (en) * 2020-05-22 2022-10-25 Vmware, Inc. Using data mirroring across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage
US11556423B2 (en) 2020-05-22 2023-01-17 Vmware, Inc. Using erasure coding in a single region to reduce the likelihood of losing objects maintained in cloud object storage

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5291593A (en) * 1990-10-24 1994-03-01 International Business Machines Corp. System for persistent and delayed allocation object reference in an object oriented environment
WO1995027248A1 (en) * 1994-03-30 1995-10-12 Apple Computer, Inc. Object oriented message passing system and method
US6298401B1 (en) 1997-08-11 2001-10-02 Seagate Technology Llc Object oriented storage device having a disc drive controller providing an interface exposing methods which are invoked to access objects stored in a storage media
US7065747B2 (en) * 2001-05-08 2006-06-20 Sun Microsystems, Inc. Identifying references to objects during bytecode verification
US7383414B2 (en) * 2004-05-28 2008-06-03 Oracle International Corporation Method and apparatus for memory-mapped input/output
US9092387B2 (en) 2008-12-10 2015-07-28 Micron Technology, Inc. Non-volatile memory device capable of initiating transactions
US8751860B2 (en) * 2009-06-03 2014-06-10 Micron Technology, Inc. Object oriented memory in solid state devices
US8688899B2 (en) * 2010-09-28 2014-04-01 Fusion-Io, Inc. Apparatus, system, and method for an interface between a memory controller and a non-volatile memory controller using a command protocol
US8943516B2 (en) 2012-05-31 2015-01-27 International Business Machines Corporation Mechanism for optimized intra-die inter-nodelet messaging communication
US10169124B2 (en) 2014-12-16 2019-01-01 Samsung Electronics Co., Ltd. Unified object interface for memory and storage system
KR20170012934A (ko) * 2015-07-27 2017-02-06 삼성전자주식회사 객체-지향 데이터 저장 장치의 작동 방법과 상기 데이터 저장 장치를 포함하는 시스템의 작동 방법
US9367554B1 (en) * 2015-09-14 2016-06-14 Atlassian Pty Ltd Systems and methods for enhancing performance of a clustered source code management system
EP3859977A1 (en) * 2016-07-15 2021-08-04 Chippewa Data Control LLC Method of error correction
EP3639159A1 (en) * 2017-06-16 2020-04-22 Amadeus S.A.S. Geographically distributed database
US11966780B2 (en) 2019-07-29 2024-04-23 Marvell Asia Pte, Ltd. Object-oriented memory

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115065674A (zh) * 2022-08-03 2022-09-16 北京金堤科技有限公司 一种通信方法及装置

Also Published As

Publication number Publication date
US11941447B2 (en) 2024-03-26
US11635992B2 (en) 2023-04-25
CN112433827A (zh) 2021-03-02
US20210034424A1 (en) 2021-02-04
US20240192991A1 (en) 2024-06-13
US11294722B2 (en) 2022-04-05
US20240220322A1 (en) 2024-07-04
US20220179705A1 (en) 2022-06-09
US12093731B2 (en) 2024-09-17
US11675623B2 (en) 2023-06-13
US11966780B2 (en) 2024-04-23
US20220179704A1 (en) 2022-06-09
US11294721B2 (en) 2022-04-05
US20230221991A1 (en) 2023-07-13
US20210034380A1 (en) 2021-02-04
US20210034379A1 (en) 2021-02-04
US20230273823A1 (en) 2023-08-31

Similar Documents

Publication Publication Date Title
CN112306647A (zh) 面向对象存储器
CN100392599C (zh) 通用进程间通信实现方法
US10691597B1 (en) Method and system for processing big data
US9892144B2 (en) Methods for in-place access of serialized data
US9934126B1 (en) Indexing a trace by insertion of reverse lookup data structures
US20040143562A1 (en) Memory-resident database management system and implementation thereof
US20090271790A1 (en) Computer architecture
US20140282392A1 (en) Programming model for performant computing in documentoriented storage services
JP5011311B2 (ja) Xml文書をメモリにロードする方法及びメカニズム
WO2020220935A1 (zh) 运算装置
JP4763598B2 (ja) プロセッサおよびデバイス
US10665008B2 (en) Hybrid traversal of object sets
US10496433B2 (en) Modification of context saving functions
US20050273776A1 (en) Assembler supporting pseudo registers to resolve return address ambiguity
US8286144B2 (en) Administering a process filesystem with respect to program code conversion
CN115242563B (zh) 一种网络通信方法、计算设备及可读存储介质
Queinnec Locality, causality and continuations
US20230251918A1 (en) Systems and methods for fast and scalable data-intensive computation
WO2016181200A1 (en) A data processing method
Sun et al. HMMer acceleration using systolic array based reconfigurable architecture
Takizawa et al. Optimized data transfers based on the OpenCL event management mechanism
WO2020000484A1 (zh) 一种反序列化方法、装置以及计算设备
CN113300812A (zh) 一种业务接口报文处理方法及装置
Baines Rcuda: General programming facilities for gpus in r
CN114546467A (zh) 一种补丁文件投放方法、装置、设备和存储介质

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