CN115454657A - 一种用户态虚拟机任务间的同步与互斥的方法及装置 - Google Patents

一种用户态虚拟机任务间的同步与互斥的方法及装置 Download PDF

Info

Publication number
CN115454657A
CN115454657A CN202210968959.9A CN202210968959A CN115454657A CN 115454657 A CN115454657 A CN 115454657A CN 202210968959 A CN202210968959 A CN 202210968959A CN 115454657 A CN115454657 A CN 115454657A
Authority
CN
China
Prior art keywords
task
semaphore
lock
read
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
CN202210968959.9A
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.)
Kedong Guangzhou Software Technology Co Ltd
Original Assignee
Kedong Guangzhou 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 Kedong Guangzhou Software Technology Co Ltd filed Critical Kedong Guangzhou Software Technology Co Ltd
Priority to CN202210968959.9A priority Critical patent/CN115454657A/zh
Publication of CN115454657A publication Critical patent/CN115454657A/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/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

本发明提供了一种用户态虚拟机任务间的同步与互斥方法及装置,通过信号量实现用户态虚拟机任务间的同步与互斥,所述方法包括:在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;当第一任务尝试获取第一信号量时,递减第一信号量的信号量计数;且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中;当第一任务释放所获取的第一信号量时,递增第一信号量的信号量计数。本发明的技术方案还通过互斥锁、条件变量、任务栅栏和读写锁实现用户态虚拟机任务间的同步与互斥。本发明的技术方案更加简洁、高效,高操作系统的性能、可维护性。

Description

