首页 > 运动玩具 专利正文
云游戏的加载方法及装置、电子设备、存储介质与流程

时间:2022-02-13 阅读: 作者:专利查询

1.本技术涉及计算机
技术领域
:,特别涉及一种云游戏的加载方法及装置、电子设备、计算机可读存储介质。
背景技术
::2.linux系统通过虚拟内存机制为每个进程分配内存空间。系统对内存寻址的能力决定了每个进程可用内存空间的大小。对于32位系统而言,每个进程可以寻址的虚拟地址空间为0到2^32b,也就是0到4gb。随着软硬件的升级,应用程序对内存空间的需求逐渐增大,4gb的最大内存空间已经难以满足日益增长的软件需求。因此,64位系统逐渐成为市场的主流。对于64位系统,理论上单个进程最大可寻址空间为2^64b,也就是16eb。但在linux系统中,还要考虑内存分页以及页表寻址的开销,因此实际上可寻址的最大内存空间是根据页大小和页表级数来确定。3.目前主流的移动设备,实际硬件内存普遍不超过10gb。这种情况下,移动设备上通常会在页大小为4kb时,使用3级页表,此时最大虚拟地址空间为2^39b,也就是512gb,可以满足对实际硬件内存的寻址需求。4.在云游戏的业务场景下,一台高承载的服务器需要运行大量的游戏,若使用3级页表,则将限制最大可用的实际硬件内存为512gb,导致无法满足业务需求。如果在页大小为4kb时,使用4级页表,则最大虚拟地址空间为2^48b,也就是256tb。在这种情况下,服务器拥有最高256tb的实际硬件内存为大量游戏提供服务,为每一游戏分配的内存空间也高达2^48b。然而,部分游戏引擎在设计之初并未考虑对大内存空间的适配,在4级页表的情况下,游戏运行过程中可能因游戏引擎无法处理高位内存地址而崩溃。技术实现要素:5.本技术实施例的目的在于提供一种云游戏的加载方法及装置、电子设备、计算机可读存储介质,用于解决因游戏应用的游戏引擎无法正确高位内存地址,导致游戏运行是崩溃的问题。6.一方面,本技术提供了一种云游戏的加载方法,包括:7.响应于针对目标云游戏的启动请求,确定所述目标云游戏的程序位数;8.如果所述程序位数为第一指定位数,确定所述目标云游戏对应的可访问虚拟内存上限;9.依据所述可访问虚拟内存上限,布局所述目标云游戏对应的内存空间;10.在已布局的内存空间加载所述目标云游戏。11.在一实施例中,所述确定所述目标云游戏的程序位数,包括:12.对所述目标云游戏的可执行文件进行解析,得到所述目标云游戏的程序位数。13.在一实施例中,所述依据所述可访问虚拟内存上限,布局所述目标云游戏对应的内存空间,包括:14.依据所述可访问虚拟内存上限,确定所述目标云游戏对应的用户空间内栈的第一位置、以及所述可执行文件在所述内存空间的第二位置;15.依据所述第一位置和所述第二位置,布局所述目标云游戏对应高度内存空间。16.在一实施例中,所述确定所述目标云游戏对应的可访问虚拟内存上限,包括:17.依据所述目标云游戏的游戏标识,查找预设虚拟内存表,得到与所述游戏标识对应的可访问虚拟内存上限;其中,所述虚拟内存表包括多个虚拟内存表条目,每一虚拟内存表条目包括与游戏标识对应的可访问虚拟内存上限。18.在一实施例中,在所述确定所述目标云游戏对应的可访问虚拟内存上限之前,所述方法还包括:19.获取所述目标云游戏的游戏标识和对应于所述游戏标识的可访问虚拟内存上限;20.基于所述游戏标识和所述可访问虚拟内存上限,构造虚拟内存条目;21.将所述虚拟内存条目写入所述虚拟内存表中。22.在一实施例中,在所述在已布局的内存空间加载所述目标云游戏之后,所述方法还包括:23.在所述目标云游戏运行过程中,若监听到指定报错信息,依据预设调整策略,对所述虚拟内存表中所述目标云游戏的可访问虚拟内存上限进行调整;其中,所述指定报错信息指示所述目标云游戏的游戏引擎无法适配所述内存空间。24.在一实施例中,在所述依据所述可访问虚拟内存上限,布局所述目标云游戏对应的内存空间之前,所述方法还包括:25.如果所述程序位数为第二指定位数,依据常规布局模式布局所述目标云游戏对应的内存空间。26.另一方面,本技术还提供了一种云游戏的加载方法,包括:27.第一确定模块,用于响应于针对目标云游戏的启动请求,确定所述目标云游戏的程序位数;28.第二确定模块,用于如果所述程序位数为第一指定位数,确定所述目标云游戏对应的可访问虚拟内存上限;29.布局模块,用于依据所述可访问虚拟内存上限,布局所述目标云游戏对应的内存空间;30.加载模块,用于在已布局的内存空间加载所述目标云游戏。31.进一步的,本技术还提供了一种电子设备,所述电子设备包括:32.处理器;33.用于存储处理器可执行指令的存储器;34.其中,所述处理器被配置为执行上述云游戏的加载方法。35.另外,本技术还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成上述云游戏的加载方法。36.本技术方案,在加载目标云游戏时,可以确定目标云游戏的程序位数是否为第一指定位数,如果是,可以确定目标云游戏对应的可访问虚拟内存上限,并依据可访问虚拟内存上限布局内存空间;在完成内存空间布局之后,在内存空间加载运行目标云游戏。由于在布局内存空间之前,可以确定目标云游戏的游戏引擎所能支持的可访问虚拟内存上限,依据该可访问虚拟内存上限,在布局过程中对内存空间的大小进行限制,避免内存空间中有游戏引擎不兼容的高内存地址,而导致游戏运行失败的问题。附图说明37.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍。38.图1为本技术一实施例提供的云游戏的加载方法的应用场景示意图;39.图2为本技术一实施例提供的电子设备的结构示意图;40.图3为本技术一实施例提供的云游戏的加载方法的流程示意图;41.图4为本技术一实施例提供的云游戏的加载方法的示意图;42.图5为本技术一实施例提供的内存空间的布局方法的示意图;43.图6为本技术一实施例提供的虚拟内存表的更新方法的流程示意图;44.图7为本技术一实施例提供的云游戏的加载装置的框图。具体实施方式45.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。46.相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。47.图1为本技术实施例提供的云游戏的加载方法的应用场景示意图。如图1所示,该应用场景包括客户端20和服务端30;客户端20可以是搭载安卓系统的手机、平板电脑等用户终端,用于向服务端30发送云游戏启动请求;服务端30可以是搭载云游戏运行平台的服务器、服务器集群或云计算中心,可以云游戏启动请求,在本地的安卓系统启动云游戏。48.如图2所示,本实施例提供一种电子设备1,包括:至少一个处理器11和存储器12,图2中以一个处理器11为例。处理器11和存储器12通过总线10连接,存储器12存储有可被处理器11执行的指令,指令被处理器11执行,以使电子设备1可执行下述的实施例中方法的全部或部分流程。在一实施例中,电子设备1可以是上述服务端30,用于执行云游戏的加载方法。49.存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammablereadonlymemory,简称eprom),可编程只读存储器(programmablered-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。50.本技术还提供了一种计算机可读存储介质,存储介质存储有计算机程序,计算机程序可由处理器11执行以完成本技术提供的云游戏的加载方法。51.参见图3,为本技术一实施例提供的云游戏的加载方法的流程示意图,如图3所示,该方法可以包括以下步骤310-步骤340。52.步骤310:响应于针对目标云游戏的启动请求,确定目标云游戏的程序位数。53.其中,启动请求用于请求启动云游戏,启动请求可以包含云游戏的游戏标识,游戏标识用于指示唯一的游戏应用。游戏标识可以是游戏名、预分配的游戏编号等。目标云游戏为启动请求中游戏标识所指示的游戏应用。54.搭载云游戏运行平台的服务端可以从用户终端接收启动请求,并通过本地已运行的安卓操作系统处理该启动请求。这里,服务端可以以4级页表的形式存放虚拟页的状态。55.服务端可以通过安卓操作系统响应于启动请求,从启动请求中解析出游戏标识,从而确定游戏标识所指示的目标云游戏。在确定目标云游戏之后,服务端可以确定目标云游戏的程序位数。一般,程序位数可以是32或64。56.步骤320:如果程序位数为第一指定位数,确定目标云游戏对应的可访问虚拟内存上限。57.其中,第一指定位数可以是64位。58.当服务端确定目标云游戏的程序位数为第一指定位数时,为避免目标云游戏的游戏引擎无法处理高内存地址而导致运行异常,可以确定目标云游戏对应的可访问虚拟内存上限。这里,可访问虚拟内存上限为游戏引擎所能处理的最高内存地址。59.步骤330:依据可访问虚拟内存上限,布局目标云游戏对应的内存空间。60.步骤340:在已布局的内存空间加载目标云游戏。61.在确定可访问虚拟内存上限之后,服务端可以依据该可访问虚拟内存上限,为目标云游戏布局内存空间,并在已布局的内存空间加载目标云游戏。62.通过上述措施,依据游戏引擎所能处理的可访问虚拟内存上限布局内存空间,避免因游戏引擎与内存空间不适配,导致目标云游戏在运行过程中崩溃的问题。在高页表层级的情况下,服务端可以充分利用自身配置大容量硬件内存的优势,实现高承载的效果,且提高了对游戏引擎的兼容性,显著降低了运营成本。63.在一实施例中,服务端在确定目标云游戏的程序位数时,可以对目标云游戏的可执行文件(executableandlinkableformat,elf)进行解析,从而得到目标云游戏的程序位数。其中,可执行文件用于布局目标云游戏的内存空间,可执行文件的头部记录目标云游戏的程序位数。服务端可以对可执行文件的头部进行解析,从而得到程序位数。64.参见图4,为本技术一实施例提供的云游戏的加载方法的示意图,如图4所示,在加载目标云游戏时,服务端通过本地安卓系统的init进程调用fork系统,从而产生游戏新进程。服务端可以通过游戏新进程调用execve函数对目标云游戏的可执行文件进行装载,从而完成内存空间的布局。65.在布局内存空间之后,游戏新进程变为安卓系统的app_process64进程,服务端可以通过该app_process64进程装载jvm(javavirtualmachine)虚拟机,从而将app_process64进程变为zygote64进程。服务端可以通过zygote64进程在已布局的内存空间中加载目标云游戏,从而完成目标云游戏的启动工作。66.在一实施例中,在依据可访问虚拟内存上限,布局目标云游戏的内存空间时,服务端可以依据可访问虚拟内存上限,确定目标云游戏对应的用户空间内栈的第一位置、以及可执行文件在内存空间的第二位置。67.这里,第一位置为内存空间的用户空间(userspace)中栈的高地址,也就是栈地址。第二位置为可执行文件在内存空间的用户空间中的加载地址。68.在确定第一位置和第二位置之后,服务端在第二位置开始加载可执行文件,并以第一位置作为栈的高地址,从而布局目标云游戏对应的内存空间。69.参见图5,为本技术一实施例提供的内存空间的布局方法的示意图,如图5所示,调用execve函数布局内存空间时,可以对可执行文件的头部进行解析,从而得到目标云游戏的程序位数。在程序位数为64位的情况下,可以确定目标云游戏对应的可访问虚拟内存上限task_size,并依据可访问虚拟内存上限task_size确定栈的高地址stack_top_max、以及可执行文件的加载地址elf_et_dyn_base。服务端可以将可访问虚拟内存上限直接作为栈的高地址,将可访问虚拟内存上限乘以预设系数,获得可执行文件的加载地址。70.示例性的,可访问虚拟内存上限task_size为2^46b,确定栈的高地址stack_top_max为2^46b,预设系数为2/3,可执行文件的加载地址elf_et_dyn_base=stack_top_max*2/3。71.在内存空间的内核空间布局不变的情况下,服务端可以依据栈的高地址、可执行文件的加载地址对用户空间进行布局,从而得到内存空间。在一般情况下,服务端采用4级页表时,内存空间的可访问虚拟内存上限task_size为2^64b,通过对其进行限制,避免因游戏引擎无法兼容高内存地址导致的运行异常。72.在一实施例中,在确定目标云游戏对应的可访问虚拟内存上限时,服务端可以依据目标云游戏的游戏标识,查找预设虚拟内存表。73.其中,虚拟内存表可以包括多个虚拟内存表条目,每一虚拟内存表条目可以包括与游戏标识对应的可访问虚拟内存上限。虚拟内存表用于记录多个云游戏的游戏引擎所支持的可访问虚拟内存上限。74.当查找到目标云游戏的游戏标识所在虚拟内存表条目后,从虚拟内存表条目中获得可访问虚拟内存上限,并将其确定为目标云游戏对应的可访问虚拟内存上限。75.在一实施例中,在确定目标云游戏对应的可访问虚拟内存上限之前,服务端可以在本地虚拟内存表中写入其对应的可访问虚拟内存上限,以便后续游戏运行阶段,可以通过虚拟内存表布局内存空间。76.参见图6,为本技术一实施例提供的虚拟内存表的更新方法的流程示意图,如图6所示,该方法可以包括如下步骤610-步骤630。77.步骤610:获取目标云游戏的游戏标识和对应于游戏标识的可访问虚拟内存上限。78.服务端可以从本地配置信息或者运营后台,获取目标云游戏的游戏标识、以及对应于游戏标识的可访问虚拟内存上限。示例性的,当服务端所搭载的云游戏运行平台引入一款新游戏时,运营人员可以通过运营后台在服务端配置新游戏的游戏标识、新游戏的游戏引擎所支持的可访问虚拟内存上限。79.步骤620:基于游戏标识和可访问虚拟内存上限,构造虚拟内存条目。80.步骤630:将虚拟内存条目写入虚拟内存表中。81.服务端可以构建虚拟内存条目,并将游戏标识和可访问虚拟内存上限写入该条目,并将虚拟内存条目写入虚拟内存表中。82.服务端可为云游戏运行平台所支持的多款云游戏构造虚拟内存表项,并写入虚拟内存表。在后续运行目标云游戏之前,服务端可以查表确定目标云游戏的游戏引擎所支持的可访问虚拟内存上限。83.在一实施例中,虚拟内存表中,任一云游戏对应的可访问虚拟内存上限可能并不准确。在这种情况下,运行游戏过程中,可能出现因游戏引擎与内存空间不适配而崩溃的现象。84.在已布局的内存空间加载目标云游戏之后,在目标云游戏运行过程中,服务端可以对其进行监听。若运行过程中出现闪退等异常情况,且监听到指定报错信息,服务端可以依据预设调整策略,对虚拟内存表中目标云游戏的可访问虚拟内存上限进行调整。其中,指定报错信息指示目标云有序的游戏引擎无法适配内存空间。85.一种情况下,调整策略可以是将当前可访问虚拟内存上限减半。示例性的,目标云游戏对应的可访问虚拟内存上限为2^46b,当监听到指定报错信息之后,服务端可将虚拟内存表中将其调整为2^45b。86.另一种情况下,调整策略可以是将当前可访问虚拟内存上限降为四分之一。示例性的,目标云游戏对应的可访问虚拟内存上限为2^46b,当监听到指定报错信息之后,服务端可将虚拟内存表中将其调整为2^44b。87.在游戏引擎不适配内存空间的情况下,对虚拟内存表中的可访问虚拟内存上限进行调整,经过若干次调整之后,虚拟内存表中可访问虚拟内存上限可以满足游戏引擎的需求。通过该措施,对虚拟内存表进行更新,从而避免不准确的可访问虚拟内存上限导致云游戏始终运行出错。88.在一实施例中,在确定目标云游戏的程序位数之后,如果程序位数为第二指定位数,服务端可以依据常规模型布局目标云游戏对应的内存空间。其中,第二指定位数可以是32位。89.当目标云游戏的程序位数为32位时,服务端可以为其布局4gb的内存空间。在完成内存空间布局之后,服务端可以在内存空间加载32位的目标云游戏。90.图7是本发明一实施例的一种云游戏的加载装置,如图7所示,该装置可以包括:91.第一确定模块710,用于响应于针对目标云游戏的启动请求,确定所述目标云游戏的程序位数;92.第二确定模块720,用于如果所述程序位数为第一指定位数,确定所述目标云游戏对应的可访问虚拟内存上限;93.布局模块730,用于依据所述可访问虚拟内存上限,布局所述目标云游戏对应的内存空间;94.加载模块740,用于在已布局的内存空间加载所述目标云游戏。95.上述装置中各个模块的功能和作用的实现过程具体详见上述云游戏的加载方法中对应步骤的实现过程,在此不再赘述。96.在本技术所提供的几个实施例中,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。97.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。98.功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。当前第1页12当前第1页12