CN116955225A - 数据缓存方法、装置、电子设备和可读介质 - Google Patents

数据缓存方法、装置、电子设备和可读介质 Download PDF

Info

Publication number
CN116955225A
CN116955225A CN202211562392.1A CN202211562392A CN116955225A CN 116955225 A CN116955225 A CN 116955225A CN 202211562392 A CN202211562392 A CN 202211562392A CN 116955225 A CN116955225 A CN 116955225A
Authority
CN
China
Prior art keywords
data
queue
cache
read buffer
virtual address
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
Application number
CN202211562392.1A
Other languages
English (en)
Inventor
张志强
侯锦坤
郭润增
王少鸣
张晓翼
吴进发
王丹伟
刘鸿达
晋中望
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211562392.1A priority Critical patent/CN116955225A/zh
Publication of CN116955225A publication Critical patent/CN116955225A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种数据缓存方法、装置、电子设备和可读介质。该方法包括:获取缓存数据;根据用户空间的循环队列,获取循环队列中的第一虚拟地址,用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;根据第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将缓存数据写入到第一虚拟地址对应的内核空间的读缓冲区中;通过读缓冲区,将缓存数据记录到缓存文件中。该方法能够降低缓存过程中需要的读写次数,减少缓存过程的占用资源,提高执行效率以避免设备卡顿。

Description

数据缓存方法、装置、电子设备和可读介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据缓存方法、装置、电子设备和可读介质。
背景技术
随着电子科技和网络技术的发展,物联网(The Internet of Things,简称IOT)技术也愈发成熟。在物联网中,各个物联网终端会通过网络发送请求或者上报数据等操作。在弱网络环境中,当这些操作失败时,物联网终端会将数据缓存在本地以便网络恢复后重新发送。
在相关技术中,缓存数据的方式通过将缓存文件读取到内存中,对内存的文件进行修改后,再将内存中修改后的内容保存到缓存文件中。
然而,在该过程中,读写缓存数据时都需要在内核空间和用户空间之间复制缓存数据,期间需要进行多次读写,缓存过程的占用资源多且执行效率低,造成设备卡顿。
发明内容
基于上述技术问题,本申请提供一种数据缓存方法、装置、电子设备和可读介质,以降低缓存过程中需要的读写次数,减少缓存过程的占用资源,提高执行效率以避免设备卡顿。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供一种数据缓存方法,包括:
获取缓存数据;
根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;
根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;
通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
根据本申请实施例的一个方面,提供一种数据缓存装置,包括:
数据获取模块,用于获取缓存数据;
地址获取模块,用于根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;
数据写入模块,用于根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;
数据记录模块,用于通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置还包括:
数据读取模块,用于将所述缓存文件的缓存数据读取到所述读缓冲区中;
地址分配模块,用于为所述读缓冲区中的缓存数据分配第二虚拟地址,所述第二虚拟地址与所述读缓冲区的物理地址之间存在映射关系;
第一队列构建模块,用于根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列,所述循环队列中的存储空间通过所述第二虚拟地址指示所述读缓冲区中的缓存数据;
数据发送模块,用于通过所述循环队列,发送所述缓存数据。
在本申请的一些实施例中,基于以上技术方案,数据发送模块包括:
第一位置检查单元,用于检查所述循环队列的队头指针和所述队尾指针在所述循环队列中指示的位置;
第一指针移动单元,用于若所述队头指针和所述队尾指针指示的位置不同,则将所述队头指针移动到所述队尾指针所指示的位置;
第一数据读取单元,用于根据所述队头指针所指示的虚拟地址的映射关系,从所述读缓存区中读取待发送缓存数据;
第一数据发送单元,用于发送所述待发送缓存数据并将所述队头指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置还包括:
第二指针移动单元,用于将所述队尾指针前移到指示所述待处理存储空间的位置;
数据删除单元,用于根据所述队尾指针所指示的虚拟地址的映射关系,将所述待发送缓存数据从所述内核空间的所述读缓冲区中删除;
文件更新单元,用于根据所述读缓冲区的数据,更新所述缓存文件以将所述待发送缓存数据从所述缓存文件中删除。
在本申请的一些实施例中,基于以上技术方案,数据发送模块包括:
第二位置检查单元,用于检查所述队头指针和所述队尾指针在所述循环队列中指示的位置;
停止发送单元,用于若所述队头指针和所述队尾指针指示的位置相同,则停止发送数据;
第二数据读取单元,用于若所述队头指针和所述队尾指针指示的位置不同,则根据所述队尾指针当前指示存储空间的虚拟地址,从所述读缓存区中读取待发送缓存数据;
第二数据发送单元,用于发送所述待发送缓存数据并将所述队尾指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,地址获取模块包括:
第三指针移动单元,用于根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置;
地址获取单元,用于获取所述队头指针当前指示位置的地址作为所述第一虚拟地址。
在本申请的一些实施例中,基于以上技术方案,第三指针移动单元包括:
队尾指针前移子单元,用于若所述队头指针和所述队尾指针指示的位置满足队满条件,则按照所述循环队列中存储空间的排列顺序,将所述队尾指针前移到下一个位置;
队头指针前移子单元,用于按照所述循环队列中存储空间的排列顺序,将所述队头指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置还包括:
映射建立模块,用于若所述用户空间中不存在所述循环队列,将所述缓存文件的缓存数据读取到所述读缓冲区中并建立所述读缓冲区中的物理地址与用户空间中虚拟地址之间的映射关系;
第二队列构建模块,用于根据所述虚拟地址,在所述用户空间中构建所述循环队列,所述循环队列中一个存储空间对应于所述缓存文件中的一个缓存数据。
在本申请的一些实施例中,基于以上技术方案,数据记录模块包括:
第一数据复制单元,用于通过处理器将所述读缓冲区中的数据复制到内核缓冲区中;
第一数据写入单元,用于通过内存访问控制器将所述内核缓冲区中的数据写入到缓存文件。
在本申请的一些实施例中,基于以上技术方案,数据记录模块包括:
偏移量获取单元,用于获取所述读缓冲区中数据的数据地址和偏移量;
偏移量发送单元,用于通过处理器将所述数据地址和所述偏移量发送到内核缓冲区中;
第二数据复制单元,用于通过内存访问控制器根据所述内核缓冲区中的所述数据地址和所述偏移量,将所述读缓冲区中的缓存数据复制到所述缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据记录模块包括:
管道建立单元,用于在所述读缓冲区与内核缓冲区之间建立通信管道;
数据传输单元,用于通过所述通信管道,将所述读缓冲区中的数据传输到所述内核缓冲区中;
第二数据写入单元,用于将所述内核缓冲区内的数据写入缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据获取模块包括:
信息采集单元,用于向支付验证服务器发送生物信息采集设备采集的上报信息;
上报信息获取单元,用于当检测到上报信息发送失败时,获取所述上报信息作为缓存数据。
根据本申请实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,该处理器配置为经由执行可执行指令来执行如以上技术方案中的数据缓存方法。
根据本申请实施例的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,当该计算机程序被处理器执行时实现如以上技术方案中的数据缓存方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供数据缓存方法。
在本申请的实施例中,数据缓存的过程中,先通过用户空间的循环队列获取到要写入的虚拟地址,在根据该虚拟地址的映射关系来向内核空间的读缓冲区中写入缓存数据,最后通过读缓冲区将缓存数据记录到缓存文件中。通过映射后的虚拟内存地址直接对内核空间进行读写操作,不需要将数据从用户空间复制到内核空间,从而降低缓存过程中需要的读写次数,减少缓存过程的占用资源,提高执行效率以避免设备卡顿。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
在附图中:
图1为本申请实施方案在一个应用场景的系统架构示意图;
图2为本申请实施例中支付终端的示意性结构图;
图3为本申请实施例中一种数据缓存方法的示意流程图;
图4为本申请实施例中地址访问关系的示意图;
图5为本申请实施例中队列回溯过程的示意图;
图6为本申请实施例中循环队列的示意图;
图7为本申请实施例中一个完整实施例的示意性流程图;
图8示意性地示出了本申请实施例中数据缓存装置的组成框图;
图9示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,本申请的方案可以应用于物联网中终端设备中,尤其应用在终端处于弱网络环境中发送数据失败时对数据进行缓存的场景中。物联网设备通常会频繁地生成要上报的上报数据。当此类上报数据由于物联网设备所处的网络环境不佳等原因而无法被发送或者发送失败时,物联网设备会将此类上报数据作为缓存数据保存在本地,以便于在网络状态恢复后重新上传。物联网设备的操作系统的内存空间被划分为内核空间和用户空间,其中,内核空间供被独立于普通应用程序的核心软件使用,它们运行在较高的特权级别上,驻留在被保护的内核空间中,拥有访问硬件设备的所有权限。而常规的应用程序在用户空间中运行,并且常规的应用程序在内核空间中只能访问受限的资源,因此,在进行数据读写时需要在内核空间和用户空间之间复制数据。在本申请的方案中,在将缓存数据保存到本地文件的过程中,通过将内核空间中的虚拟地址与用户空间的虚拟地址映射到同一段共享的内存中,从而建立用户空间的虚拟地址与内核空间的物理地址之间的映射关系。通过该映射关系,在进行缓存则不需要在用户空间与内核空间之间进行数据复制,只需要直接修改用户空间的数据,则实际上内核空间中的数据也会被修改。此外,本申请将用户空间中的缓存数据按照循环队列的形式进行管理,根据缓存数据生成的时间来进行新旧交替,缓存数据较多时通过循环队列来用新数据覆盖旧数据。
下面对本申请实施例方案的应用场景进行介绍。请参阅图1,图1为本申请实施方案在一个应用场景的系统架构示意图。如图1所示,该场景中包含移动终端110、支付终端120和服务器130。移动终端110通常终端用户持有的移动设备,例如手机或者平板电脑等设备。支付终端120通常是由商户所持有的、放置在门店中的支付结算设备。终端用户在进行消费结算的过程中,会通过移动终端110向支付终端120提供结算依据,例如付款码等。此外,支付终端120还通常具有信息采集模块和通信模块,信息采集模块会根据支付终端120中所配置的验证方式,采集消费者对应的生物特征(例如掌纹或面部),通信模块则与服务器130进行通信来进行利用付款码或者生物特征等支付依据信息来进行认证和支付等过程以及获取对应的支付结果。服务器130用于支持支付终端120的运行过程,例如根据支付终端120提供的生物特征,向支付终端120提供对应的验证结果以及根据支付终端120的请求来进行支付的结算等。
服务器130可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器,本处不对此进行限制。服务器130可以由多个服务器组合成,并且每个服务器用于执行单独的功能。
移动终端110和支付终端120包括但不限于手机、电脑、智能语音交互设备、智能家电、或者车载终端等。移动终端110、支付终端120和服务器130之间可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。移动终端、支付终端和服务器的数量也不做限制。本申请中移动终端、支付终端和服务器的相关处理可以通过云技术或者人工智能等实现。
本申请的方案可以应用于物联网或者云物联的终端设备中。物联网是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监测、连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。
云物联(Cloud IOT)旨在将传统物联网中传感设备感知的信息和接受的指令连入互联网中,真正实现网络化,并通过云计算技术实现海量数据存储和运算,由于物联网的特性是物与物相连接,实时感知各个“物体”当前的运行状态,在这个过程中会产生大量的数据信息,如何将这些信息汇总,如何在海量信息中筛取有用信息为后续发展做决策支持,这些已成为影响物联网发展的关键问题,而基于云计算和云存储技术的物联云也因此成为物联网技术和应用的有力支持。
下面对本申请中终端设备的执行过程进行介绍。请参阅图2,图2为本申请实施例中支付终端的示意性结构图。如图2所示,在支付终端中会包含调度模块210和存储模块220。调度模块210用于对数据的上报和缓存过程进行控制。存储模块220则用于对上报失败的数据进行缓存。例如,调度模块210可以在收集足够的数据后指示支付终端的处理器和网络模块上报包含1000条数据的数据集。如果由于网络等原因上报失败,则调度模块210会指示存储模块220将上报失败的1000条数据存储到本地的存储器中,并且在达到预定的时间间隔或者检测网络条件满足发送数据的条件后,再生成指令来指示处理器将之前上报失败的1000条数据从存储模块220中取出再次上报。可以理解的是,存储模块220中用于对1000条数据进行缓存的数据结构采用循环队列的结构,并且在处理器在将1000条数据从网络模块缓存到存储模块220的过程中则采用本申请介绍的存储方案。
下面结合具体实施方式对本申请提供的技术方案做出详细说明。为了便于介绍,请参阅图3,图3为本申请实施例中一种数据缓存方法的示意流程图。在本申请实施例中,以支付终端等物联网终端作为执行主体来对数据缓存方法进行介绍,该数据缓存方法可以包括如下的步骤S310至S340:
步骤S310,获取缓存数据。
缓存数据是要保存到缓存文件中的数据。在本实施例中,缓存数据通常是物联网终端要上报的数据,其可以是还未达到上报条件的数据或者上报失败的数据。例如,物联网终端每10秒收集一次上报数据,但每10分钟进行依次上报,则每10秒收集到的数据则会作为缓存数据。或者,物联网终端每5分钟收集一次上报数据并且上报,但上报过程中,由于终端所处网络环境的问题,上报数据的发送失败或者没有在预定时间内接收到服务器接收成功的反馈信息,该上报数据则作为缓存数据。
步骤S320,根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系。
在本实施例中,用户空间的循环队列是用于对缓存数据进行管理的队列。循环队列中包含按照顺序排列的多个存储空间。每个存储空间的大小与内存系统中一个页缓存的大小相同。循环队列是基于虚拟地址生成的,其中的每个存储空间都对应于一个虚拟地址,该虚拟地址可以通过起始地址和偏移量来表示。根据循环队列获取的所述循环队列中的第一虚拟地址是从循环队列中下一个应被使用的存储空间的地址。该第一虚拟地址是用户空间中的地址,并且该虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系。内核空间中的读缓冲区是用于读取文件信息的缓冲区。终端设备的处理器将缓存文件加载到内存中后,该缓存文件的数据会被存放在读缓冲区中,以供用户空间的应用程序来使用。
步骤S330,根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中。
在本实施例中,由于用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在的映射关系,对第一虚拟地址的数据修改会根据该映射关系直接反映到内核空间的读缓冲区中,从而将缓存数据直接写入到第一虚拟地址对应的内核空间的读缓冲区中。也就是说,在写入的过程中,缓存数据是根据第一虚拟地址被直接写入到读缓冲区中,而不会先在用户空间中执行写入动作,再将写入完成的数据从用户空间复制到内核空间的读缓冲区中。例如,请参阅图4,图4为本申请实施例中地址访问关系的示意图。如图4所示,在用户空间的应用程序会向内核空间要求向缓存文件写入缓存数据。在缓存文件没有被加载时,内核空间会将缓存文件从磁盘读取到内核空间的读缓冲区中,而用户空间的缓冲区中则也会构建出与该读缓冲区对应的缓冲区,并且在其中构建出循环队列用于管理缓存文件。该循环队列的地址与读缓冲区的地址之间的映射关系,因此在修改循环队列中的数据时,实际上会直接修改读缓冲区中的数据,而不需要将数据从循环队列中复制到读缓冲区中。读缓冲区中的缓存数据或者地址+偏移量数据会被传递给内核缓冲区以进行后续的写入过程。
步骤S340,通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
具体地,当应用程序触发将缓存数据记录到缓存文件中时,终端设备会将读缓冲区中的数据记录到缓存文件中。该记录过程通常会通过内核空间中的另一个缓冲区来进行,例如嵌套字缓冲区。终端设备的处理器会将缓存数据或者缓存数据的地址信息写入到嵌套字缓冲区中,再由直接内存访问控制器将缓存数据写入到缓存文件中。
在本申请的实施例中,数据缓存的过程中,先通过用户空间的循环队列获取到要写入的虚拟地址,在该虚拟地址的映射关系来向内核空间的读缓冲区中写入缓存数据,最后通过读缓冲区将缓存数据记录到缓存文件中。通过映射后的虚拟内存地址直接对内核空间进行读写操作,不需要将数据从用户空间复制到内核空间,从而降低缓存过程中需要的读写次数,减少缓存过程的占用资源,提高执行效率以避免设备卡顿。
在本申请的一个实施例中,基于上述的技术方案,上述步骤S340,通过所述读缓冲区,将所述缓存数据记录到缓存文件中之后,本申请的方案还包括如下的步骤:
将所述缓存文件的缓存数据读取到所述读缓冲区中;
为所述读缓冲区中的缓存数据分配第二虚拟地址,所述第二虚拟地址与所述读缓冲区的物理地址之间存在映射关系;
根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列,所述循环队列中的存储空间通过所述第二虚拟地址指示所述读缓冲区中的缓存数据;
通过所述循环队列,发送所述缓存数据。
在本实施例中,在将缓存数据保存到缓存文件后,当满足特定条件时,终端设备会从缓存文件中读取出缓存数据来发送数据。具体地,终端设备会将缓存文件的缓存数据读取到读缓冲区中。具体地,该读取过程由终端设备的直接内存访问控制器来完成。随后,终端设备会为读缓冲区中的缓存数据分配第二虚拟地址,该第二虚拟地址与读缓冲区的物理地址之间存在映射关系。具体地,该第二虚拟地址与可以用户空间中的虚拟地址,读缓冲区中在内核空间中也可以存在对应的虚拟地址,用户空间的第二虚拟地址与读缓冲区的虚拟地址都映射到相同的物理地址,即读缓冲区的物理地址。终端设备的处理器可以根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列。具体地,由于映射关系的存在,处理器可以直接在用户空间中基于第二虚拟地址来构建循环队列。缓存文件本身在保存时就是基于循环队列的形式保存,即缓存文件中的缓存数据时按照循环队列的存储空间的结构来进行存储的。在构建出的循环队列中通常包含多个存储空间,每个存储空间有对应的虚拟地址,并且单个存储空间的虚拟地址与读缓冲区中的缓存数据之间存在映射关系。在构建出循环队列后,处理器则可以根据循环队列,来发送循环队列中的缓存数据。具体地,处理器可以直接根据循环队列的结构来依次读取出缓存数据并且读取出的缓存数据发送给网络通信模块来进行重新发送。可以理解的是,如果重新发送的过程仍然失败,则该缓存数据可以重新触发缓存过程而被作为新的缓存数据加入到循环队列中,并且在存储时一起存储到缓存文件中。
在本申请的实施例中,在发送过程中,通过循环队列来管理数据发送过程,使得数据过多的情况下,优先保证新的数据保留下来,老数据从队列中移出,确保缓存的数据不会过大,避免大量数据造成数据臃肿而增大发送的失败率,提高数据上报过程的稳定性。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,通过所述循环队列,发送所述缓存数据,具体包括如下的步骤:
检查所述循环队列的队头指针和所述队尾指针在所述循环队列中指示的位置;
若所述队头指针和所述队尾指针指示的位置不同,则将所述队头指针移动到所述队尾指针所指示的位置;
根据所述队头指针当前指示存储空间的当前虚拟地址,从所述读缓存区中读取待发送缓存数据;
发送所述待发送缓存数据并将所述队头指针前移到下一个位置。
在本实施例中,在进行缓存数据的发送过程时,会采用循环队列回溯的方式来从循环队列中读取数据。具体地,终端设备的处理器会检查循环队列的对头指针和队尾指针在循环队列中指示的位置。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。循环队列中队列存储空间的最后一个位置与第一个位置连接,从而形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。队头和队尾则分别用队头指针和队尾指针来指示。在循环队列中,当队列为空时,有front=rear(队头=队尾),并且规定循环队列最多只能有最大元素数量-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。如果队头指针和队尾指针指示的位置不同,则表示在循环队列中存在缓存数据,则处理器将队头指针移动到队尾指针所指示的位置,从而将队列的读取进度回溯。随后,根据队头指针当前指示存储空间的当前虚拟地址,从读缓存区中读取待发送缓存数据。随后将待发送缓存数据发送给服务器并将队头指针前移到下一个位置。该过程可以重复直至队头指针所指示的存储空间中没有缓存数据为止。为了便于介绍,请参阅图5,图5为本申请实施例中队列回溯过程的示意图。如图5所示,调度模块在通知存储模块存储1000条数据时,队列中队头指针会随着数据存储到队列中的过程而偏移,例如从数据1的位置偏移到数据5,队尾指针仍指示在数据1的位置来指示队列的队尾。随后,调度模块要求要上报1000条数据,则处理器会控制队头指针回溯到队尾指针的位置,例如从数据5的位置回溯到数据1的位置,并且在随着取数据和发送过程从数据1移动到数据5,从而完成读取数据的操作过程。可以理解得是,在发送完成之后,处理器还会将队尾之前移动到队头指针的位置,从而将发送后的数据从循环数据中删除。该删除为逻辑上的删除,实际上发送完的缓存数据可以仍保留在读缓存区中,直至队列写入新的缓存数据将其覆盖或者在将数据写入到缓存文件中时清除掉不在队列中的数据。
在本实施例中,通过队列回溯的方式来从循环队列中读取数据,以便于在发送缓存数据的过程中对缓存数据回溯而进行多次发送,增大发送数据的成功率。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,发送所述待发送缓存数据并将所述队头指针前移到下一个位置之后,本申请的方案还包括如下的步骤:
将所述队尾指针前移到指示所述待处理存储空间的位置;
根据所述队尾指针所指示的虚拟地址的映射关系,将所述待发送缓存数据从所述内核空间的所述读缓冲区中删除;
根据所述读缓冲区的数据,更新所述缓存文件以将所述待发送缓存数据从所述缓存文件中删除。
在本实施例中,终端设备在将待发送缓存数据发送给服务器,并且队头指针前移到循环队列中的下一个位置后,还会进一步通过队尾指针将数据从缓存文件中删除。具体地,服务器会将队尾指针前移到指示待处理存储空间的位置。可以理解,队尾指针前移后所指示的位置就是之前队头指针所指示的位置,所指示的是刚被发送的缓存数据。随后,处理器可以根据队尾指针当前指示的存储空间的虚拟地址的映射关系来将待发送缓存数据从内核空间的读缓冲区中删除。根据该虚拟地址的映射关系,可以通过虚拟地址来直接修改内核空间的读缓冲区中对应物理地址中的信息,通过队尾指针所指示的内容则可以将内核空间的读缓冲区中对应物理地址中的缓存数据删除。在修改读缓冲区内的数据后,处理器则可以根据缓冲区中的数据来更新缓存文件,从而将已经发送的缓存数据从缓存文件中删除。具体地,处理器可以通过直接内存访问控制器将读缓冲区中的内容输出到缓存文件中,从而更新缓存文件中保存的缓存数据。
在本申请的实施例中,在发送缓存数据后,通过循环队列中队尾指针来将已发送的缓存数据从缓存文件中删除,从而能够及时更新缓存文件中的缓存数据,避免数据不及时更新而造成数据错误,提升系统的实时性和准确性。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,通过所述循环队列,发送所述缓存数据,具体包括如下的步骤:
检查所述队头指针和所述队尾指针在所述循环队列中指示的位置;
若所述队头指针和所述队尾指针指示的位置相同,则停止发送数据;
若所述队头指针和所述队尾指针指示的位置不同,则根据所述队尾指针当前指示存储空间的虚拟地址,从所述读缓存区中读取待发送缓存数据;
发送所述待发送缓存数据并将所述队尾指针前移到下一个位置。
在本实施例中,在发送数据时,终端设备的处理器会利用队尾指针来获取要发送的缓存数据以及将发送过的缓存数据从循环队列中删除。具体地,处理器会检查队头指针和所述队尾指针在循环队列中指示的位置。如果队头指针和队尾指针指示的位置相同,则表示循环队列为空,因此可以停止发送数据。如果队头指针和队尾指针指示的位置不同,则表示循环队列中仍然存在缓存数据,因此,则可以根据队尾指针当前指示存储空间的虚拟地址,从虚拟地址映射的在读缓存区的物理地址中读取出待发送缓存数据。随后,处理器可以通知直接内存访问控制器将读取到的待发送缓存数据传递给通信模块来发送给服务器,并且将队尾指针迁移到下一个位置。下一个位置指的是向队头指针的方向移动一个位置,例如,队尾指针指示循环队列中的第2个存储空间,队头指针指示循环队列中的第10个存储空间,则队尾指针的下一个位置则移动到第3个位置。可以理解,队尾指针原本指示的位置是已经被发送的缓存数据的虚拟地址。队尾指针移动后,已经被发送的缓存数据会从循环队列中删除,从而为新数据留出存储空间。
在本申请的实施例中,在发送缓存数据后,通过循环队列中队尾指针来获取要发送的缓存数据,并且在发送后通过移动队尾指针来将缓存数据从循环队列中删除,不需要对队头指针进行操作,简化数据读取过程的复杂度,提高执行效率。
在本申请的一个实施例中,基于上述的技术方案,上述步骤S320,根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,具体包括如下的步骤:
根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置;
获取所述队头指针当前指示位置的地址作为所述第一虚拟地址。
在本实施例中,在从循环队列中获取后续要写入的虚拟地址时,会利用循环队列的队头指针来读取。具体地,请参阅图6,图6为本申请实施例中循环队列的示意图。如图6所示,循环队列中会包含多个存储空间和两个指针,即队头指针和队尾指针,分别用于指针循环队列的队头位置和队尾位置。循环队列中的每个存储空间的大小通常与一个缓存页的大小相同。在循环队列的使用过程中,队头指针会指示着最新的缓存数据所在的位置。例如,循环队列中包含100个存储空间,分别编号为0到99,队头指针指示第50个位置,而队尾指针指示第0个位置,则表示循环队列中的第0个到第50个存储空间已经被占用,在需要进行写入时,把队头指针移动到下一个位置,即按照存储空间的排列顺序下的第51个存储空间。循环队列是基于虚拟地址建立的,其中的每个存储空间的地址也是虚拟地址,该虚拟地址会映射到内核空间的读缓冲区所对应的物理地址上,处理器可以直接获取队头指针当前指示的存储空间的地址作为第一虚拟地址。后续过程中将缓存数据写入到第一虚拟地址中时,缓存数据实际上会根据映射关系而直接被写入到读缓冲区对应的物理地址中。
在本实施例中,通过循环队列中存储空间的排列以及队头和队尾指针的位置来获取第一虚拟地址,提供了通过循环队列来获取虚拟地址的具体方式,的可操作性。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置,具体包括如下的步骤:
若所述队头指针和所述队尾指针指示的位置满足队满条件,则按照所述循环队列中存储空间的排列顺序,将所述队尾指针前移到下一个位置;
按照所述循环队列中存储空间的排列顺序,将所述队头指针前移到下一个位置。
在本实施例中,在要对循环队列写入,但循环队列中已满的情况下,会利用队尾指针来从循环队列中清除数据。具体地,处理器会根据循环队列的队头指针和队尾指针指示的位置是否满足队满条件来判断循环队列是否已满。例如,如果队头指针下一个要指示的位置与队尾指针当前所指示为位置相同,或者队头指针和队尾指针所指示位置的编号满足了预定的计算公式,诸如队头位置=(队尾指示+1)%队列最大数量,则可以认为循环数据已经满了。处理器会按照循环队列中存储空间的排列顺序,将队尾指针前移到下一个位置。由于移动的是队尾指针,则可以认为队尾指针移动前所指示位置中的数据被处理器从循环队列中删除,例如,队尾指针从第0个位置移动到第1个位置,则可以认为第0个位置中存储的数据就不再属于循环队列中的数据了。然而,处理器实际上并没有对第0个位置中的数据执行实际删除操作,数据实际上仍存在于该位置的虚拟地址所映射的内核空间的物理地址中。随后,处理器按照循环队列中存储空间的排列顺序,将队头指针前移到下一个位置。在队头指针和队尾指针指示的位置满足队满条件的情况下,队头指针在前移到下一个位置后,指示的位置通常就是之前队尾指针所指示的位置,或者,队尾指针在上一次移动时所在的位置。在后续的写操作中,处理器会将数据写入到队头指针所在的位置,从而覆盖掉其中存在的缓存数据。例如,在最大数量为100的循环队列中,队尾指针指示第0个位置,队头指针指示第99个位置,则在写操作的过程中移动队头指针时,会先将队尾指针移动到第1个位置,随后在在将队头指针移动到第0个位置,从而在后续的写过程中将数据写入到第0个位置来覆盖其中原本存在的数据。在一个实施例中,循环队列的队满条件为剩余一个存储空间时,即在最大数量为100的循环队列中,队尾指针指示第0个位置且队头指针指示第98个位置时就会判定为队满,在此类场景中,队头指针移动后指示的位置则与队尾指针移动前指示的位置不同,例如队尾指针移动到第1个位置,而队头指针会移动到第99个位置。但随着写入的继续,在第0个位置中存储的已经从循环队列中删除的数据仍会在后续的写入过程中被覆盖。
在本申请的实施例中,在要写入新数据但循环队列已满时,通过队尾之前的前移来将数据从队列中删除,而不需要真正执行删除操作,从而简化了数据删除操作的数据读写过程,提高的数据写入过程的执行效率。
在本申请的一个实施例中,基于上述的技术方案,上述步骤S320,根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址之前,本申请的方案还包括如下的步骤:
若所述用户空间中不存在所述循环队列,将所述缓存文件的缓存数据读取到所述读缓冲区中并建立所述读缓冲区中的物理地址与用户空间中虚拟地址之间的映射关系;
根据所述虚拟地址,在所述用户空间中构建所述循环队列,所述循环队列中一个存储空间对应于所述缓存文件中的一个缓存数据。
在本实施例中,处理器在进行写操作时,会先将缓存文件加载到用户空间中,以便于进行写入。具体地,处理器会先见得用户空间中是否存在基于缓存文件建立的循环队列。如果用户空间中不存在循环队列,则处理器会通过直接内存访问控制器向磁盘发起读请求,将缓存文件中的缓存数据从磁盘赌气到内核空间的读缓冲区中。并且,处理器还会读缓冲区中的物理地址与用户空间中虚拟地址之间的映射关系。具体地,处理器会为内核空间的读缓冲区的物理地址分配内核空间的虚拟地址,并且建立内核空间的虚拟地址与物理地址之间的映射关系,随后,处理器会在用户空间中分配用户空间的虚拟地址,并且建立用户空间的虚拟地址与内核空间的虚拟地址之间的映射关系,从而建立用户空间的虚拟地址与读缓冲区的物理地址之间的映射关系。
在得到用户空间的虚拟资质后,处理器会根据用户空间虚拟地址在用户空间中构建循环队列,并且循环队列中一个存储空间对应于所述缓存文件中的一个缓存数据。可以理解的是,缓存文件中的缓存数据在写入时就是按照循环队列的数据结构被写入到缓存文件中,因此在根据用户空间的虚拟地址构建循环队列时,就可以按时预设的配置参数直接根据虚拟地址新建空的循环队列,配置参数中通常会规定循环队列的总长度以及其中每个存储空间的大小等配置,再将缓存文件中的缓存数据添加到新建的循环队列中并调整队头指针和队尾指针的位置,从而完成循环队列的构建过程。
在本申请的实施例中,在记录缓存数据前,从缓存文件中加载缓存数据来构建循环队列,使得设备异常是被保存在缓存文件中的数据能够与新添加的数据一起处理,从而能够在设备异常掉电后恢复缓存内容,提高设备的鲁棒性。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,通过所述读缓冲区,将所述缓存数据记录到缓存文件中,具体包括如下的步骤:
通过处理器将所述读缓冲区中的数据复制到内核缓冲区中;
通过内存访问控制器将所述内核缓冲区中的数据写入到缓存文件。
在本实施例中,将缓存数据从读缓冲区中记录到缓存文件的过程需要内核空间的内核缓冲区作为中转。具体地,处理器会将内核空间的读缓冲区中的缓存数据复制到内核空间的内核缓冲区中。该复制可以将读缓冲区中的空间空闲出来,以供其他操作使用。随后,对于内核缓冲区中的数据,处理器会指示内存访问控制器,将内核缓冲区中的数据写入到缓存文件。具体的写入过程由内存访问存储器来控制,而终端设备的处理器则可以转而处理其他任务。
具体地,在本实施例中,数据缓存的总体过程为处理器判断需要将缓存数据写入缓存文件时,通过用户空间向内核空间发起调用,将缓存文件加载到内核空间的读缓冲区中。随后,处理器将将用户进程的内核空间的读缓冲区与用户空间的缓冲区进行内存地址映射,并且在用户空间的缓冲区中构建出循环队列,来放置加载的缓存数据。处理器根据新的缓存数据来写入到用户空间的循环队列中,新的缓存数据会根据内存地址映射而直接被写入到内核空间的读缓冲区中。在新缓存数据写入完成后,处理器将读缓冲区的数据拷贝到内核缓冲区中,并且利用内存访问控制器将内核缓冲区中的数据输出到磁盘的缓存文件中。
在本申请的实施例中,通过内核缓冲区来将数据写入到缓存文件中,从而使得处理器可以被解放出来处理其他任务,有利于提高设备的整体运行效率。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,通过所述读缓冲区,将所述缓存数据记录到缓存文件中,具体包括如下的步骤:
获取所述读缓冲区中数据的数据地址和偏移量;
通过处理器将所述数据地址和所述偏移量发送到内核缓冲区中;
通过内存访问控制器根据所述内核缓冲区中的所述数据地址和所述偏移量,将所述读缓冲区中的缓存数据复制到所述缓存文件中。
在本实施例中,处理器不在需要将数据从读缓冲区复制到内核缓冲区中,而是直接从内核空间的读缓冲区写入到缓存文件中。具体地,处理器执行将缓存数据写入缓存文件的过程中,会获取读缓冲区中数据的数据地址和偏移量。随后,处理器将数据的数据地址和偏移量存储到内核缓冲区中。随后,处理器通知内存访问控制器内核缓冲区中的数据地址和偏移量,将数据复制到缓存文件。具体地,内存访问控制器可根据数据地址和偏移量访问到读缓冲区中实际存储这些数据的虚拟地址,并进一步访问到物理地址中存储的数据,随后直接将缓存数据从读缓冲区中读取出来并通过磁盘模块来写入到缓存文件中。
在本申请的实施例中,根据读缓冲区中数据的数据地址和偏移量,将数据从读缓冲区中直接写入到缓存文件中,而不需要处理将数据从读缓冲区复制到内核缓冲区中,从而减少写入过程中的复制量,提高写入过程的整体执行效率。
在本申请的一个实施例中,基于上述的技术方案,上述步骤,通过所述读缓冲区,将所述缓存数据记录到缓存文件中,具体包括如下的步骤:
在所述读缓冲区与内核缓冲区之间建立通信管道;
通过所述通信管道,将所述读缓冲区中的数据传输到所述内核缓冲区中;
将所述内核缓冲区内的数据写入缓存文件中。
在本实施例中,处理器会在读缓冲区和内存缓冲区之间建立管道,并且通过管道来传输数据。具体地,处理器在进行数据写入过程时,会在读缓冲区与内核缓冲区之间建立通信管道。随后,通过通信管道,将读缓冲区的数据传输到内核缓冲区中。具体地,读缓冲区中的数据会通过建立管道被移动到内核缓冲区中。管道的两端分别读缓冲区的地址和内核缓冲区的地址关联。管道的原理就是增加了管道缓冲区,管道缓冲区实际上是一个用来做中转的文件,也就是说,管道连接着读缓冲区的输出命令和内核缓冲区的接收命令,先执行读缓冲区的输出命令,然后暂时改变读缓冲区的输出命令的输出位置,将原本要写入内核缓冲区的数据现在写入管道,然后内核缓冲区的接收命令在读取文件的时候,本来要从读缓冲区读取,现在改变了读取的位置从管道文件中读取,然后进行相应的处理。随后,处理器通知内存访问控制器来讲内核缓冲区中的数据输出到磁盘的缓存文件中。
在本实施例中,通过在读缓冲区和内存缓冲区之间建立管道,从而使得数据从去缓冲区到内核缓冲区的过程不需要处理器来参与复制过程,降低对处理器的资源占用。
在本申请的一个实施例中,基于上述的技术方案,上述步骤S310,获取缓存数据,具体包括如下的步骤:
向支付验证服务器发送生物信息采集设备采集的上报信息;
当检测到上报信息发送失败时,获取所述上报信息作为缓存数据。
在本实施例中,数据缓存的方法应用在支付场景中。具体地,方法由店铺或者手持的支付终端来执行。支付终端上会安装由生物信息采集设备,例如指纹采集设备或者面部采集设备等。在对接收到的信息进行验证并通过后,会向支付验证服务器发送生物信息采集设备采集的上报信息,上报信息中会包含生物信息以及支付操作的相关信息,例如支付信息等。在发送过程或者发送之后,支付终端会检测上报信息的发送结果,如果发现支付终端不能发送上报信息或者发现发送成功但在预定的时间内没有接收到支付验证服务器提供的反馈结果,则支付终端会将上报信息提取出来作为缓存数据,从而触发将缓存数据写入到缓存文件的过程以及在满足重发的条件后将缓存数据从缓存文件中提取出来重新发送的过程。
在本申请的实施例中,在支付场景中,当上报信息失败时,将上报信息作为缓存数据,从而避免上报信息的发送过程要求反复采集上报信息,简化支付过程,提升用户体验。
下面对上述方案的完整实施例进行介绍。请参阅图7,图7为本申请实施例中一个完整实施例的示意性流程图。如图7所示,在步骤701中,终端设备向支付验证服务器发送生物信息采集设备采集的上报信息,随后终端设备会检测上报信息的发送结果。在步骤702中,终端设备当检测到上报信息发送失败时,获取所述上报信息作为缓存数据。随后,在步骤703中,终端设备根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;随后,在步骤704中,终端设备根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;随后,在步骤705中,获取所述读缓冲区中数据的数据地址和偏移量。在步骤706中,终端设备通过处理器将所述数据地址和所述偏移量发送到内核缓冲区中;并且在步骤707中,终端设备通过内存访问控制器根据所述内核缓冲区中的所述数据地址和所述偏移量,将所述读缓冲区中的缓存数据复制到所述缓存文件中。在步骤708中,终端设备将所述缓存文件的缓存数据读取到所述读缓冲区中;并且随后在步骤709中为所述读缓冲区中的缓存数据分配第二虚拟地址,所述第二虚拟地址与所述读缓冲区的物理地址之间存在映射关系。在步骤710中,终端设备根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列,所述循环队列中的存储空间通过所述第二虚拟地址指示所述读缓冲区中的缓存数据;最后,在步骤711中,通过所述循环队列,发送所述缓存数据。
应当注意,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
以下介绍本申请的装置实施,可以用于执行本申请上述实施例中的数据缓存方法。图8示意性地示出了本申请实施例中数据缓存装置的组成框图。如图8所示,数据缓存装置800主要可以包括:
数据获取模块810,用于获取缓存数据;
地址获取模块820,用于根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;
数据写入模块830,用于根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;
数据记录模块840,用于通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置800还包括:
数据读取模块,用于将所述缓存文件的缓存数据读取到所述读缓冲区中;
地址分配模块,用于为所述读缓冲区中的缓存数据分配第二虚拟地址,所述第二虚拟地址与所述读缓冲区的物理地址之间存在映射关系;
第一队列构建模块,用于根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列,所述循环队列中的存储空间通过所述第二虚拟地址指示所述读缓冲区中的缓存数据;
数据发送模块,用于通过所述循环队列,发送所述缓存数据。
在本申请的一些实施例中,基于以上技术方案,数据发送模块包括:
第一位置检查单元,用于检查所述循环队列的队头指针和所述队尾指针在所述循环队列中指示的位置;
第一指针移动单元,用于若所述队头指针和所述队尾指针指示的位置不同,则将所述队头指针移动到所述队尾指针所指示的位置;
第一数据读取单元,用于根据所述队头指针所指示的虚拟地址的映射关系,从所述读缓存区中读取待发送缓存数据;
第一数据发送单元,用于发送所述待发送缓存数据并将所述队头指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置800还包括:
第二指针移动单元,用于将所述队尾指针前移到指示所述待处理存储空间的位置;
数据删除单元,用于根据所述队尾指针所指示的虚拟地址的映射关系,将所述待发送缓存数据从所述内核空间的所述读缓冲区中删除;
文件更新单元,用于根据所述读缓冲区的数据,更新所述缓存文件以将所述待发送缓存数据从所述缓存文件中删除。
在本申请的一些实施例中,基于以上技术方案,数据发送模块包括:
第二位置检查单元,用于检查所述队头指针和所述队尾指针在所述循环队列中指示的位置;
停止发送单元,用于若所述队头指针和所述队尾指针指示的位置相同,则停止发送数据;
第二数据读取单元,用于若所述队头指针和所述队尾指针指示的位置不同,则根据所述队尾指针当前指示存储空间的虚拟地址,从所述读缓存区中读取待发送缓存数据;
第二数据发送单元,用于发送所述待发送缓存数据并将所述队尾指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,地址获取模块820包括:
第三指针移动单元,用于根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置;
地址获取单元,用于获取所述队头指针当前指示位置的地址作为所述第一虚拟地址。
在本申请的一些实施例中,基于以上技术方案,第三指针移动单元包括:
队尾指针前移子单元,用于若所述队头指针和所述队尾指针指示的位置满足队满条件,则按照所述循环队列中存储空间的排列顺序,将所述队尾指针前移到下一个位置;
队头指针前移子单元,用于按照所述循环队列中存储空间的排列顺序,将所述队头指针前移到下一个位置。
在本申请的一些实施例中,基于以上技术方案,数据缓存装置还包括:
映射建立模块,用于若所述用户空间中不存在所述循环队列,将所述缓存文件的缓存数据读取到所述读缓冲区中并建立所述读缓冲区中的物理地址与用户空间中虚拟地址之间的映射关系;
第二队列构建模块,用于根据所述虚拟地址,在所述用户空间中构建所述循环队列,所述循环队列中一个存储空间对应于所述缓存文件中的一个缓存数据。
在本申请的一些实施例中,基于以上技术方案,数据记录模块840包括:
第一数据复制单元,用于通过处理器将所述读缓冲区中的数据复制到内核缓冲区中;
第一数据写入单元,用于通过内存访问控制器将所述内核缓冲区中的数据写入到缓存文件。
在本申请的一些实施例中,基于以上技术方案,数据记录模块840包括:
偏移量获取单元,用于获取所述读缓冲区中数据的数据地址和偏移量;
偏移量发送单元,用于通过处理器将所述数据地址和所述偏移量发送到内核缓冲区中;
第二数据复制单元,用于通过内存访问控制器根据所述内核缓冲区中的所述数据地址和所述偏移量,将所述读缓冲区中的缓存数据复制到所述缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据记录模块840包括:
管道建立单元,用于在所述读缓冲区与内核缓冲区之间建立通信管道;
数据传输单元,用于通过所述通信管道,将所述读缓冲区中的数据传输到所述内核缓冲区中;
第二数据写入单元,用于将所述内核缓冲区内的数据写入缓存文件中。
在本申请的一些实施例中,基于以上技术方案,数据获取模块810包括:
信息采集单元,用于向支付验证服务器发送生物信息采集设备采集的上报信息;
上报信息获取单元,用于当检测到上报信息发送失败时,获取所述上报信息作为缓存数据。
需要说明的是,上述实施例所提供的装置与上述实施例所提供的方法属于同一构思,其中各个模块执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
图9示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图9示出的电子设备的计算机系统900仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图9所示,计算机系统900包括中央处理单元(Central Processing Unit,CPU)901,其可以根据存储在只读存储器(Read-Only Memory,ROM)902中的程序或者从储存部分908加载到随机访问存储器(Random Access Memory,RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有系统操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(Input/Output,I/O)接口905也连接至总线904。
以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分907;包括硬盘等的储存部分908;以及包括诸如LAN(Local Area Network,局域网)卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入储存部分908。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

Claims (15)

1.一种数据缓存方法,其特征在于,包括:
获取缓存数据;
根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;
根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;
通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
2.根据权利要求1所述的方法,其特征在于,所述通过所述读缓冲区,将所述缓存数据记录到缓存文件中之后,所述方法还包括:
将所述缓存文件的缓存数据读取到所述读缓冲区中;
为所述读缓冲区中的缓存数据分配第二虚拟地址,所述第二虚拟地址与所述读缓冲区的物理地址之间存在映射关系;
根据所述第二虚拟地址与所述读缓冲区的物理地址之间的映射关系和所述读缓冲区的所述缓存数据,在所述用户空间中构建循环队列,所述循环队列中的存储空间通过所述第二虚拟地址指示所述读缓冲区中的缓存数据;
通过所述循环队列,发送所述缓存数据。
3.根据权利要求2所述的方法,其特征在于,所述通过所述循环队列,发送所述缓存数据,包括:
检查所述循环队列的队头指针和所述队尾指针在所述循环队列中指示的位置;
若所述队头指针和所述队尾指针指示的位置不同,则将所述队头指针移动到所述队尾指针所指示的位置;
根据所述队头指针所指示的虚拟地址的映射关系,从所述读缓存区中读取待发送缓存数据;
发送所述待发送缓存数据并将所述队头指针前移到下一个位置。
4.根据权利要求3所述的方法,其特征在于,所述发送所述待发送缓存数据并将所述队头指针前移到下一个位置之后,所述方法还包括:
将所述队尾指针前移到指示所述待处理存储空间的位置;
根据所述队尾指针所指示的虚拟地址的映射关系,将所述待发送缓存数据从所述内核空间的所述读缓冲区中删除;
根据所述读缓冲区的数据,更新所述缓存文件以将所述待发送缓存数据从所述缓存文件中删除。
5.根据权利要求2所述的方法,其特征在于,所述通过所述循环队列,发送所述缓存数据,包括:
检查所述队头指针和所述队尾指针在所述循环队列中指示的位置;
若所述队头指针和所述队尾指针指示的位置相同,则停止发送数据;
若所述队头指针和所述队尾指针指示的位置不同,则根据所述队尾指针当前指示存储空间的虚拟地址,从所述读缓存区中读取待发送缓存数据;
发送所述待发送缓存数据并将所述队尾指针前移到下一个位置。
6.根据权利要求1所述的方法,其特征在于,所述根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,包括:
根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置;
获取所述队头指针当前指示位置的地址作为所述第一虚拟地址。
7.根据权利要求6所述的方法,其特征在于,所述根据所述循环队列中存储空间的排列顺序以及所述循环队列的队头指针和队尾指针当前指示的位置,将所述队头指针移动到下一个位置,包括:
若所述队头指针和所述队尾指针指示的位置满足队满条件,则按照所述循环队列中存储空间的排列顺序,将所述队尾指针前移到下一个位置;
按照所述循环队列中存储空间的排列顺序,将所述队头指针前移到下一个位置。
8.根据权利要求1所述的方法,其特征在于,所述根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址之前,所述方法还包括:
若所述用户空间中不存在所述循环队列,将所述缓存文件的缓存数据读取到所述读缓冲区中并建立所述读缓冲区中的物理地址与用户空间中虚拟地址之间的映射关系;
根据所述虚拟地址,在所述用户空间中构建所述循环队列,所述循环队列中一个存储空间对应于所述缓存文件中的一个缓存数据。
9.根据权利要求1所述的方法,其特征在于,所述通过所述读缓冲区,将所述缓存数据记录到缓存文件中,包括:
通过处理器将所述读缓冲区中的数据复制到内核缓冲区中;
通过内存访问控制器将所述内核缓冲区中的数据写入到缓存文件。
10.根据权利要求1所述的方法,其特征在于,所述通过所述读缓冲区,将所述缓存数据记录到缓存文件中,包括:
获取所述读缓冲区中数据的数据地址和偏移量;
通过处理器将所述数据地址和所述偏移量发送到内核缓冲区中;
通过内存访问控制器根据所述内核缓冲区中的所述数据地址和所述偏移量,将所述读缓冲区中的缓存数据复制到所述缓存文件中。
11.根据权利要求1所述的方法,其特征在于,所述通过所述读缓冲区,将所述缓存数据记录到缓存文件中,包括:
在所述读缓冲区与内核缓冲区之间建立通信管道;
通过所述通信管道,将所述读缓冲区中的数据传输到所述内核缓冲区中;
将所述内核缓冲区内的数据写入缓存文件中。
12.根据权利要求1至11中任一项所述的方法,其特征在于,所述获取缓存数据,包括:
向支付验证服务器发送生物信息采集设备采集的上报信息;
当检测到上报信息发送失败时,获取所述上报信息作为缓存数据。
13.一种数据缓存装置,其特征在于,包括:
数据获取模块,用于获取缓存数据;
地址获取模块,用于根据用户空间的循环队列,获取所述循环队列中的第一虚拟地址,所述用户空间的第一虚拟地址与内核空间中读缓冲区的物理地址之间存在映射关系;
数据写入模块,用于根据所述第一虚拟地址与内核空间中读缓冲区的物理地址之间的映射关系,将所述缓存数据写入到所述第一虚拟地址对应的所述内核空间的读缓冲区中;
数据记录模块,用于通过所述读缓冲区,将所述缓存数据记录到缓存文件中。
14.一种电子设备,其特征在于,包括:
处理器;
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至12中任意一项所述的数据缓存方法。
15.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至12中任一项所述的数据缓存方法。
CN202211562392.1A 2022-12-06 2022-12-06 数据缓存方法、装置、电子设备和可读介质 Pending CN116955225A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211562392.1A CN116955225A (zh) 2022-12-06 2022-12-06 数据缓存方法、装置、电子设备和可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211562392.1A CN116955225A (zh) 2022-12-06 2022-12-06 数据缓存方法、装置、电子设备和可读介质

Publications (1)

Publication Number Publication Date
CN116955225A true CN116955225A (zh) 2023-10-27

Family

ID=88459168

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211562392.1A Pending CN116955225A (zh) 2022-12-06 2022-12-06 数据缓存方法、装置、电子设备和可读介质

Country Status (1)

Country Link
CN (1) CN116955225A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备
CN117991995B (zh) * 2024-03-26 2024-06-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Similar Documents

Publication Publication Date Title
CN108874506B (zh) 虚拟机直通设备的热迁移方法和装置
CN102667720B (zh) 没有排序依赖的一致性
CN108989432B (zh) 用户态的文件发送方法、文件接收方法和文件收发装置
CN104156361A (zh) 一种实现数据同步的方法及系统
CN110704392B (zh) 区块链网络的升级方法及装置、存储介质、电子设备
US10430292B2 (en) Snapshot deletion in a distributed storage system
CN109710185A (zh) 数据处理方法及装置
CN106686095A (zh) 一种基于纠删码技术的数据存储方法及装置
CN112835524A (zh) 存储资源配置方法、存储资源控制器及调度系统
CN111382123A (zh) 文件存储方法、装置、设备及存储介质
CN110968563B (zh) 一种数据存储方法、元数据服务器及客户端
CN117355817A (zh) 区片段驱动器管理
CN116955225A (zh) 数据缓存方法、装置、电子设备和可读介质
CN111049913B (zh) 数据文件的传输方法及装置、存储介质、电子设备
US9619336B2 (en) Managing production data
US10430110B2 (en) Implementing a hybrid storage node in a distributed storage system
WO2024082857A1 (zh) 数据迁移的方法、系统及相关装置
CN111124291B (zh) 分布式存储系统的数据存储处理方法、装置、电子设备
CN108833477B (zh) 基于共享内存的消息传输方法、系统和装置
CN103714059A (zh) 一种更新数据的方法及装置
CN108920300A (zh) 一种数据操作方法及相关装置
CN115061743A (zh) 接口调用方法及装置、计算机可读介质和电子设备
CN111435302B (zh) 一种应用程序的处理方法及装置
US10452308B2 (en) Encoding tags for metadata entries in a storage system
CN108345431B (zh) 一种数据读取的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication