一种工控终端协同响应系统动态内存调度方法及装置

阅读: 评论:0

著录项
  • CN202211399934.8
  • 20221109
  • CN115599553A
  • 20230113
  • 国网辽宁省电力有限公司;南京南瑞信息通信科技有限公司;国网辽宁省电力有限公司信息通信分公司
  • 刘苇;祁龙云;周小明;孙柏颜;杨维永;李向南;魏兴慎;唱友义;俞建业;刘颖;褚智亮;宋为;杨康乐;王梓;刘益敏
  • G06F9/50
  • G06F9/50

  • 辽宁省沈阳市和平区宁波路18号
  • 辽宁(21)
  • 南京纵横知识产权代理有限公司
  • 董建林
摘要
本发明公开了一种工控终端协同响应系统动态内存调度方法及装置,所述方法包括根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块;检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪;检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权;本方法基于系统编程语言Rust的所有权机制和类型安全的语言特性,设计了一个内存存储理器,实现了对动态内存调度的性能和可靠性的保障,提高了工控终端协同响应系统的整体运行性能和安全性。
权利要求

1.一种工控终端协同响应系统动态内存调度方法,其特征在于,应用于存储管理器,包括:

根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

2.根据权利要求1所述的工控终端协同响应系统动态内存调度方法,其特征在于,根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,包括:

遍历工控终端协同响应系统内存空间的空闲内存块状况,并据此创建一个所有权的授予和转授受到控制的空闲链表块,其中,所述空闲链表块记录了整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序,进程通过向系统提出申请以访问内存地址空间,否则都将被视为非法操作,不被允许。

3.根据权利要求1所述的工控终端协同响应系统动态内存调度方法,其特征在于:所述使用预先设定的算法为该进程分配空闲内存块时,使用的是最先匹配算法。

4.根据权利要求1所述的工控终端协同响应系统动态内存调度方法,其特征在于:所述数据段和栈段的所有者只能是申请的进程,任何进程对不属于自己的数据段和栈段的访问都是非法的访问。

5.根据权利要求1所述的工控终端协同响应系统动态内存调度方法,其特征在于:所述回收该进程的所占据内存地址空间的所有权后,将回收的地址空间按照内存块的地址大小,重新插入到空闲链表块中的设定位置。

6.根据权利要求1所述的工控终端协同响应系统动态内存调度方法,其特征在于:所述检测进程申请内存空间的请求时,先检查提交申请动态内存空间的进程是否支持共享内存,若该进程不支持共享内存,则正常为其分配代码段、数据段和栈段三者所需的内存空间,若该进程支持共享代码,遍历一个相较于工控终端协同响应系统更加轻量级的共享进程信息链表,以创建代码段的托管器,该托管器持有代码段的所有权,托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1,发起申请的进程通过Rust中借用机制获取托管器托管的代码段的使用权。

7.根据权利要求6所述的工控终端协同响应系统动态内存调度方法,其特征在于:对于支持共享代码的进程,追踪时只会追踪共享进程对数据段、栈段的所有权,以及追踪托管器对代码段的所有权。

8.根据权利要求7所述的工控终端协同响应系统动态内存调度方法,其特征在于:当一个进程释放其内存时,若检测到该进程启用了共享内存的功能,将托管器的计数器数值减1,随后判断计数器数值是否为0,若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。

9.一种工控终端协同响应系统动态内存调度装置,其特征在于,包括:

创建模块,用于根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

分配模块,用于检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

追踪模块,用于检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

回收模块,用于检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

10.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于,所述创建模块包括遍历单元和创建单元,其中:

遍历单元,用于遍历工控终端协同响应系统内存空间的空闲内存块状况;

创建单元用于根据遍历单元遍历后的结果创建一个所有权的授予和转授受到控制的空闲链表块,其中,所述空闲链表块记录了整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序,进程通过向系统提出申请以访问内存地址空间,否则都将被视为非法操作,不被允许。

11.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述分配模块包括第一检测单元和分配单元,其中:

所述第一检测单元用于检测进程申请内存空间的请求,

所述分配单元用于接收第一检测单元的检测信号后,使用预先设定的算法为该进程分配空闲内存块,其中,所述分配单元使用预先设定的算法为该进程分配空闲内存块时,使用的是最先匹配算法。

14.根据权利要求11所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述第一检测单元还包括共享内存检测子单元,所述共享内存检测子单元包括遍历子单元和创建子单元,其中:

所述共享内存检测子单元用于在检测进程申请内存空间的请求时,先检查提交申请动态内存空间的进程是否支持共享内存,若该进程不支持共享内存,则发送检测信号至分配单元,通过分配单元正常为其分配代码段、数据段和栈段三者所需的内存空间;若该进程支持共享代码,通过遍历子单元遍历一个相较于工控终端协同响应系统更加轻量级的共享进程信息链表,通过创建子单元创建代码段的托管器,该托管器持有代码段的所有权,托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1,发起申请的进程通过Rust中借用机制获取托管器托管的代码段的使用权。

12.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述追踪模块包括第二检测单元和追踪单元,其中:

所述第二检测单元用于检测空闲内存块被分配给请求的进程,

所述追踪单元,用于接收第二检测单元的检测信号,对代码段、数据段和栈段进行所有权追踪,其中,数据段和栈段的所有者只能是申请的进程,任何进程对不属于自己的数据段和栈段的访问都是非法的访问。

13.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述回收模块还用于在回收该进程的所占据内存地址空间的所有权后,将回收的地址空间按照内存块的地址大小,重新插入到空闲链表块中的设定位置。

15.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述追踪单元追踪时,对于支持共享代码的进程,只会追踪共享进程对数据段、栈段的所有权,以及追踪托管器对代码段的所有权。

16.根据权利要求9所述的工控终端协同响应系统动态内存调度装置,其特征在于:所述回收模块包括内存释放单元和回收单元,其中,

所述内存释放单元用于检测进程运行结束时,释放内存;

回收单元,用于回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中;

所述内存释放单元释放一个进程的内存时,若检测到该进程启用了共享内存的功能,将托管器的计数器数值减1,随后判断计数器数值是否为0,若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。

17.一种工控终端协同响应系统动态内存调度装置,其特征在于:包括处理器及存储介质;

所述存储介质用于存储指令;

所述处理器用于根据所述指令进行操作以执行根据权利要求1~8任一项所述方法的步骤。

18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述的计算机程序被处理器执行时实现如权利要求1-8任一所述的方法步骤。

说明书
技术领域

本发明涉及一种工控终端协同响应系统动态内存调度方法及装置,属于工控终端协同响应系统领域。

长久以来内隔离核子系统的能力一直是提高整个系统的可靠性和安全性的重要的机制。目前较为通用的故障隔离机制是依赖地址空间进行隔离。这种基于硬件地址空间的隔离机制的开销是巨大的,因此目前主流的工控终端协同响应系统所采用的都是粗细粒度的隔离机制。

由于Rust之前的系统级编程语言(如C,C++)都是类型不安全的,它们无法支持垃圾收集这样的机制,因此无法保证内存的安全性。而另一方面支持垃圾收集机制(GarbageCollection,GC)的编程语言(如Java),巨大的运行开销,致使它们无法在系统级的编程中进行使用。

本发明的目的在于克服现有技术中的不足,提供一种工控终端协同响应系统动态内存调度方法及装置,通过使用Rust所具有的所有权机制和类型安全的语言特性,来解决基于硬件的粗粒度内存地址空间隔离问题,以期在软件级的层面上实现可靠,高效的工控终端协同响应系统动态内存调度模块。

为达到上述目的,本发明是采用下述技术方案实现的:

第一方面,本发明提供了一种工控终端协同响应系统动态内存调度方法,应用于存储管理器,包括:

根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

进一步的,根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,包括:

遍历工控终端协同响应系统内存空间的空闲内存块状况,并据此创建一个所有权的授予和转授受到控制的空闲链表块,其中,所述空闲链表块记录了整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序,进程通过向系统提出申请以访问内存地址空间,否则都将被视为非法操作,不被允许。

进一步的,所述使用预先设定的算法为该进程分配空闲内存块时,使用的是最先匹配算法。

进一步的,所述数据段和栈段的所有者只能是申请的进程,任何进程对不属于自己的数据段和栈段的访问都是非法的访问。

进一步的,所述回收该进程的所占据内存地址空间的所有权后,将回收的地址空间按照内存块的地址大小,重新插入到空闲链表块中的设定位置。

进一步的,所述检测进程申请内存空间的请求时,先检查提交申请动态内存空间的进程是否支持共享内存,若该进程不支持共享内存,则正常为其分配代码段、数据段和栈段三者所需的内存空间,若该进程支持共享代码,遍历一个相较于工控终端协同响应系统更加轻量级的共享进程信息链表,以创建代码段的托管器,该托管器持有代码段的所有权,托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1,发起申请的进程通过Rust中借用机制获取托管器托管的代码段的使用权。

进一步的,对于支持共享代码的进程,追踪时只会追踪共享进程对数据段、栈段的所有权,以及追踪托管器对代码段的所有权。

进一步的,当一个进程释放其内存时,若检测到该进程启用了共享内存的功能,将托管器的计数器数值减1,随后判断计数器数值是否为0,若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。

第二方面,本发明提供一种工控终端协同响应系统动态内存调度装置,包括:

创建模块,用于根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

分配模块,用于检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

追踪模块,用于检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

回收模块,用于检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

进一步的,所述创建模块包括遍历单元和创建单元,其中:

遍历单元,用于遍历工控终端协同响应系统内存空间的空闲内存块状况;创建单元用于根据遍历单元遍历后的结果创建一个所有权的授予和转授受到控制的空闲链表块,其中,所述空闲链表块记录了整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序,进程通过向系统提出申请以访问内存地址空间,否则都将被视为非法操作,不被允许。

进一步的,所述分配模块包括第一检测单元和分配单元,其中:

所述第一检测单元用于检测进程申请内存空间的请求,

所述分配单元用于接收第一检测单元的检测信号后,使用预先设定的算法为该进程分配空闲内存块,其中,所述分配单元使用预先设定的算法为该进程分配空闲内存块时,使用的是最先匹配算法。

进一步的,所述追踪模块包括第二检测单元和追踪单元,其中:

所述第二检测单元用于检测空闲内存块被分配给请求的进程,

所述追踪单元,用于接收第二检测单元的检测信号,对代码段、数据段和栈段进行所有权追踪,其中,数据段和栈段的所有者只能是申请的进程,任何进程对不属于自己的数据段和栈段的访问都是非法的访问。

进一步的,所述回收模块还用于在回收该进程的所占据内存地址空间的所有权后,将回收的地址空间按照内存块的地址大小,重新插入到空闲链表块中的设定位置。

进一步的,所述第一检测单元还包括共享内存检测子单元,所述共享内存检测子单元包括遍历子单元和创建子单元,其中:

所述共享内存检测子单元用于在检测进程申请内存空间的请求时,先检查提交申请动态内存空间的进程是否支持共享内存,若该进程不支持共享内存,则发送检测信号至分配单元,通过分配单元正常为其分配代码段、数据段和栈段三者所需的内存空间;若该进程支持共享代码,通过遍历子单元遍历一个相较于工控终端协同响应系统更加轻量级的共享进程信息链表,通过创建子单元创建代码段的托管器,该托管器持有代码段的所有权,托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1,发起申请的进程通过Rust中借用机制获取托管器托管的代码段的使用权。

进一步的,所述追踪单元追踪时,对于支持共享代码的进程,只会追踪共享进程对数据段、栈段的所有权,以及追踪托管器对代码段的所有权。

进一步的,所述回收模块包括内存释放单元和回收单元,其中,

所述内存释放单元用于检测进程运行结束时,释放内存;

回收单元,用于回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中;

所述内存释放单元释放一个进程的内存时,若检测到该进程启用了共享内存的功能,将托管器的计数器数值减1,随后判断计数器数值是否为0,若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。

第三方面,本发明提供一种工控终端协同响应系统动态内存调度装置,包括处理器及存储介质;

所述存储介质用于存储指令;

所述处理器用于根据所述指令进行操作以执行根据前述任一项所述方法的步骤。

第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述的计算机程序被处理器执行时实现如前述任一所述的方法步骤。

与现有技术相比,本发明所达到的有益效果:

(1)本发明提出的是一种工控终端协同响应系统动态内存调度方法及装置,通过创建一个空闲链表块,在检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块,同时对代码段、数据段和栈段进行所有权追踪,并在检测进程运行结束时,释放内存,回收该进程的所占据内存地址空间的所有权至空闲链表块中,有效的提高了内存空间的利用率。

(2)本发明提出的是一种工控终端协同响应系统动态内存调度方法及装置,通过创建的存储调度器来负责工控终端协同响应系统的内存调度,实现对内存地址空间的有效保护和调度效率的提高,存储管理器所维护的空闲链表的所有权受到严格保护,任何对于内存地址空间的请求都将通过存储管理器来完成。

(3)本发明提出的是一种工控终端协同响应系统动态内存调度方法及装置,在进程支持共享代码时,通过使用Rust来创建一个托管器来负责持有共享代码段的所有权,记录共享改代码段进程的数量,从而带来以下的好处:1)对于代码段的共享将会减少进程在磁盘上调入内存的数据量;2)对于代码段的共享还将减少进程对内存空间的占有量,提高了内存所能容纳的进程数量,因此提高内存空间的利用率;3)通过创建托管器,以及一个轻量级的共享进程信息链表,从而减少了遍历工控终端协同响应系统进程表,以确认是否已有共享该代码段的进程,减少动态内存的调度时间。

(4)本发明提出的是一种工控终端协同响应系统动态内存调度方法及装置,在基于进程的生命周期提出了进程的作用域概念,一个对它所持有的数据段和栈段的所有权将会进程的作用域边界处失效,以防止其他进程对于该数据段和栈段进行恶意或是无意的数据篡改和破坏,致使进程运行出错甚至崩溃。

(5)本发明提出的是一种工控终端协同响应系统动态内存调度方法及装置,通过托管器和Rust中借用机制,将使得共享代码段的进程在释放内存空间时,不必再遍历进程表,以确认是否释放进程的代码段,提高工控终端协同响应系统动态内存调度的运行效率。

图1是本发明实施例提供的一种工控终端协同响应系统动态内存调度方法的流程图;

图2是本发明实施例提供的托管器的工作流程图;

图3是本发明实施例提供的代码段、数据段、栈段的所有权的归属示意图;

图4是本发明实施例提供的支持共享模式下,进程,托管器和内存空间的关系示意图。

下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

实施例1

本实施例介绍一种工控终端协同响应系统动态内存调度方法,应用于存储管理器,包括:

根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

本实施例提供的工控终端协同响应系统动态内存调度方法,以工控终端协同响应系统为例,存在两种情况需要为其分配内存空间:1)当进程执行fork()系统调用时,需要分配动态内存空间给其子进程2)当进程执行了exec()系统调用修改了它的内存映像,此时需要释放其原本所占内存空间,为其分配新的内存空间。

工控终端协同响应系统的隔离能力与性能一直以来处于动态的平衡状态,而这种平衡正在随着Rust的出现逐渐被打破。Rust在不需要GC的前提下,通过一个所有权受限制的所有权模型来加强类型和内存安全性。本发明提出了一种基于Rust的高性能可信的动态内存调度描述方法,对照附图1,实现了高效,安全的动态内存调度,包括以下两方面:通过引入存储管理器来追踪和管理空闲块链表、代码段、数据段、栈段的所有权;通过使用所有权机制、借用机制在托管器和轻量级的共享进程信息链表的帮助下,提供了对共享内存进行更加高效的调度方法。

为了保护空闲块链表,以防止对于动态空间的非法申请。本发明将由存储管理器来负责持有和管理空闲块链表的所有权。任何进程对于动态内存的申请都需要通过存储管理器来完成。空闲块链表的生命周期也将只存在存储管理器的作用域范围内,在次作用域外对于空闲链表的访问都将视为非法,具体表现为相关代码在编译时无法通过。

在常见的工控终端协同响应系统动态内存调度模块中,当支持共享内存时。进程申请动态内存空间需要遍历进程表,以确认是否已有进程打开了本次申请进程的可执行文件,进而决定是否为其分配代码段的动态内存空间;在进程释放内存时仍然需要遍历工控终端协同响应系统进程表,以确认是否还有进程在使用共享的代码段,进而决定是否让存储管理器回收代码段的内存空间。本发明为了解决遍历工控终端协同响应系统进程表所带来的大量时间开销问题,在当前DDR5内存发布,单根内存容量最大可达512GB的背景下,采用“以空间换时间”的理念。让存储管理器维护一个轻量级的共享进程信息链表。从而在申请和释放内存空间时取代完整的工控终端协同响应系统进程表,实现更高效的内存调度。

具体实施步骤如图1、图2所示,包括以下步骤:

在工控终端协同响应系统初始化的时候创建存储管理器,存储管理器遍历工控终端协同响应系统内存空间的空闲内存块状况,并据此创建一个所有权受到严格保护的空闲块链表。该空闲块链表将记录整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序。任何企图获得内存地址空间的行为都必须通过存储管理器进行申请。存储管理器还会创建一个空的共享进程信息链表,该信息链表的所有权归存储管理器所拥有。该链表的链表节点将会存储共享进程所使用的可执行文件的标识信息,共享该代码段的进程的数量,代码段的位置。

当存储管理器检测到申请动态内存空间的请求后,存储管理器会去识别该进程是否支持共享内存。以工控终端协同响应系统为例,将会在其进程控制块(process controlblock,PCB)由结构task_struct所定义的数据结构中增加一个标识位,以标识该进程是否支持共享内存。若不支持共享内存,则存储管理器遍历空闲链表块,采用最先匹配算法为其分配代码段,数据段,栈段所需的内存空间。若支持共享内存,则存储管理器将会遍历自己维护的共享进程信息链表,以确认是否已有另一个进程打开了同一个可执行文件。若没有另一个进程已打开同一个可执行文件,存储管理器将会创建一个托管器,并初始化托管器。存储管理器将分配的代码段的所有权交由托管器持有,并将托管器中的计数器自增1,数据段和栈段的所有权将由进程自己所持有,进程将借用代码段的使用权。若可执行文件已经被进程打开,则直接通过共享进程信息链表上的信息为进程恢复该代码段的托管器,并借用代码段托管器所托管的代码段的使用权,将托管器中计数器的值自增1。

有关于进程各段内存空间的所有权和使用权情况如附图3,4所示。存储管理器会对分配的代码段、数据段和栈段的所有权进行追踪。其中数据段和栈段的所有者只能是申请的进程,因此任何进程对不属于自己的数据段和栈段的访问都是非法的访问。对于不支持共享内存的进程来说,代码段的所有权归该进程所有;对于支持共享内存的进程来说,代码段的所有权归代码段的托管器所持有,进程只能通过Rust所提供的借用机制获得使用权。

当支持共享内存的进程被中断的时候,存储管理器会将该进程以及代码段托管器的相关信息存放进共享进程信息链表中,以便于在该进程的下次恢复运行时重现代码段托管器的信息。

当进程运行结束,释放内存空间时。若该进程不支持共享内存,则正常释放其所持有的代码段、数据段和栈段的所有权,由存储管理器回收动态内存空间,更新空闲块链表。若该进程支持共享进程,存储管理器先回收该进程的数据段和栈段的所有权。随后存储管理器将托管器中的计数器值自减1,随后判断该值是否为0。若为0代表最后一个使用该代码段的进程已结束运行,托管器将代码段的所有权释放,存储管理器更新空闲块链表,并删除掉共享进程信息链表中有关于共享该代码段链表节点的信息;若计数器值不为0,则代表还有进程在使用该代码段,存储管理器将不回收代码段的所有权,只是将数据段和栈段所释放的内存空间更新到空闲块链表中,并将计数器的值更新到共享进程信息链表的相关链表结点中。

实施例2

本实施例介绍一种工控终端协同响应系统动态内存调度方法,包括以下步骤:

S1、在工控终端协同响应系统初始化的时候创建存储管理器,存储管理器遍历工控终端协同响应系统内存空间的空闲内存块状况,并据此创建一个所有权受到严格保护的空闲块链表。该空闲块链表将记录整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序。任何企图获得内存地址空间的行为都必须通过存储管理器进行申请,否则都将被视为非法操作,不被允许。

S2、当检测到进程向存储管理器提交申请内存空间的请求时,存储管理器将根据进程请求的内存空间大小,使用最先匹配算法遍历空闲链表为该进程分配空闲内存块。(本发明只是以最先匹配算法为例,虽然目前最先匹配算法在绝大多数应用场景下调度的效率都是最高的,但具体使用何种空闲块调度算法还是要依据具体的应用场景而定)。

S3、当空闲块被存储管理器分配给申请的进程后,工控终端协同响应系统会对分配的代码段、数据段和栈段的所有权进行追踪。其中数据段和栈段的所有者只能是申请的进程,因此任何进程对不属于自己的数据段和栈段的访问都是非法的访问。利用所有权机制实现这一点将会保证进程所持用的数据不会被恶意或无意的篡改和破坏,维护了数据的可靠性和安全性。为了实现这一点,本发明将基于进程生命周期提出进程作用域的概念。一个进程对其所持有的数据段和栈段所有权将会被限制在该作用域范围内。

S4、当一个进程运行结束时,它所占据的内存空间将会被释放。存储管理器将会回收该进程所占据的内存地址空间的所有权。并将回收的地址空间按照内存块的地址大小,重新插入到空闲块链表中的合适位置。

存储管理器支持共享代码段。对于支持共享内存的进程,存储管理器将会创建一个代码段的托管器,托管器会持有共享代码段的所有权。并且维护一个计数器,该计数器将会记录该共享代码段的进程数量。当支持共向内存的进程被中断的时候,存储管理器会将该进程托管器的信息存入到存储管理器所维护的一个轻量级的共享进程信息链表中。该信息链表将存储共享进程的有关于共享内存部分的信息,如共享代码段的标识信息,共享进程的数量。因此相较于工控终端协同响应系统的整个进程表是轻量级。

优选的,在前述S2阶段,存储管理器为进程分配动态内存空间时,存储管理器将会检查提交申请动态内存空间的进程是否支持共享内存。若该进程不支持共享内存,则正常为其分配代码段、数据段和栈段三者所需的内存空间。在使用C或C++实现的支持共享代码的工控终端协同响应系统中,若该进程支持共享代码,则将会检查工控终端协同响应系统进程表,当检测到已有另一个进程使用了该申请进程的可执行文件时,则只会为该进程申请栈段和数据段的内存空间。该进程将会与之前检测到的进程共享代码段。但是在本发明中,当存储管理器检测到申请内存空间的进程支持共享存储的时候,将会去遍历一个相较于工控终端协同响应系统进程表更加轻量级的共享进程信息链表,以创建代码段的托管器,该托管器将会持有代码段的所有权。托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1。发起申请的进程将通过Rust中借用机制获取托管器托管的代码段的使用权。由于一个进程的可执行代码在运行的时候是不被允许修改,因此借用机制所具有的无法修改借用对象的缺点将会被克服。

优选的,在前述S3阶段,对于共享代码的进程来说,代码段的所有权本应当为共享该代段的所有进程所共同拥有。但是在本发明中,代码段的所有权将由托管器所持有,支持共享内存的进程只会持有代码段的使用权。因此存储管理器将只会追踪共享进程对数据段、栈段的所有权。存储管理器将会追踪托管器对代码段的所有权。

优选的,在前述S4阶段,当一个进程释放其内存时,若存储管理器检测到该进程启用了共享内存的功能,将首先释放该进程持有的数据段和栈段。在使用C或C++实现的支持共享代码的工控终端协同响应系统中,此后的存储管理器应当去遍历进程表,检测是否任然有其它的进程在使用该段代码段。只有当没有其他进程在使用该代码段的时候,才会将该进程的代码段释放,否则将会继续保留代码段,直至拥有代码段的最后一个进程释放内存空间。但是在本发明中,代码段的所有权属于托管器,支持共享内存的进程所持有的仅仅是该代码段的使用权,而不具有所有权,因此进程释放内存空间时无需遍历进程表。当存储管理器发现共享代码段的进程提出释放内存的请求的时候将会将托管器的计数器数值减1,随后判断检测器数值是否为0,即已无进程对所托管的代码段进程共享。若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。再由存储管理器回收内存块,并将其插入空闲块链表中合适的位置。

