一种内存分配方法和装置与流程

文档序号:13685609阅读:250来源:国知局
本发明涉及计算机领域,尤其涉及一种内存分配方法和装置。
背景技术
::对于32位的windows操作系统来说,其逻辑地址编码采用的地址位数是32位,因此操作系统所能提供的逻辑地址的寻址范围是4gb,而在intelx86的架构下,由于采用了mmio(memorymappingi/o,内存映射i/o)技术,因此4gb的逻辑地址空间中要划分出一部分空间与biosrom(basicinputoutputsystemread-onlymemory,基本输入输出系统只读存储器)、cpu(centralprocessingunit,中央处理器)寄存器、i/o(input/output,输入/输出)设备等这些部件的物理地址进行映射,因此逻辑地址中能够与内存条的物理地址进行映射的空间就没有4gb了,并且一般情况下能够被操作系统访问到的内存都是通过固件预设为3.2gb左右,无法修改和调整。技术实现要素:本发明的目的在于提供一种内存分配方法和装置,旨在解决现有技术中没有对操作系统的可用内存进行修改和调整的有效方法的问题。本发明的第一方面,提供了一种内存分配方法,包括:获取操作系统当前使用的显卡的显卡类型,其中,所述显卡类型包括独立显卡和集成显卡;根据所述显卡类型对预设的显卡内存值进行调整,其中,所述显卡内存值包括所述独立显卡对应的内存值和所述集成显卡对应的内存值;根据调整后的所述显卡内存值设置所述操作系统能够访问的可用内存值。本发明的第二方面,提供了一种内存分配装置,包括:获取模块,用于获取操作系统当前使用的显卡的显卡类型,其中,所述显卡类型包括独立显卡和集成显卡;调整模块,用于根据所述显卡类型对预设的显卡内存值进行调整,其中,所述显卡内存值包括所述独立显卡对应的内存值和所述集成显卡对应的内存值;设置模块,用于根据调整后的所述显卡内存值设置所述操作系统能够访问的可用内存值。本发明与现有技术相比存在的有益效果是:根据显卡类型对显卡占用的内存值进行调整,进而根据调整后的显卡内存值设置操作系统能够访问的可用内存值,由于操作系统的整个寻址空间的大小是固定的,因此可以通过对显卡占用的内存的调整来实现对操作系统能够访问的可用内存的调整,从而能够灵活修改和调整操作系统的可用内存占用量。附图说明图1是本发明实施例一提供的一种内存分配方法的流程图;图2是本发明实施例二提供的一种内存分配方法的流程图;图3是本发明实施例三提供的一种内存分配装置的结构示意图;图4是本发明实施例四提供的一种内存分配装置的结构示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。以下结合具体附图对本发明的实现进行详细的描述。实施例一:图1是本发明实施例一提供的一种内存分配方法的流程图,图1示例的内存分配方法的执行主体可以是计算机或者计算机的一个功能模块,具体包括步骤s101至s103,详述如下:s101、获取操作系统当前使用的显卡的显卡类型,其中,显卡类型包括独立显卡和集成显卡。显卡类型包括独立显卡和集成显卡,独立显卡是指将显示芯片、显存及其相关电路单独做在一块电路板上,自成一体而作为一块独立的板卡存在,它需占用主板的扩展插槽,如pci-e(pciexpress)总线接口;集成显卡是指将显示芯片、显存及其相关电路都集成在主板上,与其融为一体的元件,集成显卡也称为板载显卡。具体地,在开机时获取操作系统当前使用的显卡的显卡类型,判断当前使用的显卡是独立显卡还是集成显卡。通常情况下,独立显卡和集成显卡不会同时被使用,要么使用独立显卡,要么使用集成显卡。s102、根据当前使用的显卡的显卡类型对预设的显卡内存值进行调整,其中,预设的显卡内存值包括独立显卡对应的内存值和集成显卡对应的内存值。无论是独立显卡还是集成显卡都会在内存空间中被分配一定的内存供其使用,通常独立显卡对应的内存值和集成显卡对应的内存值都是预先设置的,并且在开机过程的固件处理过程中被读取。具体地,根据步骤s101获取到的操作系统当前使用的显卡的显卡类型,对预设的显卡内存值进行调整。由于独立显卡和集成显卡不会同时被使用,因此当使用独立显卡的时候,分配给集成显卡的内存空间将会被闲置,而当使用集成显卡的时候,分配给独立显卡的内存空间将会被闲置,因此可以根据实际应用的需要对显卡内存值进行多种方式的调整,例如,可以在预设范围内同时降低或者增加两种类型的显卡对应的内存值,或者增加当前使用的显卡对应的内存值并且降低另一种类型的显卡对应的内存值等。优选地,可以根据当前使用的显卡的显卡类型,降低另一种类型的显卡对应的内存值。s103、根据调整后的显卡内存值设置操作系统能够访问的可用内存值。操作系统能够访问的可用内存是指操作系统在运行过程中可以动态分配和使用的内存。具体地,根据步骤s102对预设的显卡内存值进行调整的结果,设置操作系统能够访问的可用内存值,由于操作系统的整个寻址空间的大小是固定的,因此当调整后的显卡内存值增加时,可以减小操作系统能够访问的可用内存值,当调整后的显卡内存值减小时,可以增加操作系统能够访问的可用内存值。本实施例中,根据显卡类型对显卡占用的内存值进行调整,进而根据调整后的显卡内存值设置操作系统能够访问的可用内存值,由于操作系统的整个寻址空间的大小是固定的,因此可以通过对显卡占用的内存的调整来实现对操作系统能够访问的可用内存的调整,从而能够灵活修改和调整操作系统的可用内存占用量。实施例二:图2是本发明实施例二提供的一种内存分配方法的流程图,图2示例的内存分配方法的执行主体可以是计算机或者计算机的一个功能模块,具体包括步骤s201至s203,详述如下:s201、获取操作系统当前使用的显卡的显卡类型,其中,显卡类型包括独立显卡和集成显卡。显卡类型包括独立显卡和集成显卡,独立显卡是指将显示芯片、显存及其相关电路单独做在一块电路板上,自成一体而作为一块独立的板卡存在,它需占用主板的扩展插槽,如pci-e(pciexpress)总线接口;集成显卡是指将显示芯片、显存及其相关电路都集成在主板上,与其融为一体的元件,集成显卡也称为板载显卡。具体地,在开机时获取操作系统当前使用的显卡的显卡类型,判断当前使用的显卡是独立显卡还是集成显卡。通常情况下,独立显卡和集成显卡不会同时被使用,要么使用独立显卡,要么使用集成显卡。s202、判断当前使用的显卡的显卡类型。具体地,若当前使用的显卡的显卡类型为集成显卡,则执行步骤s203;若当前使用的显卡的显卡类型为独立显卡,则执行步骤s205。s203、将独立显卡对应的内存值减少第一预设值。具体地,如果当前使用的显卡的显卡类型是集成显卡,则分配给独立显卡的内存空间将会被闲置,这块内存空间由于不会被使用而浪费,因此可以减少独立显卡对应的内存值,减少的数量为第一预设值,第一预设值具体可以根据实际应用的需要进行设置,优选地,第一预设值可以是独立显卡对应的内存值,即将独立显卡对应的内存值减为0。s204、将第一预设值添加到操作系统能够访问的可用内存值中。具体地,将步骤s203中从独立显卡对应的内存值中减去的第一预设值添加到操作系统能够访问的可用内存值中,使得操作系统能够访问的可用内存值增加,同时流程跳转到步骤s207。s205、将集成显卡对应的内存值减少第二预设值。具体地,如果当前使用的显卡的显卡类型是独立显卡,则分配给集成显卡的内存空间将会被闲置,这块内存空间由于不会被使用而浪费,因此可以减少集成显卡对应的内存值,减少的数量为第二预设值,第二预设值具体可以根据实际应用的需要进行设置,并且第二预设值和第一预设值可以相同也可以不相同,优选地,第二预设值可以是集成显卡对应的内存值,即将集成显卡对应的内存值减为0。s206、将第二预设值添加到操作系统能够访问的可用内存值中。具体地,将步骤s205中从集成显卡对应的内存值中减去的第二预设值添加到操作系统能够访问的可用内存值中,使得操作系统能够访问的可用内存值增加。s207、根据调整后显卡内存值和操作系统能够访问的可用内存值,进行内存初始化。显卡内存值包括独立显卡对应的内存值和集成显卡对应的内存值。具体地,操作系统根据调整后的显卡内存值和可用内存值,对内存空间进行地址分配和属性设置等初始化过程,由于显卡内存值减少,同时可用内存值增加,使得操作系统在运行过程中可以对调整后的可用内存空间进行动态分配和使用,提高了内存使用率。进一步地,操作系统为32位操作系统。为了更好的理解本发明实施例,下面对32位windows操作系统的内存分配过程进行详细说明。32位操作系统的内存寻址空间是从00000000h到ffffffffh,即4gb的范围,但是即使使用了4gb的内存条,实际上能被操作系统访问到的可用内存值通常都会小于4gb,只有3.25gb,这是因为在4gb的内存空间中,需要为各种设备预留一定的内存空间,包括tseg(top-segment)、gfxgtt(graphicsforceexpressgraphicstranslationtable)、gfxstolen(graphicsforceexpressstolen)和osinvisiblereclaim等,并且预留的内存空间总值为0.75gb即778mb,分别为:tseg=8mb,gfxgtt=2mb,gfxstolen=256mb,osinvisiblereclaim=512mb。其中,gfxstolen是集成显卡使用的内存,osinvisiblereclaim是pcie配置空间(pcieconfigurationspace),pcie配置空间是为包括独立显卡在内的各种pci设备预留的内存空间,通常认为512mb的pcie配置空间中有256mb的空间预留给独立显卡使用。因此操作系统能够访问的可用内存值为4gb-0.75gb=3.25gb,3.25gb的可用内存值是在开机时的固件处理过程中通过设置寄存器tolud(topoflowusabledram)的值确定的,tolud标识了在4gb的内存地址范围内可以访问的物理内存的地址的顶端,在开机的固件处理过程中tolud会被写入一个固定的值d0000000h,即3.25g,就是说从00000000h到d0000000h的地址范围是操作系统可以访问的可用内存的范围。通常情况下独立显卡和集成显卡不会同时被使用,要么使用独立显卡,要么使用集成显卡,但由于独立显卡和集成显卡都被分配了256mb的内存,因此至少有256mb的内存被闲置了。在这种情况下,在开机时判断当前使用的显卡的显卡类型,如果使用的是集成显卡,则将gfxstolen设置为256mb,osinvisiblereclaim设置为256mb,相当于将独立显卡对应的内存全部释放;如果使用的是独立显卡,则将gfxstolen设置为0mb,osinvisiblereclaim设置为512mb,相当于将集成显卡对应的内存全部释放。这样就释放了256mb的内存空间,并且将tolud的值设置为e0000000h,即3.5gb。在固件处理过程结束前这些设置好的内存值会被传给e820表,操作系统通过中断方式获取e820表,根据e820表中的内存值进行内存地址分配和属性设置等内存初始化的操作。这样,在32位的windows操作系统中,可用内存值就从3.25gb提升到了3.5gb。本实施例中,判断当前使用的显卡的显卡类型,如果当前使用的显卡为集成显卡,则减少独立显卡对应的内存值,如果当前使用的显卡为独立显卡,则减少集成显卡对应的内存值,并将减少掉的内存值添加到操作系统能够访问的可用内存值中,使得操作系统能够访问的可用内存值增加,从而提高操作系统的可用内存的使用率。实施例三:图3是本发明实施例三提供的一种内存分配装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分。图3示例的一种内存分配装置可以是图1对应的实施例一提供的内存分配方法的执行主体,其可以是计算机或者计算机的一个功能模块。图3示例的一种内存分配装置包括:获取模块31、调整模块32和设置模块33。各功能模块详细说明如下:获取模块31,用于获取操作系统当前使用的显卡的显卡类型,其中,显卡类型包括独立显卡和集成显卡;调整模块32,用于根据获取模块31获取到的显卡类型对预设的显卡内存值进行调整,其中,显卡内存值包括独立显卡对应的内存值和集成显卡对应的内存值;设置模块33,用于根据调整模块32调整后的显卡内存值设置操作系统能够访问的可用内存值。本实施例提供的一种内存分配装置中各模块实现各自功能的过程,具体可参考前述图1所示实施例的描述,此处不再赘述。从上述图3示例的一种内存分配装置可知,本实施例中,根据显卡类型对显卡占用的内存值进行调整,进而根据调整后的显卡内存值设置操作系统能够访问的可用内存值,由于操作系统的整个寻址空间的大小是固定的,因此可以通过对显卡占用的内存的调整来实现对操作系统能够访问的可用内存的调整,从而能够灵活修改和调整操作系统的可用内存占用量。实施例四:图4是本发明实施例四提供的一种内存分配装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分。图4示例的一种内存分配装置可以是图2对应的实施例二提供的内存分配方法的执行主体,其可以是计算机或者计算机的一个功能模块。图4示例的一种内存分配装置包括:获取模块41、调整模块42和设置模块43。各功能模块详细说明如下:获取模块41,用于获取操作系统当前使用的显卡的显卡类型,其中,显卡类型包括独立显卡和集成显卡;调整模块42,用于根据获取模块41获取到的显卡类型对预设的显卡内存值进行调整,其中,显卡内存值包括独立显卡对应的内存值和集成显卡对应的内存值;设置模块43,用于根据调整模块42调整后的显卡内存值设置操作系统能够访问的可用内存值。进一步地,调整模块42包括:第一调整子模块421,用于若获取模块41获取到的显卡类型为集成显卡,则将独立显卡对应的内存值减少第一预设值;第二调整子模块422,用于若获取模块41获取到的显卡类型为独立显卡,则将集成显卡对应的内存值减少第二预设值。进一步地,设置模块43包括:第一设置子模块431,用于若获取模块41获取到的显卡类型为集成显卡,则将第一调整子模块421减少的第一预设值添加到操作系统能够访问的可用内存值中;第二设置子模块432,用于若获取模块41获取到的显卡类型为独立显卡,则将将第二调整子模块421减少的第二预设值添加到操作系统能够访问的可用内存值中。进一步地,该内存分配装置还包括:初始化模块44,用于根据调整模块42调整后的显卡内存值和设置模块43调整后的可用内存值,进行内存初始化。进一步地,该操作系统为32位操作系统。本实施例提供的一种内存分配装置中各模块实现各自功能的过程,具体可参考前述图2所示实施例的描述,此处不再赘述。从上述图4示例的一种内存分配装置可知,本实施例中,判断当前使用的显卡的显卡类型,如果当前使用的显卡为集成显卡,则减少独立显卡对应的内存值,如果当前使用的显卡为独立显卡,则减少集成显卡对应的内存值,并将减少掉的内存值添加到操作系统能够访问的可用内存值中,使得操作系统能够访问的可用内存值增加,从而提高操作系统的可用内存的使用率。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每一个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同或者相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。值得注意的是,上述装置实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。本领域普通技术人员可以理解,实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如rom/ram、磁盘或光盘等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1