一种基于RT-Linux的经颅磁刺激设备及系统的制作方法

文档序号:32401581发布日期:2022-12-02 19:11阅读:123来源:国知局
一种基于RT-Linux的经颅磁刺激设备及系统的制作方法
一种基于rt-linux的经颅磁刺激设备及系统
技术领域
1.本发明涉及医疗设备领域,尤其涉及经颅磁刺激设备。


背景技术:

2.经颅磁刺激(transcranial magnetic stimulation,tms)是根据电磁感应的原理,对一个磁刺激线圈施加变化的电流,从而产生需要的磁场,产生的磁场作用于人体通常是脑组织部分,引起组织内的电磁场变化,进而刺激人体细胞或神经。经颅磁刺激属于无创的治疗方式,经颅磁刺激在医疗领域的应用最早追溯到1985年,barker等将线圈放置在头部皮肤上,在神经科、康复科、精神科等都有广泛的应用。
3.大脑是一个复杂、精密的系统,经颅磁刺激的控制就显得尤为重要,如果出现意外则会对患者有极大影响。在使用经颅磁刺激仪时,患者佩戴电磁帽,然后用户或者医生输入相关的参数,这就完成了经颅磁刺激的设置等操作,但是经颅磁刺激仪是一直工作的,尤其是对电磁进行控制的进程是不断对经颅磁线圈进行控制的,经颅磁刺激仪中的控制进程的正常运行关乎治疗效果和对患者的影响。实时操作系统确保任务在指定时间内完成,在医疗设备领域有广泛的应用,rt-linux操作系统即为一种常用的实时操作系统,包括linux内核和rtlinux内核,rtlinux内核对linux内核的中断进行管理,进而达到实时任务的实时处理。但是在使用rt-linux操作系统中,由于cache访问的不确定性,容易出现访问cache导致控制进程无法及时处理的问题,这就给经颅磁刺激设备的实时控制电磁带来了安全隐患。


技术实现要素:

4.为了能够保障经颅磁刺激设备对电磁波的实时控制,一方面,本发明提供了一种基于rt-linux的经颅磁刺激设备,所述设备包括处理器、cache、内存,所述设备采用rt-linux操作系统,所述设备还包括以下模块:
5.内存分配模块,用于在rt-linux的rtlinux内核中启动经颅磁刺激控制进程,为所述经颅磁刺激控制进程分配内存,对分配的内存进行分区,并建立所述控制进程中线程和内存分区的对应关系;
6.cache分配模块,用于判断所述设备的处理器的cache级数,若所述cache级数为1,则l1 cache被经颅磁刺激控制进程独用,其他进程直接从内存中读取数据;若所述cache级数大于1,则l1 cache被经颅磁刺激控制进程独用,其他级数的cache被其他进程使用;
7.映射关系模块,用于根据所述对应关系和线程的优先级建立内存分区中内存block和l1 cache的映射关系;若linux内核调整所述映射关系,则将所述映射关系发送给rt-linux内核;
8.执行模块,用于在所述经颅磁刺激控制进程运行时从l1 cache中根据所述映射关系加载数据,实现对经颅磁刺激的控制;并将内存block的访问次数情况发送给linux内核,linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整。
9.优选地,所述对分配的内存进行分区,并建立所述控制进程中线程和内存分区的
对应关系,具体为:
10.遍历所述线程执行的代码的参数,根据所述参数的个数以及类型确定第一权值α;
11.依据所述经颅磁刺激控制进程中每个线程的第一权值α得到内存划分比例,按照所述比例对所述分配的内存的第一部分进行分区;记录为每个线程分配的内存分区与线程的对应关系。
12.优选地,所述根据所述对应关系和线程的优先级建立内存分区中block和l1 cache的映射关系,具体为:
13.根据所述对应关系获取与线程对应的内存分区大小,根据所述内存分区大小和所述线程的优先级确定所述线程分配cache line数量;
14.采用全相联映射的方式建立cache line和内存block的映射关系。
15.优选地,所述根据所述内存分区大小和所述线程的优先级确定所述线程分配cache line数量,具体为:
16.根据所述内存分区大小和所述线程的优先级确定第二权值β,根据每个线程的所述第二权值β的比值,确定为线程分配的cache line数量。
17.优选地,所述内存block的访问次数包括在cache中命中内存block的次数和在cache中未命中内存block的次数。
18.优选地,所述linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整,具体为:
19.记录内存block被访问次数,按照访问次数对内存block进行排序,按照排列顺序,建立所述内存分区与l1 cache的直接映射关系,使得映射到一个cache line的所有内存block访问次数总和相同或相近。
20.优选地,所述分区是指将内存空间划分为若干个一定大小的区域。
21.优选地,所述若干个为所述经颅磁刺激控制进程中线程的个数。
22.另外,本发明还提供了一种基于rt-linux的经颅磁刺激系统,所述系统包括磁疗帽、电源线以及主机,所述主机为如上所述的经颅磁刺激设备。
23.最后,本发明提供了一种计算机可读存储介质,用于存储计算机程序指令,所述计算机程序指令被处理器执行如下的方法:
24.步骤1,在rt-linux的rtlinux内核中启动经颅磁刺激控制进程,为所述经颅磁刺激控制进程分配内存,对分配的内存进行分区,并建立所述控制进程中线程和内存分区的对应关系;
25.步骤2,判断所述设备的处理器的cache级数,若所述cache级数为1,则l1 cache被经颅磁刺激控制进程独用,其他进程直接从内存中读取数据;若所述cache级数大于1,则l1 cache被经颅磁刺激控制进程独用,其他级数的cache被其他进程使用;
26.步骤3,根据所述对应关系和线程的优先级建立内存分区中内存block和l1 cache的映射关系;若linux内核调整所述映射关系,则将所述映射关系发送给rt-linux内核;
27.步骤4,在所述经颅磁刺激控制进程运行时从l1 cache中根据所述映射关系加载数据,实现对经颅磁刺激的控制;并将内存block的访问次数情况发送给linux内核,linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整。
28.本发明将经颅磁刺激控制进程放在rtlinux内核中运行,减少了linux内核中其他
进程对控制进程的干扰;此外,对于所述控制进程中不同的线程分配不同的内存以及l1 cache,提高了cache的命中率,而且在控制进程运行中,能够不断调整内存block和l1 cache的映射关系,实现了动态调整,提高了控制进程的实时性。
附图说明
29.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
30.图1为rt-linux结构示意图;
31.图2为cache line和内存block对应关系示意图;
32.图3为线程、内存分区、cache line的对应关系示意图;
33.图4为实施例10的流程图。
具体实施方式
34.在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
35.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
36.实施例1
37.本发明提供了一种基于rt-linux的经颅磁刺激设备,所述设备包括处理器、cache、内存,所述设备采用rt-linux操作系统,所述设备还包括以下模块:
38.内存分配模块,用于在rt-linux的rtlinux内核中启动经颅磁刺激控制进程,为所述经颅磁刺激控制进程分配内存,对分配的内存进行分区,并建立所述控制进程中线程和内存分区的对应关系;
39.rt-linux操作系统是一种实时操作系统(real-time operating system,rtos),rt-linux包括两个核,分别为普通的linux内核和实时的rtlinux内核,rt-linux操作系统结构如图1所示。
40.本发明将经颅磁刺激控制进程放在rtlinux内核中,避免了linux内核中其他进程对控制进程的干扰。对经颅磁刺激控制进程的启动的触发是当设备的linux内核和rtlinux内核启动后,由rtlinux内核启动控制进程,并将控制进程的启动情况反馈给linux内核,这样可以实现linux内核对控制进程的监控,如果rtlinux内核启动控制进程失败,则在linux
内核启动所述控制进程。
41.控制进程用于控制经颅磁刺激设备发出的刺激强度、频率、模式等,在启动控制进程时,会为控制进程分配内存,同一个进程包括一个或多个线程,分配的内存有一部分是所有线程共享,另外一部分是为每个线程分一部分,被线程独享。在一个实施例中,所述对分配的内存进行分区是指对非线程共享的内存进行分区,一个线程对应一个分区,分区是将内存分为多个区域,也即每个线程对应一个区域。
42.cache分配模块,用于判断所述设备的处理器的cache级数,若所述cache级数为1,则l1 cache被经颅磁刺激控制进程独用,其他进程直接从内存中读取数据;若所述cache级数大于1,则l1 cache被经颅磁刺激控制进程独用,其他级数的cache被其他进程使用;
43.当处理器的控制器在执行程序或任务时,需要加载数据,其过程是硬盘—内存—cache—寄存器—控制器,处理器首先判断cache中是否缓存数据,如果命中则直接读取cache的数据,否则从内存加载数据,并缓存到cache,这样提高了数据从内存到处理器的速度。处理器配置有一级或多级cache,由于在判断cache是否已经缓存数据时,需要比对地址,如果在一级cache中没有,则在二级cache中查找,以此类推,查找过程需要耗费时间,尤其是多级cache中。将l1 cache被所述控制进程独占,一方面可以增加控制进程的内存对应的cache,避免了反复将控制进程的数据替换出cache,另一方面,无需查找其他级别的cache,节省了一部分时间,如果有其它级别的cache,则将其他级别的cache分配给其他进程使用。
44.映射关系模块,用于根据所述对应关系和线程的优先级建立内存分区中内存block和l1 cache的映射关系;若linux内核调整所述映射关系,则将所述映射关系发送给rt-linux内核;
45.一个线程对应一个内存分区,一个内存分区包括一个或多个内存block,同样大小的内存分区对应的l1 cache越大,cache缓存的数据越多,cache命中率也会越高,根据线程和内存分区的对应关系,以及线程的优先级为线程分配l1 cache,能够有针对性的提高高优先级的线程的cache大小,提高整体的cache命中率。cache line是cache和内存(memory)进行数据交换的最小单位,当从内存加载数据到cache中时,并非仅仅加载一个字节,而是加载一个cache line的数据到cache中,关于cache line和内存块(memory block)的关系以及加载过程属于现有技术,对此不在赘述。
46.所述根据所述对应关系和线程的优先级建立内存分区中内存block和l1 cache的映射关系,首先是确定与内存分区对应的cache大小,然后建立内存block和cache line的关系,如图2所示,具体可参见下面的具体实施例3。
47.执行模块,用于在所述经颅磁刺激控制进程运行时从l1 cache中根据所述映射关系加载数据,实现对经颅磁刺激的控制;并将内存block的访问次数情况发送给linux内核,linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整。
48.在控制进程运行时,会先查找在l1 cache中是否缓存数据,如果有,则直接加载,否则,从内存读取数据,并加载到l1 cache中。在经颅磁刺激控制进程运行时,不同的线程优先级不同、执行次数也不同,根据对内存block的访问次数调整内存block和l1cache的关系,实现动态、实时的管理cache,提高cache命中率。
49.实施例2
50.不同的线程执行的程序不同,占用的内存空间也不同,所述对分配的内存进行分区,并建立所述控制进程中线程和内存分区的对应关系,具体为:
51.遍历所述线程执行的代码的参数,根据所述参数的个数以及类型确定第一权值α;
52.依据所述经颅磁刺激控制进程中每个线程的第一权值α得到内存划分比例,按照所述比例对所述分配的内存的第一部分进行分区;记录为每个线程分配的内存分区与线程的对应关系。
53.系统会给进程分配内存,分配的内存包括进程的所有线程共享的部分,还包括每个线程独用的部分,在一个具体实施例中,所述对分配的内存进行分区是指为进程分配的内存中的非所有线程共享的内存部分。例如系统为控制进程分配了100m内存,其中,20m为所有线程共享,剩下80m分配给各个线程。
54.在一个具体实施例中,遍历线程的代码的参数,根据参数个数及类型确定第一权值α,例如线程1有10个参数,5个int类型,5个long类型,则第一权值α=60,同样地,计算得到线程2的第一权值α=20,则对线程1分配60m内存,对线程2分配20m内存。且会记录线程1和60m内存的关系,例如通过关系表记录。
55.实施例3
56.现有技术的cache访问是将所有数据访问命令放在一起,只要有数据请求命令,就会先查找cache,但是有些线程的指令是频繁访问一个参数,如果其他线程的指令将cache中频繁访问的参数替换出去,就需要重新加载参数到cache,本发明采用线程和cache line的对应关系,一个线程对应一个内存分区,一个内存分区对应一定数量的cache line,如图3所示。所述根据所述对应关系和线程的优先级建立内存分区中block和l1 cache的映射关系,具体为:
57.根据所述对应关系获取与线程对应的内存分区大小,根据所述内存分区大小和所述线程的优先级确定所述线程分配cache line数量;
58.采用全相联映射的方式建立cache line和内存block的映射关系。
59.首先是获取线程对应的内存分区,根据内存分区大小和线程优先级确定为该线程或者说该内存分区分配的cache line数量,然后建立所述内存分区中内存block和cache line的映射关系,如图3所示,在图3中,线程1有2个cache line、k-1个内存block,线程2有n-2个cache line、m-k+1个内存block,cache line和内存block的关系如图3。
60.实施例4
61.cache line的数量直接影响为线程分配的cache大小,在一个具体实施例中,所述根据所述内存分区大小和所述线程的优先级确定所述线程分配cache line数量,具体为:
62.根据所述内存分区大小和所述线程的优先级确定第二权值β,根据每个线程的所述第二权值β的比值,确定为线程分配的cache line数量。
63.具体地,根据公式计算每个线程对应的第二权值β,其中mi表示为第i个线程分配的所述内存分区大小,pi表示第i个线程的优先级,p
max
表示所述控制进程中所有线程优先级的最大值,p
min
表示所述控制进程中所有线程优先级的最小值。
64.在一个具体实施例中,在为线程分配cache line前,还包括预留预设数量的cache line,作为所述控制进程所有线程共享内存对应的cache line,所述预设数量为根据共享
内存与所有线程独享内存之和的比例,仍以实施例2为例,若cache line总共有100个,为控制进程分配的100m内存中,20m为所有线程共享,剩下80m分配给各个线程,则预设数量为20。在一个具体实施例中,可分配或者说参与分配的cache line的总数量根据l1 cache大小确定,在另外一个实施例中,可分配或者说参与分配的cache line的总数量根据l1cache的dcache(数据缓存)大小确定。
65.实施例5
66.访问一个参数的次数越多,需要将参数缓存的越久,这样可以避免cache替换导致重新加载到cache。对一个参数的访问次数的统计不仅包括cache命中次数,还包括未命中而访问内存block的次数,在一个具体实施例中,所述内存block的访问次数包括在cache中命中内存block的次数和在cache中未命中内存block的次数。
67.实施例6
68.所述linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整,具体为:
69.记录内存block被访问次数,按照访问次数对内存block进行排序,按照排列顺序,建立所述内存分区与l1 cache的直接映射关系,使得映射到一个cache line的所有内存block访问次数总和相同或相近。在一个实施例中,所述对内存block进行排序是指对同一个线程对应的内存block进行排序。例如对线程1的6个内存block排序为:block3(10次)、block1(8次)、block2(8次)、block4(7次)、block6(3次)、block5(1次),总的访问次数是37,共有3个cache line,每个cache line平均的访问次数为12.3,则可将block3、block5映射到cache line 1,将block1、block6映射到cache line 2,将block2、block4映射到cache line 3。
70.在另外一个实施例中,所述linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整,具体为:
71.记录内存block被访问次数,按照访问次数对内存block进行排序,按照排列顺序,从前往后依次将内存block分配给每个cache line,然后从cache line的最后一个开始,按照排列顺序依次将内存block分配给每个cache line,如此反复,直到所有内存block分配完毕。仍以上面的数据为例,block3(10次)、block1(8次)、block2(8次)、block4(7次)、block6(3次)、block5(1次),第一遍将block3、1、2依次分配给cache line1、2、3,然后将block4、6、5依次分配给cache line3、2、1,最后结果是:将block3、block5映射到cache line 1,将block1、block6映射到cache line 2,将block2、block4映射到cache line 3。
72.实施例7
73.在一个实施例中,所述分区是指将内存空间划分为若干个一定大小的区域。
74.实施例8
75.在一个实施例中,所述若干个为所述经颅磁刺激控制进程中线程的个数。
76.实施例9
77.本发明还提供了一种基于rt-linux的经颅磁刺激系统,所述系统包括磁疗帽、电源线以及主机,所述主机为如上实施例1-8所述的经颅磁刺激设备。
78.实施例10
79.本发明提供了一种计算机可读存储介质,用于存储计算机程序指令,所述计算机
程序指令被处理器执行如下的方法,如图4所示:
80.步骤1,在rt-linux的rtlinux内核中启动经颅磁刺激控制进程,为所述经颅磁刺激控制进程分配内存,对分配的内存进行分区,并建立所述控制进程中线程和内存分区的对应关系;
81.步骤2,判断所述设备的处理器的cache级数,若所述cache级数为1,则l1 cache被经颅磁刺激控制进程独用,其他进程直接从内存中读取数据;若所述cache级数大于1,则l1 cache被经颅磁刺激控制进程独用,其他级数的cache被其他进程使用;
82.步骤3,根据所述对应关系和线程的优先级建立内存分区中内存block和l1 cache的映射关系;若linux内核调整所述映射关系,则将所述映射关系发送给rt-linux内核;
83.步骤4,在所述经颅磁刺激控制进程运行时从l1 cache中根据所述映射关系加载数据,实现对经颅磁刺激的控制;并将内存block的访问次数情况发送给linux内核,linux内核根据所述访问次数对内存block和l1 cache的映射关系进行调整。
84.实施例9、10的其他部分同实施例2-7,此处不再赘述。
85.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
86.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1