CN116107774A - Io请求处理方法、装置、电子设备和存储介质 - Google Patents

Io请求处理方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN116107774A
CN116107774A CN202211703182.XA CN202211703182A CN116107774A CN 116107774 A CN116107774 A CN 116107774A CN 202211703182 A CN202211703182 A CN 202211703182A CN 116107774 A CN116107774 A CN 116107774A
Authority
CN
China
Prior art keywords
request
data
read
writing
write
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
CN202211703182.XA
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.)
Zebred Network Technology Co Ltd
Original Assignee
Zebred Network Technology 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 Zebred Network Technology Co Ltd filed Critical Zebred Network Technology Co Ltd
Priority to CN202211703182.XA priority Critical patent/CN116107774A/zh
Publication of CN116107774A publication Critical patent/CN116107774A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请实施例提供一种IO请求处理方法、装置、电子设备和存储介质,涉及信息处理技术领域,包括:接收客户端通过进程间通信IPC发送的IO请求;将IO请求写入IO请求的类型对应的工作队列;向IPC发送通知消息,通知消息用于指示服务端接收到IO请求;从工作队列中依次获取IO请求,并根据设备标识执行IO请求。在字符设备服务端设置处理IO请求的工作队列,通过异步的方式执行IO请求接收流程和IO请求处理流程,可以使得字符设备服务端接收IPC消息不受读写阻塞的影响,提升字符设备服务端的响应效率。

Description

