CN114942791A - 一种进程唤醒方法、装置、计算设备及可读存储介质 - Google Patents

一种进程唤醒方法、装置、计算设备及可读存储介质 Download PDF

Info

Publication number
CN114942791A
CN114942791A CN202210614457.6A CN202210614457A CN114942791A CN 114942791 A CN114942791 A CN 114942791A CN 202210614457 A CN202210614457 A CN 202210614457A CN 114942791 A CN114942791 A CN 114942791A
Authority
CN
China
Prior art keywords
wake
target
pipeline
data
target pipeline
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
CN202210614457.6A
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.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software 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 Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202210614457.6A priority Critical patent/CN114942791A/zh
Publication of CN114942791A publication Critical patent/CN114942791A/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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4418Suspend and resume; Hibernate and awake
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • 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/544Buffers; Shared memory; Pipes
    • 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)
  • Computer Security & Cryptography (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了一种进程唤醒方法、装置、计算设备及可读存储介质。本发明的进程唤醒方法在计算设备中执行,计算设备的操作***中运行有至少一个进程,该方法包括:在至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断目标管道的相应等待队列中是否存在待唤醒进程。如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程。如果不存在,则不执行唤醒函数。可见,本发明在任一进程向任一管道中写入数据或从任一管道中读取数据后,不会立即去执行唤醒函数,只有确认该管道的相应等待队列中存在待唤醒进程时,才会执行唤醒函数,从而可以提升管道进程的读写性能。

Description

一种进程唤醒方法、装置、计算设备及可读存储介质
技术领域
本发明涉及计算机领域,尤其涉及一种进程唤醒方法、装置、计算设备及可读存储介质。
背景技术
管道PIPE是一种使用非常频繁的半双工进程通信机制,常用于进程之间,一端作读端,一端作写端。PIPE是文件的一种,但不同于文件的是其不能无限制的写入,PIPE的缓存区(buffer)大小固定。因此,当任一进程向管道中写入数据时,如果缓存区已被写满,则该进程会进入阻塞状态(即,被阻塞),等待被唤醒。同理,当任一进程从管道中读取数据时,如果缓存区已为空(即,缓存区中的数据已全部被读取完),则该进程也会进入阻塞状态,等待被唤醒。
为此,需要一种高效的进程唤醒机制来将阻塞的进程唤醒。
发明内容
为此,本发明提供了一种进程唤醒方法、装置、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种进程唤醒方法,在计算设备中执行,计算设备的操作***中运行有至少一个进程,该方法包括:在至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断目标管道的相应等待队列中是否存在待唤醒进程;如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程;如果不存在,则不执行唤醒函数。
可选地,在根据本发明的进程唤醒方法中,如果在目标进程向目标管道中写入数据后,目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒读取等待队列中的至少一个待唤醒进程。
可选地,在根据本发明的进程唤醒方法中,如果在目标进程从目标管道中读取数据后,目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒写入等待队列中的至少一个待唤醒进程。
可选地,在根据本发明的进程唤醒方法中,还包括:接收目标进程对目标管道的数据处理请求,并确定数据处理请求为数据读取请求或数据写入请求;如果数据处理请求为数据读取请求,则判断目标管道的缓存区是否为空;如果缓存区不为空,则通知目标进程从目标管道中读取数据。
可选地,在根据本发明的进程唤醒方法中,还包括:如果数据处理请求为数据写入请求,则判断目标管道的缓存区是否已满;如果缓存区未满,则通知目标进程向目标管道中写入数据。
可选地,在根据本发明的进程唤醒方法中,在执行唤醒函数的步骤之前,还包括:获取相应等待队列的锁,并保持中断状态。
根据本发明的又一个方面,提供一种进程唤醒装置,驻留在计算设备中,计算设备的操作***中运行有至少一个进程,该装置包括:判断单元,适于在至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断目标管道的相应等待队列中是否存在待唤醒进程;唤醒单元,适于如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程;终止单元,适于如果不存在,则不执行唤醒函数。
可选地,在根据本发明的进程唤醒装置中,唤醒单元,适于如果在目标进程向目标管道中写入数据后,目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒读取等待队列中的至少一个待唤醒进程,还适于如果在目标进程从目标管道中读取数据后,目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒写入等待队列中的至少一个待唤醒进程。
根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行根据本发明的进程唤醒方法的指令。
根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行根据本发明的进程唤醒方法。
根据本发明的进程唤醒方法,在目标进程向目标管道中写入数据或从目标管道中读取数据后,首先判断目标管道的相应等待队列中是否存在待唤醒进程。如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程。如果不存在,则不执行唤醒函数。可见,本发明在任一进程向任一管道中写入数据或从任一管道中读取数据后,不会立即去执行唤醒函数,只有确认该管道的相应等待队列中存在待唤醒进程时,才会执行唤醒函数。如此,则可避免在管道的读取等待队列中没有待唤醒进程或者管道的写入等待队列中没有待唤醒进程时,仍执行唤醒函数情况的发生,从而可以有效避免因执行多余的唤醒函数而损失的性能,提升了管道进程的读写性能。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的写入数据应用场景下基于无条件执行唤醒函数机制唤醒进程的示意图;
图2示出了根据本发明一个实施例的读取数据应用场景下基于无条件执行唤醒函数机制唤醒进程的示意图;
图3示出了根据本发明一个实施例的无条件执行唤醒函数机制下执行唤醒函数的流程的示意图;
图4示出了根据本发明一个实施例的计算设备400的结构框图;
图5示出了根据本发明一个实施例的进程唤醒方法500的流程图;
图6示出了根据本发明又一个实施例的写入数据应用场景下的进程唤醒方法600的流程图的示意图;
图7示出了根据本发明又一个实施例的读取数据应用场景下的进程唤醒方法700的流程图的示意图;
图8示出了根据本发明一个实施例的进程唤醒装置800的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了清楚展示本发明实施例的方案和有益效果,在具体展开说明本发明实施例之前,首先对进程阻塞、进程唤醒和管道PIPE进行一下说明。
进程阻塞:正在运行的进程由于提出***服务请求(如I/O操作),但因为某种原因未得到操作***的立即响应,或者需要从其他合作进程获得的数据尚未到达等原因,该进程只能调用阻塞原语把自己阻塞以等待相应事件的出现。
进程唤醒:当阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语来将等待该事件的进程唤醒以使其进入就绪状态。
管道PIPE:进程间的一种通信方式,可以实现双向的数据传输,但同一时刻最多只能有一个方向的传输,即同一时刻只能有一个进程从其读取数据或向其写入数据。进一步讲,对于管道两端的进程而言,管道其实就是一个文件,但需注意的是其缓冲区buffer的大小固定。
由于管道的缓存区大小固定,因此不能无限制向其写入数据。这样,当任一进程向管道中写入数据时(此时该进程被称为写进程),如果缓存区已被写满,则该写进程会被阻塞,如图1。同理,当任一进程从管道中读取数据时(此时该进程被称为读进程),如果缓存区已为空,则该读进程也会被阻塞,如图2。
对于上述阻塞的读/写进程,可以在任一进程向该管道中写入数据或从该管道中读取数据后,通过执行唤醒函数来将其唤醒。具体地,在任一进程向该管道中写入数据后,则立即去执行唤醒函数以唤醒该管道的读取等待队列中正在阻塞的读进程,如图1。在任一进程从该管道中读取数据后,则立即去执行唤醒函数以唤醒该管道的写入等待队列中正在阻塞的写进程,如图2。
可见,上述的唤醒机制是无条件执行的,只要进程向管道中成功的写入了数据或从管道中成功的读取了数据,则立即去执行唤醒函数。但需注意的是,执行唤醒函数后,不一定会唤醒进程,因为在进程向管道中成功写入数据或从管道中成功读取数据后,管道的读取等待队列或写入等待队列中不一定会存在阻塞的读进程或写进程。也就是说,在进程向管道中成功写入数据或从管道中成功读取数据后,由于有时根本没有进程需要被唤醒,因此虽然执行了唤醒函数但也不会唤醒进程。显然,这种情况会浪费执行唤醒函数(或者说唤醒代码)的时间,造成性能损失。
另外,执行唤醒函数前,一般会先获取读取/写入等待队列的锁,然后保持中断状态,最后再去执行唤醒函数,如图3。执行唤醒函数后,则先判断读取/写入等待队列中是否存在阻塞的读/写进程。若存在,则唤醒至少一个阻塞的读/写进程,并释放锁。若不存在,则不唤醒进程,直接释放锁。可见,在执行唤醒函数前还需要先获取所要唤醒的那个队列的锁。然而,获取锁时很大概率会被中断程序抢占,如此则又会浪费一部分时间,从而会造成严重的性能损失。
基于此,本发明提供了一种适于在计算设备中执行的进程唤醒方法。具体地,在任一进程从管道中读取数据或向管道中写入数据后,只有管道的写入等待队列或读取等待队列中存在阻塞的写进程或读进程,才执行唤醒函数,如此则可以有效避免因执行多余的唤醒函数和获取锁时被中断而损失的性能。
图4示出了计算设备400的物理组件(即,硬件)的框图。在基本配置中,计算设备400包括至少一个处理单元402和***存储器404。根据一个方面,取决于计算设备的配置和类型,处理单元402可以实现为处理器。***存储器404包括但不限于易失性存储(例如,随机存取存储器)、非易失性存储(例如,只读存储器)、闪速存储器、或者这样的存储器的任何组合。根据一个方面,***存储器404中包括操作***405和程序模块406,程序模块406中包括进程唤醒模块420,进程唤醒模块420被配置为执行本发明的进程唤醒方法500。
根据一个方面,操作***405例如适合于控制计算设备400的操作。此外,示例结合图形库、其他操作***、或任何其他应用程序而被实践,并且不限于任何特定的应用或***。在图4中通过在虚线408内的那些组件示出了该基本配置。根据一个方面,计算设备400具有额外的特征或功能。例如,根据一个方面,计算设备400包括额外的数据存储设备(可移动的和/或不可移动的),例如磁盘、光盘、或者磁带。这样额外的存储在图4中是由可移动存储设备409和不可移动存储设备410示出的。
如在上文中所陈述的,根据一个方面,在***存储器404中存储有程序模块。根据一个方面,程序模块可以包括一个或多个应用程序,本发明不限制应用程序的类型,例如应用程序可以包括:电子邮件和联系人应用程序、文字处理应用程序、电子表格应用程序、数据库应用程序、幻灯片展示应用程序、绘画或计算机辅助应用程序、网络浏览器应用程序等。
根据一个方面,可以在包括分立电子元件的电路、包含逻辑门的封装或集成的电子芯片、利用微处理器的电路、或者在包含电子元件或微处理器的单个芯片上实践示例。例如,可以经由其中在图4中所示出的每个或许多组件可以集成在单个集成电路上的片上***(SOC)来实践示例。根据一个方面,这样的SOC设备可以包括一个或多个处理单元、图形单元、通信单元、***虚拟化单元、以及各种应用功能,其全部作为单个集成电路而被集成(或“烧”)到芯片基底上。当经由SOC进行操作时,可以经由在单个集成电路(芯片)上与计算设备400的其他组件集成的专用逻辑来对在本文中所描述的功能进行操作。还可以使用能够执行逻辑操作(例如AND、OR和NOT)的其他技术来实践本发明的实施例,所述其他技术包括但不限于机械、光学、流体、和量子技术。另外,可以在通用计算机内或在任何其他任何电路或***中实践本发明的实施例。
根据一个方面,计算设备400还可以具有一个或多个输入设备412,例如键盘、鼠标、笔、语音输入设备、触摸输入设备等。还可以包括输出设备414,例如显示器、扬声器、打印机等。前述设备是示例并且也可以使用其他设备。计算设备400可以包括允许与其他计算设备418进行通信的一个或多个通信连接416。合适的通信连接416的示例包括但不限于:RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。
如在本文中所使用的术语计算机可读介质包括计算机存储介质。计算机存储介质可以包括以任何用于存储信息(例如,计算机可读指示、数据结构、或程序模块)的方法或技术来实现的易失性的和非易失性的、可移动的和不可移动的介质。***存储器404、可移动存储设备409、和不可移动存储设备410都是计算机存储介质的示例(即,存储器存储)。计算机存储介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦只读存储器(EEPROM)、闪速存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光存储、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或者可用于存储信息并且可以由计算机设备400访问的任何其他制品。根据一个方面,任何这样的计算机存储介质都可以是计算设备400的一部分。计算机存储介质不包括载波或其他经传播的数据信号。
根据一个方面,通信介质是由计算机可读指令、数据结构、程序模块、或者经调制的数据信号(例如,载波或其他传输机制)中的其他数据实施的,并且包括任何信息传递介质。根据一个方面,术语“经调制的数据信号”描述了具有一个或多个特征集或者以将信息编码在信号中的方式改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频(RF)、红外线的、以及其他无线介质之类的无线介质。
图5示出了根据本发明一个实施例的进程唤醒方法500的流程图,方法500适于在计算设备(例如图4所示的计算设备400)中执行,且计算设备的操作***中运行有至少一个进程。其中,该计算设备的操作***可以为Linux操作***,也可以为其他的操作***,如Unix、Windows等,对此本发明不作具体限定。
如图5所示,本发明的进程唤醒方法500始于步骤S510。其中,在步骤S510之前,还包括接收上述至少一个进程中的目标进程对目标管道的数据处理请求,并确定数据处理请求为数据读取请求或数据写入请求,即判断数据处理请求为数据读取请求还是数据写入请求。
如果数据处理请求为数据读取请求,则判断目标管道的缓存区是否为空。如果目标管道的缓存区不为空,代表目标管道的缓存区中有数据可供目标进程来读取,随之则通知目标进程从目标管道中读取数据。而如果目标管道的缓存区为空,则代表目标管道的缓存区中的数据已全部被读取完,随之将目标进程加入到目标管道的读取等待队列中(即目标进程被阻塞),以等待被唤醒,此时目标进程则成为了目标管道的读取等待队列中的一个待唤醒进程。
如果数据处理请求为数据写入请求,则判断目标管道的缓存区是否已满。如果目标管道的缓存区未满,代表目标管道的缓存区中有空间可供目标进程来写入数据,随之则通知目标进程向目标管道中写入数据。而如果目标管道的缓存区已满,则代表目标管道的缓存区中已没有空间来存储目标进程所要写入的数据,随之将目标进程加入到目标管道的写入等待队列中,以等待被唤醒,此时目标进程则成为了目标管道的写入等待队列中的一个待唤醒进程。
其中,在目标进程向目标管道中写入数据或从目标管道中读取数据后,则进入步骤S510,判断目标管道的相应等待队列中是否存在待唤醒进程。需要说明的是,如果是由目标进程向目标管道中成功写入数据,触发的对目标管道的相应等待队列中是否存在待唤醒进程进行判断,则此处的相应等待队列指的是目标管道的读取等待队列。而如果是由目标进程从目标管道中成功读取数据,触发的对目标管道的相应等待队列中是否存在待唤醒进程进行判断,则此处的相应等待队列指的是目标管道的写入等待队列。
根据本发明的一个实施例,在目标进程向目标管道中写入数据或从目标管道中读取数据后,可以通过调用如下接口来判断目标管道的相应等待队列中是否存在待唤醒进程:
int is_pipe_wait(struct pipe_inode_info*pipe)
如果存在,则进入步骤S520,执行唤醒函数以唤醒至少一个待唤醒进程。具体地,如果在目标进程向目标管道中写入数据后,目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒目标管道的读取等待队列中的至少一个待唤醒进程。如果在目标进程从目标管道中读取数据后,目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒目标管道的写入等待队列中的至少一个待唤醒进程。
其中,唤醒函数具体可以为__wake_up_common。根据本发明的一个实施例,在执行唤醒函数__wake_up_common之前,可以先获取相应等待队列的锁,并保持中断状态。接下来,再执行唤醒函数。最后,在执行完唤醒函数后,释放所获取的锁。
具体地,在目标进程向目标管道中写入数据后,如果目标管道的读取等待队列中存在待唤醒进程,则首先通过__wake_up_common_lock函数获取目标管道的读取等待队列的锁。接着,通过spin_lock_irqsave函数保持中断状态。然后,再通过__wake_up_common函数来唤醒目标管道的读取等待队列中的至少一个待唤醒进程。最后,通过spin_unlock_irqrestore函数将目标管道的读取等待队列的锁释放。
同理,在目标进程从目标管道中读取数据后,如果目标管道的写入等待队列中存在待唤醒进程,则首先通过__wake_up_common_lock函数获取目标管道的写入等待队列的锁。接着,通过spin_lock_irqsave函数保持中断状态。然后,再通过__wake_up_common函数来唤醒目标管道的写入等待队列中的至少一个待唤醒进程。最后,通过spin_unlock_irqrestore函数将目标管道的写入等待队列的锁释放。
上述是在目标进程向目标管道中写入数据或从目标管道中读取数据后,目标管道的相应等待队列中存在待唤醒进程的情况。如果在目标进程向目标管道中写入数据或从目标管道中读取数据后,目标管道的相应等待队列中不存在待唤醒进程,则进入步骤S530,不执行唤醒函数。
具体地,如果在目标进程向目标管道中写入数据后,目标管道的读取等待队列中不存在待唤醒进程,则不执行唤醒函数,直接结束。同样,如果在目标进程从目标管道中读取数据后,目标管道的写入等待队列中不存在待唤醒进程,则不执行唤醒函数,直接结束。
至此可见,本发明的进程唤醒方法具体为,在目标进程向目标管道中写入数据后,先判断目标管道的读取等待队列中是否存在待唤醒进程,如果存在则执行唤醒函数,如果不存在则不再执行唤醒函数,直接结束;在目标进程从目标管道中读取数据后,先判断目标管道的写入等待队列中是否存在待唤醒进程,如果存在则执行唤醒函数,如果不存在则不再执行唤醒函数,直接结束。
显然,本发明在目标进程向目标管道中写入数据后,不会立即去执行唤醒函数,只有确认目标管道的读取等待队列中存在待唤醒进程时,才会执行唤醒函数。同样,在目标进程从目标管道中读取数据后,本发明也不会立即去执行唤醒函数,只有确认目标管道的写入等待队列中存在待唤醒进程时,才会执行唤醒函数。如此,则可避免在管道的读取等待队列中没有待唤醒进程或者管道的写入等待队列中没有待唤醒进程时,仍执行唤醒函数情况的发生,从而可以有效避免因执行某些多余的函数(如唤醒函数)和获取锁时被中断而损失的性能。
为了更好的说明本发明的完整实现过程,本发明又给出了两个实施例。
图6示出了根据本发明一个实施例的写入数据应用场景下的进程唤醒方法600的流程图的示意图,方法600适于在计算设备(例如图4所示的计算设备400)中执行。如图6所示,该方法600始于步骤S610。
在步骤S610中,接收目标进程向目标管道中写入数据的请求。随后,进入步骤S620。
在步骤S620中,判断目标管道的缓存区是否已满。如果是,则进入步骤S630。否则,进入步骤S640。
在步骤S630中,将目标进程加入到目标管道的写入等待队列中,以等待被唤醒。其中,在将目标进程加入到目标管道的写入等待队列中后,目标进程则为目标管道的写入等待队列中的一个待唤醒进程。
在步骤S640中,通知目标进程向目标管道中写入数据,并在目标进程向目标管道中写完数据后,进入步骤S650。
在步骤S650中,判断目标管道的读取等待队列中是否存在待唤醒进程。如果是,则进入步骤S660。否则,进入步骤S670。
在步骤S660中,执行唤醒函数以唤醒目标管道的读取等待队列中的至少一个待唤醒进程。
在步骤S670中,不执行唤醒函数,结束。
图7示出了根据本发明一个实施例的读取数据应用场景下的进程唤醒方法700的流程图的示意图,方法700适于在计算设备(例如图4所示的计算设备400)中执行。如图7所示,该方法700始于步骤S710。
在步骤S710中,接收目标进程从目标管道中读取数据的请求。随后,进入步骤S720。
在步骤S720中,判断目标管道的缓存区是否为空。如果是,则进入步骤S730。否则,进入步骤S740。
在步骤S730中,将目标进程加入到目标管道的读取等待队列中,以等待被唤醒。其中,在将目标进程加入到目标管道的读取等待队列中后,目标进程则为目标管道的读取等待队列中的一个待唤醒进程。
在步骤S740中,通知目标进程从目标管道中读取数据,并在目标进程从目标管道中读取完数据后,进入步骤S750。
在步骤S750中,判断目标管道的写入等待队列中是否存在待唤醒进程。如果是,则进入步骤S760。否则,进入步骤S770。
在步骤S760中,执行唤醒函数以唤醒目标管道的写入等待队列中的至少一个待唤醒进程。
在步骤S770中,不执行唤醒函数,结束。
其中,关于本实施例中读取数据应用场景下的进程唤醒方法和写入数据应用场景下的进程唤醒方法的具体细节可以参考上述基于图1至图5的描述,在此不再赘述。
另外,本发明还利用unixbenchu对本发明的进程唤醒方法进行了测试。unixbenchu是unix***中的通用性能测试工具,主要是从文件***、CPU、内存和进程执行等多个方面来测试***。本发明主要测试的是unixbench中的管道PIPE的吞吐率,即管道PIPE的读写速度。具体地,在同样时长内,分别基于无条件执行唤醒函数的唤醒机制和本发明的唤醒机制,对管道PIPE的吞吐率进行测试。获得的测试结果为:基于无条件执行唤醒函数的唤醒机制,管道PIPE的吞吐率为5095.1,基于本发明的唤醒机制,管道PIPE的吞吐率为6004.1。可见,相比于基于无条件执行唤醒函数的唤醒机制,本发明的唤醒机制能够显著提升管道PIPE读写的吞吐率。因此,本发明的唤醒方法可以显著提升管道进程的读写性能。
本发明还提供了一种进程唤醒装置。图8示出了根据本发明一个实施例的进程唤醒装置800的结构框图,适于驻留在计算设备500中。其中,该计算设备500的操作***中运行有至少一个进程。如图8所示,该进程唤醒装置包括判断单元810、唤醒单元820和终止单元830。
判断单元810,适于在上述至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断目标管道的相应等待队列中是否存在待唤醒进程。
唤醒单元820,适于如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程。具体地,如果在目标进程向目标管道中写入数据后,目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒目标管道的读取等待队列中的至少一个待唤醒进程,如果在目标进程从目标管道中读取数据后,目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒写入等待队列中的至少一个待唤醒进程。
终止单元830,适于如果不存在,则不执行唤醒函数。
根据本发明的进程唤醒装置800,其具体细节已在基于图1至图7的描述中详细公开,在此不再赘述。
根据本发明的进程唤醒方法,当目标进程向目标管道中写入数据或从目标管道中读取数据后,首先判断目标管道的相应等待队列中是否存在待唤醒进程。如果存在,则执行唤醒函数以唤醒至少一个待唤醒进程。如果不存在,则不执行唤醒函数。可见,本发明在任一进程向任一管道中写入数据或从任一管道中读取数据后,不会立即去执行唤醒函数,只有确认该管道的相应等待队列中存在待唤醒进程时,才会执行唤醒函数。如此,则可避免在管道的读取等待队列中没有待唤醒进程或者管道的写入等待队列中没有待唤醒进程时,仍执行唤醒函数情况的发生,从而可以有效避免因执行某些多余的函数(如唤醒函数)和获取锁时被中断而损失的性能,提升了管道进程的读写性能。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的进程唤醒方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与本发明的示例一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
此外,所述实施例中的一些在此被描述成可以由计算机***的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种进程唤醒方法,适于在计算设备中执行,所述计算设备的操作***中运行有至少一个进程,所述方法包括:
在所述至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断所述目标管道的相应等待队列中是否存在待唤醒进程;
如果存在,则执行唤醒函数以唤醒至少一个所述待唤醒进程;
如果不存在,则不执行唤醒函数。
2.如权利要求1所述的方法,其中:
如果在所述目标进程向所述目标管道中写入数据后,所述目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒所述读取等待队列中的至少一个待唤醒进程。
3.如权利要求1或2所述的方法,其中:
如果在所述目标进程从所述目标管道中读取数据后,所述目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒所述写入等待队列中的至少一个待唤醒进程。
4.如权利要求1-3中任一项所述的方法,还包括:
接收所述目标进程对所述目标管道的数据处理请求,并确定所述数据处理请求为数据读取请求或数据写入请求;
如果所述数据处理请求为数据读取请求,则判断所述目标管道的缓存区是否为空;
如果所述缓存区不为空,则通知所述目标进程从所述目标管道中读取数据。
5.如权利要求4所述的方法,还包括:
如果所述数据处理请求为数据写入请求,则判断所述目标管道的缓存区是否已满;
如果所述缓存区未满,则通知所述目标进程向所述目标管道中写入数据。
6.如权利要求1-5中任一项所述的方法,其中,在执行唤醒函数的步骤之前,还包括:
获取相应等待队列的锁,并保持中断状态。
7.一种进程唤醒装置,驻留在计算设备中,所述计算设备的操作***中运行有至少一个进程,所述装置包括:
判断单元,适于在所述至少一个进程中的目标进程向目标管道中写入数据或从目标管道中读取数据后,判断所述目标管道的相应等待队列中是否存在待唤醒进程;
唤醒单元,适于如果存在,则执行唤醒函数以唤醒至少一个所述待唤醒进程;
终止单元,适于如果不存在,则不执行唤醒函数。
8.如权利要求7所述的装置,其中:
所述唤醒单元,适于如果在所述目标进程向所述目标管道中写入数据后,所述目标管道的读取等待队列中存在待唤醒进程,则执行唤醒函数以唤醒所述读取等待队列中的至少一个待唤醒进程,还适于如果在所述目标进程从所述目标管道中读取数据后,所述目标管道的写入等待队列中存在待唤醒进程,则执行唤醒函数以唤醒所述写入等待队列中的至少一个待唤醒进程。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-6中任一项所述方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述方法。
CN202210614457.6A 2022-05-26 2022-05-26 一种进程唤醒方法、装置、计算设备及可读存储介质 Pending CN114942791A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210614457.6A CN114942791A (zh) 2022-05-26 2022-05-26 一种进程唤醒方法、装置、计算设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210614457.6A CN114942791A (zh) 2022-05-26 2022-05-26 一种进程唤醒方法、装置、计算设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN114942791A true CN114942791A (zh) 2022-08-26

Family

ID=82910000

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210614457.6A Pending CN114942791A (zh) 2022-05-26 2022-05-26 一种进程唤醒方法、装置、计算设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN114942791A (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040015979A1 (en) * 2002-07-22 2004-01-22 Te-Cheng Shen System and method for efficiently exchanging data among processes
US20100057863A1 (en) * 2008-09-03 2010-03-04 Microsoft Corporation Composing message processing pipelines
CN102902582A (zh) * 2011-09-12 2013-01-30 微软公司 挂起状态和执行状态中的管理进程
US20150269065A1 (en) * 2014-03-19 2015-09-24 Qualcomm Incorporated Hardware-based atomic operations for supporting inter-task communication
CN105760216A (zh) * 2016-02-29 2016-07-13 惠州市德赛西威汽车电子股份有限公司 一种多进程同步控制方法
CN107085542A (zh) * 2017-05-05 2017-08-22 深圳慧昱教育科技有限公司 Ipc通信方法和服务器
CN108304269A (zh) * 2017-01-13 2018-07-20 阿里巴巴集团控股有限公司 一种数据的发送、接收方法、装置及通信框架
CN109240812A (zh) * 2018-08-05 2019-01-18 温州职业技术学院 一种基于动态监测的进程优化调度方法
CN110597640A (zh) * 2019-08-29 2019-12-20 深圳市优必选科技股份有限公司 进程间的数据传输方法、装置、终端及计算机存储介质
CN113326140A (zh) * 2021-06-30 2021-08-31 统信软件技术有限公司 一种进程迁移方法、装置、计算设备以及存储介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040015979A1 (en) * 2002-07-22 2004-01-22 Te-Cheng Shen System and method for efficiently exchanging data among processes
US20100057863A1 (en) * 2008-09-03 2010-03-04 Microsoft Corporation Composing message processing pipelines
CN102902582A (zh) * 2011-09-12 2013-01-30 微软公司 挂起状态和执行状态中的管理进程
US20150269065A1 (en) * 2014-03-19 2015-09-24 Qualcomm Incorporated Hardware-based atomic operations for supporting inter-task communication
CN105760216A (zh) * 2016-02-29 2016-07-13 惠州市德赛西威汽车电子股份有限公司 一种多进程同步控制方法
CN108304269A (zh) * 2017-01-13 2018-07-20 阿里巴巴集团控股有限公司 一种数据的发送、接收方法、装置及通信框架
CN107085542A (zh) * 2017-05-05 2017-08-22 深圳慧昱教育科技有限公司 Ipc通信方法和服务器
CN109240812A (zh) * 2018-08-05 2019-01-18 温州职业技术学院 一种基于动态监测的进程优化调度方法
CN110597640A (zh) * 2019-08-29 2019-12-20 深圳市优必选科技股份有限公司 进程间的数据传输方法、装置、终端及计算机存储介质
CN113326140A (zh) * 2021-06-30 2021-08-31 统信软件技术有限公司 一种进程迁移方法、装置、计算设备以及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
周祖伦 , 王保定 , 朱建忠: "UNIX System V程序设计讲座 第十讲 管道通讯", 软件世界, no. 03, 31 March 1994 (1994-03-31), pages 8 *

Similar Documents

Publication Publication Date Title
US8544022B2 (en) Transactional memory preemption mechanism
US7577825B2 (en) Method for data validity tracking to determine fast or slow mode processing at a reservation station
US9395919B1 (en) Memory configuration operations for a computing device
US10606677B2 (en) Method of retrieving debugging data in UEFI and computer system thereof
US7360185B2 (en) Design verification using sequential and combinational transformations
US20050160203A1 (en) Method to maintain order between multiple queues with different ordering requirements in a high frequency system
US9489173B2 (en) Resizable and relocatable queue
CN114942791A (zh) 一种进程唤醒方法、装置、计算设备及可读存储介质
US7958510B2 (en) Device, system and method of managing a resource request
CN100432926C (zh) 数据处理***中处理交易的方法和装置
CN115840654A (zh) 消息的处理方法、***、计算设备及可读存储介质
US7861114B2 (en) System and method for recovery of memory transactions
US10019390B2 (en) Using memory cache for a race free interrupt scheme without the use of “read clear” registers
CN115269199A (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN113515388A (zh) 一种进程调度方法、装置、计算设备及可读存储介质
EP3923151A1 (en) Write ordering in ssds
US7035908B1 (en) Method for multiprocessor communication within a shared memory architecture
CN113050976B (zh) 基于PCIe总线的FPGA并行升级方法、装置、介质及电子设备
US10891244B2 (en) Method and apparatus for redundant array of independent drives parity quality of service improvements
CN113342698A (zh) 一种测试环境调度方法、计算设备及存储介质
US6658525B1 (en) Concurrent access of an unsegmented buffer by writers and readers of the buffer
US6453375B1 (en) Method and apparatus for obtaining coherent accesses with posted writes from multiple software drivers
JP2011138401A (ja) プロセッサシステム、プロセッサシステムの制御方法、及び制御回路
US7216194B2 (en) Methods and systems for improving delayed read handling
US11875048B2 (en) Memory management system and method based on non-uniform memory access

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