一种用户态虚拟机任务间的同步与互斥的方法及装置
技术领域
本发明涉及操作系统领域,尤其涉及一种用户态虚拟机任务间的同步与互斥的方法及装置。
背景技术
现有支持多任务多虚拟核的嵌入式操作系统中支持任务同步与互斥的机制主要有信号量、互斥锁、条件变量、任务栅栏等,各同步机制的实现比较独立,从而增加了操作系统的复杂性,降低了操作系统的性能、可维护性。
发明内容
有鉴于此,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法及装置,通过信号量实现用户态虚拟机任务间的同步与互斥,所述方法包括:在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;当第一任务尝试获取第一信号量时,递减第一信号量的信号量计数;且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中;当第一任务释放所获取的第一信号量时,递增第一信号量的信号量计数。本发明的技术方案还通过互斥锁、条件变量、任务栅栏和读写锁实现用户态虚拟机任务间的同步与互斥。本发明的技术方案更加简洁、高效,高操作系统的性能、可维护性。
第一方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法,其通过信号量实现用户态虚拟机任务间的同步与互斥,包括:在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;当第一任务尝试获取第一信号量时,递减第一信号量的所述信号量计数;且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中,第一信号量是第一任务尝试获取的信号量,第一任务为用户态虚拟机的任一任务;当第一任务释放所获取的第一信号量时,递增第一信号量的所述信号量计数。
由上,根据一个信号量的信号量计数的绝对值不需要轮询信号量任务等待队列上的任务就获取有多少任务在等待此信号量,方案简洁高效,增加了操作系统的可维护性,减少操作系统的复杂性。
在第一方面一种可能的实施方式中,还包括:在一个任务的控制块中设置该任务的等待信号量指针,该指针指向该任务等待的信号量的控制块;当把第一任务挂在第一信号量的任务等待队列中时,把第一任务的控制块中等待信号量指针指向第一信号量的控制块。
由上,在任务的控制块中通过等待信号量指针,可以快速确定该任务等待的信号量,减少操作系统的复杂性。
在第一方面一种可能的实施方式中,还包括:当第一任务释放所获取的第一信号量时,第一信号量的控制块中任务等待队列中链头任务成功获取第一信号量,且把该链头任务的所述等待信号量指针设置为空;当把第一任务挂在第一信号量的任务等待队列中时,根据第一任务的优先级别确定在第一信号量的任务等待队列中的位置,其优先级越高,该位置越靠近链头。
由上,根据任务的优先级别确定其信号量的任务等待队列中位置,以在唤醒时按照任务的优先级别被唤醒,从而可以处理不同优先级别的任务的差异化处理。
第二方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法,其通过互斥锁实现用户态虚拟机任务间的同步与互斥,包括:在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,一个互斥锁的信号量为第一方面任一实施方式所述信号量;第二任务通过获取第一互斥锁的信号量而获取第一互斥锁,第一互斥锁是第二任务尝试获取的互斥锁,第二任务为用户态虚拟机的任一任务;第二任务在释放第一互斥锁时,释放第一互斥锁的信号量。
由上,通过使用信号量的获取和释放功能来获取和释放互斥锁,方案简洁高效,增加了操作系统的可维护性。
在第二方面的一种可能的实施方式中,还包括:一个互斥锁的控制块还包括该互斥锁的拥有者和该互斥锁的嵌套层数;当第二任务在不拥有第一互斥锁时成功获取第一互斥锁,把第二任务设置为第一互斥锁的拥有者;当第二任务已经拥有第一互斥锁且再次获取第一互斥锁时,则递增第一互斥锁的嵌套层数;当第二任务释放第一互斥锁时,还递减第一互斥锁的嵌套层数,且当第二任务释放第一互斥锁后且不再拥有第一互斥锁时,把第一互斥锁的拥有者设置为-1。
由上,通过在互斥锁的控制块中定义互斥锁拥有者和互斥锁嵌套层数,实现嵌套获取互斥锁,进一步增加了操作系统的可维护性。
第三方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法,通过条件变量实现用户态虚拟机任务间的同步与互斥,包括:在一个条件变量的控制块中设置该条件变量的信号量的控制块,一个条件变量的信号量为第一方面任一实施方式所述信号量;第三任务通过尝试获取第一条件变量的信号量从而等待第一条件变量上,第三任务为用户态虚拟的等待第一条件变量的任一任务。
由上,通过使用信号量的获取功能使用户态虚拟机的任务等待条件变量上,方案简洁高效,增加了操作系统的可维护性。
在第三方面的一种可能的实施方式中,还包括:当第四任务释放第一条件变量的信号量,唤醒第一条件变量的信号量的等待队列中优先级最高的任务或所有任务,第四任务为用户态虚拟机中使第一条件变量满足条件的任一任务。
由上,通过使用信号量的释放功能唤醒等待在条件变量上的任务,进一步提高了系统的可维护性。
第四方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法,通过任务栅栏实现用户态虚拟机任务间的同步与互斥,包括:在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块和栅栏次数,其中,一个任务栅栏的信号量为第一方面任一实施方式所述信号量,一个任务栅栏的栅栏次数为唤醒等待在该任务栅栏上的所有任务时任务栅栏等待接口的调用次数;当第五任务尝试获取第一任务栅栏时且当第一任务栅栏的信号量的信号量计数的绝对值加1等于第一任务栅栏的次数时,唤醒等待在第一任务栅栏上的所有任务,第五任务为用户态虚拟机中尝试获取第一任务栅栏的任一任务;当第五任务尝试获取第一任务栅栏时且当第一任务栅栏的信号量的信号量计数的绝对值加1不等于第一任务栅栏的次数时,获取第一任务栅栏的信号量,使第五任务等待在第一任务栅栏上。
由上,在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块,通过获取任务栅栏的信号量等待在任务栅栏上,通过释放任务栅栏的信号量而释放等待在任务栅栏上所有任务,方案简洁高效,增加了操作系统的可维护性。
第五方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥方法,通过读写锁实现用户态虚拟机任务间的同步与互斥,包括:在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,其中,该读写锁的互斥锁为第二方面任一实施方式所述互斥锁,控制互斥访问所述读写状态,该读写锁的条件变量为第三方面任一实施方式所述条件变量;在第六任务尝试获取第一读写锁的读锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,第六任务获取第一读写锁的读锁功能,否则第六任务等待在所述条件变量上,第六任务是用户态虚拟机的当前运行任务;在第六任务尝试获取第一读写锁的写锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。
由上,使用互斥锁的获取和释放功能获取第一读写锁的读写状态,根据该读写状态成功获取第一读写锁或等待在第一读写锁的条件变量上,等待在该条件变量的任务通过该条件变量的广播功能获取第一读写锁,增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,一个读写锁的读写状态包括该读写锁的读者计数、写者等待计数和写标记;其中,一个读写锁的读者计数表示获取该读写锁的读锁功能的任务数目,一个读写锁的写者等待计数表示等待获取该读写锁的写锁功能的任务数目,一个读写锁的写标记为true时,表示有任务已经获取读写锁的写锁功能,当该写标记为false时,表示没有任务已经获取读写锁的写锁功能。
由上,通过读写锁的读者计数、写者等待计数和写标记判别读写锁的具体读写状态,进一步增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,所述第六任务尝试获取第一读写锁的读锁功能,具体包括:当第一读写锁的写者等待计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;当第一读写锁的写者等待计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的读锁功能,并递增第一读写锁的读者计数。
由上,通过读写锁的读者计数支持多任务同时获取读写锁的读锁功能,进一步增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,所述第六任务尝试获取第一读写锁的写锁功能,具体包括:当第一读写锁的读者计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;当第一读写锁的读者计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的写锁功能,设置第一读写锁的写标记为第六任务。
由上,通过读写锁的写者等待计数支持多任务顺序获取读写锁的写锁功能,进一步增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,在第六任务释放第一读写锁时,包括:当第一读写锁的读者计数大于0时,递减第一读写锁的读者计数;以及当第一读写锁的读者计数等于0时,通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有读者任务;当第一读写锁的写者标记为true时,设置第一读写锁的写者标记为false,并通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有写者任务。
由上,通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有读者任务和写者任务,进一步增加了操作系统的可维护性。
第六方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥装置,通过信号量实现用户态虚拟机任务间的同步与互斥,包括:信号量设置模块、信号量获取模块和信号量释放模块;信号量设置模块用于在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;信号量获取模块用于当第一任务尝试获取第一信号量时,递减第一信号量的所述信号量计数,且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中,把第一任务的所述等待信号量指针指向第一信号量,第一信号量是第一任务尝试获取的信号量,第一任务为用户态虚拟机的任一任务;信号量释放模块用于当第一任务释放所获取的第一信号量时,递增第一信号量的所述信号量计数。
由上,根据一个信号量的信号量计数的绝对值不需要轮询信号量任务等待队列上的任务就获取有多少任务在等待此信号量,方案简洁高效,增加了操作系统的可维护性,减少操作系统的复杂性。
在第六方面一种可能的实施方式中,在一个任务的控制块中设置该任务的等待信号量指针,该指针指向该任务等待的信号量的控制块;信号量获取模块还用于当把第一任务挂在第一信号量的任务等待队列中时,把第一任务的控制块中等待信号量指针指向第一信号量的控制块。
由上,在任务的控制块中通过等待信号量指针,可以快速确定该任务等待的信号量,减少操作系统的复杂性。
在第六方面一种可能的实施方式中,信号量释放模块还用于当第一任务释放所获取的第一信号量时,第一信号量的控制块中任务等待队列中链头任务成功获取第一信号量,且把该链头任务的所述等待信号量指针设置为空;信号量获取模块在当把第一任务挂在第一信号量的任务等待队列中时,具体用于根据第一任务的优先级别确定在第一信号量的任务等待队列中的位置,其优先级越高,该位置越靠近链头。
由上,根据任务的优先级别确定其信号量的任务等待队列中位置,以在唤醒时按照任务的优先级别被唤醒,从而可以处理不同优先级别的任务的差异化处理。
第七方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥装置,通过互斥锁实现用户态虚拟机任务间的同步与互斥,包括:互斥锁设置模块、互斥锁获取模块和互斥锁释放模块;互斥锁设置模块用于在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,该信号量为第一方面任一实施方式所述信号量;互斥锁获取模块用于第二任务通过获取第一互斥锁的信号量而获取第一互斥锁,第一互斥锁是第二任务尝试获取的互斥锁,第二任务为用户态虚拟机的任一任务;互斥锁释放模块用于第二任务在释放第一互斥锁时,释放第一互斥锁的信号量。
由上,通过使用信号量的获取和释放功能来获取和释放互斥锁,方案简洁高效,增加了操作系统的可维护性。
在第七方面的一种可能的实施方式中,一个互斥锁的控制块还包括该互斥锁的拥有者和该互斥锁的嵌套层数;互斥锁获取模块还用于当第二任务在不拥有第一互斥锁时成功获取第一互斥锁,把第二任务设置为第一互斥锁的拥有者,以及还用于当第二任务已经拥有第一互斥锁且再次获取第一互斥锁时,则递增第一互斥锁的嵌套层数;互斥锁释放模块还用于当第二任务释放第一互斥锁时,还递减第一互斥锁的嵌套层数,且当第二任务释放第一互斥锁后且不再拥有第一互斥锁时,把第一互斥锁的拥有者设置为-1。
由上,通过在互斥锁的控制块中定义互斥锁拥有者和互斥锁嵌套层数,实现嵌套获取互斥锁,进一步增加了操作系统的可维护性。
第八方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥装置,通过条件变量实现用户态虚拟机任务间的同步与互斥,包括:条件变量设置模块、条件变量等待模块和条件变量满足模块;条件变量设置模块用于在一个条件变量的控制块中设置该条件变量的信号量的控制块,该信号量为第一方面任一实施方式所述信号量;条件变量等待模块用于第三任务通过尝试获取第一条件变量的信号量从而等待第一条件变量上,第三任务为用户态虚拟的等待第一条件变量的任一任务;条件变量满足模块用于当第四任务释放第一条件变量的信号量,唤醒第一条件变量的信号量的等待队列中优先级最高的任务或所有任务,第四任务为用户态虚拟机中使第一条件变量满足条件的任一任务。
由上,通过使用信号量的获取功能使用户态虚拟机的任务等待条件变量上,通过使用信号量的释放功能唤醒等待在条件变量上的任务,方案简洁高效,增加了操作系统的可维护性。
第九方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥装置,通过任务栅栏实现用户态虚拟机任务间的同步与互斥,包括:任务栅栏设置模块和任务栅栏获取模块;任务栅栏设置模块用于在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块和栅栏次数,该信号量为第一方面任一实施方式所述信号量,该栅栏次数为唤醒等待在该任务栅栏上的所有任务时任务栅栏等待接口的调用次数;任务栅栏获取模块用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1等于第一任务栅栏的次数时,唤醒等待在第一任务栅栏上的所有任务,第五任务为用户态虚拟机中尝试获取第一任务栅栏的任一任务;任务栅栏获取模块还用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1不等于第一任务栅栏的次数时,获取第一任务栅栏的信号量,使第五任务等待在第一任务栅栏上。
由上,在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块,通过获取任务栅栏的信号量等待在任务栅栏上,通过释放任务栅栏的信号量而释放等待在任务栅栏上所有任务,方案简洁高效,增加了操作系统的可维护性。
第十方面,本发明实施例提供了一种用户态虚拟机任务间的同步与互斥装置,通过读写锁实现用户态虚拟机任务间的同步与互斥,包括:读写锁设置模块、读锁获取模块和写锁获取模块;读写锁设置模块用于在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,其中,该读写锁的互斥锁为第二方面任一实施方式所述互斥锁,控制互斥访问所述读写状态,该读写锁的条件变量为第三方面任一实施方式所述条件变量;读锁获取模块用于在第六任务尝试获取第一读写锁的读锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,第六任务获取第一读写锁的读锁功能,否则第六任务等待在所述条件变量上,第六任务是用户态虚拟机的当前运行任务;写锁获取模块用于在第六任务尝试获取第一读写锁的写锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。
由上,使用互斥锁的获取和释放功能获取第一读写锁的读写状态,根据该读写状态成功获取第一读写锁或等待在第一读写锁的条件变量上,等待在该条件变量的任务通过该条件变量的广播功能获取第一读写锁,增加了操作系统的可维护性。
在第十方面的一种可能的实施方式中,一个读写锁的读写状态包括该读写锁的读者计数、写者等待计数和写标记;其中,一个读写锁的读者计数表示获取该读写锁的读锁功能的任务数目,一个读写锁的写者等待计数表示等待获取该读写锁的写锁功能的任务数目,一个读写锁的写标记为true时,表示有任务已经获取读写锁的写锁功能,当该写标记为false时,表示没有任务已经获取读写锁的写锁功能。
由上,通过读写锁的读者计数、写者等待计数和写标记判别读写锁的具体读写状态,进一步增加了操作系统的可维护性。
在第十方面的一种可能的实施方式中,读锁获取模块具体用于,包括:当第一读写锁的写者等待计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;当第一读写锁的写者等待计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的读锁功能,并递增第一读写锁的读者计数。
由上,通过读写锁的读者计数支持多任务同时获取读写锁的读锁功能,进一步增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,写锁获取模块具体用于,包括:当第一读写锁的读者计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;当第一读写锁的读者计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的写锁功能,设置第一读写锁的写标记为第六任务。
由上,通过读写锁的写者等待计数支持多任务顺序获取读写锁的写锁功能,进一步增加了操作系统的可维护性。
在第五方面的一种可能的实施方式中,还包括读写锁释放模块,用于,包括:当第一读写锁的读者计数大于0时,递减第一读写锁的读者计数;以及当第一读写锁的读者计数等于0时,通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有读者任务;当第一读写锁的写者标记为true时,设置第一读写锁的写者标记为false,并通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有写者任务。
由上,通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有读者任务和写者任务,进一步增加了操作系统的可维护性。
第十一方面,本发明实施例提供了一种操作系统,执行第一方面任一实施方式所述方法或第二方面任一实施方式所述方法或第三方面任一实施方式所述方法或第四方面任一实施方式所述方法或第五方面任一实施方式所述方法。
第十二方面,本发明实施例提供了一种计算设备,包括,
总线;
通信接口,其与所述总线连接;
至少一个处理器,其与所述总线连接;以及
至少一个存储器,其与所述总线连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行本发明第一方面任一实施方式所述方法或第二方面任一实施方式所述方法或第三方面任一实施方式所述方法或第四方面任一实施方式所述方法或第五方面任一实施方式所述方法。
第十三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行第一方面任一实施方式所述方法或第二方面任一实施方式所述方法或第三方面任一实施方式所述方法或第四方面任一实施方式所述方法或第五方面任一实施方式所述方法。
附图说明
图1为本发明的各实施例应用场景的结构示意图;
图2A为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例一的信号量获取方法的流程示意图;
图2B为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例一的信号量释放方法的流程示意图;
图3A为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例二的互斥锁获取方法的流程示意图;
图3B为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例二的互斥锁释放方法的流程示意图;
图4A为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例三的条件变量等待方法的流程示意图;
图4B为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例三的条件变量满足方法的流程示意图;
图4C为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例三的条件变量广播方法的流程示意图;
图5为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例四的任务栅栏获取方法的流程示意图;
图6A为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁初始化方法的流程示意图;
图6B为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁读锁获取方法的流程示意图;
图6C为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁写锁获取方法的流程示意图;
图6D为本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁释放方法的流程示意图;
图7为本发明的一种用户态虚拟机任务间的同步与互斥装置实施例一的结构示意图;
图8为本发明的一种用户态虚拟机任务间的同步与互斥装置实施例二的结构示意图;
图9为本发明的一种用户态虚拟机任务间的同步与互斥装置实施例三的结构示意图;
图10为本发明的一种用户态虚拟机任务间的同步与互斥装置实施例四的结构示意图;
图11为本发明的一种用户态虚拟机任务间的同步与互斥装置实施例五的结构示意图;
图12为本发明各实施例的一种计算设备的结构示意图。
具体实施方式
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三等”或模块A、模块B、模块C等,仅用于区别类似的对象,或用于区别不同的实施例,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
在以下的描述中,所涉及的表示步骤的标号,如S110、S120……等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
本发明实施例首先提供了一种用户态虚拟机任务间的同步与互斥的方法,通过信号量实现用户态虚拟机任务间的同步与互斥,所述方法包括:在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;当第一任务尝试获取第一信号量时,递减第一信号量的信号量计数;且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中;当第一任务释放所获取的第一信号量时,递增第一信号量的信号量计数。本发明的实施例还通过互斥锁、条件变量、任务栅栏和读写锁实现用户态虚拟机任务间的同步与互斥方法,还相应地提供了上述各种的方法对应的装置。本发明的技术方案更加简洁、高效,高操作系统的性能、可维护性。
下面首先介绍本发明各实施例的应用场景的结构,本场景为一个包括一种虚拟机系统,其包括用户态和核心态。
其中,用户态包括多个用户态虚拟机,每个用户态虚拟机运行多个虚拟核上并调度多个任务。
示例地,图1示出了用户态虚拟机1、用户态虚拟机2和用户态虚拟机3,以用户态虚拟机1为示例说明每个用户态虚拟机,用户态虚拟机1运行在虚拟核11、虚拟核12和虚拟核13上,当任务101、任务102或任务103通过多虚拟核任务调度单元进行任务之间的互斥与同步。
其中,实际系统可以需要配置任意数目的用户态虚拟机,每个用户态虚拟机根据实际需求运行任意数目的虚拟核上,每个用户态虚拟机根据实际需求管理任意数目的任务。
其中,核心态包括多虚拟机多核调度单元和各物理核,各个物理核通过多虚拟机多核调度单元映射成各用户态虚拟机的虚拟核。
下面根据图2A至图6D介绍本发明的一种用户态虚拟机任务间的同步与互斥的各方法实施例。
在本发明的各方法实施例中使用了内核锁和调度锁,为便于理解本发明的各方法实施例,先介绍内核锁和调度锁。
内核锁用于多虚拟核对内核资源的同步与互斥访问,用户态虚拟机的任务基于自旋锁的机制获取和释放内核锁,且支持嵌套获取和释放。当前虚拟核成功获取内核锁后,当前虚拟核是禁止全局中断的,从而保证当前虚拟核和其他虚拟核对内核资源的互斥访问。当前虚拟核完全成功释放内核锁后,会使能当前虚拟核的全局中断,从而保证当前虚拟核继续响应中断和其他虚拟核对内核资源的继续访问。
调度锁用于禁止任务的调度,防止任务被抢占,用户态虚拟机以任务为单位对调度锁上锁和解锁,且支持嵌套锁和解锁。当前运行任务执行锁调度操作后,当前虚拟核的全局中断是使能的。当前运行任务处于就绪态时,是不允许被抢占的,从而保证当前运行任务相关操作的原子性。只有当前运行任务执行完全解锁调度时,当前运行任务才能够被抢占。
下面先介绍本发明的一种用户态虚拟机任务间的同步与互斥的各方法实施例,该各实施例在图1的各用户态虚拟机中运行,通过信号量实现用户态虚拟机的任务对资源的同步与互斥访问。
在一种用户态虚拟机任务间的同步与互斥的方法实施例一中,在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列,信号量计数可以为负值;当一个任务尝试获取一个信号量时,对该信号量的信号量计数递减,且当该信号量计数大于等于0,该任务获取该信号量,否则把该任务根据其优先级挂在该信号量的任务等待队列中;当第一任务释放所获取的第一信号量时,递增第一信号量的信号量计数。本实施例根据一个信号量的信号量计数的绝对值不需要轮询信号量任务等待队列上的任务就获取有多少任务在等待此信号量,方案简洁高效,增加了操作系统的可维护性,减少操作系统的复杂性。
下面根据图2A和图2B介绍一种用户态虚拟机任务间的同步与互斥的方法实施例一的具体实施方式,其包括信号量初始化方法、信号量获取方法和信号量释放方法。
在一个任务的控制块中设置信号量等待指针,指向其等待获取的信号量控制块。
为了便于描述,本实施例中以第一任务获取信号量A为例,第一任务的控制块为rTCB,第一任务的控制块中等待信号量指针为rTcb.waitSem,信号量A的控制块为A.sem,信号量A的信号量计数为A.sem.count,信号量A的任务等待队列A.sem.taskWaitQueue。
在信号量初始化方法中,第一任务调用信号量初始化接口sem_init()初始化信号量A,sem_init()依次执行如下操作。
1)利用sem_init()传入的初始计数初始化信号量A的控制块中的信号量计数A.sem.count,此初始计数必需是大于等于0的。
2)初始化信号量A的控制块中的任务等待队列A.sem.taskWaitQueue,便于管理等待在此信号量上的任务。
图2A示出了一种用户态虚拟机任务间的同步与互斥的方法实施例一的信号量获取方法流程,在信号量获取方法中,第一任务通过信号量获取接口sem_obtain()获取信号量A,其包括步骤S1110至S1170。
S1110:第一任务获取内核锁。
其中,一个信号量的控制块为内核资源,第一任务获取内核锁后才能为了访问信号量A的控制块。
S1120:递减信号量A的控制块中的信号量计数。
其中,第一任务尝试获取信号量A时,不论A的控制块中的信号量计数A.sem.count是什么值,都先对其进行递减。
其中,当信号量A已经被其他任务获取或有其他任务在等待获取信号A时,第一任务尝试获取信号量A,则信号A的信号量计数将递减为负值,其绝对值表示有多个任务在等待获取信号量A。
S1130:判断信号量A的控制块中的信号量计数是否大于等于0。
其中,如果A.sem.count大于等于0,则第一任务成功获取信号量A,执行步骤S1140,否则执行步骤S1150至S1160,第一任务未成功获取信号量A,继续等待在信号量A上。
S1140:第一任务成功获取信号量A,设置第一任务的控制块中等待信号量指针为空,即rTcb.waitSem为NULL。
其中,第一任务获取信号量A时,把第一任务的控制块中等待信号量指针rTcb.waitSem为NULL,以便于第一任务再获取其他信号量。
S1150:设置第一任务的控制块中等待信号量指针指向信号量A的控制块,即设置rTcb.waitSem指向A.sem。
S1160:将第一任务设置为信号量等待态,并且根据第一任务的优先级将其添加到信号量A的任务等待队列中,即根据第一任务的优先级把rTcb添加到.sem.taskWaitQueue上。
其中,第一任务的优先级越高,添加到A.sem.taskWaitQueue的位置越靠前链头。
其中,此步骤触发会任务的重调度,第一任务会被切走,只有信号量A被释放时唤醒第一任务,第一任务才能被切回来继续运行,第一任务切回来时表示是已成功获取信号量的。
S1170:第一任务释放内核锁。
其中,第一任务释放内核锁,使其他任务可以获取内核锁。
图2B示出了一种用户态虚拟机任务间的同步与互斥的方法实施例一的信号量释放方法的流程,第一任务通过信号量释放接口sem_release()释放所获取的信号量A,其包括步骤S1210至S1250。
S1210:第一任务获取内核锁。
其中,一个信号量的控制块为内核资源,第一任务获取内核锁后才能为了访问信号量A的控制块。
S1220:递增信号量A控制块中信号量计数,即递增A.sem.count。
S1230:判断如果信号量A控制块中信号量计数是否小于等于0。
其中,如果A.sem.count小于等于0,表示有A.sem.count绝对值的任务数等待在信号量A上,则执行步骤S1240,否则释放结束。
S1240:获取信号量A的任务等待队列链头上的任务,并设置此任务等待信号量指针为空。
其中,设wSTcb.waitSem链头上等待信号量的任务为wSTcb,本步骤设置wSTcb.waitSem为NULL,清除此任务的信号量等待状态。
其中,如果此步骤使任务wSTcb变为了运行任务,则会进行任务的重调度,任务wSTcb会返回到执行信号量获取接口sem_obtain()时切走的点继续执行,此时任务wSTcb已成功获取信号量A。
S1250:第一任务释放内核锁。
其中,第一任务释放内核锁,使其他任务可以获取内核锁。
综上,在一种用户态虚拟机任务间的同步与互斥的方法实施例一中,在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列,信号量计数可以为负值,不需要轮询信号量任务等待队列上的任务,在获取信号量时,根据信号量计数的绝对值就获取有多少任务在等待此信号量,在释放信号量时,根据信号量计数的绝对值就知道有任务在等待此信号量,提升了操作系统的性能。方案简洁高效,并增加了操作系统的可维护性,减少操作系统的复杂性。
下面介绍本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例二,该实施例在图1的各用户态虚拟机中运行,通过互斥锁实现用户态虚拟机的任务对资源的同步与互斥访问。
在一种用户态虚拟机任务间的同步与互斥的方法实施例二中,在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,该信号量为一种用户态虚拟机任务间的同步与互斥的方法实施例一中所述信号量;用户态虚拟机的任务通过获取该互斥锁的信号量而获取该互斥锁;用户态虚拟机的任务在释放该互斥锁时,释放其信号量。本实施例的互斥锁通过使用信号量的获取和释放功能来获取和释放互斥锁,方案简洁高效,增加了操作系统的可维护性。
下面根据图3A和图3B介绍一种用户态虚拟机任务间的同步与互斥的方法实施例二的具体实施方式,其包括互斥锁初始化方法、互斥锁获取方法和互斥锁释放方法。
在本实施例的具体实施方式中,在互斥锁的控制块中增加互斥锁拥有者和互斥锁嵌套层数。
为了便于描述,本实施例中以第二任务获取互斥锁B为例,互斥锁B的控制块为B.mutex,其包括互斥锁B的控制块中的信号量成员B.mutex.sem、互斥锁B的互斥锁拥有者B.mutex.owner和互斥锁B的互斥锁嵌套层数B.mutex.nestCount。
在互斥锁初始化方法中,第二任务调用互斥锁初始化接口mutex_init()进行互斥锁B的初始化,mutex_init()依次执行如下操作:
1)执行信号量初始化接口sem_init()初始化互斥锁控制块中的信号量B.mutex.sem。
其中,互斥锁B的信号量的信号量计数B.mutex.sem.count初始化为1,以实现任务对资源的互斥访问。
2)初始化互斥锁B的互斥锁拥有者B.mutex.owner为-1,表示无任务用于此互斥锁。
3)初始化互斥锁B的互斥锁嵌套层数B.mutex.nestCount为0,表示无任务获取过此互斥锁。
图3A示出了一种用户态虚拟机任务间的同步与互斥的方法实施例二的互斥锁获取方法流程,第二任务通过互斥锁获取接口mutex_obtain()来获取互斥锁B,其包括步骤S2110至S2160。
S2110:第二任务进行锁调度。
其中,本步骤实现对第二任务禁止调度。
S2120:获取第二任务的ID,记录到局部变量rtId。
S2130:判断rtId的值与互斥锁B的拥有者是否相等,即判断rtId的值与B.mutex.owner是否相等。
其中,如果rtId的值与B.mutex.owner相等,表示第二任务获取了互斥锁B,执行步骤S2140,则进行嵌套获取互斥锁B;如果rtId的值与B.mutex.owner不相等,表示第二任务没有获取互斥锁B,执行步骤S2150,尝试获取互斥锁B。
S2140:递增互斥锁B的嵌套层数,即递增B.mutex.nestCount。
其中,本步骤第二任务在已经拥有互斥锁B的基础上又嵌套获取一次。
S2150:执行信号量获取接口sem_obtain()获取互斥锁B的信号量B.mutex.sem,设置互斥锁B的拥有者B.mutex.owner为rtId,设置互斥锁B的嵌套层数B.mutex.nestCount为1。
S2160:第二任务进行解锁调度,即允许对第二任务进行调度。
图3B示出了一种用户态虚拟机任务间的同步与互斥的方法实施例二的互斥锁释放方法流程,第二任务通过互斥锁释放接口mutex_release()释放互斥锁B,其包括步骤S2210至S2270。
S2210:第二任务进行锁调度,即对第二任务禁止调度。
S2220:获取第二任务的ID,记录到局部变量rtId。
S2230:判断rtId的值与互斥锁B的拥有者B.mutex.owner是否相等。
其中,如果rtId的值与互斥锁B的拥有者B.mutex.owner相等,表示第二任务获取了互斥锁B,执行步骤S2240;如果rtId的值与互斥锁B的拥有者B.mutex.owner不相等,表示第二任务没有获取互斥锁B,执行步骤S2270。
S2240:判断互斥锁B的嵌套层数B.mutex.nestCount是否大于1。
其中,如果B.mutex.nestCount否大于1,则执行步骤S2250,减少互斥锁B的嵌套层数一次;否则执行步骤SS2260,完全释放互斥锁B。
S2250:递减互斥锁B的嵌套层数B.mutex.nestCount。
S2260:设置互斥锁B的拥有者B.mutex.owner为-1,设置互斥锁的嵌套层数B.mutex.nestCount为0,执行信号量释放接口sem_release()释放信号量B.mutex.sem。
S2270:第二任务进行解锁调度,即允许对第二任务进行调度。
综上,在一种用户态虚拟机任务间的同步与互斥的方法实施例二中,在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,且增加互斥锁拥有者和互斥锁嵌套层数,通过使用信号量的获取和释放功能来获取和释放互斥锁,方案简洁高效,增加了操作系统的可维护性。
下面介绍本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例三,该实施例在图1的各用户态虚拟机中运行,通过条件变量实现用户态虚拟机的任务对资源的同步与互斥访问。
在一种用户态虚拟机任务间的同步与互斥的方法实施例三中,条件变量控制块中增加该条件变量的信号量的控制块,该信号量为该信号量为一种用户态虚拟机任务间的同步与互斥的方法实施例一中所述信号量;用户态虚拟机的任务通过尝试获取条件变量的信号量从而等待该条件变量上。本实施例通过使用信号量的获取和释放功能使用户态虚拟机的任务等待条件变量上,方案简洁高效,增加了操作系统的可维护性。
下面根据图4A至图4C介绍一种用户态虚拟机任务间的同步与互斥的方法实施例三的具体实施方式,其包括条件变量初始化方法、条件变量等待方法、条件变量满足方法和条件变量广播方法。
为了便于描述,以第三任务等待条件变量C为例,条件变量C的控制块为C.cond,条件变量C的信号量控制块为C.cond.sem。条件变量一般与互斥锁配合使用,继续以互斥锁B为例,其与条件变量C配合使用。
在条件变量初始化方法中,第三任务通过条件变量初始化接口cond_init()进行条件变量C的初始化。
其中,cond_init()执行信号量初始化接口sem_init(),初始化条件变量C的控制块中的信号量C.cond.sem,把条件变量C的控制块中的信号量初始计数C.cond.sem.count为0,以实现任务等待在条件变量上。
图4A示出了一种用户态虚拟机任务间的同步与互斥的方法实施例三的在条件变量等待方法流程,第三任务通过条件变量等待接口cond_wait()等待在条件变量C上,其包括步骤S3110至S3190。
S3110:第三任务进行锁调度,即对第三任务禁止调度。
S3120:设置条件变量C相应的互斥锁B的拥有者B.mutex.owner为-1,表示无任务拥有此互斥锁。
其中,本步骤和步骤S3130和S3140一起使第三任务临时释放互斥锁B,以使其他任务可以互斥的访问此互斥锁控制的资源。
S3130:获取互斥锁B的嵌套层数B.mutex.nestCount,记录到局部变量nestCount,以便于恢复第三任务对互斥锁B的嵌套层数。
S3140:执行信号量释放接口sem_release()释放互斥锁B的信号量B.mutex.sem,使其他任务可以互斥的访问此互斥锁控制的资源。
S3150:执行信号量获取接口sem_obtain()获取条件变量C的信号量C.cond.sem,使第三任务等待在此条件变量上。
其中,本步骤后第三任务等待条件变量C,直到条件变量C的条件被满足,第三任务继续执行以下步骤。
S3170:第三任务进行解锁调度,即允许对第三任务进行调度。
S3180:执行信号量获取接口sem_obtain()获取条件变量C互斥锁的信号量,使第三任务可以互斥地访问此互斥锁控制的资源。
S3190:设置条件变量C互斥锁的拥有者C.cond.mutex.owner为当第三任务的ID,表示第三任务再次获取了互斥锁,并恢复设置条件变量C互斥锁的嵌套层数C.cond.mutex.nestCount为之前保存的局部变量nestCount,从而恢复当前运行任务获取的互斥锁嵌套层数。
在条件变量满足方法中,通过条件变量满足接口cond_signal()执行条件变量C满足后唤醒等待在条件变量C的信号量上的优先级最高的任务,即条件变量C的信号量的任务等待队列链头任务。
为了便于描述,以第四任务满足条件变量C的条件为例。
图4B示出了一种用户态虚拟机任务间的同步与互斥的方法实施例三的条件变量满足方法流程,第四任务通过条件变量满足接口cond_signal()执行条件变量满足方法,其包括步骤S3210至S3240。
S3210:第四任务获取内核锁,以互斥访问条件变量C的信号量的控制块。
S3220:判断条件变量C的信号量计数C.cond.sem.count是否小于0。
其中,如果条件变量C的信号量计数C.cond.sem.count小于0,表示有任务等待在此条件变量上,执行步骤S3230。
S3230:执行信号量释放接口sem_release()释放条件变量C的信号量C.cond.sem,以唤醒等待在此条件变量上的优先级最高的任务。
S3240:第四任务释放内核锁,以使其他任务可以互斥访问条件变量C的信号量的控制块。
在条件变量广播方法中,通过条件变量广播接口cond_broadcast()执行条件变量C满足后广播唤醒等待在条件变量C的所有任务。
为了便于描述,继续以第四任务满足条件变量C的条件为例。
图4C示出了一种用户态虚拟机任务间的同步与互斥的方法实施例三的条件变量广播方法的流程,第四任务通过条件变量满足接口cond_broadcast()执行条件变量广播方法,其包括步骤S3510至S3560。
S3510:第四任务进行锁调度,即对第四任务禁止调度。
S3520:第四任务获取内核锁,以互斥访问条件变量C的信号量的控制块。
S3530:获取条件变量C的信号量计数C.cond.sem.count,记录到局部变量count。
S3540:判断count是否小于0。
其中,如果count小于0,表示有任务等待在条件变量上,则进入循环以唤醒等待在条件变量上的所有任务,依次执行步骤S3541和S3542。如果count大于0,表示没有任务等待在此条件变量上,则执行S3550。
S3541:执行信号量释放接口sem_release()释放条件变量C的信号量C.cond.sem,以唤醒等待在条件变量C的信号量C.cond.sem的任务等待队列链头上的任务。
S3542:递增局部变量count。
其中,本步骤执行后则返回步骤S3540,继续进行判断和唤醒一个任务。
S3550:第四任务释放内核锁,以使其他任务可以互斥访问条件变量C的信号量的控制块。
S3560:第四任务进行解锁调度,即允许对第四任务进行调度。
综上,在一种用户态虚拟机任务间的同步与互斥的方法实施例三中,条件变量控制块中增加该条件变量的信号量的控制块,条件变量功能可以使用信号量的获取和释放功能,方案简洁高效,增加了操作系统的可维护性。
下面根据图5介绍本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例四,该实施例在图1的各用户态虚拟机中运行,通过任务栅栏实现用户态虚拟机任务对资源的互斥访问。
在一种用户态虚拟机任务间的同步与互斥的方法实施例四中,在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块,该信号量为一种用户态虚拟机任务间的同步与互斥的方法实施例一中所述信号量,通过获取任务栅栏的信号量等待在任务栅栏上,通过释放任务栅栏的信号量而释放等待在任务栅栏上所有任务,从而增加了操作系统的可维护性。
在一种用户态虚拟机任务间的同步与互斥的方法实施例四中包括任务栅栏初始化方法和任务栅栏获取方法。
为了便于描述,以第五任务获取与释放任务栅栏D为例,任务栅栏D的控制块为D.barrier。
在任务栅栏初始化方法中,第五任务通过任务栅栏初始化接口barrier_init()进行任务栅栏初始化,依次执行如下操作:
1)执行信号量初始化接口sem_init()初始化任务栅栏控制块中的信号量D.barrier.sem,任务栅栏D的控制块中的信号量初始计数barrier.sem.count为0,以实现任务等待在任务栅栏上。
2)将任务栅栏D的控制块中的任务栅栏次数成员barrier.count初始化为barrier_init()传入的任务栅栏次数。
其中,当任务栅栏次数大于0,其表示唤醒等待在任务栅栏上的所有任务时任务栅栏等待接口的调用次数。
图5示出了一种用户态虚拟机任务间的同步与互斥的方法实施例四的任务栅栏获取方法流程,其中第五任务通过任务栅栏获取接口barrier_wait()获取任务栅栏D,包括步骤S4210至S4280。
S4210:第五任务进行锁调度,即对第五任务禁止调度。
S4220:第五任务获取内核锁,以互斥访问任务栅栏D控制块中的信号量的控制块。
S4230:获取任务栅栏D的信号量的信号量计数D.barrier.sem.count,记录到局部变量semCount。
S4240:判断semCount的绝对值加1是否等于任务栅栏D的任务栅栏次数D.barrier.count,即判断挂在任务栅栏D的信号量的等待队列中的任务数与任务栅栏D的任务栅栏次数是否相等。
其中,当semCount的绝对值加1等于任务栅栏D的任务栅栏次数D.barrier.count时,执行步骤S4250,唤醒等待在任务栅栏D上的所有任务,否则执行步骤S4260,获取任务栅栏D的信号量,等待在此任务栅栏D上。
S4250:通过循环方式唤醒等待在任务栅栏D上的所有任务。
其中,每一轮循环唤醒一个任务,在每个循环的过程中,调用任务栅栏等待接口依次执行如下操作:
S4251:执行信号量释放接口sem_release()释放任务栅栏D的信号量D.barrier.sem,以同步等待在任务栅栏D上的任务。
其中,每执行信号量释放接口sem_release()一次,唤醒等待在任务栅栏D上的一个任务。
S4252:递增局部变量semCount。
S4253:如果semCount大于等于0,表示没有任务等待在此任务栅栏上,跳出循环,继续往下执行步骤S4270。
S4260:执行信号量获取接口sem_obtain()获取任务栅栏D的信号量D.barrier.sem,以使第五任务可以等待在此任务栅栏上。
S4270:第五任务释放内核锁,以使其他任务可以互斥访问任务栅栏D控制块中的信号量的控制块。
S4280:第五任务进行解锁调度,即允许对第五任务进行调度。
综上,在一种用户态虚拟机任务间的同步与互斥的方法实施例四中,在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块,通过获取任务栅栏的信号量等待在任务栅栏上,通过释放任务栅栏的信号量而释放等待在任务栅栏上所有任务,方案简洁高效,增加了操作系统的可维护性。
下面介绍本发明的一种用户态虚拟机任务间的同步与互斥的方法实施例五,该实施例在图1的各用户态虚拟机中运行,通过读写锁实现用户态虚拟机任务对资源的互斥访问。读写锁的功能扩展了互斥锁的功能。读写锁允许有多个读者任务获取读写锁,只允许一个写者任务获取读写锁,读者任务和写者任务不能同时获取读写锁。
在一种用户态虚拟机任务间的同步与互斥的方法实施例五中,在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,该互斥锁控制互斥访问该读写锁的读写状态;在一个任务尝试获取第一读写锁的读锁功能时,当根据第一读写锁的读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,获取第一读写锁的读锁功能,否则等待在所述条件变量上;在一个任务尝试获取第一读写锁的写锁功能时,当根据第一读写锁的读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。本实施例使用互斥锁的获取和释放功能获取第一读写锁的读写状态,根据该读写状态成功获取第一读写锁或等待在第一读写锁的条件变量上,等待在该条件变量的任务通过该条件变量的广播功能获取第一读写锁,本实施例增加了操作系统的可维护性。
下面根据图6A至图6D介绍一种用户态虚拟机任务间的同步与互斥的方法实施例五的具体实施方式,其包括读写锁初始化方法、读写锁读锁获取方法、读写锁写锁获取方法和读写锁释放方法。
在本实施例中,一个读写锁的读写状态包括该读写锁的读者计数、写者等待计数和写标记;其中,一个读写锁的读者计数表示获取该读写锁的读锁功能的任务数目,一个读写锁的写者等待计数表示等待获取该读写锁的写锁功能的任务数目,一个读写锁的写标记为true时,表示有任务已经获取读写锁的写锁功能,当该写标记为false时,表示没有任务已经获取读写锁的写锁功能。
为了便于描述,以第六任务获取读写锁E为例,读写锁E的控制块为E.rwlock。
图6A示出了一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁初始化方法流程,其中第六任务通过读写锁初始化接口rwlock_init()初始化读写锁E,包括步骤S5110至S5130。
S5110:执行互斥锁初始化接口mutex_init()初始化读写锁E的控制块中的互斥锁E.rwlock.mutex。
其中,读写锁的互斥锁使任务可以互斥的访问读写锁的读写状态,其包括:读者计数readersNum、写者等待计数writersNum、写标记writeInProgress。
S5120:执行条件变量初始化接口cond_init()初始化读写锁E的控制块中的条件变量E.rwlock.cond。
其中,读写锁的控制块中的条件变量用于同步读写锁的读者任务和写者任务。
S5130:初始化读写锁控制块E的读写状态。
其中,读写锁控制块E的读者计数成员E.rwlock.readersNum为0,表示无读者任务获取了读写锁;读写锁控制块E的写者等待计数成员E.rwlock.writersNum为0,表示无写者任务等待在读写锁上;读写锁控制块E的写标记E.rwlock.writeInProgress为false,表示无写者任务获取了读写锁。
图6B示出了一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁读锁获取方法流程,其中第六任务通过读写锁读锁获取接口rwlock_rlock()获取读写锁E的读锁,包括步骤S5210至S5240。
S5210:执行互斥锁获取接口mutex_obtain()获取读写锁E的互斥锁E.rwlock.mutex。
其中,第六任务获取读写锁E的互斥锁E.rwlock.mutex后,则可以访问读写锁E的读写状态。
S5220:通过循环方式获取读写锁E的读锁功能。
其中,在每一轮循环执行步骤S5221至S5223,尝试获取一次读写锁E的读锁功能。
S5221:访问读写锁E的读写状态。包括:读者计数readersNum、写者等待计数writersNum、写标记writeInProgress。
S5222:判断读写锁E的写者等待计数E.rwlock.writersNum是否大于0或读写锁E的写者标记E.rwlock.writeInProgress是否为true。
其中,读写锁E的写者等待计数E.rwlock.writersNum大于0表示有写者任务等待在读写锁E上,读写锁E的写者标记E.rwlock.writeInProgress为true有写者任务获取了读写锁E。
其中,当读写锁E的写者等待计数E.rwlock.writersNum大于0或者读写锁E的写者标记E.rwlock.writeInProgress是为true,执行步骤S5333使第六任务等待在读写锁E条件变量rwlock.cond上,反之,当读写锁E的写者等待计数E.rwlock.writersNum不大于0且读写锁E的写者标记E.rwlock.writeInProgress是为false,则第六任务成功获取读写锁E的读锁功能,跳出循环,继续往下执行S5230。
S5223:执行条件变量等待接口cond_wait()使第六任务等待在读写锁E条件变量rwlock.cond上。
其中,等待在读写锁E条件变量rwlock.cond上的任务在该条件变量满足时通过条件变量的广播功能被唤醒。
S5230:递增读写锁E的读写锁读者计数E.rwlock.readersNum。
S5240:执行互斥锁释放接口mutex_release()释放读写锁E的互斥锁E.rwlock.mutex。
图6C示出了一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁写锁获取方法流程,其中第六任务通过读写锁写锁获取接口rwlock_wlock()获取读写锁E的读锁,包括步骤S5310至S5360。
S5310:执行互斥锁获取接口mutex_obtain()获取读写锁E的互斥锁E.rwlock.mutex。
S5320:递增读写锁E的写者等待计数E.rwlock.writersNum。
S5330:通过循环方式获取读锁E的写锁功能。
其中,在通过循环方式获取读锁E的写锁的过程中,每一轮循环包括步骤S5331和S5333。
S5331:判断读写锁E的写者标记E.rwlock.writeInProgress是否为true或者读写锁E的读者计数E.rwlock.readersNum是否大于0,即表示是否有写者任务或者读者任务获取了读写锁E。
其中,当读写锁E的写者标记E.rwlock.writeInProgress为true或者读写锁E的读者计数E.rwlock.readersNum大于0,执行步骤S5333使第六任务等待在读写锁E的条件变量E.rwlock.cond上,反之,第六任务成功获取读写锁E的写锁功能,跳出循环,执行步骤S5340。
S5333:执行条件变量等待接口cond_wait()使当前运行任务等待在读写锁E的条件变量E.rwlock.cond上。
S5340:递减读写锁E的写者等待计数E.rwlock.writersNum。
S5350:设置读写锁E的写者标记E.rwlock.writeInProgress为true。
S5360:执行互斥锁释放接口mutex_release()释放读写锁E的互斥锁E.rwlock.mutex。
图6D示出了一种用户态虚拟机任务间的同步与互斥的方法实施例五的读写锁释放方法流程,其中第六任务通过读写锁释放接口rwlock_unlock()释放读写锁E,包括步骤S5410至S5480。
S5410:执行互斥锁获取接口mutex_obtain()获取读写锁E的互斥锁E.rwlock.mutex。
S5420:判断读写锁E的读者计数E.rwlock.readersNum是否大于0。
其中,当读写锁E的读者计数E.rwlock.readersNum大于0时,则为读者任务释放读写锁E,执行步骤S5430,否则,则判断是否是写者任务释放读写锁E,执行步骤S5460。
S5430:递减读写锁E的读者计数E.rwlock.readersNum。
其中,本步骤第六任务释放读写锁E一次。
S5440:判断读写锁E的读者计数E.rwlock.readersNum是等于0。
其中,当读写锁E的读者计数E.rwlock.readersNum等于0时,第六任务不再持有读写锁E,执行步骤S5450,唤醒等待在读写锁E的条件变量E.rwlock.cond上的所有任务;当读写锁E的读者计数E.rwlock.readersNum大于0时,第六任务还持有读写锁E,本次释放读写锁E一次的过程,执行步骤S5480释放读写锁E的互斥锁E.rwlock.mutex。
S5450:执行条件变量广播接口cond_broadcast()唤醒等待在读写锁E的条件变量E.rwlock.cond上的所有读者任务。
其中,本步骤启动时已经没有任务持有读写锁E,所以唤醒等待在读写锁E的条件变量E.rwlock.cond上的所有读者任务。
S5460:判断读写锁E的写者标记E.rwlock.writeInProgress是否为true。
其中,当读写锁E的写者标记E.rwlock.writeInProgress为true时,执行步骤S5470,否则执行步骤S5480释放读写锁E的互斥锁E.rwlock.mutex。
S5470:设置读写锁E的写者标记rwlock.writeInProgress为false,然后执行条件变量广播接口cond_broadcast()唤醒等待在读写锁E的条件变量上的所有任务。
S5480:执行互斥锁释放接口mutex_release()释放读写锁E的互斥锁E.rwlock.mutex。
综上,一种用户态虚拟机任务间的同步与互斥的方法实施例五中,在读写锁控制块中包含互斥锁控制块和条件变量控制块,在此基础上增加了读写锁读者计数成员、读写锁写者等待计数成员、写者获取读写锁成员,通过互斥锁的获取和释放功能与条件变量的等待和广播功能来获取读写锁,方案简洁高效,且增加了操作系统的可维护性。
下面基于图7至图11介绍本发明的一种用户态虚拟机任务间的同步与互斥的装置实施例。
图7示出了一种用户态虚拟机任务间的同步与互斥的装置实施例一,其包括:信号量设置模块7010、信号量获取模块7020和信号量释放模块7030。
信号量设置模块7010用于在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例一具体实施方式中的信号初始化方法。
信号量获取模块7020用于当第一任务尝试获取第一信号量时,递减第一信号量的信号量计数,且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中,把第一任务的等待信号量指针指向第一信号量,第一信号量是第一任务尝试获取的信号量,第一任务为用户态虚拟机的任一任务。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例一具体实施方式中的信号量获取方法。
信号量释放模块7030用于信号量释放模块用于当第一任务释放所获取的第一信号量时,递增第一信号量的所述信号量计数。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例一具体实施方式中的信号量释放方法。
图8示出了一种用户态虚拟机任务间的同步与互斥的装置实施例二,其包括:互斥锁设置模块8010、互斥锁获取模块8020和互斥锁释放模块8030。
互斥锁设置模块8010用于在一个互斥锁的控制块中设置该互斥锁的信号量的控制块。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例二具体实施方式中的互斥锁初始化方法。
互斥锁获取模块8020用于第二任务通过获取第一互斥锁的信号量而获取第一互斥锁,第一互斥锁是第二任务尝试获取的互斥锁,第二任务为用户态虚拟机的任一任务。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例二具体实施方式中的互斥锁获取方法。
互斥锁释放模块8030用于第二任务在释放第一互斥锁时,释放第一互斥锁的信号量。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例二具体实施方式中的互斥锁释放方法。
图9示出了一种用户态虚拟机任务间的同步与互斥的装置实施例三,其包括:条件变量设置模块9010、条件变量等待模块9020和条件变量满足模块9030。
条件变量设置模块9010用于在一个条件变量的控制块中设置该条件变量的信号量的控制块。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例三具体实施方式中的条件变量初始化方法。
条件变量等待模块9020用于第三任务通过尝试获取第一条件变量的信号量从而等待第一条件变量上,第三任务为用户态虚拟的等待第一条件变量的任一任务。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例三具体实施方式中的条件变量等待方法。
条件变量满足模块9030用于当第四任务释放第一条件变量的信号量,唤醒第一条件变量的信号量的等待队列中优先级最高的任务或所有任务,第四任务为用户态虚拟机中使第一条件变量满足条件的任一任务。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例三具体实施方式中的条件变量满足方法和条件变量广播方法。
图10示出了一种用户态虚拟机任务间的同步与互斥的装置实施例四,其包括:任务栅栏设置模块10010和任务栅栏获取模块10020。
任务栅栏设置模块10010用于在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块和栅栏次数,其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例四具体实施方式中的任务栅栏的初始化方法。
任务栅栏获取模块10020用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1等于第一任务栅栏的次数时,唤醒等待在第一任务栅栏上的所有任务,第五任务为用户态虚拟机中尝试获取第一任务栅栏的任一任务。
任务栅栏获取模块10020还用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1不等于第一任务栅栏的次数时,获取第一任务栅栏的信号量,使第五任务等待在第一任务栅栏上。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例四具体实施方式中的任务栅栏的获取方法。
图11示出了一种用户态虚拟机任务间的同步与互斥的装置实施例五,其包括:读写锁设置模块11010、读锁获取模块11020、写锁获取模块11030和读写锁释放模块11040。
读写锁设置模块11010用于在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,其中,该读写锁的互斥锁控制互斥访问所述读写状态。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例五具体实施方式中的读写锁的初始化方法。
读锁获取模块11020用于在第六任务尝试获取第一读写锁的读锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,第六任务获取第一读写锁的读锁功能,否则第六任务等待在所述条件变量上,第六任务是用户态虚拟机的当前运行任务。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例五具体实施方式中的读写锁的读锁获取方法。
写锁获取模块11030用于在第六任务尝试获取第一读写锁的写锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例五具体实施方式中的读写锁的写锁获取方法。
读写锁释放模块11040用于第六任务释放第一一读写锁。其具体原理和优点请参照一种用户态虚拟机任务间的同步与互斥的方法实施例五具体实施方式中的读写锁释放方法。
本发明实施例还提供了一种操作系统,其执行本发明的各方法实施例。
本发明实施例还提供了一种计算设备,下面结合图12详细介绍。
该计算设备1200包括,处理器1210、存储器1220、通信接口1230、总线1240。
应理解,该图所示的计算设备1200中的通信接口1230可以用于与其他设备之间进行通信。
其中,该处理器1210可以与存储器1220连接。该存储器1220可以用于存储该程序代码和数据。因此,该存储器1220可以是处理器1210内部的存储单元,也可以是与处理器1210独立的外部存储单元,还可以是包括处理器1210内部的存储单元和与处理器1210独立的外部存储单元的部件。
可选的,计算设备1200还可以包括总线1240。其中,存储器1220、通信接口1230可以通过总线1240与处理器1210连接。总线1240可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(EFStended Industry StandardArchitecture,EISA)总线等。所述总线1240可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。
应理解,在本发明实施例中,该处理器1210可以采用中央处理单元(centralprocessing unit,CPU)。该处理器还可以是其它通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器1210采用一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
该存储器1220可以包括只读存储器和随机存取存储器,并向处理器1210提供指令和数据。处理器1210的一部分还可以包括非易失性随机存取存储器。例如,处理器1210还可以存储设备类型的信息。
在计算设备1200运行时,所述处理器1210执行所述存储器1220中的计算机执行指令执行各方法实施例的操作步骤。
应理解,根据本发明实施例的计算设备1200可以对应于执行根据本发明各实施例的方法中的相应主体,并且计算设备1200中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行各方法实施例的操作步骤。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括,具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,均属于本发明保护范畴。

