一种对内存进行保护的方法,包括:(a)定义需保护的内存区域,将所有需要保护的内存定义在一个连续的空间上;(b)在操作系统初始化时,对需要保护的所有内存加页保护;(c)需要对被保护的内存进行写操作时,对该写操作所涉及到的内存的页面进行去页保护;(d)对所述已经去页保护的页面进行写操作;(e)对已进行写操作的页面重新加页保护。本发明专利技术可对内存整体进行有效的保护,且对被保护的内存区域频繁进行合法的写操作时,不会因为该内存已进行的保护而降低系统效率,并且能发现对被保护的内存区域内任何一点所进行的非法写操作。
【技术实现步骤摘要】
本专利技术涉及到一种内存保护方法,具体来说,涉及一种对操作系统下频繁读写的内存进行保护的方法。
技术介绍
在操作系统中一般提供以页面为单位的内存保护机制,应用层可以调用操作系统的接口函数对某一个页面进行保护操作或去保护操作,这些保护页的属性为不可访问,当有操作访问到保护页所在的区域,可认为该操作就有非法修改重要内存的企图,同时,实时操作系统可以很快的发现并报告内存访问异常,便于及时的发现异常隐患。具体来说,就是当被保护的内存页发生写操作时CPU会产生中断,应用层可以通过中断处理函数对这种非法操作进行现场记录,以利于问题定位,也可以在中断中进行挽救性处理或重新启动系统以保证应用业务的准确性。内存保护会对系统资源有一定的消耗,因而一般用来保护容量较小、写操作较少的数据区域,一般不会对大面积、写操作频繁的数据区进行保护,特别是实时操作系统对系统性能要求高,如果其对大量内存区域(几十兆,上百兆)频繁的去保护、保护操作,则所带来的系统开销是非常大的,甚至不能忍受。如图1所示,是现有的一种内存保护方法的示意图,其是在需要保护的大面积内存的两端各设置一个保护页,即在该大面积内存的起始地址及结束地址处均设一个操作系统内存保护页;对该两个保护页进行非法操作就会触发CPU中断。但是这种方法也有不足之处,因为只有对内存的访问是连续的,则本专利技术能达到保护的作用。但是大部分非法访问是非连续的,是随机的,跳跃性访问。在本方法中,如果直接对大面积内存中两个保护页之间的部分进行非法写入,则不会触发操作系统的内存保护机制,即无法发现这种非法写入,故这种方法实际上不能对需要保护的内存区域提供有效的保护。现在还有一种方法,是对需要保护的大面积内存全部保护起来,在需要对这部分内存进行合法的写操作的时候,将全部内存去保护,写完后再全部加保护。但是这种方法也存在有不足之处,这种方法在在内存量比较小的情形下是可行的,但是当内存容量达到一定限度(如10M字节)时,则这种方法所带了的系统开销就是不可忽视的,会严重影响系统的实时性。因此这种方法在实时操作系统很少采用。
技术实现思路
本专利技术要解决的技术问题在于,为克服现有技术中的不足,而提供一种对大面积内存进行保护的方法,可在实时操作系统中,在不降低系统效率的情况下,利用操作系统提供的页保护接口函数,对大面积的内存实施整体有效的保护。本专利技术为解决其技术问题所提供的技术方案是提供,包括(a)定义需保护的内存区域,将所有需要保护的内存定义在一个连续的空间上;(b)在操作系统初始化时,对需要保护的所有内存加页保护;(c)需要对被保护的内存进行写操作时,对该写操作所涉及到的内存页面进行去页保护;(d)对所述已进行去页保护的内存页面进行写操作;(e)对所述已进行写操作的内存页面重新加页保护。在本专利技术的对内存进行保护的方法中,步骤(a)包括在需要保护的内存区域的起始地址之前及结束地址之后各预留一个页面大小的内存区域。在本专利技术的对内存进行保护的方法中,所述步骤(a)中在定义被保护的内存区域的步骤可通过指针操作将内存区域的起始地址、结束地址定义在操作系统内存页面的起始位置。在本专利技术的对内存进行保护的方法中,所述内存区域存储有通讯系统中设备的用户配置信息或/及自我学习信息。在本专利技术的对内存进行保护的方法中,所述内存区域为通讯系统中的话单池。在本专利技术的对内存进行保护的方法中,所述步骤(c)包括取出该写操作的内存的起始地址及需写操作的内存的长度,确定该写操作所涉及的内存页面信息。在本专利技术的对内存进行保护的方法中,所述加页保护和去页保护均是通过调用操作系统页保护接口函数来实现。在本专利技术的对内存进行保护的方法中,进一步包括,对被保护的内存区域进行非法写操作时,产生CPU中断的步骤。在本专利技术的对内存进行保护的方法中,所述操作系统为实时操作系统。实施本专利技术的,具有以下有益效果利用操作系统提供的页保护接口函数,对内存进行整体有效的保护。对被保护的内存区域频繁进行合法的写操作不会因为内存保护而降低系统效率。且能够发现对被保护的内存区域内任何一点所进行的非法写操作。附图说明图1是是现有的一种内存保护方法的示意图;图2是本专利技术对内存进行保护的方法的流程图;图3是本专利技术对内存进行保护的方法的定义内存区域的示意图;图4是本专利技术对内存进行保护的方法的增加页保护的示意图;图5是本专利技术本专利技术对内存进行保护的方法中对已保护的内存进行写操作的示意图。具体实施例方式如图2所示,是本专利技术的主流程图。第一步要定义需保护的内存区域。该过程可参见图3,在本专利技术中,在内存划分上将所有需要保护的内存定义在一个连续的空间上(需要说明一下,对应用层可见的一般是虚拟地址,虚拟地址是连续的情况下,对应物理地址可以是不连续的,但是保护一个虚拟地址页面也就是保护物理地址的对应的页面,对应用层的操作没有影响,此处内存区域可以是连续的虚拟地址或者是连续的物理地址),在需要保护的内存区域前后各预留一个页面大小的内存区域。,应用层定义内存区域是在编译时分配的,所以需要保护内存的起始地址并不一定在一个页面的开始位置,在对起始位置和结束位置加内存保护时必然对该位置所属页面进行保护,为防止将不需要保护的数据区加上保护,可以在内存的起始地址之前和结束地址之后均预留一个页面大小不再使用的内存区域。图中虚线表示操作系统定义的页面分界。第二步在操作系统初始化时,允许业务操作前对需要保护的所有内存,调用操作系统页保护接口函数加上页保护。如图4中所示,图中斜线部分表示已经加上页保护的内存,其是从需保护的内存的起始地址前的预留的内存区域的页面分界开始,至需保护的内存的结束地址后的预留的内存区域的页面分界结束。因为在此时还没有进行业务,为内存增加页保护消耗的时间对用户来说是可以接受的。第三步在操作系统的实时处理过程中,当应用层需要对被保护的内存进行写操作时,首先要取出本次需要写入的内存的起始地址和需要进行写操作的内存的长度,根据这两个上述两个参数可以确定本次写操作所涉及到的页面信息,包括诸如从哪个页面分界开始,至哪个页面分界结束;则调用操作系统的接口函数将本次写操作涉及的页面进行去除页保护的操作;第四步对所涉及到的页面进行具体的写操作过程;第五步等写操作结束后,再调用操作系统的接口函数将上述涉及到的页面重新加上页保护。其中第三、四、五个步骤可参见图5所示,在图5中示出了对已保护的内存中进行写操作的示意图,其中本次写操作所涉及到的页面共两个,见图中中间部份所示意的。由于,对内存进行一次写操作一般只能涉及操作系统的一两个页面,对一两个页面进行去保护、和重新加保护操作所占用的系统资源并不多,基本可以忽略不计,所以不会降低实时操作系统的使用效率。在本专利技术中,由于是只有在需要对哪个/哪几个页面进行写操作时,才对该页面进行去保护,待写操作完成后立刻对该页面进行加保护,这样对于不具有对被保护内存区域进行合法写操作权限的代码来说,该页面一直是处于保护状态的,任何非法的写操作均会引起CPU中断,当出现非法写操作时,就可以捕获现场的信息,进行补救工作。在本专利技术的另外一个实施例中,在定义被保护区域的时候,通过指针操作直接将区域的起始地址、结束地址定义在操作系统内存页面的起始位置。这样可以不用在被保护区域起始结束位置增加无本文档来自技高网...
【技术保护点】
一种对内存进行保护的方法,其特征在于,包括:(a)定义需保护的内存区域,将所有需要保护的内存定义在一个连续的空间上;(b)在操作系统初始化时,对需要保护的所有内存加页保护;(c)需要对被保护的内存进行写操作时,对该写 操作所涉及到的内存页面进行去页保护;(d)对所述已进行去页保护的内存页面进行写操作;(e)对所述已进行写操作的内存页面重新加页保护。
【技术特征摘要】
【专利技术属性】
技术研发人员:王传凯,王海,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。