一种内存读写过程的资源锁定算法的制作方法

文档序号:17858528发布日期:2019-06-11 22:43阅读:208来源:国知局
一种内存读写过程的资源锁定算法的制作方法

本发明涉及计算设备技术领域,尤其是一种内存读写过程的资源锁定算法。



背景技术:

互斥锁一般采用信号灯实现,用于同步或者互斥对共享资源的访问。信号灯的大量操作和使用会占用系统大量的cpu资源,并且严重影响了系统多cpu或者多内核的资源优势,对并发需求比较高,多进程(线程)共享资源的系统是个比较大的瓶颈。由于信号灯对资源保护只能允许一次一个进程或线程访问,所以多进程或线程访问一个共同资源会造成进程或线程的排队等待,无法满足系统的高效运行。

现有解决资源共享和互斥问题,主要是通过先申请信号灯,在申请信号灯成功后对资源进行读或者写操作,操作完成再释放信号灯。针对共享资源读的次数远大于写次数的前提下,上述方法对高并发系统要求存在如下问题:

1.每次进程(线程)访问共享资源,都要申请信号灯,大量的信号灯会占用操作系统的大量cpu资源,影响并发数;

2.共享资源操作被信号灯保护会造成访问共享资源的进程(线程)在等待,影响了系统的单进程(线程)处理能力;

3.由于写或修改的进程(线程)对共享资源的访问是局部的,并且频次远比读访问低,但需要对共享资源进行加信号灯保护,而造成读进程(线程)的大量排队。

多进程(线程)对共享资源的互斥访问,容易造成系统的死锁。



技术实现要素:

本发明提出一种内存读写过程的资源锁定算法,可在内存数据块单进程(线程)写和多进程(线程)读的场景下,利用内存切换算法替换互斥锁用于解决共享资源互斥访问的同步问题。

本发明采用以下技术方案。

一种内存读写过程的资源锁定算法,用于有寻址标记的内存资源d的读写操作,所述寻址标记包括地址区间、权限标识和时间戳;在内存读写过程中,所述锁定算法对内存资源d的权限标识进行调整,并把读写操作分别定向至与权限标识匹配的内存资源处;所述权限标识为可分配、只读、只写三种互斥的状态;所述锁定算法把读操作请求定向至权限标识为只读的内存资源;所述锁定算法把写操作请求定向至权限标识为只写的内存资源;

所述锁定算法在写操作时,若写操作是针对已有内容x的内存空间s,则锁定算法把内容x在内存中复制以形成具备只写权限的的镜像空间l,镜像空间l在内存空间s的写操作过程中用于替代内存空间s响应针对内容x的写操作,锁定算法在写操作结束后进行复位操作以释放内存空间s占用的内存资源,并以镜像空间l替换内存空间s。

设写操作是针对已有内容的内存空间s,则所述镜像操作的步骤为;

a1、确认内存空间s的权限为只读,查找内存中的可用区域l;

a2、把该内存空间s的内容复制到内存中的可用区域l,并在复制作业完成后,把区域l的权限标识设为只写,形成权限标识为只写的镜像空间l;

a3、在写操作的过程中,所述资源锁定算法把收到的读操作请求定向至内存空间s,把收到的写操作定向至镜像空间l;

a4、在写操作完成时,所述资源锁定算法把镜像空间l的时间戳修改为写操作完成时间。

所述复位操作的步骤依次为;

b1、把镜像空间l的权限标识修改为只读;

b2、所述资源锁定算法把收到的读操作请求定向至镜像空间l;若收到读操作请求时,镜像空间l的权限标识未修改完成,则资源锁定算法把收到的读操作请求定向至内存空间s处进行操作;

b3、把内存空间s的权限标识修改为可分配;所述资源锁定算法把收到的读操作请求定向至镜像空间l;若收到读操作请求时,镜像空间l的权限标识已修改完成,s空间的权限标识还未修改造成存在两个可读内容的现象,则需要判断两个可读内容的时间戳,并以时间戳比较大的l空间的内容为可对读操作请求返回的新数据;若s空间的权限标识修改完成,则直接返回l的数据。

所述有寻址标记的内存资源d的内存数据结构包括关键字索引、数据节点地址集合组和内存数据块;所述关键字索引用于存储b+树或者哈希索引;关键字索引与数据节点地址集合组中的数据节点地址相关联;数据节点地址存储为数组形式;数据节点地址指向资源锁定算法可用的内存数据块存放地址;资源锁定算法在内存数据块读写数据内容。

所述关键字索引、数据节点地址集合组的存储空间与内存数据块分离设置;所述资源锁定算法在对内存读、写操作进行定向,以及查找内存中的可用区域时,首先在关键字索引中通过关键字查到数据节点地址集合组中的匹配位置;再从匹配位置处的数据节点地址中获取资源锁定算法可用的内存数据块存放地址。

所述内存写请求由写进程或写线程发起,在步骤b3中,资源锁定算法需要对内存空间l进行校验,以确定读操作是从内存空间l获取数据,并释放内存空间s的占用资源以删除内存空间s;此后以内存空间l替代内存空间s;所述校验操作的步骤为;

c1、通过关键字索引,再次访问内存空间l对应的内存数据块;

c2、读取内存空间l,获取内存空间l中的存储内容和时间戳时间;

c3、把内存空间l中的数据内容与写进程或写线程的数据内容比对,把内存空间l中的时间戳时间与写进程或写线程的时间戳时间比对,如果数据内容和时间戳一致,则说明内存写请求操作成功,并且后续的读操作都指向内存空间l,可以把内存空间s的权限标识修改为可分配,以释放s内存空间对应的内存数据块使之能接受新的分配请求,即完成写操作之后以内存空间l替代s。

在读操作中,读进程或读线程在关键字索引中通过关键字查到数据节点地址集合组中的匹配位置;再从匹配位置处的数据节点地址中获取资源锁定算法可用的内存数据块存放地址,如果获取成功,则从内存数据块存放地址处的内存数据块中复制数据内容并返回,如果获取失败则返回空值;

在写操作中,写进程或写线程先在关键字索引中查询,若存在可用地址节点即权限标识为可分配,则直接修改地址节点的权限标识为只写;若不存在权限标识为可分配的地址节点,则重新申请地址节点并把权限修改为只写,并申请数据内存块即镜像内存空间l,若已经存在权限标识为只读的地址节点,则复制对应的只读内存块即s到镜像内存块l中,然后对l内存块进行修改写入操作,若不存在只读标识的地址节点,则无需复制直接对空间l的内存块进行写入操作。

所述内存数据结构中,地址区间的数据类型为void,时间戳的数据类型为long,权限标识的数据类型为char。

当权限标识为0时表示可分配,为1时表示只读,为2时表示只写。

当权限标识为只写或可分配时,对应的内存数据块只能由写进程或写线程单独操作。

在所述锁定算法中,所述写操作为单线程写入操作或单进程写入操作,所述读操作包括单线程读取操作、单进程读取操作、多线程读取操作、多进程读取操作中的一种或多种。

本发明给出了一种可以通过内存数据块的切换,标识位和时间戳的判断,从而替换使用互斥锁的算法,主要优点在于:

1.关键字索引区,数据地址节点和内存数据块进行分离,提高了系统的扩展性;

2.写操作通过申请新的内存数据块进行操作,在写操作成功后能够对旧的内存数据块进行释放,解决了读写资源互斥而不需要锁的算法。

3.没有互斥锁的使用,减轻了系统cpu资源的负担;可以提高系统的并发数量和效率;可以避免死锁。

本发明充分利用了现在内存的大容量、高速的特点,通过对内容的镜像复制,把读写操作分别定向,从而提升了效率。

附图说明

下面结合附图和具体实施方式对本发明进一步详细的说明:

附图1是本发明的内存数据结构及寻址过程的示意图;

附图2是在读操作时,资源锁定算法的处理流程示意图;

附图3是步骤b3的原理示意图;

附图4是在写操作时,资源锁定算法的处理流程示意图。

具体实施方式

如图1-4所示,一种内存读写过程的资源锁定算法,用于有寻址标记的内存资源d的读写操作,所述寻址标记包括地址区间、权限标识和时间戳;在内存读写过程中,所述锁定算法对内存资源d的权限标识进行调整,并把读写操作分别定向至与权限标识匹配的内存资源处;所述权限标识为可分配、只读、只写三种互斥的状态;所述锁定算法把读操作请求定向至权限标识为只读的内存资源;所述锁定算法把写操作请求定向至权限标识为只写的内存资源;

所述锁定算法在写操作时,若写操作是针对已有内容x的内存空间s,则锁定算法把内容x在内存中复制以形成具备只写权限的的镜像空间l,镜像空间l在内存空间s的写操作过程中用于替代内存空间s响应针对内容x的写操作,锁定算法在写操作结束后进行复位操作以释放内存空间s占用的内存资源,并以镜像空间l替换内存空间s。

设写操作是针对已有内容的内存空间s,则所述镜像操作的步骤为;

a1、确认内存空间s的权限为只读,查找内存中的可用区域l;

a2、把该内存空间s的内容复制到内存中的可用区域l,并在复制作业完成后,把区域l的权限标识设为只写,形成权限标识为只写的镜像空间l;

a3、在写操作的过程中,所述资源锁定算法把收到的读操作请求定向至内存空间s,把收到的写操作定向至镜像空间l;

a4、在写操作完成时,所述资源锁定算法把镜像空间l的时间戳修改为写操作完成时间。

所述复位操作的步骤依次为;

b1、把镜像空间l的权限标识修改为只读;

b2、所述资源锁定算法把收到的读操作请求定向至镜像空间l;若收到读操作请求时,镜像空间l的权限标识未修改完成,则资源锁定算法把收到的读操作请求定向至内存空间s处进行操作;

b3、把内存空间s的权限标识修改为可分配;所述资源锁定算法把收到的读操作请求定向至镜像空间l;若收到读操作请求时,镜像空间l的权限标识已修改完成,s空间的权限标识还未修改造成存在两个可读内容的现象,则需要判断两个可读内容的时间戳,并以时间戳比较大的l空间的内容为可对读操作请求返回的新数据;若s空间的权限标识修改完成,则直接返回l的数据。

如图1所示,所述有寻址标记的内存资源d的内存数据结构包括关键字索引、数据节点地址集合组和内存数据块;图1中的数据节点块地址即为数据节点地址集合组;所述关键字索引用于存储b+树或者哈希索引;关键字索引与数据节点地址集合组中的数据节点地址相关联;数据节点地址存储为数组形式;数据节点地址指向资源锁定算法可用的内存数据块存放地址;资源锁定算法在内存数据块读写数据内容。

所述关键字索引、数据节点地址集合组的存储空间与内存数据块分离设置;所述资源锁定算法在对内存读、写操作进行定向,以及查找内存中的可用区域时,首先在关键字索引中通过关键字查到数据节点地址集合组中的匹配位置;再从匹配位置处的数据节点地址中获取资源锁定算法可用的内存数据块存放地址。

所述内存写请求由写进程或写线程发起,在步骤b3中,资源锁定算法需要对内存空间l进行校验,以确定读操作是从内存空间l获取数据,并释放内存空间s的占用资源以删除内存空间s;此后以内存空间l替代内存空间s;所述校验操作的步骤为;

c1、通过关键字索引,再次访问内存空间l对应的内存数据块;

c2、读取内存空间l,获取内存空间l中的存储内容和时间戳时间;

c3、把内存空间l中的数据内容与写进程或写线程的数据内容比对,把内存空间l中的时间戳时间与写进程或写线程的时间戳时间比对,如果数据内容和时间戳一致,则说明内存写请求操作成功,并且后续的读操作都指向内存空间l,可以把内存空间s的权限标识修改为可分配,以释放s内存空间对应的内存数据块使之能接受新的分配请求,即完成写操作之后以内存空间l替代s。

在读操作中,读进程或读线程在关键字索引中通过关键字查到数据节点地址集合组中的匹配位置;再从匹配位置处的数据节点地址中获取资源锁定算法可用的内存数据块存放地址,如果获取成功,则从内存数据块存放地址处的内存数据块中复制数据内容并返回,如果获取失败则返回空值;

在写操作中,写进程或写线程先在关键字索引中查询,若存在可用地址节点即权限标识为可分配,则直接修改地址节点的权限标识为只写;若不存在权限标识为可分配的地址节点,则重新申请地址节点并把权限修改为只写,并申请数据内存块即镜像内存空间l,若已经存在权限标识为只读的地址节点,则复制对应的只读内存块即s到镜像内存块l中,然后对l内存块进行修改写入操作,若不存在只读标识的地址节点,则无需复制直接对空间l的内存块进行写入操作。

所述内存数据结构中,地址区间的数据类型为void,时间戳的数据类型为long,权限标识的数据类型为char。

当权限标识为0时表示可分配,为1时表示只读,为2时表示只写。

当权限标识为只写或可分配时,对应的内存数据块只能由写进程或写线程单独操作。

在所述锁定算法中,所述写操作为单线程写入操作或单进程写入操作,所述读操作包括单线程读取操作、单进程读取操作、多线程读取操作、多进程读取操作中的一种或多种。

实施例:

采用资源锁定算法的网页服务器中,服务端把网页内容缓存在内存中以便于快速响应客户访问需求,当需对某个网页进行修改维护时,资源锁定算法查找到该网页对应的内存空间s,对该内存空间的数据块进行复制操作,形成含有该网页的镜像空间l,在修改维护期间,外部客户对该网页的访问被统一定向至原内存空间s,镜像空间l的权限被修改为只写,仅供写进程操作。

内存空间s内存数据结构的时间戳为毫秒级的时间戳。

当对该网页的维护修改结束后,资源锁定算法把镜像空间l的权限被修改为只读,把外部客户对该网页的访问重定向至镜像空间l,然后原内存空间s的权限被修改为可分配,释放原内存空间s所占用的内存资源。

本例中,d指代资源锁定算法所管控的内存资源中,有寻址标记的内存资源;

本例中,l指代资源锁定算法在其所管控的内存资源中划分形成的镜像空间;

本例中,x指代资源锁定算法在其所管控的内存资源中,已存入的旧数据x。

本例中,s指代资源锁定算法在其所管控的内存资源中,用于存放x的内存资源空间。

本例中,内存空间s释放后可视为该部分内存初始化,该部分内存的内容被删除或被标记为废弃,资源锁定算法以原来的镜像空间l替代内存空间s参与内存读。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1