CN102200930B - 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法 - Google Patents

同步变量映射方法及装置、同步变量释放方法及同步变量删除方法 Download PDF

Info

Publication number
CN102200930B
CN102200930B CN 201110143315 CN201110143315A CN102200930B CN 102200930 B CN102200930 B CN 102200930B CN 201110143315 CN201110143315 CN 201110143315 CN 201110143315 A CN201110143315 A CN 201110143315A CN 102200930 B CN102200930 B CN 102200930B
Authority
CN
China
Prior art keywords
address space
user
virtual address
cogradient variable
variable
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.)
Expired - Fee Related
Application number
CN 201110143315
Other languages
English (en)
Other versions
CN102200930A (zh
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.)
Huawei Digital Technologies Chengdu Co Ltd
Beijing Huawei Digital Technologies Co Ltd
Huawei Digital Technologies Co Ltd
Original Assignee
Beijing Huawei Digital Technologies 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 Beijing Huawei Digital Technologies Co Ltd filed Critical Beijing Huawei Digital Technologies Co Ltd
Priority to CN 201110143315 priority Critical patent/CN102200930B/zh
Publication of CN102200930A publication Critical patent/CN102200930A/zh
Application granted granted Critical
Publication of CN102200930B publication Critical patent/CN102200930B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明实施例提供了一种同步变量映射的方法,包括:在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;在嵌入式系统的用户态进程对应的虚拟地址空间中分配第一虚拟地址空间,将第一物理地址空间映射至第一虚拟地址空间;在嵌入式系统的核心态线程对应的虚拟地址空间中分配第二虚拟地址空间,将第一物理地址空间映射至第二虚拟地址空间。此外,本发明实施例提供了相应的同步变量映射装置。此外,本发明实施例提供了同步变量释放方法以及同步变量删除方法。通过本发明实施例提供的同步变量映射方法及同步变量映射装置,达到了用户态进程不需要进行系统调用即可以访问同步变量,节约嵌入式系统的开销的技术效果,同时保障内核的安全性和稳定性。

Description

