【技术实现步骤摘要】
一种内存访问管理方法和系统
[0001]本专利技术涉及计算机
,特别涉及一种内存访问管理方法和系统。
技术介绍
[0002]虚拟内存技术是一种在操作系统上广泛使用的技术,它通过使用物理磁盘的存储空间来扩充物理内存的存储空间,从而在操作系统层面来解决程序因内存空间不足而导致程序无法运行的问题。
[0003]对于有大内存需求的应用程序,为了保证程序内部对内存的申请量不会超出当前操作系统的可用量,应用程序通常采用的方式是预先申请一块不大于可用内存容量的内存空间,然后分批加载数据,如处理完一批数据以后,再加载下一批数据,通过重复使用预先分配好的内存空间来保证程序在小内存容量的计算节点上亦能正常运行,然而这种方式的主要弊端是数据加载的逻辑与应用程序的处理逻辑是绑定在一起的,导致程序模块之间的耦合度过大,不利于后续的开发与维护。
技术实现思路
[0004]有鉴于此,本专利技术提供一种内存访问管理方法和系统,该内存访问管理方法和系统独立于应用程序以外,利用内存中事先划定的空间作为数据存储池,针对数据存储池中的 ...
【技术保护点】
【技术特征摘要】
1.一种内存访问管理方法,包括:在内存中建立数据存储池以供至少一个线程进行访问,应用程序通过线程对数据存储池进行访问,数据存储池包括至少两行和至少两列排列的多个数据存储区pack,每个pack中均包含至少两个数据存储单元unit,各个pack中的unit数量相等,当线程为至少两个时,各个线程可并行地对数据存储池进行访问;每个pack中的各个unit中的数据由该数据的下标索引index代表其逻辑地址,在每一个pack中的各个unit之间,数据的下标索引是连续的;一个pack所存储的数据为一个数据包;在某一线程所要访问的index位置位于该线程当前访问的数据包中时,该线程直接向应用程序返回其当前访问的pack中对应于该index位置的物理地址;在该index位置并非位于该线程当前所访问的数据包中时,根据第一规则,获得该index位置的pack预选行,并将pack预选行用互斥锁锁定;在pack预选行中,根据第二规则,筛选出该index位置的pack所属列,并将pack预选行解锁,将位于pack预选行和pack所属列的pack作为该index位置所属的pack,该线程向应用程序返回该index位置所属的pack中对应于该index位置的物理地址;在第二规则未能筛选出该index位置的pack所属列时,基于选择策略,在pack预选行中选则出进行数据替换的pack,将进行数据替换的pack中的数据包加载到虚拟内存中,并将虚拟内存中包含该index位置的数据包加载到进行数据替换的pack中,并将pack预选行解锁,该线程向应用程序返回数据替换后的pack中对应于该index位置的物理地址。2.根据权利要求1所述的内存访问管理方法,其特征在于,所述方法还包括,通过如下方法判断某一线程所要访问的index位置是否位于该线程当前访问的数据包中:将该index与该线程当前所访问的数据包的索引地址范围进行比较,若该index位于该线程当前所访问的数据包的索引地址范围内,则该index位置位于该线程当前所访问的数据包中,否则,该index位置并非位于该线程当前所访问的数据包中;其中,数据包的索引地址范围为数据包的起始索引地址到结尾索引地址之间的范围,其中,数据包的结尾索引地址由数据包的起始索引地址和pack中的unit数量决定。3.根据权利要求1所述的内存访问管理方法,其特征在于,所述的根据第一规则,获得该index位置的pack预选行,包括:根据该index以及每个pack中所包含unit的数量,获得该index位置的数据所在的数据包的逻辑编号;根据该index位置的数据所在的数据包的逻辑编号和数据存储池的每一列中所包含的pack总数,获得该index位置的pack预选行。4.根据权利要求3所述的内存访问管理方法,其特征在于,在获得该index位置的数据所在的数据包的逻辑编号之后,所述方法还包括:如果该index位置的数据所在的数据包的逻辑编号不是该线程当前所访问的数据包的逻辑编号,则该线程当前访问的pack的线程数量减一。5.根据权利要求1所述的内存访问管理方法,其特征在于,所述的在pack预选行中,根据第二规则,筛选出该index位置的pack所属列,并将pack预选行解锁,将位于pack预选行和pack所属列的pack作为该index位置所属的pack,该线程向应用程序返回该index位置所属的pack中对应于该index位置的物理地址,包括:
遍历pack预选行中的每一个pack,进行如下遍历操作:如果该pack状态为空状态,则:根据该index和每个pack中所包含unit的数量,获得该pack的起始索引,将该pack的当前访问线程数量加一,将该pack状态更新为已分配状态,将该线程当前访问的pack更新为该pack的行编号和列编号,根据该index以及每个pack中所包含unit的数量,获得该线程的当前访问的数据包的逻辑编号,根据该index以及每个pack中所包含unit的数量,获得该线程的起始索引,将该pack预选行解锁,该线程向应用程...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。