1.本技术涉及数据拷贝技术领域,特别是涉及一种实现数据零拷贝的方法、装置、计算机设备和存储介质。
背景技术:2.大数据时代背景下,各行业对存储业务的需求不断增长,存储系统的业务量增长对存储系统的性能提出了新的挑战。存储系统中io(输入输出)的处理经过多层协议栈,有大量的数据拷贝和校验,有的甚至还是对大块数据的处理,在数据的转发处理流程中,同一个数据往往经历多次copy(拷贝),但随着拷贝次数的增多,导致数据出现错误的概率增大,且数据处理量增大。零拷贝技术可以减少或避免数据的copy次数,目前的零拷贝技术多是基于某个协议的处理,没有针对整个系统中的设计,只能实现部分数据的零拷贝。而且现有的内存管理方式仅能实现针对内存页的数据存储管理,并不能有效应用在数据拷贝管理中,即便是采用了非连续页的动态内存管理方法,在数据拷贝过程中,也是根据内存页标识查找出数据对应存储的内存页,将这些内存页整体拷贝,仍然无法实现数据的零拷贝。
3.因此,针对数据拷贝技术领域,如何设置一种实现数据零拷贝的方法、装置、计算机设备和存储介质成为亟待解决的技术问题。
技术实现要素:4.基于此,有必要针对上述技术问题,提供一种实现数据零拷贝的方法、装置、计算机设备和存储介质,能够解决目前数据存储过程中出现数据拷贝次数的增多,导致数据出现错误的概率增大,且数据处理量增大,仍然无法实现数据的零拷贝的技术问题。
5.一方面,提供一种实现数据零拷贝的方法,所述方法包括:
6.对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
7.在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
8.在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
9.在其中一个实施例中,在所述被拷贝数据完成数据拷贝处理后,还包括:
10.在读取所述被拷贝数据时,通过所述被拷贝数据对应保存的内存页编号来获得这些数据的内存页地址,通过内存页地址直接读取对应内存页的数据。
11.在其中一个实施例中,在读取所述被拷贝数据后,还包括:
12.在修改所述被拷贝数据时,对存储所述被拷贝数据的所有内存页逐一执行写操作;如果该内存页的引用计数为一,则直接修改该内存页的数据并保存;如果该内存页的引用计数大于一,则定义该内存页为旧内存页,申请一个引用计数为零的内存页作为新内存
页,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
13.在其中一个实施例中,在读取所述被拷贝数据后,还包括:
14.在修改所述被拷贝数据时,若所述被拷贝数据对应保存的所有内存页的引用计数均为一,则直接修改该内存页的数据并保存;若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存。
15.在其中一个实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
16.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
17.将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
18.然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
19.在其中一个实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
20.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
21.将旧内存页的数据对应拷贝至新内存页中,将新内存页的引用计数加一,将旧内存页的引用计数减一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后在新内存页中进行数据修改并保存。
22.在其中一个实施例中,在所述被拷贝数据完成数据拷贝处理后,还包括:
23.在释放一片内存时,将被释放的内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果内存页的引用计数减一后不为零,则不释放该内存页。
24.另一方面,提供了一种实现数据零拷贝的装置,所述装置包括:
25.内存管理模块,用于对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
26.内存申请模块,用于在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
27.拷贝管理模块,用于在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
28.再一方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
29.对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存
页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
30.在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
31.在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
32.又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
33.对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
34.在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
35.在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
36.上述实现数据零拷贝的方法、装置、计算机设备和存储介质,通过在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝,实现了数据零拷贝。该内存零拷贝方法基于内存管理机制实现了系统层面的零拷贝技术,不依赖于具体业务模块和协议的数据结构,可以应用在整个存储协议栈系统中。在系统层面实现零拷贝,提高系统整体的数据处理速度,提升了整个系统的性能。
附图说明
37.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
38.图1为一个实施例中实现数据零拷贝的方法的流程示意图;
39.图2为另一个实施例中实现数据零拷贝的方法的流程示意图;
40.图3为一个实施例中若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存步骤的流程示意图;
41.图4为另一个实施例中若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存步骤的流程示意图;
42.图5为一个实施例中实现数据零拷贝的装置的结构框图;
43.图6为一个实施例中计算机设备的内部结构图。
具体实施方式
44.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对
本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
45.如背景技术所述,目前的零拷贝技术多是基于某个协议的处理,没有针对整个系统中的设计,只能实现部分数据的零拷贝。而且现有的内存管理方式仅能实现针对内存页的数据存储管理,并不能有效应用在数据拷贝管理中,即便是采用了非连续页的动态内存管理方法,在数据拷贝过程中,也是根据内存页标识查找出数据对应存储的内存页,将这些内存页整体拷贝,仍然无法实现数据的零拷贝。
46.为解决上述问题,本发明实施例中创造性的提出了一种实现数据零拷贝的方法及系统,通过一个内存管理模块,对管理的内存按照分配单元进行编号,这里的分配单元我们也称之为内存页,即每个内存页都有唯一的编号。除此之外,每个内存页都有一个引用计数,表示该内存页被引用的次数。存储系统各业务模块申请内存时,为其分配实际内存页的同时,也会给出这段内存所对应的内存页的编号,将这些编号按照内存的地址顺序组织起来,返回给内存申请模块。在发生内存拷贝的时候,目的模块拿到的是源地址内存的内存页编号,并将这些内存页的引用计数加一,不必进行数据的拷贝。目的模块在需要访问这些数据时,通过相应的内存页编号即可获得这些数据的内存地址。
47.实施例1
48.如图1所示,具体的,本发明实施例1中的所述实现数据零拷贝的方法包括以下步骤:
49.步骤s1,对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零。
50.步骤s2,在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一。
51.步骤s3,在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
52.如图1所示,在本实施例中,在所述被拷贝数据完成数据拷贝处理步骤s3后,还包括:
53.步骤s4,在读取所述被拷贝数据时,通过所述被拷贝数据对应保存的内存页编号来获得这些数据的内存页地址,通过内存页地址直接读取对应内存页的数据。
54.如图1所示,在本实施例中,在读取所述被拷贝数据步骤s4后,还包括:
55.步骤s5,在修改所述被拷贝数据时,对存储所述被拷贝数据的所有内存页逐一执行写操作;如果该内存页的引用计数为一,则直接修改该内存页的数据并保存;如果该内存页的引用计数大于一,则定义该内存页为旧内存页,申请一个引用计数为零的内存页作为新内存页,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
56.如图1所示,在本实施例中,在所述被拷贝数据完成数据拷贝处理步骤s3后,还包括:
57.步骤s6,在释放一片内存时,将被释放的内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果内存页的引用计数减一后不为零,则不释放该内存页。
58.值得注意的是,步骤s4、步骤s5、步骤s6之间并不严格限定其执行顺序,在可行技术范围内容其步骤顺序可随意调整。
59.本实施例所述的实现数据零拷贝的方法,具体应用在一种存储系统中,实现内存零拷贝,其具体实施过程如下:
60.(一)首先创建一个内存管理模块,对管理的内存按照分配单元进行编号,这里的分配单元我们也称之为内存页,即每个内存页都有唯一的编号。除此之外,每个内存页都有一个引用计数,表示该内存页被引用的次数。内存页的引用计数初始值是零,代表该内存页是空闲页,没有被引用。
61.(二)存储系统各业务模块申请内存时,内存管理模块为其分配实际内存页的同时,也会给出这段内存所对应的内存页的编号,将这些编号按照内存的地址顺序组织起来,返回给内存申请模块,并将这些内存页的引用计数加一。
62.(三)当发生内存拷贝的时候,目的模块拿到的是源地址内存的内存页编号,并将这些内存页的引用计数加一,不必进行数据的拷贝,也就不必分配新的内存。目的模块在需要访问这些数据时,通过相应的内存页编号就可以获得这些数据的内存地址。
63.(四)在对一个内存页执行写操作时,如果该内存页的引用计数为1,则代表该内存页只被一个模块使用,可以直接修改该内存的数据;如果该内存页的引用计数大于1,则代表该内存页被多个模块使用,此时需要申请一个新的内存页,将新内存页的引用计数加一,并将该模块记录旧内存页编号的位置更新为新内存页的编号,然后将需要更新的数据写入新内存页中,没有发生更新的数据直接从旧内存页中copy过来,最后将旧内存页的引用计数减一,表示解除了该模块对旧内存页的引用。
64.(五)在执行读操作时,可以直接读取数据,没有额外的处理。
65.(六)在释放一片内存时,将该内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果不为零,说明还有其它模块引用该内存页,不做释放操作。
66.实施例2
67.在实施例2中包含了实施例1的大部分技术特征,其差异在于,实施例2的在修改所述被拷贝数据时,并不是如实施例1步骤s5那样对存储所述被拷贝数据的所有内存页逐一执行写操作,而是从整体角度考虑,通过内置闪存先修改内容后拷贝修改的数据进行保存。
68.具体的,如图2所示,在本实施例中,在读取所述被拷贝数据步骤s4后,还包括:
69.步骤s7,在修改所述被拷贝数据时,若所述被拷贝数据对应保存的所有内存页的引用计数均为一,则直接修改该内存页的数据并保存;若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存。
70.值得注意的是,步骤s4、步骤s7、步骤s6之间并不严格限定其执行顺序,在可行技术范围内容其步骤顺序可随意调整。
71.如图3所示,在本实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意
一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,具有包括:
72.步骤s71,定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
73.步骤s72,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
74.步骤s73,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
75.实施例3
76.在实施例3中包含了实施例2的大部分技术特征,其差异在于,实施例2的在修改所述被拷贝数据时,并不是如实施例2步骤s7那样通过内置闪存先修改内容后拷贝修改的数据进行保存,而是先在后台拷贝需修改的内容至新的内存页,然后在新的内存页中修改内容并保存。
77.具体的,如图4所示,在本实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
78.步骤s701,定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
79.步骤s702,将旧内存页的数据对应拷贝至新内存页中,将新内存页的引用计数加一,将旧内存页的引用计数减一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
80.步骤s703,然后在新内存页中进行数据修改并保存。
81.上述实现数据零拷贝的方法中,通过在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝,实现了数据零拷贝。该内存零拷贝方法基于内存管理机制实现了系统层面的零拷贝技术,不依赖于具体业务模块和协议的数据结构,可以应用在整个存储协议栈系统中。在系统层面实现零拷贝,提高系统整体的数据处理速度,提升了整个系统的性能。
82.应该理解的是,虽然图1-图4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-图4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
83.在一个实施例中,如图5所示,提供了一种实现数据零拷贝的装置10,包括:内存管理模块1、内存申请模块2、拷贝管理模块3、读取数据模块4、修改数据模块5和释放内存模块6。
84.所述内存管理模块1用于对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零。
85.所述内存申请模块2用于在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一。
86.所述拷贝管理模块3用于在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
87.所述读取数据模块4用于在读取所述被拷贝数据时,通过所述被拷贝数据对应保存的内存页编号来获得这些数据的内存页地址,通过内存页地址直接读取对应内存页的数据。
88.在一个实施例中,所述修改数据模块5用于在修改所述被拷贝数据时,对存储所述被拷贝数据的所有内存页逐一执行写操作;如果该内存页的引用计数为一,则直接修改该内存页的数据并保存;如果该内存页的引用计数大于一,则定义该内存页为旧内存页,申请一个引用计数为零的内存页作为新内存页,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
89.在一个实施例中,所述修改数据模块5用于在修改所述被拷贝数据时,若所述被拷贝数据对应保存的所有内存页的引用计数均为一,则直接修改该内存页的数据并保存;若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存。
90.在其中一个本实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
91.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
92.将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
93.然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
94.在另一个本实施例中,所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
95.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
96.将旧内存页的数据对应拷贝至新内存页中,将新内存页的引用计数加一,将旧内存页的引用计数减一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后在新内存页中进行数据修改并保存。
97.在本实施例中,所述释放内存模块6用于在释放一片内存时,将被释放的内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果内存页
的引用计数减一后不为零,则不释放该内存页。
98.上述实现数据零拷贝的装置中,通过在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝,实现了数据零拷贝。该内存零拷贝方法基于内存管理机制实现了系统层面的零拷贝技术,不依赖于具体业务模块和协议的数据结构,可以应用在整个存储协议栈系统中。在系统层面实现零拷贝,提高系统整体的数据处理速度,提升了整个系统的性能。
99.关于实现数据零拷贝的装置的具体限定可以参见上文中对于实现数据零拷贝的方法的限定,在此不再赘述。上述实现数据零拷贝的装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
100.在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储实现数据零拷贝的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种实现数据零拷贝的方法。
101.本领域技术人员可以理解,图6中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
102.在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
103.对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
104.在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
105.在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
106.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
107.在所述被拷贝数据完成数据拷贝处理后,还包括:
108.在读取所述被拷贝数据时,通过所述被拷贝数据对应保存的内存页编号来获得这些数据的内存页地址,通过内存页地址直接读取对应内存页的数据。
109.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
110.在读取所述被拷贝数据后,还包括:
111.在修改所述被拷贝数据时,对存储所述被拷贝数据的所有内存页逐一执行写操
作;如果该内存页的引用计数为一,则直接修改该内存页的数据并保存;如果该内存页的引用计数大于一,则定义该内存页为旧内存页,申请一个引用计数为零的内存页作为新内存页,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
112.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
113.在读取所述被拷贝数据后,还包括:
114.在修改所述被拷贝数据时,若所述被拷贝数据对应保存的所有内存页的引用计数均为一,则直接修改该内存页的数据并保存;若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存。
115.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
116.所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
117.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
118.将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
119.然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
120.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
121.所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
122.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
123.将旧内存页的数据对应拷贝至新内存页中,将新内存页的引用计数加一,将旧内存页的引用计数减一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后在新内存页中进行数据修改并保存。
124.在一个实施例中,处理器执行计算机程序时还实现以下步骤:
125.在所述被拷贝数据完成数据拷贝处理后,还包括:
126.在释放一片内存时,将被释放的内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果内存页的引用计数减一后不为零,则不释放该内存页。
127.关于处理器执行计算机程序时实现步骤的具体限定可以参见上文中对于实现数据零拷贝的的方法的限定,在此不再赘述。
128.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
129.对存储系统中的内存按照分配单元设置唯一的地址并编号;所述分配单元为内存页,每个内存页都有一个引用计数,所述内存页的引用计数初始值设置为零;
130.在内存页中存储数据时,同时获取存储这些数据所有的内存页的编号,并将存储这些数据所有的内存页的引用计数加一;
131.在进行数据拷贝处理时,获取并保存被拷贝数据对应的所有内存页的编号,同时将这些内存页的引用计数分别加一并保存,但不进行这些内存页的数据拷贝;在访问被拷贝数据时,通过保存的内存页编号来获得这些数据的内存页地址。
132.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
133.在所述被拷贝数据完成数据拷贝处理后,还包括:
134.在读取所述被拷贝数据时,通过所述被拷贝数据对应保存的内存页编号来获得这些数据的内存页地址,通过内存页地址直接读取对应内存页的数据。
135.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
136.在读取所述被拷贝数据后,还包括:
137.在修改所述被拷贝数据时,对存储所述被拷贝数据的所有内存页逐一执行写操作;如果该内存页的引用计数为一,则直接修改该内存页的数据并保存;如果该内存页的引用计数大于一,则定义该内存页为旧内存页,申请一个引用计数为零的内存页作为新内存页,将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号,然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
138.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
139.在读取所述被拷贝数据后,还包括:
140.在修改所述被拷贝数据时,若所述被拷贝数据对应保存的所有内存页的引用计数均为一,则直接修改该内存页的数据并保存;若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存。
141.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
142.所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
143.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
144.将新内存页的引用计数加一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编号;
145.然后将旧内存页中需要更新的数据写入新内存页中并保存,将旧内存页中没有发生更新的数据直接从旧内存页对应拷贝至新内存页中,最后将旧内存页的引用计数减一。
146.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
147.所述若所述被拷贝数据对应保存的所有内存页中任意一个内存页的引用计数大于一,则对该内存页的数据进行拷贝后进行修改和保存,包括:
148.定义存储所述被拷贝数据的所有内存页为旧内存页,申请与旧内存页数量相同的引用计数为零的内存页作为新内存页;
149.将旧内存页的数据对应拷贝至新内存页中,将新内存页的引用计数加一,将旧内存页的引用计数减一,并将所述被拷贝数据保存的旧内存页的编号更新为新内存页的编
号,然后在新内存页中进行数据修改并保存。
150.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
151.在所述被拷贝数据完成数据拷贝处理后,还包括:
152.在释放一片内存时,将被释放的内存对应的内存页编号逐个减一,如果内存页的引用计数减一后为零,则释放该内存页;如果内存页的引用计数减一后不为零,则不释放该内存页。
153.关于计算机程序被处理器执行时实现步骤的具体限定可以参见上文中对于实现数据零拷贝的的方法的限定,在此不再赘述。
154.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
155.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
156.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。例如本技术中的所述内存页的引用计数初始值设置为零,在出现数据拷贝处理时或者修改数据时导致的内存页的引用计数加一或减一,其中的零和一为一个概念数值,赋值0或1的计算方式可简化运算,在可行情况下,零也可以为整数n,一也可以为整数m,只要能够准备区分内存页的数据是否被拷贝存在引用关系即可。因此,本技术专利的保护范围应以所附权利要求为准。