Claims (20)

1.一种用户态虚拟机任务间的同步与互斥方法,其特征在于,通过信号量实现用户态虚拟机任务间的同步与互斥,包括:
在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;
当第一任务尝试获取第一信号量时,递减第一信号量的所述信号量计数;且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中,第一信号量是第一任务尝试获取的信号量,第一任务为用户态虚拟机的任一任务;
当第一任务释放所获取的第一信号量时,递增第一信号量的所述信号量计数。
2.根据权利要求1所述方法,其特征在于,还包括:
在一个任务的控制块中设置该任务的等待信号量指针,该指针指向该任务等待的信号量的控制块;
当把第一任务挂在第一信号量的任务等待队列中时,把第一任务的控制块中等待信号量指针指向第一信号量的控制块。
3.根据权利要求1所述方法,其特征在于,还包括:
当第一任务释放所获取的第一信号量时,第一信号量的控制块中任务等待队列中链头任务成功获取第一信号量,且把该链头任务的所述等待信号量指针设置为空;
当把第一任务挂在第一信号量的任务等待队列中时,根据第一任务的优先级别确定在第一信号量的任务等待队列中的位置,其优先级越高,越靠近链头。
4.一种用户态虚拟机任务间的同步与互斥方法,其特征在于,通过互斥锁实现用户态虚拟机任务间的同步与互斥,包括:
在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,一个互斥锁的信号量为权利要求1至3任一所述信号量;
第二任务通过获取第一互斥锁的信号量而获取第一互斥锁,第一互斥锁是第二任务尝试获取的互斥锁,第二任务为用户态虚拟机的任一任务;
第二任务在释放第一互斥锁时,释放第一互斥锁的信号量。
5.根据权利要求4所述方法,其特征在于,还包括:
一个互斥锁的控制块还包括该互斥锁的拥有者和该互斥锁的嵌套层数;
当第二任务在不拥有第一互斥锁时成功获取第一互斥锁,把第二任务设置为第一互斥锁的拥有者;
当第二任务已经拥有第一互斥锁且再次获取第一互斥锁时,则递增第一互斥锁的嵌套层数;
当第二任务释放第一互斥锁时,还递减第一互斥锁的嵌套层数,且当第二任务释放第一互斥锁后且不再拥有第一互斥锁时,把第一互斥锁的拥有者设置为-1。
6.一种用户态虚拟机任务间的同步与互斥方法,其特征在于,通过条件变量实现用户态虚拟机任务间的同步与互斥,包括:
在一个条件变量的控制块中设置该条件变量的信号量的控制块,一个条件变量的信号量为权利要求1至3任一所述信号量;
第三任务通过尝试获取第一条件变量的信号量从而等待第一条件变量上,第三任务为用户态虚拟的等待第一条件变量的任一任务。
7.根据权利要求6所述方法,其特征在于,还包括:
当第四任务释放第一条件变量的信号量,唤醒第一条件变量的信号量的等待队列中优先级最高的任务或所有任务,第四任务为用户态虚拟机中使第一条件变量满足条件的任一任务。
8.一种用户态虚拟机任务间的同步与互斥方法,其特征在于,通过任务栅栏实现用户态虚拟机任务间的同步与互斥,包括:
在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块和栅栏次数,其中,一个任务栅栏的信号量为权利要求1至3任一所述信号量,一个任务栅栏的栅栏次数为唤醒等待在该任务栅栏上的所有任务时任务栅栏等待接口的调用次数;
当第五任务尝试获取第一任务栅栏时且当第一任务栅栏的信号量的信号量计数的绝对值加1等于第一任务栅栏的次数时,唤醒等待在第一任务栅栏上的所有任务,第五任务为用户态虚拟机中尝试获取第一任务栅栏的任一任务;
当第五任务尝试获取第一任务栅栏时且当第一任务栅栏的信号量的信号量计数的绝对值加1不等于第一任务栅栏的次数时,获取第一任务栅栏的信号量,使第五任务等待在第一任务栅栏上。
9.一种用户态虚拟机任务间的同步与互斥方法,其特征在于,通过读写锁实现用户态虚拟机任务间的同步与互斥,包括:
在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,其中,该读写锁的互斥锁为权利要求4或5任一所述互斥锁,控制互斥访问所述读写状态,该读写锁的条件变量为权利要求6或7任一所述条件变量;
在第六任务尝试获取第一读写锁的读锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,第六任务获取第一读写锁的读锁功能,否则第六任务等待在所述条件变量上,第六任务是用户态虚拟机的当前运行任务;
在第六任务尝试获取第一读写锁的写锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。
10.根据权利要求9所述方法,其特征在于,一个读写锁的读写状态包括该读写锁的读者计数、写者等待计数和写标记;
其中,一个读写锁的读者计数表示获取该读写锁的读锁功能的任务数目,一个读写锁的写者等待计数表示等待获取该读写锁的写锁功能的任务数目,一个读写锁的写标记为true时,表示有任务已经获取读写锁的写锁功能,当该写标记为false时,表示没有任务已经获取读写锁的写锁功能。
11.根据权利要求10所述方法,其特征在于,所述第六任务尝试获取第一读写锁的读锁功能,具体包括:
当第一读写锁的写者等待计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;
当第一读写锁的写者等待计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的读锁功能,并递增第一读写锁的读者计数。
12.根据权利要求10所述方法,其特征在于,所述第六任务尝试获取第一读写锁的写锁功能,具体包括:
当第一读写锁的读者计数大于0或第一读写锁的写标记为true时,通过获取第一读写锁的条件变量,使第六任务等待在第一读写锁的条件变量上;
当第一读写锁的读者计数不大于0且第一读写锁的写标记为false时,第六任务成功获取第一读写锁的写锁功能,设置第一读写锁的写标记为第六任务。
13.根据权利要求10所述方法,其特征在于,在第六任务释放第一读写锁时,包括:
当第一读写锁的读者计数大于0时,递减第一读写锁的读者计数;以及
当第一读写锁的读者计数等于0时,通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有读者任务;
当第一读写锁的写者标记为true时,设置第一读写锁的写者标记为false,并通过释放第一读写锁的条件变量唤醒等待在第一读写锁条件变量的所有写者任务。
14.一种用户态虚拟机任务间的同步与互斥装置,其特征在于,通过信号量实现用户态虚拟机任务间的同步与互斥,包括:信号量设置模块、信号量获取模块和信号量释放模块;
信号量设置模块用于在一个信号量的控制块中设置该信号量的信号量计数和任务等待队列;
信号量获取模块用于当第一任务尝试获取第一信号量时,递减第一信号量的所述信号量计数,且当第一信号量递减后的信号量计数大于等于0时,第一任务成功获取第一信号量,否则,把第一任务挂在第一信号量的任务等待队列中,把第一任务的所述等待信号量指针指向第一信号量,第一信号量是第一任务尝试获取的信号量,第一任务为用户态虚拟机的任一任务;
信号量释放模块用于当第一任务释放所获取的第一信号量时,递增第一信号量的所述信号量计数。
15.一种用户态虚拟机任务间的同步与互斥装置,其特征在于,通过互斥锁实现用户态虚拟机任务间的同步与互斥,包括:互斥锁设置模块、互斥锁获取模块和互斥锁释放模块;
互斥锁设置模块用于在一个互斥锁的控制块中设置该互斥锁的信号量的控制块,该信号量为权利要求1至3任一所述信号量;
互斥锁获取模块用于第二任务通过获取第一互斥锁的信号量而获取第一互斥锁,第一互斥锁是第二任务尝试获取的互斥锁,第二任务为用户态虚拟机的任一任务;
互斥锁释放模块用于第二任务在释放第一互斥锁时,释放第一互斥锁的信号量。
16.一种用户态虚拟机任务间的同步与互斥装置,其特征在于,通过条件变量实现用户态虚拟机任务间的同步与互斥,包括:条件变量设置模块、条件变量等待模块和条件变量满足模块;
条件变量设置模块用于在一个条件变量的控制块中设置该条件变量的信号量的控制块,该信号量为权利要求1至3任一所述信号量;
条件变量等待模块用于第三任务通过尝试获取第一条件变量的信号量从而等待第一条件变量上,第三任务为用户态虚拟的等待第一条件变量的任一任务;
条件变量满足模块用于当第四任务释放第一条件变量的信号量,唤醒第一条件变量的信号量的等待队列中优先级最高的任务或所有任务,第四任务为用户态虚拟机中使第一条件变量满足条件的任一任务。
17.一种用户态虚拟机任务间的同步与互斥装置,其特征在于,通过任务栅栏实现用户态虚拟机任务间的同步与互斥,包括:任务栅栏设置模块和任务栅栏获取模块;
任务栅栏设置模块用于在一个任务栅栏的控制块中设置该任务栅栏的信号量的控制块和栅栏次数,该信号量为权利要求1至3任一所述信号量,该栅栏次数为唤醒等待在该任务栅栏上的所有任务时任务栅栏等待接口的调用次数;
任务栅栏获取模块用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1等于第一任务栅栏的次数时,唤醒等待在第一任务栅栏上的所有任务,第五任务为用户态虚拟机中尝试获取第一任务栅栏的任一任务;
任务栅栏获取模块还用于当第五任务尝试获取第一任务栅栏且当第一任务栅栏的信号量的信号量计数的绝对值加1不等于第一任务栅栏的次数时,获取第一任务栅栏的信号量,使第五任务等待在第一任务栅栏上。
18.一种用户态虚拟机任务间的同步与互斥装置,其特征在于,通过读写锁实现用户态虚拟机任务间的同步与互斥,包括:读写锁设置模块、读锁获取模块和写锁获取模块;
读写锁设置模块用于在一个读写锁的控制块中设置该读写锁的互斥锁的控制块、该读写锁的条件变量的控制块和该读写锁的读写状态,其中,该读写锁的互斥锁为权利要求4或5任一所述互斥锁,控制互斥访问所述读写状态,该读写锁的条件变量为权利要求6或7任一所述条件变量;
读锁获取模块用于在第六任务尝试获取第一读写锁的读锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能没有被任一任务已获取或等待获取时,第六任务获取第一读写锁的读锁功能,否则第六任务等待在所述条件变量上,第六任务是用户态虚拟机的当前运行任务;
写锁获取模块用于在第六任务尝试获取第一读写锁的写锁功能时,当根据所述读写状态判断出第一读写锁的写锁功能和读锁功能都未被获取时,第六任务获取第一读写锁的读锁功能,否则第一任务等待在所述条件变量上。
19.一种操作系统,其特征在于,执行权利要求1至13任一所述方法。
20.一种计算机可读存储介质,其特征在于,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行权利要求1至13任一所述方法。
CN202210968959.9A 2022-08-12 2022-08-12 一种用户态虚拟机任务间的同步与互斥的方法及装置 Pending CN115454657A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210968959.9A CN115454657A (zh) 2022-08-12 2022-08-12 一种用户态虚拟机任务间的同步与互斥的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210968959.9A CN115454657A (zh) 2022-08-12 2022-08-12 一种用户态虚拟机任务间的同步与互斥的方法及装置

Publications (1)

Publication Number Publication Date
CN115454657A true CN115454657A (zh) 2022-12-09

Family

ID=84297902

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210968959.9A Pending CN115454657A (zh) 2022-08-12 2022-08-12 一种用户态虚拟机任务间的同步与互斥的方法及装置

Country Status (1)

Country Link
CN (1) CN115454657A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102693162A (zh) * 2011-12-29 2012-09-26 中国科学技术大学苏州研究院 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法
CN110622478A (zh) * 2018-04-08 2019-12-27 华为技术有限公司 数据同步处理的方法和装置
US10592281B1 (en) * 2017-09-28 2020-03-17 Amazon Technologies, Inc. Wait optimizer for recording an order of first entry into a wait mode by a virtual central processing unit
CN113535414A (zh) * 2021-05-31 2021-10-22 宁波三星医疗电气股份有限公司 适用于Linux容器应用的多进程同步方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102693162A (zh) * 2011-12-29 2012-09-26 中国科学技术大学苏州研究院 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法
US10592281B1 (en) * 2017-09-28 2020-03-17 Amazon Technologies, Inc. Wait optimizer for recording an order of first entry into a wait mode by a virtual central processing unit
CN110622478A (zh) * 2018-04-08 2019-12-27 华为技术有限公司 数据同步处理的方法和装置
CN113535414A (zh) * 2021-05-31 2021-10-22 宁波三星医疗电气股份有限公司 适用于Linux容器应用的多进程同步方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
FISH: "利⽤信号量来实现读写锁" *

