内存管理方法和装置与流程

文档序号:11590229阅读:293来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种内存管理方法和装置。
背景技术
::vxworks操作系统是美国风河公司设计开发的一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分,应用广泛。其中,基于无互锁流水线级的微处理器(millioninstructionspersecond,简称mips)架构的vxworks操作系统,通常关联实时处理(realtimeprocess,简称rtp)组件,rtp组件使得应用程序相互独立,互不影响,增加了内核的稳定性。vxworks操作系统通过内存管理单元(memorymanagementunit,简称mmu)管理内存,由于vxworks操作系统关联了rtp组件,所以,vxworks操作系统在sysphysmemdesc表中只能添加大于内存映射起始地址local_mem_local_adrs之上的内存作为vxworks操作系统的内存池,其中,sysphysmemdesc表存储有内存的虚拟地址和物理地址的映射关系。vxworks操作系统添加mmu之后,local_mem_local_adrs的默认值为0xc0000000,由于vxworks操作系统中c编译语言只能使用32位地址,限制了在0xc0000000之上虚拟地址最大为1g,即,vxworks操作系统最大只能实现1g的内存寻址。然而,32位地址的最大寻址范围可以达到4g,现有的vxworks操作系统的内存构成方式,极大地限制了vxworks操作系统的内存寻址范围。技术实现要素:本发明提供一种内存管理方法和装置,可以增大mips架构下vxworks操作系统的内存寻址范围。本发明提供的内存管理方法,包括:将无互锁流水线级的微处理器mips架构中大于内存映射起始地址的第 一预设大小的内存的地址信息添加到虚拟物理地址映射表中;其中,所述地址信息包括内存的虚拟地址和物理地址之间的映射关系;将所述mips架构中小于所述内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个传输后备缓冲器tlb表项中;将所述第一预设大小的内存与所述第二预设大小的内存构成操作系统的内存池。本发明提供的内存管理装置,包括:第一内存添加模块,用于将无互锁流水线级的微处理器mips架构中大于内存映射起始地址的第一预设大小的内存的地址信息添加到虚拟物理地址映射表中;其中,所述地址信息包括内存的虚拟地址和物理地址之间的映射关系;第二内存添加模块,用于将所述mips架构中小于所述内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个传输后备缓冲器tlb表项中;内存管理模块,用于将所述第一预设大小的内存与所述第二预设大小的内存构成操作系统的内存池。本发明提供一种内存管理方法和装置,其中,内存管理方法包括:将mips架构中大于内存映射起始地址的第一预设大小的内存的地址信息添加到虚拟物理地址映射表中,将mips架构中小于所述内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个tlb表项中,将所述第一预设大小的内存与所述第二预设大小的内存构成操作系统的内存池。本发明提供的内存管理方法,通过将虚拟物理地址映射表和tlb表相结合,使得vxworks操作系统的内存池也包括了小于内存映射起始地址的内存,增大了mips架构下vxworks操作系统的内存寻址范围。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例一提供的内存管理方法的流程图;图2为本发明实施例二提供的内存管理方法的流程图;图3为本发明实施例一提供的内存管理装置的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明提供的内存管理方法和装置,主要是基于mips架构的vxworks操作系统实现的,本发明实施例提供的内存管理方法和装置,均以基于mips架构的vxworks操作系统的内存管理为例进行说明。图1为本发明实施例一提供的内存管理方法的流程图。如图1所示,本实施例提供的内存管理方法,可以包括:步骤101、将mips架构中大于内存映射起始地址的第一预设大小的内存的地址信息添加到虚拟物理地址映射表中。其中,地址信息包括内存的虚拟地址和物理地址之间的映射关系。在本步骤中,内存映射起始地址用local_mem_local_adrs表示,目前,vxworks操作系统添加mmu之后,local_mem_local_adrs默认设置为0xc0000000,当然也可以是mips架构设置的其他值。vxworks操作系统中虚拟物理地址映射表用sysphysmemdesc表示,vxworks操作系统关联rtp组件,sysphysmemdesc只能存储local_mem_local_adrs之上的内存的虚拟地址和物理地址之间的映射关系,以使vxworks操作系统初始化sysphysmemdesc表时,可以建立虚拟地址和物理地址的映射关系。其中,大于内存映射起始地址的第一预设大小的内存可以是虚拟地址连续的内存,也可以是虚拟地址不连续的内存,本实施例对此不加以限制。可选的,第一预设大小可以为1g。需要说明的是,本实施例对于vxworks操作系统中的虚拟物理地址映射 表sysphysmemdesc的具体结构不加以限制。下面给出了一种具体的实现方式,在sysphysmemdesc表中可以添加虚拟地址物理地址的映射关系以及内存大小。可选的,虚拟物理地址映射表可以包括至少一个子表项,每个子表项均存储有地址信息。相对应的,第一预设大小的内存可以分割成与各个子表项相对应的大小,每个子表项存储有相应大小的内存的地址信息。其中,各个子表项的大小可以相同,也可以不同,本实施例对此不加以限制。可选的,大于内存映射起始地址的第一预设大小的内存的地址信息也可以同时添加到传输后备缓冲器(translationlookasidebuffer,简称tlb)表项中,但是由于tlb表项的大小和数量受mips架构的限制,当tlb表项不足时,可以在tlb表项中仅存储第一预设大小的内存的地址信息中的部分信息。将大于内存映射起始地址的第一预设大小的内存的地址信息添加到tlb表项中,可以提升地址信息的读取速度。步骤103、将mips架构中小于内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个tlb表项中。其中,小于内存映射起始地址的第二预设大小的内存可以是虚拟地址连续的内存,也可以是虚拟地址不连续的内存,本实施例对此不加以限制。其中,tlb表项的大小和数量根据mips架构的设置值确定,例如:tlb表项可以为128页,每个tlb表项的大小可以为16m,则所有tlb表 项的大小共计为2g,即,所有tlb表项共计可以存储2g大小内存的虚拟地址和物理地址之间的映射关系。需要说明的是,本步骤具体可以通过mips架构或者vxworks操作系统中的库函数实现,也可以通过自定义函数实现,本实施例对此不加以限制。下面给出了一种具体的实现方式,vxworks操作系统中mmu在初始化的时候,通过库函数mmumipspteset和函数mmumipstlbwiredentryset,实现将小于内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个tlb表项中,其中,编译语言采用c语言实现。mmumipspteset(&pte,/*pagetableentry,tlb表项的结构体描述*/(phys_addr)paddr,/*物理地址*/(virt_addr)vaddr,/*虚拟地址*/attributes,/*属性*/true,/*global,tlb的标志位*/pagesize,/*页大小*/null);mmumipstlbwiredentryset((uint32)vaddr,&pte);可选的,本步骤的一种实现方式可以是:根据第二预设大小和tlb表项的大小计算出所需的tlb表项的数量。将第二预设大小的内存按照tlb表项的大小进行分段,将各分段内存的地址信息添加到各tlb表项中。例如:第二预设大小为1g,每项tlb表项为16m,则存储1g内存的地址信息共需要1g/16m=64项tlb表项,将1g内存按照16m进行分段,共分为64段,然后将64个分段内存的地址信息分别添加到64项tlb表项中。步骤105、将第一预设大小的内存与第二预设大小的内存构成操作系统的内存池。在本步骤中,vxworks系统的内存池由两部分构成,分别为大于内存映射起始地址的第一预设大小的内存和小于内存映射起始地址的第二预设大小的内存,由于vxworks系统的内存池也包括了小于内存映射起始地址的内存,相比于现有技术,通过设置第一预设大小与第二预设大小,通过虚拟物 理地址映射表与tlb表相结合,可以使得vxworks操作系统实现大内存,大大增大了mips架构下vxworks操作系统的内存寻址范围。例如:将大于内存映射起始地址的1g内存的地址信息存储在虚拟物理地址映射表sysphysmemdesc中,将小于内存映射起始地址的1g内存的地址信息存储在64个tlb表项中,则vxworks操作系统可以实现2g的寻址范围。需要说明的是,第一预设大小和第二预设大小根据需要进行设置,本实施例对此不具体限制。需要说明的是,将第二预设大小的内存构成操作系统的内存池,具体可以通过mips架构或者vxworks操作系统中的库函数实现,也可以通过自定义函数实现,本实施例对此不加以限制。下面给出了一种具体的实现方式,通过vxworks操作系统的库函数memaddtopool,将第二预设大小的内存添加到vxworks操作系统的内存池中。memaddtopool(0x20000000,/*虚拟地址*/0x20000000);/*内存大小*/本实施例提供了一种内存管理方法,包括:将mips架构中大于内存映射起始地址的第一预设大小的内存的地址信息添加到虚拟物理地址映射表中,将mips架构中小于内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个tlb表项中,将第一预设大小的内存与第二预设大小的内存构成操作系统的内存池。本实施例提供的内存管理方法,通过将虚拟物理地址映射表和tlb表相结合,使得vxworks操作系统的内存池也包括了小于内存映射起始地址的内存,增大了mips架构下vxworks操作系统的内存寻址范围。图2为本发明实施例二提供的内存管理方法的流程图。如图2所示,本实施例提供的内存管理方法,在步骤105之后,还可以包括:步骤107、当驱动调用内存池中的内存时,执行虚拟地址物理地址转换函数获得驱动调用的内存的物理地址或者虚拟地址。在本步骤中,当驱动需要使用vxworks操作系统的内存池中的内存时,通过执行虚拟地址物理地址转换函数获知具体准确的物理地址或者虚拟地址。其中,虚拟地址物理地址转换函数实现了内存的虚拟地址和物理地址之间的转换。由于vxworks操作系统实现了大内存,因而驱动可以使用的内存 增大,扩大了vxworks操作系统的应用范围。可选的,虚拟地址物理地址转换函数包括:虚拟地址到物理地址转换函数或者物理地址到虚拟地址转换函数。执行虚拟地址物理地址转换函数获得驱动调用的内存的物理地址或者虚拟地址,可以包括:根据虚拟地址到物理地址转换函数的第一输入参数,查询虚拟物理地址映射表以及所有tlb表项,获得第一输入参数对应的物理地址;或者,根据物理地址到虚拟地址转换函数的第二输入参数,查询虚拟物理地址映射表以及所有tlb表项,获得第二输入参数对应的虚拟地址。其中,第一输入参数表示驱动调用的内存的起始虚拟地址,第二输入参数表示驱动调用的内存的起始物理地址。需要说明的是,虚拟地址到物理地址转换函数或者物理地址到虚拟地址转换函数,具体可以通过mips架构或者vxworks操作系统中的库函数实现,也可以通过自定义函数实现,本实施例对此不加以限制。下面给出了一种具体的实现方式。其中,虚拟地址到物理地址转换函数具体如下:其中,在上述示例的函数中,均是先查询sysphysmemdesc表中的地址转换,再查询tlb表中的地址转换。需要说明的是,本实施例对于在虚拟物理地址映射表以及所有tlb表项中查询地址信息,并不限定各个表的查询顺序。本实施例提供了一种内存管理方法,通过将虚拟物理地址映射表和tlb表相结合,增大了mips架构下vxworks操作系统的内存寻址范围,扩大了 vxworks操作系统的应用范围。图3为本发明实施例一提供的内存管理装置的结构示意图。如图3所示,本实施例提供的内存管理装置,用以执行图1或图2所示实施例提供的内存管理方法,可以包括:第一内存添加模块11、第二内存添加模块13和内存管理模块15。第一内存添加模块11,用于将mips架构中大于内存映射起始地址的第一预设大小的内存的地址信息添加到虚拟物理地址映射表中。其中,地址信息包括内存的虚拟地址和物理地址之间的映射关系。第二内存添加模块13,用于将mips架构中小于内存映射起始地址的第二预设大小的内存的地址信息添加到至少一个tlb表项中。内存管理模块15,用于将第一预设大小的内存与第二预设大小的内存构成操作系统的内存池。可选的,虚拟物理地址映射表包括至少一个子表项,子表项存储有地址信息。可选的,第二内存添加模块13具体用于:根据第二预设大小和tlb表项的大小计算出所需的tlb表项的数量。将第二预设大小的内存按照tlb表项的大小进行分段,将各分段内存的地址信息添加到各tlb表项中。可选的,还可以包括:内存调用模块17。内存调用模块17,用于当驱动调用内存池中的内存时,执行虚拟地址物理地址转换函数获得驱动调用的内存的物理地址或者虚拟地址。可选的,虚拟地址物理地址转换函数包括:虚拟地址到物理地址转换函数或者物理地址到虚拟地址转换函数。内存调用模块17具体用于:根据虚拟地址到物理地址转换函数的第一输入参数,查询虚拟物理地址映射表以及所有tlb表项,获得第一输入参数对应的物理地址;或者,根据物理地址到虚拟地址转换函数的第二输入参数,查询虚拟物理地址映射表以及所有tlb表项,获得第二输入参数对应的虚拟地址。需要说明的是,第一内存添加模块11、第二内存添加模块13、内存管理模块15和内存调用模块17,具体可以通过mips架构或者vxworks操作 系统中的库函数实现,也可以通过自定义函数实现,本实施例对此不加以限制。本实施例提供了一种内存管理装置,包括:第一内存添加模块、第二内存添加模块和内存管理模块。本实施例提供的内存管理装置,通过将虚拟物理地址映射表和tlb表相结合,使得vxworks操作系统的内存池也包括了小于内存映射起始地址的内存,增大了mips架构下vxworks操作系统的内存寻址范围。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1