一种用户态与内核态共享内存的管理方法和装置制造方法及图纸

技术编号:8562900 阅读:192 留言:0更新日期:2013-04-11 04:32
本发明专利技术提供一种用户态与内核态共享内存的管理方法和装置。所述方法包括:将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间;将多个伪链表的头节点保存到共享内存的最后区域;根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除。本发明专利技术能够提高数据的交互效率,同时节约内存。

【技术实现步骤摘要】

本专利技术涉及数据交换技术,尤其涉及一种用户态与内核态共享内存的管理方法和装置。装直。
技术介绍
随着互联网(Internet)的迅猛发展,内核态进程和用户态进程之间的数据交互越来越频繁,并且交互的数据量越来越大。内核态进程和用户态进程各自使用自己的地址空间,两个状态看到的虚拟地址空间是分离的,内核态进程和用户态进程之间的数据交互需要专门的机制例如共享内存机制来实现。在共享内存机制中,通过将一段物理内存同时映射到内核态地址空间和用户态地址空间,来实现内核态进程和用户态进程之间的数据通信。内存映射完成后,内核态进程和用户态进程分别会获得共享内存的基地址(虚拟地址)和长度。由于内核态进程和用户态进程所获取的基地址是不同的,所以要是使用传统的链表内保存共享内存中内存对象的起始地址(虚拟地址)的方法来动态管理共享内存,就无法解决用户态进程和内核态进程通用的问题。具体地,现有技术中主要提供如下两种方案来进行共享内存的管理。方案一一次性映射一大块共享内存,然后静态为使用者(内核态进程或用户态进程)分配共享内存空间,即不管使用者最终使用多少内存,统一给使用者分配一定数量的内存。该方案的缺点在于1、如果使用者最终使用的内存小于为其分配的内存,会浪费内存;2、如果使用者最终使用的内存大于为其分配的内存,将导致内存越界,破坏其他内存使用者存储的信息;3、不利于内存的回收和重新使用。方案二不同使用者(内核态进程或用户态进程)各自映射所需的共享内存,使用后将其释放,下次使用再重新映射。该方案的缺点在于每次内核态进程和用户态进程交互数据都需要进行共享内存的映射,这样增大了系统的开销,降低了内核态进程和用户态进程之间数据交互效率。
技术实现思路
有鉴于此,本专利技术的目的是提供一种用户态与内核态共享内存的管理方法和装置,能够提高数据的交互效率,同时节约内存。为实现上述目的,本专利技术提供技术方案如下一种用户态与内核态共享内存的管理方法,包括将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间,映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。一种用户态与内核态共享内存的管理装置,包括内存映射单元,用于将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间,映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;伪链表建立单元,用于将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;内存分配单元,用于根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。与现有技术相比,本专利技术提供的内核态和用户态共享内存的管理方案,应用于内核态进程和用户态进程之间存在大量数据交互的场合时,可以提高数据的交互效率,同时节约内存。附图说明图1是本专利技术实施例的用户态与内核态共享内存的管理方法流程图;图2是本专利技术实施例中共享内存的构成示意图;图3是本专利技术实施例中普通对象对应的内存结构图;图4是本专利技术实施例中特殊对象对应的内存结构图。具体实施例方式本专利技术实施例提供的用户态与内核态共享内存的管理方法和装置中,是在链表中保存内存对象的起始地址到共享内存的基地址的偏移,这样不管在用户态还是内核态都可以通过各自的基地址加上偏移来获取内存对象的起始地址,进而实现用户态进程和内核态进程共享内存的管理。本专利技术实施例的技术方案能够解决如下技术问题中的至少一个1、内核态进程与用户态进程之间进行大量数据交互时,反复进行共享内存映射,导致数据传输效率低的问题;2、用户态进程和内核态进程共享内存静态分配带来的内存浪费,以及其带来的内存越界问题;3、使用传统链表内保存内存对象起始地址的方法来动态管理共享内存,就无法解决用户态进程和内核态进程通用的问题。以下结合附图对本专利技术进行详细描述。参照图1,本专利技术实施例的用户态与内核态共享内存的管理方法,可以包括如下步骤步骤101,将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间,映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;步骤102,将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;步骤103,根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。上述方法通过伪链表来对共享内存进行管理,使用者(用户态进程和内核态进程)获取到的是内存对象的起始地址到共享内存的基地址的偏移,这样不管在用户态还是内核态都可以通过各自的基地址加上偏移来获取内存对象的起始地址,进而实现用户态进程和内核态进程共享内存的管理。 进一步,为节约内存,上述管理方法还可以包括步骤104,需要对内存对象进行释放时,获取待释放内存对象的起始偏移和大小,根据所述起始偏移和大小将内存对象添加到相应伪链表中的相应节点中。需要说明的是,上述步骤104是为了节约内存而设置的,本领域技术人员可以根据具体需要进行取舍。其中,所述多个伪链表包括节点对应的内存对象的长度为16字节、32字节、64字节、128字节、256字节、512字节、1024字节和2k字节分别对应的16_list伪链表、32_list伪链表、64_list伪链表、128_list伪链表、256_list伪链表、512_list伪链表、1024_list伪链表和free_list伪链表。步骤103中,内存分配的过程可以为当申请的内存的大小大于(1024-4)字节时,则从free_list伪链表选取连续的η个节点,η为整数,具体地,η等于申请的内存的大小除以2k后向上取整;当申请的内存的大小小于或等于(1024-4)字节时本文档来自技高网
...

【技术保护点】
一种用户态与内核态共享内存的管理方法,其特征在于,包括:将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间,映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。

【技术特征摘要】
1.一种用户态与内核态共享内存的管理方法,其特征在于,包括将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间, 映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。2.如权利要求1所述的管理方法,其特征在于,还包括需要对内存对象进行释放时,获取待释放内存对象的起始偏移和大小,根据所述起始偏移和大小将内存对象添加到相应伪链表中的相应节点中。3.如权利要求2所述的管理方法,其特征在于所述多个伪链表包括节点对应的内存对象的长度为16字节、32字节、64字节、128字节、256字节、512字节、1024字节和2k字节分别对应的16_list伪链表、32_list伪链表、 64_list伪链表、128_list伪链表、256_list伪链表、512_list伪链表、1024_list伪链表和 free_list 伪链表。4.如权利要求3所述的管理方法,其特征在于,所述根据使用者需要申请内存的大小, 从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,包括当申请的内存的大小大于(1024-4)字节时,则从free_list伪链表选取连续的η个节点,η为整数;当申请的内存的大小小于或等于(1024-4)字节时,则从除free_list伪链表之外的其他伪链表中选取I个节点,当所述其他伪链表为空,则先从free_list伪链表中选取I个2k 对象进行分割后,将分割得到的多个对象添加到所述其他伪链表中。5.如权利要求3所述的管理方法,其特征在于,还包括当根据所述起始偏移和大小将内存对象添加到相应伪链表中的相应节点中后,若相应伪链表中有多个连续的节点对应的内存对象大小之和为2k,其该多个连续的节点中的第一个节点的起始偏移能够被2k整除,则将这多个连续的节点从相应伪链表中摘除后,将相应的2k内存对象添加到free_list伪链表中。6...

【专利技术属性】
技术研发人员:赵丹
申请(专利权)人:杭州迪普科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1