1.本发明涉及一种用于统一内存访问的计算系统及相应的方法。特别地,本发明的系统和方法影响操作系统(operatingsystem,os)在多处理器系统中基于需求信息分配共享内存的方式。优选地,所述需求信息包括可执行二进制代码,所述可执行二进制代码包括至少一部分应用所需内存段的类型和/或状态的信息。
背景技术:
::2.新兴计算机体系结构的特点在于内存和处理器子系统异构性越来越高,这主要是由于新颖的内存技术、低时延加载/存储访问互连以及近数据处理(neardataprocessing,ndp)的重新兴起,近数据处理沿着内存层次引入处理单元。3.可寻址内存包括片上内存、片外内存(例如,常见的dimm模块)或远程机器内存。此外,随着存储类内存(storageclassmemory,scm)的出现,可寻址内存可以是易失的或持久的。为了推动机器内部低时延内存映射的通信,正在开发新的互连,包括ccix、gen-z、opencapi或串行内存总线。这些技术之外的统一特性是在系统内所有组件之间提供共享内存互连,这种互连基于单节点,或者在机架级下。一些特性还旨在提供基于硬件的缓存一致性。最后,由于技术创新,ndp重新获得关注。ndp是处理和内存的共址,呈(主)内存内处理(processinginmemory,pim)或存储内处理(in-storageprocessing,isc)的形式。4.上述技术使得不同类型的处理单元能够同时访问同一内存。图8示出了一种场景,其中,主内存由近数据处理器、连接到相干互连的cpu、经由外围总线与cpu互连的加速器以及经由支持rdma的接口连接的远程处理单元(例如,近数据处理器、cpu或gpu)访问。加速器-cpu-nic设置是上述技术的子场景,其中,加速器(fpga、gpu或xeon-phi)、cpu和nic共享一个共同的内存区域。随着ndp和机架级计算的增加,访问同一内存区域的处理单元数量也稳步增加。此外,所有的内存都成为加载/存储可访问的机器间和机器内的内存。5.可以发现,现有技术在向访问同一内存区域的多个内核os或多个os/运行管理器转变。另外,除了(不可缓存)可缓存区域和非一致性内存访问(nonuniformmemoryaccess,numa)之外,传统的os架构不考虑内存异构性。6.在传统的计算系统中,应用是针对一个计算机平台静态编译的,因此符合特定的同构内存模型。然而,同一内存区域可能由具有不同指令集架构(instructionsetarchitecture,isa)和一致性模型并提供不同同步机制的处理器访问。7.为了完全支持多个处理单元同时访问同一内存区域的新兴架构,需要不同的系统软件构造,使得能够实现不同的(支持os的)isa处理器之间格式兼容的数据共享、一致性内存访问(基于应用程序员的期望)、处理器之间的保护、对程序员的透明度以及高效通信的开发。8.这些现有技术的解决方案提出了一个问题,即系统软件如何有效高效地管理系统中不同计算单元之间的共享内存。9.现有技术的解决方案相对静态地处理内存和处理单元的异构问题。程序员需要事先为特定的目标架构准备软件,可能采用专门的编程模型对由于异构性而出现的一致性和不兼容性问题进行显式寻址。使用异构加速器还涉及显式编程,例如,通过某种领域专用的加速器语言。此外,异构性具有的潜在优势无法在运行时充分利用,因为这些优势需要在编程和应用开发时进行显式寻址,从而减少了进一步优化的机会。10.现有技术的解决方案的缺点在于:迫使应用开发人员采用特定的编程模型,需要对软件进行修改;针对的是特定的异构环境,排除了在可共同托管的若干潜在可用的加速器环境中运行的可能性;禁止了可以在应用运行时确定的优化机会。技术实现要素:11.鉴于上述问题和缺点,本发明旨在改进传统的系统和方法。因此,本发明的目的在于提供一种系统,该系统克服了新兴计算机体系结构中的异构性缺点。通过在操作系统和应用级别提供编译时机制和运行时机制的组合,程序员不必设计针对特定异构平台的应用程序。因此,可以统一异构环境中的内存访问。通过避免重新设计遗留应用以进一步利用异构平台的优势,这也能够实现遗留应用的向后兼容性。还开启操作系统以进行运行时决策,积极利用异构设备的优势(例如,通过对何时和何处会具有更好的性能和效率过程进行调度和透明的迁移),而不要求应用开发时的显式参与。12.特别地,本发明提出了一种使用“内存契约”(也可以称为需求信息)作为系统软件解决方案的解决方案,该解决方案在编译时由编译器或链接器创建,在运行时实现,由操作系统管理。根据所述内存契约,可以在运行时进行检查,例如检查作用于内存区域的代码必须遵守的一致性、保护或一致性保证。13.所述内存契约可以包括增强的可执行二进制格式,扩展用于维护元数据区段。所述元数据区段包括内存一致性、isa和应用二进制接口(abi)需求。因此,可以丰富传统的os二进制加载器,以识别元数据区段并在运行时加载它们。此外,开启os以在运行时为异构计算架构中存在的各种可能的处理元件动态地选择匹配契约,并另外从用户透明地向任何处理单元迁移任务(进程、线程),从而对内存进行统一访问。14.因此,本发明解决了现有技术中存在的如下问题:应用编写者不必为了使用异构资源采用特定的编程模型。开启应用以利用几种可用的异构资源,而不是针对特定的资源。开启操作系统以在运行时透明地进行动态决策,从而更好地利用可用的异构资源。15.本发明的目的通过所附独立权利要求中提供的解决方案来实现。本发明的有利实施方式在从属权利要求中进一步定义。16.本发明的第一方面提供了一种用于统一内存访问的计算系统,包括:第一处理单元和第二处理单元;共享内存,包括第一内存段和第二内存段;操作系统,至少部分由所述第一处理单元操作;应用,至少部分由所述操作系统操作;其中,所述第一处理单元和所述第二处理单元连接到所述共享内存;其中,所述操作系统用于:基于所述操作系统和/或所述应用中包括的需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用,其中,所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分所述应用所需内存段的类型和/或状态的信息。17.由于可以根据所述操作系统和/或所述应用中包括的所述需求信息进行内存访问,因此程序员无需设计针对特定异构平台的应用。此外,开启操作系统以进行关于内存访问的运行时决策,积极利用异构设备的优势。开启所述os以在运行应用时有效高效地控制异构处理单元和/或异构内存段。18.在根据所述第一方面所述的系统的第一种实现方式中,所述第一处理单元和所述第二处理单元具有不同的处理单元架构。19.这确保了可以特别地在异构计算系统中统一内存访问,更具体地,在第一计算单元和第二计算单元具有不同架构的系统中统一内存访问。20.在根据所述第一方面所述的系统的第二种实现方式中,所述需求信息还包括第一需求信息,其中,所述第一需求信息与至少一部分所述应用的的可执行二进制代码的属性相关,所述操作系统还用于:基于所述第一需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。21.这确保了在操作所述计算系统时,可以特别考虑至少一部分所述应用的可执行二进制代码的属性,以统一内存访问。22.在根据所述第一方面所述的系统的第三种实现方式中,所述第一需求信息是可执行二进制代码,包括关于以下各项的信息:用于编译至少一部分所述应用的应用二进制接口abi,和/或用于编译至少一部分所述应用的的格式,和/或持久特性,和/或至少一部分所述应用所需内存段的归属,和/或安全策略。23.这确保了在操作所述计算系统时,可以考虑所述第一需求信息中的特定和详细信息及参数,以统一内存访问。24.在根据所述第一方面所述的系统的第四种实现方式中,所述需求信息包括第二需求信息,其中,所述第二需求信息与所述应用的至少一个预定义代码段的可执行二进制代码相关,所述操作系统还用于:基于所述第二需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。25.这确保了在操作所述计算系统时,可以特别考虑所述应用的至少一个预定义代码段的可执行二进制代码,以统一内存访问。26.在根据所述第一方面所述的系统的第五种实现方式中,所述第二需求信息是可执行二进制代码,包括以下各项的信息:用于编译所述应用的预定义代码段的abi,和/或用于编译所述应用的预定义代码段的内存模型,和/或所述应用可以访问的每个内存段的安全策略。27.这确保了在操作所述计算系统时,可以考虑所述第二需求信息中的特定和详细信息及参数,以统一内存访问。28.在根据所述第一方面所述的系统的第六种实现方式中,所述需求信息包括第三需求信息,其中,所述第三需求信息与所述共享内存与所述第一处理单元和所述第二处理单元中的至少一个之间的连接相关,所述操作系统还用于:基于所述第三需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。29.这确保了在操作所述计算系统时,可以特别考虑所述共享内存与所述第一处理单元和所述第二处理单元中的至少一个之间的连接的信息,以统一内存访问。30.在根据所述第一方面所述的系统的第七种实现方式中,所述第三需求信息由所述操作系统创建,包括关于以下各项的信息:所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的缓存一致性保证,和/或所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的内存访问时延,和/或所述共享内存中的硬件保护机制的存在和类型。31.这确保了在操作所述计算系统时,可以考虑所述第三需求信息中的特定和详细信息及参数,以统一内存访问。32.在根据所述第一方面所述的系统的第八种实现方式中,所述操作系统还用于:如果所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用不符合所述需求信息中的需求,则基于所述需求信息,调整以下各项的配置:所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或所述应用的至少一部分,从而将所述第一内存段和所述第二内存段中的至少一个分配给至少一部分所述应用。33.这确保了如果检测到在进行内存访问时不符合所述需求信息中的需求,则可以基于所述需求信息,调整以下各项的配置:所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用。34.在根据所述第一方面所述的系统的第九种实现方式中,所述操作系统还用于:如果所述第一处理单元不符合所述需求信息中的需求,则将至少一部分所述应用从通过所述第一处理单元操作迁移为通过所述第二处理单元操作;并基于所述需求信息,控制所述第二处理单元,从而将所述第一内存段分配给至少一部分所述应用。35.这确保了如果在进行内存访问时检测到不符合所述需求信息中的需求,则可以迁移至少一部分所述应用,以统一内存访问。36.在根据所述第一方面所述的系统的第十种实现方式中,所述操作系统还用于:如果所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则将所述应用中预定义部分的可执行二进制代码与符合所述需求的预编译的可执行二进制代码进行交换;并基于所述需求信息和所述预编译的可执行二进制代码,将所述第一内存段分配给至少一部分所述应用。37.这确保了如果在进行内存访问时检测到不符合所述需求信息中的需求,则可以将所述应用中预定义部分的可执行二进制代码与预编译的可执行二进制代码进行交换,以统一内存访问。38.在根据所述第一方面所述的系统的第十一种实现方式中,所述操作系统还用于:如果所述第一内存段不符合所述需求信息中的需求,则基于所述需求信息,控制所述第一处理单元和所述第二处理单元中的所述至少一个以及所述共享内存,从而将所述第二内存段分配给至少一部分所述应用。39.这确保了如果在进行内存访问时检测到不符合所述需求信息中的需求,则可以控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将第二内存段分配给至少一部分所述应用,以统一内存访问。40.在根据所述第一方面所述的系统的第十二种实现方式中,所述操作系统还用于:如果所述第一处理单元、所述第一内存段以及所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则基于所述需求信息,通过软件内存模拟的方式将所述第一内存段分配给至少一部分所述应用。41.这确保了如果在进行内存访问时检测到不符合所述需求信息中的需求,则可以通过软件内存模拟的方式将所述第一内存段分配给至少一部分所述应用,以统一内存访问。42.在根据所述第一方面所述的系统的第十三种实现方式中,所述至少两个内存段具有不同的内存段架构。43.这确保了可以特别地在异构计算系统中统一内存访问,更具体地,在至少两个内存段是不同架构的系统中统一内存访问。44.本发明的第二方面提供了一种用于操作用于统一内存访问的计算系统的方法。所述计算系统包括:第一处理单元和第二处理单元;共享内存,包括第一内存段和第二内存段;操作系统,至少部分由所述第一处理单元操作;应用,至少部分由所述操作系统操作;其中,所述第一处理单元和所述第二处理单元连接到所述共享内存,其中,所述方法包括以下步骤:基于所述操作系统和/或所述应用中包括的需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用,其中,所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分所述应用所需内存段的类型和/或状态的信息。45.在根据所述第二方面所述的方法的第一种实现方式中,所述第一处理单元和所述第二处理单元具有不同的处理单元架构。46.在根据所述第二方面所述的方法的第二种实现方式中,所述需求信息还包括第一需求信息,其中,所述第一需求信息与至少一部分所述应用的可执行二进制代码的属性相关,所述方法还包括:基于所述第一需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。47.在根据所述第二方面所述的方法的第三种实现方式中,所述第一需求信息是可执行二进制代码,包括关于以下各项的信息:用于编译至少一部分所述应用的应用二进制接口abi,和/或用于编译至少一部分所述应用的格式,和/或持久特性,和/或至少一部分所述应用所需内存段的归属,和/或安全策略。48.在根据所述第二方面所述的方法的第四种实现方式中,所述需求信息包括第二需求信息,其中,所述第二需求信息与所述应用的至少一个预定义代码段的可执行二进制代码相关,所述方法还包括:基于所述第一需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。49.在根据所述第二方面所述的方法的第五种实现方式中,所述第二需求信息是可执行二进制代码,包括以下各项的信息:用于编译所述应用的预定义代码段的abi,和/或关于用于编译所述应用的预定义代码段的内存模型,和/或所述应用可以访问的每个内存段的安全策略。50.在根据所述第二方面所述的方法的第六种实现方式中,所述需求信息包括第三需求信息,其中,所述第三需求信息与所述共享内存与所述第一处理单元和所述第二处理单元中的至少一个之间的连接相关,所述方法还包括:基于所述第三需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。51.在根据所述第二方面所述的方法的第七种实现方式中,所述第三需求信息由所述操作系统创建,包括关于以下各项的信息:所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的缓存一致性保证,和/或所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的内存访问时延,和/或所述共享内存中的硬件保护机制的存在和类型。52.在根据所述第二方面所述的方法的第八种实现方式中,所述方法还包括:如果所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用不符合所述需求信息中的需求,则基于所述需求信息,所述操作系统调整以下各项的配置:所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用,从而将所述第一内存段和所述第二内存段中的至少一个分配给至少一部分所述应用。53.在根据所述第二方面所述的方法的第九种实现方式中,所述方法还包括:如果所述第一处理单元不符合所述需求信息中的需求,则所述操作系统将至少一部分所述应用从通过所述第一处理单元操作迁移为通过所述第二处理单元操作;并基于所述需求信息,所述操作系统控制所述第二处理单元,从而将所述第一内存段分配给至少一部分所述应用。54.在根据所述第二方面所述的方法的第十种实现方式中,所述方法还包括:如果所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则所述操作系统将所述应用中预定义部分的可执行二进制代码与符合所述需求信息的预编译的可执行二进制代码进行交换;并基于所述需求信息和所述预编译的可执行二进制代码,将所述第一内存段分配给至少一部分所述应用。55.在根据所述第二方面所述的方法的第十一种实现方式中,所述方法还包括:如果所述第一内存段不符合所述需求信息中的需求,则基于所述需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的所述至少一个以及所述共享内存,从而将所述第二内存段分配给至少一部分所述应用。56.在根据所述第二方面所述的方法的第十二种实现方式中,所述方法还包括:如果所述第一处理单元、所述第一内存段以及所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则基于所述需求信息,所述操作系统通过软件内存模拟的方式将所述第一内存段分配给至少一部分所述应用。57.在根据所述第二方面所述的方法的第十三种实现方式中,所述至少两个内存段具有不同的内存段架构。58.所述第二方面及其实现方式所述的方法实现了与所述第一方面及其相应实现方式所述的系统相同的优点。59.应注意,本技术中所描述的所有设备、元件、单元和构件都可以在软件或硬件元件或其任何种类的组合中实施。由本技术中所描述的各种实体执行的所有步骤以及描述成由各种实体执行的功能意欲指相应实体适于或用于执行相应步骤和功能。即使,在以下具体实施例的描述中,待由外部实体执行的特定功能或步骤未反映在执行该特定步骤或功能的该实体的具体详细元件的描述中,技术人员也应该清楚,这些方法和功能可以在相应的软件或硬件元件,或其任何种类的组合中实施。附图说明60.本发明的上述方面和实现形式将在以下具体实施例的描述中结合所附附图解释,其中61.图1示出了根据本发明实施例的计算系统;62.图2示出了根据本发明实施例的计算系统;63.图3示出了根据本发明实施例的更详细的计算系统;64.图4示出了elf格式和pe/coff格式的示意图;65.图5示出了根据本发明的os过程描述符的示意图;66.图6示出了用于统一os内核的内存访问的操作方式的流程图;67.图7示出了根据本发明实施例的方法的示意性概述;68.图8示出了根据现有技术的计算系统。具体实施方式69.图1示出了根据本发明实施例的计算系统100。计算系统100允许统一内存访问,包括第一处理单元101、第二处理单元102,以及包括第一内存段104和第二内存段105的共享内存103。70.因此,处理单元101和102都可以例如是以下各项中的一种:cpu、cpu核、gpu、gpu核、近数据处理器、连接到相干互连的cpu、经由外围总线与cpu互连的加速器、经由支持rdma的接口连接的远程处理单元(例如,近数据处理器、cpu或gpu)、或内核(例如,os的内核)。计算系统100可以包括任意数量的处理单元,只要它至少包括例如根据上述定义的第一处理单元101和第二处理单元102。71.可选地,第一处理单元101和第二处理单元102可以具有不同的处理单元架构。这可以包括:第一处理单元101是选自上述列表的第一实体,第二处理单元102是选自上述列表的不同实体。这还可以包括:第一处理单元101和第二处理单元102是二进制不兼容的,例如,因为它们是根据不同的isa操作的。72.共享内存103包括第一内存段104和第二内存段105。每个内存段104、105都可以是经典主内存,例如随机存取内存(randomaccessmemory,ram)或存储类内存。每个内存段104、105都可以是易失性或非易失性的,以及相干或非相干的。更具体地,内存段104、105都可以在芯片上、芯片外(例如,通过常见的dimm模块)通过传统的一致性互连或机器间内存实现。更具体地,可以使用缓存一致性或非一致性互连或诸如ccix、gen-z、opencapi、串行内存总线等的新技术实现内存段104、105的每个链接。特别地,在形成共享内存103时(在可以存在的其他内存段之中,包括第一内存段104和第二内存段105),第一内存段104和第二内存段105可以可选地具有不同内存段架构,例如,提供一个或多个内存段的每个芯片可以根据不同的内存技术和/或设计来构建,和/或可以包括具有不同内存技术和/或设计的多个区段。这可以包括:第一内存段104是选自上述列表的第一实体,第二内存段105是选自上述列表的第二不同实体。这还可以包括:第一内存段104和第二内存段105是二进制不兼容的,例如,因为它们是根据不同的isa操作的。73.更具体地,共享内存103可用于使得多个操作系统和/或多个处理单元和/或多个应用能够同时访问共享内存103,优选地,同时访问共享内存中的同一内存段104、105。74.计算系统100还包括os106。os106可以是传统的单任务或多任务和/或单用户或多用户os,例如linux、bsd、windows或appleosx。os也可以是分布式、模板化、嵌入式、实时或库式os。os106也可以只包括单个内核。os106还可以包括多个内核。计算系统100可以使用单个os106进行操作,但是只要存在至少一个os106,也可以使用多个os106进行操作。特别地,os106可以是与第一处理单元101和/或第二处理单元102二进制不兼容的,即是根据不同的isa操作的。当计算系统100包括的多个os106在多个处理单元上操作时,os106可以是彼此二进制不兼容的。75.图1特别示出了在诸如近数据处理器、cpu、加速器和远程单元等的多个处理单元上操作的os106。这些多个处理单元还包括第一处理单元101和第二处理单元102。os106至少部分地需要对第一处理单元101进行操作。第二处理单元102可以由os106控制,以优化计算系统100的配置,从而实现统一内存访问。76.计算系统100的另一配置也可以包括在该实施例中,将在下文根据图2描述。在将根据图2描述的配置中,计算系统100包括多个os106。77.计算系统100还包括应用107。应用107至少部分由os106操作。这包括:所述应用例如可以是分布式应用,由多个os操作,其中一个os就是os106。更具体地,应用107至少包括图1或图2所示的应用部分“代码a”、“代码b”、“代码c”或“代码d”中的一个,从而指出应用107可以由一个os在多个处理单元上进行操作,甚至可以由多个内核、os或运行管理器在多个处理单元上进行操作。应用107例如通过尝试分配共享内存中的内存段104、105来获取内存访问。获取内存访问还可以涉及操作第一处理单元101和/或第二处理单元102、共享内存103、其内存段104、105中的一个或os106,以实现统一内存访问。78.为了访问共享内存103,例如通过总线,更具体地,经由支持加载/存储接口的总线将第一处理单元101和第二处理单元102连接到共享内存103。所述总线可以为每个不同的互连段提供不同类型的一致性。79.为了允许统一内存访问,os106用于:基于操作系统106和/或应用107中包括的需求信息108,控制第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第一内存段104分配给至少一部分应用107。还可以通过软件,例如通过os106或应用107,维护需求信息108。80.也就是说,os考虑需求信息108,并基于需求信息108执行预定义动作,以控制第一处理单元101、第二处理单元102或共享内存103中的至少一个访问共享内存103,更具体地,将第一内存段104分配给需要待分配内存的至少一部分应用107。81.此外,需求信息108还包括可执行二进制代码,所述可执行二进制代码包括至少一部分应用107所需内存段104、105的类型和/或状态的信息。82.os106可以加载所述可执行二进制代码,所述可执行二进制代码还为应用107的每个程序区段提供补充信息。需求信息108也可以称为内存契约。内存契约可以为应用107的每个代码(.text)子区段定义正确的内存访问所需的最低需求。需求信息108,更具体地,可执行二进制代码可以由编译器创建,该编译器对程序开发人员透明地自动生成可执行二进制代码,因此程序开发人员可以分别在编译时或运行时使用附加语言编译指令或新的osapi修改内存契约。83.需求信息108还可以包括第一需求信息、第二需求信息和第三需求信息,这将在下文根据图3详细描述。第一需求信息也可以称为数据契约,第二需求信息也可以称为参与者契约,第三需求信息也可以称为拓扑契约。84.图2示出了根据本发明实施例的计算系统100的示例性配置。图2所示的计算系统100包括图1中计算系统100的所有特征,特别地,可以使用多个os进行操作。os可以特别属于图1所描述的类型。os106由图2中的计算系统100中的多个os组成。所述多个os特别地可以是彼此二进制不兼容的,和/或与第一处理单元101和/或第二处理单元102二进制不兼容的,即是根据不同的isa操作的。85.图2中的计算系统100至少需要操作os106。然而,由于支持多个os,计算系统100还可以在多个os在多核、多处理器或分布式系统上运行的环境中实现。每个os都可以在各自的处理单元上运行。特别地,每个os都可以至少部分地在不同的处理单元上运行,即以分布式方式运行。然而,os106需要操作计算系统100并控制计算系统100中的每个os。86.计算系统100中的多个os可以由os106控制,例如,以优化计算系统100的配置,从而实现统一内存访问,例如,至少部分地将应用迁移到不同的os。87.图3示出了根据本发明实施例的更详细的计算系统300。计算系统300包括如上文根据图1和图2所描述的计算系统100的所有特征和功能。因此,相同的特征用相同的参考符号来标记。在根据图3的描述中,特别是第一需求信息、第二需求信息和第三需求信息,(即数据契约、参与者契约、拓扑契约)以及内存契约的概念将会进行更详细地描述。88.内存契约也可以作为os抽象化,它为程序员提供了os接口。内存契约可以是地址空间区域的元数据(数据、代码、文件、交换和/或其组合)。有两种与应用107相关联的内存契约:数据契约和参与者契约。数据契约可以与应用的可执行代码相关联,参与者契约可以与所述应用访问的内存区域相关联。此外,拓扑约定可以描述处理单元到内存段的特性。在至少两个处理单元上运行的每个os可以使用内存契约来强制执行至少以下内存区域属性:格式(在abi意义上)、一致性保证、高速缓存能力保证、持久性以及用户权限(内存保护)。下文会提供更多示例。89.如图3所示,需求信息108可选地还可以包括第一需求信息301,也可以称为数据契约。90.第一需求信息301可以涉及至少一部分应用107的可执行二进制代码的属性。操作系统106还用于:基于第一需求信息301,控制第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第一内存段104分配给至少一部分应用107。91.第一需求信息(即数据契约)表示编译器在编译应用107的特定(初始化或未初始化)数据部分时使用的abi和/或格式。即使堆和堆栈是由应用107运行时填充的内存区域,它们的abi和格式仍可以在编译时定义,因此堆和堆栈也可以由数据契约来表征。对于每个内存映射文件,其数据契约由创建应用继承,或由用户设置。持久性是数据契约代表的另一个特性。由于现代编译器支持持久内存,因此在编译时也可以提取持久性。最后,数据契约定义了内存段的一个或多个归属和安全策略,以将能力授予内存段和/或过程/处理单元。92.换句话说,第一需求信息301可看作可执行二进制代码,包括在编译二进制代码时所使用的信息(例如,假设和规则),更具体地,包括以下各项的信息:用于编译至少一部分应用107的abi,和/或用于编译至少一部分应用107的格式,和/或持久特性,和/或至少一部分应用107所需内存段的归属,和/或安全策略。93.特别地,所述格式指定对齐和/或数据结构字段顺序,和/或abi,和/或对齐,和/或填充,和/或结构字段组织,和/或持久性,和/或高速缓存能力。94.持久性是内存段的一个属性,用于在移除电源之后保留数据。当内存所存储的数据在移除电源之后丢失时,该内存是非持久性或易失性的。如果内存中所存储的数据在移除电源之后没有丢失,那么该内存就是持久性的。非持久内存的一个示例是sdram或sram。持久内存的一个示例是nvdimm或flash。持久性特性包括共享内存103和/或内存段104、105的持久性的信息。95.内存段104、105的归属包括哪些应用107或用户可以访问内存段104、105的信息。96.如图3进一步所示,需求信息108可选地还可以包括第二需求信息302,也可以称为参与者契约。97.第二需求信息302可能涉及应用107的至少一个预定义代码段的可执行二进制代码。os106还可以用于:基于第二需求信息302,控制第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第一内存段104分配给至少一部分应用107。98.第二需求信息302(即参与者契约)可以表示编译器在编译应用107的特定代码段时使用的abi。此外,参与者契约为每个代码段说明针对哪个内存模型编译了该代码段,例如一致性保证和高速缓存能力需求。最后,参与者契约为每个它可以访问的内存区域存储一组功能(例如安全策略)。99.换句话说,第二需求信息302可看作可执行二进制代码,包括以下各项的信息:用于编译应用107的预定义代码段的abi,和/或用于编译应用107的预定义代码段的内存模型,和/或应用107可以访问的每个内存段的安全策略。100.因此,一致性保证和高速缓存能力可看作相互关联的概念。101.一致性是一种内存属性。当多个处理单元在同一内存段上操作时,一致性的类型/级别定义了第一处理单元101对内存进行的修改传播到第二处理单元102的方式。例如,“强一致性”要求第一处理单元101所做的每个更改立即出现在第二处理单元102的内存段的视图中。高速缓存是内存硬件中提供一致性的一种机制。高速缓存能力是内存硬件经由高速缓存提供某种一致性的能力。102.特别地,安全策略可以定义单个应用107可以读取、写入或执行的内存段。所述安全策略还可以定义为一组属性,这些属性涉及代码在处理单元上动态执行以访问预定义内存段的能力。103.上述内存模型可以定义二进制代码可以访问共享内存中的内存段的方式。这是因为同一内存段针对不同的处理单元可以具有不同的高速缓存能力、访问时延、保护机制和持久性属性。104.在另一实施示例中,在计算系统100中,所述操作系统的工作可以在操作系统106、运行管理器和虚拟机监视器之间(以不同的数量)进行分配。105.如图3进一步所示,需求信息108可选地还可以包括第三需求信息303,也可以称为拓扑契约。106.第三需求信息可以涉及共享内存103与第一处理单元101和第二处理单元102中的至少一个之间的连接。操作系统106还用于:基于第三需求信息303,控制第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第一内存段104分配给至少一部分应用107。107.在计算系统300的一种具体实现方式中,os106可以由多个内核构建,每个内核在不同的处理单元上运行。这些内核之间共享计算系统的拓扑和每个共享内存段的数据契约的信息。108.由于计算系统100中存在多个内存段104和105,且虚拟内存区域可以在这些段之间进行重定位,因此,需要第三需求信息(即,拓扑契约)。所述第三需求信息描述了物理内存段与每个特定处理单元之间的连接。拓扑契约还可以描述内存段与处理单元之间存在的缓存一致性保证。另外,可以将其他信息与拓扑契约相关联,例如内存访问时延、内存是否持久的信息、内存链接之间的硬件保护机制的存在和类型的信息。特别地,第三需求信息303可以由操作系统106创建,更具体地,基于计算系统300的硬件拓扑/几何结构(即,硬件组件在计算系统300中的连接方式)创建。109.换句话说,第三需求信息303可以包括关于以下各项的信息:第一内存段104和第二内存段105中的至少一个与第一处理单元101和第二处理单元102中的至少一个之间的缓存一致性保证,和/或第一内存段104和第二内存段105中的至少一个与第一处理单元101和第二处理单元102中的至少一个之间的内存访问时延,和/或共享内存103中的硬件保护机制的存在和类型。110.缓存一致性保证可以看作一组不同的处理单元,其在处理单元与内存段之间插入缓存一致性机制时,需要对内存段进行一致访问。缓存一致性机制可以提供不同类型的一致性,例如顺序一致性或总存储顺序(totalstoreorder,tso)。缓存一致性机制完全不必存在,或者只是窥探内存总线操作。111.内存访问时延可以看作执行处理单元指示的内存访问所需要的时间。事实上,基于内存段与处理单元的物理距离以及是否缓存特定数据,单次访问可以占用不同的时间量。112.硬件保护机制可以是内存分页和/或内存分段(分段内存)。113.在另一实施示例中,上述类型的内存契约对计算系统300的用户保持透明。内存契约由编译器在运行时或由os处理,不需要程序员干预。内存契约由编译器和链接器在第一实例中生成,包括用于生成代码和数据(子)区段的约定描述。除了abi约定之外,编译器还可以增加这类内存模型的描述。这些描述是内部生成的,或者由语法表达式(比如c++11原子学)生成。编译器和链接器可以在生成的二进制代码中体现附加信息。编译器和链接器可以将一个通常作为整体的.text段分割成多个子段,这些子段可以分配给不同的参与者契约。在编译器和链接器的具体实现示例中,还可以向编程语言添加编译指令,以标记将共享的内存段,从而可以通过来自不同设备的可变基指针访问这些内存段。114.需求信息108(即内存契约)用于os106统一访问共享内存段104、105,特别地,通过强制执行多个属性:os106通过检查连接到同一内存段104、105的应用107中的所有代码区段(例如,在第一计算单元101上和/或其他计算单元上运行)是否符合每个与内存段的连接的数据契约、参与者契约和拓扑契约,强制执行所有的内存契约。如果应用107中的代码区段不具有有效数据契约、参与者契约或拓扑契约(即,如果对共享内存103的内存访问不符合第一需求信息301、第二需求信息302或第三需求信息303中的任一个),则os106可以执行若干动作。尽管这些动作根据图3进行了描述,但它们也可以应用于如根据图1或图2所描述的计算系统100。也就是说,还可以在不存在第一需求信息301、第二需求信息302和第三需求信息303的情况下,仅基于需求信息108执行这些动作(即,可以仅基于内存契约执行动作,即,不存在数据契约、参与者契约或拓扑契约)。115.也就是说,执行所述动作可以包括:操作系统106还用于:如果第一处理单元101和第二处理单元102中的至少一个,和/或第一内存段104和第二内存段105中的至少一个,和/或应用107的至少一部分不符合需求信息108中的需求,那么则基于需求信息108,调整以下各项的配置:第一处理单元101和第二处理单元102中的至少一个,和/或第一内存段104和第二内存段105中的至少一个,和/或至少一部分应用107,从而将第一内存段104和第二内存段105中的至少一个分配给至少一部分应用107。116.调整上述实体中至少一个的配置可以特别包括:如果应用107需要对不保证满足需求信息108(例如,第一需求信息、第二需求信息或第三需求信息,或目前执行的代码(子)区段的编译和链接属性)的内存段进行分配,则os可以执行以下动作:117.–取消执行应用107。也可以禁用对所需内存段进行的rw操作,从而引发故障。118.–将应用107迁移到另一个符合需求信息(例如,编译和链接属性)的处理单元。应注意,这可以取决于可以在其他处理单元上运行的可执行二进制代码的可用性。这可以通过在编译时生成其他处理单元所需的可执行二进制代码来实现。119.–将应用107的代码(子)区段与需要一组较弱保证的另一个版本进行交换。应注意,这取决于该可执行二进制代码的可用性,如果尚不可用,那么可以在运行时生成。120.–将应用107欲操作的内存段104迁移到另一内存段105,该另一内存段105符合需求信息108中的需求(例如,从想要对内存段104、105进行操作的处理单元的角度来看)。121.–通过使用软件仿真(例如,经由虚拟分布式共享内存的形式)符合需求信息108中的需求。122.为了实现上述动作,换句话说,操作系统106还可以用于:如果应用107中预定义部分的可执行二进制代码不符合需求信息108中的需求,则将应用107中预定义部分的可执行二进制代码与符合所述需求信息的预编译的可执行二进制代码进行交换;并基于需求信息108和所述预编译的可执行二进制代码,将第一内存段104分配给至少一部分应用107。123.因此,当存在数据一致性不匹配或abi不匹配时,os106可以在应用107中不同的二进制代码版本(基于语义上等价的源代码编译,或相同的源代码)之间切换,从而符合不同的一致性契约和abi参与者契约(不同的二进制代码版本可以在编译时生成,或者及时生成,即在应用运行期间生成,也可以在用户空间中生成)。124.另外或可选地,操作系统100还可以用于:如果第一处理单元101不符合需求信息108中的需求,则将至少一部分应用107从通过第一处理单元101操作迁移为通过第二处理单元102操作;并基于需求信息108,控制第二处理单元102,从而将第一内存段104分配给至少一部分应用107。125.另外或可选地,操作系统106还可以用于:如果第一内存段104不符合需求信息108中的需求,则基于需求信息108,控制第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第二内存段105分配给至少一部分应用107。126.因此,当违反了数据一致性时,os106可以决定经由分布式共享内存提供数据一致性,或者将代码块的内存段移动到提供有效拓扑契约的另一内存段或处理单元。127.另外或可选地,操作系统106还可以用于:如果第一处理单元101、第一内存段104以及应用107中预定义部分的可执行二进制代码不符合需求信息108中的需求,则基于需求信息108,通过软件内存模拟的方式将第一内存段104分配给至少一部分应用107。128.此外,对于abi不一致,运行管理器可以最终将伪代码(例如,opencl)确定为特定abi。然后,新的api提供了一种方法,使得程序员在运行时对契约进行操作,实现用户定义的行为和微调。129.计算系统100使用的需求信息108包括可执行二进制代码,所述可执行二进制代码包括至少一部分应用107所需内存段的类型和/或状态的信息。这种可执行二进制代码也可以称为增强式可执行二进制文件、增强式可执行二进制格式或增强式可执行二进制代码。130.图4示出了作为可执行二进制文件示例的可执行与链接格式(executableandlinkingformat,elf)401和可移植可执行(pe)/通用目标文件格式(commonobjectfileformat,coff)格式402的示意图400。本发明可应用于这两种格式。在这两种情况下,都存在标头区段403、代码区段404、数据区段405和调试/符号区段406。此外,本发明通常可以应用于任何可能的文件格式,不限于给定的示例。这些示例表示的是最常用的文件格式。131.为了提供合适的可执行二进制文件的格式,例如elf格式401和pe/coff格式402,所使用的编译器(例如,gcc、llvm/clang、msvc)应支持多种内存模型、isa和abi。为了生成elf格式401或pe/coff格式402,传统的编译过程需要保持不变,仅仅修改编译涉及的后端和链接器。修改的后端为.text的多个版本生成代码(在代码区段404中),这些版本支持不同的内存模型、isa和abi。版本的数量不受限制。所有不同的版本都可以包括在增强式可执行二进制文件中,并应该可以在同一个地址空间的地址范围内互换。修改的链接器可以将所有这些不同的代码版本放在同一可执行二进制文件中,同时标记每个区段,并提供与原始格式407的向后兼容性。修改的链接器还可以创建新的可执行二进制程序区段408,可以称为“契约”。在该区段中,包括编译期间使用的所有无法从调试区段中提取的编译器假设。132.为了实施本发明,可以修改传统的os二进制加载器,以加载附加的添加到增强式可执行二进制文件中的可执行二进制区段。这些区段增加了常用的描述地址空间的os数据结构。133.os二进制加载器可以检测包括编译器在二进制加载/执行时(例如,在linux内核中执行execve()系统调用时)发射的附加元数据。相应地,os二进制加载器设置加载过程的地址空间。在此过程中,os106可以检查计算系统100中分配给应用107的内存是否符合可执行二进制文件中包括的元数据所表示的需求。对地址空间os抽象化进行进一步的增强,以包括附加的可选代码(子)区段和元数据信息。134.图5示出了os可使用的过程描述符501的示意图500。图5示出了传统os(如linux、bsd、windows或appleosx)中的过程描述符501的示意图。在这些os中,应用的地址空间由虚拟内存区域描述符502的链接数据结构描述。每个描述符与程序地址空间的逻辑部分相关联,例如.text区段、.data区段或heap区段。过程描述符501还可以包括二进制格式描述符503。根据本发明,与每个虚拟内存区域描述符502相关联的是一个或多个“内存契约”,例如数据描述符504或参与者描述符505。数据描述符504(或数据契约)与程序的非代码区域相关联,描述了编译时所使用的编译选项和约定。参与者描述符505(或参与者契约)与程序的代码区域相关联,针对代码的每个子区段,描述了一致内存访问所需的最小内存模型。多个参与者契约可以与面向地址空间的同一代码的多个版本相关联。在计算系统100加载时,os可以映射非代码区段的每个代码,同时保证契约中阐述的需求。135.图6示出了用于统一os内核的内存访问的操作方式的流程图600。流程图600特别描述了os内核可以如何在过程运行时期间使用根据本发明的附加元数据(即,需求信息)来访问异构内存区。136.图7示出了根据本发明实施例的方法700的示意性概述。方法700对应于图1的系统100,相应地,用于对用于统一内存访问的计算系统100进行操作。137.方法700包括以下步骤:基于操作系统106和/或应用107中包括的需求信息,操作系统106控制(701)第一处理单元101和第二处理单元102中的至少一个以及共享内存103,从而将第一内存段104分配给至少一部分应用107,其中,所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分应用107所需内存段的类型和/或状态的信息。138.图8示出了根据现有技术的计算系统800。特别地,本专利所示的内容可以应用于该图所示的计算机体系结构。除了专用的cpu之外,多个其他处理单元(例如ndp、加速器或rdma)可以同时访问公共内存区域,如图8所示。本发明所示的内容可用于统一这种异构内存访问。139.已结合各种实施例作为示例以及实施方式描述了本发明。然而,根据对附图、本发明和独立权利要求的研究,本领域技术人员在实践所要求保护的发明时,能够理解和实现其他变化。在权利要求书以及说明书中,词语“包括”不排除其他元件或步骤,且不定冠词“一”或者“一个”不排除多个。单个处理器或其他单元可以满足权利要求中所述的几个实体的功能。仅仅在相互不同的从属权利要求中叙述某些措施这一事实并不意味着这些措施的组合不能在有利的实施方式中使用。当前第1页12当前第1页12
技术特征:
1.一种用于统一内存访问的计算系统,其特征在于,包括:第一处理单元和第二处理单元;共享内存,包括第一内存段和第二内存段;操作系统,至少部分由所述第一处理单元操作;应用,至少部分由所述操作系统操作;其中所述第一处理单元和所述第二处理单元连接到所述共享内存,其中所述操作系统用于:基于所述操作系统中包括的需求信息和/或所述应用中包括的需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存分配给至少一部分所述应用,其中所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分所述应用所需内存段的类型的信息和/或至少一部分所述应用所需内存段的类型状态的信息。2.根据权利要求1所述的计算系统,其特征在于,所述第一处理单元和所述第二处理单元具有不同的处理单元架构。3.根据权利要求1或2所述的计算系统,其特征在于,所述需求信息还包括第一需求信息,其中,所述第一需求信息与至少一部分所述应用的可执行二进制代码的属性相关,所述操作系统还用于:基于所述第一需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。4.根据前述权利要求中3所述的计算系统,其特征在于,所述第一需求信息是可执行二进制代码,包括以下信息中的至少一种:用于编译至少一部分所述应用的应用二进制接口abi,用于编译至少一部分所述应用的格式,持久特性,至少一部分所述应用所需内存段的归属,和安全策略。5.根据前述权利要求中任一项所述的计算系统,其特征在于,所述需求信息包括第二需求信息,其中,所述第二需求信息与所述应用的至少一个预定义代码段的可执行二进制代码相关,所述操作系统还用于:基于所述第二需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。6.根据前述权利要求中任一项所述的计算系统,其特征在于,所述第二需求信息是可执行二进制代码,包括以下信息中的至少一种:用于编译所述应用的预定义代码段的abi,用于编译所述应用的预定义代码段的内存模型,和所述应用可以访问的每个内存段的安全策略。7.根据前述权利要求中任一项所述的计算系统,其特征在于,所述需求信息包括第三需求信息,其中,所述第三需求信息与所述共享内存与所述第一处理单元和所述第二处理单元中的至少一个之间的连接相关,所述操作系统还用于:基于所述第三需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。8.根据前述权利要求中任一项所述的计算系统,其特征在于,所述第三需求信息由所述操作系统创建,包括以下信息中的至少一种:所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的缓存一致性保证,所
述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的内存访问时延,和所述共享内存中硬件保护机制的存在和类型。9.根据前述权利要求中任一项所述的计算系统,其特征在于,所述操作系统还用于:如果所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用不符合所述需求信息中的需求,则基于所述需求信息,调整以下各项的配置:所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用,从而将所述第一内存段和所述第二内存段中的至少一个分配给至少一部分所述应用。10.根据前述权利要求中任一项所述的计算系统,其特征在于,所述操作系统还用于:如果所述第一处理单元不符合所述需求信息中的需求,则将至少一部分所述应用从通过所述第一处理单元操作迁移为通过所述第二处理单元操作;并基于所述需求信息,控制所述第二处理单元,从而将所述第一内存段分配给至少一部分所述应用。11.一种用于操作用于统一内存访问的计算系统的方法,其特征在于,所述计算系统包括:第一处理单元和第二处理单元;共享内存,包括第一内存段和第二内存段;操作系统,至少部分由所述第一处理单元操作;应用,至少部分由所述操作系统操作;其中所述第一处理单元和所述第二处理单元连接到所述共享内存,其中所述方法包括以下步骤:基于所述操作系统和/或所述应用中包括的需求信息,所述操作系统控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用,其中所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分所述应用所需内存段的类型的信息和/或至少一部分所述应用所需内存段的状态的信息。12.根据权利要求11所述的方法,其特征在于,所述第一处理单元和所述第二处理单元具有不同的处理单元架构。13.根据权利要求11或12所述的方法,其特征在于,所述需求信息还包括第一需求信息,其中,所述第一需求信息与至少一部分所述应用的可执行二进制代码的属性相关,所述操作系统还用于:基于所述第一需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。14.根据前述权利要求中13所述的方法,其特征在于,所述第一需求信息是可执行二进制代码,包括以下信息中的至少一种:用于编译至少一部分所述应用的应用二进制接口abi,用于编译至少一部分所述应用的格式,持久特性,至少一部分所述应用所需内存段的归属,和安全策略。15.根据前述权利要求中任一项所述的方法,其特征在于,所述需求信息包括第二需求信息,其中,所述第二需求信息与所述应用的至少一个预定义代码段的可执行二进制代码相关,所述操作系统还用于:基于所述第二需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应
用。16.根据前述权利要求中任一项所述的方法,其特征在于,所述第二需求信息是可执行二进制代码,包括以下信息中的至少一种:用于编译所述应用的预定义代码段的abi,用于编译所述应用的预定义代码段的内存模型,和所述应用可以访问的每个内存段的安全策略。17.根据前述权利要求中任一项所述的方法,其特征在于,所述需求信息包括第三需求信息,其中,所述第三需求信息与所述共享内存与所述第一处理单元和所述第二处理单元中的至少一个之间的连接相关,所述操作系统还用于:基于所述第三需求信息,控制所述第一处理单元和所述第二处理单元中的至少一个以及所述共享内存,从而将所述第一内存段分配给至少一部分所述应用。18.根据前述权利要求中任一项所述的方法,其特征在于,所述第三需求信息由所述操作系统创建,包括以下信息中的至少一种:所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的缓存一致性保证,所述第一内存段和所述第二内存段中的至少一个与所述第一处理单元和所述第二处理单元中的至少一个之间的内存访问时延,和所述共享内存中硬件保护机制的存在和类型。19.根据前述权利要求中任一项所述的方法,其特征在于,所述方法还包括:如果所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用不符合所述需求信息中的需求,则基于所述需求信息,调整以下各项的配置:所述第一处理单元和所述第二处理单元中的至少一个,和/或所述第一内存段和所述第二内存段中的至少一个,和/或至少一部分所述应用,从而将所述第一内存段和所述第二内存段中的至少一个分配给至少一部分所述应用。20.根据前述权利要求中任一项所述的方法,其特征在于,所述方法还包括:如果所述第一处理单元不符合所述需求信息中的需求,则将至少一部分所述应用从通过所述第一处理单元操作迁移为通过所述第二处理单元操作;并基于所述需求信息,控制所述第二处理单元,从而将所述第一内存段分配给至少一部分所述应用。21.根据前述权利要求中任一项所述的方法,其特征在于,所述方法还包括:如果所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则将所述应用中预定义部分的可执行二进制代码与符合所述需求信息的预编译的可执行二进制代码进行交换;并基于所述需求信息和所述预编译的可执行二进制代码,将所述第一内存段分配给至少一部分所述应用。22.根据前述权利要求中任一项所述的方法,其特征在于,所述方法还包括:如果所述第一内存段不符合所述需求信息中的需求,则基于所述需求信息,控制所述第一处理单元和所述第二处理单元中的所述至少一个以及所述共享内存,从而将所述第二内存段分配给至少一部分所述应用。23.根据前述权利要求中任一项所述的方法,其特征在于,所述方法还包括:如果所述第一处理单元、所述第一内存段以及所述应用中预定义部分的可执行二进制代码不符合所述需求信息中的需求,则基于所述需求信息,通过软件内存模拟的方式将所述第一内存段分配给至少一部分所述应用。24.根据前述权利要求中任一项所述的方法,其特征在于,所述至少两个内存段具有不
同的内存段架构。25.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求11到24任一权利要求所述的方法。
技术总结
本发明提供了一种用于统一内存访问的计算系统100,包括:第一处理单元101和第二处理单元102;共享内存103,包括第一内存段104和第二内存段105;操作系统106,至少部分由所述第一处理单元101操作;应用107,至少部分由所述操作系统106操作。所述第一处理单元101和所述第二处理单元102连接到所述共享内存103。所述操作系统106用于:基于所述操作系统106和/或所述应用107中包括的需求信息,控制所述第一处理单元101和所述第二处理单元102中的至少一个以及所述共享内存103,从而将所述第一内存段104分配给至少一部分所述应用107,其中,所述需求信息包括可执行二进制代码,其中,所述可执行二进制代码包括至少一部分所述应用107所需内存段的类型的信息和/或至少一部分所述应用107所需内存段的类型状态的信息。所述应用107所需内存段的类型状态的信息。所述应用107所需内存段的类型状态的信息。
技术研发人员:安东尼奥
受保护的技术使用者:华为技术有限公司
技术研发日:2017.10.17
技术公布日:2022/3/7