CN115480835A - 程序启动方法和设备、存储介质 - Google Patents
程序启动方法和设备、存储介质 Download PDFInfo
- Publication number
- CN115480835A CN115480835A CN202110603413.9A CN202110603413A CN115480835A CN 115480835 A CN115480835 A CN 115480835A CN 202110603413 A CN202110603413 A CN 202110603413A CN 115480835 A CN115480835 A CN 115480835A
- Authority
- CN
- China
- Prior art keywords
- code
- data
- internal memory
- program
- external memory
- 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.)
- Pending
Links
Images
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种程序启动方法和设备、存储介质,程序启动方法包括:检测到对程序的启动需求,其中,程序的启动代码至少部分保存在外部存储器,至少部分保存在外部存储器的启动代码包括多个代码段;多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作,其中,每次加载的代码段不同;其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸。上述方案,能够提高程序启动的效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种程序启动方法和设备、存储介质。
背景技术
一般地,设备中各种程序的启动都是设备的内存中进行。例如,在嵌入式设备中,通常需要利用静态随机存取存储器(Static Random-Access Memory,SRAM)负责程序的启动。但是现有的方案都是直接一次性将程序启动所需要的所有代码从外部存储器加载到内部存储器中,这种方式比较适用需要启动的程序较小的情况,一旦需要启动的程序较大,则很可能导致程序启动速度过慢,导致程序的响应过慢。
发明内容
本申请至少提供一种程序启动方法和设备、存储介质。
本申请第一方面提供了一种程序启动方法,包括:检测到对程序的启动需求,其中,程序的启动代码至少部分保存在外部存储器,至少部分保存在外部存储器的启动代码包括多个代码段;多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作,其中,每次加载的代码段不同;其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸。
本申请第二方面提供了一种程序启动装置,包括:需求检测模块,用于检测到对程序的启动需求,其中,程序的启动代码至少部分保存在外部存储器,至少部分保存在外部存储器的启动代码包括多个代码段;启动执行模块,用于多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作,其中,每次加载的代码段不同;其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸。
本申请第三方面提供了一种电子设备,包括存储器和处理器,处理器用于执行存储器中存储的程序指令,以实现上述程序启动方法。
本申请第四方面提供了一种计算机可读存储介质,其上存储有程序指令,程序指令被处理器执行时实现上述程序启动方法。
上述方案,通过分段存储在外部存储器中的启动代码加载到内部存储器中并执行,无需一次性将所有的启动代码加载到内部存储器中,能够提高程序启动效率。例如,在程序较大的情况下,在程序启动时,若需要一次性加载该程序启动所需的全部启动代码,则可能会导致启动速度过慢,导致程序响应过慢。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。
图1是本申请程序启动方法一实施例的第一流程示意图;
图2是本申请程序启动方法一实施例中示出内部存储器和外部存储器之间的交流示意图;
图3是本申请程序启动装置一实施例的结构示意图;
图4是本申请电子设备一实施例的结构示意图;
图5是本申请计算机可读存储介质一实施例的结构示意图。
具体实施方式
下面结合说明书附图,对本申请实施例的方案进行详细说明。
以下描述中,为了说明而不是为了限定,提出了诸如特定***结构、接口、技术之类的具体细节,以便透彻理解本申请。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。此外,本文中的“多”表示两个或者多于两个。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
请参阅图1,图1是本申请程序启动方法一实施例的第一流程示意图。具体而言,可以包括如下步骤:
步骤S11:检测到程序的启动需求,其中,程序的启动代码至少部分保存在外部存储器,至少部分保存在外部存储器的启动代码包括多个代码段。
至少部分可以是部分启动代码,也可以是全部启动代码。可选地,具体多少存储在外部存储器中可以根据程序和内部存储器的大小确定。
本公开实施例所提供的方法可应用到嵌入式设备的程序启动中,例如,对功耗、成本有要求的MCU(Microcontroller Unit,微控制单元)或IVI(In-Vehicle Infotainment,车载综合信息处理***),当然,这仅是举例,本公开实施例所提供的方法可应用到其他任何设备中,以支持较大程序的启动。
在接收到启动指令之后,则确认检测到程序的启动需求。程序的启动代码可以是分段保存在外部存储器中。其中,外部存储器可以是非易失存储器(例如NOR Flash)、SD卡、eMMC(Embedded Multi Media Card)存储器、网上存储等等。
步骤S12:多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作,其中,每次加载的代码段不同;其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸。
多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作可以一次加载一个代码段,也可以是一次加载多个代码段。具体地,可以是一次加载一个代码段,在该代码段执行之后,再加载下一代码段,直至所有代码段加载完成,也可以是一次加载多个代码段,在加载的多个代码段均执行完成之后或部分代码段执行完成之后,再加载多个代码段,直至所有代码段均加载完成。其中,这里的加载操作可以是复制操作。每次将外部存储器中的代码段加载到内部存储器中的数量主要取决于内部存储器的存储空间。若内部存储器的空间能够支持一次性加载多个代码段,则为了提高效率,可以一次性加载多个代码段,若内部存储器的空间不足,则一次仅加载单个代码段。
其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸,使得内部存储器能够正常加载代码段,减小加载出错导致程序启动失败的概率。
上述方案,通过分段存储在外部存储器中的启动代码加载到内部存储器中并执行,无需一次性将所有的启动代码加载到内部存储器中,能够提高程序启动效率。例如,在程序较大的情况下,在程序启动时,若需要一次性加载该程序启动所需的全部启动代码,则可能会导致启动速度过慢,即程序响应过慢。
一些公开实施例中,在多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作的过程中,判断内部存储器的存储空间是否小于待加载的代码段所需的存储空间。在判断结果为是的情况下,至则执行以下任一步骤:一是将内部存储器中的至少部分已运行的代码段和/或预设时间段内不会运行的代码段从内部存储器移除,以将待加载的代码段加载到内部存储器中。其中,这里的移除可以是将其从内部存储器中删除。删除的方式包括使用待加载的代码段对其进行覆盖。通过此种方式可以腾出空间用于存储待加载的代码段。二是将内部存储器中已运行的部分代码段和/或预设时间段内不会运行的代码段移动至外部存储器中进行存储。其中,这里的预设时间段可以根据程序启动时间设置。其中,将这部分代码段移动至外部存储器中进行存储可以覆盖与之相同的代码段,或不覆盖外部存储器中任意的代码段直接将其存储在对应的空闲的存储空间中。这里对应的存储空间可以是外部存储器的非通用代码区或其他任意能够存储该代码段的区域均可,此处不做具体限定。可选地,已运行的部分代码段可以是已运行的全部代码段或至少部分代码段。一些具体应用场景中,在至少一次加载代码段之前,若内部存储器的存储空间小于待加载的代码段所需的存储空间,则删除内部存储器中已运行的至少部分代码。例如,执行一次将外部存储器中的代码段加载到内部存储器并运行之后,根据程序启动的要求需要加载并运行外部存储器中的另一段代码,但是内部存储空间因为存储有已经运行过的代码段,导致没有剩余的空间存放程序启动当前需要运行的代码,因此,需要将内部存储器中已经运行过的部分代码从内部存储器中删除,使得腾出空间供存放接下来需要运行的代码。具体地,删除已运行的至少部分代码的方式可以是在运行完一段代码之后就将其删除,或者在运行完此次加载到内部存储器中的所有代码段之后将需要删除的部分代码一起删除或者是利用新的代码段覆盖部分已运行的代码段以实现删除部分已运行的代码段等等,因此,关于删除已运行的至少部分代码的方式此处不做具体规定。
上述方案,在内部存储空间不足的情况下,将内部存储器中已经运行的部分代码给删除之后,再将分段存储在外部存储器中的启动代码加载到内部存储器中并执行,以便支持较大程序的正常启动,通过此种方式,无需将较大程序启动所需代码一次全部加载到内部存储器,使得较小尺寸的内部存储器在不增加内部存储器数量或其他方式进行扩容的情况下,支持较大程序的正常启动。
其中,内部存储器包括代码常驻区、第一数据区、第二数据区以及代码更新区,外部存储器包括通用代码区、第三数据区以及非通用代码区。其中,代码常驻区存储有用于寻址和加载外部存储器的代码,以及对加密代码段进行解密的解码代码、以及用于寻址和加载外部存储器中的数据的代码、以及中断处理程序。其中,第二数据区可以用于存放分段地址映射表、以及用于对加密数据进行解密的解码代码,第一数据区用于加载外部存储器的第三数据区的数据,使得在程序启动过程中需要使用较大数据时,无需增加内部存储器的尺寸。代码更新区用于存储从外部存储器中加载过来的代码。
其中,外部存储器中的通用代码区用于存储运行在内部存储器的代码常驻区中的代码,能够存储加密和非加密的代码。第三数据区能够用于加载内部存储器的第一数据区中的数据。非通用代码区用于存储程序启动需要使用的非通用代码。
为更清楚地描述本公开实施例所提出的内部存储器与外部存储器之间的交流,请同时参见图2,图2是本申请程序启动方法一实施例中示出内部存储器和外部存储器之间的交流示意图。
如图2所示,内部存储器可以是SRAM存储器。其中,内部存储器的代码常驻区与外部存储器的通用代码区对应,第一数据区与第三数据区对应,代码更新区与非通用代码区对应。具体地,可以将通用代码区中的代码加载到代码常驻区中,内部存储器中的第一数据区能够用于加载外部存储器的第三数据区中的数据。可以将非通用代码区中的代码加载到代码更新区。
一些公开实施例中,启动代码包括通用代码和非通用代码。通用代码为每次启动程序均需要运行的代码。其中,通用代码保存在外部存储器的通用代码区或内部存储器的代码常驻区,非通用代码分段保存在外部存储器的非通用代码区。其中,每段非通用代码保存的尺寸小于或等于内部存储器的代码更新区的尺寸。其中,通用代码可以是***启动代码、加/解密代码、中断处理程序代码等。***启动代码可以用于实现***初始化等效果,加/解密代码可以用于对加密代码进行解密等操作,中断处理程序代码将在后面进行陈述。
其中,多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作的具体方式可以是:
一、将外部存储器中的通用代码加载到内部存储器中的代码常驻区,并运行至少部分通用代码。其中,将外部存储器中的通用代码加载到内部存储器中的方式可以是从最开始的BootROM启动,BootROM把外部存储器中通用代码区中的通用代码搬运至内部存储器的代码常驻区。其中,这里的搬运可以是复制操作,即把外部存储器中通用代码区中的通用代码复制到内部存储器中的代码常驻区。其中,若通用代码是加密的,则由BootROM负责先解密,再搬运。这里的BootROM通常可以作为引导加载程序。通过将通用代码加载到内部存储器中的代码常驻区,非通用代码加载到内部存储器中的代码更新区,即分开存储通用代码和非通用代码,防止将通用代码和非通用代码混淆。
其中,运行至少部分通用代码包括以下至少一步:1、进行***初始化,2、建立地址映射表,并将地址映射表保存在内部存储器的第二数据区。其中,地址映射表用于保存非通用代码在代码更新区的存储地址,和/或程序启动所需要使用的数据在内部存储器中的第一数据区的存储地址。具体地,地址映射表可以是一个也可以是两个,当地址映射表为一个时,地址映射表可用于保存非通用代码在代码更新区的存储地址和程序启动所需要使用的数据在内部存储器中的第一数据区的存储地址。其中,地址映射表中还包括非通用代码段或数据在外部存储器中的地址。具体地,地址映射表用于保存非通用代码在代码更新区的存储地址和在外部存储器的非通用代码区中的存储地址之间的映射,和/或程序启动所需要使用的数据在内部存储器的第一数据区的存储地址和外部存储器中第三数据区的存储地址之间的映射。也就是,代码段可同时存在于内部存储器以及外部存储器中,地址映射表可用于保存代码段在两个存储器中的地址之间的映射关系。当地址映射表分别为代码地址映射表和数据地址映射表时,代码地址映射表用于保存非通用代码在代码更新区的存储地址,数据地址映射表用于保存程序启动所需要使用的数据在第一数据区的存储地址。如上述,将非通用代码段加载到内部存储器中的操作可以是复制,即一段非通用代码段可以同时存在于内部存储器和外部存储器中,此时代码地址映射表可以同时保存该非通用代码段在内部存储器和外部存储器中的地址。当然,数据地址映射表中也可包括数据在外部存储器中的地址。其中,非通用代码或数据的存储位置发生变动时,则更新对应的地址映射表,使得地址映射表能够保存数据或非通用代码的最新存储地址信息。一些公开实施例中,非通用代码或数据被加载之前,先更新对应的地址映射表。例如,在将非通用代码段加载到内部存储器之前,先更新代码地址映射表,或在将数据加载到内部存储器之前,先更新数据地址映射表。在更新对应的地址映射表之后,再加载对应的非通用代码或数据到内部存储器。
二、在运行完至少部分通用代码后,至少一次执行将外部存储器中的至少一段非通用代码加载至内部存储器的代码更新区并运行代码更新区的非通用代码的操作。例如,在进行***初始化和建立地址映射表之后搬运程序将外部存储器中非通用代码区中的第一段代码加载到内部存储器中的代码更新区,并执行位于内部存储器的该第一段代码。在将外部存储器读取到的代码加载到内部存储器之前,若检测到代码处于加密状态,则运行对应的解码代码对该段代码进行解密。具体地,对代码进行解密的解码代码为通用代码。通过解码代码能够使得处于加密状态的程序能够被正常启动,相对于没有解码代码而言,提高了程序启动的成功率。
在将程序中的启动代码保存在外部存储器的过程中,将启动代码中的非通用代码分成若干段,例如划分为X段,并按照顺序将该若干段非通用代码存储在外部存储器的非通用代码区。其中,启动代码中非通用代码的分段方式可以根据启动代码的大小进行确定,这里大小指的是所占存储空间的大小,例如,非通用代码较大,则分段数可相对较大,若非通用代码较小,则分段数可相对较小。
具体地,外部存储器中的非通用代码区也进行了分段,即分为第一非通用代码区、第二非通用代码区……第N非通用代码区。其中,启动代码中非通用代码段的分段数(X)小于或等于外部存储器中非通用代码区的分段(N)。当然,外部存储器中每段非通用代码区均大于或等于启动代码的每段大小。可选地,外部存储器中非通用代码区所划分的每个非通用代码段的大小小于或等于内部存储器代码更新区的大小。
在运行代码更新区的非通用代码过程中,若非通用代码出现运行异常,则运行代码常驻区中的第一中断处理程序,以执行若检测到待运行的非通用代码未存储在代码更新区,则将外部存储器中待运行的非通用代码加载到代码更新区并运行。具体地,待运行的非通用代码可根据定位指令指示。可选地,定位指令通过携带待运行的非通用代码标识以指示待运行的非通用代码。这里的非通用代码标识可以是非通用代码的地址,也可以是非通用代码的分段标识。具体地,在非通用代码标识为分段标识的情况下,可以将非通用代码分为X段,则非通用代码标识则可以是非通用代码所处段数,例如,待运行的非通用代码所处位置在第3段,则非通用代码标识则为3。当然,待运行代码段的标识可以是多段非通用代码的标识,例如3-4。当然,非通用代码标识仅为举例,在其他实施例中能够表示非通用代码的方式均可,此处不做具体限定。具体出现运行异常的情况包括根据定位指令携带的待运行非通用代码标识无法在内部存储器中找到对应的非通用代码,则产生运行异常。例如,目标地址映射表中存储的当前代码更新区中非通用代码的最大地址为16,而定位指令携带的非通用代码的地址为17时,就会发生运行异常。
第一中断处理程序通过判断定位指令携带的非通用代码标识是否超出了代码更新区的非通用代码标识,具体方式可以是,第一中断处理程序判断定位指令携带的非通用代码的地址是否大于地址映射表中保存的当前代码更新区中最大的非通用代码的地址。在判断结果为定位指令携带的非通用代码的地址大于地址映射表中保存的当前代码更新区中的最大非通用代码的地址时,认定定位指令所指示的待运行的非通用代码未存储在代码更新区。另一些公开实施例中,第一中断处理程序判断定位指令携带的非通用代码标识是否大于地址映射表中保存的当前代码更新区中的最大非通用代码分段标识。判断结果为定位指令携带的非通用代码分段标识大于地址映射表中保存的当前代码更新区中的最大非通用代码分段标识,则认定定位指令所指示的待运行的非通用代码未存储在代码更新区。然后运行搬运程序将外部存储器中的待运行代码加载到内部存储器中的代码更新区。在加载之前,同样可以先判断待运行代码是否加密,若加密,则先使用通用代码负责先解密,再由搬运程序进行搬运。其中,在搬运程序将外部存储器中的待运行代码加载到内部存储器中的代码更新区之前,先更新代码地址映射表。
其中,删除内部存储器中已运行的至少部分代码的方式可以是将代码更新区已运行的非通用代码删除。具体的删除方式可以是运行一段非通用代码之后就将已运行的非通用代码删除,或在代码更新区中所有的非通用代码均已运行之后,统一删除,或者使用后续加载的其他非通用代码直接覆盖已运行的非通用代码以实现删除已运行的代码的目的。通过将通用代码和非通用代码存储在内部存储器中的两个区域,在保留通用代码的同时将已经运行的非通用代码删除,以腾出空间容纳其余未运行的非通用代码,在实现以小尺寸的内部存储器启动较大程序的同时,也保证了程序的正常启动。
一些公开实施例中,在运行非通用代码过程中所需使用的待访问数据保存在内部存储器中的第一数据区。待访问数据可以是全局变量、函数类的局部变量等等任何程序启动所需的数据均可以成为本公开实施例的待访问数据。
其中,在出现数据异常的情况下,运行代码常驻区的第二中断处理程序,以执行若检测到待访问数据未存储在内部存储器的第一数据区,则将外部存储器中的待访问数据加载到第一数据区。其中,数据异常包括无法在内部存储器中查找到对应的待访问数据。中断处理程序具体监测待访问数据未存储在内部存储器中的第一数据区的方式可以判断地址映射表中是否存储有待访问数据在内部存储器中的地址,若不存在待访问数据在内部存储器中的地址,则认定待访问数据未存储在内部存储器的第一数据区。接着,运行搬运程序,将外部存储器中对应的待访问数据加载到第一数据区。其中,加载待访问数据的搬运程序与加载通用代码或非通用代码的搬运程序可以是相同程序,也可以是不同程序。当然,在加载待访问数据到第一数据区之前,判断待访问数据是否处于加密状态,若处于加密状态,则运行第二数据区的解码代码,以对待访问数据进行解密。在将待访问数据加载到内部存储器中的第一数据区之后,继续运行代码更新区的非通用代码以对待访问数据的访问操作。通过将部分数据存储在外部存储器中,在程序启动需要的时候再加载到内部存储器中,无需时刻都存储在第一数据区,从而在启动较大程序时,能够保证第一数据区有足够的可支配空间能够容纳程序启动所需的数据,从而保障程序的正常启动。
一些公开实施例中,程序启动所需的数据至少部分保存在外部存储器。其中,至少部分保存在外部存储器的数据包括多个数据段。其中,每个数据段的尺寸小于或等于内部存储器中可访问数据段的区域的尺寸。具体划分可参见代码段的划分,关于数据段的划分此处不再赘述。
其中,在检测到对程序的启动需求之后,多次执行将外部存储器中的数据段加载到内部存储器并访问数据段的操作。其中,每次加载的数据段不同。其中,多次执行将外部存储器中的数据段加载到内部存储器的操作可参见多次执行将外部存储器中的代码段加载到内部存储器的操作,此处不再赘述。
一些公开实施例中,多次执行将外部存储器中的数据段加载到内部存储器并访问数据段的操作的过程中可以包括以下步骤:判断待访问数据的大小是否超过阈值。在待访问数据的大小未超过阈值时,则执行将待访问数据加载到内部存储器中的步骤。在待访问数据的大小超过预设阈值的情况下,执行以下至少一个步骤:
一是将满足第一预设条件的其他数据从内部存储器的第一数据区移除,以加载待访问数据。其中,这里的移除可以是将其他数据直接从内部存储器中删除。其中,删除的方式包括使用待访问的数据段对其进行覆盖。其中,待访问数据为程序启动所需要使用的数据中当前需要使用的数据,其他数据为程序启动所需要使用的数据中除待访问数据以外的数据。其中,第一预设条件可以是在程序启动过程中已经访问且不再访问或与程序启动无关。预设阈值的设置可根据内部存储器的第一数据区的可支配空间确定。例如,预设阈值为第一数据区的可支配空间。若待访问数据的大小超出第一数据区当前可支配的空间,即剩余空间,则将满足预设条件的其他数据移动至外部存储器中的第三数据区。也就是说这里的预设阈值并不是固定不变的,可以随着第一数据区的可支配空间动态变化。这里的预设条件可以是较长时间段内不会访问,或已经访问过的数据。较长时间可根据程序启动时间设定,此处不对较长时间做具体规定。
二是将满足第二预设条件的其他数据移动至外部存储器中进行存储,以加载所述待访问数据。其中,第二预设条件可以与第一预设条件相同,也可以与第一预设条件不同。本公开实施例中,第二预设条件可以是程序启动过程中已经访问过的数据,或未访问且一段时间段不会访问的数据。若外部存储器中包括程序启动所需的数据的情况下,在将满足第一预设条件的其它数据从内部存储器的第一数据区移动至外部存储器中的第三数据区时,不会覆盖外部存储器中的数据,或者利用该移动的数据将外部存储器中与该移动的数据相同的数据覆盖。若外部存储器中不包括需要移动的数据的情况下,在将需要移动的数据移动至外部存储器的过程中,不会覆盖外部存储器中的数据。
其中,在多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作过程中,检测待加载的代码段是否加密。若是,则使用对应的解密代码对待加载的代码段进行解密。其中,在多次执行将外部存储器中的代码段加载到内部存储器并访问数据段的操作过程中,检测待访问的数据段是否加密。若是,则使用对应的解密代码对待访问的数据段进行解密。在进行解密之后,再加载对应的代码段或数据段。在将外部存储器读取到的代码或数据加载到内部存储器之前,若检测到代码或数据处于加密,则运行对应的解码代码对待加载代码或待访问数据进行解密。具体对代码解密或数据解密请参见上述,此处不再赘述。通过在待访问数据的大小超过预设阈值的情况下,将满足预设条件的其他数据从内部存储器的第一数据区移动至外部存储器的第三数据区,使得内部存储器中的第一数据区有足够的可支配空间容纳待访问数据,以保障程序的正常启动。
其中,外部存储器的第三数据区也进行了分段,即第三数据区A,第三数据区B……第三数据区M,其中,每个分段都能用于存储待访问数据。具体地,地址映射表还用于存储程序启动所需要使用的数据在内部存储器中的地址及在外部存储器中的地址的映射关系。可选地,第三数据区所划分的每个子段的大小均等于内部存储器的第一数据区的大小,即第三数据A的大小等于第三数据区B的大小=内部存储器第一数据区的大小。当然第三数据区所划分的每个子段的大小也可以小于内部存储器的第一数据区的大小。
其中,本公开实施例所述的程序是由***启动程序、***程序和应用程序中的至少一种构成。具体地,这里的程序是由***启动程序、***程序和应用程序打包而成的一个程序。这个程序可以加密也可以不加密,若加密,则在启动时需要进行解密,由此可以较好的减小被盗用的情况出现。
本公开实施例所提供的技术方案中,内部存储器的大小只需要保证能够存储通用代码以及第一数据区、第二数据区和代码更新区的作用即可,其中,代码更新区的尺寸可根据综合考虑程序启动或运行时的性能进行设定,例如若代码更新区的尺寸过小,则频繁从外部存储器中加载代码,也会使得程序启动速度减慢。因此,关于代码更新区的尺寸可根据实际需求设定,此处不做具体规定。而外部存储器的尺寸同样可根据具体需求选择,只要访问地址线可以支持即可。
上述方案,在内部存储器空间不足的情况下,将内部存储器中已经运行的部分代码给删除之后,再将分段存储在外部存储器中的启动代码加载到内部存储器中并执行,以便支持较大程序的正常启动,通过此种方式,无需将较大程序启动所需代码一次全部加载到内部存储器,使得较小尺寸的内部存储器在不增加内部存储器数量的情况下,支持较大程序的正常启动。
其中,程序启动方法的执行主体可以是程序启动装置,例如,程序启动方法可以由终端设备或服务器或其它处理设备执行,其中,终端设备可以为用户设备(UserEquipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(PersonalDigital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该程序启动方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
请参阅图3,图3是本申请程序启动装置一实施例的结构示意图。程序启动装置30包括需求检测模块31,启动执行模块32。需求检测模块31,用于检测到对程序的启动需求,其中,程序的启动代码至少部分保存在外部存储器,至少部分保存在外部存储器的启动代码包括多个代码段;启动执行模块32,用于多次执行将外部存储器中的代码段加载到内部存储器并运行代码段的操作,其中,每次加载的代码段不同;其中,每个代码段的尺寸小于或等于内部存储器中可执行该代码段的区域的尺寸。
上述方案,通过分段存储在外部存储器中的启动代码加载到内部存储器中并执行,无需一次性将所有的启动代码加载到内部存储器中,能够提高程序启动效率。例如,在程序较大的情况下,在程序启动时,若需要一次性加载该程序启动所需的全部启动代码,则可能会导致启动速度过慢,即程序响应过慢。
请参阅图4,图4是本申请电子设备一实施例的结构示意图。电子设备40包括存储器41和处理器42,处理器42用于执行存储器41中存储的程序指令,以实现上述任一程序启动方法实施例中的步骤。在一个具体的实施场景中,电子设备40可以包括但不限于:微型计算机、台式电脑、服务器,此外,电子设备40还可以包括笔记本电脑、平板电脑等移动设备,在此不做限定。
具体而言,处理器42用于控制其自身以及存储器41以实现上述任一程序启动方法实施例中的步骤。处理器42还可以称为CPU(Central Processing Unit,中央处理单元)。处理器42可能是一种集成电路芯片,具有信号的处理能力。处理器42还可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器42可以由集成电路芯片共同实现。
上述方案,通过分段存储在外部存储器中的启动代码加载到内部存储器中并执行,无需一次性将所有的启动代码加载到内部存储器中,能够提高程序启动效率。例如,在程序较大的情况下,在程序启动时,若需要一次性加载该程序启动所需的全部启动代码,则可能会导致启动速度过慢,即程序响应过慢。
请参阅图5,图5是本申请计算机可读存储介质一实施例的结构示意图。计算机可读存储介质50存储有能够被处理器运行的程序指令51,程序指令51用于实现上述任一程序启动方法实施例中的步骤。
上述方案,通过分段存储在外部存储器中的启动代码加载到内部存储器中并执行,无需一次性将所有的启动代码加载到内部存储器中,能够提高程序启动效率。例如,在程序较大的情况下,在程序启动时,若需要一次性加载该程序启动所需的全部启动代码,则可能会导致启动速度过慢,即程序响应过慢。
在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。
上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考,为了简洁,本文不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种程序启动方法,其特征在于,所述方法包括:
检测到对程序的启动需求,其中,所述程序的启动代码至少部分保存在外部存储器,所述至少部分保存在外部存储器的启动代码包括多个代码段;
多次执行将所述外部存储器中的所述代码段加载到内部存储器并运行所述代码段的操作,其中,每次加载的所述代码段不同;
其中,所述每个代码段的尺寸小于或等于所述内部存储器中可执行该代码段的区域的尺寸。
2.根据权利要求1所述的方法,其特征在于,所述启动代码包括通用代码和非通用代码,所述通用代码为每次启动所述程序均需要运行的代码;
所述通用代码保存在所述外部存储器的通用代码区或所述内部存储器的代码常驻区,所述非通用代码分段保存在所述外部存储器的非通用代码区;
其中,所述多次执行将所述外部存储器中的所述代码段加载到内部存储器并运行所述代码段的操作,包括:
至少一次执行将所述外部存储器中的至少一段非通用代码加载至内部存储器的代码更新区并运行所述代码更新区的非通用代码的操作。
3.根据权利要求2所述的方法,其特征在于,还包括运行通用代码:
进行***初始化;
建立地址映射表,并将所述地址映射表保存在所述内部存储器的第二数据区,其中,所述地址映射表用于保存所述非通用代码在所述代码更新区的存储地址和所述外部存储器的非通用代码区中的存储地址之间的映射,和/或所述程序启动所需要使用的数据在所述内部存储器的第一数据区的存储地址和所述外部存储器中第三数据区的存储地址之间的映射。
4.根据权利要求2所述的方法,其特征在于,所述将所述外部存储器中的至少一段非通用代码加载至内部存储器的代码更新区并运行所述代码更新区的非通用代码的操作,包括以下至少一个步骤:
若所述非通用代码出现运行异常,运行所述代码常驻区中的第一中断处理程序,以执行若检测待运行的非通用代码未存储在所述代码更新区,则将所述外部存储器中所述待运行的非通用代码加载到所述代码更新区并运行所述代码更新区的非通用代码。
5.根据权利要求2所述的方法,其特征在于,还包括:
在出现数据异常的情况下,运行所述代码常驻区中的第二中断处理程序,以执行若检测到待访问数据未存储在所述内部存储器的第一数据区,则将所述外部存储器中的所述待访问数据加载到所述第一数据区;其中,所述数据异常包括无法在内部存储器中查找到所述待访问数据。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述多次执行将所述外部存储器中的所述代码段加载到内部存储器并运行所述代码段的操作,包括:
判断所述内部存储器的存储空间是否小于待加载的所述代码段所需的存储空间;
若是,则执行以下任一步骤:
将所述内部存储器中的至少部分已运行的代码段和/或预设时间段内不会运行的代码段从所述内部存储器移除,以将所述待加载的代码段加载到所述内部存储器中;
将所述内部存储器中至少部分已运行的部分代码段和/或预设时间段内不会运行的代码段移动至外部存储器中进行存储,以将所述待加载的代码段加载到所述内部存储器中。
7.根据权利要求1所述的方法,其特征在于,所述程序启动所需的数据至少部分保存在外部存储器,其中,所述至少部分保存在外部存储器的数据包括多个数据段;所述方法还包括:
多次执行将所述外部存储器中的所述数据段加载到内部存储器并访问所述数据段的操作,其中,每次加载的所述数据段不同;
其中,所述每个数据段的尺寸小于或等于所述内部存储器中可访问所述数据段的区域的尺寸。
8.根据权利要求7所述的方法,其特征在于,所述多次执行将所述外部存储器中的所述数据段加载到内部存储器并访问所述数据段的操作,包括:
在待访问数据的大小超过预设阈值的情况下,执行以下至少一个步骤:
将满足第一预设条件的其他数据从内部存储器的第一数据区移除,以加载所述待访问数据;
将满足第二预设条件的其他数据移动至外部存储器中进行存储,以加载所述待访问数据;
其中,所述待访问数据为所述程序启动所需要使用的数据中当前需使用的数据,所述其他数据为所述程序启动所需要使用的数据中除所述待访问数据以外的数据。
9.根据权利要求1所述的方法,其特征在于,所述多次执行将所述外部存储器中的所述代码段加载到内部存储器并运行所述代码段的操作,或多次执行将所述外部存储器中的所述数据段加载到内部存储器并访问所述数据段的操作,包括:
检测待加载的代码段或待访问的数据段是否加密;
若是,则使用对应的解密代码对所述待访问的代码段或数据段进行解密。
10.一种电子设备,其特征在于,包括存储器和处理器,所述处理器用于执行所述存储器中存储的程序指令,以实现权利要求1至9任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110603413.9A CN115480835A (zh) | 2021-05-31 | 2021-05-31 | 程序启动方法和设备、存储介质 |
JP2022060054A JP7355876B2 (ja) | 2021-05-31 | 2022-03-31 | プログラム起動方法及び機器、記憶媒体 |
US17/829,247 US20220382563A1 (en) | 2021-05-31 | 2022-05-31 | Program startup method, electronic system, and non-transitory storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110603413.9A CN115480835A (zh) | 2021-05-31 | 2021-05-31 | 程序启动方法和设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115480835A true CN115480835A (zh) | 2022-12-16 |
Family
ID=84195368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110603413.9A Pending CN115480835A (zh) | 2021-05-31 | 2021-05-31 | 程序启动方法和设备、存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220382563A1 (zh) |
JP (1) | JP7355876B2 (zh) |
CN (1) | CN115480835A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2024073820A (ja) | 2022-11-18 | 2024-05-30 | 日本光電工業株式会社 | 表示制御装置、およびコンピュータプログラム |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001027953A (ja) * | 1999-07-15 | 2001-01-30 | Mitsubishi Electric Corp | 半導体記憶装置 |
US6920543B1 (en) * | 1999-12-14 | 2005-07-19 | Genesis Microchip, Inc. | Method and apparatus for performing distributed processing of program code |
US7185331B2 (en) * | 2002-08-27 | 2007-02-27 | Inrange Technologies Corporation | Method and apparatus for downloading executable code in a non-disruptive manner |
JP5061438B2 (ja) | 2005-08-29 | 2012-10-31 | 富士通株式会社 | 情報処理装置、起動方法及び起動プログラム |
JP5955618B2 (ja) | 2012-04-18 | 2016-07-20 | アルパイン株式会社 | 電子機器 |
GB2512376A (en) * | 2013-03-28 | 2014-10-01 | Ibm | Secure execution of software modules on a computer |
KR20170133116A (ko) * | 2016-05-25 | 2017-12-05 | 에스케이하이닉스 주식회사 | 전자 장치 및 그것의 동작 방법 |
US10776493B2 (en) * | 2018-10-12 | 2020-09-15 | Hewlett Packard Enterprise Development Lp | Secure management and execution of computing code including firmware |
CN114253758A (zh) * | 2020-09-21 | 2022-03-29 | 华为技术有限公司 | 一种数据处理方法及相关装置 |
-
2021
- 2021-05-31 CN CN202110603413.9A patent/CN115480835A/zh active Pending
-
2022
- 2022-03-31 JP JP2022060054A patent/JP7355876B2/ja active Active
- 2022-05-31 US US17/829,247 patent/US20220382563A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
JP2022184735A (ja) | 2022-12-13 |
US20220382563A1 (en) | 2022-12-01 |
JP7355876B2 (ja) | 2023-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108763099B (zh) | ***的启动方法、装置、电子设备和存储介质 | |
US7664923B2 (en) | Method and system for updating software | |
JP4960364B2 (ja) | ハードウェア支援されたデバイス設定検出 | |
US11221838B2 (en) | Hot update method, operating system, terminal device, system, and computer-readable storage medium for a system process | |
CN110825563B (zh) | ***恢复方法、装置以及电子设备 | |
US7512777B2 (en) | Method and system for maintaining system management BIOS | |
US9684518B2 (en) | Option read-only memory use | |
US20100268867A1 (en) | Method and apparatus for updating firmware as a background task | |
KR101555210B1 (ko) | 휴대용 단말기에서 내장 대용량 메모리를 이용한 컨텐츠 다운로드 방법 및 장치 | |
WO2019048933A1 (en) | METHOD AND APPARATUS FOR DELETING OR WRITING FLASH DATA | |
US9542113B2 (en) | Apparatuses for securing program code stored in a non-volatile memory | |
CN115480835A (zh) | 程序启动方法和设备、存储介质 | |
CN112219202A (zh) | 用于客户操作***的存储器分配 | |
CN110941516B (zh) | 操作***还原方法、装置、设备及存储介质 | |
CN110955885B (zh) | 一种数据写入方法及装置 | |
CN111125723A (zh) | 加密卡识别方法、装置、设备及存储介质 | |
EP1710697A1 (en) | Method and apparatus for executing application in system having NAND flash memory | |
EP3992783A1 (en) | Patch releasing method, server and terminal device | |
CN116009969A (zh) | 应用程序控制方法、装置、电子设备、芯片及存储介质 | |
CN114968297A (zh) | Ota升级方法、电子设备及芯片*** | |
CN117150583B (zh) | 一种应用于PNOR flash的访问保护方法及装置 | |
CN111198723B (zh) | 一种进程注入方法、终端设备及计算机可读存储介质 | |
CN107247641B (zh) | 在线还原操作***的方法和装置 | |
KR20090103214A (ko) | 부분 패치를 이용한 휴대용 단말기 소프트웨어의 부분업그레이드 방법 및 이를 수행하는 휴대용 단말기 | |
CN112783525A (zh) | 一种守护进程升级方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |