CN101882091A - 线程局部存储实现方法和装置 - Google Patents

线程局部存储实现方法和装置 Download PDF

Info

Publication number
CN101882091A
CN101882091A CN 201010205801 CN201010205801A CN101882091A CN 101882091 A CN101882091 A CN 101882091A CN 201010205801 CN201010205801 CN 201010205801 CN 201010205801 A CN201010205801 A CN 201010205801A CN 101882091 A CN101882091 A CN 101882091A
Authority
CN
China
Prior art keywords
tls
thread
register
private data
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 201010205801
Other languages
English (en)
Inventor
程旭
管雪涛
钟祺
吴栋霞
高海斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
JINAN DPSTOR CO Ltd
Peking University
Original Assignee
BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING filed Critical BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority to CN 201010205801 priority Critical patent/CN101882091A/zh
Publication of CN101882091A publication Critical patent/CN101882091A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Hardware Redundancy (AREA)

Abstract

本发明提供了一种线程局部存储实现方法和装置。涉及计算机领域;解决了TLS实现过程中系统内在访问压力大和工作效率低的问题。该方法包括:从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;通过专用操作命令管理所述TLS寄存器。本发明提供的技术方案,适用于多线程执行环境。

Description

线程局部存储实现方法和装置
技术领域
本发明涉及计算机领域,尤其涉及一种线程局部存储(Thread Local Storage,简称TLS)实现方法和装置。
背景技术
线程局部存储是多线程执行环境中,用于保存线程私有数据的存储区域。多线程技术是为了同步完成多个任务,其中多个任务以更加灵活的方式来运行,通过提高资源的使用效率来提高系统的效率。如:网络编程中,当监听到外部连接请求时,主线程会首先产生一个新线程,由新线程来处理具体的数据收发和数据包的解析;而主线程自身则继续监听数据的收发。如果我们使用单线程来实现数据的监听和收发,由于代码的顺序执行,当线程在进行数据收发时就不能处理外部连接请求。此时网卡缓冲区中填满了数据,但其没有得到处理器的响应,那么网卡无法继续工作。显然,用多线程来实现网络请求的监听和数据收发,即使CPU在处理数据收发,仍能被打断并在响应网络请求后继续处理数据收发。这样让计算机系统中的多个部件在同一时刻都处于工作状态,以提高系统的效率。
多个线程在执行时往往需要保存线程私有数据。如:线程在调用库函数,库函数返回时会对errno变量进行设置,表示该调用是否成功。当多个线程均会调用库函数时,需要为每个线程提供一个私有的数据存储区域,以保errno变量仅仅代表本线程调用库函数的结果,而不是表示整个进程中库函数的调用结果。如果errno是全局变量,那么某个线程读取errno时很可能会获取到其它线程调用库函数的结果,导致程序执行错误。
目前,许多系统通过在硬件上增加特殊的存储结构和特殊的指令来实现TLS。譬如:ARM中增加了TLS寄存器,并加入了相应的协处理器指令,可以直接对TLS寄存器进行访问,即线程的私有数据都是存储在TLS寄存器所指向的一片内存中。X86体系结构使用LDT中的一个表项来存放线程的TLS。
此外,在某些未加入特殊硬件支持的处理器中,还可以通过纯软件的方式来实现TLS。例如:在每个线程创建之初,由库函数通过操作系统提供的API为每个线程开辟一段固定的存储空间,并由进程统一维护这些地址空间。当一个线程需要获取TLS中存放数据的时,首先需要通过线程号索引线程私有存储空间的基地址,然后再用偏移加基地址的方式访问私有数据。
发明内容
本发明提供了一种TLS实现方法和装置,解决了TLS实现过程中系统内在访问压力大和工作效率低的问题。
一种TLS实现方法,包括:
从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;
通过专用操作命令管理所述TLS寄存器。
进一步的,所述专用操作命令包括写入命令(set_tls)和读取命令(get_tls),所述写入命令用于向所述TLS寄存器写入数据,所述读取命令用于从所述TLS寄存器读取数据。
进一步的,所述通过专用操作命令管理所述TLS寄存器包括:
通过所述写入命令将当前线程的线程私有数据写入所述TLS寄存器;
通过所述读取命令从所述TLS寄存器中读取当前线程的线程私有数据。
进一步的,上述TLS实现方法还包括:
在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
进一步的,上述TLS实现方法还包括:
在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
本发明还提供了一种TLS实现装置,包括:
寄存器指定模块,用于从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;
TLS管理模块,用于通过专用操作命令管理所述TLS寄存器。
进一步的,所述专用操作命令包括写入命令和读取命令,所述写入命令用于向所述TLS寄存器写入数据,所述读取命令用于从所述TLS寄存器读取数据,所述TLS管理模块包括:
写入单元,用于通过所述写入命令将当前线程的线程私有数据写入所述TLS寄存器;
读取单元,用于通过所述读取命令从所述TLS寄存器中读取当前线程的线程私有数据。
进一步的,上述TLS实现装置还包括:
数据转移模块,用于在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
进一步的,所述数据转移模块,还用于在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
本发明提供的TLS实现方法和装置,本发明的主要思想是选择一个通用寄存器作为TLS寄存器,通过专用操作命令管理所述TLS寄存器,不需要添加额外的硬件寄存器,也不需要占用计算机系统内存,解决了TLS实现过程中系统内在访问压力大和工作效率低的问题。
附图说明
图1为本发明的实施例的应用环境示意图;
图2为本发明的实施例一提供的一种TLS实现方法的流程图;
图3为本发明的实施例中寄存器使用情况示意图;
图4为本发明的实施例二提供的一种TLS实现方法的流程图;
图5为本发明的实施例提供的一种TLS实现装置的结构示意图;
图6为图5中TLS管理模块的结构示意图;
图7为本发明的又一实施例提供的一种TLS实现装置的结构示意图。
具体实施方式
纯软件实现TLS的方式需要调用额外的库函数,并且需要额外地维护每个线程的私有存储区域;相比之下,具有硬件支持的处理器,可直接从寄存器中读取TLS的基地址,并通过偏移访问线程局部数据。所以,具有硬件支持的TLS机制,可以减少通过线程号索引线程局部存储空间的开销,免除进程对这些线程局部地址空间的维护。此外直接对寄存器进行访问,也能够一定程度上减少内存的访问压力。
虽然具有特殊硬件支持的TLS机制,能够减少TLS操作时的开销,但是需要专有的存储结构和特殊的操作指令,即需要修改体系结构加入相应的硬件逻辑。所以,一些较老的体系结构,无法有效地直接使用硬件TLS机制保证多线程执行环境的高效性。
为了解决软件实现TLS时内存访问压力大和硬件实现TLS时系统工作效率低的问题,本发明的实施例提供了一种TLS实现方法。
下面结合附图,对本发明的实施例提供的一种TLS实现方法进行详细介绍。
图1所示为本发明的实施例的应用环境,包括:
编译器101,TLS寄存器102,应用程序103,操作系统104以及由set_tls和get_tls组成的对TLS进行操作的TLS库函数105。
其中,TLS寄存器为处理器的一个通用寄存器。操作系统104和处理器107共同对上下文106进行管理,如上下文切换等。
应用程序103工作在两种不同类型的系统接口上:首先应用程序103可以使用库函数105(即set_tls和get_tls),直接作用于处理器107并访问与TLS寄存器102;其次,应用程序103通过库函数封装的API,并利用操作系统内核的上下文保存机制,将TLS的值保存于线程控制块中。
本发明的实施例一提供了一种TLS实现方法,无需添加额外的硬件TLS寄存器,利用现有的硬件资源,为计算机系统提供了灵活、高效的线程局部数据存储机制。
结合上述应用环境,使用本发明实施例一提供的TLS实现方法在计算机系统中实现TLS的流程如图2所示,包括:
步骤201、从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;
本发明实施例中,处理器的通用寄存器具有多种用途,如图3中的R0这一通用寄存器即为传参寄存器。即,当函数的参数的个数为一个时,该参数的值被放在R0中,函数内部可以直接读取R0获取参数。
处理器的通用寄存器可以为来自于caller save的寄存器,也可以为来自于callee save的寄存器。
本步骤选择的TLS寄存器为R16。被选作TLS寄存器的通用寄存器将不再接受函数库之外命令的操作。
操作系统通过应用程序,对TLS寄存器进行操作。为保证TLS寄存器的专用性,可对操作系统的编译器进行修改,在编译器生成应用程序时,TLS寄存器对其他应用不可见(编译器在生成二进制代码时,对于普通的函数而言,被选出作为TLS寄存器不参与寄存器的分配),只有TLS专用操作命令可以管理操作所述TLS寄存器。
本发明实施例所选择的TLS寄存器可能为一个,也可以为多个,如果只选择一个TLS寄存器,则可在该TLS寄存器中存放指向私有数据内存位置的指针;如果选择多个TLS寄存器,更可以将私有数据直接存储于TLS寄存器中,进一步提高访问效率。
步骤202、通过专用操作命令管理所述TLS寄存器;
本发明实施例中,专用操作命令具体指TLS库函数,包括写入命令(set_tls)和读取命令(get_tls)。set_tls,使用一条mov指令,将R0的内容写入R16;同理,get_tls也是使用一条mov指令,将R16的内容写入R0。
本发明实施例提供了一种TLS实现方法,选择一个通用寄存器作为TLS寄存器,通过专用操作命令管理所述TLS寄存器,在编译器生成应用程序时,应用程序中除了TLS库函数能够显式地操作TLS寄存器外,其余所有与TLS无关的函数均不会使用到TLS寄存器;应用程序中对TLS寄存器的操作均由库中提供的两个函数set_tls和get_tls来实现,不需要添加额外的硬件寄存器,也不需要占用计算机系统内存,解决了TLS实现过程中系统内在访问压力大和工作效率低的问题。
下面结合附图,对本发明的实施例二进行说明。
在上下文切换或进行异常处理时,都需要对TLS寄存器进行操作,使用本发明实施例提供的TLS实现方法完成上下文切换过程中线程私有数据处理的过程如图4所示,包括:
步骤401、在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
在线程换出时或进行异常处理时,由于TLS寄存器(R16)也属于通用寄存器的范畴,操作系统可以使用store指令,依次将所有R16中的全部数据写入当前线程的线程控制块中。
本步骤中,还需要对相应的上下文进行保存。
步骤402、在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
在线程恢复换入时,操作系统依次将该线程的线程控制块中保存的私有线程数据,使用load指令依次写回到TLS寄存器中。
本步骤中,还需要恢复相应的上下文。
本发明的实施例提供了一种TLS实现方法,首先由编译器生成应用程序,应用程序中除了库函数能够显示地操作TLS寄存器外,其余所有与TLS无关的函数均不会使用到TLS寄存器;应用程序中对TLS寄存器的操作均由库中提供的两个函数set_tls和get_tls来实现;在上下文切换时保存并恢复TLS寄存器的内容,确保当前正在执行的线程的线程私有数据一定存放在TLS寄存器中。其中对线程私有数据的保存和恢复操作,都附属与线程上下文的保存和恢复。
所述编译器在基于通用寄存器的轻量级TLS机制中,负责以下功能:控制TLS寄存器的使用。编译器编译并链接所有高级语言的代码,并在汇编时保证TLS寄存器不参与寄存器的分配。即将某个通用寄存器的功能加以限定,其他非TLS相关的指令中的源操作数和目的操作数,都不会使用与TLS绑定的寄存器。
在应用被实例化为线程时,TLS寄存器必须被赋予初值,可以与创建线程私有线程数据一致,也可以在进程创建时由编程人员手动指定。两种方式均是直接对线程控制块进行操作,当某个线程被调度执行时,以线程控制块中的信息初始化TLS寄存器。
本发明的实施例提供的TLS实现方法,引入了基于通用寄存器的轻量级TLS机制,可以高效、灵活地支持多线程的执行环境,特别是对于某些未能在硬件上对TLS直接提供支持的处理器,减少了不必要的索引,避免软件TLS的维护开销。
本发明的实施例还提供了一种TLS实现装置,其结构如图5所示,包括:
寄存器指定模块501,用于从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;
TLS管理模块502,用于通过专用操作命令管理所述TLS寄存器。
进一步的,所述专用操作命令包括写入命令和读取命令,所述写入命令用于向所述TLS寄存器写入数据,所述读取命令用于从所述TLS寄存器读取数据,所述TLS管理模块502的结构如图6所示,包括:
写入单元601,用于通过所述写入命令将当前线程的线程私有数据写入所述TLS寄存器;
读取单元602,用于通过所述读取命令从所述TLS寄存器中读取当前线程的线程私有数据。
进一步的,该装置如图7还包括:
数据转移模块503,用于在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
进一步的,所述数据转移模块503,还用于在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
上述TLS实现装置,可集成于计算机的操作系统中,由处理器控制该TLS实现装置的开启和关闭,以在适当的时候启动使用通用寄存器实现TLS的机制。与本发明的实施例提供的一种TLS实现方法相结合,从处理器的至少一个通用寄存器中,选择一个通用寄存器作为TLS寄存器,通过专用操作命令管理所述TLS寄存器,不需要添加额外的硬件寄存器,也不需要占用计算机系统内存,解决了TLS实现过程中系统内在访问压力大和工作效率低的问题。
本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。
可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现,它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。
上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。

Claims (9)

1.一种线程局部存储实现方法,其特征在于,包括:
从处理器的通用寄存器中,选择至少一个通用寄存器作为线程局部存储(TLS)寄存器;
通过专用操作命令管理所述TLS寄存器。
2.根据权利要求1所述的TLS实现方法,其特征在于,所述专用操作命令包括写入命令(set_tls)和读取命令(get_tls),所述写入命令用于向所述TLS寄存器写入数据,所述读取命令用于从所述TLS寄存器读取数据。
3.根据权利要求2所述的TLS实现方法,其特征在于,所述通过专用操作命令管理所述TLS寄存器包括:
通过所述写入命令将当前线程的线程私有数据写入所述TLS寄存器;
通过所述读取命令从所述TLS寄存器中读取当前线程的线程私有数据。
4.根据权利要求1所述的TLS实现方法,其特征在于,该方法还包括:
在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
5.根据权利根据4所述的TLS实现方法,其特征在于,该方法还包括:
在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
6.一种TLS实现装置,其特征在于,包括:
寄存器指定模块,用于从处理器的通用寄存器中,选择至少一个通用寄存器作为TLS寄存器;
TLS管理模块,用于通过专用操作命令管理所述TLS寄存器。
7.根据权利要求6所述的TLS实现装置,其特征在于,所述专用操作命令包括写入命令和读取命令,所述写入命令用于向所述TLS寄存器写入数据,所述读取命令用于从所述TLS寄存器读取数据,所述TLS管理模块包括:
写入单元,用于通过所述写入命令将当前线程的线程私有数据写入所述TLS寄存器;
读取单元,用于通过所述读取命令从所述TLS寄存器中读取当前线程的线程私有数据。
8.根据权利要求6所述的TLS实现装置,其特征在于,该装置还包括:
数据转移模块,用于在当前线程换出或进行异常处理时,从所述TLS寄存器中读取所述当前线程的线程私有数据,将所述当前线程的线程私有数据存储在该线程对应的线程控制块中。
9.根据权利要求6所述的TLS实现装置,其特征在于,
所述数据转移模块,还用于在线程恢复时,读取所述线程的线程控制块中存储的线程私有数据,将所述线程私有数据写入所述TLS寄存器中。
CN 201010205801 2010-06-22 2010-06-22 线程局部存储实现方法和装置 Pending CN101882091A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010205801 CN101882091A (zh) 2010-06-22 2010-06-22 线程局部存储实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010205801 CN101882091A (zh) 2010-06-22 2010-06-22 线程局部存储实现方法和装置

Publications (1)

Publication Number Publication Date
CN101882091A true CN101882091A (zh) 2010-11-10

Family

ID=43054111

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010205801 Pending CN101882091A (zh) 2010-06-22 2010-06-22 线程局部存储实现方法和装置

Country Status (1)

Country Link
CN (1) CN101882091A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102156632A (zh) * 2011-04-06 2011-08-17 北京北大众志微系统科技有限责任公司 数据访问方法和装置
CN103677750A (zh) * 2013-12-09 2014-03-26 龙芯中科技术有限公司 线程的处理方法和装置
CN105279029A (zh) * 2015-11-24 2016-01-27 无锡江南计算技术研究所 一种基于作业计算资源的局部存储动态分配方法
CN109240702A (zh) * 2018-08-15 2019-01-18 无锡江南计算技术研究所 一种多线程模式下的快速段式编址配置和访问方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040153635A1 (en) * 2002-12-30 2004-08-05 Kaushik Shivnandan D. Privileged-based qualification of branch trace store data
CN101203831A (zh) * 2005-06-23 2008-06-18 英特尔公司 用于增强线程级推测的原语
CN101317155A (zh) * 2005-12-27 2008-12-03 英特尔公司 本地用户级线程数据的数据结构和管理技术

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040153635A1 (en) * 2002-12-30 2004-08-05 Kaushik Shivnandan D. Privileged-based qualification of branch trace store data
CN101203831A (zh) * 2005-06-23 2008-06-18 英特尔公司 用于增强线程级推测的原语
CN101317155A (zh) * 2005-12-27 2008-12-03 英特尔公司 本地用户级线程数据的数据结构和管理技术

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《计算机工程》 20090430 张铎等 基于事务存储的事务级线程切换 第35卷, 第8期 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102156632A (zh) * 2011-04-06 2011-08-17 北京北大众志微系统科技有限责任公司 数据访问方法和装置
CN103677750A (zh) * 2013-12-09 2014-03-26 龙芯中科技术有限公司 线程的处理方法和装置
CN105279029A (zh) * 2015-11-24 2016-01-27 无锡江南计算技术研究所 一种基于作业计算资源的局部存储动态分配方法
CN105279029B (zh) * 2015-11-24 2018-07-06 无锡江南计算技术研究所 一种基于作业计算资源的局部存储动态分配方法
CN109240702A (zh) * 2018-08-15 2019-01-18 无锡江南计算技术研究所 一种多线程模式下的快速段式编址配置和访问方法

Similar Documents

Publication Publication Date Title
US9244883B2 (en) Reconfigurable processor and method of reconfiguring the same
CN101421711B (zh) 用于资源受限设备的虚拟执行系统
US8935698B2 (en) Management of migrating threads within a computing environment to transform multiple threading mode processors to single thread mode processors
US11513801B2 (en) Controlling accesses to a branch prediction unit for sequences of fetch groups
JP5548037B2 (ja) 命令発行制御装置及び方法
US20070150895A1 (en) Methods and apparatus for multi-core processing with dedicated thread management
WO2015024452A1 (zh) 一种分支预测方法及相关装置
US8321874B2 (en) Intelligent context migration for user mode scheduling
CN100533428C (zh) 半导体器件
CN104603749A (zh) 在多线程处理系统中执行子例程
CN102375761A (zh) 业务管理方法和装置、以及设备
CN101004681A (zh) 嵌入式系统动态补丁长跳转的实现方法
US6405234B2 (en) Full time operating system
CN101446918A (zh) 一种实现用户态调试器调试单个函数的方法及系统
CN101819539B (zh) 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法
CN102855121A (zh) 分支处理方法与系统
EP2523099A2 (en) Selective routing of local memory accesses and device thereof
CN101847096B (zh) 包含栈变量函数的优化方法
US20140195790A1 (en) Processor with second jump execution unit for branch misprediction
CN104583941A (zh) 在多线程处理系统中选择性激活恢复检查操作
KR100834180B1 (ko) 프로그램/명령어의 실행을 구동하는 “l”구동법 및그것의 아키텍처와 프로세서
CN101882091A (zh) 线程局部存储实现方法和装置
CN109960589A (zh) 嵌入式系统的系统软件层的实现方法、装置及可读介质
US20140129805A1 (en) Execution pipeline power reduction
JP6400296B2 (ja) マルチモード支援プロセッサ及びマルチモードを支援する処理方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: JI NAN ZHONGZHI INFORMATION TECHNOLOGY CO., LTD. B

Effective date: 20111220

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20111220

Address after: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Applicant after: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

Co-applicant after: Jinan Dpstor Co., Ltd.

Co-applicant after: Peking University

Address before: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Applicant before: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20101110