同步变量映射方法及装置、同步变量释放方法及同步变量删除方法
技术领域
本发明涉及计算机领域,特别是涉及一种同步变量映射方法、同步变量映射装置、同步变量释放方法以及同步变量删除方法。
背景技术
随着多核、多线程技术的不断发展,嵌入式系统可以并发执行多个“任务”,例如用户态的某个程序和核心态的操作系统并发执行,这使得该嵌入式系统的总体性能大大提高。利用多核、多线程技术,使嵌入式系统能够有更多的“任务”并发工作,是技术研究与发展的趋势。
有时,嵌入式系统中并发执行的多个“任务”之间是相互关联的。例如,核心态线程和用户态进程都需要访问(包括读出和写入)存储在嵌入式系统存储器某一地址空间的数据,即共享资源。因此,确保多个“任务”对共享资源进行访问时的互斥性,是制约嵌入式系统的总体性能与可靠性的一个关键因素。例如,核心态线程对共享资源进行写入操作时,用户态进程不能对共享资源进行读出操作。
为保障核心态线程和用户态进程对共享资源进行访问时的互斥性,现有技术提供了如下技术方案:
1、调用同步变量创建应用程序接口,为共享资源创建一个同步变量。
2、将共享资源与同步变量进行关联。
3、核心态线程或者用户态进程对共享资源访问前,调用同步变量持有应用程序接口。
4、核心态线程或者用户态进程成功持有同步变量后,对共享资源进行访问。
现有技术中,用户态进程创建、初始化同步变量,需要通过系统调用,进入核心态;创建以及初始化同步变量后,又需要通过系统调用返回用户态,从而获得初始化的同步变量。用户态进程访问同步变量,也需要通过系统调用,进入核心态。访问同步变量后,又需要通过系统调用返回用户态,从而获得更新的同步变量。现有技术中,用户态进程创建、初始化同步变量的过程如图1所示;用户态进程访问同步变量的过程图2所示。
在实现本发明的过程中,本发明的发明人发现现有技术至少存在以下问题:
1、用户态进程对同步变量进行访问,需要通过系统调用进入核心态。通常,每个系统调用需要耗时几十个纳秒,是一个比较大的开销。对于需要频繁访问共享资源的用户态进程来说,这一问题更为严重。
2、用户态进程通过系统调用进入核心态对同步变量进行访问,需要将核心态的相关的数据结构、同步算法暴露给用户态进程,并允许用户态进程针对核心态的相关资源进行操作。这将对内核的安全性和稳定性造成影响。
3、用户态进程正常退出或异常退出,有可能没有对其持有的同步变量做释放处理,该同步变量一直为被持有的状态,这使得其他进程/线程无法持有该同步变量。希望访问该同步变量的其他进程/线程可能将一直等待该被持有的同步变量。这将导致“死锁”,使得该同步变量所保护的共享资源无法被他人使用。
4、用户态进程正常退出或异常退出,有可能没有对其所创建的同步变量进行删除处理,这将使得该用户态进程使用的同步变量一直存在于系统中。
发明内容
一方面,本发明实施例提供一种同步变量映射方法,实现用户态进程不需要进行系统调用即可以访问同步变量,以节约嵌入式系统的开销,同时保障内核的安全性和稳定性。
一种同步变量映射方法,包括:
在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;
在嵌入式系统的用户态进程对应的虚拟地址空间中分配第一虚拟地址空间,将第一物理地址空间映射至第一虚拟地址空间;
在嵌入式系统的核心态线程对应的虚拟地址空间中分配第二虚拟地址空间,将第一物理地址空间映射至第二虚拟地址空间。
另一方面,本发明实施例提供一种同步变量映射装置,实现用户态进程不需要进行系统调用即可以访问同步变量,以节约嵌入式系统的开销,同时保障内核的安全性和稳定性。
一种同步变量映射装置,包括:
第一物理地址空间分配单元,用于在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;
第一虚拟地址空间分配单元,用于在嵌入式系统的用户态进程对应的虚拟地址空间中分配第一虚拟地址空间;
第二虚拟地址空间分配单元,用于在嵌入式系统的核心态线程对应的虚拟地址空间中分配第二虚拟地址空间;
第一映射单元,用于将第一物理地址空间映射至第一虚拟地址空间;
第二映射单元,用于将第一物理地址空间映射至第二虚拟地址空间。
又一方面,本发明实施例提供一种同步变量释放方法,解决了用户态进程正常退出或异常退出没有对其持有的同步变量做释放处理,导致的“死锁”现象,“死锁”现象意味者同步变量所保护的共享资源无法被他人使用。
一种同步变量释放方法,包括:同步变量为用户态进程同步变量,用户态进程退出时调用用户态进程退出同步变量处理函数,用户态进程退出同步变量处理函数为核心态函数,用户态进程退出同步变量处理函数执行如下操作:
调用与同步变量对应的同步变量释放应用程序接口。
再一方面,本发明实施例提供一种同步变量删除方法,解决了用户态进程正常退出或异常退出有可能没有对其所创建的同步变量进行删除处理的问题。没有对其所创建的同步变量进行删除将使得该用户态进程使用的同步变量一直存在于系统中。
一种同步变量删除方法,包括:同步变量为用户态进程同步变量,用户态进程退出时调用用户态进程退出同步变量处理函数,用户态进程退出同步变量处理函数为核心态函数,用户态进程退出同步变量处理函数执行如下操作:
调用与同步变量对应的同步变量删除应用程序接口。
通过本发明实施例提供的同步变量映射方法及同步变量映射装置,达到了用户态进程不需要进行系统调用即可以访问同步变量,节约嵌入式系统的开销的技术效果,同时保障内核的安全性和稳定性。
通过本发明实施例提供的同步变量释放方法,解决了用户态进程正常退出或异常退出没有对其持有的同步变量做释放处理,导致的“死锁”现象以及同步变量所保护的共享资源无法被其他进程使用的问题。
通过本发明实施例提供的同步变量删除方法,解决了用户态进程正常退出或异常退出有可能没有对其所创建的同步变量进行删除处理的问题。没有对其所创建的同步变量进行删除将使得该用户态进程使用的同步变量一直存在于系统中。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中用户态进程创建、初始化同步变量示意图;
图2是现有技术中用户态进程访问同步变量示意图;
图3是本发明实施例提供的同步变量映射方法示意图;
图4是本发明实施例提供的核心态线程对应的虚拟地址空间的地址映射流程图;
图5是本发明实施例提供的用户态进程对应的虚拟地址空间的地址映射流程图;
图6是本发明实施例提供的用户态进程在核心态模式下创建同步变量的流程图;
图7是本发明实施例提供的用户态进程在用户态模式下创建同步变量的流程图;
图8是本发明实施例提供的用户态进程访问共享资源的流程图;
图9是本发明实施例提供的同步变量的格式示意图;
图10是本发明实施例提供的同步变量映射装置示意图;
图11是本发明实施例提供的第一种同步变量释放方法流程图;
图12是本发明实施例提供的第二种同步变量释放方法流程图;
图13是本发明实施例提供的同步变量的标识存储在用户态进程的进程描述符之外的存储空间的示意图;
图14是本发明实施例提供的同步变量的标识存储在用户态进程的进程描述符的示意图;
图15是本发明实施例提供的同步变量删除方法流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面对本发明实施例中出现一些概念进行解释:
“共享资源”是指,操作系统中可能会被多个不同的进程或线程访问的系统资源。
“同步变量”是指,用于对资源进行访问控制的一种同步机制。
与同步变量有关的应用程序接口(application programminginterface,API)通常包括同步变量创建(create)应用程序接口、同步变量持有(lock)应用程序接口、同步变量释放(unlock)应用程序接口以及同步变量删除(destroy)应用程序接口等。上述应用程序接口的功能如下:
同步变量创建应用程序接口:用于创建并初始化一个同步变量。
同步变量持有应用程序接口:根据同步变量算法,持有该同步变量。
同步变量释放应用程序接口:释放一个已经持有的同步变量。
同步变量删除应用程序接口:删除一个已经创建的同步变量。
另外,同步变量可以有多种类型(例如读写锁、互斥锁等),不同类型的同步变量可以有不同的算法以及不同的应用程序接口。
实施例一:
本发明实施例提供了一种同步变量映射方法,参见图3,图3是本发明实施例提供的同步变量映射方法示意图,具体论述如下:
嵌入式系统的虚拟地址空间可以分为用户态(user space)模式或者核心态(kernel space)模式。用户态模式下,使用用户态进程对应的虚拟地址空间,即用户态地址空间304。核心态模式下,使用核心态线程对应的虚拟地址空间,即核心态地址空间305。
在物理地址空间301中,分配第一物理地址空间303,该地址空间用于存储用户态进程或者核心态线程创建的同步变量。该同步变量用于关联用户态进程和核心态线程共享的共享资源。在虚拟地址空间302中,位于左边的304为用户态地址空间,位于右边的305为核心态地址空间。用户态地址空间304以及核心态地址空间305的位置以及大小可以由用户进行定义。例如,虚拟地址空间302的大小为4G,用户态地址空间304占据0至3G;核心态地址空间305占据3G至4G。在用户态地址空间304中分配第一虚拟地址空间306。在核心态地址空间305中,分配第二虚拟地址空间307。
将物理地址空间301中的第一物理地址空间303映射至第一虚拟地址空间306。这样用户态进程可以通过虚拟地址对存储在第一物理地址空间303中的同步变量进行访问。
将物理地址空间301中的第一物理地址空间303映射至第二虚拟地址空间307。这样核心态线程可以通过虚拟地址对存储在第一物理地址空间303中的同步变量进行访问。
核心态线程和用户态进程都可以根据各自的虚拟地址访问第一物理地址空间303中存放的内容。第一物理地址空间303用于存放用户态进程或者核心态线程创建的同步变量,因此,核心态线程和用户态进程都可以根据各自的虚拟地址访问用户态进程或者核心态线程创建的同步变量。也就是说,通过本发明,用户态进程不需要通过系统调用进入核心态,然后再访问用户态进程或者核心态线程创建的同步变量。用户态进程在用户态模式下即可访问存储在第一物理地址空间303中的同步变量。
例如,假设用户态进程A需要访问用户态进程A和核心态线程B共享的某一共享资源。物理地址空间308存储了与该共享资源关联的同步变量,物理地址空间308映射至用户态虚拟地址空间309,物理地址空间308映射至核心态虚拟地址空间310。在这种情况下,用户态进程A可以通过用户态虚拟地址空间309得到存储同步变量的物理地址空间308,从而实现对同步变量的访问。用户态进程A访问同步变量不需要通过系统调用进入核心态。不进行系统调用不仅可以节约嵌入式系统的开销,而且可以保障内核的安全性和稳定性。
参见图4,图4是核心态线程对应的虚拟地址空间的地址映射流程图,具体描述如下:
401、在核心态线程对应的虚拟地址空间中分配第二虚拟地址空间。第二虚拟地址空间用于403的映射。
402、在物理地址空间中分配用于存储同步变量的第一物理地址空间。第一物理地址空间也用于403的映射。
403、第一物理地址空间映射到第二虚拟地址空间。即存储同步变量的物理地址空间映射到401所述的核心态线程对应的虚拟地址空间中的第二虚拟地址空间。
404、返回。即返回到系统初始化主流程。
参见图5,图5是用户态进程对应的虚拟地址空间的地址映射流程图,具体论述如下:
501、用户态进程调用系统调用函数。该系统调用函数是一种特定的系统调用函数,用于完成存储同步变量的第一物理地址空间映射到在用户态进程对应的虚拟地址空间中的第一虚拟地址空间的操作。
502、判断用户态进程对应的虚拟地址空间中是否为同步变量分配了第一虚拟地址空间。如果判断结果为“是”,则执行503。如果判断结果为“否”,则执行504。
关于“用户态进程对应的虚拟地址空间为同步变量分配第一虚拟地址空间”,可以通过下述方式实现:调整用户态进程虚拟地址空间的分布,为用户态进程分配对应的虚拟地址空间,编译新的系统内核,使嵌入式系统使用新内核启动,这样此系统中的用户态进程对应的虚拟地址空间中便分配了对应的虚拟地址空间。
503、第一物理地址空间映射到第一虚拟地址空间。
504、返回。即系统调用返回到用户态进程。
参见图6,图6是用户态进程在核心态模式下创建同步变量的流程图,具体论述如下:
601、系统调用。系统调用使得嵌入式系统进入核心态。
602、调用同步变量创建应用程序接口。
603、在物理地址空间中分配所需的内存空间。在核心态模式下,在402分配的第一物理地址空间中,分配该同步变量所需大小的内存空间。
604、初始化同步变量。对同步变量进行初始化。关于初始化后的同步变量,请参见图9。
605、系统调用返回。即系统调用完毕,返回到用户态进程。
参见图7,图7是用户态进程在用户态模式下创建同步变量的流程图,具体论述如下:
701、调用同步变量创建应用程序接口。
702、在物理地址空间中分配所需的内存空间。在用户态模式下,在402分配的第一物理地址空间中,分配该同步变量所需大小的内存空间。
703、初始化同步变量。对同步变量进行初始化。关于初始化后的同步变量,请参见图9。
704、同步变量创建应用程序接口返回。即同步变量创建应用程序接口调用完毕,返回到用户态进程。
参见图8,图8是用户态进程访问共享资源的流程图。为防止用户态进程和核心态线程共享的共享资源同时被用户态进程和核心态线程访问,用户态进程访问共享资源前,先持有与该共享资源关联的同步变量。具体论述如下:
801、用户态进程需要访问共享资源。
802、调用同步变量持有应用程序接口,得到同步变量持有应用程序接口的返回值。用户态进程调用同步变量持有应用程序接口前,需要创建同步变量。关于如何如何创建同步变量,请参考图6、图7以及相关实施例。
803、根据返回值,判断是否成功持有同步变量。若成功持有该同步变量,则执行804;若未成功持有该同步变量,则执行802,即再次调用同步变量持有应用程序接口,得到同步变量持有应用程序接口的返回值。当然,也可以退出对共享资源的访问,并返回用户态进程。
804、用户态进程访问共享资源。
参见图9,图9是同步变量的格式示意图,具体论述如下:
字段901、同步变量ID。用于标识同步变量,用户态进程或核心态线程可以通过同步变量ID来调用同步变量应用程序接口。
字段902、同步变量状态值。用于标识同步变量是否被某一个用户态进程(或者核心态线程)持有。例如,用1表示被持有;用0表示没有被持有。根据不同的同步变量的算法(例如读写锁、互斥锁等),同步变量状态值可以取不同的数值,以代表该同步变量的各种状态。
字段903、使用计数。使用计数(reference count)用于标识该同步变量被多少个使用者(包括用户态进程以及核心态线程)使用。同步变量被第一个使用者创建时,使用计数为1;同步变量被第二个使用者创建,使用计数值增加1,依此类推。当某一使用者不再使用该同步变量(例如通过调用同步变量删除应用程序接口,解除使用者与共享资源的关联关系),该同步变量的字段903减1。另外,如果同步变量的字段903的值为1,则表明该同步变量仅被一个使用者使用。利用这一特点可用于执行1104。
在本发明实施例的具体实现时,嵌入式系统启动时分配第一物理地址空间。该方案的好处是,不需要另外付出时间和开销分配用于存储同步变量的物理地址空间。
进一步的,第一物理地址空间为连续的地址空间,第一虚拟地址空间为连续的地址空间。该方案的好处是,将物理地址空间向用户态进程对应的虚拟地址空间进行映射时,只需映射一次即可,不需进行多次映射。
进一步的,第一虚拟地址空间位于用户态进程对应的虚拟地址空间的栈顶。该方案的好处是,采用下调用户态进程调用栈顶的方式比较简单,并且对做出预留地址空间的的虚拟地址空间也无需特殊的管理。
进一步的,用户态进程在访问与核心态线程共享的共享资源前,先调用同步变量持有应用程序接口并根据同步变量持有应用程序接口的返回值判断用户态进程是否成功持有所述同步变量。如果用户态进程成功持有同步变量,则对共享资源进行访问;如果用户态进程没有成功持有同步变量,则不对共享资源进行访问。
进一步的,核心态线程在访问与用户态进程共享的共享资源前,先调用同步变量持有应用程序接口并根据同步变量持有应用程序接口的返回值判断核心态线程是否成功持有所述同步变量。如果所述核心态线程成功持有同步变量,则对共享资源进行访问;如果核心态线程没有成功持有同步变量,则不对共享资源进行访问。
进一步的,用户态进程退出时调用用户态进程退出同步变量处理函数,用户态进程退出同步变量处理函数为核心态函数,用户态进程退出同步变量处理函数执行如下操作:调用与同步变量对应的同步变量释放应用程序接口。解决了用户态进程正常退出或异常退出没有对其持有的同步变量做释放处理导致的“死锁”现象。“死锁”现象意味着同步变量所保护的共享资源无法被他人使用。
关于用户态进程退出同步变量处理函数,可通过本发明实施例三提供的用户态进程同步变量释放方法实现。具体可参考本发明实施例三以及图11和图12。
进一步的,用户态进程退出同步变量处理函数还执行如下操作:
调用与同步变量对应的同步变量删除应用程序接口。同步变量删除应用程序接口可以执行如下操作:对同步变量是否被其他使用者(包括其他用户态进程以及核心态线程)创建做出判断(判断同步变量字段903的值是否等于1,具体请参见上文对字段903的描述)。如果同步变量没有被其他使用者创建,则删除同步变量,并释放同步变量占用的内存空间;如果同步变量被其他使用者创建,则将同步变量字段903的值减1。
进一步的,用户态进程退出同步变量处理函数根据存储在核心态的同步变量的标识,确定用户态进程使用的同步变量。其中,同步变量的标识可以是同步变量的ID或者同步变量的地址。
进一步的,同步变量的标识存储在用户态进程的进程描述符(processdescriptor)中(具体请参考图14)。图14是本发明实施例提供的同步变量的标识存储在进程描述符的示意图。进程描述符为核心态为用户态进程创建的数据结构,以记录用户态进程的上下文等信息。本发明实施例利用用户态进程对应的进程描述符,记录用户态进程所使用的同步变量。进程描述符包括Process ID、链表头指针等字段。用户态进程使用的所有同步变量的记录(包括第一同步变量标识、第二同步变量标识等)构成一个链表,链表头指针指向该链表的链表头。该方案可以达到利用现有的进程描述符存储用户态进程使用的同步变量的标识,节约储存空间以及简化相关配置的技术效果。
进一步的,同步变量的标识存储在用户态进程的进程描述符之外的存储空间(具体请参考图13)。图13是本发明实施例提供的同步变量的标识存储在单独分配的存储空间的示意图。本发明实施例在嵌入式系统中单独分配一段存储空间,用于记录用户态进程所使用的同步变量。分配的存储空间存放用户态进程标识、链表头指针等字段。用户态进程使用的所有同步变量的标识(包括第一同步变量标识、第二同步变量标识等)构成一个链表,链表头指针指向该链表的链表头。该方案可以达到不依赖用户态进程在内核中对应的进程描述符,灵活性较高的技术效果。
进一步的,在本发明实施例的具体实现时,调用用户态进程创建的所有同步变量分别对应的同步变量释放应用程序接口。该方案可以达到将该用户态进程创建并持有的同步变量都释放掉。
进一步的,用户态进程退出时调用用户态进程退出同步变量处理函数,用户态进程退出同步变量处理函数为核心态函数,用户态进程退出同步变量处理函数执行如下操作:调用与同步变量对应的同步变量删除应用程序接口。解决了用户态进程正常退出或异常退出,可能出现的问题:
(1)没有删除同步变量(在该同步变量没有被核心态线程或者其他用户态进程创建的情况下)。没有删除同步变量意味着同步变量一直存在于系统中。
(2)没有将使用计数的值减1(在该同步变量被核心态线程或者其他用户态进程创建的情况下)。没有将使用计数的值减1意味着创建该同步变量的核心态线程或者其他用户态进程退出时无法删除该同步变量并释放同步变量占据的存储空间。
关于用户态进程退出同步变量处理函数,可通过本发明实施例四提供的用户态进程同步变量删除方法实现。具体请参考本发明实施例四以及图15。
进一步的,调用用户态进程创建的所有同步变量分别对应的同步变量释放应用程序接口。
实施例二:
本发明实施例还提供了一种同步变量映射装置,本实施例可以通过实施例一提供的同步变量映射方法实现。本发明实施例提供的同步变量映射装置可以实现用户态进程不需要进行系统调用即可以访问同步变量,以节约嵌入式系统的开销,同时保障内核的安全性和稳定性。参见图10,图10是本发明实施例提供的同步变量映射装置示意图,该同步变量映射装置包括:
1001:第一物理地址空间分配单元。用于在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;
1002:第一虚拟地址空间分配单元。用于在嵌入式系统的用户态进程对应的虚拟地址空间中分配第一虚拟地址空间;
1003:第二虚拟地址空间分配单元。用于在嵌入式系统的核心态线程对应的虚拟地址空间中分配第二虚拟地址空间;
1004:第一映射单元。用于将第一物理地址空间映射至第一虚拟地址空间;
1005:第二映射单元。用于将第一物理地址空间映射至第二虚拟地址空间。
可见,通过本发明实施例提供的同步变量映射装置,可以实现用户态进程不需要进行系统调用即可以访问同步变量,以节约嵌入式系统的开销,同时保障内核的安全性和稳定性。
实施例三:
本发明实施例提供一种用户态进程同步变量释放方法,解决了用户态进程正常退出或异常退出没有对其持有的同步变量做释放处理导致的“死锁”现象。“死锁”现象意味着同步变量所保护的共享资源无法被他人使用。本发明实施例提供了两种同步变量释放方法,第一种是用户态进程退出后即调用的用户态进程退出同步变量处理函数,具体请参见图11;第二种是用户态进程退出核心态处理函数调用用户态进程退出同步变量处理函数,具体请参见图12。
参见图11,图11是本发明实施例提供的第一种同步变量释放方法流程图,具体包括:
1101:用户态进程退出。用户态进程退出可以是正常退出也可以是异常退出。用户态进程退出后,直接执行1102,即调用用户态进程退出同步变量处理函数。
1102:调用用户态进程退出同步变量处理函数。该函数将调用用户态进程对应的同步变量释放应用程序接口。
1103:调用同步变量释放应用程序接口。同步变量释放应用程序接口可以执行如下操作:对同步变量是否被本用户态进程持有做出判断(具体根据用户态进程同步变量的算法);如果用户态进程持有该同步变量,则对同步变量执行释放操作。
1104:返回。即返回到用户态进程退出核心态处理函数。
参见图12,图12是本发明实施例提供的第二种同步变量释放方法流程图,具体包括:
1201:用户态进程退出。用户态进程退出可以是正常退出也可以是异常退出。用户态进程退出后,执行1202,即调用用户态进程退出核心态处理函数。
1202:调用用户态进程退出核心态处理函数。该函数将执行1203,即调用用户态进程退出同步变量处理函数。
1203:调用用户态进程退出同步变量处理函数。类似于1102,这里不再赘述。
1204:调用同步变量释放应用程序接口。类似于1103,这里不再赘述。
1205:返回。即用户态进程退出同步变量处理函数返回到用户态进程退出核心态处理函数。
进一步的,用户态进程退出同步变量处理函数还执行如下操作:
调用与同步变量对应的同步变量删除应用程序接口。同步变量删除应用程序接口可以执行如下操作:对同步变量是否被其他使用者(包括其他用户态进程以及核心态线程)创建做出判断(判断同步变量字段903的值是否等于1,具体请参见上文对字段903的描述)。如果同步变量没有被其他使用者创建,则删除同步变量,并释放同步变量占用的内存空间;如果同步变量被其他使用者创建,则将同步变量字段903的值减1。
进一步的,用户态进程退出同步变量处理函数根据存储在核心态的同步变量的标识,确定用户态进程使用的同步变量。其中,同步变量的标识可以是同步变量的ID或者同步变量的地址。
进一步的,同步变量的标识存储在用户态进程的进程描述符(processdescriptor)中(具体请参考图14)。图14是本发明实施例提供的同步变量的标识存储在进程描述符的示意图。进程描述符为核心态为用户态进程创建的数据结构,以记录用户态进程的上下文等信息。本发明实施例利用用户态进程对应的进程描述符,记录用户态进程所使用的同步变量。进程描述符包括Process ID、链表头指针等字段。用户态进程使用的所有同步变量的记录(包括第一同步变量标识、第二同步变量标识等)构成一个链表,链表头指针指向该链表的链表头。该方案可以达到利用现有的进程描述符存储用户态进程使用的同步变量的标识,节约储存空间以及简化相关配置的技术效果。
进一步的,同步变量的标识存储在用户态进程的进程描述符之外的存储空间(具体请参考图13)。图13是本发明实施例提供的同步变量的标识存储在单独分配的存储空间的示意图。本发明实施例在嵌入式系统中单独分配一段存储空间,用于记录用户态进程所使用的同步变量。分配的存储空间存放用户态进程标识、链表头指针等字段。用户态进程使用的所有同步变量的标识(包括第一同步变量标识、第二同步变量标识等)构成一个链表,链表头指针指向该链表的链表头。该方案可以达到不依赖用户态进程在内核中对应的进程描述符,灵活性较高的技术效果。
进一步的,在本发明实施例的具体实现时,调用用户态进程创建的所有同步变量分别对应的同步变量释放应用程序接口。该方案可以达到将该用户态进程创建并持有的同步变量都释放掉。
可见,通过本发明实施例提供的同步变量释放方法,可以解决用户态进程正常退出或异常退出没有对其持有的同步变量做释放处理导致的“死锁”现象。“死锁”现象意味着同步变量所保护的共享资源无法被他人使用。
实施例四:
本发明实施例提供一种用户态进程同步变量删除方法,解决了用户态进程正常退出或异常退出有可能没有对其所创建的同步变量进行删除处理的问题。没有对其所创建的同步变量进行删除将使得该用户态进程使用的同步变量一直存在于系统中。
参见图15,图15是本发明实施例提供的一种同步变量删除方法流程图,具体包括:
1501:用户态进程退出。用户态进程退出可以是正常退出也可以是异常退出。用户态进程退出后,执行1502,即调用用户态进程退出同步变量处理函数。
1502:调用用户态进程退出同步变量处理函数。该函数将调用同步变量删除应用程序接口。
1503:调用同步变量删除应用程序接口。同步变量删除应用程序接口可以执行如下操作:对同步变量是否被其他使用者(包括其他用户态进程以及核心态线程)创建做出判断(判断同步变量字段903的值是否等于1,具体请参见上文对字段903的描述)。如果同步变量没有被其他使用者创建,则删除同步变量,并释放同步变量占用的内存空间;如果同步变量被其他使用者创建,则将同步变量字段903的值减1。
1504:返回。
进一步的,调用用户态进程创建的所有同步变量分别对应的同步变量释放应用程序接口。
可见,通过本发明实施例提供的同步变量删除方法,解决了用户态进程正常退出或异常退出,可能出现的问题:
(1)没有删除同步变量(在该同步变量没有被核心态线程或者其他用户态进程创建的情况下)。没有删除同步变量意味着同步变量一直存在于系统中。
(2)没有将使用计数的值减1(在该同步变量被核心态线程或者其他用户态进程创建的情况下)。没有将使用计数的值减1意味着创建该同步变量的核心态线程或者其他用户态进程退出时无法删除该同步变量并释放同步变量占据的存储空间。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (5)

1.一种同步变量映射方法,其特征在于,
在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;
在所述嵌入式系统的用户态进程对应的虚拟地址空间中分配第一虚拟地址空间,将所述第一物理地址空间映射至所述第一虚拟地址空间;
在所述嵌入式系统的核心态线程对应的虚拟地址空间中分配第二虚拟地址空间,将所述第一物理地址空间映射至所述第二虚拟地址空间;
分配所述第一虚拟地址空间通过下述方式实现:
调整用户态进程虚拟地址空间的分布,为用户态进程分配对应的虚拟地址空间;
将所述第一物理地址空间映射至所述第一虚拟地址空间包括:
用户态进程调用系统调用函数,用于完成存储同步变量的第一物理地址空间映射到在用户态进程对应的虚拟地址空间中的第一虚拟地址空间的操作;
判断用户态进程对应的虚拟地址空间中是否为同步变量分配了第一虚拟地址空间;
如果判断结果为“是”,则执行第一物理地址空间映射到第一虚拟地址空间。
2.根据权利要求1所述的同步变量映射方法,其特征在于,
所述嵌入式系统启动时分配所述第一物理地址空间。
3.根据权利要求1所述的同步变量映射方法,其特征在于,
所述第一物理地址空间为连续的地址空间,所述第一虚拟地址空间为连续的地址空间。
4.根据权利要求3所述的同步变量映射方法,其特征在于,
所述第一虚拟地址空间位于所述用户态进程对应的虚拟地址空间的栈顶。
5.一种同步变量映射装置,其特征在于,包括:
第一物理地址空间分配单元,用于在嵌入式系统的物理地址空间中分配用于存储同步变量的第一物理地址空间;
第一虚拟地址空间分配单元,用于在所述嵌入式系统的用户态进程对应的虚拟地址空间中分配所述第一虚拟地址空间;
第二虚拟地址空间分配单元,用于在所述嵌入式系统的核心态线程对应的虚拟地址空间中分配所述第二虚拟地址空间;
第一映射单元,用于将所述第一物理地址空间映射至所述第一虚拟地址空间;
第二映射单元,用于将所述第一物理地址空间映射至所述第二虚拟地址空间;
所述第一虚拟地址空间分配单元具体用于:
调整用户态进程虚拟地址空间的分布,为用户态进程分配对应的虚拟地址空间;
所述第一映射单元具体用于:
用户态进程调用系统调用函数,用于完成存储同步变量的第一物理地址空间映射到在用户态进程对应的虚拟地址空间中的第一虚拟地址空间的操作;
判断用户态进程对应的虚拟地址空间中是否为同步变量分配了第一虚拟地址空间;
如果判断结果为“是”,则执行第一物理地址空间映射到第一虚拟地址空间。
CN 201110143315 2011-05-26 2011-05-26 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法 Expired - Fee Related CN102200930B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110143315 CN102200930B (zh) 2011-05-26 2011-05-26 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110143315 CN102200930B (zh) 2011-05-26 2011-05-26 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法

