CN105677457B - 一种通过精确分区保护程序存储空间的方法及装置 - Google Patents
一种通过精确分区保护程序存储空间的方法及装置 Download PDFInfo
- Publication number
- CN105677457B CN105677457B CN201610006042.5A CN201610006042A CN105677457B CN 105677457 B CN105677457 B CN 105677457B CN 201610006042 A CN201610006042 A CN 201610006042A CN 105677457 B CN105677457 B CN 105677457B
- Authority
- CN
- China
- Prior art keywords
- memory space
- subregion
- length
- address
- described program
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000005192 partition Methods 0.000 title claims abstract description 19
- 238000000638 solvent extraction Methods 0.000 claims abstract description 19
- 230000001960 triggered effect Effects 0.000 claims description 8
- 239000002699 waste material Substances 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/468—Specific access rights for resources, e.g. using capability register
Abstract
本发明公布一种通过精确分区保护程序存储空间的方法及装置,涉及数字存储技术领域。所述方法包括:根据程序存储空间得到第一存储空间,针对第一存储空间进行处理得到前端区域和后端区域,分别将前端区域和后端区域进行递归分区,并设置分区得到的子区域的访问权限。所述装置包括:第一存储空间生成模块,第一判断模块,第一分区模块,第二判断模块,前后端区域生成模块,前端区域处理模块,后端区域处理模块,第三判断模块,第四判断模块,更新前端区域模块,更新后端区域模块。实现了通过精确分区保护程序存储空间,避免了由于分区不正确造成的程序不能正常运行的情况,也避免了系统资源的浪费。
Description
技术领域
本发明涉及数字存储技术领域,特别涉及一种通过精确分区保护程序存储空间的方法及装置。
背景技术
一些嵌入式系统使用多任务的操作和控制,这些系统必须提供一种机制来保证正在运行的任务不破坏其它任务的运行,ARM中配备了有效保护系统资源的硬件—MPU(Memory Protection Unit,内存保护单元),MPU可以限制对系统资源的访问权限。MPU具有以下功能:1保护存储区域,2将保护区域重叠,3控制访问权限,4将存储属性输出到系统。MPU保护模块主要是把内存分成域,ARM v7m支持的域个数有8个。如果需要保护的存储空间范围过小则用户程序将不能正常运行,如果需保护的存储空间范围过大则会造成系统资源的浪费。
发明内容
本发明的目的是为了更加准确的划分需保护的存储空间的范围,提出了一种通过精确分区保护程序存储空间的方法及装置。
一种通过精确分区保护程序存储空间的方法,包括:
步骤101、根据程序长度确定第一长度,根据程序存储空间的首地址和所述第一长度得到第一首地址,根据所述第一首地址和所述第一长度得到第一存储空间;
步骤102、判断所述第一存储空间是否完全包含所述程序存储空间,若所述第一存储空间完全包含程序存储空间则执行步骤103,若所述第一存储空间部分包含执行步骤104;
步骤103、将所述第一存储空间进行分区,设置分区得到的子区域的访问权限;对所述第一存储空间分区得到的子区域进行判断,若第一存储空间分区得到的子区域中存在包含所述程序存储空间的首地址且与所述程序存储空间部分重合的第一临时子区域时,将第一临时子区域与程序存储空间部分重合的区域作为当前前端区域,对当前前端区域进行递归分区;若第一存储空间分区得到的子区域中包含所述程序存储空间的末地址且与所述程序存储空间部分重合的第三临时子区域时,将第三临时子区域与程序存储空间部分重合的区域作为当前后端区域,对当前后端区域进行递归分区;若第一临时子区域和第三临时子区域均不存在则结束;
步骤104、根据所述第一存储空间的末地址得到当前前端区域和当前后端区域,对当前前端区域进行递归分区,对当前后端区域进行递归分区;
对当前前端区域进行递归分区具体包括:
步骤201、计算所述当前前端区域的长度,根据所述当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限;
步骤202、判断所述第二存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的第二临时子区域,是则更新所述当前前端区域为所述第二临时子区域与所述程序存储空间重合的区域,返回步骤201,否则结束;
对当前后端区域进行递归分区具体包括:
步骤301、计算所述当前后端区域的首地址和长度,根据所述当前后端区域的长度确定第三长度,根据所述当前后端区域的首地址和所述第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限进行分区;
步骤302、判断所述第三存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的子区域并判断子区域长度是否大于预设长度,判断均为是则将与所述程序存储空间部分重合的子区域作为第四临时子区域,更新所述当前后端区域为所述第四临时子区域与所述程序存储空间重合的区域,返回步骤301,否则结束。
一种通过精确分区保护程序存储空间的装置,包括:
第一存储空间生成模块,用于根据程序长度确定第一长度,根据程序存储空间的首地址和第一长度得到第一首地址,根据所述第一首地址和所述第一长度得到第一存储空间;
第一判断模块,用于判断所述第一存储空间生成模块生成的所述第一存储空间是否包含所述程序存储空间;
第一分区模块,用于当所述第一判断模块判断所述第一存储空间完全包含所述程序存储空间时,将所述第一存储空间进行分区,设置分区得到的子区域的访问权限;
前后端区域生成模块,用于当第一判断模块判断所述第一存储空间部分包含所述程序存储空间时,根据第一存储空间的末地址得到当前前端区域和当前后端区域,触发前端区域处理模块和后端区域处理模块。
第二判断模块,用于将所述第一分区模块得到的所述子区域进行判断,若所述子区域中存在包含所述程序存储空间的首地址且与所述程序存储空间部分重合的第一临时子区域时将第一临时子区域与程序存储空间部分重合的区域作为当前前端区域,触发前端区域处理模块,若所述第一存储空间模块得到的子区域中包含所述程序存储空间的末地址且与所述程序存储空间部分重合的第三临时子区域时,将第三临时子区域与程序存储空间部分重合的区域作为当前后端区域,触发后端区域处理模块;若第一临时子区域和第三临时子区域均不存在则结束;
前端区域处理模块,用于计算所述当前前端区域的长度,根据当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限;
第三判断模块,用于判断所述前端区域处理模块生成的子区域中是否有与所述程序存储空间部分重合的子区域;
更新前端区域模块,用于所述第三判断模块判断第二存储空间分区得到的子区域中存在与程序存储空间部分重合的第二临时子区域时,更新当前前端区域为第二临时子区域与程序存储空间重合的区域,触发前端区域处理模块;
后端区域处理模块,用于计算所述当前后端区域的首地址和长度,根据当前后端区域的长度确定第三长度,根据当前后端区域的首地址和第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限;
第四判断模块,用于判断后端区域处理模块得到的子区域中是否有与程序存储空间部分重合的子区域并判断子区域长度是否大于预设长度;
更新后端区域模块,用于当第四判断模块判断第三存储空间分区得到的子区域中存在与程序存储空间部分重合的子区域且子区域长度大于预设长度时,将与程序存储空间部分重合的子区域作为第四临时子区域,更新当前后端区域为第四临时子区域与程序存储空间重合的区域,触发后端区域处理模块。
本发明的有益效果是避免了由于分区不正确造成的用户程序不能正常运行的情况,也避免了系统资源的浪费,本发明提供的一种通过精确分区保护程序存储空间的方法,成功实现了MPU所需要的分区功能。
附图说明
为了更清楚的说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的一种通过精确分区保护程序存储空间的方法的流程图。
图2是本发明实施例2提供的一种通过精确分区保护程序存储空间的装置的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围、例如,实施例提供一种通过精确分区保护程序存储空间的方法,所述程序存储空间可以为任何需要的保护的存储空间。
MPU最小能支持32字节的域,每个域的权限特性都可以被设置。设置访问权限时:需要保护的存储空间的长度和首地址需要遵循一个规则:首地址必须是其长度的整数倍。例如:如果要保护一个256字节的存储空间,那这个空间的首地址必须是256字节的整数倍。因此要对一个任意地址,任意长度的存储空间进行保护时,就涉及到如何分区的问题。
实施例1
参见图1,本发明提供的一种通过精确分区保护程序存储空间的方法,具体步骤如下:
步骤101、根据程序长度确定第一长度,根据程序存储空间的首地址和第一长度得到第一首地址,根据第一长度和第一首地址得到第一存储空间。
具体的,根据程序长度确定所述预设区间,将预设区间的上边界值作为第一长度。将程序存储空间的首地址向左对齐到第一长度的整数倍得到第一首地址,计算第一首地址与第一长度之和得到第一末地址,将第一首地址与第一末地址之间的存储空间作为第一存储空间。
将程序存储空间的首地址向左对齐到第一长度的整数倍得到第一首地址具体为:获取第一长度的整数倍作为第一首地址,且第一首地址不大于且最接近程序存储空间的首地址。
本实施例中预设的分区等级为256bit(0x100),2K(0x800),16K(0x4000),128K(0x20000);所述预设区间是0—256bit(0x100),256bit(0x100)—2K(0x800),2K(0x800)—16K(0x4000),16K(0x4000)—128K(0x20000);
例如,所述程序长度为0xCDEF,由于0xCDEF落入16K(0x4000)—128K(0x20000)的区间内,得到的第一长度为0x20000;程序存储空间首地址为0x10097100,程序存储空间的首地址0x10097100向左对齐到0x20000的整数倍得到第一首地址,所述第一首地址为0x10080000,例如,计算第一首地址为0x10080000与第一长度0x20000之和,得到第一末地址为0x100A0000,第一存储空间为0x10080000与0x100A0000之间的存储空间。
步骤102、判断第一存储空间是否完全包含程序存储空间,若第一存储空间完全包含程序存储空间则执行步骤103,第一存储空间部分包含程序存储空间则执行步骤110。
判断第一存储空间是否完全包含程序存储空间具体为,判断第一末地址是否大于程序存储空间的首地址与程序长度之和,是则第一存储空间完全包含程序存储空间执行步骤103,否则第一存储空间部分包含程序存储空间执行步骤110。
步骤103、将第一存储空间进行分区,设置分区得到的子区域的访问权限。
本实施例中,将第一存储空间平均划分为8个子区域,每个子区域都对应一个使能位可以控制该子区域是否可以被访问,当使能位为0时对应的子区域不可以被访问,当使能位为1时对应的子区域可以被访问。将与程序存储空间完全重合的子区域对应的使能位置0,将剩余的子区域对应的使能位置1。
具体包括:
步骤A1、将第一存储空间划分为8个子区域,计算子区域长度。
步骤A2、将第一首地址与子区域长度之和给第一子区域地址赋值。
步骤A3、判断第一子区域地址是否小于程序首地址,是则执行步骤A4,否则执行步骤A5。
步骤A4、更新第一子区域地址为当前第一子区域地址与子区域长度之和,返回步骤A3。
步骤A5、将第一首地址与第一子区域地址之间的子区域对应的使能位置1,将第一子区域地址与第一末地址之间的子区域对应的使能位置0。
例如,当程序存储空间的首地址为0x10097100且程序长度为0x6677时,第一末地址0x100A0000大于程序存储空间的首地址与程序长度之和0x1009D777,将第一首地址0x10080000与第一末地址0x100A0000之间的存储空间划分为8个子区域,子区域长度为0x4000。8个子区域对应的使能位依次为11111101。
步骤104、判断第一存储空间分区得到的子区域中是否存在包含程序首地址且与程序存储空间部分重合的第一临时子区域,是则执行步骤105,否则执行步骤107。
具体的,当步骤A5,判断第一子区域地址不小于程序首地址时,判断第一子区域地址是否等于程序首地址,是则第一存储空间分区得到的子区域中不包含程序首地址且与程序存储空间部分重合的第一临时子区域,否则第一存储空间分区得到的子区域中包含程序首地址且与程序存储空间部分重合的第一临时子区域。
步骤105、将第一临时子区域与程序存储空间的重合区域作为当前前端区域。
步骤106、对当前前端区域进行递归分区。
步骤106具体包括:
步骤106-1、计算当前前端区域的长度,根据当前前端区域的长度确定第二长度,根据程序存储空间的首地址和第二长度得到第二首地址,根据第二首地址和第二长度得到第二存储空间,将第二存储空间进行分区,并设置分区得到的子区域的访问权限。
具体的根据当前前端区域的长度确定所述预设区间,将预设区间的上边界值作为第二长度。将程序存储空间的首地址向左对齐到第二长度的整数倍得到第二首地址,计算第二首地址与第二长度之和得到第二末地址,将第二首地址与第二末地址之间的存储空间作为第二存储空间。
将第二存储空间进行分区,并设置分区得到的子区域的访问权限具体包括:
步骤B1、将第二存储空间划分为8个子区域,计算子区域长度。
步骤B2、将第二首地址与子区域长度之和给第二子区域地址赋值。
步骤B3、判断第二子区域地址是否小于程序首地址,是则执行步骤B4,否则执行步骤B5。
步骤B4、更新第二子区域地址为当前第二子区域地址与子区域长度之和,返回步骤B3。
步骤B5、将第二首地址与第二子区域地址之间的子区域对应的使能位置1,将第二子区域地址与第二末地址之间的子区域对应的使能位置0。
步骤106-2、判断第二存储空间分区得到的子区域中是否存在与程序存储空间部分重合的第二临时子区域,是则执行步骤106-3,否则执行步骤107。
具体的,当步骤B5,判断第二子区域地址不小于程序首地址时,判断第二子区域地址是否等于程序首地址,是则第二存储空间分区得到的子区域中不包含程序首地址且与程序存储空间部分重合的第二临时子区域,否则第二存储空间分区得到的子区域中包含程序首地址且与程序存储空间部分重合的第二临时子区域。
步骤106-3、更新当前前端区域为第二临时子区域与程序存储空间重合的区域,返回步骤106-1。
例如,当前前端区域为0x10097100—0x100A0000时,前端区域长度为0x8F00,根据预设的分区等级得到第二长度为0x20000,第二首地址为0x10080000。前端区域进行递归分区,设置分区得到的子区域的访问权限具体数据如下表所示:
前端区域 | 前端区域长度 | 第二分区长度 | 第二分区首地址 | 使能位 |
0x10097100-0x100A0000 | 0x8F00 | 0x20000 | 0x10080000 | 11111100 |
0x10097100-0x10098000 | 0xF00 | 0x4000 | 0x10094000 | 11111110 |
0x10097100-0x10098000 | 0x700 | 0x800 | 0x10097000 | 10000000 |
步骤107、判断第一存储空间分区得到的子区域中是否存在包含程序末地址且与程序存储空间重合的第三临时子区域,是则执行步骤108,否则结束。
步骤108、将第三临时子区域与程序存储空间的重合区域作为当前后端区域
所述当前后端区域的首地址为第三临时子区域的首地址。
步骤109、对后端区域进行递归分区。
步骤109具体包括:
步骤109-1、计算当前后端区域的长度和首地址,根据当前后端区域的长度确定第三长度,根据第三首地址和第三长度得到第三存储空间,将第三存储空间进行分区,并设置分区得到的子区域的访问权限。
具体的根据当前后端区域的长度确定所述预设区间,将预设区间的上边界值作为第三长度。计算后端区域首地址与第三长度之和得到第三末地址,将后端区域首地址与第三末地址之间的存储空间作为第三存储空间。
将第三存储空间进行分区,并设置分区得到的子区域的访问权限,具体包括:
步骤C1、将第三存储空间划分为8个子区域,计算子区域长度。
步骤C2、将第一存储空间末地址与子区域长度之差给第三子区域地址赋值。
步骤C3、判断第三子区域地址是否大于程序末地址,是则执行步骤C5,否则执行步骤C6。
步骤C4、更新第三子区域地址为当前第三子区域地址与子区域长度之差,返回步骤C3。
步骤C5、将第三首地址与第三子区域地址之间的子区域对应的使能位置1,将第三子区域地址与第三末地址之间的子区域对应的使能位置0。
步骤109-2、判断第三存储空间分区得到的子区域中是否存在与程序存储空间部分重合的第四临时子区域且当前子区域长度大于预设长度,是则执行步骤109-3,否则结束。
具体的,当步骤C3、判断第三子区域地址不大于程序末地址时,判断第四分区首地址是否等于程序首地址且判断子区域长度是否大于预设值,当判断均为是时第三存储空间分区得到的子区域中存在与程序存储空间部分重合的第四临时子区域且当前子区域长度大于,否则不存在第四临时子区域。
步骤109-3、更新当前后端区域为第四临时子区域与程序存储空间重合的区域,返回步骤109-1。
例如,后端区域为0x100A0000—0x100A3EEF时,后端区域长度为0x3EEF,根据预设的分区等级得到的第三长度为0x4000,第三首地址为0x100A0000,后端区域进行递归分区,设置分区得到的子区域的访问权限具体数据如下表所示:
后端区域 | 后端区域长度 | 第三分区长度 | 第三分区末地址 | 使能位 |
0x100A0000-0x100A3EEF | 0x3EEF | 0x4000 | 0x100A4000 | 00000001 |
0x100A3800-0x100A4000 | 0x6EF | 0x800 | 0x100A4000 | 00000001 |
步骤110、根据第一存储空间末地址将程序存储空间划分为当前前端区域和当前后端区域。
具体的,将所述程序存储空间的首地址与所述第一存储空间的末地址之间的存储空间作为当前前端区域,将所述第一存储空间的末地址与程序存储空间的末地址之间的存储空间作为当前后端区域。
例如,程序首地址为0x10097100,程序长度为0xCDEF,得到第一末地址为0x100A0000,以第一末地址为中点将程序存储空间分为前端区域为0x10097100—0x100A0000和后端区域0x100A0000—0x100A3EEF。
所述当前后端区域的首地址为第一末地址。
步骤111、对当前前端区域进行递归分区。
步骤111中对当前前端区域进行递归分区与步骤106相同,在此不再赘述。
步骤112、对当前后端区域进行递归分区。
步骤112中对当前后端区域进行递归分区与步骤109相同,在此不再赘述。
需要说明的是,在本发明的其他实施方式中,也可以先判断是否存在当前后端区域,若存在当前前端区域则处理当前前端区域即执行步骤107至109。后判断是否存在当前前端区域,若存在当前前端区域则处理当前后端区域,即执行步骤104至106。
还可以,在本发明的其他实施方式中,同时判断是否存在当前前端区域和当前后端区域,即同时执行步骤104至106和步骤107至109。
需要说明的是,在本发明的其他实施方式中,也可以先处理当前后端区域,即执行步骤112,后处理当前前端区域,即执行步骤111。
还可以,在本发明的其他实施方式中,同时处理当前前端区域和当前后端区域,即同时执行步骤111和步骤112。
以上实施的方式均能够实现本发明的发明目的。
实施例2
参见图2,本发明提供的一种通过精确分区保护程序存储空间的装置,包括:
第一存储空间生成模块11,用于根据程序长度确定第一长度,将程序存储空间的首地址向左对齐到第一长度的整数倍得到第一首地址,根据第一首地址和第一长度得到第一存储空间;
具体的,所述第一存储空间生成模块具体用于,确定所述程序长度所处的预设区间,将预设区间的上边界值作为第一长度,将程序存储空间的首地址向左对齐到第一长度的整数倍得到第一首地址,,根据第一首地址和第一长度得到第一存储空间。
第一判断模块12,用于判断第一存储空间生成模块11生成的第一存储空间是否完全包含所述程序存储空间;
具体的,第一判断模块12具体用于,判断所述第一末地址是否小于所述程序存储空间的末地址,若所述第一末地址小于所述程序存储空间的末地址则表明所述第一存储空间部分包含所述程序存储空间,若所述第一末地址大于或等于所述程序存储空间的末地址则表明所述第一存储空间完全包含所述程序存储空间。
前后端区域生成模块15,用于当第一判断模块12判断所述第一存储空间部分包含所述程序存储空间时,计算第一存储空间的末地址,根据第一存储空间的末地址得到当前前端区域和当前后端区域;
前后端区域生成模块15具体用于:将所述程序存储空间的首地址与所述第一存储空间的末地址之间的存储空间作为当前前端区域,将所述第一存储空间的末地址与程序存储空间的末地址之间的存储空间作为当前后端区域。
第一分区模块13,用于当第一判断模块12判断所述第一存储空间完全包含所述程序存储空间时,将所述第一存储空间进行分区,设置分区得到的子区域的访问权限;
具体的,第一分区模块13设置子区域的访问权限具体为将对第一存储空间分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问;
第二判断模块14,用于将第一分区模块13得到的所述子区域进行判断,若所述子区域中存在包含所述程序存储空间的首地址且与所述程序存储空间部分重合的第一临时子区域时将第一临时子区域与程序存储空间部分重合的区域作为当前前端区域;若将第一分区模块13得到的所述子区域包含所述程序存储空间的末地址且与所述程序存储空间部分重合的第三临时子区域时,将第三临时子区域与程序存储空间部分重合的区域作为当前后端区域;若第一临时子区域和第三临时子区域均不存在则结束;
前端区域处理模块16,用于计算所述当前前端区域的长度,用于计算所述当前前端区域的长度,根据当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限;
具体的,前端区域处理模块16具体用于,确定所述当前前端区域的长度所处的预设区间,将预设区间的上边界值作为第二长度,将程序存储空间的首地址向左对齐到所述第二长度的整数倍得到第二首地址,根据第二长度和第二首地址得到第二存储空间,将所述第二存储空间进行分区,将对第二存储空间分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问;
第三判断模块17,用于判断前端区域处理模16块生成的子区域中是否有与所述程序存储空间部分重合的子区域;
第三判断模块模块17,具体包括:
第一设置子模块,用于计算子区域长度,设置第一子区域地址为所述程序存储空间的首地址与子区域长度之和;
第一判断子模块,用于判断所述第一子区域地址是否小于所述程序存储空间的首地址;
第一更新子模块,用于当所述第一判断子模块判断第一子区域地址小于程序存储空间的首地址时,更新所述第一子区域地址为当前第一子区域地址与子区域长度之和,触发第一判断子模块;
第二判断子模块,用于判断所述第一子区域地址是否等于程序存储空间的首地址,是则所述第二存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则所述第二存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
更新前端区域模块18,用于所述第三判断模块17判断第二存储空间分区得到的子区域中存在与程序存储空间部分重合的第二临时子区域时,更新当前前端区域为第二临时子区域与程序存储空间重合的区域,触发前端区域处理模块16;
后端区域处理模块19,用于计算所述当前后端区域的首地址和长度,根据当前后端区域的长度确定第三长度,根据当前后端区域的首地址和第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限;
当所述第一判断模块12判断所述第一存储空间完全包含所述程序存储空间时,设置所述当前后端区域的首地址为第三临时子区域的首地址;当所述第一判断模块判断所述第一存储空间部分包含所述程序存储空间时,设置所述当前后端区域的首地址为所述第一存储空间的末地址;
后端区域处理模块,具体用于计算所述当前后端区域的首地址和长度,确定所述当前后端区域的长度所处的预设区间,将预设区间的上边界值作为第三长度,根据所述当前后端区域的首地址和所述第三长度得到第三存储空间;将所述第三存储空间进行分区,将所述对第三存储空间分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问。
第四判断模块20,用于判断后端区域处理模块19得到的子区域中是否有与程序存储空间部分重合的子区域并判断子区域长度是否大于预设长度;
第四判断模块20具体包括:
第二设置子模块,用于计算子区域长度,根据当前后端区域的首地址和长度计算当前后端区域的末地址,设置第二子区域地址为后端区域的末地址与子区域长度之差;
第三判断子模块,用于判断所述第二子区域地址是否大于所述程序存储空间的末地址;
第二更新子模块,用于更新所述第二子区域地址为当前第二子区域地址与子区域长度之差;
第四判断子模块,用于判断所述第二子区域地址是否等于所述程序存储空间的末地址,,是则第三存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则第三存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
更新后端区域模块21,用于当第四判断模块20判断第三存储空间分区得到的子区域中存在与程序存储空间部分重合的子区域且子区域长度大于预设长度时,将与程序存储空间部分重合的子区域作为第四临时子区域,更新当前后端区域为第四临时子区域与程序存储空间重合的区域,触发后端区域处理模块19。
Claims (24)
1.一种通过精确分区保护程序存储空间的方法,其特征在于,包括:
步骤101、根据程序长度确定第一长度,根据程序存储空间的首地址和所述第一长度得到第一首地址,根据所述第一首地址和所述第一长度得到第一存储空间;
步骤102、判断所述第一存储空间是否完全包含所述程序存储空间,若所述第一存储空间完全包含所述程序存储空间则执行步骤103,若所述第一存储空间部分包含所述程序存储空间则执行步骤104;
步骤103、将所述第一存储空间进行分区,设置分区得到的子区域的访问权限;对所述第一存储空间分区得到的子区域进行判断,若第一存储空间分区得到的子区域中存在包含所述程序存储空间的首地址且与所述程序存储空间部分重合的第一临时子区域时,将第一临时子区域与程序存储空间部分重合的区域作为当前前端区域,对当前前端区域进行递归分区;若第一存储空间分区得到的子区域中存在包含所述程序存储空间的末地址且与所述程序存储空间部分重合的第三临时子区域时,将第三临时子区域与程序存储空间部分重合的区域作为当前后端区域,对当前后端区域进行递归分区;若第一临时子区域和第三临时子区域均不存在则结束;
步骤104、根据所述第一存储空间的末地址得到当前前端区域和当前后端区域,对当前前端区域进行递归分区,对当前后端区域进行递归分区;
对当前前端区域进行递归分区具体包括:
步骤201、计算所述当前前端区域的长度,根据所述当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限;
步骤202、判断所述第二存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的第二临时子区域,是则更新所述当前前端区域为所述第二临时子区域与所述程序存储空间重合的区域,返回步骤201,否则结束;
对当前后端区域进行递归分区具体包括:
步骤301、计算所述当前后端区域的首地址和长度,根据所述当前后端区域的长度确定第三长度,根据所述当前后端区域的首地址和所述第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限;
步骤302、判断所述第三存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的子区域并判断子区域长度是否大于预设长度,判断均为是则将与所述程序存储空间部分重合的子区域作为第四临时子区域,更新所述当前后端区域为所述第四临时子区域与所述程序存储空间重合的区域,返回步骤301,否则结束。
2.如权利要求1所述的方法,其特征在于,所述根据程序长度确定第一长度具体包括:确定所述程序长度所处的预设区间,将预设区间的上边界值作为第一长度。
3.如权利要求1所述的方法,其特征在于,所述根据程序存储空间的首地址和所述第一长度得到第一首地址,具体包括:将所述程序存储空间的首地址向左对齐到所述第一长度的整数倍得到第一首地址。
4.如权利要求1所述的方法,其特征在于,所述步骤102具体包括:根据所述第一首地址和所述第一长度得到第一末地址;判断所述第一末地址是否小于所述程序存储空间的末地址,若所述第一末地址小于所述程序存储空间的末地址则表明所述第一存储空间部分包含所述程序存储空间,若所述第一末地址大于或等于所述程序存储空间的末地址则表明所述第一存储空间完全包含所述程序存储空间。
5.如权利要求1所述的方法,其特征在于,所述设置分区得到的子区域的访问权限具体包括:将分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问。
6.如权利要求1所述的方法,其特征在于,所述根据所述当前前端区域的长度确定第二长度,具体包括:确定所述当前前端区域的长度所处的预设区间,将预设区间的上边界值作为第二长度。
7.如权利要求1所述的方法,其特征在于,根据所述程序存储空间首地址得到第二首地址具体包括:将所述程序存储空间的首地址向左对齐到所述第二长度的整数倍得到第二首地址。
8.如权利要求1所述的方法,其特征在于,所述判断所述第二存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的子区域具体包括:
步骤801、计算子区域长度,设置第一子区域地址为所述程序存储空间的首地址与子区域长度之和;
步骤802、判断所述第一子区域地址是否小于所述程序存储空间的首地址,是则执行步骤803,否则执行步骤804;
步骤803、更新所述第一子区域地址为当前第一子区域地址与子区域长度之和;返回步骤802;
步骤804、判断所述第一子区域地址是否等于所述程序存储空间的首地址,是则所述第二存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则所述第二存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
9.如权利要求1所述的方法,其特征在于,所述计算所述当前后端区域的首地址具体包括:当所述第一存储空间完全包含所述程序存储空间,设置所述当前后端区域的首地址为所述第三临时子区域的首地址;若所述第一存储空间部分包含所述程序存储空间,设置当前后端区域的首地址为所述第一存储空间的末地址。
10.如权利要求1所述的方法,其特征在于,所述根据所述当前后端区域的长度确定第三长度,具体包括:确定所述当前后端区域的长度所处的预设区间,将预设区间的上边界值作为第三长度。
11.如权利要求1所述的方法,其特征在于,所述判断所述第三存储空间分区得到的子区域中是否有与所述程序存储空间部分重合的子区域具体包括:
步骤B01、计算子区域长度,根据所述当前后端区域的首地址和长度计算当前后端区域的末地址,设置第二子区域地址为所述当前后端区域的末地址与子区域长度之差;
步骤B02、判断所述第二子区域地址是否大于所述程序存储空间的末地址,是则执行步骤B03,否则执行步骤B04;
步骤B03、更新所述第二子区域地址为当前第二子区域地址与子区域长度之差;返回步骤B02;
步骤B04、判断所述第二子区域地址是否等于所述程序存储空间的末地址,是则第三存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则第三存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
12.如权利要求1所述的方法,其特征在于,所述根据所述第一存储空间的末地址得到当前前端区域和当前后端区域具体包括:将所述程序存储空间的首地址与所述第一存储空间的末地址之间的存储空间作为当前前端区域,将所述第一存储空间的末地址与程序存储空间的末地址之间的存储空间作为当前后端区域。
13.一种通过精确分区保护程序存储空间的装置,其特征在于,包括:
第一存储空间生成模块,用于根据程序长度确定第一长度,根据程序存储空间的首地址和第一长度得到第一首地址,根据所述第一首地址和所述第一长度得到第一存储空间;
第一判断模块,用于判断所述第一存储空间生成模块生成的所述第一存储空间是否完全包含所述程序存储空间;
第一分区模块,用于当所述第一判断模块判断所述第一存储空间完全包含所述程序存储空间时,将所述第一存储空间进行分区,设置分区得到的子区域的访问权限;
前后端区域生成模块,用于当第一判断模块判断所述第一存储空间部分包含所述程序存储空间时,根据第一存储空间的末地址得到当前前端区域和当前后端区域;
第二判断模块,用于将所述第一分区模块得到的所述子区域进行判断,若所述子区域中存在包含所述程序存储空间的首地址且与所述程序存储空间部分重合的第一临时子区域时,将第一临时子区域与程序存储空间部分重合的区域作为当前前端区域;若所述第一存储空间模块得到的子区域中存在包含所述程序存储空间的末地址且与所述程序存储空间部分重合的第三临时子区域时,将第三临时子区域与程序存储空间部分重合的区域作为当前后端区域;若第一临时子区域和第三临时子区域均不存在则结束;
前端区域处理模块,用于计算所述当前前端区域的长度,根据当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限;
第三判断模块,用于判断所述前端区域处理模块生成的子区域中是否有与所述程序存储空间部分重合的子区域;
更新前端区域模块,用于所述第三判断模块判断第二存储空间分区得到的子区域中存在与程序存储空间部分重合的第二临时子区域时,更新当前前端区域为第二临时子区域与程序存储空间重合的区域,触发前端区域处理模块;
后端区域处理模块,用于计算所述当前后端区域的首地址和长度,根据当前后端区域的长度确定第三长度,根据当前后端区域的首地址和第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限;
第四判断模块,用于判断后端区域处理模块得到的子区域中是否有与程序存储空间部分重合的子区域并判断子区域长度是否大于预设长度;
更新后端区域模块,用于当第四判断模块判断第三存储空间分区得到的子区域中存在与程序存储空间部分重合的子区域且子区域长度大于预设长度时,将与程序存储空间部分重合的子区域作为第四临时子区域,更新当前后端区域为第四临时子区域与程序存储空间重合的区域,触发后端区域处理模块。
14.如权利要求13所述的装置,其特征在于,所述第一存储空间生成模块具体用于,确定所述程序长度所处的预设区间,将预设区间的上边界值作为第一长度,根据所述程序存储空间首地址和所述第一长度得到第一首地址,根据第一首地址和第一长度得到第一存储空间。
15.如权利要求13所述的装置,其特征在于,所述第一存储空间生成模块具体用于,根据程序长度确定第一长度,将程序存储空间的首地址向左对齐到第一长度的整数倍得到第一首地址,根据所述第一首地址和所述第一长度得到第一存储空间。
16.如权利要求13所述的装置,其特征在于,所述第一判断模块具体用于,根据第一首地址和第一长度得到第一末地址;判断所述第一末地址是否小于所述程序存储空间的末地址,若所述第一末地址小于所述程序存储空间的末地址则表明所述第一存储空间部分包含所述程序存储空间,若所述第一末地址大于或等于所述程序存储空间的末地址则表明所述第一存储空间完全包含所述程序存储空间。
17.如权利要求13所述的装置,其特征在于,
所述第一分区模块,具体用于当所述第一判断模块判断所述第一存储空间完全包含所述程序存储空间时,将所述第一存储空间进行分区,将分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置禁止访问,剩余的子区域的访问权限设置为允许访问;
所述前端区域处理模块,具体用于计算当前前端区域的长度,根据所述当前前端区域的长度确定第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址;根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,将分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问;
所述后端区域处理模块具体用于,计算所述当前后端区域的首地址和长度,根据所述当前后端区域的长度确定第三长度,根据所述当前后端区域的首地址和所述第三长度得到第三存储空间,将所述第三存储空间进行分区,将分区得到的子区域中与所述程序存储空间重合的子区域的访问权限设置为禁止访问,剩余的子区域的访问权限设置为允许访问。
18.如权利要求13所述的装置,其特征在于,所述前端区域处理模块,具体用于,确定所述当前前端区域的长度所处的预设区间,将预设区间的上边界值作为第二长度,根据所述程序存储空间的首地址和所述第二长度得到第二首地址,根据第二长度和第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限。
19.如权利要求13所述的装置,其特征在于,所述前端区域处理模块,具体用于,用于计算所述当前前端区域的长度,根据当前前端区域的长度确定第二长度,将程序存储空间的首地址向左对齐到所述第二长度的整数倍得到第二首地址,根据所述第二长度和所述第二首地址得到第二存储空间,将所述第二存储空间进行分区,设置分区得到的子区域的访问权限。
20.如权利要求13所述的装置,其特征在于,所述第三判断模块具体包括:
第一设置子模块,用于计算子区域长度,设置第一子区域地址为所述程序存储空间的首地址与子区域长度之和;
第一判断子模块,用于判断所述第一子区域地址是否小于所述程序存储空间的首地址;
第一更新子模块,用于当所述第一判断子模块判断第一子区域地址小于程序存储空间的首地址时,更新所述第一子区域地址为当前第一子区域地址与子区域长度之和,触发第一判断子模块;
第二判断子模块,用于判断所述第一子区域地址是否等于程序存储空间的首地址,是则所述第二存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则所述第二存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
21.如权利要求13所述的装置,其特征在于,所述后端区域处理模块,具体用于,当所述第一判断模块判断所述第一存储空间完全包含所述程序存储空间时,设置所述当前后端区域的首地址为第三临时子区域的首地址;当所述第一判断模块判断所述第一存储空间部分包含所述程序存储空间时,设置所述当前后端区域的首地址为所述第一存储空间的末地址。
22.如权利要求13所述的装置,其特征在于,所述后端区域处理模块,具体用于,用于计算所述当前后端区域的首地址和长度,确定所述当前后端区域的长度所处的预设区间,将预设区间的上边界值作为第三长度,根据所述当前后端区域的首地址和所述第三长度得到第三存储空间;将所述第三存储空间进行分区,设置分区得到的子区域的访问权限。
23.如权利要求13所述的装置,其特征在于,所述第四判断模块具体包括:
第二设置子模块,用于计算子区域长度,根据当前后端区域的首地址和长度计算当前后端区域的末地址,设置第二子区域地址为所述当前后端区域的末地址与子区域长度之差;
第三判断子模块,用于判断所述第二子区域地址是否大于所述程序存储空间的末地址;
第二更新子模块,用于更新所述第二子区域地址为当前第二子区域地址与子区域长度之差;
第四判断子模块,用于判断所述第二子区域地址是否等于所述程序存储空间的末地址,是则第三存储空间分区得到的子区域中没有与所述程序存储空间部分重合的子区域,否则第三存储空间分区得到的子区域中存在与所述程序存储空间部分重合的子区域。
24.如权利要求13所述的装置,其特征在于,所述前后端区域生成模块具体用于:将所述程序存储空间的首地址与所述第一存储空间的末地址之间的存储空间作为当前前端区域,将所述第一存储空间的末地址与程序存储空间的末地址之间的存储空间作为当前后端区域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610006042.5A CN105677457B (zh) | 2016-01-05 | 2016-01-05 | 一种通过精确分区保护程序存储空间的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610006042.5A CN105677457B (zh) | 2016-01-05 | 2016-01-05 | 一种通过精确分区保护程序存储空间的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677457A CN105677457A (zh) | 2016-06-15 |
CN105677457B true CN105677457B (zh) | 2019-04-12 |
Family
ID=56298971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610006042.5A Active CN105677457B (zh) | 2016-01-05 | 2016-01-05 | 一种通过精确分区保护程序存储空间的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677457B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787108A (zh) * | 2004-12-06 | 2006-06-14 | 明基电通股份有限公司 | 分区存储器的方法及装置 |
CN102968380A (zh) * | 2012-11-02 | 2013-03-13 | 深圳市同洲电子股份有限公司 | 内存文件系统中内存分区的管理方法和装置 |
CN104021022A (zh) * | 2014-06-23 | 2014-09-03 | 联想(北京)有限公司 | 一种分区调整方法及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7133994B2 (en) * | 2003-04-17 | 2006-11-07 | International Business Machines Corporation | Configuration size determination in logically partitioned environment |
GB2515537A (en) * | 2013-06-27 | 2014-12-31 | Ibm | Backup management for a plurality of logical partitions |
-
2016
- 2016-01-05 CN CN201610006042.5A patent/CN105677457B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787108A (zh) * | 2004-12-06 | 2006-06-14 | 明基电通股份有限公司 | 分区存储器的方法及装置 |
CN102968380A (zh) * | 2012-11-02 | 2013-03-13 | 深圳市同洲电子股份有限公司 | 内存文件系统中内存分区的管理方法和装置 |
CN104021022A (zh) * | 2014-06-23 | 2014-09-03 | 联想(北京)有限公司 | 一种分区调整方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105677457A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6859523B2 (ja) | 目標物の展開の必要性を判定する方法及び装置 | |
CN109612496B (zh) | 一种路径规划方法、装置及车辆 | |
CN108595268A (zh) | 一种基于MapReduce的数据分配方法、装置及计算机可读存储介质 | |
CN103810047A (zh) | 动态改善逻辑分区的存储器亲和性 | |
CN107885671A (zh) | 一种非易失性内存的持久化方法和计算设备 | |
CN106202280A (zh) | 一种信息处理方法及服务器 | |
CN109587220A (zh) | 负载均衡方法、装置、计算机设备和存储介质 | |
CN103995705A (zh) | 一种操作系统地址空间随机化分配系统及方法 | |
CN110728485B (zh) | 妥投位置修正方法和装置 | |
CN110225094A (zh) | 负载均衡应用虚拟ip切换方法、装置、计算机设备及存储介质 | |
CN109077672A (zh) | 一种扫地机器人选择区块的方法及装置 | |
CN110287179A (zh) | 一种数据缺失属性值的填充设备、装置及方法 | |
CN105677457B (zh) | 一种通过精确分区保护程序存储空间的方法及装置 | |
CN104615752A (zh) | 信息分类方法与系统 | |
CN107786986B (zh) | Ap放置方法及装置 | |
CN109240893A (zh) | 应用运行状态查询方法及终端设备 | |
CN112380563A (zh) | 节点访问方法、装置、设备及存储介质 | |
US10191849B2 (en) | Sizing cache data structures using fractal organization of an ordered sequence | |
CN106970998A (zh) | 新闻数据的更新方法及装置 | |
CN115016947B (zh) | 负载分配方法、装置、设备及介质 | |
CN106503260A (zh) | 一种提高数据库的有效存储空间的方法和装置 | |
CN110109970A (zh) | 一种数据查询处理方法及装置 | |
CN112937605B (zh) | 无人车行驶数据确定方法、装置、无人车及存储介质 | |
CN105656858B (zh) | 一种数据更新方法及装置 | |
US8468536B2 (en) | Multiple level linked LRU priority |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231017 Address after: 100085 room 205, B / F, Huizhi building, 9 Xueqing Road, Haidian District, Beijing Patentee after: Beijing Jianshi Chengxin Technologies Co.,Ltd. Address before: 17th floor, building B, Huizhi building, No.9, Xueqing Road, Haidian District, Beijing 100085 Patentee before: Feitian Technologies Co.,Ltd. |
|
TR01 | Transfer of patent right |