著录项信息
专利名称 | 一种具有内存保护功能的内存管理方法 |
申请号 | CN03132246.8 | 申请日期 | 2003-07-31 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2005-02-16 | 公开/公告号 | CN1581108 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F12/14 | IPC分类号 | G;0;6;F;1;2;/;1;4;;;G;0;6;F;1;2;/;1;6查看分类表>
|
申请人 | 深圳市中兴通讯股份有限公司南京分公司 | 申请人地址 | 深圳市南山区高新技术产业园科技南路中兴通讯大厦法律部
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中兴通讯股份有限公司 | 当前权利人 | 中兴通讯股份有限公司 |
发明人 | 王芳;李贤平;樊永宁 |
代理机构 | 暂无 | 代理人 | 暂无 |
摘要
本发明提供一种具有内存保护功能的内存管理方法,在具有MMU功能的CPU上进行内存管理;在需要保护的内存两端添加保护页;当有操作访问到所述保护页所在的区域时,实时操作系统确认所述操作为非法修改所述内存的操作,并报告内存访问异常。所述保护页的属性为不可访问。本方法可以在不降低内存访问效率的基础上,提供基于页保护的内存保护功能,并且能够解决因保护内存而引起的浪费内存的问题。由于本方法基本上不降低系统运行效率,同时又不会产生内存浪费,因此可以在设备实际的运行环境中发挥作用,在第一时间捕获到内存越界操作,并保留现场以帮助排错。
技术领域\n本发明涉及一种内存管理方法;尤其是涉及通讯领域中支持内存管理单 元(MMU:Memory Management Unit)的CPU上的内存保护和管理。\n背景技术\n在通讯产品中,很多实时操作系统运行的代码都是C代码,而C代码中 指针是比较有特点的一种数据类型,它虽然能给C语言中代码的设计带来一 定的灵活性,但同时也带来了一些隐患。例如,在系统运行的过程中经常出 现系统故障,这种故障通常的表现是:因某段内存的内容被修改而导致系统 运行异常,可又无法定位是谁修改了这段内存。然而只要使用指针,这种问 题几乎就是无法彻底解决的。因为对于指针来说,只要指向的内存是可写的, 就可以任意更改所指的内存中的内容。为此人们可以做到的,仅是尽量缩小 这种问题的定位范围,以便更快地找到系统运行异常的原因。对于各种不同 的实时操作系统,人们最多想到的就是把一个系统中各个运行实体的访问地 址范围隔离起来。\n在通常的嵌入式系统中,对内存几乎是没有保护的。如图1所示,A区 是指针的安全操作区,本不应该写到B区,但是由于A区和B区地址相连, 在A区操作的指针不经意地写到了B区,由于是无保护的情况,所以B区是 可写的,结果B区中的B1部分内容被改写了。这样当系统需要读取B区的 内容,如果在B1部分读取,就读到了脏数据到C区,有可能导致系统异常。 其中标号1代表写操作,标号2代表读操作。\n所以系统可能经常表现出各种各样的无法定位的问题。比如说,某个变 量突然变成了一个不期望的值,最后只能靠审查代码,凭着经验来大致确定 可能出错的代码,然后用一些数据结构记录一些信息,进行大量的分析,找 到引发问题的原因,很明显,这种方法的缺点就是错误定位周期长,延缓了 产品开发进度。\n当人们意识到系统中必须进行内存保护之后,出现了在某些隔离内存中 写入特殊值,在系统运行过程中,检查这些隔离内存的内容是否被覆盖,以 判断系统中是否有内存越界访问的问题。如图2所示,在A区和B区之间增 加了内存保护带C区,C区是被设置为不可写属性的内存区,这样当在A区 操作的指针如果连续越界,就会写到C区,此时系统会检测到这个非法操作, 报出异常。用户从B区读取到D区的数据是正确的。这种事后分析的方法使 得内存越界访问类型之问题的确定变的相对容易一些,但是其局限性也很大, 最关键的问题是无法在第一时间捕获到内存越界操作,当然也无法准确定位 修改特殊值的操作的位置。\n发明内容\n本发明的目的在于,提供一种具有内存保护功能的内存管理方法,以在 具有MMU功能的CPU上进行内存保护及高效的内存管理。本方法可以在不 降低内存访问效率的基础上,提供基于页保护的内存保护功能,并且能够解 决因保护内存而引起的浪费内存的问题。由于本方法基本上不降低系统运行 效率,同时又不会产生内存浪费,因此可以在设备实际的运行环境中发挥作 用,在第一时间捕获到内存越界操作,并保留现场以帮助排错。\n本发明的技术方案为:\n提供一种具有内存保护功能的内存管理方法,在具有MMU功能的CPU 上进行内存管理;在需要保护的内存两端添加保护页;当有操作访问到所述 保护页所在的区域时,实时操作系统确认所述操作为非法修改所述内存的操 作,并报告内存访问异常。所述保护页的属性为不可访问。\n本发明所述的方法包括以下步骤:获取一块物理内存,利用映射表的对 应关系,将该块物理内存映射至虚拟地址空间;其中:通过所述的映射,使 得在物理地址内存空间中连续的内存块,在虚拟地址内存空间中是不连续的。\n本发明所述的方法包括以下步骤:获取一块物理内存,利用映射表的对 应关系,将该块物理内存映射至虚拟地址空间;其中:通过所述的映射,使 得物理地址内存空间中不连续的内存块,在虚拟地址内存空间中是连续的。\n本发明的有益效果为:原来在物理内存中紧挨着的数据,可以在虚拟地 址中将其隔离开来,并且可以在CPU虚拟地址空间表达范围允许的前提下, 根据系统设计需要对不同的数据设置不同的保护带的大小。内存保护带地址 空间可以看作越界操作敏感区,由于大部分的越界操作都是在数据资源所在 区域边界处发生的,所以在此处暴露越界的概率最大,当然,如果越界的指 针越过了保护带,进入了另一个可写内存区域,这种情况,仍然无法捕捉。 另外,值得注意的是,内存保护带仅仅占用了虚拟地址空间,没有占用系统 可用内存空间,所以内存保护带的大小,是不会造成内存的浪费的。采用本 发明所述方法,与现有技术相比,取得了突破性进步,达到了及时检测到内 存访问越界问题的效果,节省了系统可用内存空间,提高了系统的稳定性。\n附图说明\n图1为无保护的内存越界访问示意图;\n图2为基本MMU保护的内存越界访问示意图;\n图3为本发明中在基本MMU保护基础上的内存越界访问示意图;\n图4为内存保护总体流程图;\n图5为总体流程图中初始化部分流程图;\n图6为总体流程图中封装虚拟地址空间基本操作接口部分流程图;\n图7为总体流程图中系统数据资源保护流程图;\n图8为各级表项的索引过程以及虚拟地址到物理地址的转换过程;\n图9为中央处理单元CPUX86中页目录表项的定义格式;\n图10为CPUX86中页表项的定义格式。\n具体实施方式\n下面结合附图说明本发明的具体实施方式:\n在具有″页″的概念的CPU中,页表是一个不可缺少的重要元素,它和硬 件寻址紧密相关。内存保护的实现简单的说,就是在需要保护的重要内存两 端,添加若干保护页,这些保护页的属性为不可访问,当有操作访问到保护 页所在区域,可认为该操作就有非法修改重要内存的企图,同时,实时操作 系统可以很快的发现并报告内存访问异常,便于及时的发现异常隐患。为了 减少系统内存浪费,设计了一套虚拟内存管理方案如下:\n该设计是基于32位总线系统的,所以其虚拟地址空间是4G,但是通常, 一个实时系统的物理内存一般很难达到这么大。本发明就是充分利用了没有 实际物理内存对应的虚拟地址空间,将这部分虚拟地址空间管理起来,达到 了既有效地保护了重要内存,又降低了系统内存的浪费。从系统中获取一块 物理内存,利用映射表的对应关系,将这块物理内存映射至虚拟地址空间, 由于程序指令的操作,都是按照虚拟地址进行的,所以程序中看似是对虚拟 地址所指的内存操作,实际上是对其映射的物理内存操作。同时,通过这种 映射方式,可以使得在物理地址内存空间中连续的内存块,在虚拟地址内存 空间中是不连续的,同样,也可以使得物理地址内存空间中不连续的内存块, 在虚拟地址内存空间中是连续的。只有对映射了实际物理地址的虚拟地址的 操作是有效的,而对未映射的虚拟地址的操作都是无效的。按照这种思路, 保护带的内存大小,在虚拟地址空间中,是可以设置为多页的,而且保护带 的内存由于没有与实际的物理内存关联,所以是不消耗任何系统内存的。在 虚拟地址空间中,将映射了物理内存的地址空间用来存放重要数据,而在该 地址空间两端留有几页保护带地址空间进行隔离。即使两个重要数据块在物 理内存空间中地址是连续的,由于在虚拟地址空间中,两个重要的数据块之 间有保护带,所以在虚拟地址空间中,地址是不连续的,这样,程序中对一 块重要数据的操作,如果不小心越界,也不会破坏另一块重要数据的内容。 这样就起到了保护的作用。\n为了便于开发,可生成一套虚拟内存操作接口,使得应用无需关心底层 细节而方便的使用虚拟内存。另外,还扩展开发了一套对系统页表操作的接 口,可以方便的进行页表的创建,删除,切换。在多进程系统中,可以通过 页表对各个进程可见的内存范围进行控制,从而达到一个进程不可见另一个 进程的私有数据。从某种角度上来说,也就是对进程的私有内存区域进行了 隔离和保护。\n本发明核心步骤在于:\n第一步:进行必要的初始化工作。\n1)获取支持MMU的CPU中提供的进行地址映射操作必需的数据。\n对于硬件上支持MMU的CPU,运行在其上的操作系统初始化工作主要 是根据CPU的硬件寻址方式,为了能够访问已经存在的物理地址,建立一套 机制。比较典型的过程就是指定一个基址,而虚拟地址提供了偏移。寻址可 以分为多级寻址,如果系统的寻址需要分为n(n>=1)级,系统就需要建立n 级表进行寻址,第n-1级表提供第n级表的基地址,虚拟地址也需要分为n 段,各段对应于各级表的偏移,直至寻址到实际的物理内存地址。需要获取 第一级表的基址,大部分的CPU会将其存放在一个特定的地址或者寄存器里, 这个要参考CPU的硬件手册。\n2)确定系统中尚未映射物理地址的虚拟地址范围。\n目前使用的CPU大部分都是32位的系统总线,所以一个系统的虚拟地 址空间的大小可达4G,而系统中尚未映射的物理地址的虚拟地址范围根据硬 件设计的不同而不同,主要取决于该CPU的内存大小,另外还要考虑到在有 些系统中,会将一些外部存储器或者外部IO(输入输出)设备的访问地址空 间映射在CPU地址空间的情况。\n3)建立组织和管理系统初始化时未映射物理地址的虚拟地址空间的数据 结构。\n建立的数据结构主要是用于将系统中未映射物理地址的虚拟地址空间组 织起来。该数据结构需要包含的信息:\na)所操作的虚拟地址空间的起始地址。\nb)所操作的虚拟地址空间的大小。\nc)所操作的虚拟地址空间的状态,用于表示虚拟地址空间是否被映射 了实际的物理地址。由于各个CPU具有地址空间访问属性设置的最小单元, 所以此处虚拟地址空间的状态要可以表示包含虚拟地址空间中各个最小单元 大小的虚拟地址的状态。\n第二步:封装对虚拟地址空间进行基本操作的接口。\n1)需要封装一套用于获取各级表的表项的接口。\n第1级表项的获取是将第一步中获取的第1级表的基址和虚拟地址中表 示第1级表的偏移部分组合得到表项的地址,从该地址取出第1级表项。\n第n(n>=2)级的表项是从第n-1级的表项中获取第n级表的基址,再和虚 拟地址中表示第n级表的偏移部分组合得到表项的地址,再从该地址获取第n 级表项。\n2)需要封装一套用于创建各级表项的接口。\n由于对于支持MMU的CPU,其上运行的操作系统一般只是创建了和实 际物理地址对应的各级表项,而对于未使用的虚拟地址空间,是没有相应的 各级表项的,这就需要进行创建。\n第n(n>=1)级表项的创建是根据第n级表的基址和虚拟地址中第n级表项 偏移,获取第n级表项的位置,并在此位置上按照第n级表项的格式,填入 第n+1级表的基址,并将表项设置成有效。此时,如果该表项对应的第n+1 级表不存在,需要申请一块内存用于第n+1级表的存放,并将此块内存的首 地址作为第n+1级表的基址填入该表项中。\n3)需要封装一套用于对各级表项的各个域进行设置的接口。\n第n(n>=1)级表的表项中的各个域的设置直接影响了第n级表项的有效性 以及第n+1级表的访问属性。而对表项中各个域中的值进行设置的目的,也 就是为了设置虚拟地址到物理地址的对应关系。设置的过程:根据虚拟地址 中提供的各级表项的偏移和各级表的基址,索引到想要设置的表项,并将该 表项中的域设置为期望的值。需要说明的是,各级表项中,各个域表达的含 义根据CPU的不同会不同,所以设置的期望值应当遵循各个CPU硬件手册上 的赋值规则。\na)虚拟地址到物理地址的映射操作。\n第n(n>=1)级表项中通常包含指示第n+1级表的基址的信息,根据各级表 的基址和虚拟地址提供的各级表项的偏移,级级关联组成了虚拟地址到物理 地址的映射关系,可以通过修改表项中基址域中的值来设定虚拟地址到物理 地址的映射。通常最后一级表项中提供虚拟地址映射的物理地址所在最小单 元的基址,简单的做法,可以将最后一级表项中物理地址的基址设置为期望 的物理地址所在最小单元的基址,进行虚拟地址到物理地址的映射。\nb)虚拟地址到物理地址的解除映射操作。\n第n(n>=1)级表项中通常包含第n级表项是否有效的信息,根据虚拟地址 提供的各级表项的偏移,索引到最后一级表项,将该表项设置为无效,就可 以解除虚拟地址到对应的物理地址之间的映射关系。\nc)虚拟地址对应的物理地址的访问属性的设置。\n第n(n>=1)级表项中通常包含第n+1级表的访问属性,根据虚拟地址提供 的各级表项的偏移,索引到最后一级表项,该表项中包含虚拟地址对应的物 理地址所在最小单元大小的内存的访问属性,通过对该属性的设置,可以将 内存的访问属性设置为只读、读写、只写或者不可访问。\n第三步:对系统中数据资源进行保护。\n对系统中数据资源的保护可以看作两个方面,一个是防止对其他数据的 操作不当导致对数据资源本身的破坏,一个是防止数据资源本身的操作不当 导致对其他数据的破坏。\n1)创建一个管理虚拟地址数据对象。\n该数据对象的数据类型就是第一步中建立的数据结构,用于记录数据资 源所在虚拟地址空间的起始地址,地址空间大小和地址空间中各单元是否映 射了实际物理地址。\n2)在系统未映射物理地址的虚拟地址空间中申请一块地址空间。\n申请的虚拟地址空间的起始地址应该大于等于第一步中确定的系统中尚 未映射物理地址的虚拟地址的起始地址。申请的虚拟地址空间的大小是:数 据资源所占内存的大小+(2*预设保护带大小),如果设:申请的虚拟地 址空间的大小为:CurGetSize,数据资源所占内存的大小为:RealNeedSize,预 设保护带大小为:ProtectSize,则有:\nCurGetSize=RealNeedSize+2*ProtectSize。\n由于对内存属性的设置只能对内存大小为系统地址映射最小单元大小的 整数倍的内存空间进行,所以申请的地址空间的大小必须是系统地址映射的 最小单元大小的整数倍,其中预设保护带大小也应该是系统地址映射的最小 单元大小的整数倍。并在相应管理虚拟地址数据对象中记录申请得到的虚拟 地址空间起始位置和地址空间大小记录,并记录该段虚拟地址为未映射物理 地址状态。\n3)将数据资源所在虚拟地址空间和实际的物理地址空间进行映射。\n从系统实际的物理地址空间申请一块内存,该内存的大小需要大于等于 数据资源所占内存的大小,并且是系统地址映射最小单元大小的整数倍。数 据资源所在虚拟地址空间起始地址取申请的虚拟地址空间起始地址向后偏移 预设保护带大小,从起始地址开始,映射数据资源所占内存大小的虚拟地址 空间到刚才从系统中申请的物理地址上。并在相应的管理虚拟地址数据对象 中记录该段虚拟地址空间状态为已经映射了物理地址的状态。\n4)给用户返回操作该数据资源的起始地址。\n考虑到越界操作大部分是向后越界,返回给用户操作该数据资源的起始 地址可以是从映射了物理地址的虚拟地址空间的后边界处向前偏移实际数据 资源大小处的地址。\n通过此种方式,原来在物理内存中紧挨着的数据,可以在虚拟地址中将 其隔离开来,并且可以在CPU虚拟地址空间表达范围允许的前提下,根据系 统设计需要对不同的数据设置不同的保护带的大小。\n内存保护带地址空间可以看作越界操作敏感区,由于大部分的越界操作 都是在数据资源所在区域边界处发生的,所以在此处暴露越界的概率最大, 当然,如果越界的指针越过了保护带,进入了另一个可写内存区域,这种情 况,仍然无法捕捉。另外,值得注意的是,内存保护带仅仅占用了虚拟地址 空间,没有占用系统可用内存空间,所以内存保护带的大小,是不会造成内 存的浪费的。\n图3是表示将A区映射到A1区,B区映射到B1区,可以看出本来物理 地址相连的A区和B区经过映射之后,在虚拟地址空间中的地址已经不连续 了,中间隔了一个C1区,和图2不同的是,C1区是没有映射物理地址的内 存区,当在A1区操作的指针连续越界的时候,就会写到C1区,此时,系统 就会检测到C1无法访问,同样也会报告系统异常。其中标号3代表映射方向。\n图8表示了各级表项的索引过程以及虚拟地址到物理地址的转换过程。 图6中的各部分接口可以依据此图,索引的相应的表项,并通过修改表项中 的值来实现各个接口的功能。\n现以CPUX86为例,对技术方案的实施作进一步的详细描述:\nCPUX86中的寻址过程如下:1、隐含寻址部分,这部分在系统初始化后, 就已经完成了,隐含寻址部分主要是通过以段选择子为偏移,在描述表里索 引到相应的段选择子,在段选择子中获取段基址。虚拟地址就作为段偏移, 与段基址相加,获得的值称之为线性地址。此处的段基址,在系统中就是0, 所以从数值上看,虚拟地址和线性地址是相等的,所以本例不对虚拟地址和 线性地址加以区分。2、显式寻址部分,这部分分成两级实现,就存在两级表 的概念,一级是页目录表,一级是页表。页目录表提供了页表的基址,页表 提供了物理地址的基址。虚拟地址的第22位到第31位是页目录表的索引, 虚拟地址的第12位到第21位是页表的索引,虚拟地址的第0位到第11位是 物理地址偏移。\n本例的运行环境是VxWorks操作系统,\n第一步:进行必要的初始化工作。\n1)获取支持MMU的CPU中提供的进行地址映射操作必需的数据。\nCPUX86的第1级表是页目录表,页目录表的基址存放在页目录基础寄 存器(PDBR:Page Directory Base Register)中,首先从该寄存器中读取到页 目录表的基址,以此作为以后索引表项和地址映射的基础,这里用PageDbase 表示。\n2)确定系统中尚未映射物理地址的虚拟地址范围。\n在单板上配置的是512M的内存,并且没有外设和外部存储器需要映射 到内存的寻址空间中,所以取未映射物理地址的虚拟地址范围的起始地址为 0x20000000,起始地址用VirAddrStart表示。\n3)建立组织和管理系统初始化时未映射物理地址的虚拟地址空间的数据 结构。\n现定义一个双向链表数据结构如下:\ntypedef struct tagVmemRecord\n{\n WORD32 dwStartPage; /*本虚拟地址节点起始页*/\n WORD32 dwPageNum; /*本虚拟地址节点的页块数*/\n BYTE *pbyPageState; /*本虚拟地址节点中页状态*/\n struct tagVmemRecord *ptPrev; /*后向指针*/\n struct tagVmemRecord *ptNext; /*后向指针*/\n}TV memRecord;\n其中pbyPageState可以表示dwPageNum个页的状态。PbyPageState指向 一块dwPageNum个字节的内存空间,每个字节表示其中1页大小的虚拟地址 空间状态(映射或者没有映射实际物理地址)。\n第二步:封装对虚拟地址空间进行基本操作的接口。\n1)需要封装一套用于获取各级表的表项的接口。\n比如获取第二级表——页表的表项,该接口输入必须包含的信息:页目 录表的基址,虚拟地址。输出就是页表的表项。接口中实现如下:取虚拟地 址的第22位到第31位,作为页目录表的偏移PdOffset,从地址(PageDbase<<12 |PdOffset)处获取页目录表项PdEntry,从PdEntry中获取页表的基址 PageTBase;取虚拟地址的第12位到第21位,作为页表的偏移PtOffset,从 地址(PageTBase<<10|PtOffset)处获取页表项。这里用GetPageTableEntry表示 该接口。\n2)需要封装一套用于创建各级表项的接口。\n比如创建第二级表——页表的表项,前提是该页表表项没有相应的内存 存放,一般是由于相应页表不存在导致,所以表项的创建,实际上就是完成 表的创建。接口的输入包含的信息:页目录的基址,虚拟地址。根据虚拟地 址。输出就是新创建的页表。接口的实现如下:首先使用获取表项的接口, 获取相应的页目录表的表项,此时,此表项一定是无效的;在系统中申请一 块存放新页表的内存,并将申请的内存起始地址(该地址一定要是页边界对 齐的),起始地址的第12位到第31位作为页表基址填入到页目录表项中,页 目录表项定义的格式见图9,将页目录表项中表示页表存在的位P(Present) 置1,其他各个域可以根据用户的需求填入有效值。在新页表的对应于虚拟地 址的页表项处,根据用户的需求,填入各个域的值,页表项定义的格式见图 10,其中的P位表示虚拟地址是否有实际的物理地址对应,如果没有,则需 要将P位置为0。(页基址:Page Base Address;页表基址:Page-Table Base Address)\n3)需要封装一套用于对各级表项的各个域进行设置的接口。\n接口的输入包含信息:页目录表基址,虚拟地址。接口的输入就是用户 期望的表项,接口的实现如下:根据页目录表基址和虚拟地址找到相应的表 项,根据CPUX86手册中规定的表项的格式,根据用户的需求,填入期望值。\n第三步:对系统中数据资源进行保护。\n1)创建一个管理虚拟地址数据对象。\n申明一个类型为TvmemRecord的数据对象,用tVmemRecord表示。\n2)在系统未映射物理地址的虚拟地址空间中申请一块地址空间。\n根据数据资源的大小和预设的保护带的大小,在大于等于VirtAddrStart 的地方CurrentVAddr保留一块空间,假设空间的大小为PageNum页,将 CurrentVAddr,PageNum记录到tVmemRecord中,同时申请一块PageNum个 字节的内存,赋给tVmemRecord的pbyPageState,并将页的状态都标志为未 映射状态。\n3)将数据资源所在虚拟地址空间和实际的物理地址空间进行映射。\n申请一块存放数据资源的内存,假设该物理内存的地址为PhyAddr,将 CurrentVAddr向后偏移一个预设保护带的大小,假设为ProtectSize,根据虚拟 地址(CurrentVAddr+ProtectSize),如果存在,则直接索引到相应的表项,否 则需要创建表项,将其中物理地址域填成PhyAddr的第12位到第31位,并 置表项的P位为1,其他域的赋值略。\n4)给用户返回操作该数据资源的起始地址。\n前面提到,申请的存放数据资源的内存的大小(假设为CurGetSize)是 大于等于实际数据资源所占内存的大小(假设为RealNeedSize)的,将地址 (CurrentVAddr+ProtectSize+CurGetSize-RealNeedSize)返回给用户使 用。\n可见数据资源存放的位置,在虚拟地址空间中,其两侧是未映射物理地 址的,而对于未映射物理地址的空间进行任何操作,操作系统会检测出来, 并立即作为异常报出。此时,对该数据资源从返回的地址开始进行写操作, 写的范围超过RealNeedSize,就可以看见操作系统报Page Fault异常。\n采用本发明所述方法,与现有技术相比,取得了突破性进步,达到了及 时检测到内存访问越界问题的效果,节省了系统可用内存空间,提高了系统 的稳定性等。\n以上具体实施方式仅用于说明本发明,而非用于限定本发明。
法律信息
- 2014-10-01
未缴年费专利权终止
IPC(主分类): G06F 12/14
专利号: ZL 03132246.8
申请日: 2003.07.31
授权公告日: 2006.08.09
- 2006-08-09
- 2005-08-10
专利申请权、专利权的转移专利申请权的转移
<变更事项>地址<变更前权利人>210012江苏省南京市雨花台区紫荆花路68号<变更后权利人>518057深圳市南山区高新技术产业园科技南路中兴通讯大厦法律部<登记生效日>2005.07.15
- 2005-08-10
专利申请权、专利权的转移专利申请权的转移
<变更事项>申请人<变更前权利人>深圳市中兴通讯股份有限公司南京分公司<变更后权利人>中兴通讯股份有限公司<登记生效日>2005.07.15
- 2005-04-20
- 2005-02-16
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |