CN116627855B - 内存处理方法及相关装置 - Google Patents

内存处理方法及相关装置 Download PDF

Info

Publication number
CN116627855B
CN116627855B CN202310906332.5A CN202310906332A CN116627855B CN 116627855 B CN116627855 B CN 116627855B CN 202310906332 A CN202310906332 A CN 202310906332A CN 116627855 B CN116627855 B CN 116627855B
Authority
CN
China
Prior art keywords
memory
application
memory space
released
space
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
Application number
CN202310906332.5A
Other languages
English (en)
Other versions
CN116627855A (zh
Inventor
高旭
常胜男
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Honor Device Co Ltd
Original Assignee
Honor Device Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310906332.5A priority Critical patent/CN116627855B/zh
Publication of CN116627855A publication Critical patent/CN116627855A/zh
Application granted granted Critical
Publication of CN116627855B publication Critical patent/CN116627855B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供了内存处理方法及相关装置,该方法应用于电子设备,电子设备的内存包括第一内存空间和第二内存空间,第一内存空间的最小内存申请量大于第二内存空间的最小内存申请量,包括:获取第一系统消息,第一系统消息用于指示存储待存储数据所需要的内存需求量;在内存需求量小于第一内存空间的最小内存申请量的情况下,从第二内存空间中申请内存。本申请可以减少内存资源的浪费。

Description

内存处理方法及相关装置
技术领域
本申请涉及计算机技术领域,尤其涉及内存处理方法及相关装置。
背景技术
随着计算机科学技术的不断发展,电子设备中的应用软件功能越来越强大。示例性地,相机应用可以提供多种拍摄模式,比如人像模式、夜景模式、长曝光模式以及大光圈模式等,不同的拍摄模式下采用不同的拍摄参数,以适配不同的拍摄场景,得到质量更好的照片。
在采用某一拍摄模式图片采集之前,需要申请内存来存放该拍摄模式对应的拍摄参数,但是申请到的内存往往比实际待存储数据所需要的内存量大,导致内存资源浪费。
发明内容
本申请实施例提供了内存处理方法及相关装置,本申请可以减少内存资源的浪费。
第一方面,本申请实施例提供了一种内存处理方法,应用于电子设备,上述电子设备的内存包括第一内存空间和第二内存空间,上述第一内存空间的最小内存申请量大于上述第二内存空间的最小内存申请量,上述方法包括:
获取第一系统消息,上述第一系统消息用于指示存储待存储数据所需要的内存需求量;
在上述内存需求量小于上述第一内存空间的最小内存申请量的情况下,从上述第二内存空间中申请内存。
本实施例中,内存处理方法的执行主体可以是电子设备,也可以是电子设备中的程序,比如可以是驱动程序,也可以是本申请实施例中的内存申请函数。其中,在执行主体是驱动程序的情况下,可以不同类别的驱动程序,具体可以根据应用场景确定。比如在拍摄参数的存储场景中,执行主体可以是摄像头驱动程序;又比如在音效参数的存储场景中,执行主体可以是音频驱动。
本申请实施例中,电子设备的内存包括第一内存空间和第二内存空间,其中,第一内存空间包括的物理地址范围与第二内存空间包括的物理地址范围不重叠,因此,从第一内存空间中申请到的内存的物理地址与从第二内存空间中申请到的内存的物理地址不同。
内存空间的最小内存申请量可以理解为从该内存空间中申请内存时得到的最小内存量,示例性地,假如内存空间A的最小申请量为10KB,那么从内存空间A中申请内存时,即便只需要5KB内存也会得到10KB的内存。本申请实施例中,第一内存空间的最小内存申请量大于第二内存空间的最小内存申请量。
本申请实施例中,待存储数据可以是任意既可以存储在第一内存空间,又可以存储在第二内存空间中的数据,比如可以是拍摄参数,音效参数等,本申请对此不作限定。
本申请实施例中,第一系统消息可以是待存储数据本身,也可以是待存储数据的数据量大小,也可以是其他指示待存储数据的数据量大小的指示信息,本申请对此不作限定。本申请实施例中,待存储数据的数据量可以理解为内存需求量,也就是存储该待存储数据需要的内存量。
应理解,内存需求量与最终申请到的内存量不一定是相同的,在内存需求量小于第一内存空间的最小内存申请量时,最终申请到的内存量将大于内存需求量,造成内存资源浪费。本实施例中,在内存需求量小于第一内存空间的最小内存申请量的情况下,从第二内存空间中申请内存,由于第二内存空间的最小内存申请量比第二内存空间的最小内存申请量小,本实施例提供的方法可以减少内存资源的浪费。
可选地,内存需求量也可以理解为后文图6和图7所示的实施例中的内存申请量。
结合第一方面,在一种可能的实现方式中,上述方法还包括:
在上述内存需求量大于上述第一内存空间的最小内存申请量的情况下,从上述第一内存空间中申请内存。
可以理解,内存空间的最小内存申请量越大,意味着该内存空间更适合分配大块内存。本实施例中,在内存需求量小于第一内存空间的最小内存申请量的情况下,从第二内存空间中申请内存;在内存需求量大于第一内存空间的最小内存申请量的情况下,从第一内存空间中申请内存,既可以减少资源浪费,可以在内存不足的情况下提高内存申请的成功率。
在一些实施例中,在内存需求量等于第一内存空间的最小内存申请量的情况下,可以从第一内存空间中申请内存,也可以从第二内存空间中申请内存,可以视具体情况而定。
结合第一方面,在一种可能的实现方式中,上述电子设备的内核程序中包括驱动程序和内存申请函数,上述内存申请函数为上述内核程序中除上述驱动程序以外的其他程序;上述获取第一系统消息,包括:
上述内存申请函数接收上述驱动程序发送的上述第一系统消息。
本实施例中,由内存申请函数接收驱动函数发送的系统消息,然后在内存需求量小于第一内存空间的最小内存申请量的情况下,从第二内存空间中申请内存;或者,在内存需求量大于第一内存空间的最小内存申请量的情况下,从第一内存空间中申请内存。可以理解,在一次执行过程中,只会有上述两个分支的其中一个分支,在多次执行才会包含上述两个分支的情况。
本实施例的具体介绍还可以参阅图7,这里不再赘述。本实施例中,由内存申请函数根据内存需求量去申请内存,那么不同场景中的内存申请都可以使用该内存申请函数来减少内存资源浪费,操作简单。
结合第一方面,在一种可能的实现方式中,上述电子设备的内核程序中还包括内存释放函数,上述内存释放函数为上述内核程序中除上述驱动程序以外的其他程序;上述方法还包括:
上述内存释放函数接收第二系统消息,上述第二系统消息用于指示待释放内存的虚拟地址;
上述内存释放函数根据上述待释放内存的虚拟地址确定上述待释放内存的物理地址;
在上述待释放内存的物理地址在上述第一内存空间的物理地址范围内的情况下,上述内存释放函数从上述第一内存空间中释放上述待释放内存。
可以理解,接收到第一系统消息后根据内存需求量申请到的内存可能是从第一内存空间中得到的,也可能是从第二内存空间中的得到的。因此,本申请实施例中,在释放待释放内存之前需要判断内存来自哪个内存空间,然后基于该内存空间的释放方式对待释放内存进行释放,以免内存释放失败导致内存长时间占用,浪费资源。可选地,上述待释放内存可以理解为通过前文实施例中的方法申请得到的内存。
可以理解,不同类型的内存的地址情况是不同的,比如连续物理内存的物理地址连续,虚拟地址也连续,且物理地址与虚拟之间的偏移关系是确定的,又比如非连续物理内存的物理地址是不连续的,物理地址与虚拟地址之间需要建立映射关系。对于上层应用来说,处理的是内存的虚拟地址,但是无论是哪种类型的内存,在知道了内存的虚拟地址后,都可以通过偏移关系或映射关系确定出对应的物理地址。
内存释放函数从上述第一内存空间中释放上述待释放内存,可以理解为,基于第一内存空间的释放方式对待释放内存进行释放。示例性地,第一内存空间为非直接映射区,从第一内存空间中申请到的内存为非连续物理内存,在待释放内存的物理地址在第一内存空间的物理地址范围内的情况下,内存释放函数释放待释放内存包括:将待释放内存的物理地址和虚拟地址设置为空闲状态,将待释放内存的物理地址和虚拟地址之前的映射关系解除。
本实施例中,由内存申请函数申请内存,由内存释放函数对申请到的内存进行释放,可以直接被各种场景所调用,而不用修改各个驱动程序代码,操作简单。
结合第一方面,在一种可能的实现方式中,上述方法还包括:
在上述待释放内存的物理地址在上述第二内存空间的物理地址范围内的情况下,上述内存释放函数从上述第二内存空间中释放上述待释放内存。
内存释放函数从上述第二内存空间中释放上述待释放内存,可以理解为,基于第二内存空间的释放方式对待释放内存进行释放。示例性地,第二内存空间为直接映射区,从第二内存空间中申请到的内存为连续物理内存,在待释放内存的物理地址在第二内存空间的物理地址范围内的情况下,内存释放函数释放待释放内存包括:将待释放内存的物理地址设置为空闲状态。由于连续物理内存的物理地址与虚拟地址之间的映射是直接偏移得到的,不需要解除映射关系。
对以上两个实施例的介绍还可以参阅后文实施例中的图9,这里不再赘述。
结合第一方面,在一种可能的实现方式中,上述电子设备中的内核程序包括驱动程序,上述方法还包括:
上述驱动程序接收第二系统消息,上述第二系统消息用于指示待释放内存的虚拟地址;
上述驱动程序根据上述待释放内存的虚拟地址确定上述待释放内存的物理地址;
在上述待释放内存的物理地址在上述第一内存空间的物理地址范围内的情况下,上述驱动程序从上述第一内存空间中释放上述待释放内存。
结合第一方面,在一种可能的实现方式中,上述方法还包括:
在上述待释放内存的物理地址在上述第二内存空间的物理地址范围内的情况下,上述驱动程序从上述第二内存空间中释放上述待释放内存。
本实施例中,由驱动程序申请内存以及对申请到的内存进行释放,具体可以参阅后文图6和图8的相关描述,这里不再赘述。
可选地,上述第一系统消息可以理解为后文实施例中的内存申请消息,上述第二系统消息可以理解为后文实施例中的内存释放消息。上述第一内存空间可以理解为后文实施例中的非直接映射区,上述第二内存空间可以理解为后文实施例中的直接映射区。
第二方面,本申请实施例提供了一种内存处理装置,包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的单元。
第三方面,本申请实施例提供一种电子设备,包括处理器、存储器;上述存储器的内存包括第一内存空间和第二内存空间,所述第一内存空间的最小内存申请量大于所述第二内存空间的最小内存申请量;上述存储器与上述处理器耦合,上述存储器用于存储计算机程序代码,上述计算机程序代码包括计算机指令,上述处理器调用上述计算机指令,以使第一方面或第一方面的任意可能的实现方式中的方法被执行。
第四方面,本申请实施例提供一种芯片,包括逻辑电路和接口,上述逻辑电路和接口耦合;上述接口用于输入和/或输出代码指令,上述逻辑电路用于执行上述代码指令,以使第一方面或第一方面的任意可能的实现方式中的方法被执行。可以理解的是,在芯片为执行主体的情况下,芯片用于执行步骤,上述对内存的限定可以理解为运行环境的限定,示例性地,上述第一内存空间和上述第二内存空间可以均在芯片内,或者,上述第一内存空间在芯片外,上述第二内存空间在芯片内。
第五方面,本申请实施例提供一种计算机程序产品,上述计算机程序产品包括程序指令,上述程序指令当被处理器执行时,使第一方面或第一方面的任意可能的实现方式中的方法被执行。
第六方面,本申请实施例提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,当上述计算机程序在处理器上运行时,使第一方面或第一方面的任意可能的实现方式中的方法被执行。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种线性地址与物理地址之间的映射关系的示意图;
图2是本申请实施例提供的一种内存分区的示意图;
图3是本申请实施例提供的一种电子设备100的结构示意图;
图4是本身申请实施例提供的一种软件结构框图;
图5是本申请实施例提供的一种为相机应用分配内存的流程示意图;
图6是本申请实施例提供的一种内存申请方法的流程示意图;
图7是本申请实施例提供的另一种内存申请方法的流程示意图;
图8是本申请实施例提供的一种内存释放方法的流程示意图;
图9是本申请实施例提供的另一种内存释放方法的流程示意图。
具体实施方式
本申请以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。还应当理解,本申请中使用的术语“和/或”是指并包含一个或多个所列出项目的任何或所有可能组合。
本申请的说明书、权利要求书及附图中的术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。还应理解,本申请实施例中,步骤前的编号是为了便于理解和方案描述而作出的,而不应该理解为对步骤执行顺序的限定。
电子设备中不同内存空间的最小内存申请量不同,本申请实施例提供了内存处理方法及相关装置,电子设备根据存储待存储数据的内存申请量确定申请内存的内存空间,可以减少内存申请过程中的内存资源浪费。后续,在需要释放内存时,电子设备也可以根据待释放内存的类型进行内存释放。
为便于理解,接下来先介绍本申请实施例涉及到的术语。
在操作系统中,中央处理器(central processing unit,CPU)所能直接访问的存储设备包括电子设备的内存和CPU内的寄存器,示例性地,程序指令可以用内存地址作为参数,而不能用磁盘地址作为参数。因此,执行指令以及指令使用的数据必须在CPU可以直接访问的存储设备上,如果数据不在内存中,那么在CPU在使用前必须先把数据移到内存中。
1、用户空间和内核空间
在电子设备的操作系统中,内存空间可以包括用户空间和内核空间,其中,用户空间可以理解为用于运行用户进程的内存空间,内核空间可以理解为用于运行操作系统内核程序的内存空间。
以地址总线为32比特的CPU为例,用户空间的内存总容量为3GB,其地址范围从0x00000000至0xBFFFFFFF;内核空间的内存总容量为1GB,其地址范围从0xC0000000至0xFFFFFFFF。因此,可以理解,内存中0-3GB的地址空间为用户空间,3GB-4GB的地址空间为内核空间。
2、线性地址和物理地址
物理地址可以理解为物理内存条中的地址,线性地址可以理解为将物理地址转换后得到的地址。物理地址与线性地址之间存在的映射关系可以由内存管理单元(memorymanage unit,MMU)维护,比如具体可以通过映射存储映射关系,那么,在已知线性地址的情况下,通过映射表就可以确定对应的物理地址,从而访问对应的物理内存空间。
可选地,线性地址也可以称为虚拟地址,本申请对此不作限定。
线性地址为连续地址,但是线性地址映射的物理地址可以是连续,也可以是非连续的。为便于理解,示例性地,请参阅图1,图1是本申请实施例提供的一种线性地址与物理地址之间的映射关系的示意图。
如图1所示,进程A分配到的内存空间的线性地址为0x30-0x36,经过MMU中映射关系的转换,上述线性地址0x30-0x36对应的物理地址为0x80-0x0D。容易理解,进程A分配到的内存空间的线性地址是连续的,该线性地址映射的物理地址也是连续的。
进程B分配到的内存空间的线性地址为0x50-0x60,经过MMU中映射关系的转换,上述线性地址0x50-0x60对应的物理地址为0x38-0x40以及0x70-0x78。容易理解,进程B分配到的内存空间的线性地址是连续的,但是该线性地址映射的物理地址是非连续的。
因此,可以理解,虽然线性地址都是连续的,但是如图1所示的进程的A分配到的内存为连续物理内存,而进程B分配到的内存为非连续物理内存。
3、内存分区
从内核空间中申请连续物理内存可以由kmalloc函数实现,从内核空间中申请的非连续物理内存可以由vmalloc函数实现。内核空间中,不同的内存空间支持的分配方式不同。示例性地,请参阅图2,图2是本申请实施例提供的一种内存分区的示意图。如图2所示,内核空间可以包括直接映射区和非直接映射区,其中,直接映射区的线性地址和物理地址之间存在线性转换关系,比如上述图1中进程A分配到的内存,可以认为是从直接映射区申请得到的。非直接映射区的线性地址连续,但是该线性地址对应的物理地址不一定连续,比如上述图1中进程B分配到的内存,可以认为是从非直接映射区申请得到的。
因此,可以理解,kmalloc函数申请的内存属于直接映射区,vmalloc函数申请的内存属于非直接映射区,直接映射区包括的地址段与非直接映射区包括的地址段不同,且直接映射区包括的地址段与非直接映射区包括的地址段不重叠。为便于理解,以地址总线为32比特的CPU为例,在大小为1GB的内核空间中,从0xC0000000(即3GB处)至最大896M的区间可以理解为直接映射区,从vmalloc_start至vmalloc_end的区间可以理解为非直接映射区。其中,vmalloc_start至vmalloc_end的非直接映射区与直接映射区之间不重叠,即vmalloc_start在直接映射区以外,vmalloc_end在0xFFFFFFFF(即4GB处)之内。如图2所示,非直接映射区与直接映射区之间可以包括缓冲区,用于防止越界申请内存。
可以理解的是,不同的电子设备中的直接映射区和非直接映射区的具体位置可以是不同的,但是对于某一电子设备,内存中的直接映射区和非直接映射区是固定的。因此,如果某一地址落在直接映射区的内存地址范围内,那么可以认为该内存为物理内存,是通过kmalloc函数申请得到的。类似地,如果该地址落在非直接映射区的内存地址范围内,那么可以认为该内存非连续物理内存,是通过vmalloc函数申请得到的。
可选地,直接映射区也可以称为kmalloc区、物理内存映射区等;非直接映射区也可以称为动态映射区、虚拟内存映射区、vmalloc区等。
综上可知,kmalloc函数申请到的内存是直接映射区中的连续物理内存,其线性地址和物理地址均连续;而vmalloc函数申请到的内存是非直接映射区中的非连续物理内存,其线性地址连续,但是物理地址不一定连续。
kmalloc函数和vmalloc函数申请内存都是以字节为单位进行的。其中,kmalloc函数的最小内存申请量为64字节,但是vmalloc函数申请内存的单位为页(PAGE_SIZE),每页的大小为4KB,即4096字节。示例性地,当调用vmalloc函数申请4MB的内存时,将得到1024个非连续的页。当调用vmalloc函数申请内存小于4KB时,实际申请得到的内存为4KB,将导致存储资源浪费。
本申请可以减少内存资源浪费,本申请提供的方法可以由电子设备执行,接下来介绍本申请实施例提供的电子设备。请参阅图3,图3是本申请实施例提供的一种电子设备100的结构示意图。
电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,加速度传感器180C,指纹传感器180D,温度传感器180E,触摸传感器180F,环境光传感器180G等。
可理解地,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从上述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180F,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180F,使处理器110与触摸传感器180F通过I2C总线接口通信,实现电子设备100的触摸功能。
I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现电子设备100的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现电子设备100的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
可理解地,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图片或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC ,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system ,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图片,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。在一些实施例中,显示屏194可以用于动效显示。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图片或视频播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
在一些实施例中,内部存储器121也可以称为内存,可以包括上述用户空间和上述内核空间,其中,内核空间中可以包括上述直接映射区和上述非直接映射区。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
扬声器170A,也称喇叭,用于将音频电信号转换为声音信号。
受话器170B,也称听筒,用于将音频电信号转换成声音信号。当电子设备100接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。
麦克风170C,也称话筒或传声器,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170C发声,将声音信号输入到麦克风170C。电子设备100可以设置至少一个麦克风170C。在另一些实施例中,电子设备100可以设置两个麦克风170C,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备100还可以设置三个,四个或更多麦克风170C,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。
电子设备100可以根据电容的变化确定压力的强度。示例性地,当有触摸操作作用于显示屏194,电子设备100根据压力传感器180A检测所述触摸操作强度。又示例性地,电子设备100也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
陀螺仪传感器180B可以用于确定电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器180B可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器180B检测电子设备100抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备100的抖动,实现防抖。陀螺仪传感器180B还可以用于导航,体感游戏场景。
加速度传感器180C可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
指纹传感器180D用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180E用于检测温度。在一些实施例中,电子设备100利用温度传感器180E检测的温度,执行温度处理策略。例如,当温度传感器180E上报的温度超过阈值,电子设备100执行降低位于温度传感器180E附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备100对电池142加热,以避免低温导致电子设备100异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备100对电池142的输出电压执行升压,以避免低温导致的异常关机。
触摸传感器180F,也称“触控面板”。触摸传感器180F可以设置于显示屏194,由触摸传感器180F与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180F用于检测作用于其上或附近的触摸操作。触摸传感器180F可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180F也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
环境光传感器180G用于感知环境光亮度。电子设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180G也可用于拍照时自动调节白平衡。环境光传感器180G还可以与接近光传感器180G配合,检测电子设备100是否在口袋里,以防误触。
SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口195可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口195也可以兼容不同类型的SIM卡。SIM卡接口195也可以兼容外部存储卡。电子设备100通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备100采用eSIM,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备100中,不能和电子设备100分离。
在另一些实施例中,处理器110可以调用内部存储器121存储的计算机指令,以实现本申请实施例提供的内存处理方法。
示例性地,处理器110可以调用内部存储器121存储的计算机指令,确定需要申请的内存大小,然后通过该内存大小从不同的内存空间中申请内存。示例性地,该计算机指令可以从直接映射区申请连续物理内存,也可以从非连续映射区申请非连续物理内存。
可以理解的是,电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构,本申请对此不作限定。为便于理解,示例性地,请参阅图4,图4是本申请实施例提供的一种软件结构框图。如图4所示的分层架构将软件分成若干个层,每一层都有清晰的角色和分工,层与层之间可以通过软件接口通信。
在一些实施例中,可以将电子设备的系统分为五层,从上至下分别为应用程序层,应用程序框架层,系统运行库层,硬件抽象层(hardware abstraction layer,HAL)以及内核层。对上述各个层的描述如下:
应用程序层可以包括一系列应用程序包。示例性地,应用程序层的应用程序包可以包括相机、图库、日历、通话、地图、导航、浏览器、视频、音乐以及短信息等应用程序。
应用程序框架层可以为应用程序层中的应用程序提供应用编程接口(application programming interface,API)和编程框架。应用程序框架层可以包括一些预先定义的函数。
示例性地,应用程序框架层可以包括活动管理器(activity manager)、窗口管理器(window manager),内容提供器(content provider),视图系统(view system),电话管理器(telephony manager),资源管理器(resource manager),通知管理器(notificationmanager)以及加速图像处理端口(accelerated graphics port,AGP)等。其中:
活动管理器可以用于管理各个应用程序生命周期以及通常的导航回退功能。
窗口管理器可以用于管理窗口程序。示例性地,窗口管理器可以获取电子设备100的显示屏大小,锁定屏幕,截取屏幕以及判断是否有状态栏等。
内容提供器可以用来存放和获取数据,并使这些数据可以被应用程序访问,使得不同的应用程序之间可以存取或分享数据。示例性地,上述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签以及电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能,例如通话状态的管理(包括接通电话,挂断电话等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。示例性地,通知管理器可以被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
应用程序框架层中的AGP可以用于提高显卡的渲染性能,比如提供给显卡更多的缓存容量,以达到更快的图像处理速度。
系统运行库层可以包括系统库和安卓运行时(Android runtime)。其中:
安卓运行时包括核心库和虚拟机。安卓运行时负责安卓系统的调度和管理。其中,核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以理解为应用程序框架的支撑,是连接应用程序框架层与内核层的重要纽带。系统层可以包括多个功能模块,例如可以包括表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如OpenGL ES),二维图形引擎(例如:SGL)等。其中:
表面管理器可以用于对显示子系统进行管理,比如在电子设备100执行多个应用程序的情况下,负责管理显示与存取操作间的互动。表面管理器还可以用于为多个应用程序提供了二维和三维图层的融合。
媒体库可以支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如可以是MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现三维图形绘图,图像渲染,合成以及图层处理等。
二维图形引擎可以理解为二维绘图的绘图引擎。
硬件抽象层提供标准接口,比如HAL接口定义语言(HAL interface definitionlanguage,HIDL)接口或安卓接口定义语言(android interface definition language,AIDL)接口。
内核层可以理解为硬件和软件之间的抽象层。内核层可以包括安全性、内存管理、进程管理、电源管理、网路协议管理以及驱动管理等系统服务。示例性地,内核层可以包括驱动,比如可以包括显示驱动,摄像头驱动,音频驱动以及传感器驱动等。可选地,内核层也可以称为安卓内核或者内核程序。示例性地,电子设备的硬件层可以包括触控屏(touchpanel,TP)、液晶显示屏(liquid crystal display,LCD)等。
在一些实施例中,内核层可以理解为内核态,其他4个层(即应用程序层、应用程序框架层、系统运行库层以及HAL)可以理解为用户态。
可以理解的是,应用程序层中的相机应用支持多种拍摄模式,比如人像模式、夜景模式、大光圈模式以及长曝光模式等,并且每种拍摄模式使用的拍摄参数是不同的,其中,上述拍摄参数可以是光圈值、快门速度、感光度、曝光度、焦距以及景深等,拍摄参数会以某种特定的规律影响采集到的相机应用采集图片的图片质量。
示例性地,相机应用支持的拍摄模式以及每种拍摄模式对应的拍摄参数可以存储在传感器二进制文件(sensor bin)中,该sensor bin文件可以存储在外存中,比如磁盘、硬盘。在用户选定某个拍摄模式后,相机应用将该拍摄模式对应的拍摄参数读取到内存中,以便于相机应用采集到符合用户要求的图片。
为便于理解,示例性地,请参阅图5,图5是本申请实施例提供的一种为相机应用分配内存的流程示意图。如图5所示,包括:
501:相机应用切换拍摄模式。
用户打开相机应用时会有默认的拍照模式,用户可以对当前的拍摄模式进行切换,比如从默认拍摄模式切换到人像模式等。示例性地,传感器驱动(比如触摸传感器驱动)可以响应用户操作,比如滑动操作或点击操作,从当前拍摄模式切换到其他拍摄模式。然后,相机应用将切换后的拍摄模式的标识信息传递给相机HIDL/AIDL。其中,拍摄模式的标识信息可以是任能够唯一标识该拍摄模式的信息,比如可以是编号,本申请对此不作限定。
502:相机HIDL/AIDL传递该拍摄模式的标识信息。
本步骤中,相机HIDL/AIDL将该拍摄模式的标识信息传递给内核态中的相机驱动,由相机驱动为该拍摄模式的拍摄参数申请内存,包括:
503:从sensor bin文件中读取该拍摄模式对应的拍摄参数。
本步骤中,相机驱动读取sensor bin文件,sensor bin文件中存储了相机应用支持的拍摄模式以及对应的拍摄参数,根据拍摄模式的标识信息即可得到该拍摄模式对应的拍摄参数。
504:确定该拍摄参数的数据量。
本步骤中,相机驱动确定该拍摄参数的数据量也可以理解为存储该拍摄参数需要的存储空间,示例性地,可以通过关键字sizeof得到拍摄参数在内存中所需要的存储空间。
505:调用vmalloc函数申请内存。
可以理解,vmalloc函数申请到的内存是非连续物理内存,具体流程可以包括:
5051:确定内存申请量。
可以理解,相机驱动在调用vmalloc函数时可以将需要申请的内存大小作为参数传递给vmalloc函数,因此,vmalloc函数可以通过传入的参数确定内存申请量。
5052:基于该内存申请量确定需要申请的页,然后从vmalloc区申请物理地址不连续的物理内存,得到物理地址。
在确定了需要申请内存的内存大小(即内存申请量)后,vmalloc函数计算需要申请的页。由于每页的大小为4KB,可以用内存申请量除以4KB得到需要申请的页,示例性地,如果内存申请量为8KB,那么需要申请2个页。然后,vmalloc函数根据确定出的页去申请非连续物理内存,即物理地址不连续的内存,得到非连续物理内存的物理地址。
5053:为该物理地址申请虚拟地址。
5054:为该物理地址和该虚拟地址建立映射关系。
可以理解,在vmalloc函数中,申请到的物理地址是不连续的,但是申请到的虚拟地址是连续的,因此,需要建立物理地址与虚拟地址之间的映射关系,以便于在确定某个虚拟地址后可以通过映射关系得到对应的物理地址。
5055:返回指向虚拟地址的指针。
可以理解,指针存储的是申请到的内存的虚拟地址,通过该虚拟地址与映射关系就可以得到物理地址,从而将数据存储到内存中。
506:将该拍摄参数存入申请到的内存中。
507:将该拍摄参数配置到相机寄存器。
本步骤中,将拍摄参数配置到相机寄存器后,相机应用就可以基于该拍摄参数采集图片。
在使用vmalloc函数申请内存时,如果内存申请量小,将导致内存资源浪费。本申请实施例中,内存申请量可以理解为待存储数据需要的内存量,但是内核层实际申请到的内存(为便于区分简称为内存分配量)可能不同。示例性地,以vmalloc区的最小申请量为4KB为例,假如步骤5051中确定的内存申请量为3KB,那么驱动程序将从vmalloc区申请到4KB的内存,即内存分配量为4KB,该内存分配量4KB与内存申请量3KB不同,造成了1KB的内存资源浪费。
本申请实施例提供的内存处理方法可以减少内存资源浪费。复用图4,本申请实施例提供的内存处理方法可以由内核层中的内存处理模块实现。该内存处理模块可以包括内存申请模块和内存释放模块,其中,内存申请模块用于申请内存,内存释放模块用于释放内存申请模块申请到的内存。接下来先介绍内存申请模块实现的方法。
在一些实施例中,内存申请模块可以耦合在驱动程序中,即可以由内核层中的驱动程序实现。示例性地,请参阅图6,图6是本申请实施例提供的一种内存申请方法的流程示意图,该方法可以由内核层中的驱动程序执行,包括:
601:接收内核层的上层发送的内存申请消息,并确定内存申请量。
本步骤中,内核层的上层可以理解为内核层之上的任一层,比如可以是图4中的应用程序层、应用程序框架层、系统运行库层以及HAL层,或者也可以理解为上述用户态。示例性地,可以是在应用有内存申请需求的情况下,由应用给下层下发内存申请消息,然后传递给驱动程序,比如通过上述HIDL/AIDL接口进行传递。示例性地,应用有内存申请需求的场景可以是相机应用切换拍摄模式,或者在未改变拍摄的情况下调整拍摄参数;也可以是播放器切换音效模式等场景。
本申请实施例中,内存申请消息可以是待存储数据本身,也可以是待存储数据的数据量大小(比如5KB),也可以是其他指示待存储数据或待存储数据的数据量大小的信息,只要驱动程序可以依据内存申请消息确定内存申请量即可。
602:判断该内存申请量是否大于vmalloc区的最小申请量。
可以理解,在电子设备的硬件资源不发生变化的情况下,内存中kmalloc区和vmalloc区是固定的,它们各自所包括的地址范围也是固定的,各自的内存分配原则也是固定的,因此,各自的最小申请量也是固定的。示例性地,vmalloc区中以页为单位进行内存分配,因此,vmalloc区的最小申请量为一页的大小,比如是4KB。
在步骤602的判断结果为是的情况下,执行步骤603:从kmalloc区申请内存。
可以理解,kmalloc区为内存中的直接映射区,分配的内存的物理地址连续,虚拟地址也连续,且物理地址与虚拟地址之间的是简单的地址偏移关系(比如offset偏移),在电子设备中,该地址偏移是固定的。因此,从kmalloc区申请到物理地址后,可以唯一确定虚拟地址,不需要单独建立物理地址与虚拟地址之间的映射关系。可选地,步骤603具体可以包括:
6031:确定内存申请量。
6032:基于该内存申请量从kmalloc区申请物理地址连续的内存,得到物理地址。
6033:返回指向该物理地址对应的虚拟地址的指针。
在步骤602的判断结果为否的情况下,执行步骤604:从vmalloc区申请内存。
本步骤中,有关从vmalloc区申请内存的介绍可以参阅前文步骤5051-步骤5055,这里不再赘述。可以理解,在本申请的方法中,对于某次内存申请,得到的可能是kmalloc区中物理地址连续的内存,也可能是vmalloc区中物理地址不连续的内存,关键在于内存申请量的大小,即步骤602的判断结果决定了最终得到的内存的类型。
为了与前文图5所示的方法形成对比,依然以vmalloc区的最小申请量为4KB、内存申请量为3KB为例,在如图6所示的方法中,由于步骤601中确定的内存申请量为3KB,那么步骤602的判断结果应该为否,驱动程序将从kmalloc区申请内存,且内存分配量为3KB(而不是图5所示的方法中得到4KB的内存分配量),该内存分配量3KB与内存申请量3KB相同,从而避免了内存资源浪费。
在另一些实施例中,内存申请模块的功能也可以由驱动程序之外的程序实现,比如可以由内核层中的内存申请函数实现,该内存申请函数为驱动程序之外的程序。为便于理解,示例性地,请参阅图7,图7是本申请实施例提供的另一种内存申请方法的流程示意图,上述方法可以由内核层中的内存申请函数执行,包括:
701:接收驱动程序发送的内存申请消息,并确定内存申请量。
本实施例中,内存申请函数从驱动程序接收内存申请消息,其中,驱动程序可以接收内核层的上层(比如应用)下发的内存申请消息,然后将该内存申请消息转发给内存申请函数,比如可以将内存申请消息作为参数调用内存申请函数,以使内存申请函数得到该内存申请消息。其中,该内存申请消息可以是待存储数据本身,也可以是待存储数据的数据量大小(比如5KB),也可以是其他指示待存储数据或待存储数据的数据量大小的信息。
可选地,驱动程序也可以对接收到的内存申请消息处理后再发送给内存申请函数,比如驱动程序可以根据接收到的内存申请消息确定出内存申请量,然后将该内存申请量作为内存申请消息发送给内存申请函数。
702:判断该内存申请量是否大于vmalloc区的最小申请量。
在步骤702的判断结果为是的情况下,执行步骤703:从kmalloc区申请内存。
在步骤702的判断结果为否的情况下,执行步骤704:从vmalloc区申请内存。
本实施例中,步骤702-步骤704的介绍可以参阅前文步骤602-步骤604,这里不再赘述。
可以理解,如果由驱动程序根据内存申请量去申请内存,那么不同的场景都需要对各自对应的驱动程序进行修改,比如拍摄模式切换中的内存申请需要修改相机驱动程序,又比如音频音效切换中的内存申请需要修改音频驱动程序等,操作繁琐。本实施例中,由内存申请函数根据内存申请量去申请内存,那么不同场景中的内存申请都可以使用该内存申请函数来减少内存资源浪费,操作简单。
接下来介绍内存释放模块实现的方法。
可以理解,从vmalloc区申请到的内存与从kmalloc申请到的内存不同。从vmalloc区申请到的是物理地址不连续的内存,物理地址与虚拟地址之间的映射关系需要映射表来维护;从kmalloc区申请到的是物理地址连续的内存,物理地址与虚拟地址之间的关系是固定的,不需要映射表来维护。一般地,可以使用vmalloc函数从vmalloc区申请内存(简称vmalloc内存),然后使用vfree函数来释放vmalloc内存;可以使用kmalloc函数从kmalloc区申请内存(简称kmalloc内存),然后使用kfree函数来释放kmalloc内存。
本申请中,由于每次申请到的内存与内存申请量有关,得到的内存有可能是vmalloc内存,也有可能是kmalloc内存。因此,本申请实施例提供了内存释放方法,该方法根据内存类型来释放内存,该方法可以由内存处理模块中的内存释放模块实现,用于释放内存处理模块中的内存申请模块申请到的内存。
在一些实施例中,内存申请模块可以耦合在驱动程序中,即可以由内核层中的驱动程序实现。示例性地,请参阅图8,图8是本申请实施例提供的一种内存释放方法的流程示意图,上述方法可以由内核层中的启动程序执行,包括:
801:接收内核层的上层发送的内存释放消息,并确定待释放内存的虚拟地址。
本步骤中,内核层的上层可以理解为内核层之上的任一层,比如可以是图4中的应用程序层、应用程序框架层、系统运行库层以及HAL层,或者也可以理解为上述用户态。示例性地,可以是在应用有内存释放需求的情况下,由应用给下层下发内存释放消息,然后传递给驱动程序,比如通过上述HIDL/AIDL接口进行传递。示例性地,应用有内存释放需求的场景可以是相机应用关闭、也可以是音乐播放器关闭等场景。
本申请实施例中,内存释放消息可以是指向待释放内存的指示信息,也可以是待释放内存的地址本身,比如可以是指向待释放内存的虚拟地址的指针。
802:判断该虚拟地址对应的物理地址是否属于vmalloc区。
可以理解,待释放内存可能是从vmalloc区申请到的内存,也可能是从kmalloc区申请到的内存,在得到待释放内存的虚拟地址后,可以根据虚拟地址确定待释放内存属于哪个区。示例性地,如果存在该虚拟地址的映射表,那么可以认为该待释放内存为vmalloc内存,该虚拟地址对应的物理地址是否属于vmalloc区;反之,可以认为该待释放内存为kmalloc内存,该虚拟地址对应的物理地址是否属于kmalloc区。
在步骤802的判断结果为否的情况下,执行步骤803:从kmalloc区释放内存。
可以理解,在步骤802的判断结果为否的情况下,待释放内存为kmalloc内存,因此,从kmalloc区释放内存可以理解为将kmalloc区中的待释放内存释放掉。
在待释放内存为kmalloc内存的情况下,待释放内存的物理地址是连续的,且待释放内存的物理地址与虚拟之间的偏移也是固定的。因此,在待释放内存为kmalloc内存的情况下,将待释放内存的物理地址释放掉即可。
示例性地,可以将上述虚拟地址对应的物理地址标记为可用状态,那么其他进程就可以使用这些内存资源,达到内存释放的目的。
在步骤802的判断结果为是的情况下,执行步骤804:从vmalloc区释放内存。
可以理解,在步骤802的判断结果为是的情况下,待释放内存为vmalloc内存,因此,从vmalloc区释放内存可以理解为将vmalloc区中的待释放内存释放掉。
在待释放内存为vmalloc内存的情况下,待释放内存的物理地址是不连续的,且待释放内存的物理地址与虚拟之间的映射关系通过映射表来维护。因此,在待释放内存为vmalloc内存的情况下,需要将物理地址,虚拟地址以及映射表均释放掉。
示例性地,可以将上述虚拟地址对应的物理地址标记为可用状态,那么其他进程就可以使用这些内存资源,达到内存释放的目的。示例性地,可以先将待释放内存的物理地址加入到可用列表中,然后将待释放内存的虚拟地址标记为可用状态,然后删除对应的映射表,达到内存释放的目的。
在一些实施例中,内存释放模块的功能也可以由驱动程序之外的程序实现,比如可以由内核层中的内存申释放函数实现,该内存释放函数为驱动程序之外的程序。示例性地,请参阅图9,图9是本申请实施例提供的另一种内存释放方法的流程示意图,上述方法可以由内核层中的内存释放函数执行,包括:
901:接收驱动程序发送的内存释放消息,并确定待释放内存的虚拟地址。
本实施例中,内存释放函数从驱动程序接收内存释放消息,其中,驱动程序可以接收内核层的上层(比如应用)下发的内存释放消息,然后将该内存释放消息转发给内存释放函数,比如可以将内存释放消息作为参数调用内存释放函数,以使内存释放函数得到该内存释放消息。其中,该内存释放消息可以是指向待释放内存的指示信息,也可以是待释放内存的地址本身,比如可以是指向待释放内存的虚拟地址的指针。
可选地,驱动程序也可以对接收到的内存释放消息处理后再发送给内存释放函数,比如驱动程序可以根据接收到的内存释放消息先确定出待释放内存的虚拟地址,然后将该待释放内存的虚拟地址作为内存释放消息发送给内存释放函数。
902:判断该虚拟地址对应的物理地址是否属于vmalloc区。
在步骤902的判断结果为否的情况下,执行步骤903:从kmalloc区释放内存。
在步骤902的判断结果为是的情况下,执行步骤904:从vmalloc区释放内存。
本实施例中,步骤902-步骤904的介绍可以参阅前文步骤802-步骤804,这里不再赘述。
与前文图7所示的实施例类似,本实施例中,由内存释放函数根据待释放内存的虚拟地址去释放内存,那么不同场景都可以使用该内存释放函数来实现内存释放,而不是修改各个驱动程序,操作简单。
可以理解,上述待释放内存可以是上述内存申请模块申请到的内存。
本申请还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机代码,当计算机代码在计算机上运行时,使得计算机执行上述实施例的方法。
本申请还提供一种芯片,包括逻辑电路和接口,上述逻辑电路和接口耦合;上述接口用于输入和/或输出代码指令,上述逻辑电路用于执行上述代码指令,以使上述实施例的方法中的方法被执行。
本申请还提供一种计算机程序产品,该计算机程序产品包括计算机代码或计算机程序,当该计算机代码或计算机程序在计算机上运行时,使得上述实施例中的方法被执行。
上述实施例中所用,根据上下文,术语“当…时”可以被解释为意思是“如果…”或“在…后”或“响应于确定…”或“响应于检测到…”。类似地,根据上下文,短语“在确定…时”或“如果检测到(所陈述的条件或事件)”可以被解释为意思是“如果确定…”或“响应于确定…”或“在检测到(所陈述的条件或事件)时”或“响应于检测到(所陈述的条件或事件)”。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘)等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。

Claims (10)

1.一种内存处理方法,其特征在于,应用于电子设备,所述电子设备的内存包括第一内存空间和第二内存空间,所述第一内存空间的最小内存申请量大于所述第二内存空间的最小内存申请量,所述第一内存空间包括的物理地址范围与所述第二内存空间包括的物理地址范围不重叠,且从所述第一内存空间中申请内存的函数接口与从所述第二内存空间中申请内存的函数接口不同;所述方法包括:
获取第一系统消息,所述第一系统消息用于指示存储待存储数据所需要的内存需求量;
在所述内存需求量小于所述第一内存空间的最小内存申请量的情况下,从所述第二内存空间中申请内存。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述内存需求量大于所述第一内存空间的最小内存申请量的情况下,从所述第一内存空间中申请内存。
3.根据权利要求1或2所述的方法,其特征在于,所述电子设备的内核程序中包括驱动程序和内存申请函数,所述内存申请函数为所述内核程序中除所述驱动程序以外的其他程序;所述获取第一系统消息,包括:
所述内存申请函数接收所述驱动程序发送的所述第一系统消息。
4.根据权利要求3所述的方法,其特征在于,所述电子设备的内核程序中还包括内存释放函数,所述内存释放函数为所述内核程序中除所述驱动程序以外的其他程序;所述方法还包括:
所述内存释放函数接收第二系统消息,所述第二系统消息用于指示待释放内存的虚拟地址;
所述内存释放函数根据所述待释放内存的虚拟地址确定所述待释放内存的物理地址;
在所述待释放内存的物理地址在所述第一内存空间的物理地址范围内的情况下,所述内存释放函数从所述第一内存空间中释放所述待释放内存。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述待释放内存的物理地址在所述第二内存空间的物理地址范围内的情况下,所述内存释放函数从所述第二内存空间中释放所述待释放内存。
6.根据权利要求1或2所述的方法,其特征在于,所述电子设备中的内核程序包括驱动程序,所述方法还包括:
所述驱动程序接收第二系统消息,所述第二系统消息用于指示待释放内存的虚拟地址;
所述驱动程序根据所述待释放内存的虚拟地址确定所述待释放内存的物理地址;
在所述待释放内存的物理地址在所述第一内存空间的物理地址范围内的情况下,所述驱动程序从所述第一内存空间中释放所述待释放内存。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述待释放内存的物理地址在所述第二内存空间的物理地址范围内的情况下,所述驱动程序从所述第二内存空间中释放所述待释放内存。
8.一种电子设备,其特征在于,包括处理器、存储器,所述存储器用于存储计算机程序,所述存储器的内存包括第一内存空间和第二内存空间,所述第一内存空间的最小内存申请量大于所述第二内存空间的最小内存申请量;所述第一内存空间包括的物理地址范围与所述第二内存空间包括的物理地址范围不重叠,且从所述第一内存空间中申请内存的函数接口与从所述第二内存空间中申请内存的函数接口不同;所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,使得如权利要求1-7中任一项所述的方法被执行。
9.一种芯片,其特征在于,包括逻辑电路和接口,所述逻辑电路和接口耦合;所述接口用于输入和/或输出代码指令,所述逻辑电路用于执行所述代码指令,以使权利要求1-7中任一项所述的方法被执行。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,使得如权利要求1-7中任一项所述的方法被执行。
CN202310906332.5A 2023-07-24 2023-07-24 内存处理方法及相关装置 Active CN116627855B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310906332.5A CN116627855B (zh) 2023-07-24 2023-07-24 内存处理方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310906332.5A CN116627855B (zh) 2023-07-24 2023-07-24 内存处理方法及相关装置

Publications (2)

Publication Number Publication Date
CN116627855A CN116627855A (zh) 2023-08-22
CN116627855B true CN116627855B (zh) 2023-10-31

Family

ID=87602964

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310906332.5A Active CN116627855B (zh) 2023-07-24 2023-07-24 内存处理方法及相关装置

Country Status (1)

Country Link
CN (1) CN116627855B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104866428A (zh) * 2014-02-21 2015-08-26 联想(北京)有限公司 数据存取方法和数据存取装置
CN113050886A (zh) * 2021-02-23 2021-06-29 山东师范大学 面向嵌入式内存数据库的非易失性内存存储方法及系统
CN113485791A (zh) * 2021-07-07 2021-10-08 上海壁仞智能科技有限公司 配置方法和访问方法、装置、虚拟化系统和存储介质
CN114185817A (zh) * 2021-12-09 2022-03-15 平头哥(上海)半导体技术有限公司 内存管理单元、处理单元、系统以及内存访问方法
CN116089321A (zh) * 2022-12-29 2023-05-09 浙江大华技术股份有限公司 内存管理方法、装置、电子装置和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017138852A (ja) * 2016-02-04 2017-08-10 株式会社東芝 情報処理装置、記憶装置およびプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104866428A (zh) * 2014-02-21 2015-08-26 联想(北京)有限公司 数据存取方法和数据存取装置
CN113050886A (zh) * 2021-02-23 2021-06-29 山东师范大学 面向嵌入式内存数据库的非易失性内存存储方法及系统
CN113485791A (zh) * 2021-07-07 2021-10-08 上海壁仞智能科技有限公司 配置方法和访问方法、装置、虚拟化系统和存储介质
CN114185817A (zh) * 2021-12-09 2022-03-15 平头哥(上海)半导体技术有限公司 内存管理单元、处理单元、系统以及内存访问方法
CN116089321A (zh) * 2022-12-29 2023-05-09 浙江大华技术股份有限公司 内存管理方法、装置、电子装置和存储介质