Publications (2)

Publication Number Publication Date
CN102200930A CN102200930A (zh) 2011-09-28
CN102200930B true CN102200930B (zh) 2013-04-17

Family

ID=44661623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110143315 Expired - Fee Related CN102200930B (zh) 2011-05-26 2011-05-26 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法

Country Status (1)

Country Link
CN (1) CN102200930B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI514142B (zh) * 2013-11-26 2015-12-21 Synology Inc 儲存系統及其控制方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103269284B (zh) * 2013-05-17 2016-09-14 汉柏科技有限公司 实时网络数据的捕获方法
CN103412822B (zh) * 2013-07-26 2017-06-06 华为技术有限公司 操作非易失性内存和数据操作的方法和相关装置
CN104077190A (zh) * 2014-06-09 2014-10-01 汉柏科技有限公司 一种arm网口驱动的用户态移植方法和系统
CN105468400A (zh) * 2015-08-03 2016-04-06 汉柏科技有限公司 一种基于linux用户态调用定时器的方法及系统
US9864700B1 (en) * 2016-08-17 2018-01-09 Advanced Micro Devices, Inc. Method and apparatus for power reduction in a multi-threaded mode
CN106681836B (zh) * 2016-12-28 2021-03-05 华为技术有限公司 一种信号量的创建方法及装置
CN107195159B (zh) * 2017-07-13 2019-05-17 蚌埠依爱消防电子有限责任公司 一种消防报警系统和消防报警系统的巡检方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100454241C (zh) * 2006-02-28 2009-01-21 华为技术有限公司 一种在共享内存中存储c++对象的方法及装置
CN100428171C (zh) * 2006-12-08 2008-10-22 杭州华三通信技术有限公司 数据平面与控制平面之间的通讯方法
US8667504B2 (en) * 2008-06-20 2014-03-04 Netapp, Inc. System and method for achieving high performance data flow among user space processes in storage system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI514142B (zh) * 2013-11-26 2015-12-21 Synology Inc 儲存系統及其控制方法

