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

随机数序列生成方法和随机数引擎与流程

2021-12-17 20:51:00 来源:中国专利 TAG:

随机数序列生成方法和随机数引擎
1.本技术要求于2020年06月11日提交中国专利局、申请号为202010526858.7、发明名称为“随机数的管理方法、装置和设备”的中国专利申请的优先权,其全部内容通过引用结合在本技术中。
技术领域
2.本技术涉及计算机领域,尤其涉及一种随机数序列生成方法和随机数引擎。


背景技术:

3.随机数生成器(random number generator,rng)指能够产生随机数序列的算法,该随机数生成器常以软件程序的形式运行于处理器中,用于为该处理器中的进程提供随机数序列。
4.目前,随机数生成器(例如,流式生成器)根据每个随机数生成命令分别生成一个随机数序列,并将该随机数序列发送给该随机数生成命令关联的进程,随机数生成器并不保存该随机数序列。当前述进程所需的随机数序列的数量较大时,或者,当前述处理器中存在多个进程需要随机数序列时,则要求该处理器在运行前述进程的同时运行一个或多个随机数生成器。在此过程中,将严重占用处理器的处理资源。因此,如何寻求一种能够提升随机数序列生成效率的方法成为亟待解决的技术问题。


技术实现要素:

5.本技术提供了一种随机数序列生成方法和随机数引擎,用于在为处理器中的进程提供随机数序列的同时,能够卸载处理器的处理负荷,提升随机数序列的生成效率。
6.第一方面,提供了一种随机数引擎,可以应用于基于虚拟机的云计算场景,也可以应用于基于容器的微服务场景。该随机数引擎主要包括第一处理器,该第一处理器与该随机数引擎外部的第二处理器通过总线连接。其中,该第二处理器中运行了多个进程。当前述进程有随机数序列的需求时,前述进程可以通过生成命令向第一处理器申请随机数序列。于是,该第一处理器可以接收来自至少一个进程的生成命令,该生成命令用于指示该进程向该第一处理器申请随机数序列。此外,该第一处理器还将根据前述每个该生成命令为该生成命令对应的进程分配随机数序列。
7.通过在第二处理器外设置随机数引擎,由该随机数引擎根据来自第二处理器中的进程的生成命令执行为进程分配随机数序列的功能。相比于传统技术中由第二处理器运行随机数序列生成软件来给第二处理器中的进程生成随机数序列的方案,可以降低第二处理器的处理负荷。
8.在一种可能的实施方式中,与前述第一处理器和第二处理器相连的总线上还配置有第二存储器。其中,该第二存储器位于前述第一处理器外且位于前述第二处理器外。可选的,该第二存储器位于随机数引擎外。该第一处理器,还用于生成至少一个随机数序列,并将该至少一个随机数序列存储至第二存储器中。
9.由于随机数引擎将每次生成的随机数序列存储至第二存储器中,因此,该随机数引擎可以从已生成的随机数序列中选择进程所需要的随机数序列。相比于传统技术中,进程每次申请的随机数序列均需要流式随机数生成器重新生成,本实施方式中的随机数引擎可以将生成的随机数序列存储下来,以便进程需要随机数序列时给该进程提供随机数序列。因此,可以缩短随机数引擎为进程提供随机数序列的时延,同时可以缩短进程获取随机数序列的时延。
10.在另一种可能的实施方式中,该随机数引擎还包括第一存储器。该第一处理器,还用于记录生成该至少一个随机数序列中的每个随机数序列的次序,并将该次序与第一存储地址对应存储至该第一存储器中,该第一存储地址为该次序对应的随机数序列在该第二存储器中的存储地址。
11.当第二处理器中包含多个进程,且每个进程在不同的时刻向随机数引擎申请随机数序列时,前述次序将作为第一处理器查找随机数序列的搜索依据(即作为索引号使用),以便于该随机数引擎能够从第一存储器中查到某一次序对应的随机数序列的存储地址,进而有利于提升随机数引擎向进程提供随机数序列的效率。此外,若不同的进程之间需要相同的或不同的随机数序列,则前述次序可以作为区分是否为同一个随机数序列的依据,省去随机数引擎按照随机数序列中的每个数字对随机数序列进行识别的功能。有利于在提升分配随机数序列的效率的同时,能够给不同的进程提供随机数序列。
12.在另一种可能的实施方式中,该生成命令携带一个进程的标识。该第一处理器,具体用于:根据每个该生成命令确定每个该进程的迭代次数;根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,该迭代次数用于指示同一进程向该第一处理器申请随机数序列的次数;通过该第二存储器向每个该进程提供每个该进程对应的该目标随机数序列。
13.提出根据进程发送的生成命令确定迭代次数,将该迭代次数和生成随机数序列的次序作为第一处理器为进程分配随机数序列的依据。由于,迭代次数能够反映同一进程向该第一处理器申请随机数序列的次数,因此,第一处理器可以基于该迭代次数确定前述第二存储器中是否存在可以提供给该进程的随机数序列。基于迭代次数和次序作为搜索依据,有利于提高随机数引擎的搜索效率。
14.在另一种可能的实施方式中,该至少一个进程包括第一进程,该生成命令包括该第一进程的标识。该第一处理器,具体用于确定接收携带该第一进程的标识的生成命令的次数为该第一进程的迭代次数。
15.提出了一种根据生成命令确定迭代次数的具体实现方式。不同的进程的迭代次数不一定相同。该第一处理器可以记录接收的来自同一进程的生成命令的次数,这个次数即为该进程的迭代次数。当然,该第一处理器在工作时可能收到多个生成命令,前述多个生成命令可能来自于不同的进程。由于,该生成命令中携带了进程的标识,因此,该第一处理器可以获取该生成命令中的进程的标识以确定该生成命令是来自于哪个进程。
16.在另一种可能的实施方式中,该至少一个进程包括第一进程,该生成命令包括该第一进程的标识和该第一进程的迭代次数。
17.提出前迭代次数可以由进程确定。由于,进程能够确定向随机数引擎申请了多少次随机数序列,也能确定该进程当前向随机数引擎发送的是第几次的生成命令。因此,该进
程可以在前述生成命令中携带迭代次数。在这种实施方式中,前述第一处理器可以省去对生成命令计数而确定迭代次数的步骤。有利于提高随机数引擎为进程分配随机数序列的效率。
18.在另一种可能的实施方式中,该第一处理器,还用于接收每个该进程的注册命令,该注册命令携带一个进程的标识和该进程的模式信息,该模式信息用于指示该进程所需的随机数序列与该第二处理器中其他进程所需的随机数序列之间的关系。
19.提出若进程需要随机数引擎为该进程生成随机数序列,则该进程需要向该随机数引擎注册,以实现该进程与该随机数引擎绑定。此后,可以使该第一进程仅向该随机数引擎申请随机数序列,而不会向其他随机数引擎申请随机数序列;也可以使随机数引擎获知将要提供随机数序列的对象,即使随机数引擎获知将要向哪些进程提供随机数序列。此外,该注册命令可以携带部分关于进程的信息,例如,进程的标识和模式信息。其中,进程的标识用于唯一标识该进程。进程的模式信息指该进程需要哪种模式的随机数序列,也可以理解为,该进程运行的业务需要哪种模式的随机数序列。以使得该随机数引擎在此后按照前述模式信息为进程提供随机数序列。有利于在随机数引擎能够为进程提供随机数序列的基础之上,能够进一步为每个进程提供适用于该进程的随机数序列,以提高进程的业务处理效率。
20.在另一种可能的实施方式中,该模式信息为第一模式,该第一模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列相同。
21.提出前述模式信息可以为第一模式,该第一模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列相同。当随机数引擎检测到该注册命令中携带的是第一模式之后,该随机数引擎将采用第一模式为进程分配/生成随机数序列。进一步地,可以理解为,在该第一模式下,第一进程第n次申请的随机数序列和其他采用第一模式的进程第n次申请的随机数序列是相同的,其中,n为大于或等于1的整数。
22.在另一种可能的实施方式中,当随机数引擎采用第一模式为进程生成随机数序列时,该随机数引擎中的第一存储器,具体用于存储第一映射表,该第一映射表用于指示该第一存储地址与该第一处理器生成该随机数序列的次序之间的对应关系。
23.本实施方式中,由于,在该第一模式下,第一进程第n次申请的随机数序列和其他采用第一模式的进程第n次申请的随机数序列是相同的。因此,该随机数引擎每次生成的一个随机数序列可以供第二处理器中采用第一模式的多个进程使用。随机数引擎中的第一存储器可以仅存储生成随机数序列的次序和该随机数序列的存储地址,无需标注每个随机数序列是提供给哪个进程的。因此,第一存储器中的第一映射表能够反映第一存储地址与该第一处理器生成该随机数序列的次序之间的对应关系,其中,第一存储地址为该次序对应的随机数序列在该第二存储器中的存储地址。
24.在另一种可能的实施方式中,当随机数引擎采用第一模式为进程生成随机数序列时,该第一处理器,具体用于:当该第一映射表中存在与该第一进程的迭代次序相等的第一次序时,确定该第一次序对应的存储地址所指示的随机数序列为该目标随机数序列。
25.提出第一处理器基于迭代次数在第一映射表中查找与该迭代次数对应的次序。当前述迭代次数与前述第一映射表中存储的某一个次序相等时,则说明该第一进程通过生成命令申请的随机数序列是该第一处理器已经计算出并存储于第二存储器中的。该第一处理
器可以直接向该第一进程提供与该次序对应的随机数序列(即目标随机数序列)在第二存储器中的存储地址,而无需再单独为该第一进程计算随机数序列。在这种实施方式中,可以节省第一处理器的计算资源,降低第一处理器的处理负荷。
26.在另一种可能的实施方式中,该第一处理器,具体用于:当该第一映射表中不存在与该第一进程的迭代次序相等的第一次序时,采用计算参数计算该目标随机数序列,并将该目标随机数序列存储至该第二存储器中,将该目标随机数序列的存储地址与该第一处理器生成该目标随机数序列的次序对应存储至该第一映射表中。
27.提出在基于迭代次数从第一映射表中查找与该迭代次数对应的次序的过程中,若当前述迭代次数与随机数引擎中存储的任意一项次序均不相等,则该随机数引擎便根据前述计算参数为该第一进程计算目标随机数序列。以使得该第一处理器能够向该第一进程提供该第一进程所需要的随机数序列(即目标随机数序列)。此外,该第一处理器还将前述目标随机数序列存储至第二存储器中,将该目标随机数序列的存储地址与生成该目标随机数序列的次序对应存储至该第一映射表中。可以使得此后其他进程再向随机数引擎申请前述目标随机数序列时,该第一处理器可以直接将该目标随机数序列的存储地址提供给该进程,而无需再次计算目标随机数序列。因此,有利于节省第一处理器的计算资源,降低第一处理器的处理负荷。
28.在另一种可能的实施方式中,该模式信息为第二模式,该第二模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列不同。
29.提出前述模式信息可以为第二模式,该第二模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列不同。当随机数引擎检测到该注册命令中携带的是第二模式之后,该随机数引擎将采用第二模式为进程分配/生成随机数序列。进一步地,可以理解为,在该第二模式下,第一进程第n次申请的随机数序列和其他采用第二模式的进程第n次申请的随机数序列是互不相同的,其中,n为大于或等于1的整数。
30.在另一种可能的实施方式中,该第一存储器,具体用于存储第二映射表,该第二映射表用于指示该第一存储地址、该第一处理器生成该随机数序列的次序和申请该随机数序列的进程的标识之间的对应关系。
31.由于,在该第一模式下,第一进程第n次申请的随机数序列和其他采用第二模式的进程第n次申请的随机数序列是互不相同的。因此,该随机数引擎每次生成的一个随机数序列是针对于某一个进程使用的。因此,该第一存储器中的第二映射表需要存储生成随机数序列的次序、该随机数序列的存储地址以及该随机数序列对应的进程的标识。因此,该第二映射表用于指示该第一存储地址、该第一处理器生成该随机数序列的次序和申请该随机数序列的进程的标识之间的对应关系。其中,第一存储地址为该次序对应的随机数序列在该第二存储器中的存储地址。
32.在另一种可能的实施方式中,该第一处理器,具体用于:当该第二映射表中存在与该第一进程的迭代次数相等的第二次序,且该第二次序与该第一进程的标识对应时,确定该第二次序对应的存储地址所指示的随机数序列为该目标随机数序列。
33.提出第一处理器基于迭代次数在第二映射表中查找与该迭代次数对应的次序。当前述迭代次数与前述第二映射表中存储的某一个次序相等,且该次序下的多个随机数序列中存在一个与第一进程的标识对应的随机数序列时,则说明该第一进程通过生成命令申请
的随机数序列是该第一处理器已经计算出并存储于第二存储器中的。该第一处理器可以直接向该第一进程提供与该次序对应的随机数序列(即目标随机数序列)在第二存储器中的存储地址,而无需再单独为该第一进程计算随机数序列。在这种实施方式中,可以节省第一处理器的计算资源,降低第一处理器的处理负荷。
34.在另一种可能的实施方式中,该第一处理器,具体用于:当该第二映射表中不存在与该第一进程的迭代次数相等的该第二次序时,或者,该第二次序与该第一进程的标识不对应时,计算该目标随机数序列,并将该目标随机数序列存储至该第二存储器中,将该目标随机数序列的存储地址、该第一进程的标识和该第一处理器生成该目标随机数序列的次序对应存储至该第二映射表中。
35.提出在基于迭代次数从第二映射表中查找与该迭代次数对应的次序的过程中,若当前述迭代次数与随机数引擎中存储的任意一项次序均不相等,或者,该第二映射表中不存在该第一进程的标识时,则该随机数引擎便根据前述计算参数为该第一进程计算目标随机数序列。以使得该第一处理器能够向该第一进程提供该第一进程所需要的随机数序列(即目标随机数序列)。此外,该第一处理器还将前述目标随机数序列存储至第二存储器中,将该目标随机数序列的存储地址与生成该目标随机数序列的次序对应存储至该第二映射表中。可以使得此后其他进程再向随机数引擎申请前述目标随机数序列时,该第一处理器可以直接将该目标随机数序列的存储地址提供给该进程,而无需再次计算目标随机数序列。因此,有利于节省第一处理器的计算资源,降低第一处理器的处理负荷。
36.在另一种可能的实施方式中,该第一处理器,具体用于:确定第一值,该第一值为携带该第二模式的注册命令的数量;根据该第一值和计算参数计算一个第二随机数序列,并将该一个第二随机数序列拆分为n个第三随机数序列,每个该第三随机数序列与一个采用该第二模式的进程对应,该目标随机数序列为该n个第三随机数序列中的一个,该n等于该第一值;将该n个第三随机数序列中的每个第三随机数序列存储至该第二存储器中,并且,将每个该第三随机数序列的存储地址、生成该第三随机数序列对应的次序和该第三随机数序列对应的进程的标识对应存储至该第二映射表中。
37.提出一种在第二模式下第一处理器为进程生成随机数序列的具体实现方式。由于,在第二模式下,每个进程所需的随机数序列均不同,若第一处理器分别为每个进程生成随机数序列则将严重增加第一处理器的处理负荷。而本实施方式中,提出该第一处理器先计算出一个大随机数序列,然后基于前述第一值将这一个大随机数序列拆分为若干个小随机数序列。也就是说,当有一个进程内部迭代计算较快时,该第一进程需要使用的是第一处理器第n次生成的随机数序列,而其他进程当前使用的是第一处理器第(n-1)次生成的随机数序列或第(n-2)次生成的随机数序列等。此时,该第一处理器在为第一进程生成随机数序列的同时,也生成了其他进程未来将要使用的随机数序列。此后,当其他进程向第一处理器发送生成命令时,该第一处理器无需再次为前述其他进程计算随机数序列。因此,有利于减少其他进程获取随机数序列的时延。
38.在另一种可能的实施方式中,该注册命令还包括序列长度,或者,该生成命令还包括该序列长度,该序列长度用于指示进程所需要的随机数序列的序列长度。该第二随机数序列的序列长度等于每个采用该第二模式的进程的序列长度的累计和,该第三随机数序列的序列长度等于与该第三随机数序列对应的进程的序列长度。
39.提出第一处理器拆分随机数序列时,是按照随机数序列的序列长度进行拆分的。该序列长度可以携带于前述注册命令中,也可以携带与前述生成命令中。
40.在另一种可能的实施方式中,该计算参数来自该注册命令;或者,该计算参数为该第一存储器预存的参数。
41.在另一种可能的实施方式中,该计算参数包括真随机数算法;或者,该计算参数包括种子和伪随机数算法。
42.提出基于算法的不同,第一处理器生成的随机数序列也将不同。当采用真随机数算法时,第一处理器输出真随机数序列;当采用伪随机数算法时,第一处理器输出伪随机数序列。
43.在另一种可能的实施方式中,该第一处理器,还用于:接收来自该第一进程的注销命令,该注销命令携带该第一进程的标识;从该第二映射表中确定与该第一进程的标识对应的每个存储地址,并根据该每个存储地址从该第二存储器中删除该每个存储地址存储的随机数序列;从该第二映射表中删除该第一进程的标识以及该第一进程的标识对应的该每个存储地址。
44.提出若第一进程不再需要随机数序列时,该第一进程可以向第一处理器发送注销命令,该第一处理器可以基于该注销命令删除第二存储器中的随机数序列,以释放第二存储器的存储空间。与此同时,该第一处理器还将删除第二映射表中与前述随机数序列相关的信息(例如,前述随机数序列在第二存储器中的存储地址)。这样的实施方式中,可以提高前述第一存储器的利用率和前述第二存储器的利用率。
45.在另一种可能的实施方式中,该第一处理包括至少一个处理逻辑,每个该处理逻辑根据该第一模式或该第二模式中的任意一种确定生成随机数序列的模式。
46.在另一种可能的实施方式中,该随机数引擎还包括:
47.单根输入/输出虚拟化技术sr-iov模块,用于生成多个虚拟第一处理器和多个虚拟第一存储器,每个该虚拟第一处理器和该虚拟第一存储器用于为一个应用实例提供至少一个随机数序列,该应用实例包括虚拟机或容器。
48.提出随机数引擎配置了sr-iov模块,以使得该随机数引擎具有sr-iov功能。也就是说,该随机数引擎可以将该随机数引擎中的部分物理功能模块(例如,前述第一处理器和前述第一存储器)虚拟出多份虚拟功能模块(例如,虚拟第一处理器和虚拟第一存储器)。其中,每一份虚拟功能模块可以专属服务于一个虚拟机或一个容器。于是,可以使得前述一个随机数引擎同时向多个虚拟机或者多个容器提供随机数序列。在这种实施方式中,扩大了随机数引擎的使用场景,提高了随机数引擎的利用效率。
49.第二方面,提供了一种随机数序列生成方法,可以应用于基于虚拟机的云计算场景,也可以应用于基于容器的微服务场景。在该随机数序列生成方法中,随机数引擎接收来自至少一个进程的生成命令,然后,该随机数引擎根据每个该生成命令为该生成命令对应的进程分配随机数序列。其中,该生成命令用于指示该进程向该第一处理器申请随机数序列,该进程运行于该随机数引擎外的第二处理器中,该随机数引擎与该第二处理器通过总线连接。
50.通过在第二处理器外设置随机数引擎,由该随机数引擎根据来自第二处理器中的进程的生成命令执行为进程分配随机数序列的功能。相比于传统技术中由第二处理器运行
随机数序列生成软件来给第二处理器中的进程生成随机数序列的方案,可以降低第二处理器的处理负荷。
51.在一种可能的实施方式中,该方法还包括:该随机数引擎生成至少一个随机数序列,并将该至少一个随机数序列存储至第二存储器中,该第二存储器位于该随机数引擎外,该第二存储器、该随机数引擎和该第二处理器通过该总线连接。
52.在另一种可能的实施方式中,该方法还包括:该随机数引擎记录生成该至少一个随机数序列中的每个随机数序列的次序,并将该次序与第一存储地址对应存储至该随机数引擎的第一存储器中,该第一存储地址为该次序对应的随机数序列在该第二存储器中的存储地址。
53.在另一种可能的实施方式中,该生成命令携带一个进程的标识;该随机数引擎根据每个该生成命令为该生成命令对应的进程分配随机数序列,包括:该随机数引擎根据每个该生成命令确定每个该进程的迭代次数;该随机数引擎根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,该迭代次数用于指示同一进程向该第一处理器申请随机数序列的次数;该随机数引擎通过该第二存储器向每个该进程提供每个该进程对应的该目标随机数序列。
54.在另一种可能的实施方式中,该至少一个进程包括第一进程,该生成命令包括该第一进程的标识;该随机数引擎根据每个该生成命令确定每个该进程的迭代次数,包括:该随机数引擎确定接收携带该第一进程的标识的生成命令的次数为该第一进程的迭代次数。
55.在另一种可能的实施方式中,该至少一个进程包括第一进程,该生成命令包括该第一进程的标识和该第一进程的迭代次数。
56.在另一种可能的实施方式中,该方法还包括:该随机数引擎接收每个该进程的注册命令,该注册命令携带一个进程的标识和该进程的模式信息,该模式信息用于指示该进程所需的随机数序列与该第二处理器中其他进程所需的随机数序列之间的关系。
57.在另一种可能的实施方式中,该模式信息为第一模式,该第一模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列相同。
58.在另一种可能的实施方式中,该第一存储器存储有第一映射表,该第一映射表用于指示该第一存储地址与生成该随机数序列的次序之间的对应关系。
59.在另一种可能的实施方式中,该随机数引擎根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,包括:当该第一映射表中存在与该第一进程的迭代次序相等的第一次序时,该随机数引擎确定该第一次序对应的存储地址所指示的随机数序列为该目标随机数序列。
60.在另一种可能的实施方式中,该随机数引擎根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,包括:当该第一映射表中不存在与该第一进程的迭代次序相等的第一次序时,该随机数引擎采用计算参数计算该目标随机数序列,并将该目标随机数序列存储至该第二存储器中,将该目标随机数序列的存储地址与生成该目标随机数序列的次序对应存储至该第一映射表中。
61.在另一种可能的实施方式中,该模式信息为第二模式,该第二模式用于指示该进程所需的随机数序列与其他进程所需的随机数序列不同。
62.在另一种可能的实施方式中,该第一存储器存储有第二映射表,该第二映射表用
于指示该第一存储地址、该第一处理器生成该随机数序列的次序和申请该随机数序列的进程的标识之间的对应关系。
63.在另一种可能的实施方式中,该随机数引擎根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,包括:当该第二映射表中存在与该第一进程的迭代次数相等的第二次序,且该第二次序与该第一进程的标识对应时,该随机数引擎确定该第二次序对应的存储地址所指示的随机数序列为该目标随机数序列。
64.在另一种可能的实施方式中,该随机数引擎根据每个进程的该迭代次数和该第一存储器中存储的该次序确定每个该进程对应的目标随机数序列,包括:当该第二映射表中不存在与该第一进程的迭代次数相等的该第二次序时,或者,该第二次序与该第一进程的标识不对应时,该随机数引擎计算该目标随机数序列,并将该目标随机数序列存储至该第二存储器中,将该目标随机数序列的存储地址、该第一进程的标识和生成该目标随机数序列的次序对应存储至该第二映射表中。
65.在另一种可能的实施方式中,该随机数引擎计算该目标随机数序列,包括:该随机数引擎确定第一值,该第一值为携带该第二模式的注册命令的数量;该随机数引擎根据该第一值和计算参数计算一个第二随机数序列,并将该一个第二随机数序列拆分为n个第三随机数序列,每个该第三随机数序列与一个采用该第二模式的进程对应,该目标随机数序列为该n个第三随机数序列中的一个,该n等于该第一值;该方法还包括;将该n个第三随机数序列中的每个第三随机数序列存储至该第二存储器中,并且,将每个该第三随机数序列的存储地址、生成该第三随机数序列对应的次序和该第三随机数序列对应的进程的标识对应存储至该第二映射表中。
66.在另一种可能的实施方式中,该注册命令还包括序列长度,或者,该生成命令还包括该序列长度,该序列长度用于指示进程所需要的随机数序列的序列长度;该第二随机数序列的序列长度等于每个采用该第二模式的进程的序列长度的累计和,该第三随机数序列的序列长度等于与该第三随机数序列对应的进程的序列长度。
67.在另一种可能的实施方式中,该计算参数来自该注册命令;或者,该计算参数为该随机数引擎中的第一存储器预存的参数。
68.在另一种可能的实施方式中,该计算参数包括真随机数算法;或者,该计算参数包括种子和伪随机数算法。
69.在另一种可能的实施方式中,该方法还包括:该随机数引擎接收来自该第一进程的注销命令,该注销命令携带该第一进程的标识;该随机数引擎从该第二映射表中确定与该第一进程的标识对应的每个存储地址,并根据该每个存储地址从该第二存储器中删除该每个存储地址存储的随机数序列;该随机数引擎从该第二映射表中删除该第一进程的标识以及该第一进程的标识对应的该每个存储地址。
70.在另一种可能的实施方式中,该随机数引擎包括至少一个处理逻辑,每个该处理逻辑根据该第一模式或该第二模式中的任意一种确定生成随机数序列的模式。
71.在另一种可能的实施方式中,该方法还包括:该随机数引擎生成多个虚拟第一处理器和多个虚拟第一存储器,每个该虚拟第一处理器和该虚拟第一存储器用于为一个应用实例提供至少一个随机数序列,该应用实例包括虚拟机或容器。
72.需要说明的是,本技术实施例还有多种具体其他实施方式,具体可参见第一方面的具体实施方式和其有益效果,在此不再赘述。
73.第三方面,提供一种随机数引擎,所述随机数引擎包括用于执行第二方面或第二方面任一种可能实现方式中的随机数序列生成方法的各个模块。
74.第四方面,提供了一种处理系统,可以应用于基于虚拟机的云计算场景,也可以应用于基于容器的微服务场景。该处理系统包括:随机数引擎、第二处理器、第二存储器和总线;并且,该随机数引擎、该第二处理器和该第二存储器通过该总线连接。其中,该第二处理器用于进行多个进程,每个该进程用于多次向该随机数引擎申请随机数序列;该随机数引擎用于实现如第一方面以及第一方面的任意一种实施方式所介绍的功能;该第二存储器用于存储该随机数引擎生成的随机数序列。
75.第五面,提供了一种计算机可读存储介质,其上存储有计算机程序或指令,其特征在于,该计算机程序或指令被执行时使得随机数引擎执行第二方面以及第二方面中任意一种实施方式所介绍的方法,或者,执行第二方面以及第二方面中任意一种实施方式所介绍的方法。
76.第六方面,本技术提供了一种包含指令的计算机程序产品,该计算机程序产品包括计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述各方面所述的方法。
77.从以上技术方案可以看出,本实施例具有以下优点:
78.通过在第二处理器外设置随机数引擎,由该随机数引擎根据来自第二处理器中的进程的生成命令执行为进程分配随机数序列的功能。相比于传统技术中由第二处理器运行随机数序列生成软件来给第二处理器中的进程生成随机数序列的方案,可以降低第二处理器的处理负荷。
附图说明
79.图1a为本实施例提供的一种随机数引擎适用的设备或系统的架构示意图;
80.图1b为本实施例提供的一种随机数引擎应用于基于虚拟机的云计算场景的示意图;
81.图1c为本实施例提供的一种随机数引擎应用于基于容器的微服务场景的示意图;
82.图2a为本实施例提供的一种随机数引擎的结构示意图;
83.图2b为本实施例提供的另一种随机数引擎的结构示意图;
84.图3为本实施例提供的一种随机数序列生成方法的流程示意图;
85.图4a为本实施例提供的另一种随机数序列生成方法的流程示意图;
86.图4b为本实施例提供的一种采用第一模式生成的随机数序列在外部存储器中的存储方式的示意图;
87.图4c为本实施例提供的另一种采用第一模式生成的随机数序列在外部存储器中的存储方式的示意图;
88.图4d为本实施例提供的另一种采用第一模式生成的随机数序列在外部存储器中的存储方式的示意图;
89.图5a为本实施例提供的另一种随机数序列生成方法的流程示意图;
90.图5b为本实施例提供的一种采用第二模式生成的随机数序列在外部存储器中的存储方式的示意图;
91.图6a为本实施例提供的另一种随机数引擎的结构示意图;
92.图6b为本实施例提供的一种随机数引擎的内部缓存的存储方式示意图;
93.图7为本实施例提供的另一种随机数引擎的结构示意图。
具体实施方式
94.本实施例提供了一种随机数序列生成方法和随机数引擎,用于在为处理器中的进程提供随机数序列的同时,能够卸载处理器的处理负荷,提升随机数序列的生成效率。
95.为便于理解,下面先对本技术实施例所涉及的部分技术术语进行解释:
96.随机数序列(random sequence):指由随机数组成的序列。根据随机数的不同随机数序列分为真随机数序列(true random number sequence)和伪随机数序列(pseudo random number sequence)。其中,真随机数序列中的每个随机数是不可预测的。通常地,随机数生成器主要是通过放大电路的热噪声来产生真随机数序列。而伪随机数序列是由计算机按照一定的算法模拟产生的。伪随机数序列中的每个伪随机数是确定的且可预测的,但是,具有类似于真随机数的统计特征,可以满足计算机训练等随机应用的需求。而本实施例中提出的随机数引擎可以用于生成真随机数序列和/或伪随机数序列。
97.虚拟机(virtual machine):指通过软件模拟且具有硬件系统功能的运行在一个完全隔离环境中的计算机系统。该虚拟机运行于实体计算机中,在实体计算机中能够完成的工作在虚拟机中都能够实现。常见的虚拟机有:java虚拟机、linux虚拟机和windows虚拟机。本实施例中的虚拟机可以是上述任意一种虚拟机,并且,每个虚拟机可以运行多个进程。
98.容器(container):指基于宿主机的操作系统运行的一个相对独立的运行环境。其中,包含应用程序以及该应用程序所依赖的配置文件。一台宿主机上可以运行多个容器,但每个容器内的应用程序是相互隔离的。其中一个容器的升级或者出现故障时,不会影响其他容器。本实施例中,容器中的一个应用程序下有多个进程,因此,一个容器可以运行多个进程。
99.单根输入/输出虚拟化技术(single-root i/o virtualization,sr-iov):是实现输入/输出(input/output,i/o)设备的虚拟化功能技术中的一种,sr-iov使得一个单一的物理功能(physical function,pf)模块(例如,一个物理网卡)虚拟出多个虚拟功能(virtual function,vf)模块(例如,多个虚拟网卡,该虚拟网卡与前述物理网卡能够实现相同的功能),并且使每个虚拟功能模块分别单独实现前述物理功能模块的功能。一个带有sr-iov功能的物理设备中的部分功能模块能被配置为多份虚拟功能模块,以使得前述多份虚拟功能模块在前述带有sr-iov功能的物理设备像独立的物理功能模块一样工作。该sr-iov技术常与虚拟机技术结合,可以使得前述多个虚拟功能模块通过系统管理程序(hypervisor,例如虚拟机监视器(virtual machine monitor,vmm))分配至一个或多个虚拟机(virtual machine)。该sr-iov技术还可以与容器技术结合,可以使得前述多个虚拟功能模块通过命名空间(namespace)分配至一个或多个容器(container)。
100.下面对本实施例提出的随机数序列生成方法和随机数引擎所适应的应用场景和
系统架构进行介绍:
101.本实施例提出的随机数序列生成方法和随机数引擎,主要用于向该随机数引擎所在的设备或系统提供随机数序列。如图1a所示,当设备/系统10配置有前述随机数引擎101时,该随机数引擎101可以向该设备/系统10中的处理器111中的进程提供随机数序列,以使得满足前述处理器111中的进程的随机应用需求,同时可以降低运行进程的处理器111的处理负荷。具体地,该随机数引擎101可以应用于验证码技术、产品防伪检测技术以及密码学技术等领域。
102.应当理解的是,若该设备/系统10包含多个处理器,则该随机数引擎101也可以向该设备/系统10中的多个处理器提供随机数序列。
103.此外,本实施例提出的随机数引擎101配置了sr-iov功能(图未示),可以将该随机数引擎101中的部分物理功能模块(例如,处理模块和存储模块)虚拟出多份虚拟功能模块。其中,每一份虚拟功能模块可以专属服务于一个虚拟机或一个容器。于是,可以使得前述一个随机数引擎101同时向多个虚拟机或者多个容器提供随机数序列。例如,在如图1b所示的基于虚拟机的云计算(cloud computing)场景下,随机数引擎101中的物理功能模块001(包含存储模块和处理模块)可以虚拟出多个虚拟功能模块002,每个虚拟功能模块002包含存储模块和处理模块。该随机数引擎101中的每个虚拟功能模块002通过虚拟机监视器003与不同虚拟机004连接,从而实现一个随机数引擎101为多个虚拟机004提供随机数序列的功能。此外,由于一个虚拟机004中可以运行多个进程,于是,一个虚拟功能模块002可以为一个虚拟机004中的多个进程生成随机数序列。又例如,在如图1c所示基于容器的微服务(microservice)场景下,由随机数引擎101中的物理功能模块001虚拟出的多个虚拟功能模块002包含存储模块和处理模块。该随机数引擎101中的每个虚拟功能模块002与不同的容器011连接,从而实现一个随机数引擎101为多个容器011提供随机数序列的功能。此外,一个容器011中可以运行多个进程,于是,一个虚拟功能模块002可以为一个容器011中的多个进程生成随机数序列。
104.应当理解的是,前述图1b和图1c仅为该随机数引擎的应用场景示例。在实际应用中,该随机数引擎101连入虚拟机或容器时,可能还需要其他虚拟接口或功能模块,前述图1b和图1c并未示出,本实施例对此不做限定。
105.还应理解的是,该随机数引擎101作为硬件装置除了可以应用于前述场景之外,还可以应用于其他需要随机数序列的场景,具体此处不做限定。
106.下面先对本实施例提出的随机数引擎的主要结构进行介绍,具体如图2a所示:
107.该随机数引擎101包括第一处理器1011,该第一处理器1011与随机数引擎101外部的第二处理器102通过总线连接。该第二处理器102可以是前述图1a中设备/系统10中的硬件装置处理器111,也可以是前述图1b所示的虚拟机004中的一个虚拟处理器,也可以是前述图1c所示的容器011中的一个虚拟处理器,具体此处不做限定。但是,当前述第二处理器102为虚拟处理器时,该第一处理器1011与该第二处理器102之间的连接还将涉及其他硬件电路或虚拟接口,具体此处不做限定。在本实施例以及后续实施例中,以第一处理器1011和第二处理器102通过总线连接为例进行介绍。
108.其中,该第二处理器102中运行了多个进程,每个进程需要随机数序列以实现基于随机数序列的业务功能。该第一处理器1011能够接收来自前述第二处理器102中的至少一
个进程的生成命令。其中,该生成命令用于指示该进程向该第一处理器1011申请随机数序列。该第一处理器1011接收的多个生成命令可以来自同一个进程,也可以来自该第二处理器102中的不同进程。当前述多个生成命令来自同一个进程时,该第一处理器1011将在不同时刻接收到前述多个生成命令。当前述生成命令来自该第二处理器102中的不同进程时,不同进程对应的生成命令携带的信息不尽相同。当该第一处理器1011收到前述进程的生成命令之后,该第一处理器1011能够根据生成命令为该生成命令对应的进程分配随机数序列。
109.本实施例中,通过在第二处理器外设置随机数引擎,由该随机数引擎根据来自第二处理器中的进程的生成命令执行为进程分配随机数序列的功能。相比于传统技术中由第二处理器运行随机数序列生成软件来给第二处理器中的进程生成随机数序列的方案,可以降低第二处理器的处理负荷。
110.基于前述图2a所示的随机数引擎101,下面结合图2b对该随机数引擎101进行进一步介绍:
111.该随机数引擎101除了包括第一处理器1011之外,还包括第一存储器1012。其中,第一处理器1011用于基于前述生成命令为每个进程生成随机数序列;第一存储器1012用于存储与前述进程相关的信息(例如,进程的标识等)以及与前述随机数序列相关的信息(例如,用于生成随机数序列的计算参数等)。此外,该随机数引擎101外部还设置有第二存储器103,该随机数引擎101通过总线与第二存储器103连接。该第一处理器1011能够通过总线访问该第二存储器103,该第二处理器102也能够通过总线访问该第二存储器103。
112.具体地,该第一处理器1011用于生成至少一个随机数序列。前述至少一个随机数序列是由该第一处理器1011分多次生成的。并且,该第一处理器1011将每次生成的随机数序列存储至第二存储器103中。此外,该第一处理器1011还用于记录生成该至少一个随机数序列中的每个随机数序列的次序,并将该次序与第一存储地址之间的对应关系存储至该第一存储器1012中。其中,该第一存储地址为该次序对应的随机数序列在该第二存储器103中的存储地址。该次序指第一处理器1011生成随机数序列的次数和顺序。其中,顺序指该第一处理器1011生成的各个随机数序列之间的先后关系。例如,若第一处理器1011先生成了随机数序列a再生成了随机数序列b,并且,该第一处理器1011仅生成了前述两个随机数序列,则随机数序列a的次序为1,随机数序列b的次序为2。该次序用于在第一处理器1011在第一存储器1012中查找随机数序列时作为搜索依据。例如,该第一处理器1011依次生成了随机数序列1、随机数序列2和随机数序列3,则前述随机数序列1的次序为1,随机数序列2的次序为2,随机数序列3的次序为3。若前述随机数序列1在第二存储器103中的地址为第一存储块的第一页,则该第一处理器1011能够将“1”和“第一存储块的第一页”对应存储至随机数引擎101中的第一存储器1012中。以此类推,具体此处不再赘述。
113.应当理解的是,该第一处理器1011生成一个随机数序列,可以理解为,该第一处理器1011经过计算从该第一处理器1011输出一个随机数序列,前述输出的一个随机数序列将经总线传输至第二存储器103中。该第一处理器1011记录生成随机数序列的次序,可以理解为,该第一处理器1011包含一个计数装置,每当该第一处理器1011输出一个随机数序列,则该计数装置便计数一次(例如,计数位加一),该计数装置的数值便为该第一处理器1011生成当前随机数序列的次序。例如,当该第一处理器1011生成前述随机数序列1时该计数装置的计数位显示的数值为1,则生成该随机数序列1的次序为1。此后,若该第一处理器1011又
生成了一个随机数序列2,则该计数装置的计数位将加一,即该计数位显示的数值将刷新为2。因此,该第一处理器1011生成该随机数序列2的次序为2。以此类推,具体此处不再赘述。
114.此外,当该第一处理器1011收到来自该第二处理器102中的进程的生成命令时,该第一处理器1011可以根据前述生成命令确定该进程需要的是第几次生成的随机数序列,即哪个次序对应的随机数序列。然后,该第一处理器1011将在该第一存储器1012中查找前述次序。当该第一存储器1012中存在前述次序且该次序对应了一个存储地址,则该第一处理器1011可以确定该第二存储器103中存储有该进程所需要的随机数序列,且前述存储地址为该进程所需要的随机数序列在第二存储器103中的存储地址。于是,该第一处理器1011将向该进程提供前述存储地址,以使得该进程可以获取到前述随机数序列。
115.应当注意的是,本实施例中第一处理器1011生成的随机数序列,可以是伪随机数序列,也可以是真随机数序列,具体请参阅后文步骤301中的相关介绍,此处不再赘述。
116.还应注意的是,第一处理器1011向进程提供的存储地址,可以是物理地址,也可以是虚拟地址,具体请参阅后文步骤306中的相关介绍,此处不再赘述。
117.本实施例中,由于随机数引擎101可以将每次生成的随机数序列存储至第二存储器103中,并将随机数序列在第二存储器103中的存储地址保存至随机数引擎101中的第一存储器1012中。因此,该随机数引擎101可以从已生成的随机数序列中选择进程所需要的随机数序列,并通过向进程提供存储地址的方式将存储于第二存储器103的随机数序列提供给进程。相比于传统技术中流式随机数生成器(即每生成一个随机数序列便将该随机数序列分配给进程使用的随机数生成器),进程每次申请的随机数序列均需要随机数生成器重新生成,本实施例中的随机数引擎101可以将生成的随机数序列存储下来,以便进程需要随机数序列时给该进程提供随机数序列。因此,可以缩短随机数引擎101为进程提供随机数序列的时延,同时可以缩短进程获取随机数序列的时延。此外,当多个进程需要相同的随机数序列时,该随机数引擎101可以仅生成一个随机数序列,并将这一个随机数序列提供给多个进程,即多个进程可以复用同一个随机数序列。因此,可以降低随机数引擎的计算负荷。
118.此外,当第二处理器102中包含多个进程,且每个进程在不同的时刻向随机数引擎101申请随机数序列时,前述次序将作为第一处理器1011查找随机数序列的搜索依据(即作为索引号使用),以便于该随机数引擎101能够从第一存储器1012中查到某一次序对应的随机数序列的存储地址,进而有利于提升随机数引擎101向进程提供随机数序列的效率。此外,若不同的进程之间需要相同或不同的随机数序列,则前述次序可以作为区分是否为同一个随机数序列的依据,省去随机数引擎按照随机数序列中的每个数字对随机数序列进行识别的功能。有利于在提升分配随机数序列的效率的同时,能够给不同的进程提供随机数序列。
119.前面介绍了随机数引擎的主要结构,下面以第二处理器运行的一个进程(例如,后文所介绍的第一进程)向随机数引擎申请随机数序列为例,对本实施例提出的随机数序列生成方法的主要流程进行介绍。
120.应当理解的是,第二处理器中的其他进程在向随机数引擎申请随机数序列时,也将执行与第一进程类似的步骤。本实施例仅以第一进程为例进行介绍,由该第一进程与随机数引擎的数据交互可以类推出第二处理器中其他进程与随机数引擎之间的数据交互。
121.还应理解的是,本实施例中随机数引擎执行的步骤实际上是由前述图2b中的第一
处理器1011实现的,或者,是由前述图2b中的第一处理器1011和第一存储器1012共同实现的。本实施例中,仅以随机数引擎作为执行主体对该随机数序列生成方法进行介绍。
122.如图3所示,该随机数引擎和第二处理器中的第一进程分别执行如下步骤:
123.步骤301、第一进程向随机数引擎发送注册命令。
124.当第一进程首次使用随机数引擎时,该第一进程需要在该随机数引擎中进行注册登记。具体地,该第一进程将向随机数引擎发送注册命令。前述注册命令用于将该第一进程与该随机数引擎绑定,以使得该第一进程在此之后仅向该随机数引擎申请随机数序列,而不会向其他随机数引擎申请随机数序列;也可以使随机数引擎获知将要提供随机数序列的对象,即使随机数引擎获知将要向哪些进程提供随机数序列。
125.具体地,该注册命令携带该第一进程的标识和该第一进程的模式信息。
126.其中,该第一进程的标识用于唯一标识第二处理器中的一个进程,该第二处理器中的每个进程的标识互不相同。例如,该第一进程的标识可以是第一进程的唯一标识(unique identifier,uid)。当然,该第一进程的标识还可以是其他唯一标识该第一进程的字符或字符串,具体此处不做限定。
127.该模式信息包括指示该进程使用随机数序列的模式,也可以理解为,用于指示进程所需的随机数序列与该第二处理器中其他进程所需的随机数序列之间的关系。此外,第二处理器中运行了多个进程,每个进程可以使用不同的模式。并且,每个进程使用的模式是由进程的业务决定的,也就是说,前述生成命令携带的模式信息是由进程的业务决定的。该第一进程在注册时便通过模式信息向随机数引擎指示该第一进程使用的模式,有利于随机数引擎按照前述模式为该第一进程分配随机数序列。本实施例中,该模式信息包括第一模式和第二模式。由于,一个注册命令仅用于为一个进程进行注册,在一定时间范围内,一个进程仅使用一种模式的随机数序列,因此,前述一个注册命令仅携带一种模式信息。
128.其中,该第一模式用于指示进程使用第一模式。在该第一模式下,该进程所需的随机数序列与其他使用第一模式的进程所需的随机数序列相同。具体地,进程第n次申请的随机数序列和其他使用第一模式的进程第n次申请的随机数序列是相同的,其中,n为大于或等于1的整数。例如,若进程1和进程2均使用第一模式,当随机数引擎第一次为进程1分配的是随机数序列a时,则该随机数引擎第一次为进程2分配的随机数序列也应当是随机数序列a。并且,该进程1第二次申请到的随机数序列和进程2第二次申请到的随机数序列也应当相同。以此类推,具体此处不再赘述。
129.一般地,第一模式适用的业务场景为:第二处理器将一个训练集(training set)拆分为若干个子训练集(sub training set),每个子训练集采用相同的随机数序列进行训练。
130.该第二模式用于指示进程使用第二模式。在该第二模式下,该进程所需的随机数序列与其他使用第二模式的进程所需的随机数序列不同。具体地,进程第n次申请的随机数序列和其他使用第二模式的进程第n次申请的随机数序列是不同的,其中,n为大于或等于1的整数。例如,若进程1、进程2和进程3均使用第二模式,当随机数引擎第一次为进程1分配的是随机数序列a时,则随机数引擎第一次为进程2分配的随机数序列应当是除了随机数序列a以外的随机数序列。若该进程2第一次申请到的是随机数序列c,则随机数引擎第一次为进程3分配的随机数序列应当是除了随机数序列a和随机数序列c以外的随机数序列。此外,
该进程1第二次申请到的随机数序列、进程2第二次申请到的随机数序列以及进程3第二次申请到的随机数序列也应当互不相同。以此类推,具体此处不再赘述。可选的,前述进程每次申请的随机数序列与其他使用第二模式的进程任意一次使用的随机数序列均不相同。例如,若进程1、进程2和进程3均使用第二模式,当随机数引擎第一次为进程1分配的是随机数序列a时,则随机数引擎无论第几次为进程2和进程3分配随机数序列,均不会分配前述随机数序列a。
131.一般地,第二模式适用的业务场景为:第二处理器将一个训练集(training set)拷贝出若干个相同的副本训练集(ectype training set),每个副本训练集分别采用不同的随机数序列进行训练。
132.可选的,该注册命令除了前述第一进程的标识和前述第一进程的模式信息以外,还可以包括计算参数。该计算参数用于供该随机数引擎中的第一处理器根据该计算参数生成随机数序列。若该第一进程为第一个注册该随机数引擎的进程,或者,该随机数引擎当前仅收到前述第一进程的注册命令中的计算参数,则该随机数引擎将使用第一进程的注册命令中的计算参数。后续向该随机数引擎发送注册命令的其他进程也可能携带计算参数,该随机数引擎可以修改当前使用的第一进程的计算参数,即采用后续的注册命令中携带的计算参数。当然,该随机数引擎也可以依旧使用前述第一进程的生成命令中携带的计算参数。具体以第二处理器中各个进程的业务功能的需求而定,此处不做限定。
133.可选的,该计算参数包括算法,该算法指计算随机数序列的算法。该算法包括伪随机数算法(pseudo random number algorithm)和真随机数算法(true random number algorithm)。
134.当前述算法为伪随机数算法时,该计算参数还包括种子(seed)。其中,种子用于基于前述伪随机数算法生成初始值,该初始值可以理解为是第一个随机数状态位。该伪随机数算法用于采用前述初始值作为伪随机数算法的输入从而计算出随机数序列。本实施例中的伪随机数算法可以是常见的用于生成伪随机数的算法,例如,线性同余法、人字映射法、迭代取中法、取小数法、斐波那契法和移位法等,具体此处不做限定。可选的,若该随机数引擎中已设置有初始值,则该计算参数也可以仅包含伪随机数算法,而不包含种子。
135.当前述算法为真随机数算法时,该随机数算法为确定性随机数生成器(deterministic random generator,drng),该确定性随机数生成器将不确定性随机数生成器(non-deterministic random generator,nrng)生成的基于随机数引擎的物理电路的噪声生成的熵源作为输入,采用该确定性随机数生成器计算出随机数序列。
136.应当注意的是,若步骤301中的注册命令并未携带前述计算参数,则该随机数引擎可以使用第一存储器预存的计算参数。该预存的计算参数可以是基于第二处理器的业务或第一进程的业务预设的,具体此处不做限定。
137.可选的,该注册命令还将携带该第一进程的序列长度,该序列长度用于指示第一进程所需要的随机数序列包含的随机数的个数。该序列长度可以作为计算参数中的一项与前述算法和种子同时发送给随机数引擎,该序列长度也可以由进程根据业务的需求而单独向随机数引擎发送,具体此处不做限定。当前述第一进程未向随机数引擎提供序列长度时,该随机数引擎可以使用第一存储器存储的初始序列长度;当随机数引擎收到来自第一进程的序列长度之后,该随机数引擎采用第一进程的序列长度生成随机数序列。可选的,本实施
例中的序列长度可以包含多个随机数,也可以仅包含一个随机数,具体此处不做限定。
138.应当理解的是,前述算法和序列长度是由进程的业务而定的,本实施例不对算法的具体种类和序列长度的具体数值进行限定。
139.步骤302、随机数引擎向第一进程返回注册结果响应。
140.本实施例中,步骤302为可选的步骤。
141.该随机数引擎收到前述注册命令之后,可以将前述注册命令中的标识、模式信息以及计算参数等信息存储至随机数引擎中,以便后续使用。然后,该随机数引擎可以向第一进程发送注册结果响应,该注册结果响应用于指示该第一进程是否注册成功。若该第一进程在该随机数引擎中注册成功,则该注册结果响应携带肯定字符(acknowledge character,ack),也称为确认字符;若该第一进程在该随机数引擎中注册失败,则该注册结果响应携带否定字符(not acknowledge character,nack),也称为非确认字符。
142.该第一进程在收到前述注册结果响应携带的肯定字符之后,当该第一进程需要随机数序列时,该第一进程将执行步骤303。
143.步骤303、第一进程向随机数引擎发送生成命令。
144.其中,该生成命令用于指示该第一进程向随机数引擎申请随机数序列。也可以理解为,该生成命令将触发该随机数引擎为该生成命令指示的进程(即第一进程)分配随机数序列。该生成命令包括该第一进程的标识。随机数引擎可以基于前述生成命令中的第一进程的标识确定该第一进程是否为已注册的进程,以及该第一进程在注册时使用的模式。以便于该随机数引擎按照该第一进程使用的模式为该第一进程分配随机数序列。其中,“分配”是指基于迭代次数查找,若已存在所需迭代次数的随机数序列,则直接向进程提供存储该随机数序列的地址;若未存在前述进程所需迭代次数的随机数序列,则随机数引擎生成前述进程所需迭代次数的随机数序列,然后,再向进程提供存储该随机数序列的地址。具体过程详见步骤306所述内容。
145.在一种可能的实施方式中,该生成命令还包括迭代次数,该迭代次数用于指示该第一进程向随机数引擎申请随机数序列的次数。可以理解为,该第一进程每次向随机数引擎申请一次随机数序列,则该第一进程便计一次数,以确定当前该第一进程是第几次向随机数引擎申请随机数序列。于是,将记录的向随机数引擎申请随机数序列的次数,或者,向随机数引擎发送生成命令的次数,确定为前述迭代次数。
146.在一种可能的实施方式中,若前述步骤301中的注册命令中未携带序列长度,则该生成命令中可以包含序列长度。此外,即使前述步骤301中的注册命令中已携带了序列长度,本步骤303中的生成命令也可以携带序列长度。当生成命令中的序列长度与前述注册命令中的序列长度不同时,该随机数引擎可以采用生成命令中携带的序列长度。
147.本实施例中,当该生成命令中不包含迭代次数时,该随机数引擎将依次执行步骤304和步骤305。当该生成命令中包含迭代次数时,该随机数引擎将不执行步骤304而直接执行步骤305。
148.步骤304、随机数引擎根据第一进程的生成命令确定第一进程的迭代次数。
149.本实施例中,步骤304为可选的步骤。
150.随机数引擎可以通过确定接收携带该第一进程的标识的生成命令的次数以确定该第一进程的迭代次数。具体地,该随机数引擎每接收一个生成命令便查看该生成命令携
带的标识是否为已注册的进程的标识。若该生成命令携带的是已注册的进程的标识,则该随机数引擎中的为该进程配置的计数装置计数一次。并且,该随机数引擎取该计数装置当前记录的数值作为该已注册的进程的迭代次数。
151.更具体地,该随机数引擎收到生成命令之后,将从该生成命令获取第一进程的标识。然后,该随机数引擎在第一存储器中查看是否存储有前述第一进程的标识。若第一存储器存储有前述第一进程的标识,则该随机数引擎确定该第一进程是已注册的进程。然后,该随机数引擎为该第一进程配置一个计数装置,并触发采用该为该第一进程配置的计数装置计数一次,并将该计数装置当前记录的数值作为该第一进程的迭代次数。
152.应当理解的是,随机数引擎在实际应用中将会收到来自不同进程的生成命令,该随机数引擎可以基于生成命令中的进程的标识区分每个生成命令的来源。该随机数引擎在计算收到的来自某一个进程的生成命令的个数时,将为每个进程配置一个独有的计数装置,以确定某一个进程的迭代次数。
153.步骤305、随机数引擎根据第一进程的迭代次数确定待分配至第一进程的目标随机数序列。
154.基于前述图2b对应实施例的内容可知,该随机数引擎中的第一处理器可以生成至少一个随机数序列。并将每次生成的随机数序列存储至随机数引擎外的第二存储器中,并且,记录生成每个随机数序列的次序,将该次序与第一存储地址(即随机数序列在该第二存储器中的存储地址)对应存储至该随机数引擎的第一存储器中。
155.本实施例中,该随机数引擎将根据迭代次数和次序的关系确定前述目标随机数序列。
156.具体地,当前述迭代次数与随机数引擎中存储的某一个次序相等时,则说明该第一进程通过生成命令申请的随机数序列是该随机数引擎已经计算出并存储于第二存储器中的。该随机数引擎可以直接向该第一进程提供与该次序对应且与该第一进程对应的随机数序列(即目标随机数序列),而无需再单独为该第一进程计算随机数序列。若当前述迭代次数与随机数引擎中存储的任意一项次序均不相等,则该随机数引擎便根据前述计算参数为该第一进程计算目标随机数序列。
157.本实施例中,该随机数引擎中的第一存储器中存储有一个映射表。该映射表可以反映随机数引擎生成随机数序列的次序(即随机数引擎生成了几次随机数序列),以及每次生成的随机数序列分别存储于第二存储器中的存储地址。可选的,该映射表还可以反映每一个随机数序列是为哪个进程生成的。由于,进程在注册命令中提供的模式信息不同,随机数引擎生成随机数序列的模式也不同,前述映射表存储的内容也将不同。
158.具体请参阅图4a对应的实施例和图5a对应的实施例。
159.当该随机数引擎确定了待分配给第一进程的目标随机数序列之后,该随机数引擎将执行步骤306。
160.步骤306、随机数引擎向第一进程提供存储目标随机数序列的存储地址。
161.其中,该目标随机数序列存储至第二存储器中,该随机数引擎向第一进程提供的存储地址,可以是该目标随机数序列在第二存储器中的物理存储地址,也可以为前述物理存储地址映射在第一进程的地址空间中的虚拟地址。下面分别进行介绍:
162.在一种可能的实施方式中,该随机数引擎向目标随机数序列提供的是物理存储地
址。此外,该随机数引擎直接将第一存储器中存储的目标随机数序列的地址发送给前述第一进程。该第一进程从前述物理存储地址中获取目标随机数序列。
163.在另一种可能的实施方式中,前述目标随机数序列是存储于第二存储器中的共享内存中的,该随机数引擎能够将该共享内存中存储目标随机数序列的存储地址对应的页映射于第一进程的地址空间中。也就是说,该随机数引擎通过第二存储器向第一进程提供了一个虚拟存储地址,该第一进程通过该虚拟地址可以在第二存储器中查找到存储该目标随机数序列的物理存储地址。该第一进程可以采用该虚拟存储地址获取到前述目标随机数序列。
164.本实施例中,该随机数引擎可以采用前述任意一种实施方式向第一进程提供目标随机数序列的存储地址,具体此处不做限定。
165.步骤307、第一进程根据目标随机数序列的存储地址从第二存储器中获取目标随机数序列。
166.本实施例中,该第一进程根据前述目标随机数序列的存储地址获取目标随机数序列之后,该第一进程将采用该目标随机数序列实现随机数应用。
167.应当理解的是,当第一进程再次向随机数引擎申请随机数序列时,该第一进程无需再向随机数引擎注册,该第一进程将重复执行前述步骤303至步骤307。
168.本实施例中,随机数引擎将生成随机数序列的次序和随机数序列的存储地址对应存储,即随机数引擎中存储有映射表,该随机数引擎可以根据第一进程的生成命令确定的迭代次数在该映射表中搜索次序以确定随机数引擎是否已生成了目标随机数序列,进一步确定该目标随机数序列在第二存储器中的存储地址。因此,有利于提升随机数引擎向进程提供随机数序列的效率。此外,若不同的进程之间需要相同的或不同的随机数序列,则前述次序可以作为区分是否为同一个随机数序列的依据,省去随机数引擎按照随机数序列中的每个随机数对随机数序列进行识别的步骤。有利于在提升分配随机数序列的效率的同时,能够给不同的进程提供随机数序列。
169.基于前述图3对应的实施例,当前述步骤301中的注册命令携带的模式信息为第一模式时,该随机数引擎采用第一模式为第一进程生成随机数序列。在该第一模式下,第一进程第n次申请的随机数序列和其他采用第一模式的进程第n次申请的随机数序列是相同的,n等于迭代次数,且n为大于等于1的整数。因此,该随机数引擎每次生成的一个随机数序列可以供第二处理器中采用第一模式的多个进程使用。随机数引擎中可以仅存储生成随机数序列的次序和该随机数序列的存储地址,无需标注每个随机数序列是提供给哪个进程的。因此,该随机数引擎中的第一存储器中存储有第一映射表,该第一映射表用于指示该随机数引擎生成的随机数序列的次序与该随机数序列在第二存储器中的存储地址之间的对应关系。
170.为便于理解,以下表1-1为例对前述第一映射表进行介绍:
171.表1-1
172.生成随机数序列的次序本次生成的随机数序列在第二存储器中的地址1页12页23页3
4页4
173.其中,第一列表示生成随机数序列的次序,第二列表示该次序对应的随机数序列在第二存储器中的地址。当次序为“1”时,表示随机数引擎生成了一次随机数序列,该次序“1”对应的存储地址“页1”表示该随机数引擎第一次生成的随机数序列存储于第二存储器中的页1(page 1)中。结合图4b对应的例子,图4b展示了第二存储器中的多个存储页(例如,页1、页2、页3和页4等),每个存储页中存储有一个随机数序列(图中简称为“序列”)(例如,序列1、序列2、序列3和序列4等)。其中,页1中存储的为序列1。也就是说,该随机数引擎第一次生成的随机数序列为序列1,该随机数引擎将序列1存储在第二存储器中的页1中,然后将“页1”这一存储地址和“1”这一次序对应存储至前述第一映射表中。类似的,当随机数引擎第二次生成的随机数序列为序列2时,该随机数引擎将前述序列2存储于图4b所示的第二存储器中的页2中,然后将“页2”这一存储地址和“2”这一次序对应存储至前述第一映射表中。以此类推,具体此处不再赘述。
174.应当理解的是,随机数引擎可以将随机数序列按照生成随机数序列的次序连续存储至第二存储器中。例如,图4b所示的多个随机数序列便是连续存储于第二存储器中。其中,序列1的存储地址和序列2的存储地址是连续的,序列2的存储地址和序列3的存储地址是连续的,以此类推。
175.此外,该随机数引擎也可以采用非连续存储的方式,只要前述第一映射表中存储有每个随机数序列在第二存储器中的存储地址即可。例如,图4c所示的多个随机数序列中,序列1存储于页5中,序列2存储用于页6,序列3存储于页1中,序列4存储于页4中。页2、页3、页7和页8中并没有存储随机数序列。此时,前述第一映射表也相应调整为表1-2所示:
176.表1-2
177.生成随机数序列的次序本次生成的随机数序列在第二存储器中的地址1页52页63页14页4
178.可选的,当该随机数引擎采用伪随机数算法生成伪随机数序列时,前述第二存储器中还可以存储初始值。该初始值可以由随机数引擎根据进程在生成命令中携带的种子和伪随机算法确定,也可以是由随机数引擎预设的初始值,具体此处不做限定。此时,前述第一映射表也将存储用于生成伪随机数序列的初始值。此时,该第一映射表可以如下表1-3所示:
179.表1-3
180.生成随机数序列的次序在第二存储器中的地址0页01页12页23页34页4
181.其中,次序为“0”表示随机数引擎还未生成随机数序列,该次序“0”对应的存储地
址“页0”表示初始值存储于第二存储器中的页0(page0)中。该表1-3中的其他表项与前述表1-1相同,此处不再赘述。
182.下面基于前述图3对应的实施例,结合图4a,进一步介绍在第一模式下的步骤305中,该随机数引擎根据第一进程的迭代次数和前述第一映射表确定待分配至第一进程的目标随机数序列的过程。在第一模式下,该随机数引擎为第一进程分配目标随机数序列的步骤如下:
183.步骤401、随机数引擎判断第一映射表中是否存在与第一进程的迭代次数相等的第一次序。
184.若第一映射表中存在与第一进程的迭代次数相等的第一次序,则随机数引擎执行步骤402。
185.若第一映射表中不存在与第一进程的迭代次数相等的第一次序,则随机数引擎执行步骤403。
186.步骤402、随机数引擎将该第一次序对应的存储地址存储的随机数序列确定为目标随机数序列。
187.例如,当随机数引擎确定第一进程的迭代次数为“3”,则随机数引擎在第一映射表中的“生成随机数序列的次序”这一列中查找是否存在次序“3”。若存在次序“3”,则该随机数引擎确定该次序“3”对应的随机数序列为目标随机数序列。
188.本实施例中,该随机数引擎在执行了步骤402之后,将直接执行前述步骤306,而无需再执行后续步骤403至步骤404。
189.步骤403、随机数引擎计算该目标随机数序列。
190.本实施例中,该随机数引擎可以生成真随机数序列,也可以生成伪随机数序列。
191.在一种可能的实施方式中,当前述计算参数中包含真随机数算法时,该随机数引擎可以基于随机数引擎的物理电路的噪声生成熵源,采用该确定性随机数生成器根据第一进程的序列长度计算出一个真随机数序列,并将该真随机数序列作为目标随机数序列进行后续处理。
192.在另一种可能的实施方式中,当前述计算参数中包含伪随机数算法时,该随机数引擎采用随机数状态位作为伪随机数算法的输入,根据第一进程的序列长度计算出一个伪随机数序列,并确定该伪随机数序列为目标随机数序列。
193.应当注意的是,若该第一进程的迭代次数为1,即该进程第一次向随机数引擎申请随机数序列,则前述随机数状态位为由种子和伪随机数算法确定的初始值。若该第一进程的迭代次数为k,即随机数引擎已经向该第一进程提供过随机数序列,则前述随机数状态位为次序为k-1的随机数序列的末尾值,其中,k为大于或等于2的整数。
194.步骤404、随机数引擎将该目标随机数序列存储至该第二存储器中,并将该目标随机数序列的存储地址与生成该目标随机数序列的次序对应存储至第一映射表中。
195.其中,该随机数引擎生成该目标随机数序列的次序等于前述第一进程的迭代次数。
196.为便于理解,基于表1-3和图4b举例的示例进行介绍。当随机数引擎确定第一进程的迭代次数为“5”,则随机数引擎在表1-3所示的第一映射表中的“生成随机数序列的次序”这一列中查找是否存在次序“5”。由于该表1-3所示的第一映射表中不存在次序“5”,则该随
机数引擎将生成一个新的随机数序列(例如为序列5),并确定该序列5为目标随机数序列,生成该序列5的次序为“5”。于是将该序列5存储至图4d中的页5(page5)中,并将“页5”(即目标随机数序列的存储地址)和“5”(即生成目标随机数序列的次序)对应存储于表1-4中。以便于该第二处理器中的其他进程再次向随机数引擎申请迭代次数为“5”的随机数序列时,该随机数引擎可以将前述次序“5”对应的存储地址提供给前述其他进程,而无需再次生成随机数序列。
197.表1-4
198.生成随机数序列的次序在第二存储器中的地址0页01页12页23页34页45页5
199.可选的,当该随机数引擎采用伪随机数算法计算目标随机数序列时,该随机数引擎还将存储前述随机数状态位。
200.本实施例中,该随机数引擎在执行了步骤404之后,将执行前述步骤306。
201.本实施例中的第一映射表可以采用不同的次序对不同的随机数序列进行区分,随机数引擎可以直接根据迭代次数和次序确定进程所需的随机数序列是否在前述第一映射表中,而无需随机数引擎查找第二存储器中的随机数序列以对随机数序列进行分析。此外,随机数引擎每次生成的一个随机数序列可以供第二处理器中采用第一模式的多个进程使用,因此,提高了随机数序列的使用效率。
202.基于前述图3对应的实施例,当前述步骤301中的注册命令携带的模式信息为第二模式时,该随机数引擎采用第二模式为第一进程生成随机数序列。在该第二模式下,第一进程第n次申请的随机数序列和其他采用第二模式的进程第n次申请的随机数序列互不相同,n等于迭代次数,且n为大于等于1的整数。因此,该随机数引擎需要一次生成多个完全不同的随机数序列,每个随机数序列分别与不同的进程对应。每个进程可以在不同的时刻向该随机数引擎申请该进程对应的随机数序列。由于,随机数引擎生成的随机数序列需要和进程对应,因此,随机数引擎需要将生成随机数序列的次序、该随机数序列的存储地址和进程的标识对应存储于该随机数引擎中的第一存储器中。因此,该随机数引擎中的第一存储器中存储有第二映射表,该第二映射表用于指示该随机数引擎生成的随机数序列的次序、该随机数序列在第二存储器中的存储地址、以及该随机数序列对应的进程的标识之间的对应关系。
203.为便于理解,以下表2-1为例对前述第二映射表进行介绍:
204.表2-1
[0205][0206]
其中,第一行表示生成随机数序列的次序,因此,第二映射表中第二列之后的每一列表示随机数引擎某一次生成的多个随机数序列的存储地址。第一列表示每个采用第二模式的进程的标识,因此,第二映射表中第二行之后的每一行表示随机数引擎为某一个进程生成的多个随机数序列的存储地址。因此,行列交叉的位置表示与前述次序和进程的标识同时对应的随机数序列的存储地址。例如,第二行对应“进程1的标识”,第四列对应“次序2”,第二行第四列的“页12”表示随机数引擎第二次为进程1生成的随机数序列存储在第二寄存器的页12(page 12)中。以图5b为例,该第二存储器中的页12(page 12)中存储的是序列12。因此,随机数引擎第二次为进程1生成的随机数序列为序列12。
[0207]
应当注意的是,前述表2-1所示的第二列的次序为“0”,用于表示初始值;“页10”表示生成第一进程随机数序列的初始值1在图5b中的第二存储器中的存储地址为页10(page10)。
[0208]
应当注意的是,在实际应用中,该随机数引擎也可以不将初始值存储于第二存储器中,而是直接存储在随机数引擎的第一存储器中,以便于该随机数引擎从第一存储器中获取初始值以生成随机数序列。此时,该第二映射表也不会存储初始值在第二存储器中的存储地址。
[0209]
下面基于前述图3对应的实施例,结合图5a,进一步介绍在第二模式下的步骤305中,该随机数引擎根据第一进程的迭代次数和前述第一映射表确定待分配至第一进程的目标随机数序列的过程。该随机数引擎为第一进程分配目标随机数序列的步骤如下:
[0210]
步骤501、随机数引擎判断第二映射表中是否存在与第一进程的迭代次数相等的第二次序,且该第二次序对应的多个存储地址中存在与第一进程的标识对应的存储地址。
[0211]
可选的,由于,随机数引擎生成随机数序列的次数往往小于进程的个数。因此,该随机数引擎可以先判断第二映射表中是否存在与第一进程的迭代次数相等的第二次序。若第二映射表中存在与该第一进程的迭代次数相等的第二次序,则随机数引擎进一步判断该第二次序对应的多个存储地址中是否存在与第一进程的标识对应的存储地址。若该第二次序对应的多个存储地址中存在与第一进程的标识对应的存储地址,则该随机数引擎执行步骤502。
[0212]
若第二映射表中不存在与该第一进程的迭代次数相等的第二次序,或者,若该第二次序对应的多个存储地址中不存在与第一进程的标识对应的存储地址,则随机数引擎执行步骤503。
[0213]
步骤502、随机数引擎确定该第二次序和该第一进程的标识对应的存储地址指示的随机数序列为目标随机数序列。
[0214]
以前述表2-1和图5b为例,当随机数引擎确定进程2的迭代次数为“3”,则随机数引擎在第二映射表的第一行中查找是否存在次序“3”。若存在次序“3”,则该随机数引擎进一步在次序“3”对应的列中查找是否存在与进程2的标识对应的存储地址。若存在,则确定第三行第五列的存储地址页23对应的随机数序列(即图5b中的序列23)为目标随机数序列。
[0215]
本实施例中,该随机数引擎在执行了步骤502之后,将直接执行前述步骤306,而无需再执行后续步骤503至步骤504。
[0216]
步骤503、随机数引擎计算目标随机数序列。
[0217]
本实施例中,当第二映射表中不存在与该第一进程的迭代次数相等的第二次序,或者,若该第二次序对应的多个存储地址中不存在与第一进程的标识对应的存储地址,则该随机数引擎需要立即计算目标随机数序列。
[0218]
具体地,该随机数引擎将先统计采用第二模式的进程的数量,也可以理解为,该随机数引擎统计携带该第二模式的注册命令的数量。为便于后续介绍,称该采用第二模式的进程的数量为第一值。此外,该随机数引擎还需确定每个进程所需的随机数序列的序列长度。然后,该随机数引擎将计算出一个大随机数序列,并将这一个大随机数序列拆分为若干个符合每个进程的序列长度的小随机数序列。然后,将与第一进程的序列长度相等的一个小随机数序列确定为目标随机数序列。
[0219]
具体地,随机数引擎根据该第一值、每个进程的序列长度以及算法计算一个第二随机数序列。该第二随机数序列的序列长度等于每个进程的序列长度的累计和。然后,该随机数引擎将前述一个第二随机数序列拆分为n个第三随机数序列。其中,n等于该第一值,n为大于或等于1的整数。此外,每个第三随机数序列与一个采用该第二模式的进程对应,每个第三随机数序列的序列长度等于对应的进程的序列长度。然后,选择一个与第一进程的序列长度相等的随机数序列作为目标随机数序列。
[0220]
例如,进程1、进程2和进程3均采用第二模式。其中,进程1的序列长度为4,进程2的序列长为3、进程3的序列长度为5。于是,该随机数引擎计算出的第二随机数序列的长度为4 3 5=12。然后,该随机数引擎将这12个随机数(即第二随机数序列)拆分为三份,每份分别包含4个随机数、3个随机数和5个随机数。其中,每一份为一个第三随机数序列。若第一进程为前述进程1,则该随机数引擎将确定由4个随机数构成的第三随机数序列为目标随机数序列。应当理解的是,在实际应用中,采用第二模式的进程的个数更多,每个进程所需的随机数序列的序列长度更长。前述示例仅为了方便理解,并不对第一值、每个进程的序列长度以及进程的个数等进行限定。
[0221]
本实施例中,前述第二随机数序列和第三随机数序列可以均为真随机数序列,也可以均为伪随机数序列,具体此处不做限定。其中,当前述算法为伪随机数算法时,前述第二随机数序列和第三随机数序列均为伪随机数序列;当前述算法为真随机数算法时,前述第二随机数序列和第三随机数序列均为真随机数序列。
[0222]
本实施例中,前述每个进程算法可以来自于前述步骤301中的注册命令中携带的计算参数,该算法也可以来自于随机数引擎中预存的计算参数,具体此处不做限定。此外,前述每个进程的序列长度可以携带于每个进程的注册命令中,也可以携带于每个进程的生成命令中,具体此处不做限定。
[0223]
步骤504、随机数引擎将该目标随机数序列存储至该第二存储器中,并将该目标随
机数序列的存储地址与生成该目标随机数序列的次序对应存储至第二映射表中。
[0224]
其中,该随机数引擎生成该目标随机数序列的次序等于前述第一进程的迭代次数。
[0225]
应当理解的是,该随机数引擎在存储前述目标随机数序列的同时,还将存储其他的第三随机数序列。也就是说,该随机数引擎将前述n个第三随机数序列中的每个第三随机数序列存储至该第二存储器中,并且,将每个该第三随机数序列的存储地址、生成该第三随机数序列对应的次序和该第三随机数序列对应的进程的标识对应存储至该第二映射表中。
[0226]
可选的,当该随机数引擎采用伪随机数算法计算目标随机数序列时,该随机数引擎还将存储前述随机数状态位。
[0227]
本实施例中,该随机数引擎在执行了步骤503之后,将执行前述步骤306。
[0228]
本实施例中的第二映射表可以采用不同的次序和进程的标识对不同的随机数序列进行区分,随机数引擎可以直接根据迭代次数、次序和进程的标识确定待分配至进程的随机数序列是否在前述第二映射表中,而无需随机数引擎查找第二存储器中的随机数序列以对随机数序列进行分析。此外,随机数引擎每次生成的一个第二随机数序列可以按照进程所需的随机数序列的序列长度拆分为若干个第三随机数序列,供第二处理器中采用第二模式的多个进程使用。也就是说,由一个进程的生成命令可以触发随机数引擎为多个采用第二模式的进程生成随机数序列,并在其他进程向随机数引擎发送生成命令之后,该随机数引擎可以为该进程提供随机数序列的存储地址,而无需再单独计算随机数序列。因此,提高了随机数引擎生成随机数序列的效率。
[0229]
此外,在前述步骤307之后,该随机数引擎还可以基于来自进程的注销命令删除发送该注销命令的进程相关的随机数序列,并停止向该进程提供随机数序列。
[0230]
当该随机数引擎采用第一模式时,由于一个随机数序列可以提供给多个进程使用,因此,该随机数引擎将统计收到的注销命令的个数,当该注销命令的个数等于携带第一模式的注册命令的个数时,该随机数引擎将删除第一映射表中存储的存储地址,并将存储在第二存储器中的随机数序列也删除。
[0231]
当该随机数引擎采用第二模式时,该随机数引擎将获取注销命令中的进程的标识。由于,在第二模式中各个进程的随机数序列是不同的且分别存储的,删除某一个进程的随机数序列不会影响到其他进程。因此,该随机数引擎将从该第二映射表中确定与该第一进程的标识对应的每个存储地址,根据该每个存储地址从该第二存储器中删除该每个存储地址存储的随机数序列,然后,从该第二映射表中删除该第一进程的标识以及该第一进程的标识对应的该每个存储地址。
[0232]
由于,随机数引擎可以基于注销命令删除第一存储器中的映射表中的表项以及存储在第二存储器中的随机数序列。因此,可以提高第一存储器和第二存储器的利用率。
[0233]
基于图2b所示的随机数引擎101,如图6a所示,本实施例提供了一种更具体的随机数引擎60的结构。
[0234]
该随机数引擎60包括存储器601和处理器602。该存储器601是前述图2b中的第一存储器1012的一种实现方式,能够实现前述第一存储器1012的功能;该处理器602是前述图2b中的第一处理器1011的一种实现方式,能够实现前述第一处理器1011的功能。
[0235]
具体地,存储器601包括内部缓存6011。该处理器602包括控制器6021、计算单元
management unit,mmu)(图未示),该存储器管理单元有时也被称作为分页内存管理单元(paged memory management unit,pmmu)。该mmu位于连接处理器602和外部存储器(例如,图2b中的第二存储器103)的总线上,是一种负责处理处理器的内存访问请求的计算机硬件。该mmu用于实现物理地址到虚拟地址之间的转换。该mmu具有少量存储空间存放从虚拟地址到物理地址的匹配表,该匹配表也被称作页表或转换旁置缓冲区(translation lookaside buffer,tlb),该匹配表记录有物理地址与虚拟地址之间的映射关系,也就是说,该匹配表的每一项对应于一个虚拟地址到物理地址的映射。该mmu用于将随机数引擎外的存储器(例如,图2b中的第二存储器103)中的物理地址映射至进程的地址空间中,也可以理解为,由该mmu向进程提供虚拟地址。
[0244]
在另一种可能的实现方式中,当该随机数引擎60不包括前述mmu时,该随机数引擎60可以通过运行进程所在的处理器(例如,图2b中的第二处理器102)的驱动程序,由该驱动程序将前述第二存储器103中存储随机数序列的地址映射至进程的地址空间中。
[0245]
此外,该随机数引擎60还包括单根输入/输出虚拟化sr-iov模块603。该sr-iov模块603用于对随机数引擎60中的多个功能模块进行虚拟化。具体地,该sr-iov模块603能够虚拟出多个存储器601和多个处理器602。其中,每个虚拟存储器和虚拟处理器作为一个组合,用于为一个应用实例提供随机数序列。该应用实例可以是图1b所示的虚拟机004,也可以是图1c所示的容器011,具体此处不做限定。此外,该sr-iov模块603还需要虚拟出接口设备。该虚拟的接口设备用于将前述虚拟处理器、虚拟存储器和虚拟机004连接,或者,用于将前述虚拟处理器、虚拟存储器和容器011连接。
[0246]
在一种可能的实现方式中,前述控制器6021包括两个处理逻辑,两个处理逻辑相互独立,每个处理逻辑与一个标识对应。该标识可以与进程的业务对应,也可以与进程的模式对应。也就是说,该控制器6021可以基于进程的业务划分逻辑,也可以基于进程采用的模式划分逻辑。例如,对采用第一模式的进程采用第一处理逻辑进行处理,对采用第二模式的进程采用第二处理逻辑进行处理。于是,该控制器6021中的两个处理逻辑可以同时分别采用两种模式生成随机数序列,每种模式生成随机数序列的方式与前面类似,具体此处不再赘述。
[0247]
也可以理解为,前述控制器6021中包含两个相互独立的内核,每个内核采用一种模式(第一模式或第二模式)生成随机数序列。
[0248]
应当理解的是,当前述控制器602包括两个处理逻辑或该控制器602包含两个相互独立的内核时,前述内部缓存6011中也将分为两个区域。每个区域用于存储不同处理逻辑生成的数据,或者,每个区域用于存储不同内核生成的数据。此外,每个区域中均包含前述第一缓存区域和第二缓存区域。以图6b所示的内部缓存6011为例,控制器602中的一个处理逻辑a采用第一模式生成随机数序列,另一个处理逻辑b采用第二模式生成随机数序列。该采用第一模式的处理逻辑a将生成的第一映射表存储于区域a中的第一缓存区域a1中,将进程的标识、第一模式以及计算参数等与进程相关的信息存储至该区域a中的第二缓存区域a2中。该采用第二模式的处理逻辑b将生成的第二映射表存储于区域b中的第一缓存区域b1中,将进程的标识、第二模式以及计算参数等与进程相关的信息存储至该区域b中的第二缓存区域b2中。
[0249]
本实施例中,该随机数引擎根据来自进程的生成命令执行为进程分配随机数序列
的功能。相比于传统技术中由进程所在的处理器运行随机数序列生成软件来给进程所在的处理器中的进程生成随机数序列的方案,可以降低进程所在的处理器的处理负荷。
[0250]
如图7所示,本实施例提供的一种随机数引擎70的结构示意图。该随机数引擎70运行如下模块以实现前述图3、图4a以及图5a对应的方法实施例中的随机数引擎的功能。
[0251]
该随机数引擎70包括处理模块701、收发模块702和存储模块703。
[0252]
其中,该处理模块701用于实现前述图2b中的第一处理器1011的功能,例如,确定进程的迭代次数、生成随机数序列以及分配随机数序列等。该收发模块702用于实现前述图3对应实施方式以及其他实施方式中的收发功能,例如,接收注册命令、接收生成命令、接收注销命令以及发送随机数序列的存储地址等功能。该存储模块703用于实现前述图2b中的第一存储器1012的功能。例如,存储前述实施例中的第一映射表或第二映射表。又例如,存储进程的标识、模式信息以及计算参数等与进程相关的信息。
[0253]
示例性的,该处理模块701用于生成至少一个随机数序列,并将生成每个所述随机数序列的次序与该次序对应的随机数序列的存储地址对应存储至存储模块703中。
[0254]
示例性的,该收发模块702,用于接收注册命令、生成命令或者注销命令等。
[0255]
示例性的,该处理模块701,用于根据前述注册命令、生成命令或注销命令实现与前述命令对应的功能。例如,获取注册命令中的标识和模式信息,将随机数引擎与该标识对应的进程绑定,以使得该处理模块701在后续过程中采用前述模式信息指示的模式为该进程分配随机数序列。又例如,根据生成命令确定迭代次数,并基于迭代次数和次序为进程分配随机数序列。又例如,根据注销命令注销给某个进程提供随机数序列的服务。
[0256]
应当理解的是,前述处理模块701可以包含两个或多个处理逻辑,前述两个处理逻辑相互独立,每个处理逻辑与一个标识对应。该标识可以与进程的业务对应,也可以与进程的模式对应。也就是说,可以基于进程的业务划分逻辑,也可以基于进程采用的模式划分逻辑。例如,对采用第一模式的进程采用第一处理逻辑进行处理,对采用第二模式的进程采用第二处理逻辑进行处理。于是,前述两个处理逻辑可以同时分别采用两种模式生成随机数序列,每种模式生成随机数序列的方式与前面类似,具体此处不再赘述。
[0257]
还应注意的是,前述处理模块701、收发模块702和存储模块703可以由硬件实现,也可以由软件实现。
[0258]
当前述各个模块由硬件实现时,该处理模块701可以由图6a中处理器602中的控制器6021和计算单元6022实现;该收发模块702可以由图6a中的总线、直接存储访问6023实现;该存储模块703可以由图6a中的存储器601实现。具体地,请参阅前述图6a对应实施方式中的相关介绍,具体此处不再赘述。
[0259]
当前述各个模块由软件实现时,软件模块可以位于只读存储器(read-only memory,rom)或可存储静态信息和指令的其他类型的静态存储设备中;也可以位于随机存取存储器(random access memory,ram)或者可存储信息和指令的其他类型的动态存储设备中;还可以是电可擦可编程只读存储器(electrically erasable programmable-only memory,eeprom)中;以及其他本领域成熟的存储介质中。该存储介质位于运行随机数引擎70的设备中的存储器中,运行随机数引擎70的设备中的处理器读取存储器中的数据或程序代码结合其硬件实现前述随机数引擎70的功能。应当注意的是,运行该随机数引擎70的设备中包含至少两个处理器,其中一个处理器用于运行该随机数引擎70,另一个处理器用于
运行多个进程。例如,处理器a运行该随机数引擎70,处理器b运行多个进程,处理器a调用存储器中的程序代码以运行该随机数引擎70,进而实现为前述处理器b中的多个进程分配随机数序列的功能。
[0260]
此外,运行随机数引擎70中的处理器中可以包含两个或多个处理逻辑,每个处理逻辑独立采用一种模式为进程分配随机数序列;或者,该运行随机数引擎70中的处理器包含两个或多个内核,每个内核独立采用一种模式为进程分配随机数序列。由此,运行随机数引擎70中的处理器可能同时采用两种不同的模式为不同的进程分配随机数序列。
[0261]
在一种可能的实施方式中,该随机数引擎70还包括单根输入/输出虚拟化sr-iov模块(图未示)。该sr-iov模块通常以软件的形式存储于运行随机数引擎70的设备的存储器中,当该设备中的处理器调用存储器中关于sr-iov模块的程序代码时,能够虚拟出多个虚拟存储器、多个虚拟处理器以及多个虚拟接口等虚拟模块。其中,每个虚拟存储器和虚拟处理器作为一个组合,用于为一个应用实例提供随机数序列。该应用实例可以是图1b所示的虚拟机004,也可以是图1c所示的容器011,具体此处不做限定。该虚拟的接口设备用于将前述虚拟处理器、虚拟存储器和虚拟机004连接,或者,用于将前述虚拟处理器、虚拟存储器和容器011连接。
[0262]
此外,还可以将前述硬件和软件模块结合,以实现前述实施例中的各种功能。
[0263]
本实施例中,该随机数引擎70可以由软件实现也可以由硬件实现,可以灵活地为设备中的进程提供随机数序列。相比于传统技术中由进程所在的处理器运行随机数序列生成软件来给进程所在的处理器中的进程生成随机数序列的方案,可以降低进程所在的处理器的处理负荷。
[0264]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0265]
以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

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

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

相关文献