实施例3

本实施例提供一种工控终端协同响应系统动态内存调度装置,包括:

创建模块,用于根据工控终端协同响应系统的内存空间状况,创建一个空闲链表块,所述空闲链表块包括多个空闲内存块,用于登记系统内存中的空闲内存情况;

分配模块,用于检测进程申请内存空间的请求时,使用预先设定的算法为该进程分配空闲内存块;

追踪模块,用于检测空闲内存块被分配给请求的进程时,对代码段、数据段和栈段进行所有权追踪,进行权限检测,避免系统非法的访问和申请操作;

回收模块,用于检测进程运行结束时,内存被释放,回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中。

具体的,所述创建模块包括遍历单元和创建单元,其中:

遍历单元,用于遍历工控终端协同响应系统内存空间的空闲内存块状况;创建单元用于根据遍历单元遍历后的结果创建一个所有权的授予和转授受到控制的空闲链表块,其中,所述空闲链表块记录了整个工控终端协同响应系统动态内存空间的所有空闲内存块,并根据内存地址从低到高进行排序,进程通过向系统提出申请以访问内存地址空间,否则都将被视为非法操作,不被允许。

具体的,所述分配模块包括第一检测单元和分配单元,其中:

所述第一检测单元用于检测进程申请内存空间的请求,

所述分配单元用于接收第一检测单元的检测信号后,使用预先设定的算法为该进程分配空闲内存块,其中,所述分配单元使用预先设定的算法为该进程分配空闲内存块时,使用的是最先匹配算法。

具体的,所述追踪模块包括第二检测单元和追踪单元,其中:

所述第二检测单元用于检测空闲内存块被分配给请求的进程,

所述追踪单元,用于接收第二检测单元的检测信号,对代码段、数据段和栈段进行所有权追踪,其中,数据段和栈段的所有者只能是申请的进程,任何进程对不属于自己的数据段和栈段的访问都是非法的访问。

具体的,所述回收模块还用于在回收该进程的所占据内存地址空间的所有权后,将回收的地址空间按照内存块的地址大小,重新插入到空闲链表块中的设定位置。

具体的,所述第一检测单元还包括共享内存检测子单元,所述共享内存检测子单元包括遍历子单元和创建子单元,其中:

所述共享内存检测子单元用于在检测进程申请内存空间的请求时,先检查提交申请动态内存空间的进程是否支持共享内存,若该进程不支持共享内存,则发送检测信号至分配单元,通过分配单元正常为其分配代码段、数据段和栈段三者所需的内存空间;若该进程支持共享代码,通过遍历子单元遍历一个相较于工控终端协同响应系统更加轻量级的共享进程信息链表,通过创建子单元创建代码段的托管器,该托管器持有代码段的所有权,托管器中的计数器的数值将会在托管器初次创建的时候初始化为0,此后若检测到进程对托管的代码段发起共享请求则会自增1,发起申请的进程通过Rust中借用机制获取托管器托管的代码段的使用权。

具体的,所述追踪单元追踪时,对于支持共享代码的进程,只会追踪共享进程对数据段、栈段的所有权,以及追踪托管器对代码段的所有权。

具体的,所述回收模块包括内存释放单元和回收单元,其中,

所述内存释放单元用于检测进程运行结束时,释放内存;

回收单元,用于回收该进程的所占据内存地址空间的所有权,同时释放的内存被登记到空闲链表块中;

所述内存释放单元释放一个进程的内存时,若检测到该进程启用了共享内存的功能,将托管器的计数器数值减1,随后判断计数器数值是否为0,若为0,则释放该代码段,销毁托管器,删除掉共享进程信息链表中有关的信息。

实施例4

本实施例提供一种工控终端协同响应系统动态内存调度装置,包括处理器及存储介质;

所述存储介质用于存储指令;

所述处理器用于根据所述指令进行操作以执行根据实施例1或2中任一项所述方法的步骤。

实施例5

本实施例提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于:该程序被处理器执行时实现实施例1或2中任一项所述方法的步骤。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

本文发布于:2023-04-15 06:14:35,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/87624.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图