【技术实现步骤摘要】
本专利技术涉及数据交换技术,尤其涉及一种用户态与内核态共享内存的管理方法和装置。装直。
技术介绍
随着互联网(Internet)的迅猛发展,内核态进程和用户态进程之间的数据交互越来越频繁,并且交互的数据量越来越大。内核态进程和用户态进程各自使用自己的地址空间,两个状态看到的虚拟地址空间是分离的,内核态进程和用户态进程之间的数据交互需要专门的机制例如共享内存机制来实现。在共享内存机制中,通过将一段物理内存同时映射到内核态地址空间和用户态地址空间,来实现内核态进程和用户态进程之间的数据通信。内存映射完成后,内核态进程和用户态进程分别会获得共享内存的基地址(虚拟地址)和长度。由于内核态进程和用户态进程所获取的基地址是不同的,所以要是使用传统的链表内保存共享内存中内存对象的起始地址(虚拟地址)的方法来动态管理共享内存,就无法解决用户态进程和内核态进程通用的问题。具体地,现有技术中主要提供如下两种方案来进行共享内存的管理。方案一一次性映射一大块共享内存,然后静态为使用者(内核态进程或用户态进程)分配共享内存空间,即不管使用者最终使用多少内存,统一给使用者分配一定数量的内存。该方案的缺点在于1、如果使用者最终使用的内存小于为其分配的内存,会浪费内存;2、如果使用者最终使用的内存大于为其分配的内存,将导致内存越界,破坏其他内存使用者存储的信息;3、不利于内存的回收和重新使用。方案二不同使用者(内核态进程或用户态进程)各自映射所需的共享内存,使用后将其释放,下次使用再重新映射。该方案的缺点在于每次内核态进程和用户态进程交互数据都需要进行共享内存的映射,这样增大了系统的开 ...
【技术保护点】
一种用户态与内核态共享内存的管理方法,其特征在于,包括:将预定长度的物理内存作为共享内存分别映射到用户态地址空间和内核态地址空间,映射完成后,用户态进程和内核态进程在各自的地址空间分别得到共享内存的基地址;将多个伪链表的头节点保存到共享内存的最后区域,其中,伪链表的节点的结构包括对象类型和伪链表中下一个节点的起始地址相对于基地址的偏移,且每种对象类型对应一种长度的内存对象;根据使用者需要申请内存的大小,从所述多个伪链表中选取一个伪链表,从所选取的伪链表中选取一个或多个节点,将选取的一个或多个节点对应的内存对象分配给该使用者,并将选取的一个或多个节点从所选取的伪链表中摘除,其中,所述使用者为内核态进程或用户态进程,所述使用者能够将自己的基地址加上所分配的内存对象的起始偏移得到内存对象的起始地址,并根据所述起始地址对所述内存对象进行操作。
【技术特征摘要】
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...
【专利技术属性】
技术研发人员:赵丹,
申请(专利权)人:杭州迪普科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。