IO请求处理方法、装置、电子设备和存储介质
技术领域
本申请涉及信息处理技术领域,特别涉及一种IO请求处理方法、装置、电子设备和存储介质。
背景技术
字符设备是操作系统的重要组成部分,控制台终端、串口设备、显示设备等都属于字符设备,用户与操作系统的交互主要依靠字符设备完成。
在微内核操作系统中,各服务都是以独立进程的方式运行,用户的应用程序称为客户端,服务进程称为服务端。当用户需要对字符设备进行读写时,客户端将对应的IO请求以进程间通信(inter-process communication,IPC)的方式发送至对应的字符设备服务端。字符设备服务端接收到IPC消息后,执行对应的IO请求。在字符设备服务端完成IO请求后,对客户端进行IPC消息回复,客户端接收到IPC消息回复后完成IO请求。
当存在多个客户端对同一字符设备进行读写时,若字符设备服务端正在执行某一IO请求,则无法及时响应其他客户端的请求。
发明内容
本申请实施例提供一种IO请求处理方法、装置、电子设备和存储介质,可以提高字符设备服务端的响应效率。
第一方面,本申请实施例提供一种IO请求处理方法,包括:
异步执行IO请求接收流程和IO请求处理流程;
所述IO请求接收流程包括:
接收客户端通过进程间通信IPC发送的IO请求,所述IO请求中包括所述IO请求的类型和所述IO请求访问的目标字符设备的设备标识;
将所述IO请求写入所述IO请求的类型对应的工作队列,所述工作队列中的所述IO请求是服务端接收到根据所述IO请求的时间的先后顺序排列的;
向所述IPC发送通知消息,所述通知消息用于指示所述服务端接收到所述IO请求;
所述IO请求处理流程包括:
从所述工作队列中依次获取所述IO请求,并根据所述设备标识执行所述IO请求。
可选的,所述IO请求的类型包括读请求和写请求;
所述将所述IO请求写入所述IO请求的类型对应的工作队列,包括:
若所述IO请求为读请求,则将所述IO请求写入读工作队列;
若所述IO请求为写请求,则将所述IO请求写入写工作队列。
可选的,若所述IO请求为写请求,所述根据所述设备标识执行所述IO请求,包括:
获取所述写请求对应的写入数据;
根据所述设备标识将所述写入数据发送至所述目标字符设备驱动端,并调用所述目标字符设备驱动端将所述写入数据写入所述目标字符设备的硬件寄存器中;
向所述客户端回复第一IPC消息,所述第一IPC消息用于指示所述写请求写入完成。
可选的,所述写请求中还包括所述写入数据的数据量,所述方法还包括:
获取所述目标字符设备的硬件寄存器的空闲缓存容量;
若所述空闲缓存容量大于或等于所述写入数据的数据量,则将所述写入数据写入所述硬件寄存器中;
若所述空闲缓存容量小于所述写入数据的数据量,则在所述硬件寄存器的缓存释放后,将所述写入数据写入所述硬件寄存器中。
可选的,若所述IO请求为读请求,所述根据所述设备标识执行所述IO请求,包括:
获取所述读请求中包括的需要读取的数据量;
根据所述设备标识和所述数据量从数据缓冲区获取所述目标字符设备的数据;
向所述客户端回复第二IPC消息,所述第二IPC消息用于指示所述客户端读取所述目标字符设备的数据。
可选的,所述根据所述设备标识和所述数据量从数据缓冲区获取所述目标字符设备的数据之前,所述方法还包括:
判断所述数据缓冲区中所述目标字符设备的数据是否满足所述需要读取的数据量;
若否,休眠所述读请求,等待所述目标字符设备向所述数据缓冲区写入数据。
可选的,所述等待所述目标字符设备向所述数据缓冲区写入数据之后,所述方法还包括:
若检测到所述目标字符设备在所述硬件寄存器中输入数据时,调用所述目标字符设备驱动端获取所述输入数据;
将所述输入数据写入所述数据缓冲区,并唤醒所述读请求;
若所述数据缓冲区中所述目标字符设备的数据仍然不满足所述需要读取的数据量,则再次休眠所述读请求,直至所述数据缓冲区中所述目标字符设备的数据满足所述需要读取的数据量。
第二方面,本申请实施例提供一种IO请求处理装置,包括:
执行模块,用于异步执行IO请求接收流程和IO请求处理流程;
所述IO请求接收流程包括:
通过接收模块接收客户端发送的IO请求,所述IO请求中包括所述IO请求的类型和所述IO请求访问的目标字符设备的设备标识,所述IO请求是通过进程间通信IPC发送至服务端;
将所述IO请求写入所述IO请求的类型对应的工作队列,所述工作队列中的所述IO请求是服务端接收到根据所述IO请求的时间的先后顺序排列的;
向所述IPC发送通知消息,所述通知消息用于指示所述服务端接收到所述IO请求;
所述IO请求处理流程包括:
通过获取模块从所述工作队列中依次获取所述IO请求,并根据所述设备标识执行所述IO请求。
第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器;
存储器用于存储计算机指令;处理器用于运行存储器存储的计算机指令实现第一方面中任一项的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现第一方面中任一项的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面中任一项的方法。
本申请实施例提供的IO请求处理方法、装置、电子设备和存储介质,通过接收客户端通过进程间通信IPC发送的IO请求,IO请求中包括IO请求的类型和IO请求访问的目标字符设备的设备标识;将IO请求写入IO请求的类型对应的工作队列,工作队列中的IO请求是根据服务端接收到IO请求的时间的先后顺序排列的;向IPC发送通知消息,通知消息用于指示服务端接收到IO请求;从工作队列中依次获取IO请求,并根据设备标识执行IO请求。在字符设备服务端设置处理IO请求的工作队列,通过异步的方式执行IO请求接收流程和IO请求处理流程,可以使得字符设备服务端接收IPC消息不受读写阻塞的影响,提升字符设备服务端的响应效率。
附图说明
图1为本申请实施例提供场景示意图;
图2为本申请实施例提供的IO请求处理方法的流程示意图一;
图3为本申请实施例提供的IO请求处理方法的流程示意图二;
图4为本申请实施例提供的读写请求处理过程示意图;
图5为本申请实施例提供的IO请求处理装置的结构示意图;
图6为本申请实施例提供的IO请求处理电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
字符设备是操作系统的重要组成部分,控制台终端、串口设备、显示设备等都属于字符设备,用户与操作系统的交互主要依靠字符设备完成。以linux系统为例,用户的在shell模拟的虚拟控制台上进行操作就是通过键盘等字符设备输入数据,并在显示器上显示输入的字符和命令执行结果。字符设备服务为具体的字符设备驱动提供注册、管理和统一的IO接口等,使得用户和操作系统都无需去关心如何读写和控制具体的设备驱动。
在微内核操作系统中,各服务都是以独立进程的方式运行,用户的应用程序称为客户端,服务进程称为服务端。当用户需要对字符设备进行读写时,客户端将对应的输入/输出(input/output,IO)请求以IPC的方式阻塞的打包发送至对应的字符设备服务端。字符设备服务端接收到IPC消息后,执行对应的IO请求。在字符设备服务端完成IO请求后,对客户端进行IPC消息回复,客户端接收到IPC消息回复后完成IO请求。
当存在多个客户端对同一字符设备进行读写时,若此时字符设备服务端正在执行某一IO请求,字符设备服务端需要执行完该IO请求后,才能响应其他客户端发送的IPC消息。
有鉴于此,本申请实施例提出一种IO请求处理方法、装置、电子设备和存储介质,在字符设备服务端中设置IO工作队列,字符设备服务端接收的IO请求统一由队列进行管理,采用异步的方式执行IO请求的接收和IO请求的处理,使得字符设备服务端接收IPC消息不受当前正在执行的IO请求的影响,可以提高字符设备服务端对客户端的响应效率。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图1为本申请实施例提供的场景示意图,本申请实施例提供的IO请求处理方法运行如图1所示的微内核架构的操作系统中。
在微内核架构的操作系统中,只有内存管理、任务调度、进程间通信等关键功能集中在微内核,其他操作系统服务比如文件系统,网络服务,字符设备服务及其他各种设备服务都是以单独的进程运行的,本质上与用户的应用程序没有区别。
应用程序如果要从字符设备读写数据,则需要通过微内核提供的IPC通信与字符设备服务进程建立联系,然后进行读写操作,读写的数据都是通过IPC在应用进程和字符设备服务进程之间进行交互。
示例性的,如图1所示,若应用程序2需要对某一字符设备进行读写,则可以通过IPC消息将对应的IO请求发送至操作系统的微内核中,操作系统的微内核可以对该IO请求进行解析,获得该IO请求对应的字符设备标识,例如,字符设备名称。操作系统的微内核可以通过IPC消息将该IO请求发送至字符设备服务程序,即,字符设备服务端。字符设备服务程序根据接收到的IO请求执行对应的操作,并在执行结束后通过IPC消息将执行结果逐级返回至应用程序2。
上面对本申请实施例的应用场景进行了简单说明,下面将以图1中所示的字符设备服务端为例,对本申请实施例提供的IO请求处理方法进行说明。
图2为本申请实施例提供的IO请求处理方法的流程示意图一,如图1所示,包括如下步骤:
S201、接收客户端通过进程间通信IPC发送的IO请求,IO请求中包括IO请求的类型和IO请求访问的目标字符设备的设备标识。
本申请实施例中,在微内核操作系统中,各服务都是以独立进程的方式运行,不同进程之间进行信息交互,都是通过操作系统的微内核提供的IPC来实现的。
在客户端需要与某一字符设备进行交互时,可以通过IPC发送IPC消息的方式将交互请求,即,IO请求,发送至对应的字符设备服务端,字符设备服务端接收到该IPC消息后,可以执行对应的IO请求,完成客户端与字符设备的交互。
本申请实施例中,IO请求的类型包括读请求和写请求,其中,读请求可以指客户端读取字符设备中的数据的请求,写请求可以指客户端向字符设备中写入数据的请求。
本申请实施例中,字符设备服务端接收到客户端通过IPC发送的IO请求时,可以对该IO请求进行解析处理,获得该IO请求的类型和IO请求访问的目标字符设备的设备标识。
S202、将IO请求写入IO请求的类型对应的工作队列,工作队列中的IO请求是根据服务端接收到IO请求的时间的先后顺序排列的。
本申请实施例中,工作队列包括读取工作队列和写入工作队列,每个工作队列中包括至少一个IO请求。
字符设备服务端在获取IO请求的类型后,可以将IO请求写入IO请求的类型对应的工作队列。即,若IO请求为读请求,则将IO请求写入读工作队列;若IO请求为写请求,则将IO请求写入写工作队列。
本申请实施例中,通过在字符设备服务端中建立读取/写入工作队列,通过读取/写入工作队列统一管理字符设备服务端接收到的IO请求。各工作队列中都可以存储多个对应的IO请求,各IO请求在对应的工作队列中是按照字符设备服务端接收到该IO请求的时间的先后顺序排列的。
可选的,每个工作队列中也可以包含0个IO请求,当工作队列中的IO请求为0时,工作队列进入堵塞等待状态,不占用CPU资源。
S203、向IPC发送通知消息,通知消息用于指示服务端接收到IO请求。
本申请实施例中,服务端是指字符设备服务端。
字符设备服务端在将IO请求写入对应的工作队列后,可以向IPC发送通知消息,表示字符设备服务端接收到IO请求。IPC与字符设备服务端之间的通信交互可以进行中断,即,其他客户端也可以通过IPC向该字符设备服务端发送访问上述同一字符设备的IO请求。换而言之,字符设备服务端接收IPC消息可以不受字符设备服务端执行IO请求阻塞的影响。
可选的,一个字符设备服务端可以对应一个字符设备,一个字符设备服务端可以对应多个字符设备。
本申请实施例中,S201至S203所示步骤可以称为IO请求接收流程。
S204、从工作队列中依次获取IO请求,并根据设备标识执行IO请求。
本申请实施例中,字符设备服务端从工作队列中按照先入先出的顺序逐次获取IO请求,根据设备标识在对应的字符设备中执行该IO请求。
示例性的,若IO请求为读请求,则字符设备服务端根据设备标识在对应的字符设备中读取数据,若IO请求为写请求,则字符设备服务端根据设备标识在对应的字符设备中写入数据。在字符设备服务端执行完该IO请求后,可以从工作队列获取下一个IO请求,并执行下一个IO请求。
可选的,字符设备服务端与字符设备为一一对应,则字符设备服务端从工作队列中获取到IO请求时,可以直接执行该IO请求。
本申请实施例中,S204所示步骤可以称为IO请求处理流程。
可以理解的是,由于工作队列中可以存储多个IO请求,IO请求接收流程与IO请求处理流程可以为异步执行的方式进行。IO请求接收流程与IO请求处理流程之间不具备严格的时序关系。
本申请实施例提供的IO请求处理方法,通过接收客户端通过进程间通信IPC发送的IO请求,IO请求中包括IO请求的类型和IO请求访问的目标字符设备的设备标识;将IO请求写入IO请求的类型对应的工作队列,工作队列中的IO请求是根据服务端接收到IO请求的时间的先后顺序排列的;向IPC发送通知消息,通知消息用于指示服务端接收到IO请求;从工作队列中依次获取IO请求,并根据设备标识执行IO请求。在字符设备服务端设置处理IO请求的工作队列,通过异步的方式执行IO请求接收流程和IO请求处理流程,可以使得字符设备服务端接收IPC消息不受读写阻塞的影响,提升字符设备服务端的响应效率。
图3为本申请实施例提供的IO请求处理方法的流程示意图2,在图二所示实施例的基础上,进一步对本申请实施例提供的IO请求处理方法进行说明,如图3所示,包括:
S301、接收客户端通过进程间通信IPC发送的IO请求。
本申请实施例中,S301的具体实现方式与图2所示实施例中S201的具体视线方式类似,此处不再赘述。
S302、确定IO请求的类型,根据IO请求的类型将IO请求写入对应的工作队列队列中。
本申请实施例中,字符设备服务端接收到客户端通过IPC消息发送的IO请求后,可以对IPC消息进行解析处理,确定IO请求的类型。
示例性的,如图4所示,字符设备服务端对接收到的IPC消息进行解析处理可以通过字符设备服务端中的IPC消息预处理层进行解析处理,若IO请求为写请求,将该写请求转到char_core_write进行处理,若IO请求为读请求,转到char_core_read进行处理,其中,char_core_write和char_core_read为字符设备服务端中的处理函数。
字符设备服务端中的char_core_write接收到写请求后,可以对该写请求进行常规处理,例如,非法地址检查、数据有效性检查等。若该写请求符合要求,char_core_write可以根据接收到写请求的时间将该写请求写入写工作队列中,即,char_core_write可以直接将该写请求挂在write_worklist队列尾部。
字符设备服务端中的char_core_read接收到读请求后,对读请求的处理方式与char_core_write处理写请求的方式类似,此处不再赘述。
字符设备服务端在根据IO请求的类型将IO请求写入对应的工作队列队列中后,可以直接向IPC发送通知消息,以指示字符设备服务端接收到该客户端发送的IO请求,即字符设备服务端可以再次处理针对上述同一字符设备的IO请求。
S303、从写工作队列中获取写请求,并执行写请求。
本申请实施例中,对于写工作队列中的写请求,字符设备服务端可以根据工作队列中写请求的先后顺序,逐一进行处理。
针对任一写请求,字符设备服务端从工作队列中获取到该写请求后,对该写请求的处理可以如下所示:
具体的,获取写请求对应的写入数据;根据设备标识将写入数据发送至目标字符设备驱动端,并调用目标字符设备驱动端将写入数据写入目标字符设备的硬件寄存器中;向客户端回复第一IPC消息,第一IPC消息用于指示写请求写入完成。
示例性的,请继续参考图4,本申请实施例中,字符设备服务端对写请求的处理可以由字符设备服务端中的write_thread线程进行处理。
write_thread线程从write_worklist队列按照写请求的先后顺序逐个取出写请求,在char_tty_write里对写请求进行相关的字符行规程处理后,获取写请求中包括的需要写入目标字符设备的数据,并根据写请求中目标字符设备的设备标识,write_thread线程调用char_drv_write接口将该数据发送至目标字符设备的驱动端。例如,write请求中包括了目标字符设备的设备标识fd、写入的数据量大小buf,以及,需要写入的字节数nbytes。其中,char_tty_write也为字符设备服务端中的处理函数。
字符设备服务端可以通过目标字符设备的驱动端将该数据写入至目标字符设备的硬件寄存器中,即,hardware Register。在完成数据的写入后,write_thread线程可以通过挂在写请求上的callback函数完成逐级顺序完成向客户端发送IPC消息回复,字符设备服务端对写请求的处理完成。
可选的,若字符设备服务端与字符设备为一一对应关系,则在char_tty_write里对写请求进行相关的字符行规程处理后,可以直接调用char_drv_write接口将数据转到字符设备驱动端。
可选的,在通过目标字符设备的驱动端将该数据写入至目标字符设备的硬件寄存器中时,还需要对目标字符设备的硬件寄存器的缓存容量进行判断。
具体的,获取目标字符设备的硬件寄存器的空闲缓存容量;若空闲缓存容量大于或等于写入数据的数据量,则将写入数据写入硬件寄存器中;若空闲缓存容量小于写入数据的数据量,则在硬件寄存器的缓存释放后,将写入数据写入硬件寄存器中。
本申请实施例中,字符设备服务端在确定目标字符设备的硬件寄存器的空闲缓存容量可以满足写入要求时,调用字符设备驱动端将数据写入目标字符设备的硬件寄存器。若目标字符设备的硬件寄存器的空闲缓存容量不满足写入要求时,则阻塞等待,在硬件寄存器的缓存释放后,将数据写入硬件寄存器中。
S304、从读工作队列中获取读请求,并执行读请求。
本申请实施例中,对于读工作队列中的写请求,字符设备服务端可以根据工作队列中读请求的先后顺序,逐一进行处理。
针对任一读请求,字符设备服务端从工作队列中获取到该读请求后,对该读请求的处理可以如下所示:
具体的,获取读请求中包括的需要读取的数据量;根据设备标识和所述数据量从数据缓冲区获取目标字符设备的数据;向客户端回复第二IPC消息,第二IPC消息用于指示客户端读取目标字符设备的数据。
示例性的,请继续参考图4,字符设备服务端对读请求的处理可以由字符设备服务端中的read_thread线程进行处理。
read_thread线程从read_worklist队列按照读请求的先后顺序逐个取出读请求,在char_tty_read里对读请求进行相关的字符行规程处理后,获取读请求中包括的需要读取的数据量。并根据读请求中目标字符设备的设备标识,从数据缓冲区,即,read_buffer,获取需要读取的数据量对应的数据。在完成数据读取后,read_thread线程可以通过挂在读请求上的callback函数完成逐级顺序完成向客户端发送IPC消息回复,字符设备服务端对读请求的处理完成。其中,char_tty_read也为字符设备服务端中的处理函数。
可选的,若字符设备服务端与字符设备为一一对应关系,则在char_tty_read里对读请求进行相关的字符行规程处理后,char_tty_read可以直接从read_buffer中获取需要读取的数据量对应的数据。
可选的,在数据缓冲区中读取数据时,字符设备服务端还可以对数据缓冲区中的数据量是否满足读取需求进行检查。
具体的,判断数据缓冲区中目标字符设备的数据是否满足需要读取的数据量;若否,休眠读请求,等待目标字符设备向数据缓冲区写入数据。
本申请实施例中,若char_tty_read确定read_buffer中目标字符设备的数据满足需要读取的数据量,则按照需要读取的数据量从read_buffer中读取数据,完成对读请求的处理。若read_buffer中目标字符设备的数据不满足需要读取的数据量,则将该读请求进行休眠,即,将read_thread线程挂起等待。
S305、获取目标字符设备输入的数据,并将数据写入数据缓冲区中。
本申请实施例中,在目标字符设备对应的读请求进行休眠后,字符设备服务端可以检测目标字符设备是否有新的数据输入,若有新的数据输入,可以将该数据写入数据缓冲区中。
具体的,若检测到目标字符设备在硬件寄存器中输入数据时,调用目标字符设备驱动端获取输入数据;将输入数据写入数据缓冲区。
示例性的,请继续参考图4,当有数据从目标字符设备输入后,操作系统内核会触发中断,字符设备服务端可以调用目标字符设备驱动执行驱动注册的中断处理函数interrupt_handler,在interrupt_handler中将目标字符设备输入的数据从设备硬件寄存器中取出,并调用char_drv_receive接口,char_drv_receive将目标字符设备输入的数据进行处理后放到read_buffer。
可选的,若字符设备服务端于字符设备为一对多的关系,则目标字符设备输入的数据带有目标字符设备的设备标识。
S306、唤醒休眠的读请求,并执行读请求。
本申请实施例中,在目标字符设备有数据写入至数据缓冲区时,字符设备服务端可以唤醒休眠的读请求,从数据缓冲区中读取对应的数据。
示例性的,符设备服务端可以唤醒read_thread。read_thread被唤醒后会再次检查read_buffer中是否有足够数据满足读请求,如果没有则再次挂起等待char_drv_receive接收数据。重复执行唤醒read_thread,并检查read_buffer中是否有足够数据满足读请求的步骤,直至被read_thread唤醒时,read_buffer中的数据满足读请求,则read_thread取出数据并返回IPC消息,读请求处理完成。
综上所述,本申请实施例提供的IO请求处理方法,通过对读写请求的IPC消息的处理和数据操作进行了分离,设计了read_wroklist和write_worklist两个队列分别存放读写请求,能保证字符设备服务端流水线化地处理IPC消息,读写数据由单独的线程去处理,读写可能造成的阻塞只会阻塞在处理线程,而不会影响字符设备服务端继续接收IPC请求消息,提高了响应速度,尤其是在多进程或多线程应用下效果更佳。写请求不需要开辟额外的数据缓冲区,可以直接由IPC接收映射的buffer写到驱动硬件寄存器,更节省空间。字符设备驱动开发更简单方便,不需要关心IPC消息的处理和回复,不需要实现复杂的输出逻辑,中断响应处理简化,只需关心从硬件寄存器取出数据并调用字符设备服务端提供的char_drv_receive接口即可,通过异步通知缩短了中断响应处理输入数据的耗时。
在上述IO请求处理方法实施例的基础上,本申请实施例还提供一种IO请求处理装置。
图5为本申请实施例提供的IO请求处理装置50的结构示意图,如图5所示,包括:
执行模块501,用于异步执行IO请求接收流程和IO请求处理流程。
所述IO请求接收流程包括:
通过接收模块502接收客户端通过进程间通信IPC发送的IO请求,所述IO请求中包括所述IO请求的类型和所述IO请求访问的目标字符设备的设备标识。
将所述IO请求写入所述IO请求的类型对应的工作队列,所述工作队列中的所述IO请求是根据服务端接收到所述IO请求的时间的先后顺序排列的。
向所述IPC发送通知消息,所述通知消息用于指示所述服务端接收到所述IO请求。
所述IO请求处理流程包括:
通过获取模块503从所述工作队列中依次获取所述IO请求,并根据所述设备标识执行所述IO请求。
可选的,执行模块501,还用于若所述IO请求为读请求,则将所述IO请求写入读工作队列;若所述IO请求为写请求,则将所述IO请求写入写工作队列。
可选的,执行模块501,还用于获取所述写请求对应的写入数据;根据所述设备标识将所述写入数据发送至所述目标字符设备驱动端,并调用所述目标字符设备驱动端将所述写入数据写入所述目标字符设备的硬件寄存器中;向所述客户端回复第一IPC消息,所述第一IPC消息用于指示所述写请求写入完成。
可选的,获取模块503,还用于获取所述目标字符设备的硬件寄存器的空闲缓存容量;若所述空闲缓存容量大于或等于所述写入数据的数据量,则将所述写入数据写入所述硬件寄存器中;若所述空闲缓存容量小于所述写入数据的数据量,则在所述硬件寄存器的缓存释放后,将所述写入数据写入所述硬件寄存器中。
可选的,获取模块503,还用获取所述读请求中包括的需要读取的数据量;根据所述设备标识和所述数据量从数据缓冲区获取所述目标字符设备的数据;向所述客户端回复第二IPC消息,所述第二IPC消息用于指示所述客户端读取所述目标字符设备的数据。
可选的,执行模块501,还用于判断所述数据缓冲区中所述目标字符设备的数据是否满足所述需要读取的数据量;若否,休眠所述读请求,等待所述目标字符设备向所述数据缓冲区写入数据。
可选的,执行模块501,还用于若检测到所述目标字符设备在所述硬件寄存器中输入数据时,调用所述目标字符设备驱动端获取所述输入数据;将所述输入数据写入所述数据缓冲区,并唤醒所述读请求;若所述数据缓冲区中所述目标字符设备的数据仍然不满足所述需要读取的数据量,则再次休眠所述读请求,直至所述数据缓冲区中所述目标字符设备的数据满足所述需要读取的数据量。
本申请实施例提供的IO请求处理装置可以执行上述任一实施例提供的IO请求处理方法的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本申请实施例提供的IO请求处理电子设备的结构示意图。如图6所示,本实施例提供的IO请求处理电子设备60可以包括:
处理器601。
存储器602,用于存储终端设备的可执行指令。
其中,存储器602可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器601用于执行存储器602存储的计算机执行指令,以实现前述方法实施例所描述的IO请求处理方法。其中,处理器601可能是一个中央处理器(Central ProcessingUnit,简称为CPU),或者是特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。
该电子设备60还可以包括通信接口603,以通过通信接口603可以与外部设备进行通信交互。在具体实现上,如果通信接口603、存储器602和处理器601独立实现,则通信接口603、存储器602和处理器601可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(Peripheral Component,简称为PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,简称为EISA)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口603、存储器602和处理器601集成在一块芯片上实现,则通信接口603、存储器602和处理器601可以通过内部接口完成通信。
本申请实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述IO请求处理方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
一种可能的实现方式中,计算机可读介质可以包括随机存取存储器(RandomAccess Memory,RAM),只读存储器(Read-Only Memory,ROM),只读光盘(compact discread-only memory,CD-ROM)或其它光盘存储器,磁盘存储器或其它磁存储设备,或目标于承载的任何其它介质或以指令或数据结构的形式存储所需的程序代码,并且可由计算机访问。而且,任何连接被适当地称为计算机可读介质。例如,如果使用同轴电缆,光纤电缆,双绞线,数字用户线(Digital Subscriber Line,DSL)或无线技术(如红外,无线电和微波)从网站,服务器或其它远程源传输软件,则同轴电缆,光纤电缆,双绞线,DSL或诸如红外,无线电和微波之类的无线技术包括在介质的定义中。如本文所使用的磁盘和光盘包括光盘,激光盘,光盘,数字通用光盘(Digital Versatile Disc,DVD),软盘和蓝光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。上述的组合也应包括在计算机可读介质的范围内。
本申请实施例中还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述IO请求处理方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在上述终端设备或者服务器的具体实现中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:ApplicationSpecific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域技术人员可以理解,上述任一方法实施例的全部或部分步骤可以通过与程序指令相关的硬件来完成。前述的程序可以存储于计算机可读取存储介质中,该程序被执行时,执行上述方法实施例的全部或部分的步骤。
本申请技术方案如果以软件的形式实现并作为产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本申请的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括计算机程序或者若干指令。该计算机软件产品使得计算机设备(可以是个人计算机、服务器、网络设备或者类似的电子设备)执行本申请实施例所述方法的全部或部分步骤。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种IO请求处理方法,其特征在于,包括:
异步执行IO请求接收流程和IO请求处理流程;
所述IO请求接收流程包括:
接收客户端通过进程间通信IPC发送的IO请求,所述IO请求中包括所述IO请求的类型和所述IO请求访问的目标字符设备的设备标识;
将所述IO请求写入所述IO请求的类型对应的工作队列,所述工作队列中的所述IO请求是根据服务端接收到所述IO请求的时间的先后顺序排列的;
向所述IPC发送通知消息,所述通知消息用于指示所述服务端接收到所述IO请求;
所述IO请求处理流程包括:
从所述工作队列中依次获取所述IO请求,并根据所述设备标识执行所述IO请求。
2.根据权利要求1所述的方法,其特征在于,所述IO请求的类型包括读请求和写请求;
所述将所述IO请求写入所述IO请求的类型对应的工作队列,包括:
若所述IO请求为读请求,则将所述IO请求写入读工作队列;
若所述IO请求为写请求,则将所述IO请求写入写工作队列。
3.根据权利要求2所述的方法,其特征在于,若所述IO请求为写请求,所述根据所述设备标识执行所述IO请求,包括:
获取所述写请求对应的写入数据;
根据所述设备标识将所述写入数据发送至所述目标字符设备驱动端,并调用所述目标字符设备驱动端将所述写入数据写入所述目标字符设备的硬件寄存器中;
向所述客户端回复第一IPC消息,所述第一IPC消息用于指示所述写请求写入完成。
4.根据权利要求3所述的方法,其特征在于,所述写请求中还包括所述写入数据的数据量,所述方法还包括:
获取所述目标字符设备的硬件寄存器的空闲缓存容量;
若所述空闲缓存容量大于或等于所述写入数据的数据量,则将所述写入数据写入所述硬件寄存器中;
若所述空闲缓存容量小于所述写入数据的数据量,则在所述硬件寄存器的缓存释放后,将所述写入数据写入所述硬件寄存器中。
5.根据权利要求4所述的方法,其特征在于,若所述IO请求为读请求,所述根据所述设备标识执行所述IO请求,包括:
获取所述读请求中包括的需要读取的数据量;
根据所述设备标识和所述数据量从数据缓冲区获取所述目标字符设备的数据;
向所述客户端回复第二IPC消息,所述第二IPC消息用于指示所述客户端读取所述目标字符设备的数据。
6.根据权利要求5所述的方法,其特征在于,所述根据所述设备标识和所述数据量从数据缓冲区获取所述目标字符设备的数据之前,所述方法还包括:
判断所述数据缓冲区中所述目标字符设备的数据是否满足所述需要读取的数据量;
若否,休眠所述读请求,等待所述目标字符设备向所述数据缓冲区写入数据。
7.根据权利要求6所述的方法,其特征在于,所述等待所述目标字符设备向所述数据缓冲区写入数据之后,所述方法还包括:
若检测到所述目标字符设备在所述硬件寄存器中输入数据时,调用所述目标字符设备驱动端获取所述输入数据;
将所述输入数据写入所述数据缓冲区,并唤醒所述读请求;
若所述数据缓冲区中所述目标字符设备的数据仍然不满足所述需要读取的数据量,则再次休眠所述读请求,直至所述数据缓冲区中所述目标字符设备的数据满足所述需要读取的数据量。
8.一种IO请求处理装置,其特征在于,包括:
执行模块,用于异步执行IO请求接收流程和IO请求处理流程;
所述IO请求接收流程包括:
通过接收模块接收客户端通过进程间通信IPC发送的IO请求,所述IO请求中包括所述IO请求的类型和所述IO请求访问的目标字符设备的设备标识;
将所述IO请求写入所述IO请求的类型对应的工作队列,所述工作队列中的所述IO请求是根据服务端接收到所述IO请求的时间的先后顺序排列的;
向所述IPC发送通知消息,所述通知消息用于指示所述服务端接收到所述IO请求;
所述IO请求处理流程包括:
通过获取模块从所述工作队列中依次获取所述IO请求,并根据所述设备标识执行所述IO请求。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1-7中任一项所述的方法。
CN202211703182.XA 2022-12-29 2022-12-29 Io请求处理方法、装置、电子设备和存储介质 Pending CN116107774A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211703182.XA CN116107774A (zh) 2022-12-29 2022-12-29 Io请求处理方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211703182.XA CN116107774A (zh) 2022-12-29 2022-12-29 Io请求处理方法、装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN116107774A true CN116107774A (zh) 2023-05-12