Also Published As

Publication number Publication date
CN116627855A (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
JP7044943B2 (ja) アプリケーション表示方法及び電子デバイス
CN114650363B (zh) 一种图像显示的方法及电子设备
WO2022257748A1 (zh) 虚拟内存管理方法和电子设备
CN114461588B (zh) 调节预读窗口的方法及电子设备
CN113641271B (zh) 应用窗口的管理方法、终端设备及计算机可读存储介质
CN112882823B (zh) 屏幕显示方法及电子设备
US12079118B2 (en) Method and electronic device to reclaim physical page using active and inactive lists
CN117130541B (zh) 存储空间配置方法及相关设备
CN112783418B (zh) 一种存储应用程序数据的方法及移动终端
CN115119048B (zh) 一种视频流处理方法及电子设备
CN114079642A (zh) 一种邮件处理方法及电子设备
CN115482143B (zh) 应用的图像数据调用方法、系统、电子设备及存储介质
CN114691248B (zh) 显示虚拟现实界面的方法、装置、设备和可读存储介质
CN116627855B (zh) 内存处理方法及相关装置
CN114828098B (zh) 数据传输方法和电子设备
CN113590346A (zh) 处理业务请求的方法和电子设备
CN116709609B (zh) 消息传递方法、电子设备及存储介质
CN117687770B (zh) 内存申请方法及相关装置
CN116266159B (zh) 一种缺页异常处理方法和电子设备
CN116662150B (zh) 应用启动耗时检测方法及相关装置
CN116795476B (zh) 一种删除壁纸的方法及电子设备
CN116185245B (zh) 一种页面显示方法及电子设备
CN116700578B (zh) 图层合成方法、电子设备以及存储介质
CN116703689B (zh) 一种着色器程序的生成方法、装置和电子设备
CN116991532A (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
GR01 Patent grant
GR01 Patent grant