Similar Documents

Publication Publication Date Title
US10241831B2 (en) Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines
US10353749B2 (en) Lock-free dual queue with condition synchronization and time-outs
US9928124B2 (en) Reverting tightly coupled threads in an over-scheduled system
US9384049B2 (en) Preventing unnecessary context switching by employing an indicator associated with a lock on a resource
US11893416B2 (en) Determining a job group status based on a relationship between a generation counter value and a ticket value for scheduling the job group for execution
US6910212B2 (en) System and method for improved complex storage locks
KR100911796B1 (ko) 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐
US20020083063A1 (en) Software and data processing system with priority queue dispatching
US20100153957A1 (en) System and method for managing thread use in a thread pool
US20200110634A1 (en) Managing Task Dependency
US8495642B2 (en) Mechanism for priority inheritance for read/write locks
CN116225728B (zh) 基于协程的任务执行方法、装置、存储介质及电子设备
CN115562838A (zh) 资源调度方法、装置、计算机设备及存储介质
CN112182452A (zh) 页面组件渲染处理方法、装置、设备及计算机可读介质
US9075706B2 (en) Electronic device with reversing stack data container and related methods
CN115408117A (zh) 协程运行方法、装置、计算机设备和存储介质
CN115454657A (zh) 一种用户态虚拟机任务间的同步与互斥的方法及装置
US11301304B2 (en) Method and apparatus for managing kernel services in multi-core system
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
CN114791854A (zh) 用户态虚拟机任务的调度方法、装置、设备及存储介质
CN115061779B (zh) 一种用户态虚拟机的内核锁管理方法及装置
CN112346879A (zh) 进程管理方法、装置、计算机设备及存储介质
CN114880075B (zh) 一种用户态虚拟机虚拟核间任务的调度方法及装置
US20240184627A1 (en) Determining a job group status based on a relationship between a generation counter value and a ticket value for scheduling the job group for execution
CN117453413A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20221209