一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内存操作控制方法、设备及存储介质与流程

2021-12-17 19:01:00 来源:中国专利 TAG:


1.本发明实施例涉及但不限于存储技术领域,具体而言,涉及但不限于一种内存操作控制方法、设备及存储介质。


背景技术:

2.在实际开发中,写操作线程可以通过键值查询公共数据的内存地址,并按照查询到的内存地址写入新的数据;读操作线程通过键值查询公共数据的内存地址,然后按照查询到的内存地址进行数据读取及分析处理。为解决线程同步问题,相关技术中会在写操作线程写入新数据时对内存加写锁,新数据写入结束后释放写锁,在内存加写锁期间,若有读操作线程发起,则只能等到写操作线程结束后才能进行数据读取。同时,读操作线程在读取数据时也会对内存加读锁,直到读操作线程结束后才会释放,在内存加读锁期间,即便有写操作线程发起,该写操作线程也不能被立即响应,而是要等到读操作线程的读锁释放后才能在内存中进行数据读取。可见,在相关技术中,读锁与写锁的使用虽然可以保证读写操作的正确性,但却会造成读操作线程与写操作线程的相互堵塞。且实际应用中容易出现大量的并发读操作线程,所以在写操作线程耗时久的情况下,将会导致系统中积压大量的读操作线程。


技术实现要素:

3.本发明实施例提供的内存操作控制方法、设备及存储介质,主要解决的技术问题是:相关内存操作方案中,因为读、写操作会对内存加锁,所以容易导致针对同一内存的读操作线程与写操作线程相互堵塞,影响读写操作效率。
4.为解决上述技术问题,本发明实施例提供一种内存操作控制方法,包括:
5.从一内存块中划分出k个内存分块,并确定各内存分块的内存地址,k大于等于2;
6.确定有针对内存块的写操作线程发起后,为写操作线程分配目标内存分块,以供写操作线程按照目标内存分块的内存地址进行写操作;
7.若在目标内存分块的读有效期内有针对内存块的读操作线程发起,则将目标内存分块作为内存块当前的可读内存分块提供给读操作线程,以供读操作线程按照目标内存分块的内存地址进行读操作;目标内存分块的读有效期自写操作线程对目标内存分块的写操作完成起,至下一写操作线程完成前;
8.若在目标内存分块的读有效期内有针对内存块的新写操作线程发起,则从可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块,以供其进行写操作。
9.本发明实施例还提供一种内存操作控制设备,内存操作控制设备包括处理器、存储器及通信总线;
10.通信总线用于实现处理器和存储器之间的连接通信;
11.存储器中存储有内存操作控制程序,且存储器中包括至少一内存块,内存块中包括k个内存分块,k大于等于2;
12.处理器用于执行存储器中存储的一个或者多个程序,以实现上述内存操作控制方法的步骤。
13.本发明实施例还提供一种存储介质,该存储介质存储有内存操作控制程序,内存操作控制程序可被一个或者多个处理器执行,以实现上述内存操作控制方法的步骤。
14.根据本发明实施例提供的内存操作控制方法、设备及存储介质,通过从一内存块中划分出至少两个内存分块,并确定各内存分块的内存地址。然后在确定有针对内存块的写操作线程发起后,为该写操作线程分配目标内存分块,供该写操作线程按照目标内存分块的内存地址进行写操作。自该写操作线程结束,至下一写操作线程完成前的时段属于该目标内存分块的读有效期,若在该读有效期内有针对内存块的读操作线程发起,则将目标内存分块作为内存块当前的可读内存分块提供给读操作线程,以供读操作线程按照目标内存分块的内存地址进行读操作;若在该读有效期内有针对内存块的新写操作线程发起,则从该可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块,以供其进行写操作。根据本发明实施例提供的内存操作控制方案,因为-内存整体是无锁的,所以在目标内存分块的读有效期内接收到读操作线程的读操作请求,可以立即响应;若在目标内存分块的读有效期内接收到针对该内存块的写操作线程的写操作请求,也可以立即响应,也即同一时间内读操作线程与写操作线程可以并行执行,不会相互堵塞。同时,因为将内存块划分出了至少两个内存分块,因此即便读操作线程与写操作线程并行,但读操作线程是对内存块当前的可读内存分块进行操作,而写操作线程是对除该可读内存分块以外的其他内存分块进行操作,所以,两个内存操作线程的不会相互影响,可以保证数据读写操作的正确性与有效性。故,本发明实施例提供的方案,在保证内存操作正确性与有效性的基础上,让读操作线程与写操作线程并行执行,提升了针对内存读写操作的效率。
15.本发明其他特征和相应的有益效果在说明书的后面部分进行阐述说明,且应当理解,至少部分有益效果从本发明说明书中的记载变的显而易见。
附图说明
16.图1为本发明实施例一中提供的内存操作控制方法的一种流程图;
17.图2为本发明实施例一中提供的内存块的一种结构示意图;
18.图3为本发明实施例一中提供的内存块的另一种结构示意图;
19.图4为本发明实施例二中提供的空闲内存分块添加与分配的一种流程图;
20.图5为本发明实施例二中提供的内存块的第一种结构示意图;
21.图6为本发明实施例二中提供的内存块的第二种结构示意图;
22.图7为本发明实施例二中提供的内存块的第三种结构示意图;
23.图8为本发明实施例二中提供的内存块的第四种结构示意图;
24.图9为本发明实施例二中提供的非空闲内存分块回收的一种流程图;
25.图10为本发明实施例三中提供的内存块的一种结构示意图;
26.图11为本发明实施例四中提供的内存操作控制设备的一种硬件结构示意图。
具体实施方式
27.为了使本发明的目的、技术方案及优点更加清楚明白,下面通过具体实施方式结
合附图对本发明实施例作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
28.实施例一:
29.为了解决相关技术中针对一块内存的读操作线程与写操作线程会相互堵塞,影响读写操作效率的问题,本实施例提供一种内存操作控制方法,该内存操作控制方法可以由内存操作控制设备实现,下面请参见图1示出的该内存操作控制方法的流程图:
30.s102:从一内存块中划分出k个内存分块,并确定各内存分块的内存地址。
31.所谓“内存块”意味着针对该内存进行的读操作不会加读锁,针对该内存的写操作也不会加写锁,这样,在一个写操作线程针对该内存块进行写操作的过程,该写操作线程并不会独占该内存块,在接受该写操作线程数据写入的过程中,该内存块还可以同步接受其他操作线程的操作,其他操作线程包括读操作线程,也包括其他写操作线程。同样地,一个读操作线程在对内存块进行数据读取操作的时候,也并不会对内存块加读锁,所以,在接受该读线程操作的数据读取的过程中,内存块也还可以同步接受其他操作线程的操作,其他操作线程包括其他读操作线程,也包括写操作线程。
32.在本实施例中,k大于等于2,也即内存操作控制设备可以从一内存块中划分出至少两个内存分块。值得注意的是,内存分块是读操作线程、写操作线程针对内存块进行操作时的具体操作对象,但内存块面向用户是作为一个整体提供服务,也即对于用户而言,其并不了解,也不需要了解内存块中的各内存分块的存在。内存块面向用户提供服务时的可用大小等于内存分块的大小,在本实施例的一些示例当中,内存块中各内存分块的大小不完全相同,但可以理解的是,因为内存块对外仅以一个内存分块的大小示出,而对于用户而言,一块内存的大小是既定的,不会动态变化。所以,该内存块中各内存分块只能按照最小内存分块的大小对外提供同一的内存读写服务。这样就容易导致其他较大的内存分块中存在空间浪费,因此,为了避免该内存空间浪费的问题,在本实施例的另一些示例当中,内存块中各内存分块的大小相同。
33.s104:确定有针对内存块的写操作线程发起后,为写操作线程分配目标内存分块。
34.内存操作控制设备在将内存块划分设置完成后,可以接收操作线程对该内存块的操作请求。在确定有针对内存块的写操作线程发起后,内存操作控制设备可以为该写操作线程分配供其进行数据写入操作的内存分块。内存操作控制设备分配给该写操作线程的内存分块就是该写操作线程的目标内存分块,可以理解的是,每一个写操作线程都有对应的目标内存分块。请参见图2示出的内存块20,该内存块20中包括第一内存分块21以及第二内存分块22,假定一个写操作线程在内存操作控制设备对内存块20的划分设置完成后发起,则内存操作控制设备可以从第一内存分块21与第二内存分块22中选择一个分配给该写操作线程作为其目标内存分块,例如,在一种示例当中,内存操作控制设备将第一内存分块21分配给该写操作线程,则第一内存分块21就是该写操作线程的目标内存分块,该写操作线程后续将在该第一内存分块21中进行数据写入。
35.应当理解的是,一块内存被写操作线程操作过之后,就会对外提供数据读取操作服务。由于本实施例中的内存块中各内存分块作为按照一个内存分块向外提供服务,所以,在内存块接受第一个写操作线程的写入操作之后直到该内存块被彻底释放之前,内存块中就一定存在一个内存分块对外提供数据读取服务,虽然在不同的时间下对外提供数据读取
服务的内存分块可能不同,但在这期间的任何一个时刻都一定有一个内存分块作为该内存块的可读内存分块。由于可读内存分块需要对外提供有效的数据读取服务,所以,当内存操作控制设备为一个写操作线程分配目标内存分块的时候,不能选择当前的可读内存分块作为写操作线程的目标内存分块,也即内存操作控制设备只能从当前可读内存分块以外的其他内存分块中为写操作线程分配目标内存分块。
36.在通常情况下,内存操作控制设备为当前发起的写操作线程分配目标内存分块的时候,是从当前的空闲内存分块中进行选择。所谓空闲内存分块就是指当前尚未写入数据的内存分块,与空闲内存分块对应的是非空闲内存分块,明显,非空闲内存分块就是当前有存储数据的内存分块。毫无疑义的是,如果内存操作控制设备从空闲内存分块中为一写操作线程分配目标内存分块,则内存操作控制设备一旦选择出一个空闲内存分块,则可以直接分配给该写操作线程,以供其进行数据写入操作。在本实施例的另外一些示例当中,内存操作控制设备也可以从非空闲内存分块中为写操作线程分配目标内存分块,在这种情况下,当内存操作控制设备选择出一个非空闲内存分块之后,内存操作控制设备不能直接让写操作线程在该内存分块中进行数据写入,而是需要先将该非空闲内存分块中的数据清除,使其从非空闲内存分块变为空闲内存分块之后再提供给写操作线程,所以,本质上内存操作控制设备分配给写操作线程的目标内存分块都是空闲内存分块,不过内存操作控制设备在分配的过程中可以从不同的内存分块中进行选择。
37.s106:在目标内存分块的读有效期内若有针对内存块的读操作线程发起,则将目标内存分块作为内存块当前的可读内存分块提供给读操作线程,若有针对内存块的新写操作线程发起,则从可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块。
38.内存操作控制设备为写操作线程分配目标内存分块后,该写操作线程将在该目标内存分块中进行数据写入。因为内存块总是对外提供自己当前存储的最新数据,因此在该写操作线程的写入操作完成后,该目标内存分块就会变成内存块当前的可读内存分块。这里将该写操作线程记为“a”,那么在该写操作线程a之后,如果有另一个写操作线程b也针对其对应的目标内存分块完成了写操作,那么自写操作线程b的操作结束后,写操作线程b的目标内存分块就会替代写操作线程a的目标内存分块称为内存块新的可读内存分块。所以,从写操作线程a对目标内存分块的写操作完成起,至下一写操作线程(例如写操作线程b)对另一内存分块的写操作完成前,内存块对外的可读内存分块都是写操作线程a的目标内存分块,换言之,在这期间内写操作线程a的目标内存分块是有效的可读内存分块。在本实施例中,将从写操作线程a对目标内存分块的写操作完成起,至下一写操作线程对另一内存分块的写操作完成前的这一时段称为写操作线程a的目标内存分块的读有效期。对于任何一个写操作线程,其目标内存分块的读有效期就是指从该写操作线程对目标内存分块的写操作完成起,至下一写操作线程对另一内存分块的写操作完成前的时段。
39.可见不同目标内存分块的读有效期的长短并不是固定,而是会随着写操作线程发起的频繁程度变化,或者说是随着各写操作线程结束的频繁程度而变化:如果两个写操作线程相继结束,但二者的结束时刻相距很近,那么在前结束的写操作线程的目标内存分块的读有效期就会非常短。
40.在本实施例的一些示例当中,请参见图3所示,内存块30中除了包括至少两个内存
分块31以外,还包括可读地址记录空间32,可读地址记录空间32中用于记录内存块30可读内存分块的内存地址:当一个写操作线程对其目标内存分块的写操作结束后,内存操作控制设备可以将该目标内存分块的内存地址记录至可读地址记录空间32中,在本实施例的一些示例当中,内存操作控制设备向可读地址记录空间32中记录当前可读内存分块的内存地址时,总是以覆盖式的方式进行记录,也即新的内存地址会替换掉可读地址记录空间32中原本记录的内存地址,在这种情况下,可读地址记录空间32中就最多只有一个内存地址,该内存地址即内存块30当前的可读内存分块的内存地址。在本实施例的另外一些示例当中,内存操作控制设备向可读地址记录空间32中记录当前可读内存分块的内存地址时不会覆盖之前的内存地址,所以可读地址记录空间32中就可能会同时记录有多个内存地址,且其记录的内存地址的数目会随着写操作线程的不断发起而增多。那么在这种情况下,为了让内存操作控制设备接收到读操作线程的读操作请求后能够知道应该按照哪一个内存地址响应读操作请求,则内存操作控制设备需要在向可读地址记录空间32中写入内存地址时,同时记录下对应内存地址的写入时间,这样,当有读操作线程发起后,内存操作控制设备可以按照可读地址记录空间32中的写入时间选择出最新的内存地址以响应该读操作线程的请求。或者,内存操作控制设备在向可读地址记录空间32中写入内存地址时,可以对最新写入的内存地址进行标记,后续过程中根据标记确定出当前最新的内存地址以响应读操作线程的请求。
41.在本实施例中,一个写操作线程的写操作结束后,如果内存操作控制设备确定在该写操作线程目标内存分块的读有效期内有针对内存块的读操作线程发起,则内存操作控制设备会将该目标内存分块作为当前的可读内存分块指示给该读操作线程,让读操作线程对该可读内存分块进行数据读取。例如,对于图3中示出的内存块30,内存操作控制设备可以从可读地址记录空间32中获取到当前可读内存分块的内存地址,从而根据该内存地址响应读操作线程。如果内存操作控制设备确定在该写操作线程目标内存分块的读有效期内有针对内存块的新写操作线程发起,则内存操作控制设备也会从当前可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块。
42.应当理解的是,在本实施例的一些示例当中,内存操作控制设备为新写操作线程分配目标内存分块的时候,可以从空闲内存分块中选择一个作为该新写操作线程的目标内存分块,由于当前可读内存分块必定是当前已经写入了数据的内存分块,因此,在这种目标内存分块的分配方式下,内存块当前的可读内存分块必定不会被作为候选的内存分块,也即内存操作控制设备必定是在可读内存分块以外的其他内存分块中为写操作线程选择目标内存分块。在本实施例的另一些示例当中,内存操作控制设备也可以从当前可读内存分块以外的非空闲内存分块中选择一个,并将所选择的内存分块中的数据清除,然后将该内存分块作为新写操作线程的目标内存分块分配给新写操作线程。
43.在本实施例的一些示例当中,内存操作控制设备还可以在一个写操作线程对内存块进行数据写入操作的同时,接收一新写操作线程的写入请求,不过在这种情况下,当内存操作控制设备为新写操作线程分配目标内存分块的时候,不仅要从候选的内存分块中排除当前的可读内存分块,还要排除在当前正在被另一写操作线程操作的内存分块,例如,假定内存操作控制设备在t1时刻确定有第一写操作线程发起,内存操作控制设备可以为该第一写操作线程分配目标内存分块s1,在t2时刻,第一写操作线程的写入操作还在继续,但与此
同时,又有第二写操作线程发起,所以,内存操作控制设备需要为该第二写操作线程分配目标内存分块。内存操作控制设备在为第二写操作线程选择目标内存分块时,不仅不能选择当前的可读内存分块,也不能选择第一写操作线程的目标内存分块s1。
44.本实施例中提供了一种内存操作控制方法,在读操作线程与写操作线程对内存进行操作时,不加读锁与写锁,从而使得读操作线程与写操作线程可以同时进行。同时,又因为内存操作控制设备将该内存块划分出了至少两个内存分块,并在为写操作线程分配供其进行数据写入的目标内存分块时,排除当前的可读内存分块,从而使得写操作线程的操作不会影响到读操作线程,即便两种操作线程同时对内存块进行操作,但因为操作针对的内存分块并不相同,所以,可以在不对内存块加锁的情况下保证数据写入与数据读取的正确性与有效性。也即,本实施例中的内存操作控制方法通过设置至少两个内存分块保证了与相关技术中一样的正确性、有效性一样,但换取了更高的读写效率,避免了读操作线程与写操作线程相互堵塞的情况。
45.更进一步地,在本实施例中,因为内存操作控制设备在为写操作线程分配目标内存分块的时候,会避开其他当前还未结束的写操作线程的目标内存分块,因此,可以保证即便两个甚至两个以上的写操作线程同步进行的情况下,各写操作线程也是针对不同的内存分块进行操作,进而在脏数据产生的基础上提升了响应并发写操作线程的效率,能够适应大量写操作并发的场景。
46.实施例二:
47.本实施例将在实施例一的基础上继续对前述内存操作控制方法与内存块进行介绍,请参见图4示出的从内存块中为写操作线程分配目标内存分块的一种实现流程图:
48.s402:为空闲内存分块分配使用序号。
49.在本实施例中,内存操作控制设备为一个写操作线程分配目标内存分块的时候,总是从空闲内存分块中选择。各空闲内存分块被分配,也即被写操作线程使用是按序进行的,内存操作控制设备可以按照队列的方式来管理各空闲内存分块:先被添加进空闲内存队列的空闲内存分块将被先分配出去,而后添加进空闲内存队列的空闲内存分块也会后被分配出去。在这种情况下,每个空闲内存分块都有一个使用序号,该使用序号能够表征自内存块被划分出内存分块起直至该空闲内存分块内分配出去累计分配的空闲内存分块的数目(为了便于介绍,以下将“自内存块被划分出内存分块起直至该空闲内存分块内分配出去累计分配的空闲内存分块的数目”简称为累计分配数目),换言之,其能够体现该空闲内存分块是第几个被分配出去的空闲内存分块。不过,值得注意的是,空闲内存分块的使用序号能够表征累计分配数目,但这并不意味着空闲内存分块的使用序号就等于对应的累计分配数目,例如,如果使用序号自“0”开始分配,那么一个空闲内存分块的使用序号实际上比累计分配数目少1。当然,如果使用序号自“1”开始分配,那么一个空闲内存分块的使用序号就恰好等于对应的累计分配数目。
50.可以理解的是,在内存操作控制设备对内存块进行划分之后,可以得到k个空闲内存分块。随后,内存操作控制设备可以为这k个空闲内存分块分配使用序号,分配使用序号后,这些空闲内存实际上就在空闲内存队列指能够排好了队。在本实施例的一些示例当中,每次申请设置内存块后,各内存分块仅会被使用一轮,当空闲内存队列为空之后,内存操作设备会对释放该内存块,然后重新申请新的内存空间进行内存块设置。但在本实施例的另
外一些示例当中,内存操作控制设备会对这些内存分块进行循环使用,即会对非空闲内存分块进行回收,对其中的数据进行清除释放,然后继续为得到的空闲内存分配使用序号,将其加入空闲内存队列中。所以,在这种示例当中,虽然内存块中只有k个实际的内存分块,但内存分块的使用序号却可以远远超过k。对于一个实际的内存分块,其会因为循环使用而变成多个逻辑内存分块,这些逻辑内存分块在不同的时间下存在,也拥有不同的使用序号,所以,一个实际的内存分块在不同的时间下可能会有多个不同的使用序号。
51.假定本实施例中一个内存块中包含4个实际的内存分块,它们的分块标识分别为“0”、“1”、“2”、“3”,假定初始阶段中,内存操作控制设备为这4个空闲内存分块分别分配的使用序号也是“0”、“1”、“2”、“3”。如果在一个写操作线程在对使用序号为“2”的空闲内存分块进行数据写入时,内存操作控制设备回收了使用序号为“0”的内存分块,释放了其中的数据。那么这个内存分块将会为重新分配使用序号“4”,从而被添加到空闲内存队列中。
52.在本实施例中,内存块中还包括可写地址记录空间,该可写地址记录空间包括k个记录分区,每个记录分区均具有唯一的分区标识,所以,可写地址记录空间恰好可以在同时记录下各实际内存分块的内存地址,每一个内存地址对应一个记录分区。请参见图5示出的内存块50,内存块50中除了至少两个内存分块51以外,还包括可写地址记录空间52,。图5中示出的是k等于3的情况,在图5中,共有3个内存分块以及3个记录分区,虽然在图5中3个记录分区是设置在一起的,3个内存分块也是紧邻的,但在其他一些示例当中,各内存分块可以分散设置,各记录分区也可以分散设置,例如,在一些示例当中,内存分块与记录分区可以交替循环设置。
53.在本实施例的一些示例当中,内存块中还包括块总数记录空间,请参见图6所示的内存块60,该内存块60中除了至少两个内存分块61、可写地址记录空间62以外,还包括块总数记录空间63,该块总数记录空间63中记录的数据l能够体现当前已经添加到空闲内存队列中的空闲内存分块总数。在本实施例中,当有一个新的空闲内存分块需要被添加到空闲内存队列中的时候,内存操作控制设备可以根据块总数记录空间63中记录的数据l为该空闲内存分块分配使用序号,并在使用序号分配后,根据该空闲内存分块的使用序号对块总数记录空间63中记录的数据l进行修改。例如,总数记录空间62中当前记录的数据是“167”,则证明在此之前已经添加了167个空闲内存分块到空闲内存队列中,如果使用序号从“0”开始分配,即使用序号的初始值为“0”,则当又有一个新的空闲内存分块需要被分配使用序号时,内存操作控制设备将会为该新空闲内存分块分配使用序号“167”,如果使用序号从“1”开始分配,则内存操作控制设备将会为该新空闲内存分块分配使用序号“168”。每当向空闲内存队列中添加一个新地空闲内存分块后,l的值就会增加1。
54.s404:根据预设规则与空闲内存分块的使用序号确定空闲内存分块的内存地址在可写地址记录空间中对应的分区标识。
55.在本实施例中,一个空闲内存分块的内存地址应该被记录到哪一个记录分区中可以根据该空闲内存分块的使用序号确定。在本实施例的一些示例当中,内存操作控制设备根据预设规则以及空闲内存分块的使用序号确定该空闲内存分块的内存地址在可写地址记录空间中对应的分区标识,也即决定该空闲内存分块的内存地址在可写地址记录空间的哪一个记录分区中。
56.在本实施例的一种示例当中,内存操作控制设备可以确定使用序号对k的余数,为
了便于介绍,这里将该余数记为“第一余数”,内存操作控制设备得到第一余数后,可以将该第一余数作为空闲内存分块的内存地址在可写地址记录空间中对应的分区标识。
57.s406:按照空闲内存分块对应的分区标识将空闲内存分块的内存地址记录到可写地址记录空间的记录分区中。
58.内存操作控制设备确定出一个空闲内存分块内存地址在可写地址记录空间中对应的分区标识后,可以根据分区标识将空闲内存分块的内存地址记录到可写地址记录空间的记录分区中。
59.s408:确定有针对内存块的写操作线程发起后,确定写操作线程所对应内存分配序号。
60.在确定有针对内存块的写操作线程发起后,内存操作控制设备可以为该写操作线程确定内存分配序号,本实施例中为写操作线程确定内存分配序号实际上是为了保证为各写操作线程分配空闲内存分块的顺序符合空闲内存分块的使用序号。一个写操作线程的内存分配序号能够表征自内存块被划分出内存分块起直至该写操作线程发起累计存在的写操作线程的数目(为了便于介绍,以下将“自内存块被划分出内存分块起直至该写操作线程发起累计存在的写操作线程的数目”简称为“线程累积数目”)。例如,某写操作线程是自内存块被划分出内存分块后发起的第165个写操作线程,则在该写操作线程之前,内存操作控制设备已经为164个写操作线程分配过目标内存分块了,按照空闲内存队列中空闲内存分块的使用序号,如果初始使用序号为“1”,则该写操作线程应该被分配到使用序号为“165”的空闲内存分块,如果初始使用序号为“0”,则该写操作线程应该被分配到使用序号为“164”的空闲内存分块。
61.在本实施例的一些示例当中,内存块中还包括分配数记录空间,请参见图7,该内存块70中除了至少两个内存分块71、可写地址记录空间72以外,还包括分配数记录空间73,该分配数记录空间73中记录的数据f能够体现当前已分配出去的空闲内存分块的总数。当一个空闲内存分块被分配出去后,数据f的值将会增加1。所以,当需要为一个写操作线程分配目标内存分块时,内存操作控制设备可以根据分配数记录空间中当前记录的数据f确定写操作线程所对应的内存分配序号,由于为该写操作线程分配内存分配序号后,必然会按照其内存分配序号为其分配一个空闲内存分块(虽然此时还尚未确定具体是哪一个空闲内存分块),所以,在为写操作线程分配内存分配序号后可以对分配数记录空间73中的数据f进行修改,将f的值增加1。
62.s410:根据预设规则与内存分配序号确定该写操作线程的目标内存分块的内存地址在可写地址记录空间中对应的分区标识。
63.内存操作控制设备确定出一个写操作线程对应的内存分配序号后,可以根据预设规则以及该内存分配序号确定该写操作线程的目标内存分块的内存地址在可写地址记录空间中对应的分区标识。也即确定出该写操作线程所对应目标内存分块的内存地址被记录在可写地址记录空间的哪一个记录分区中。
64.在本实施例的一种示例当中,内存操作控制设备可以确定该内存分配序号对k的余数,为了便于介绍,这里将该余数记为“第二余数”,内存操作控制设备得到第二余数后,可以将该第二余数作为目标内存分块的内存地址在可写地址记录空间中对应的分区标识。
65.s412:根据目标内存分块对应分区标识查询可写地址记录空间确定目标内存分块
的内存地址。
66.获取到目标内存分块的内存地址在可写地址记录空间中对应的分区标识后,内存操作控制设备可以根据该分区标识查询可写地址记录空间确定目标内存分块的内存地址。
67.s414:将目标内存分块的内存地址提供给该写操作线程。
68.确定出目标内存分块的内存地址后,内存操作控制设备可以将该内存地址提供给对应的写操作线程,从而完成为该写操作线程进行目标内存分块分配的流程。
69.可以理解的是,s408-s414中为写操作线程进行目标内存分块分配的流程不限于内存块划分设置后发起的第一个写操作线程,也可以适用于其他任何一个写操作线程,例如任意一个写操作线程之后的一个新的写操作线程。
70.下面结合对本实施例中内存操作控制设备对非空闲内存分块进行回收的机制进行介绍:
71.在本实施例的一些示例当中,请参见图8,内存块80除了包括至少两个内存分块81以及一个可写地址记录空间82以外,还包括分别与各内存分块对应的计数记录空间83,也即每一个内存分块81都唯一对应一个计数记录空间83。在图8当中,内存分块81与计数记录空间83交替循环设置,但在本实施例的其他一些示例当中,内存分块81与其对应的计数记录空闲83也可以分散设置,例如,在一种示例当中,各内存分块81连续紧邻设置在一起,各计数记录空闲连续紧邻设置在一起。计数记录空间用于记录当前对对应内存分块进行读操作的读操作线程的数目,例如,如果一个内存分块当前被3个读操作线程操作,则其计数记录空间中记录的数据为“3”,如果此时又增加了一个读操作线程对其进行读操作,则其计数记录空间中记录的数据将变为“4”,如果这些读操作线程逐渐结束,则其计数记录空间中记录的数据也将越来越小,直至归零。
72.所以,在本实施例的一些示例当中,内存操作控制设备可以按照图9示出的流程图来进行非空闲内存分块的回收:
73.s902:对非空闲内存分块对应计数记录空间中记录的数据进行监测。
74.非空闲内存分块包括当前的可读内存分块以及其他普通非空闲内存分块,考虑到可读内存分块当前尚在其读有效期内,即时当前并无读操作线程对其进行读操作,但不能保证在其剩余的读有效期内也没有无读操作线程发起,所以,在本实施例的一些示例当中,即便当前的可读内存分块对应的计数记录空间中记录的数据为0,内存操作控制设备也暂时不会对其进行释放。所以,内存操作控制设备可以仅针对普通非空闲内存分块进行回收监测。
75.s904:判断对应计数记录空间中记录的数据是否为0。
76.若判断结果为是,则进入s906,否则,继续执行s902。
77.s906:将该非空闲内存分块中的数据进行清除得到的空闲内存分块。
78.应该理解的是,在内存操作控制设备对非空闲内存分块中的数据进行清除释放得到的空闲内存分块后,还可以按照图4中s402-s406的介绍将该空闲内存分块放入到空闲内存队列中。具体流程请参见前述介绍,这里不再赘述。
79.本实施例提供的内存操作控制方法,通过对非空闲内存分块的回收,实现了有限实际空闲内存分块的无限循环利用。且通过记录空闲内存队列中最新空闲内存分块的使用序号与已分配空闲内存分块的数目,结合可写地址记录空间对各实际内存分块内存地址的
记录,可以实现空闲内存分块的有序添加与分配。
80.实施例三:
81.为了让本领域技术人员对本发明实施例中内存操作控制方案的优点与细节更清楚,本实施例将结合示例继续对该方案进行阐述:
82.请参见图10,图10示出了一种内存块的结构:内存块100包括可读地址记录空间r、分配数记录空间f、块总数记录空间l、可写地址记录空间(包括第一记录分区w1、第二记录分区w2
……
第k记录分区wk)、至少两个内存分块(第一内存分块mem1、第二内存分块mem2
……
第k内存分块memk)以及与各内存分块分别对应的计数记录空间(第一计数记录空间c1、第二计数记录空间c2
……
第k计数记录空间ck)。
83.如果将一个内存分块、一个内存分块的计数记录空间以及该内存分块对应的记录分区整体视作一“段”,那么内存块整体的大小s就等于k乘以段的大小k0,再加上可读地址记录空间r的大小sr、分配数记录空间f的大小sf以及块总数记录空间l的大小sl,即
84.s=k*k0 sr sf sl;
85.在本实施例中,r,f,l各自占8byte,而一个段中,一个记录分区、一个计数记录空间分别占8byte、4byte,假定一个内存分块的大小为ss。
86.在本实施例,可读地址记录空间r、分配数记录空间f、块总数记录空间l、可写地址记录空间以及与各内存分块分别对应的计数记录空间中的数据都采用volitale(volatile是一个特征修饰符(type specifier),volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值)关键字修饰,以便让内存操作控制设备可以在数据变化后立即获知。
87.下面对内存块100的初始化、内存块100接受写操作线程的写操作、内存块100接受读操作线程的读操作、内存块100中内存分块的回收过程分别进行说明:
88.(1)内存块100的初始化:
89.设置r=0,f=0,l=k-1,各可写地址记录空间分别记录紧跟的内存分块的内存地址,但该内存块100整体对外的内存地址为p。可写地址记录空间是存放内存分块内存地址数据的缓冲区,f可以表征空闲内存队列中队首空闲内存分块的使用序号(0在本实施例中空闲内存分块的使用序号从“0”开始分配),l可以表征空闲内存队列中队尾空闲内存分块的使用序号。内存操作控制设备从队列中取出一个空闲内存分块时,f的值加一,当内存操作控制设备向空闲内存队列中放入一个空闲内存分块时,l的值加一。显然,当f等于l时,表示空闲内存队列已空;当l减f等于空闲内存队列大小时,表示空闲内存队列满。f&(k-1)表示当前空闲内存队列队首的空闲内存分块的内存地址在可写地址记录空间中的分区标识,f&(k-1)等同于f对k取余。l&(k-1)表示当前空闲内存队列队尾的空闲内存分块的内存地址在可写地址记录空间中的分区标识,l&(k-1)等同于l对k取余。
90.(2)写线程操作针对内存块100的写操作:
91.确定有写操作线程发起后,确定当前f的值为f1。内存操作控制设备判断l是否等于f1,若是,则表示空闲内存队列已空,暂时无法写入,所以写操作线程暂时主动放弃,对应cpu进入休眠等待唤起;如果内存操作控制设备判断l大于f1,则执行cas(f,f1,f1 1),这一步表示原子操作,保证多个写操作线程不会同时操作同一个内存分块。这里对cas算法进行简单说明:cas(f,f1,f1 1)表示当且仅当f与f1相等时,将f的值修改为f1 1。在内存操作控
制设备判断l大于f1的情况下,内存操作控制设备会从空闲内存队列取出空闲内存分块,确定出该空闲内存分块对应的分区标识f1&(k-1)。然后对内存地址p偏移24byte (f1&(k-1))*(12byte ss),从偏移后的地址开始读取前8字节内容,得到实际写入地址p1,写入完成后将r中的内存地址更新为实际写入的内存地址p1。
92.(3)读线程操作针对内存块100的读操作:
93.假定有读操作线程发起,则内存操作控制设备从按照内存块100的内存地址p,读取前8字节内容即是可读内存分块的内存块地址p1,然后按照该内存地址进行数据读取。同时,内存操作控制设备将该可读内存分块对应的计数记录空间中的值增加一。在写操作线程写入数据后,内存操作控制设备会立即更新r内容,因此读操作线程能立即获取到最新数据所在内存分块的内存地址,而后续发起的写操作线程写入的是根据f内容计算偏移后的内存地址,会在空闲内存分块中选取一块写入,避免了读写冲突。一个针对当前可读内存分块的读操作线程结束后,内存操作控制设备会控制将该可读内存分块对应的计数记录空间中的值减一。
94.(4)非空闲内存分块的回收:
95.若有写操作线程发起后,内存操作控制设备发现空闲内存队列中空闲内存分块不足,则其可以遍历除非空闲存块(分区标识对应于“0”到“f&(k-1)-1”的内存分块)的计数记录空间,确定是否对内存分块进行清除释放:首先,内存操作控制设备记录当前l值为l1,然后判断l1-f是否等于k-1,若是,则说明所有空闲内存队列满,不需要进行回收;若l1-f不等于k-1,则内存操作控制设备执行cas(l,l1,l1 1),这一步也是表示原子操作,保证多个线程无法同时操作同一个内存分块。回收的空闲内存分块将被添加至空闲内存队列的尾部,同时内存操作控制设备将会把该回收的空闲内存分块的内存地址写入到对应的记录分区中,以供后续分配。
96.另外,内存操作控制设备还可以一次性释放申请的连续内存p,即彻底释放内存块100。
97.实施例四:
98.本实施例提供了一种存储介质,该存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、计算机程序模块或其他数据)的任何方法或技术中实施的易失性或非易失性、可移除或不可移除的介质。存储介质包括但不限于ram(random access memory,随机存取存储器),rom(read-only memory,只读存储器),eeprom(electrically erasable programmable read only memory,带电可擦可编程只读存储器)、闪存或其他存储器技术、cd-rom(compact disc read-only memory,光盘只读存储器),数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。
99.该存储介质中可以存储有一个或多个可供一个或多个处理器读取、编译并执行的计算机程序,在本实施例中,该存储介质可以存储有内存操作控制程序,内存操作控制程序可供一个或多个处理器执行实现前述实施例介绍的任意一种内存操作控制方法的流程。
100.本实施例还提供了一种计算机程序产品,包括计算机可读装置,该计算机可读装置上存储有如上所示的计算机程序。本实施例中该计算机可读装置可包括如上所示的计算机可读存储介质。例如,该计算机程序产品包括内存操作控制设备,如图11所示:内存操作
控制设备11包括处理器111、存储器112以及用于连接处理器111与存储器112的通信总线113,其中存储器112可以为前述存储有内存操作控制程序的存储介质。且该存储器112中包括至少一内存块,该内存块中包括k个内存分块,k大于等于2。处理器111可以读取内存操作控制程序,进行编译并执行实现前述实施例中介绍的内存操作控制方法的流程:
101.处理器111从一内存块中划分出k个内存分块,并确定各内存分块的内存地址,k大于等于2。随后,确定有针对内存块的写操作线程发起后,为写操作线程分配目标内存分块,以供写操作线程按照目标内存分块的内存地址进行写操作;若在目标内存分块的读有效期内有针对内存块的读操作线程发起,则处理器111将目标内存分块作为内存块当前的可读内存分块提供给读操作线程,以供读操作线程按照目标内存分块的内存地址进行读操作;目标内存分块的读有效期自写操作线程对目标内存分块的写操作完成起,至下一写操作线程完成前;若在目标内存分块的读有效期内有针对内存块的新写操作线程发起,则处理器111从可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块,以供其进行写操作。
102.在为写操作线程分配目标内存分块之后,若在写线程操作对对应的目标内存分块进行写操作期间接收到新写操作线程的写操作请求,则处理器111还可以从当前的可读内存分块与写操作线程的目标内存分块以外的其他内存分块中为新写操作线程分配目标内存分块,以供其进行写操作。
103.在本实施例的一些示例当中,内存块中还包括可读地址记录空间;处理器111将目标内存分块作为内存块当前的可读内存分块提供给读操作线程进行读操作时,可以在写操作线程对目标内存分块的写操作完成后,先将目标内存分块的内存地址记录至可读地址记录空间中;在接收到读操作线程的读操作请求后,再从可读地址记录空间中提取最新记录的内存地址提供给读操作线程。
104.在本实施例的一些示例当中,处理器111将目标内存分块的内存地址记录至可读地址记录空间中时,可以将目标内存分块的内存地址以覆盖式的方式记录到可读地址记录空间中。
105.在本实施例的一些示例当中,处理器111从可读内存分块以外的其他内存分块中为新写操作线程分配目标内存分块时,可以从空闲内存分块中选择一个作为新写操作线程的目标内存分块分配给新写操作线程,空闲内存分块为当前未写入数据的内存分块。在本实施例的另外一些示例当中,处理器111也可以从可读内存分块以外的非空闲内存分块中选择一个,并将所选择的内存分块中的数据清除,然后将该内存分块作为新写操作线程的目标内存分块分配给新写操作线程。
106.在本实施例的一些示例当中,内存块中还包括可写地址记录空间,可写地址记录空间包括k个记录分区,各记录分区均具有唯一的分区标识;处理器111从一内存块中划分出k个内存分块之后,还可以为空闲内存分块分配使用序号,空闲内存分块的使用序号能够表征自内存块被划分出内存分块起直至该空闲内存分块内分配出去累计分配的空闲内存分块的数目,然后根据预设规则与空闲内存分块的使用序号确定空闲内存分块的内存地址在可写地址记录空间中对应的分区标识。随后,处理器111按照空闲内存分块对应的分区标识将空闲内存分块的内存地址记录到可写地址记录空间的记录分区中。在从空闲内存分块中选择一个作为新写操作线程的目标内存分块分配给新写操作线程时,处理器111先确定
新写操作线程所对应内存分配序号,写操作线程的内存分配序号能够表征自内存块被划分出内存分块起直至该写操作线程发起累计存在的写操作线程的数目。然后,处理器111根据预设规则与内存分配序号确定新写操作线程的目标内存分块的内存地址在可写地址记录空间中对应的分区标识,并根据目标内存分块对应分区标识查询可写地址记录空间确定目标内存分块的内存地址。随后,处理器111将目标内存分块的内存地址提供给新写操作线程。
107.在本实施例的一些示例当中,内存块中还包括块总数记录空间,处理器111为空闲内存分块分配使用序号时,可以根据块总数记录空间中记录的数据l为空闲内存分块分配使用序号,并在为空闲内存分块分配使用序号后对块总数记录空间中记录的数据l进行修改。
108.在本实施例的一些示例当中,内存块中还包括分配数记录空间,处理器111确定新写操作线程所对应内存分配序号时,可以根据分配数记录空间中当前记录的数据f确定新写操作线程所对应的内存分配序号,并在为新写操作线程分配内存分配序号后修改分配数记录空间中记录的数据f。
109.在本实施例的一些示例当中,处理器111根据预设规则与空闲内存分块的使用序号确定空闲内存分块的内存地址在可写地址记录空间中对应的分区标识时,可以先确定使用序号对k的第一余数,将第一余数作为空闲内存分块的内存地址在可写地址记录空间中对应的分区标识;
110.在处理器111根据预设规则与内存分配序号确定新写操作线程的目标内存分块的内存地址在可写地址记录空间中对应的分区标识时,可以确定内存分配序号对k的第二余数,将第二余数作为目标内存分块的内存地址在可写地址记录空间中对应的分区标识。
111.在本实施例的一些示例当中,内存块中还包括与各内存分块对应的计数记录空间,计数记录空间用于记录当前对对应内存分块进行读操作的读操作线程的数目;处理器111还可以对非空闲内存分块对应计数记录空间中记录的数据进行监测;若计数记录空间中记录的数据为0,则处理器111将非空闲内存分块中的数据进行清除得到的空闲内存分块。
112.内存操作控制设备11的处理器111执行内存操作控制程序实现内存操作控制方法的细节请参见前述实施例中的介绍,这里不再赘述。
113.本实施例中提供了一种内存操作控制设备,在读操作线程与写操作线程对内存进行操作时,不加读锁与写锁,从而使得读操作线程与写操作线程可以同时进行。同时,又因为内存操作控制设备将该内存块划分出了至少两个内存分块,并在为写操作线程分配供其进行数据写入的目标内存分块时,排除当前的可读内存分块,从而使得写操作线程的操作不会影响到读操作线程,即便两种操作线程同时对内存块进行操作,但因为操作针对的内存分块并不相同,所以,可以在不对内存块加锁的情况下保证数据写入与数据读取的正确性与有效性。也即,本实施例中的内存操作控制方法通过设置至少两个内存分块保证了与相关技术中一样的正确性、有效性一样,但换取了更高的读写效率,避免了读操作线程与写操作线程相互堵塞的情况。
114.更进一步地,在本实施例中,因为内存操作控制设备在为写操作线程分配目标内存分块的时候,会避开其他当前还未结束的写操作线程的目标内存分块,因此,可以保证即
便两个甚至两个以上的写操作线程同步进行的情况下,各写操作线程也是针对不同的内存分块进行操作,进而在脏数据产生的基础上提升了响应并发写操作线程的效率,能够适应大量写操作并发的场景。
115.可见,本领域的技术人员应该明白,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件(可以用计算装置可执行的计算机程序代码来实现)、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。
116.此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、计算机程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。所以,本发明不限制于任何特定的硬件和软件结合。
117.以上内容是结合具体的实施方式对本发明实施例所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献