Family

ID=86263139

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211703182.XA Pending CN116107774A (zh) 2022-12-29 2022-12-29 Io请求处理方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN116107774A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116974631A (zh) * 2023-08-28 2023-10-31 中科驭数(北京)科技有限公司 硬件遥测数据获取方法、装置、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116974631A (zh) * 2023-08-28 2023-10-31 中科驭数(北京)科技有限公司 硬件遥测数据获取方法、装置、设备及存储介质
CN116974631B (zh) * 2023-08-28 2024-04-19 中科驭数(北京)科技有限公司 硬件遥测数据获取方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN107046508B (zh) 报文接收方法及网络设备
WO2018076793A1 (zh) 一种NVMe数据读写方法及NVMe设备
US10521393B2 (en) Remote direct memory access (RDMA) high performance producer-consumer message processing
US7257658B2 (en) Message based interrupt table
US9529651B2 (en) Apparatus and method for executing agent
CN110865868B (zh) 一种低延迟控制方法、装置及其设备
CN112650558B (zh) 数据处理方法、装置、可读介质和电子设备
TW200525365A (en) Optimization of SMI handling and initialization
US20140006668A1 (en) Performing Emulated Message Signaled Interrupt Handling
WO2022032990A1 (zh) 一种命令信息传输方法、系统、装置及可读存储介质
WO2023201987A1 (zh) 请求处理方法、装置、设备及介质
CN114697194B (zh) 阻塞式事件通知方法及装置
CN112491426A (zh) 面向多核dsp的服务组件通信架构及任务调度、数据交互方法
CN116107774A (zh) Io请求处理方法、装置、电子设备和存储介质
US7779411B2 (en) System, method and medium for providing asynchronous input and output with less system calls to and from an operating system
CN114020529A (zh) 一种流表数据的备份方法、装置、网络设备和存储介质
CN113535341B (zh) Linux下CPU核间中断通信的实现方法及装置
CN117370046A (zh) 进程间通信方法、系统、设备和存储介质
US20230153153A1 (en) Task processing method and apparatus
CN116243983A (zh) 处理器、集成电路芯片、指令处理方法、电子设备和介质
CN108062224B (zh) 基于文件句柄的数据读写方法、装置及计算设备
CN114610467A (zh) 一种多任务超时管理方法及系统
CN114900566A (zh) 数据通信方法、装置、电子设备及介质
US20180167340A1 (en) Technologies for multi-core wireless network data transmission
CN114327508A (zh) 一种软件加载方法及相关装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination