CN106168883A - 一种高效的数据组织与访问方法 - Google Patents
一种高效的数据组织与访问方法 Download PDFInfo
- Publication number
- CN106168883A CN106168883A CN201610293687.1A CN201610293687A CN106168883A CN 106168883 A CN106168883 A CN 106168883A CN 201610293687 A CN201610293687 A CN 201610293687A CN 106168883 A CN106168883 A CN 106168883A
- Authority
- CN
- China
- Prior art keywords
- data
- address
- data block
- consumer process
- continuously
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Abstract
本发明公开了一种高效的数据组织与访问方法,采用具有两套虚拟地址进行数据组织;首先用户进程发出组织数据的请求;将用户数据有序依次的存入数据块;然后利用链表将数据块有序的链接在一起;最后为所有的数据块映射连续的虚拟地址空间;返回用户进程。本发明提供的高效的数据组织与访问方法,让数据块拥有两套地址空间,一套连续,一套不连续。利用不连续的虚拟地址进行的数据的插入、删除,无须移动已有数据;利用连续的虚拟地址空间进行数据的高效访问;插入和删除操作不会导致数据物理位置的变化,接近链表的操作速度。数据查找能够利用二分查找等快速算法定位数据。其中,连续的用于高效的访问,离散的可用于高效的组织。
Description
技术领域
本发明涉及数据库领域,特别是一种高效的数据组织与访问方法。
背景技术
在计算机运行过程中,用户进程需要对内存中的数据进行处理。数据在内存中的管理将会直接影响到数据处理的效率,进而影响程序的性能。实现有效的数据管理的关键在于数据存储、组织的方式,不同的数据存储、组织方式会直接影响数据处理的性能。常见的数据处理包括插入、删除、查找、随机访问,数据统计等。通常,用户希望以一种高效的数据存储、组织方式,使得数据处理能在尽可能短的时间内完成。如图1所示,图1为拥有NVM的计算机系统基本结构。
近些年来,出现了一种新型的存储器,即非易失性存储器(NVM)。这种新型存储器可以利用内存总线和中央处理器直接交换数据。与当前内存使用的DRAM介质不同,存储在NVM上的数据即使断电了之后也会保留下来,其存储容量可接近磁盘,并且NVM具有接近DRAM的读写速度。但是,NVM的每个存储单元的使用寿命是有限的,当NVM的存储单元的写入次数超过一个范围时,将可能会导致其无法正确的存储数据。
NVM的出现使得传统DRAM内存的角色发生了变化,在传统内存的功能上增加了存储数据的功能。内存给内存数据管理的方式提出了新的挑战,用户需要一种新型的数据存储组织方法,不仅要求能够快速的进行数据处理,同时能最大限度减少数据处理中的数据写次数,最大限度的保护NVM的寿命。
目前,将数据存储在一个数组中,通常采用数组,数组是一种逻辑上相邻的元素在物理存储上也相邻的结构,数据在内存中的存储空间只有一套虚拟地址。为了使用快速地查找算法(例如二分法)找到数据,需要对数组中的元素进行排序。图2展示了一个简单的数组结构。图2为有序数组,在图2中,每一个方块代表一个存储单元,里面存储了一些数据。这种数组组织方式,使用户可以用二分法快速访问其中任意一个位置上的数据。然而这种数据组织方式也存在巨大的问题,当需要插入或删除一个数据的时候,会产生较大的代价。拿插入操作来说,首先需要利用二分查找得到新数据应该插入的位置P,然后将该位置及其之后所有的数据向后移动一个单位,再将新数据插入到位置P的存储空间中。在此过程中,移动数据需要大量的时间。考虑一个长度N=104的数组,假设新数据的插入位置正好是P=1,那么此时需要一共移动104个元素,这是极其耗时的。如果数据存放在NVM,这样的移动操作会造成大量的NVM单元的擦写。图3为有序数组的插入,图3中灰色的存储单元表示为了在序列中插入数据“3”所擦写的所有数据位置。
因此,现有的组织方法虽然利于二分法数据查找。但是,维护有序数据序列的时间开销很大,更为严重的是在NVM上使用这样的数据组织方式会造成大量的不必要的擦写操作,不仅降低了数据维护的速度,而且缩短了NVM的使用寿命。
主要有以下几个缺点:数据的插入、删除效率低;不适合高速的数据访问,数据查找的效率低;数据的插入删除会造成额外的数据写入,影响NVM寿命;将数据组织在一个链表中,链表中的元素在逻辑上是相邻的,但是其物理位置不一定相邻,数据之间通过指针相互连接,在插入和删除数据时,只需要更改相应的指针即可。如图4所示,图4展示了一个简单的链表结构。使用的链表结构降低了数组插入和删除时的开销,也降低了在NVM上数据移动和擦写。但是链表结构有明显的局限性,就是每次数据查找必须从链表的头指针开始。假如需要访问图4所示链表中数据“10”,那么从链表的头指针开始找,由第一个节点找到第二个节点,依次类推直到第5个节点才能找到数据“10”。因此,链表结构下的数据查询代价很高,有可能需要依次访问整个链表的所有元素,这是非常耗时的。
因此,需要一种能够充分适用于内存的数据存储与组织方式,利用内存的特性解决内存数据管理中的技术问题。
发明内容
本发明的目的是提出一种高效的数据组织与访问方法,该方法解决了传统数据结构在内存中面临的两难问题:连续地址空间的数据搜索迅速,但是数据插入和删除代价大;不连续地址空间的数据搜索慢,但是数据插入和删除的代价小。
本发明的目的是通过以下技术方案来实现的:
本发明提供的一种高效的数据组织与访问方法,其特征在于:采用具有两套虚拟地址进行数据组织;具体步骤如下:
S11:用户进程发出组织数据的请求;
S12:将用户数据有序依次的存入数据块;
S13:利用链表将数据块有序的链接在一起;
S14:为所有的数据块映射连续的虚拟地址空间;
S15:返回用户进程。
进一步,所述步骤S14中为所有的数据块映射连续的虚拟地址空间,具体步骤如下:
S21:用户进程发出连续化数据的请求;
S22:内核进程收到用户进程发出的连续化数据的请求;
S23:内核进程根据进程页表得到相应数据的物理地址;
S24:内核进程申请一段连续的虚拟地址空间;
S25:内核进程为数据创建连续虚拟地址空间对应的页表,与步骤S23中解析到的数据的物理地址进行映射,并将该页表插入到用户进程或内核的页表之中;
S26:返回连续虚拟地址空间的起始地址到用户进程。
进一步,所述步骤S23中从内核虚拟地址空间或者用户虚拟地址空间分配连续的虚拟地址空间,且分配的空间大小大于或等于数据总量的大小。
进一步,还包括数据插入的方法,具体步骤如下:
S31:用户进程请求插入数据D
S32:利用连续虚拟地址定位数据D应插入的数据块K
S33:若数据块K已满,创建一个同等大小的新数据块,将数据放入新数据块中;若未满,将数据放入数据块K,转S36
S34:利用连续虚拟地址定位新数据块应插入的位置,按照链表插入的方式完成数据块的插入
S35:维护数据的连续虚拟地址空间
S36:返回用户进程
进一步,还包括数据删除的方法,具体步骤如下:
S41:用户进程请求删除数据D
S42:利用连续虚拟地址定位数据D存在数据块K
S43:若数据块K中存在D,将其删除,若数据块为空转S44,否则转S46
S44:在数据块链表中删除该数据块
S45:对连续虚拟地址空间进行维护
S46:返回用户进程
进一步,还包括连续虚拟地址维护方法,具体步骤如下:
S51:若用户进程的数据已经连续化,则根据连续虚拟空间的首地址,将该连续的虚拟地址空间释放。
S52:用户进程发出组织连续化数据的请求。
S53:内核进程响应用户进程的请求,完成数据的连续化。
S54:返回起始地址Saddr到用户进程。
进一步,还包括连续虚拟地址维护方法,具体步骤如下:
S62:已知新数据块插入的位置为K,若用户进程的数据尚未连续化,则发出连续化数据的请求。若已连续化,则转S65
S63:内核进程响应用户进程的请求,完成数据的连续化。
S64:返回起始地址Saddr到用户进程,用户进程得到起始地址Saddr且每个数据块拥有两套虚拟地址。
S65:计算第K个数据块在连续虚拟地址空间的虚拟地址Vaddr。
S66:通过进程页表,找到Vaddr对应的页表内容并将其向后移动一个单位,将当前页表项的值设置为新数据块的物理地址。
S67:由于起始虚拟地址未变,直接返回用户进程。
进一步,还包括数据快的访问方法,具体步骤如下:
S71:若用户进程的数据已经连续化,则直接进入S73;否则用户进程发出连续化数据的请求。
S72:内核进程响应用户进程的请求,完成数据的连续化,返回连续虚拟地址空间的起始地址Saddr。
S73:根据数据块的偏移以及每个数据块的大小,得到相应的虚拟地址空间偏移。例如用户要访问第10个数据块,每个数据块的大小为4096字节,那么可以得到地址偏移offset=10*4096=40960字节。
S74:根据连续虚拟空间的起始地址Saddr以及相应的地址偏移offset获得指定数据快的虚拟地址。
S75:利用MMU获得相应的物理地址并通过该地址访问整个数据块的任意数据。
S76:返回相应的数据到用户进程。
进一步,还包括数据的查询方法,具体步骤如下:
S81:若用户进程的数据已连续化,则直接进入S83;否则用户进程发出连续化数据的请求。
S82:内核进程响应用户进程的请求,完成数据的连续化,返回相应的连续虚拟地址空间的起始地址Saddr
S83:根据数据块的大小以及数据的数量,计算连续虚拟地址的结束地址。例如每个数据块的大小为4096B,一共有200个数据块,则可得到虚拟空间的结束地址为Eaddr=Saddr+200*4096
S84:根据用户要查找的数据D,在连续虚拟空间的起始地址Saddr以及结束地址Eaddr之间进行二分查找,得到相应数据的虚拟地址。
S85:利用MMU获得相应的物理地址并通过该地址访问该数据。
S86:返回相应的数据到用户进程。
由于采用了上述技术方案,本发明具有如下的优点:
本发明提供的高效的数据组织与访问方法,让数据块拥有两套地址空间,一套连续,一套不连续。利用不连续的虚拟地址进行的数据的插入、删除,无须移动已有数据;利用连续的虚拟地址空间进行数据的高效访问;插入和删除操作不会导致数据物理位置的变化,接近链表的操作速度。数据查找能够利用二分查找等快速算法定位数据。其中,连续的用于高效的访问,离散的可用于高效的组织。
由于通过连续的虚拟地址空间以及数据快的相对偏移,可以在常数的时间内定位数据所在的虚拟空间地址,不需要通过指针进行寻址,因此,具有更快的数据访问速度;
由于数据拥有连续的虚拟地址空间,在起始地址和种终止之间使用二分查找,可以在对数时间内定位数据的位置,因此,具有更快的查找速度;
由于数据块的分布是离散的,在维护其结构时不需要对真实数据进行移动,并且修改进程页表产生的写操作是在DRAM之中的,因此,延长了NVM的寿命;
由于数据连续的分布在一段虚拟地址空间之中,计算机的缓存策略会将访问位置周围的数据也载入进缓存,加速数据的下一次访问,因此,有效利用了缓存。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
本发明的附图说明如下。
图1为本发明的拥有NVM的计算机系统基本结构。
图2为本发明的有序数组。
图3为本发明的有序数组的插入。
图4为本发明的链表结构。
图5为本发明的含有NVM的计算机系统。
图6为本发明的本发明的数据组织方式。
图7为本发明的数据块链表结构。
图8为本发明的典型的Linux虚拟地址空间。
图9为本发明的虚拟地址映射示意图。
图10为本发明的本发明数据组织空间结构。
图11为本发明的插入新数据块后的组织结构。
图12为本发明的数据的组织流程。
图13为本发明的高效的数据组织流程方法图。
图14为本发明的数据插入流程。
图15为本发明的数据删除流程。
图16为本发明的连续虚拟地址空间的维护-重映射。
图17为本发明的连续虚拟地址维护方法-部分重映射。
图18为本发明的高速的数据访问方法流程(访问指定位置的数据)。
图19为本发明的高速的数据访问方法流程(寻找数据的位置)。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。
实施例1
以下是本实施例提及的缩写具体含义:MMU为Memory Management Unit,存储器管理单元;VAS为Virtual Address Space,虚拟地址空间;PT为Page Table,页表;NVM为Non-Volatile Memory,非易失性存储器;DRAM为Dynamic Random Access Memory,动态随机存取存储器。
如图所示,本实施例提供的一种高效的数据组织与访问方法,采用具有两套虚拟地址进行数据组织;具体步骤如下:
S11:用户进程发出组织数据的请求;
S12:将用户数据有序依次的存入数据块;
S13:利用链表将数据块有序的链接在一起;
S14:为所有的数据块映射连续的虚拟地址空间;
S15:返回用户进程。
所述步骤S11中的数据在RAM上或NVM上;所述步骤S12中的数据满足以下条件:数据块K的数据一定大于数据块K-1的数据。
所述步骤S14中为所有的数据块映射连续的虚拟地址空间,具体步骤如下:
S21:用户进程发出连续化数据的请求;
S22:内核进程收到用户进程发出的连续化数据的请求;
S23:内核进程根据进程页表得到相应数据的物理地址;
S24:内核进程申请一段连续的虚拟地址空间;
S25:内核进程为数据创建连续虚拟地址空间对应的页表,与步骤S23中解析到的数据的物理地址进行映射,并将该页表插入到用户进程或内核的页表之中;
S26:返回连续虚拟地址空间的起始地址到用户进程。
所述步骤S23中从内核虚拟地址空间或者用户虚拟地址空间分配连续的虚拟地址空间,且分配的空间大小大于或等于数据总量的大小。
所述步骤S26中的离散数据设置有两套虚拟地址,一套是连续的虚拟地址,另一套是不连续的虚拟地址。
还包括数据插入的方法,具体步骤如下:
S31:用户进程请求插入数据D
S32:利用连续虚拟地址定位数据D应插入的数据块K
S33:若数据块K已满,创建一个同等大小的新数据块,将数据放入新数据块中;若未满,将数据放入数据块K,转S36
S34:利用连续虚拟地址定位新数据块应插入的位置,按照链表插入的方式完成数据块的插入
S35:维护数据的连续虚拟地址空间
S36:返回用户进程
还包括数据删除的方法,具体步骤如下:
S41:用户进程请求删除数据D
S42:利用连续虚拟地址定位数据D存在数据块K
S43:若数据块K中存在D,将其删除,若数据块为空转S44,否则转S46
S44:在数据块链表中删除该数据块
S45:对连续虚拟地址空间进行维护
S46:返回用户进程
所述步骤S43中当数据块为空时采用立即删除和延后删除,或者当做另一个新的数据块使用。
还包括连续虚拟地址维护方法,具体步骤如下:
S51:若用户进程的数据已经连续化,则根据连续虚拟空间的首地址,将该连续的虚拟地址空间释放。
S52:用户进程发出组织连续化数据的请求。
S53:内核进程响应用户进程的请求,完成数据的连续化。
S54:返回起始地址Saddr到用户进程。
还包括连续虚拟地址维护方法,具体步骤如下:
S62:已知新数据块插入的位置为K,若用户进程的数据尚未连续化,则发出连续化数据的请求。若已连续化,则转S65
S63:内核进程响应用户进程的请求,完成数据的连续化。
S64:返回起始地址Saddr到用户进程,用户进程得到起始地址Saddr且每个数据块拥有两套虚拟地址。
S65:计算第K个数据块在连续虚拟地址空间的虚拟地址Vaddr。
S66:通过进程页表,找到Vaddr对应的页表内容并将其向后移动一个单位,将当前页表项的值设置为新数据块的物理地址。
S67:由于起始虚拟地址未变,直接返回用户进程。
还包括数据快的访问方法,具体步骤如下:
S71:若用户进程的数据已经连续化,则直接进入S73;否则用户进程发出连续化数据的请求。
S72:内核进程响应用户进程的请求,完成数据的连续化,返回连续虚拟地址空间的起始地址Saddr。
S73:根据数据块的偏移以及每个数据块的大小,得到相应的虚拟地址空间偏移。例如用户要访问第10个数据块,每个数据块的大小为4096字节,那么可以得到地址偏移offset=10*4096=40960字节。
S74:根据连续虚拟空间的起始地址Saddr以及相应的地址偏移offset获得指定数据快的虚拟地址。
S75:利用MMU获得相应的物理地址并通过该地址访问整个数据块的任意数据。
S76:返回相应的数据到用户进程。
还包括数据的查询方法,具体步骤如下:
S81:若用户进程的数据已连续化,则直接进入S83;否则用户进程发出连续化数据的请求。
S82:内核进程响应用户进程的请求,完成数据的连续化,返回相应的连续虚拟地址空间的起始地址Saddr
S83:根据数据块的大小以及数据的数量,计算连续虚拟地址的结束地址。例如每个数据块的大小为4096B,一共有200个数据块,则可得到虚拟空间的结束地址为Eaddr=Saddr+200*4096
S84:根据用户要查找的数据D,在连续虚拟空间的起始地址Saddr以及结束地址Eaddr之间进行二分查找,得到相应数据的虚拟地址。
S85:利用MMU获得相应的物理地址并通过该地址访问该数据。
S86:返回相应的数据到用户进程。
实施例2
本实施例提供的高效的数据组织与访问方法,提高了在内存数据管理及各类操作中最大程度的保护NVM的寿命。
在拥有NVM存储介质的计算机系统中,NVM与CPU通过内存总线直接相连。用户的计算 机中NVM存储设备拥有大量的数据,可能通过链表或数组等方式组织在了一起,用户希望能够实现数据的快速插入,查找,删除等数据处理操作,并尽可能延长NVM的寿命。
如图5所示,图5为含有NVM的计算机系统,在该场景下,本实施例提出的方法组织数据的方式如图6所示,图6为数据组织方式,在图6中,每一个数据块表示一群数据的集合,其物理存储空间相邻,但可以无序存储。数据块的大小要求是4096字节的整数倍,数据块之间以链表的形式组织在一起。因此,数据块拥有一套不连续的虚拟地址空间,这便于数据的插入删除等操作。本发明的新颖之处在于数据块同时拥有两套虚拟地址,除了上述的不连续 的虚拟地址以外,本发明方法还为其分配了一套连续的虚拟地址,能使数据块具有随机访问以及高效查找的特性。
本实施对内存数据组织的方式进行了改进,即数据拥有两套虚拟地址,一套是不连续的,而另一套是连续的。不连续的虚拟地址便于数据的插入与删除,连续的虚拟地址使数据具有随机访问及高效查找的特性。
本实施例还提供了一种新的数据访问方式,利用连续虚拟地址空间和数据偏移进行随机访问,利用离散的虚拟地址空间进行数据的插入以及删除。
如图7所示,本实施例按数据块为单位来组织数据,每一个数据块里面含有多个数据且记录了这些数据所处范围,即数据块内部数据的最大值以及最小值。整个数据块的虚拟地址空间是连续的,内部数据的存储可以无序也可以有序,要求每个数据块的大小是4096字节的整数倍。数据块以链表的形式组织在一起,数据块之间有序,即第K个数据块的最大元素小于第K+1个数据块的最小元素。数据块虽然在逻辑上是相邻的,但事实上其在虚拟地址空间里的地址是完全乱序的,图7中展示了部分数据块的虚拟地址。图7为数据块链表结构,为了增强该数据的查询性能,本实施例为数据块创建了另一套连续的虚拟地址空间。在Linux操作系统中,每一个进程都有自己的虚拟地址空间,而虚拟地址空间又划分成了不同的部分,图8即为一个典型的Linux进程的虚拟地址空间。如图8所示,图8为一个典型的Linux虚拟地址空间,其中,内核虚拟地址空间是由操作系统负责进行管理,用户虚拟地址空间可以由进程运行的时候进行动态的管理。本发明为所需要管理的数据结构在用户虚拟地址空间中申请了一段连续的虚拟地址空间;如图9所示,图9为虚拟地址映射示意图,为了使用户进程通过该连续虚拟地址空间也能访问到相应的数据块数据,需要建立虚拟地址与物理地址之间的关联。如图9所示,左边是在用户空间中申请的虚拟地址空间,右面是每个数据块对应的物理页。中间部分是进程页表(省略了页全局目录),它是虚拟空间的具体表现形式。其中左边的是页上级目录(Page Upper Directory),中间的是中级目录(PageMiddle Directory), 右边的是页面表(Page Table Entry)。页面表中的每一项与一个物理页进行映射。本发明将每一个数据块按链表顺序与连续的虚拟地址进行映射,也就是将数据块的物理地址写入相应的PTE项目中,图9中展示了部分数据块关联后的结果,将该过程成为连续化数据。
如10所示,图10为数据组织空间结构,本实施例为所有的数据块分配了一组连续的虚拟地址空间,并保留了原有的离散虚拟地址。也就是说,上述每一个数据块将拥有两个地址,所有数据块所构成的数据空间也将有两套虚拟地址,其中一套是离散的,使得数据块具有链表的优点,另一套是连续的,使得数据块具有数组的优点。
事实上,从连续的虚拟地址空间的角度来说,上述由数据块组成的链表就是一个数组,因此具有随机访问的特性,并且可以使用二分查找的方法快速定位数据块。定位到一个具体的数据块后,用户可以利用自己的算法完成数据的快速访问。由于数据都在一个数据块内,因此可以充分利用到缓存加速访问。总的来说,本方法具有接近数组的查询性能。
对于数据的插入与删除,在大部分情况下,可将数据直接插入到已经存在的数据块中,在此过程中可以利用连续的虚拟地址进行快速查找。
如11所示,图11为插入新数据块后的组织结构,在一些极少数的情况下,可能会需要插入一个新的数据块(例如数据块已满)以容纳更多的数据。此时可利用连续虚拟地址空间进行二分查找,快速定位新数据块应该插入的位置,按照链表的方式插入该数据块(利用了离散的虚拟地址)。由于连续虚拟地址空间尚未和新数据块建立映射关系,因此需要对连续虚拟地址空间的映射关系进行更新维护,本发明提供了两种方法,具体在本节之后分别介绍。需要说明的是,这种情况发生的情况发生很少,因此对平均每一次插入数据所需要的代价很小。此外,在插入时同样不需要对已有的数据块或数据进行移动,减少了NVM的写入。
如图12所示,图12为数据的组织流程,本实施例还提供了一种数据的组织方法,具体步骤如下:
组织的数据有用两套虚拟地址,一套是不连续的,另一套是连续的,在数据的组织过程中需要建立两套虚拟地址,具体的方法如下:
S1:用户进程发出组织数据的请求
S2:将用户数据有序的依次放入数据块
S3:利用链表将数据块有序的链接在一起
S4:为所有的数据块映射连续的虚拟地址空间
S5:返回用户进程
如图13所示,图13为高效的数据组织流程方法图。
在映射连续虚拟地址空间过程中,使用了进程页表(Page Table)、NVM、内存管理系统、MMU等系统组件。其中MMU是系统的硬件,页表是系统虚拟地址空间的表现形式,在64位系统中通常分为4级,在32位系统中通常只使用两级页表。具体的步骤如下:
S1:用户进程发出组织数据的请求,这里的数据可以是在RAM上或者NVM上,具体取决于用户进程的需求。
S2:内核进程收到用户进程发出的连续化数据的请求
S3:内核进程根据进程页表对数据的虚拟地址空间进行解析,得到相应数据的物理地址(在此过程中利用了MMU)
S4:内核进程申请一段连续的虚拟地址空间。这里的空间可以是用户虚拟地址空间或内核虚拟地址空间。此外,申请的连续虚拟地址空间的大小可以刚好和数据的总大小一样,也可以比数据大小的总和还要大。
S5:内核进程为数据创建连续虚拟地址空间对应的页表,与S3中解析到的数据的物理地址进行映射,并将该页表插入到用户进程或内核的页表之中。
S6:返回连续虚拟地址空间的起始地址到用户进程,此时用户进程的数据将拥有两套虚拟地址,原本的一套是离散的,新申请的一套是连续的。我们称当前的数据已经连续化。
图14数据插入流程,本发明采用数据块组织数据且拥有两套虚拟地址,在极少数情况下,插入数据的时候可能需要新的数据块插入,需要同时对两套虚拟地址进行维护,所述的数据插入的方法,具体方法如下:
S1:用户进程请求插入数据D;
S2:利用连续虚拟地址定位数据D应插入的数据块K;
S3:若数据块K已满,创建一个同等大小的新数据块,将数据放入新数据块中;若未满,将数据放入数据块K,转S6;
S4:利用连续虚拟地址定位新数据块应插入的位置P,按照链表插入的方式完成数据块的插入;
S5:维护数据的连续虚拟地址空间;
S6:返回用户进程。
图15为数据删除流程,数据删除的方法与数据插入方法不同的是,数据删除时如果造成数据块为空的时候可以不直接删除该数据块,可以将其用来存储其他的数据,或者延后一段时间在将其删除。本发明以直接删除数据块为例,删除数据的具体方式如下:
S1:用户进程请求删除数据D;
S2:利用连续虚拟地址定位数据D存在数据块K;
S3:若数据块K中存在D,将其删除,若数据块为空转S4,否则转S6;
S4:在数据块链表中删除该数据块;
S5:对连续虚拟地址空间进行维护;
S6:返回用户进程。
图16连续虚拟地址空间的维护-重映射,连续虚拟地址维护方法(重映射),本实施例提供了两种更新维护连续虚拟地址空间的方法,第一种方法是重映射连续虚拟地址空间,其具体步骤如下:
S1:若用户进程的数据已经连续化,则根据连续虚拟空间的首地址,将该连续的虚拟地址空间释放。
S2:用户进程发出组织连续化数据的请求。
S3:内核进程响应用户进程的请求,完成数据的连续化。
S4:返回起始地址Saddr到用户进程。
图17为连续虚拟地址维护方法-部分重映射,同时,还包括连续虚拟地址维护方法即部分重映射,第二种方法是只重映射部分虚拟地址空间,该方法仅适用于1中S4申请了比数据总量还要大的虚拟空间地址的情况,其具体的方法如下:
S2:已知新数据块插入的位置为K,若用户进程的数据尚未连续化,则发出连续化数据的请求。若已连续化,则转S5
S3:内核进程响应用户进程的请求,完成数据的连续化。
S4:返回起始地址Saddr到用户进程,用户进程得到起始地址Saddr且每个数据块拥有两套虚拟地址。
S5:计算第K个数据块在连续虚拟地址空间的虚拟地址Vaddr。
S6:通过进程页表,找到Vaddr对应的页表内容并将其向后移动一个单位,将当前页表项的值设置为新数据块的物理地址。
S7:由于起始虚拟地址未变,直接返回用户进程即可。
如图18所示,图18为高速的数据访问方法流程(访问指定位置的数据),数据快的访问方法(随机访问)
S1:若用户进程的数据已经连续化,则直接进入S3;否则用户进程发出连续化数据的请求。
S2:内核进程响应用户进程的请求,完成数据的连续化,返回连续虚拟地址空间的起始地址Saddr。
S3:根据数据块的偏移以及每个数据块的大小,得到相应的虚拟地址空间偏移。例如用户要访问第10个数据块,每个数据块的大小为4096字节,那么可以得到地址偏移offset=10*4096=40960字节。
S4:根据连续虚拟空间的起始地址Saddr以及相应的地址偏移offset获得指定数据快的虚拟地址。
S5:利用MMU获得相应的物理地址并通过该地址访问整个数据块的任意数据。
S6:返回相应的数据到用户进程。
图19高速的数据访问方法流程(寻找数据的位置),数据的查询方法具体如下:
S1:若用户进程的数据已连续化,则直接进入S3;否则用户进程发出连续化数据的请求。
S2:内核进程响应用户进程的请求,完成数据的连续化,返回相应的连续虚拟地址空间的起始地址Saddr
S3:根据数据块的大小以及数据的数量,计算连续虚拟地址的结束地址。例如每个数据块的大小为4096B,一共有200个数据块,则可得到虚拟空间的结束地址为Eaddr=Saddr+200*4096
S4:根据用户要查找的数据D,在连续虚拟空间的起始地址Saddr以及结束地址Eaddr之间进行二分查找,得到相应数据的虚拟地址。
S5:利用MMU获得相应的物理地址并通过该地址访问该数据。
S6:返回相应的数据到用户进程。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求 范围当中。
Claims (9)
1.一种高效的数据组织与访问方法,其特征在于:采用具有两套虚拟地址进行数据组织;具体步骤如下:
S11:用户进程发出组织数据的请求;
S12:将用户数据有序依次的存入数据块;
S13:利用链表将数据块有序的链接在一起;
S14:为所有的数据块映射连续的虚拟地址空间;
S15:返回用户进程。
2.如权利要求1所述的高效的数据组织与访问方法,其特征在于:所述步骤S14中为所有的数据块映射连续的虚拟地址空间,具体步骤如下:
S21:用户进程发出连续化数据的请求;
S22:内核进程收到用户进程发出的连续化数据的请求;
S23:内核进程根据进程页表得到相应数据的物理地址;
S24:内核进程申请一段连续的虚拟地址空间;
S25:内核进程为数据创建连续虚拟地址空间对应的页表,与步骤S23中解析到的数据的物理地址进行映射,并将该页表插入到用户进程或内核的页表之中;
S26:返回连续虚拟地址空间的起始地址到用户进程。
3.如权利要求1所述的高效的数据组织与访问方法,其特征在于:所述步骤S23中从内核虚拟地址空间或者用户虚拟地址空间分配连续的虚拟地址空间,且分配的空间大小大于或等于数据总量的大小。
4.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括数据插入的方法,具体步骤如下:
S31:用户进程请求插入数据D
S32:利用连续虚拟地址定位数据D应插入的数据块K
S33:若数据块K已满,创建一个同等大小的新数据块,将数据放入新数据块中;若未满,将数据放入数据块K,转S36
S34:利用连续虚拟地址定位新数据块应插入的位置,按照链表插入的方式完成数据块的插入
S35:维护数据的连续虚拟地址空间
S36:返回用户进程 。
5.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括数据删除的方法,具体步骤如下:
S41:用户进程请求删除数据D
S42:利用连续虚拟地址定位数据D存在数据块K
S43:若数据块K中存在D,将其删除,若数据块为空转S44,否则转S46
S44:在数据块链表中删除该数据块
S45:对连续虚拟地址空间进行维护
S46:返回用户进程 。
6.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括连续虚拟地址维护方法,具体步骤如下:
S51:若用户进程的数据已经连续化,则根据连续虚拟空间的首地址,将该连续的虚拟地址空间释放。
S52:用户进程发出组织连续化数据的请求。
S53:内核进程响应用户进程的请求,完成数据的连续化。
S54:返回起始地址Saddr到用户进程。
7.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括连续虚拟地址维护方法,具体步骤如下:
S62:已知新数据块插入的位置为K,若用户进程的数据尚未连续化,则发出连续化数据的请求。若已连续化,则转S65
S63:内核进程响应用户进程的请求,完成数据的连续化。
S64:返回起始地址Saddr到用户进程,用户进程得到起始地址Saddr且每个数据块拥有两套虚拟地址。
S65:计算第K个数据块在连续虚拟地址空间的虚拟地址Vaddr。
S66:通过进程页表,找到Vaddr对应的页表内容并将其向后移动一个单位,将当前页表项的值设置为新数据块的物理地址。
S67:由于起始虚拟地址未变,直接返回用户进程。
8.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括数据快的访问方法,具体步骤如下:
S71:若用户进程的数据已经连续化,则直接进入S73;否则用户进程发出连续化数据的请求。
S72:内核进程响应用户进程的请求,完成数据的连续化,返回连续虚拟地址空间的起始地址Saddr。
S73:根据数据块的偏移以及每个数据块的大小,得到相应的虚拟地址空间偏移。例如用户要访问第10个数据块,每个数据块的大小为4096字节,那么可以得到地址偏移offset=10*4096=40960字节。
S74:根据连续虚拟空间的起始地址Saddr以及相应的地址偏移offset获得指定数据快的虚拟地址。
S75:利用MMU获得相应的物理地址并通过该地址访问整个数据块的任意数据。
S76:返回相应的数据到用户进程。
9.如权利要求1所述的高效的数据组织与访问方法,其特征在于:还包括数据的查询方法,具体步骤如下:
S81:若用户进程的数据已连续化,则直接进入S83;否则用户进程发出连续化数据的请求。
S82:内核进程响应用户进程的请求,完成数据的连续化,返回相应的连续虚拟地址空间的起始地址Saddr
S83:根据数据块的大小以及数据的数量,计算连续虚拟地址的结束地址。例如每个数据块的大小为4096B,一共有200个数据块,则可得到虚拟空间的结束地址为Eaddr=Saddr+200*4096
S84:根据用户要查找的数据D,在连续虚拟空间的起始地址Saddr以及结束地址Eaddr之间进行二分查找,得到相应数据的虚拟地址。
S85:利用MMU获得相应的物理地址并通过该地址访问该数据。
S86:返回相应的数据到用户进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610293687.1A CN106168883A (zh) | 2016-05-05 | 2016-05-05 | 一种高效的数据组织与访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610293687.1A CN106168883A (zh) | 2016-05-05 | 2016-05-05 | 一种高效的数据组织与访问方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106168883A true CN106168883A (zh) | 2016-11-30 |
Family
ID=57359270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610293687.1A Pending CN106168883A (zh) | 2016-05-05 | 2016-05-05 | 一种高效的数据组织与访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106168883A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885347A (zh) * | 2017-10-27 | 2018-04-06 | 深圳前海茂佳软件科技有限公司 | 遥控驱动方法、装置及计算机可读存储介质 |
CN109271457A (zh) * | 2018-11-19 | 2019-01-25 | 郑州云海信息技术有限公司 | 一种数据同步方法及装置 |
CN111694765A (zh) * | 2020-06-05 | 2020-09-22 | 重庆大学 | 一种面向移动应用特征的非易失性内存文件系统多粒度空间管理方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581108A (zh) * | 2003-07-31 | 2005-02-16 | 深圳市中兴通讯股份有限公司南京分公司 | 一种具有内存保护功能的内存管理方法 |
US20120233285A1 (en) * | 2011-03-10 | 2012-09-13 | Fujitsu Limited | Storage medium, information processing apparatus, and migration method |
CN103544090A (zh) * | 2013-10-16 | 2014-01-29 | 北京航空航天大学 | 虚拟机进程监控方法和装置 |
CN104636186A (zh) * | 2015-01-27 | 2015-05-20 | 华为技术有限公司 | 虚拟机内存管理方法、物理主机、pcie设备及其配置方法以及迁移管理设备 |
CN104679440A (zh) * | 2013-11-29 | 2015-06-03 | 深圳市国微电子有限公司 | 一种闪存阵列管理方法及装置 |
CN105389128A (zh) * | 2015-11-06 | 2016-03-09 | 成都华为技术有限公司 | 一种固态硬盘数据存储方法及存储控制器 |
CN105468543A (zh) * | 2014-09-11 | 2016-04-06 | 中兴通讯股份有限公司 | 一种保护敏感信息的方法及装置 |
-
2016
- 2016-05-05 CN CN201610293687.1A patent/CN106168883A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581108A (zh) * | 2003-07-31 | 2005-02-16 | 深圳市中兴通讯股份有限公司南京分公司 | 一种具有内存保护功能的内存管理方法 |
US20120233285A1 (en) * | 2011-03-10 | 2012-09-13 | Fujitsu Limited | Storage medium, information processing apparatus, and migration method |
CN103544090A (zh) * | 2013-10-16 | 2014-01-29 | 北京航空航天大学 | 虚拟机进程监控方法和装置 |
CN104679440A (zh) * | 2013-11-29 | 2015-06-03 | 深圳市国微电子有限公司 | 一种闪存阵列管理方法及装置 |
CN105468543A (zh) * | 2014-09-11 | 2016-04-06 | 中兴通讯股份有限公司 | 一种保护敏感信息的方法及装置 |
CN104636186A (zh) * | 2015-01-27 | 2015-05-20 | 华为技术有限公司 | 虚拟机内存管理方法、物理主机、pcie设备及其配置方法以及迁移管理设备 |
CN105389128A (zh) * | 2015-11-06 | 2016-03-09 | 成都华为技术有限公司 | 一种固态硬盘数据存储方法及存储控制器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885347A (zh) * | 2017-10-27 | 2018-04-06 | 深圳前海茂佳软件科技有限公司 | 遥控驱动方法、装置及计算机可读存储介质 |
CN107885347B (zh) * | 2017-10-27 | 2022-05-03 | 深圳前海茂佳软件科技有限公司 | 遥控驱动方法、装置及计算机可读存储介质 |
CN109271457A (zh) * | 2018-11-19 | 2019-01-25 | 郑州云海信息技术有限公司 | 一种数据同步方法及装置 |
CN111694765A (zh) * | 2020-06-05 | 2020-09-22 | 重庆大学 | 一种面向移动应用特征的非易失性内存文件系统多粒度空间管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628753B (zh) | 内存空间管理方法和装置 | |
CN107153707B (zh) | 一种针对非易失内存的哈希表构建方法及系统 | |
US7761648B2 (en) | Caching method for NAND flash translation layer | |
CN103838853B (zh) | 一种基于不同存储介质的混合文件系统 | |
CN111125447A (zh) | 一种元数据访问方法、装置、设备及可读存储介质 | |
US20050015557A1 (en) | Nonvolatile memory unit with specific cache | |
CN104238962B (zh) | 向缓存中写入数据的方法及装置 | |
US20090300276A1 (en) | Enhanced data access in a storage device | |
CN100541453C (zh) | 大容量缓存实现方法及存储系统 | |
KR102440128B1 (ko) | 통합된 객체 인터페이스를 위한 메모리 관리 장치, 시스템 및 그 방법 | |
CN112000846B (zh) | 基于gpu分组lsm树索引的方法 | |
CN107016100A (zh) | 一种基于非易失性内存文件系统的元数据管理方法 | |
CN105975587A (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
CN111400306B (zh) | 基于rdma与非易失性内存的基数树访问系统 | |
US20150324281A1 (en) | System and method of implementing an object storage device on a computer main memory system | |
CN108052541B (zh) | 基于多级页表目录结构的文件系统的实现、访问方法、终端 | |
US10365849B2 (en) | Dual granularity dynamic mapping with packetized storage | |
Lee et al. | An efficient index buffer management scheme for implementing a B-tree on NAND flash memory | |
CN106055679A (zh) | 一种多层次缓存感知型索引方法 | |
CN106168883A (zh) | 一种高效的数据组织与访问方法 | |
KR102321346B1 (ko) | 대용량 ssd 장치를 위한 데이터 저널링 방법 | |
US8156126B2 (en) | Method for the allocation of data on physical media by a file system that eliminates duplicate data | |
Li et al. | A new dynamic hash index for flash-based storage | |
CN111338569A (zh) | 一种基于直接映射的对象存储后端优化方法 | |
CN116501760A (zh) | 一种内存与前缀树相结合的高效分布式元数据管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161130 |
|
RJ01 | Rejection of invention patent application after publication |