Also Published As

Publication number Publication date
CN102200930A (zh) 2011-09-28

Similar Documents

Publication Publication Date Title
CN102200930B (zh) 同步变量映射方法及装置、同步变量释放方法及同步变量删除方法
US11086560B2 (en) Data storage access method, device and apparatus for persistent memory
US8266365B2 (en) Ruggedized memory device
US20020188812A1 (en) Implementing a dual partition flash with suspend/resume capabilities
CN107368362B (zh) 一种对于磁盘读写数据的多线程/多进程无锁处理方法及系统
US20150309735A1 (en) Techniques for reducing read i/o latency in virtual machines
CN103577345A (zh) 提高由多个系统共享的存储高速缓存灵活性的方法和结构
CN103064639A (zh) 数据存储方法及装置
CN101510332B (zh) 一种智能卡中存储空间的管理方法和装置
CN110209493B (zh) 内存管理方法、装置、电子设备及存储介质
WO2016144449A1 (en) Memory reclamation on a computing device
CN111506436A (zh) 实现内存共享的方法、电子设备和共享内存数据管理库
CN111309289A (zh) 一种内存池管理组件
CN103942269A (zh) 对文件系统进行操作的方法和装置
CN103513932A (zh) 一种数据处理方法及装置
CN102209016A (zh) 一种数据处理方法、装置和数据处理系统
CN103744612A (zh) 基于闪存转换层的精简配置的方法及其系统
CN104133970A (zh) 一种数据空间管理方法及装置
CN102508743A (zh) Linux文件系统的多点备份和实时保护方法
US20230252081A1 (en) Scalable range locks
CN101552739A (zh) 一种网络服务流程实例生命周期管理的方法及系统
CN103970597A (zh) 读写均衡的阻塞队列实现方法及装置
CN103809947A (zh) 一种开发需求的自动发布方法和系统
CN102169418B (zh) 一种资源受限设备和数据访问方法
CN108563507A (zh) 一种内存管理方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent for invention or patent application
CB02 Change of applicant information

Address after: 100085 Beijing, Haidian District on the road, No. 3

Applicant after: Beijing Huawei Digital Technology Co.,Ltd.

Address before: 100085 Beijing, Haidian District on the road, No. 3

Applicant before: Huawei Digit Technology Co., Ltd.

Address after: 100085 Beijing, Haidian District on the road, No. 3

Applicant after: Beijing Huawei Digital Technology Co.,Ltd.

Address before: 100085 Beijing, Haidian District on the road, No. 3

Applicant before: Huawei Digit Technology Co., Ltd.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: HUAWEI DIGIT TECHNOLOGY CO., LTD. TO: BEIJING HUAWEI DIGITAL TECHNOLOGY CO., LTD.

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130417

Termination date: 20190526

CF01 Termination of patent right due to non-payment of annual fee