Nothing Special   »   [go: up one dir, main page]

CN118210622A - 一种内存分配方法及计算设备 - Google Patents

一种内存分配方法及计算设备 Download PDF

Info

Publication number
CN118210622A
CN118210622A CN202410232194.1A CN202410232194A CN118210622A CN 118210622 A CN118210622 A CN 118210622A CN 202410232194 A CN202410232194 A CN 202410232194A CN 118210622 A CN118210622 A CN 118210622A
Authority
CN
China
Prior art keywords
task
page
virtual
address space
virtual address
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
Application number
CN202410232194.1A
Other languages
English (en)
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.)
XFusion Digital Technologies Co Ltd
Original Assignee
XFusion Digital Technologies 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 XFusion Digital Technologies Co Ltd filed Critical XFusion Digital Technologies Co Ltd
Priority to CN202410232194.1A priority Critical patent/CN118210622A/zh
Publication of CN118210622A publication Critical patent/CN118210622A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized 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/65Details of virtual memory and virtual address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space 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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请实施例公开了一种内存分配方法及计算设备,该内存分配方法应用于ARM架构的计算设备;该方法包括:配置第一虚拟地址空间的第一虚拟页的页面大小,以及第二虚拟地址空间的第二虚拟页的页面大小,其中第一虚拟页的页面大小大于第二虚拟页的页面大小;确定待分配内存的任务是否属于预设的控制组;在该任务属于该预设的控制组的情况下,基于该任务归属的控制组为该任务分配第一虚拟页或第二虚拟页。通过配置页面大小粒度不同的第一虚拟地址空间和第二虚拟地址空间,并基于预设的控制组为不同任务分配第一虚拟页或第二虚拟页,可以在ARM架构的服务器下实现不同页面大小粒度的内存分配,满足ARM架构服务器更多样灵活的内存分配需求。

Description

一种内存分配方法及计算设备
技术领域
本申请涉及内存管理技术领域,具体涉及一种内存分配方法及计算设备。
背景技术
在进阶精简指令集机器(advanced RISC machine,ARM)架构中,计算设备中的内存是按物理页进行管理的。当计算设备的中央处理器(central processing unit,CPU)执行任务时,CPU可以通过访问该任务的虚拟地址空间中的虚拟页,对内存中对应的物理页进行读写。
页表项(page table entry,PTE)是用于组织和管理虚拟地址与物理地址之间的映射关系的数据结构,每个页表项用于关联一个虚拟页和一个物理页。这样,当某个任务需要访问某个物理页时,CPU可以基于虚拟页查询相应的页表项,进而访问相应的物理页。
目前,ARM架构支持以4KB、16KB或64KB中的一种页面大小粒度进行物理页和虚拟页之间的映射。可以理解的是,采用大页面进行内存分配可以提高页表缓存(translationlookaside buffer,TLB)的命中率,采用小页面进行内存分配时更灵活,因此,采用一种页面大小粒度进行内存分配的方案难以兼顾不同的内存分配需求。
发明内容
本申请实施例提供一种内存分配方法及计算设备,能够在ARM架构下实现不同页面大小粒度的内存分配,满足更多样灵活的内存分配需求。
本申请实施例第一方面提供一种内存分配方法,该内存分配方法应用于ARM架构的计算设备,该方法包括:
配置第一虚拟地址空间的第一虚拟页的页面大小,以及第二虚拟地址空间的第二虚拟页的页面大小;确定待分配内存的任务是否属于预设的控制组;在该任务属于该预设的控制组的情况下,基于该任务归属的控制组为该任务分配该第一虚拟页或该第二虚拟页。
其中,该第一虚拟页的页面大小大于该第二虚拟页的页面大小。
其中,该预设的控制组包括第一控制组和第二控制组;该第一控制组用于控制为预设内核态任务分配该第一虚拟页;该第二控制组用于控制为预设用户态任务分配该第一虚拟页或该第二虚拟页。
本申请实施例中,通过在虚拟地址空间中配置两个页面大小粒度不同的区间,并基于预设的控制组为不同任务分配第一虚拟页或第二虚拟页,从而可以实现不同页面大小粒度的内存分配,满足更多的内存分配需求。
在一种可能的实现中,该第一虚拟地址空间包括第一子虚拟地址空间和第二子虚拟地址空间;其中,该第一子虚拟地址空间为内核态地址空间;该第二子虚拟地址空间为用户态地址空间;该在该任务属于该预设的控制组的情况下,基于该任务归属的控制组为该任务分配该第一虚拟页或该第二虚拟页,包括:在该任务属于该第一控制组的情况下,为该任务分配位于该第一子虚拟地址空间的第一虚拟页;在该任务属于该第二控制组的情况下,为该任务分配位于该第二子虚拟地址空间的第一虚拟页。
本申请实施例中,通过划分第一虚拟地址空间,使其包括第一子虚拟地址空间和第二子虚拟地址空间,并将第一子虚拟地址空间作为内核态地址空间,第二子虚拟地址空间作为用户态地址空间,可以使得用户态任务和内核态任务均能够使用第一虚拟地址空间中的大页,提高TLB的命中率。
在一种可能的实现中,该第一虚拟地址空间包括第一子虚拟地址空间,该第二虚拟地址空间包括第三子虚拟地址空间;其中,该第一子虚拟地址空间为内核态地址空间;该第三子虚拟地址空间为用户态地址空间;该在该任务属于该预设的控制组的情况下,基于该任务归属的控制组为该任务分配该第一虚拟页或该第二虚拟页,包括:在该任务属于该第一控制组的情况下,为该任务分配位于该第一子虚拟地址空间的第一虚拟页;在该任务属于该第二控制组的情况下,为该任务分配位于该第三子虚拟地址空间的第二虚拟页。
本申请实施例中,通过以第二虚拟地址空间中的第三子虚拟地址空间作为用户态地址空间,基于更小的第二虚拟页为用户态任务进行内存分配,可以提高内存使用效率;还可以进一步隔离内核态地址空间和用户态地址空间,提高内存访问的安全性。
在一种可能的实现中,该方法还包括:在该任务不属于该预设的控制组的情况下,为该任务分配该第二虚拟页。
本申请实施例中,对未采用预设控制组管理的任务,统一分配第二虚拟页,可以减少工作人员预先设置控制组的工作量,提高工作效率。
在一种可能的实现中,该第二虚拟地址空间包括第四子虚拟地址空间,该第四子虚拟地址空间为内核态地址空间;该在该任务不属于该预设的控制组的情况下,为该任务分配该第二虚拟页,包括:在该任务不属于该预设的控制组的情况下,确定该任务是否为内核态任务;在该任务为该内核态任务的情况下,为该任务分配位于该第四子虚拟地址空间的第二虚拟页。
本申请实施例中,通过在第二虚拟空间中划分出第四子虚拟空间,为内核态任务分配第二虚拟页,可以满足内核态任务对小页的内存分配需求。
在一种可能的实现中,在该确定待分配内存的任务是否属于预设的控制组之前,该方法还包括:确定该任务是否为目标任务,该确定待分配内存的任务是否属于预设的控制组,包括:在该任务为该目标任务的情况下,确定该任务是否属于该第二控制组;该在该任务属于该预设的控制组的情况下,基于该任务归属的控制组为该任务分配该第一虚拟页或该第二虚拟页,包括:在该任务属于该第二控制组的情况下,确定该任务对应的MMAP请求中的偏移量是否与该第一虚拟页的页面大小匹配;在该偏移量与该第一虚拟页的页面大小匹配的情况下,确定该MMAP请求是否为固定映射,且该MMAP请求的映射地址范围是否位于该第三子虚拟地址空间;在该MMAP请求不为固定映射,或该映射地址范围位于该第二子虚拟地址空间的情况下,为该任务分配位于该第二子虚拟地址空间的该第一虚拟页。
其中,在该MMAP请求为固定映射,且该映射地址范围位于该第三子虚拟地址空间的情况下,为该任务分配位于该第二子虚拟地址空间的该第一虚拟页。
其中,该第二控制组具体用于控制为该预设用户态任务分配该第一虚拟页;该第一虚拟地址空间包括第二子虚拟地址空间;该第二虚拟地址空间包括第三子虚拟地址空间。
其中,该第二子虚拟地址空间和该第三子虚拟地址空间为用户态地址空间。
其中,该目标任务为执行内存映射MMAP的任务。
本申请实施例中,可以通过任务归属的控制组和该MMAP请求指示的映射地址范围,对该任务请求的内存映射行为进行鉴权,并分配对应大小的虚拟页,可以在保证内存映射安全性的同时,满足不同的内存映射需求。
在一种可能的实现中,在该基于该任务归属的控制组为该任务分配该第一虚拟页或该第二虚拟页之后,该方法还包括:基于目标虚拟页和页表,确定该任务访问的第一物理页;响应于该第一物理页缺失,确定该目标虚拟页的页面大小是否与该第一虚拟页的页面大小匹配;在该目标虚拟页的页面大小与该第一虚拟页的页面大小匹配的情况下,确定该目标虚拟页对应的虚拟地址是否位于该第二子虚拟地址空间;在该目标虚拟页对应的虚拟地址位于该第二子虚拟地址空间的情况下,为该任务分配第二物理页;将该第二物理页与该目标虚拟页的映射关系添加至该页表中。
其中,该目标虚拟页为该任务的访问请求中虚拟地址所指示的虚拟页。
其中,该第二物理页与该第一虚拟页的页面大小相同。
本申请实施例中,在检测到页缺失发生时对访问行为进行鉴权,在确定访问目标是用户空间时再进行对应的物理页分配,可以提高访问行为的安全性。
在一种可能的实现中,该第一虚拟地址空间包括第二子虚拟地址空间;该第二虚拟地址空间包括第四子虚拟地址空间;该方法还包括:响应于创建第一任务,在该第一任务的task_struct数据结构中添加第一页表项将当前任务在第二页表基地址寄存器中的第二页表项添加到该第一任务的task_struct数据结构中。
其中,该第二页表基地址寄存器用于存储该第二虚拟地址空间的页表基地址。
其中,该第一页表项用于指示该第二子虚拟地址空间的页表基地址;该第二页表项用于指示该第四子虚拟地址空间的页表基地址。
本申请实施例中,通过在创建第一任务时,在第一任务的task_struct数据结构中添加自身的第一页表项,以及当前任务的第二页表项,可以保证用户态地址空间和内核态地址空间的正确性,避免处理器访问内存时发生异常或失败。
在一种可能的实现中,在该将当前任务在第二页表基地址寄存器中的第二页表项添加到该第一任务的task_struct数据结构中之后,该方法还包括:响应于将该第一任务切换为第二任务,根据该第二任务的task_struct数据结构中的第一页表项更新第一页表基地址寄存器中对应的页表项;根据该第一任务在第二页表基地址寄存器中的第二页表项,更新该第二任务的task_struct数据结构;然后,将第二任务的task_struct数据结构中的PGD加载到第二页表基地址寄存器。
其中,该第一页表基地址寄存器用于存储该第一虚拟地址空间的页表基地址。
本申请实施例中,通过在将第一任务切换为第二任务时,更新第一页表基地址寄存器和第二页表基地址寄存器中的页表项,使得第二任务的用户空间的页表基地址对应加载,内核空间的页表基地址不变,从而可以保证用户态地址空间和内核态地址空间的正确性,避免处理器访问内存时发生异常或失败。
本申请实施例第二方面提供了一种计算设备,该计算设备包括:存储器和处理器;其中,该处理器为ARM架构;该处理器与存储器耦合;该存储器中存储计算机程序指令;该计算机程序指令由该处理器加载并执行,以使该计算设备实现第一方面中任一可能实现所述的方法。
本申请实施例第三方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,该计算机执行指令由计算设备执行,实现如第一方面中任一可能实现所述的方法。
本申请实施例第四方面还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行如第一方面中任一可能实现所述的方法。
应理解的是,上述各个方面的有益效果可以相互参考。
附图说明
图1为一种虚拟地址空间的分布示意图;
图2为本申请实施例方案的应用场景的示意图;
图3为本申请实施例提供的一种内存分配方法的流程示意图;
图4为本申请实施例提供的一种虚拟地址空间的分布示意图;
图5为本申请实施例提供的一种内存映射流程的示意图;
图6为本申请实施例提供的一种页错误处理流程的示意图;
图7为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面对本申请实施例涉及的一些术语概念做解释说明。
(1)进阶精简指令集机器(advanced RISC machine,ARM)架构
ARM架构又称ARM体系架构,ARM架构是一种硬件规范,主要用于约定指令集以及芯片内部的体系结构。采用ARM架构的计算设备在过去被称作先进的精简指令集机器,其采用元精简指令集(reduced instruction set computer,RISC)中央处理器架构,ARM架构的计算设备被广泛地使用在许多嵌入式系统设计中。
(2)操作系统
操作系统是用于管理计算机硬件与软件资源的系统软件,同时也是计算机系统的基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统还可以提供让用户与系统交互的操作界面。
(3)内核
内核是用于管理软件发出的数据输入与输出要求的程序,将这些要求转译为数据处理的指令并交由中央处理器(central processing unit,CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。
(4)内存
内存是计算设备的重要部件,也称内存储器或主存储器,其用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。内存是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。
(5)任务
程序是指令、数据及其组织形式的描述,进程是程序的运行实体。一个进程中可以并发多个线程,线程可以是进程的实际运作单位,其中线程也可以称为轻量进程。在ARM架构中,进程和线程不做区分,统一由task_struct数据结构管理,本申请实施例中采用任务对进程和线程进行统一描述。
(6)虚拟地址空间
虚拟地址空间是虚拟地址的集合,虚拟地址是CPU在执行任务时使用的逻辑地址,CPU通过该虚拟地址访问物理内存中对应的物理地址;虚拟地址空间也可以称为进程地址空间,虚拟地址空间中包括每个任务独立拥有的用户空间,可以避免任务相互访问造成访问冲突和访问错误的情况;虚拟地址空间还包括所有任务都共享的内核空间。
(7)物理页、虚拟页、页表
操作系统将内存空间划分为一个个大小相同的分区,该分区被称为物理块;物理页是一个或多个物理块的集合,物理页也被称为页框。
操作系统从虚拟地址空间划分为与物理页大小相同的一个个区域,这些区域被称为虚拟页。
操作系统为每个进程建立的页面映射表被称为页表,对于一进程的虚拟地址空间中的所有虚拟页,依次在该进程的页表中有一页表项,该页表项记录了该虚拟页和内存中对应的物理页的映射关系。
在内存管理中,出于节约内存空间和方便离散存储的考虑,通常采用多级页表的方式管理页表项。在多级页表的内存管理模型中,以四级页表为例,四级页表分别为页全局目录(page global directory,PGD)、页上级目录(page upper directory,PUD)、页中间目录(page middledirectory,PMD)和页表。
(8)内核态(kernel mode)任务和用户态(user mode)任务
操作系统在虚拟地址空间中划分出内核空间和用户空间,内核空间用于映射内核代码,用户空间用于映射对应任务的应用程序代码。当任务在应用程序的代码中执行时,该任务可以称为用户运行态任务,也可以简称为用户态任务;当任务执行系统调用而陷入内核代码中执行时,则称该任务可以称为内核运行态任务或简称为内核态任务。
(9)控制组(control group,Cgroup)
控制组的组成员为任务,控制组可以用于限制其组成员的资源使用对象、资源使用数量以及资源使用优先级。
(10)内存映射(memory map,MMAP)
内存映射是一种内存映射文件的方法,用于将文件或其他对象映射到进程的虚拟地址空间。
(11)页错误(page fault)
页错误又称为页缺失,是指当CPU执行任务时,发现访问的目标虚拟页在内存中没有对应的物理页,从而导致的中断。实际应用中,CPU在执行一个新创建的任务时,在访问该任务的虚拟地址空间的过程中将不断发生页错误,然后由页错误处理程序为该任务分配实际的物理页,再将该物理页和访问的目标虚拟页的映射关系写入对应页表。
(12)页表基地址寄存器(translation table base register,TTBR)
在ARM架构中包括TTBR0和TTBR1,TTBR0和TTBR1分别用于存储用户空间和内核空间的一级页表基地址,也即PGD。因为所有任务共享同一内核空间,所以TTBR1中的内容是不变的;而各个任务的用户空间各自独立,所以TTBR0中的内容为当前CPU所执行任务的task_struct数据结构中的PGD。
在了解了上述术语的基本含义后,下面对本申请实施例的应用场景进行介绍。
首先可以参阅图1,图1为一种虚拟地址空间的分布示意图。在目前的ARMv8架构中,ARM处理器支持64位的虚拟地址空间,而目前应用程序的内存需求不需要使用全部的64位虚拟地址空间,因此ARMv8架构中通常采用48位的地址线宽,在64位的虚拟地址空间划分出48位的用户空间和48位的内核空间。
如图1所示,内核空间处于虚拟地址空间的顶部,高16位均为1,地址范围是[0xFFFF 000000000000,0xFFFF FFFF FFFF FFFF];用户空间在虚拟地址空间的底部,高16位均为0,地址范围是[0x0000000000000000,0x0000 FFFF FFFF FFFF];高16位为全1或全0的地址称为规范的地址,两者之间是不规范的地址,不允许使用。
然后可以参阅图2,图2为一种本申请实施例方案的应用场景的示意图;如图2所示,计算设备10包括处理器110、内存120、第一页表基地址寄存器TTBR1和第二页表基地址寄存器TTBR0,处理器110包括内存管理单元(memory management unit,MMU)111和页表缓存(translation lookaside buffer,TLB)112,内存120中存储有页表121。其中,处理器110、TTBR0和TTBR1可以集成于同一芯片中。示例性的,处理器110为ARM架构的处理器。
处理器110在执行任务的过程中,当需要访问内存120时生成内存访问请求,该内存访问请求包含该任务的虚拟地址空间中的虚拟地址;处理器110通过MMU 111查询TLB112中是否存在该虚拟地址对应的页表项;若存在,则处理器110可以根据该页表项将对应的内存资源分配给该任务;若不存在,则处理器110可以通过MMU 111在页表121中进一步查找该虚拟地址对应的页表项。
若在TLB 112和页表121中均不存在该虚拟地址对应的页表项,则触发页缺失,此时处理器110可以执行页缺失处理程序,为该任务分配实际的物理页,然后将该物理页的物理地址和该虚拟地址的映射关系写入对应页表。
在上述查找页表121的过程中,若该内存分配请求中的虚拟地址的最高位为0,此时处理器110可以从TTBR0获取用户空间的PGD,并根据该PGD查询该虚拟地址对应的页表。若该虚拟地址的最高位为1,则此时处理器110可以从TTBR1获取内核空间的页表基地址,然后根据该页表基地址查询该虚拟地址对应的页表。
示例性的,该虚拟地址的[38:30]可用于放置PGD的索引,[29:21]可用于放置PMD的索引,[20:12]可用于放置PTE的索引,[11:0]可用于放置页偏移。在从TTBR0或TTBR1获取物理页基地址后,处理器110可以进行下面的步骤:
第一步,将虚拟地址的[38:30]中的PGD索引作为PGD的偏移,然后将该TTBR0或TTBR1中的首地址与PGD偏移相加来得到PGD中的一项,确定PGD中的所述项所指向的PMD;第二步,将虚拟地址的[29:21]中的PMD索引作为PMD的偏移,将第一步确定的PMD的首地址与该PMD的偏移相加来得到PMD中的一项,确定PMD中的所述项所指向的PTE。第三步,将虚拟地址的[20:12]中的PTE索引作为PTE的偏移,将第二步确定的PTE的首地址与该PTE的偏移相加来得到PTE中的一项,确定PTE中的所述项对应的页表项,并根据该页表项确定虚拟地址对应的物理页的地址;在确定物理页的地址后,可将虚拟地址的[11:0]中放置的物理地址的偏移与物理页的地址相加来得到物理地址。
在图2所示应用场景中,若MMU 111能够在查询TLB 112时找到对应的页表项,也即直接访问命中,则处理器110无需在页表121中进行查询,可以节约大量的计算资源;因此,采用页面大小粒度更大的页面进行物理页和虚拟页之间的映射,TLB 112中相同数量的页表项可以指示更大的内存范围,从而可以提高TLB 112的命中率。
而采用页表大小粒度更小的页面进行物理页和虚拟页之间的映射,可以提高内存利用率,减少内部碎片的产生,避免任务所需内存远小于一个内存页,导致该内存页大部分内存被浪费的情况。
然而,目前的ARM架构支持以4KB、16KB或64KB中的一种页面大小粒度进行物理页和虚拟页之间的映射,不能同时使用两种或两种以上的页面大小粒度进行内存分配,难以满足不同的内存分配需求。
基于此,本申请实施例提供了一种内存分配方法及相关设备,能够在ARM架构下实现不同页面大小粒度的内存分配,满足更多的内存分配需求。
请参阅图3,图3为本申请实施例提供的一种内存分配方法的流程示意图,该方法应用于如图2所示的计算设备,该计算设备包括ARM架构处理器(下文中简称为处理器),因此该计算设备也可以称为ARM架构的计算设备;该方法具体包括步骤301至步骤304。
步骤301、配置第一虚拟地址空间的第一虚拟页的页面大小,以及第二虚拟地址空间的第二虚拟页的页面大小。
其中,在计算设备上电后的启动阶段,处理器可以配置计算设备中的TCR_EL1寄存器中的TG1字段,使得虚拟地址空间中的第一虚拟地址空间按照预设的页面大小(页长度)进行划分,从而配置第一虚拟地址空间中的第一虚拟页的页面大小;然后根据第一虚拟页的页面大小配置TTBR1中的页表基地址。
示例性的,该TG1字段设置为0b10时,该第一虚拟页的页面大小为4KB;该TG1字段设置为0b01时,该第一虚拟页的页面大小为16KB;该TG1字段设置为0b11时,该第一虚拟页的页面大小为64KB。
处理器可以配置该TCR_EL1寄存器中的TG0字段,使得虚拟地址空间的第二虚拟地址空间按照预设的页面大小进行划分,从而配置第二虚拟地址空间中的第二虚拟页的页面大小;然后再根据第二虚拟页的页面大小配置TTBR0中的虚拟地址部分。
示例性的,该TG0字段设置为0b00时,该第一虚拟页的页面大小为4KB;该TG1字段设置为0b10时,该第一虚拟页的页面大小为16KB;该TG1字段设置为0b01时,该第一虚拟页的页面大小为64KB。
其中,第一虚拟页的页面大小大于第二虚拟页的页面大小。示例性的,第一虚拟页的页面大小为64KB,第二虚拟页的页面大小为4KB。
其中,在配置完第一虚拟地址空间和第二虚拟地址空间中的虚拟页页面大小后,处理器可以配置第一虚拟地址空间和第二虚拟地址空间的访问权限,以控制不同任务对虚拟地址空间的访问行为,避免访问冲突或访问错误。
具体地,页表的每个页表项包括虚拟页和物理页的映射关系,还包括该页表项对应的虚拟页的访问权限;处理器可以在查找到对应的页表项后先进行鉴权,确定当前执行的任务具有相应权限后执行后续的访问动作。
其中,通过TG1字段配置的第一虚拟地址空间属于虚拟地址空间中的高位空间,该高位空间中地址的前n位为1,n为大于0且小于64的整数;通过TG0字段配置的第二虚拟地址空间属于虚拟地址空间中的低位空间,该低位空间中的地址的前n位为0。示例性的,n可以为16。
其中,第一虚拟地址空间可以包括第一子虚拟地址空间和第二子虚拟地址空间;处理器可以配置第一子虚拟地址空间的访问权限为内核态任务访问,第二子虚拟地址空间的访问权限为内核态任务和用户态任务均可访问。
在一种可能的实现中,如图4所示,第二虚拟地址空间包括第三子虚拟地址空间和第四子虚拟地址空间;第三子虚拟地址空间的访问权限为内核态任务和用户态任务均可访问,第四子虚拟地址空间的访问权限为内核态任务可以访问。
因此,在图4的具体示例中,第一子虚拟地址空间和第四子虚拟地址空间作为内核态地址空间(下文简称内核空间),第二子虚拟地址空间和第三子虚拟地址空间作为用户态地址空间(下文简称用户空间)。
可选的,处理器可以进一步配置第二子虚拟地址空间的访问权限为仅限用户态任务访问,从而避免预留给用户态任务的第二子虚拟地址空间被内核态任务占用。
本申请实施例通过将高位的第一虚拟地址空间和低位的第二虚拟地址空间进一步划分,并将一部分高位空间和一部分低位空间共同作为内核空间,另一部分高位空间和另一部分低位空间共同作为用户空间;从而能够灵活地根据内核态任务和用户态任务的需求,分配不同大小的物理页。
可以理解的是,图4所示的区间分布仅为举例而非限定,在具体实现中,第二子虚拟地址空间也可以位于第一子虚拟地址空间之前,或将第一子虚拟地址空间分隔为两部分;第四子虚拟地址空间的位置同理。
具体地,处理器可以配置TTBR0中的一个或多个页表基地址对应的页表项的访问权限为内核态任务可以访问,以使得该一个或多个页表基地址对应的地址区间作为第二虚拟地址空间中的第四子虚拟地址空间。这样,在内核中的驱动模块或其他功能模块在需要使用较小(如4KB)的物理页时,处理器可以为相应的任务分配对应大小的第二虚拟页。
同理,处理器可以配置TTBR1中的一个或多个页表基地址对应的页表项的访问权限为用户态任务可访问,以使得该一个或多个页表基地址对应的地址区间为第一虚拟地址空间中的第二子虚拟地址空间。这样,处理器可以为应用程序分配第一虚拟页,从而提高TLB的命中率。
可选的,第一子虚拟地址空间的空间大小大于第二子虚拟地址空间的空间大小,第三子虚拟地址空间的空间大小大于第四子虚拟地址空间的空间大小。这样,可以保证内核态任务更多地被分配大页内存,提高内核性能。
可以理解的是,通常情况下,虚拟地址空间会划分出两个空间分别作为内核空间和用户空间,其中,高位空间保留给操作系统和硬件的使用,低位空间提供给应用程序使用。具体地,硬件的寄存器通常被映射到物理地址的高地址区域,因此将虚拟地址空间中的高位空间作为内核空间,内核可以更快地访问硬件;同时,出于编程方便的考虑,应用程序从低位地址开始分配更为合理。内核空间和用户空间的隔离,可以防止用户程序和内核发生冲突,更好地保护内核。
本申请实施例中,将更多高位的第一虚拟地址空间作为内核空间,更多低位的第二虚拟地址空间作为用户空间,可以更好地兼容现有的应用程序、操作系统和硬件;在第一虚拟地址空间的第一虚拟页配置完毕后,处理器可以将该第一虚拟页分别和内存,以及各种硬件的输入输出(input/out,IO)空间进行映射,从而操作系统可以基于第一虚拟地址空间调用存储于内存的内核代码,以及各种硬件资源。
同时,内核态任务可以使用更多的页面大小粒度更大的第一虚拟页,可以减少内存分配次数,提高内核性能。
步骤302、确定待分配内存的任务是否属于预设的控制组。
在完成第一虚拟地址空间和第二虚拟地址空间的页面配置后,当处理器检测到需要为任务分配虚拟内存时,可以执行步骤302。其中,待分配内存的任务,是指待分配虚拟内存的任务。示例性的,处理器在将该任务在计算设备的外存储器,例如硬盘,中的相关文件映射到虚拟地址空间时,处理器将为该任务分配其虚拟地址空间中的虚拟页,并将该虚拟页与该相关文件建立映射。
其中,该预设的控制组用于控制为任务进行内存分配。具体地,该预设的控制组包括第一控制组和第二控制组;第一控制组用于控制为预设内核态任务分配第一虚拟页;第二控制组用于控制为预设用户态任务分配第一虚拟页或第二虚拟页。
具体地,处理器可以先确定该任务是内核态任务或用户态任务;再确定该任务是否属于该预设的控制组中用于控制内核态任务的控制组,或,是否属于该预设的控制组中用于控制用户态任务的控制组。
可选的,第二控制组包括第一子控制组和第二子控制组;第一子控制组用于控制为预设用户态任务分配第一虚拟页,第二子控制组用于控制为预设的用户态任务分配第二虚拟页。
可选的,第二控制组用于控制为预设用户态任务优先分配第一虚拟页或第二虚拟页中的一者,在优先分配的虚拟页不足时,再为该预设用户态任务分配第一虚拟页或第二虚拟页中的另一者。
其中,控制组的成员为任务。当处理器调用内核代码或应用程序代码执行任务时,处理器上运行的操作系统可以获取当前执行的任务的标识,然后基于该标识确定该任务归属的控制组。具体地,操作系统可以获取该待分配内存的任务的第一标识,然后遍历该预设的控制组中成员的第二标识,确定该第一标识与该第二标识是否匹配,从而确定该任务是否属于该预设的控制组。示例性的,该第一标识和/或第二标识可以为对应任务的task_struct数据结构中,用于唯一标识该任务的信息。
步骤303、在该任务属于预设的控制组的情况下,基于该任务归属的控制组,分配第一虚拟页或第二虚拟页。
在确定该任务属于该预设的控制组的情况下,处理器可以基于对应控制组设置的内存使用权限或内存使用优先级,为该任务分配虚拟页。
具体地,处理器可以先获取该任务所需的虚拟内存大小,然后基于对应控制组设置的内存使用权限或内存使用优先级,为该任务分配对应数量的第一虚拟页或第二虚拟页。
在一种可能的实现中,在该任务归属第一控制组,也即该任务为预设内核态任务的情况下,处理器可以为该任务分配第一虚拟页;在该任务归属第二控制组,也即该任务为预设用户态任务的情况下,处理器可以为该任务分配第一虚拟页或第二虚拟页。
其中,在该任务归属第一控制组的情况下,处理器可以为该任务分配位于第一子虚拟地址空间中的第一虚拟页。
可选的,在该任务归属第二控制组的情况下,处理器可以为该任务分配位于第二子虚拟地址空间中的第一虚拟页。
可选的,第二虚拟地址空间包括第三子虚拟地址空间,第三子虚拟地址空间为用户空间;在该任务归属第二控制组的情况下,处理器为该任务分配位于第三子虚拟地址空间中的第二虚拟页。
在一种可能的实现中,第二控制组包括第一子控制组和第二子控制组;在该任务归属第一子控制组的情况下,处理器可以为该任务分配位于第二子虚拟地址空间中的第一虚拟页;在该任务归属第二子控制组的情况下,为该任务分配位于第三子虚拟地址空间中的第二虚拟页。
在另一种可能的实现中,在该任务归属第二控制组的情况下,处理器优先为该任务分配位于第二子虚拟地址空间中的第一虚拟页;在第二子虚拟地址空间的第一虚拟页不足的情况下,为该任务分配位于第三子虚拟地址空间中的第二虚拟页。
步骤304、在该任务不属于预设的控制组的情况下,为该任务分配第二虚拟页。
其中,通过预设控制组,可以实现对不同任务分配预设页面大小的虚拟页,能够基于不同任务的实际需求分配对应大小的虚拟页,从而这些任务能够使用对应大小的物理页,使得内存使用效率更高。而可以理解的是,计算设备运行过程中,处理器需要执行的任务数量巨大,难以、也无需将这些任务一一通过预设控制组进行划分控制;因此,工作人员可以将重要级别高、运行要求高或内存读写要求高的任务划分到预设的控制组中;对于不属于预设的控制组的任务,处理器可以统一为其分配粒度更小的第二虚拟页,避免这些重要级别较低、运行要求较低或内存读写要求较低的任务占用第一虚拟页。
在一种可能的实现中,第二虚拟地址空间包括第三子虚拟地址空间和第四子虚拟地址空间,第三子虚拟地址空间作为用户空间,第四子虚拟地址空间作为内核空间;在该任务不属于预设的控制组的情况下,处理器可以先确定该任务是否为内核态任务;在该任务为内核态任务的情况下,再为该任务分配位于第四子虚拟地址空间中的第二虚拟页;在该任务为用户态任务的情况下,再为该任务分配位于第三子虚拟地址空间中的第二虚拟页。
本申请实施例中,通过在虚拟地址空间中配置两个页面大小粒度不同的区间,并基于预设的控制组为预设的不同任务分配第一虚拟页或第二虚拟页,从而可以实现不同页面大小粒度的内存分配,满足更多的内存分配需求。
可以理解的是,任务的用户空间是通过任务的task_struct数据结构进行描述和管理,因此,在图3所示实施例中,在采用如图4所示的虚拟地址空间的划分方式,用户空间和内核空间均包括高位地址和低位地址的情况下,处理器在创建任务、切换任务时,需要对应调整更新对应任务的task_struct数据结构,以避免在新的访问权限设置下发生访问冲突。
具体地,在完成虚拟地址空间的访问权限配置后,处理器可以在创建任务或切换任务时,更新对应任务的task_struct数据结构,以及TTBR0、TTBR1中的页表项。
任务有五种基本的状态,分别为:新建状态,也就是一个新的任务被处理器创建时的状态;就绪状态,是指任务已被分配除处理器资源之外所有必要资源,等待系统分配处理器资源即可运行的状态;运行状态,该任务正在被处理器运行的状态;等待状态,也叫阻塞状态或者睡眠状态,该任务不具备运行条件暂停运行,正在等待某一事件的发生的状态;终止状态,也就是该任务完成后正常结束,或者出现无法克服的错误而异常终止,或被操作系统及有终止权的进程终止时所处的状态。
具体地,处理器可以在创建任务后,可以配置该任务的task_struct数据结构。
在一种可能的实现中,处理器在配置第一虚拟地址空间和第二虚拟地址空间的页面大小,以及各个子虚拟地址空间的访问权限后,可以响应于创建第一任务,在第一任务的task_struct数据结构中添加第一页表项;然后将当前任务在第二页表基地址寄存器中的第二页表项添加到第一任务的task_struct数据结构中。
其中,当前任务为处理器正在执行的任务。
其中,第一页表项用于指示第二子虚拟地址空间的页表基地址;第二页表项用于指示第四子虚拟地址空间的页表基地址。
其中,计算设备包括第一页表基地址寄存器,对应图2所示实施例中的TTBR1;以及第二页表基地址寄存器,对应图2所示实施例中的TTBR0。为便于描述,下文将以TTBR1指代第一页表基地址寄存器,以TTBR0指代第二页表基地址寄存器。
具体地,TTBR1用于存储第一虚拟地址空间的页表基地址,TTBR0用于存储所述第二虚拟地址空间的页表基地址。
其中,每个任务拥有属于自身的用户空间,处理器在创建任务时,会根据TCR_EL1寄存器中的TG0字段划分该第二虚拟地址空间,得到该任务的第二虚拟地址空间的PGD;然后分配物理页存储该PGD,并将该物理页的物理地址与该PGD的首地址进行映射;最后在配置该任务的管理信息时将该PGD写入该任务的task_struct数据结构。这样,在执行该任务时,处理器可以从该任务的task_struct数据结构中获取该PGD,并将该PGD载入TTBR0中,使得MMU可以通过TTBR0中的页表基地址查找该任务对应的页表。
由于本实施例中,处理器通过配置第一虚拟地址空间中的第二子虚拟地址空间的访问权限,将该第二子虚拟地址空间作为用户空间的一部分,因此处理器可以在该新建状态的任务的task_struct数据结构中添加用于指示该任务的第二子虚拟地址空间的页表基地址的第一页表项,从而处理器在执行任务时可以将对应的第一页表项同步至TTBR1中,使得处理器通过TTBR1能够访问到当前执行任务的第二子虚拟地址空间,以免发生访问错误。
具体地,处理器可以获取第一任务的第一虚拟地址空间的PGD,再从中获取第二子虚拟地址空间的首地址;然后为第一任务分配物理页与该第二子虚拟地址空间的首地址进行映射;最后将该映射关系以及该第二子虚拟地址空间的页表基地址,也即第一页表项,写入第一任务的task_struct数据结构。
另外,由于本实施例中处理器通过配置第二虚拟地址空间的第四子虚拟地址空间的访问权限,将第四子虚拟地址空间作为内核空间,而每个任务共享同一内核空间,但拥有独立的用户空间;因此需要保持每个任务的第三子虚拟地址空间相互独立,且第四子虚拟地址空间的页表基地址一致。又因为每个任务的task_struct数据结构中的PGD用于管理对应任务的第二虚拟地址空间,所以处理器可以将当前执行任务在TTBR0中的第二页表项,更新到新创建的第一任务的task_struct数据结构中的PGD,从而保持处理器在执行不同任务的情况下内核空间的一致性,避免处理器访问内核空间时发生异常或失败。
具体地,处理器可以将该第二页表项写入该PGD,覆盖该PGD中虚拟地址部分相同的页表项。
在完成任务的task_struct数据结构的配置后,任务从新建状态转换为就绪状态;当任务从就绪状态或等待状态切换到运行状态时,处理器需要切换相关的上下文,以保证任务的正常运行。
其中,上下文是任务执行活动全过程的静态描述,已执行过的任务指令和和数据在相关寄存器与堆栈中的内容称为上文,正在执行的指令和和数据在相关寄存器与堆栈中的内容称为正文,待执行的指令和和数据在相关寄存器与堆栈中的内容称为下文。上下文切换包括虚拟地址空间的切换,以确保执行任务时CPU访问指令和数据时访问的是内存中属于该任务的地址空间。
在一种可能的实现中,处理器创建第一任务和第二任务,并执行第一任务;响应于将第一任务切换为第二任务,处理器可以根据第二任务的task_struct数据结构中的第一页表项更新TTBR1中对应的页表项;然后根据第一任务在TTBR0中的第二页表项,更新所述第二任务的task_struct数据结构。
其中,在将第一任务切换至第二任务的过程中,处理器可以将第一任务的上下文切换为第二任务的上下文。
其中,TTBR1中的页表项用于指示第一虚拟地址空间的页表基地址,也即TTBR1中包括用于指示当前任务的第二子虚拟地址空间的页表基地址的第一页表项;因此,将第一任务切换至第二任务时,需要将TTBR1中第一任务对应的第一页表项,更新为第二任务对应的第一页表项,使得处理器可以通过TTBR1访问自身的用户空间。
具体地,处理器可以将第二任务对应的第一页表项的页表项值写入TTBR1,覆盖第一任务对应的第一页表项。
其中,处理器可以获取第一任务在TTBR0中的第二页表项,也即第一任务的第四子虚拟地址空间的页表基地址;并根据该第一任务对应的第二页表项复制写入第二任务对应的PGD,更新第二任务对应的第二页表项;然后,再将第二任务的PGD写入TTBR0,以保持内核空间的页表基地址不变。
可以理解的是,处理器可以先更新TTBR1中的页表项,再更新TTBR0中的页表项;也可以先更新TTBR0中的页表项,再更新TTBR1中的页表项,本申请实施例对此不作具体限定。
在另一种可能的实现中,处理器可以获取第二任务的task_struct数据结构中的PGD中的第三页表项,该第三页表项为用于指示第二任务的第三子虚拟地址空间的页表基地址;再根据该第三页表项更新TTBR0中与第三子虚拟地址空间对应的页表项。
其中,处理器可以保持TTBR0中第四子虚拟地址空间的页表项不变,然后将作为用户空间的第三子虚拟地址空间对应的第三页表项更新至TTBR0。
具体地,处理器可以将第二任务对应的第三页表项的页表项值写入TTBR0中,覆盖TTBR0中第一任务对应的第三页表项。
在另一种可能的实现中,处理器可以先获取第一任务在TTBR0中的第二页表项,然后将该第二任务的task_struct数据结构中的PGD写入TTBR0中,再根据该第一任务对应的第二页表项更新第二任务在TTBR0中的第二页表项。
通过上述创建任务和切换任务时的配置和更新动作,可以在用户空间和内核空间均包括高位地址和低位地址的情况下,避免访问冲突,提高内核空间的安全性。
下面将进一步结合两个应用场景,对本申请实施例中的内存分配过程进行进一步描述。
可以参阅图5,图5为本申请实施例中的一种内存映射流程的示意图,该流程由计算设备执行,该计算设备包括ARM架构处理器;如图5所示,该内存映射流程包括步骤501至506。
步骤501、确定待分配内存的任务为目标任务。
其中,本实施例中的虚拟地址空间分布如图4所示。
其中,该目标任务为执行内存映射(memory map,MMAP)的任务。在处理器新建任务后,处理器需要为该任务分配虚拟地址空间中的虚拟页,以将该任务的相关文件映射到该任务的虚拟地址空间中;此时,处理器可以确定该待分配内存的任务为目标任务。具体地,该任务执行MMAP时,将向操作系统发送MMAP请求。
其中,该MMAP请求包括该文件在内存中的起始地址,以及映射长度、映射起始地址在文件中的偏移量(offset)。
在处理器执行任务的过程中,在该任务需要分配虚拟内存的情况下,处理器可以先确定该任务是否为目标任务;在该任务为目标任务的情况下,处理器可以获取该MMAP请求,并执行步骤502。
在该任务不为目标任务的情况下,可以执行图3所示实施例中的步骤302至304,为该任务分配虚拟内存。
步骤502、确定该任务是否属于第二控制组。
在获取到该MMAP请求后,处理器可以先判断该任务是否处于第二控制组。其中,该第二控制组为预设的控制组,第二控制组用于控制为预设用户态任务分配第一虚拟页。
可以理解的是,在本实施例的内存映射场景中,处理器将为属于第二控制组的用户态任务优先分配第一虚拟页。
在其他的一些可能实现中,第一控制组用于控制其组成员只能使用第一虚拟页。
在本实施例中,在第二子虚拟地址空间的第一虚拟页已分配完毕,或暂时无法分配第一虚拟页的情况下,处理器可以将执行步骤506。
若该任务处于第二控制组,则执行步骤503;若该任务不处于该第二控制组,则执行步骤506。
步骤503、在该任务属于第二控制组的情况下,确定该任务对应的MMAP请求的偏移量是否与第一虚拟页的页面大小匹配。
其中,当确定该任务处于第二控制组后,处理器可以进一步判断该MMAP请求中的偏移量是否与第一虚拟页的页面大小匹配。
具体地,处理器可以判断该偏移量是否为第一虚拟页的页面大小的整数倍。若是,则处理器可以确定该MMAP请求满足采用第一虚拟页进行内存映射的要求,执行步骤504;若否,则处理器可以确定该MMAP请求不满足该要求,执行步骤506。
步骤504、在该偏移量与第一虚拟页的页面大小匹配的情况下,确定该MMAP请求是否为固定映射,且映射地址范围位于第三子虚拟地址空间。
其中,在确定该任务属于第二控制组中,处理器需要为该任务分配第一虚拟页,且确定该MMAP请求的偏移量与第一虚拟页的页面大小匹配,符合采用第一虚拟页进行内存映射的要求后,处理器还可以再进一步判断该任务当前次的内存映射是否特别指定采用第二虚拟页进行映射。
此时,处理器可以判断该MMAP请求是否为固定映射,且映射地址范围位于第三子虚拟地址空间。
其中,处理器可以获取该内存映射请求的映射函数,若该映射函数为固定映射函数map_fixed,则可以确定该内存映射请求为固定映射;反之,则可以确定该内存映射请求不为固定映射。
其中,若该内存映射请求为固定映射,则该固定映射函数指定了虚拟地址空间中映射的第一首地址;再根据该第一首地址和该映射长度可以得到该映射地址范围。
若该MMAP请求为固定映射,且映射地址范围位于第三子虚拟地址空间内,则说明该任务当前次的内存映射特别指定采用第二虚拟页进行映射,且该映射请求合法,此时处理器可以执行步骤506。
若该MMAP请求为固定映射,且该映射地址范围不位于第二子虚拟地址空间和第三子虚拟地址空间内,也即该映射地址范围位于内核空间(第一子虚拟地址空间或第四子虚拟地址空间),则处理器可以向该任务返回内存映射失败,或无权映射的消息。
若该MMAP请求不为固定映射,或该固定映射的映射地址范围位于第二子虚拟地址空间内,则说明该任务采用第一虚拟页进行内存映射的请求合法,此时处理器可以执行步骤505。
步骤505、在该MMAP请求不为固定映射,或映射地址范围位于第二子虚拟地址空间的情况下,为该任务分配位于第二子虚拟地址空间的第一虚拟页。
其中,若该MMAP请求不为固定映射,则处理器可以获取映射的第二首地址,该第二首地址为操作系统根据当前第二子虚拟地址空间的空闲情况确定;然后从该首地址开始为该任务分配第二子虚拟地址空间内的第一虚拟页。
其中,若该MMAP请求为固定映射,且该映射地址范围位于第二子虚拟地址空间,则处理器可以从该MMAP请求中指定的第一首地址开始为该任务分配位于第二子虚拟地址空间的第一虚拟页。
之后,处理器可以将该任务的相关文件映射到分配给该任务的第一虚拟页。
步骤506、为该任务分配位于第三子虚拟地址空间内的第二虚拟页。
其中,若该任务不处于第二控制组,或,该MMAP请求中的偏移量与第一虚拟页的页面大小不匹配,则处理器可以获取映射的第三首地址,该第三首地址为操作系统根据当前第三子虚拟地址空间的空闲情况确定,然后根据从该首地址开始为该任务分配第二虚拟页。
其中,若该内存映射请求为固定映射,且该映射地址范围位于第三子虚拟地址空间内,则处理器可以基于该固定映射函数中指定的第一首地址,为该任务分配位于第三子虚拟地址空间的第二虚拟页。
之后,处理器可以将该任务的相关文件映射到分配给该任务的第二虚拟页。
本申请实施例中,可以通过任务归属的控制组和该MMAP请求指示的映射地址范围,对该任务请求的内存映射行为进行鉴权,并分配对应大小的虚拟页,可以在保证内存映射安全性的同时,满足不同的内存映射需求。
可以参阅图6,图6为本申请实施例中的一种页错误处理流程的示意图,该流程由计算设备执行,该计算设备包括ARM架构处理器;如图6所示,该页错误处理流程包括步骤601至步骤608。本实施例中的虚拟地址空间分布如图4所示。
步骤601、基于目标虚拟页和页表,确定任务访问的第一物理页。
其中,目标虚拟页为该任务的访问请求中虚拟地址所指示的虚拟页。
其中,在处理器执行任务的过程中,需要通过该任务的用户空间中的虚拟页,访问加载有该任务的相关文件数据的对应物理页。此时,处理器可以获取内存访问请求中目标虚拟页的虚拟地址,然后基于页表的页表项,确定对应的第一物理页。
可以理解的是,在建立虚拟页和对应任务的相关文件或数据的映射后,处理器可能不会第一时间为该任务分配与该虚拟页对应的物理页,而是在该任务访问该虚拟页时,通过触发页错误处理程序,再为该任务分配物理页。
因此,在确定第一物理页缺失的情况下,处理器可以执行步骤602。
步骤602、响应于第一物理页缺失,确定目标虚拟页的页面大小是否与第一虚拟页的页面大小匹配。
其中,页错误通常发生在用户空间的访问中,本实施例以处理器访问用户空间时发生的页错误为例进行说明。当处理器执行用户态任务,通过第二子虚拟地址空间或第三子虚拟地址空间访问内存时,若访问的目标虚拟页在TLB和内存页表中均无法查找到对应的第一物理页,则处理器可以确定第一物理页缺失,发生页错误。
其中,确定发生页错误后,处理器可以先判断目标虚拟页的页面大小与第一虚拟页的页面大小是否匹配,进而确定第一物理页的页面大小。
示例性的,第一虚拟页的页面大小为64KB,第二虚拟页的页面大小为4KB;若该目标虚拟页的页面大小为64KB,则处理器可以确定该目标虚拟页的页面大小与第一虚拟页的页面大小匹配;若该目标虚拟页的页面大小为4KB,则处理器可以确定该目标虚拟页的页面大小与第二虚拟页的页面大小匹配。
若目标虚拟页的页面大小与第一虚拟页的页面大小匹配,则处理器执行步骤603;若目标虚拟页的页面大小与第二虚拟页的页面大小匹配,则处理器执行步骤605。
可以理解的是,本实施例中以整个虚拟地址空间的虚拟页包括第一虚拟页和第二虚拟页为例进行说明;也即当目标虚拟页的页面大小与第一虚拟页的页面大小不匹配,该目标虚拟页的页面大小与第二虚拟页的页面大小匹配。
在其他的一些实施例中,当虚拟地址空间包括更多粒度大小的虚拟页时,可以基于本实施例适应调整得到相同效果的实施例,这些实施例应当处于本申请实施例的保护范围内。
步骤603、在该目标虚拟页的页面大小与第一虚拟页的页面大小匹配的情况下,确定该目标虚拟页对应的虚拟地址是否位于第二子虚拟地址空间。
在确定目标虚拟页的页面大小后,处理器可以进一步确定该目标虚拟页所处的子虚拟地址空间,以判断该任务的访问是否合法。
具体地,当该目标虚拟页的页面大小与第一虚拟页的页面大小匹配时,处理器可以进一步判断该目标虚拟页是否处于第二子虚拟地址空间。
若该目标虚拟页处于第二子虚拟地址空间,则说明该任务的访问目标为用户空间中的第一虚拟页,处理器执行该任务时具有相应的访问权限,因此可以执行步骤604。
若该目标虚拟页不处于第二子虚拟地址空间,也即处于第一子虚拟地址空间,则说明该任务的访问目标为内核空间,处理器执行该任务时不具有相应的访问权限,此时处理器可以执行步骤608。
步骤604、在该虚拟地址位于第二子虚拟地址空间的情况下,为该任务分配第二物理页。
其中,第二物理页与第一虚拟页的页面大小相同。
在确定发生页缺失,且该任务的访问行为合法的情况下,处理器可以为该任务分配与第一虚拟页的页面大小相同的第二物理页,以便将该第二物理页与目标虚拟页进行映射。
在一种可能的实现中,在该页缺失为软性页缺失,也即该目标虚拟页对应的数据内容已经加载到内存的第二物理页的情况下,处理器可以将该第二物理页分配给该任务,再执行步骤607。
在另一种可能的实现中,在该页缺失为硬性页缺失,也即该目标虚拟页对应的数据内容未加载到内存的第二物理页的情况下,处理器可以确定一个与第一虚拟页页面大小相同的空闲物理页作为第二物理页,并将该目标虚拟页对应的该任务的数据内容加载到该第二物理页中,再将该第二物理页分配给该任务,然后执行步骤607。
步骤605、在该目标虚拟页的页面大小与第一虚拟页的页面大小不匹配的情况下,则判断目标虚拟页对应的虚拟地址是否位于第三子虚拟地址空间。
其中,目标虚拟页不为第一虚拟页,则为第二虚拟页,此时处理器可以判断该目标虚拟页是否处于第三子虚拟地址空间,以确定此次访问行为是否合法。
若该目标虚拟页处于第三子虚拟地址空间,则说明该任务的访问目标为用户空间对应的第二虚拟页,处理器执行该任务时具有相应的访问权限,因此可以执行步骤606;若该目标虚拟页不处于第三子虚拟地址空间,也即处于第四子虚拟地址空间,则说明该用户态任务的访问目标为内核空间,处理器执行该用户态任务时不具有相应的访问权限,此时处理器可以执行步骤608。
步骤606、在该虚拟地址位于第三子虚拟地址空间的情况下,为该任务分配第三物理页。
其中,该第三物理页与第二虚拟页的页面大小相同。
可以理解的是,步骤606的具体实施方式与步骤604类似,第三物理页相当于步骤604的第二物理页,此处不再赘述。
步骤607、将分配给该任务的物理页与目标虚拟页的映射关系添加至页表中。
在为该任务分配该物理页后,处理器可以将该物理页和该目标虚拟页的映射关系写入对应页表,以便后续该任务进行再次访问。
步骤608、返回访问失败信息。
其中,当处理器确定当前用户态任务的访问目标为内核空间时,可以向该任务返回访问失败的消息,或返回访问权限不足的消息。
本申请实施例中,在检测到页错误发生时对访问行为进行鉴权,在确定访问目标是用户空间时再进行对应的物理页分配,可以提高访问行为的安全性。
可以参阅图7,图7为本申请实施例提供的计算设备的结构示意图。如图7所示,本申请实施例提供的计算设备700包括处理器710和存储器720。其中,处理器710为ARM架构的处理器。
其中,处理器710可以包括一个或者多个处理核心。处理器710利用各种接口和线路连接计算设备700内的各个部分,通过运行或执行存储在存储器720内的指令、程序、代码集或指令集,以及调用存储在存储器720内的数据,执行上述任意一个或多个实施例提供的方法。可选地,处理器710可以采用数字信号处理(digital signal processing,DSP)、现场可编程门阵列(field-programmable gate array,FPGA)、可编程逻辑阵列(programmablelogic array,PLA)中的至少一种硬件形式来实现。处理器710可集成CPU、图像处理器(graphics processing unit,GPU)和调制解调器中的一种或几种的组合。可以理解的是,上述调制解调器也可以不集成到处理器710中,单独通过一块通信芯片实现。
存储器720可以包括随机存储器(random access memory,RAM),也可以包括只读存储器(read-only memory,ROM)。可选地,存储器720包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器720可用于存储指令、程序、代码、代码集或指令集。存储器720可包括存储程序区。其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等),用于实现本申请实施例方法的指令等。
其中,处理器710和存储器720通过计算设备700内的总线进行通信连接,该总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本申请的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的至少一个处理器执行该计算机执行指令时,设备执行上述图3、图5或图6任一实施例中所描述的方法流程。
在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行上述图3、图5或图6任一实施例中所描述的方法流程。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (10)

1.一种内存分配方法,其特征在于,所述内存分配方法应用于ARM架构的计算设备;所述方法包括:
配置第一虚拟地址空间的第一虚拟页的页面大小,以及第二虚拟地址空间的第二虚拟页的页面大小;其中,所述第一虚拟页的页面大小大于所述第二虚拟页的页面大小;
确定待分配内存的任务是否属于预设的控制组;所述预设的控制组包括第一控制组和第二控制组;其中,所述第一控制组用于控制为预设内核态任务分配所述第一虚拟页;所述第二控制组用于控制为预设用户态任务分配所述第一虚拟页或所述第二虚拟页;
在所述任务属于所述预设的控制组的情况下,基于所述任务归属的控制组为所述任务分配所述第一虚拟页或所述第二虚拟页。
2.根据权利要求1所述的方法,其特征在于,所述第一虚拟地址空间包括第一子虚拟地址空间和第二子虚拟地址空间;其中,所述第一子虚拟地址空间为内核态地址空间;所述第二子虚拟地址空间为用户态地址空间;
所述在所述任务属于所述预设的控制组的情况下,基于所述任务归属的控制组为所述任务分配所述第一虚拟页或所述第二虚拟页,包括:
在所述任务属于所述第一控制组的情况下,为所述任务分配位于所述第一子虚拟地址空间的第一虚拟页;
在所述任务属于所述第二控制组的情况下,为所述任务分配位于所述第二子虚拟地址空间的第一虚拟页。
3.根据权利要求1所述的方法,其特征在于,所述第一虚拟地址空间包括第一子虚拟地址空间,所述第二虚拟地址空间包括第三子虚拟地址空间;其中,所述第一子虚拟地址空间为内核态地址空间;所述第三子虚拟地址空间为用户态地址空间;
所述在所述任务属于所述预设的控制组的情况下,基于所述任务归属的控制组为所述任务分配所述第一虚拟页或所述第二虚拟页,包括:
在所述任务属于所述第一控制组的情况下,为所述任务分配位于所述第一子虚拟地址空间的第一虚拟页;
在所述任务属于所述第二控制组的情况下,为所述任务分配位于所述第三子虚拟地址空间的第二虚拟页。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
在所述任务不属于所述预设的控制组的情况下,为所述任务分配所述第二虚拟页。
5.根据权利要求4所述的方法,其特征在于,所述第二虚拟地址空间包括第四子虚拟地址空间,所述第四子虚拟地址空间为内核态地址空间;
所述在所述任务不属于所述预设的控制组的情况下,为所述任务分配所述第二虚拟页,包括:
在所述任务不属于所述预设的控制组的情况下,确定所述任务是否为内核态任务;
在所述任务为所述内核态任务的情况下,为所述任务分配位于所述第四子虚拟地址空间的第二虚拟页。
6.根据权利要求1所述的方法,其特征在于,所述第二控制组用于控制为所述预设用户态任务分配所述第一虚拟页;所述第一虚拟地址空间包括第二子虚拟地址空间;所述第二虚拟地址空间包括第三子虚拟地址空间;其中,所述第二子虚拟地址空间和所述第三子虚拟地址空间为用户态地址空间;
在所述确定待分配内存的任务是否属于预设的控制组之前,所述方法还包括:
确定所述任务是否为目标任务,其中,所述目标任务为执行内存映射MMAP的任务;
所述确定待分配内存的任务是否属于预设的控制组,包括:
在所述任务为所述目标任务的情况下,确定所述任务是否属于所述第二控制组;
所述在所述任务属于所述预设的控制组的情况下,基于所述任务归属的控制组为所述任务分配所述第一虚拟页或所述第二虚拟页,包括:
在所述任务属于所述第二控制组的情况下,确定所述任务对应的MMAP请求中的偏移量是否与所述第一虚拟页的页面大小匹配;
在所述偏移量与所述第一虚拟页的页面大小匹配的情况下,确定所述MMAP请求是否为固定映射,且所述MMAP请求的映射地址范围位于所述第三子虚拟地址空间;
在所述MMAP请求不为固定映射,或所述映射地址范围位于所述第二子虚拟地址空间的情况下,为所述任务分配位于所述第二子虚拟地址空间的所述第一虚拟页。
7.根据权利要求2所述的方法,其特征在于,在所述基于所述任务归属的控制组为所述任务分配所述第一虚拟页或所述第二虚拟页之后,所述方法还包括:
基于目标虚拟页和页表,确定所述任务访问的第一物理页,所述目标虚拟页为所述任务的访问请求中虚拟地址所指示的虚拟页;
响应于所述第一物理页缺失,确定所述目标虚拟页的页面大小是否与所述第一虚拟页的页面大小匹配;
在所述目标虚拟页的页面大小与所述第一虚拟页的页面大小匹配的情况下,确定所述目标虚拟页对应的虚拟地址是否位于所述第二子虚拟地址空间;
在所述目标虚拟页对应的虚拟地址位于所述第二子虚拟地址空间的情况下,为所述任务分配第二物理页,其中,所述第二物理页与所述第一虚拟页的页面大小相同;
将所述第二物理页与所述目标虚拟页的映射关系添加至所述页表中。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述第一虚拟地址空间包括第二子虚拟地址空间;所述第二虚拟地址空间包括第四子虚拟地址空间;
所述方法还包括:
响应于创建第一任务,在所述第一任务的task_struct数据结构中添加第一页表项;所述第一页表项用于指示所述第二子虚拟地址空间的页表基地址;
将当前任务在第二页表基地址寄存器中的第二页表项添加到所述第一任务的task_struct数据结构中;其中,所述第二页表基地址寄存器用于存储所述第二虚拟地址空间的页表基地址;所述第二页表项用于指示所述第四子虚拟地址空间的页表基地址。
9.根据权利要求8所述的方法,其特征在于,在所述将当前任务在第二页表基地址寄存器中的第二页表项添加到所述第一任务的task_struct数据结构中之后,所述方法还包括:
响应于将所述第一任务切换为第二任务,根据所述第二任务的task_struct数据结构中的第一页表项更新第一页表基地址寄存器中对应的页表项;其中,所述第一页表基地址寄存器用于存储所述第一虚拟地址空间的页表基地址;
根据所述第一任务在第二页表基地址寄存器中的第二页表项,更新所述第二任务的task_struct数据结构。
10.一种计算设备,其特征在于,所述计算设备包括存储器和处理器;其中,所述处理器为ARM架构;
所述存储器和所述处理器耦合;
所述存储器用于存储计算机程序指令;
所述处理器用于调用所述计算机程序指令,以执行如权利要求1-9任一项所述的内存分配方法。
CN202410232194.1A 2024-02-29 2024-02-29 一种内存分配方法及计算设备 Pending CN118210622A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410232194.1A CN118210622A (zh) 2024-02-29 2024-02-29 一种内存分配方法及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410232194.1A CN118210622A (zh) 2024-02-29 2024-02-29 一种内存分配方法及计算设备

Publications (1)

Publication Number Publication Date
CN118210622A true CN118210622A (zh) 2024-06-18

Family

ID=91453563

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410232194.1A Pending CN118210622A (zh) 2024-02-29 2024-02-29 一种内存分配方法及计算设备

Country Status (1)

Country Link
CN (1) CN118210622A (zh)

Similar Documents

Publication Publication Date Title
US10552337B2 (en) Memory management and device
US9836409B2 (en) Seamless application access to hybrid main memory
US8190839B2 (en) Using domains for physical address management in a multiprocessor system
US11474956B2 (en) Memory protection unit using memory protection table stored in memory system
US6789156B1 (en) Content-based, transparent sharing of memory units
US9430402B2 (en) System and method for providing stealth memory
US8453015B2 (en) Memory allocation for crash dump
WO2017028309A1 (zh) 文件数据访问方法和计算机系统
US11907301B2 (en) Binary search procedure for control table stored in memory system
KR20080089002A (ko) 메모리 접근 제어 방법
CN116302491A (zh) 内存管理方法、装置、计算机设备及存储介质
US5875487A (en) System and method for providing efficient shared memory in a virtual memory system
US5940869A (en) System and method for providing shared memory using shared virtual segment identification in a computer system
CN112799977A (zh) 计算机的缓存分区和缓存访问实时性保护方法及装置
CN106250328B (zh) 存储器保护单元、存储器管理单元和微控制器
CN118210622A (zh) 一种内存分配方法及计算设备
EP4120087A1 (en) Systems, methods, and devices for utilization aware memory allocation
EP4386548A1 (en) Resource management method and corresponding device
KR101179275B1 (ko) 메모리 관리 장치 및 방법
CN115756742A (zh) 直通i/o虚拟化的性能优化设计方法、系统、介质及设备
CN114860439A (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