CN111459849B - 一种内存的设置方法及装置、电子设备、存储介质 - Google Patents

一种内存的设置方法及装置、电子设备、存储介质 Download PDF

Info

Publication number
CN111459849B
CN111459849B CN202010314151.XA CN202010314151A CN111459849B CN 111459849 B CN111459849 B CN 111459849B CN 202010314151 A CN202010314151 A CN 202010314151A CN 111459849 B CN111459849 B CN 111459849B
Authority
CN
China
Prior art keywords
memory space
virtual memory
mapping
virtual
simulator
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
CN202010314151.XA
Other languages
English (en)
Other versions
CN111459849A (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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202010314151.XA priority Critical patent/CN111459849B/zh
Priority to PCT/CN2020/093488 priority patent/WO2021212610A1/zh
Priority to US17/760,005 priority patent/US20230060835A1/en
Publication of CN111459849A publication Critical patent/CN111459849A/zh
Application granted granted Critical
Publication of CN111459849B publication Critical patent/CN111459849B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供一种内存的设置方法,所述方法包括:获取与所述模拟器相对应的进程生成的内存申请指令;根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;确定所述第一虚拟内存空间的剩余映射次数;判断所述剩余映射次数是否为零;若否,则采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;若是,则停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间。降低了进程对物理内存空间的占用,实现了在Windows系统对Linux系统KSM技术的模拟应用,无需模拟整个Linux系统。

Description

一种内存的设置方法及装置、电子设备、存储介质
技术领域
本发明涉及计算机领域,特别是涉及一种内存的设置方法及装置、电子设备、存储介质。
背景技术
在操作系统内核的内存管理中,物理内存以内存页的形式存在。其中,有一种常见的现象,内存中有很多一样的内容,但是却占据了不同的物理页。例如,有10个内容全是0的物理页,虽然内容全是0,但是它们占用了10个页的物理内存,这显然是一种浪费。为了解决这个问题,在Linux操作系统中,内核的内存去重机制(KSM,Kernel Samepage Merging)能够把相同的页内容进行合并为同一个物理页,当发生修改的时候才创建单独的物理页。
而在Windows系统中,同样存在着内容一样,却占据了不同物理页的问题。目前,Windows系统中并不能直接应用KSM技术解决这个问题,大多是通过对Linux操作系统进行完整模拟,从而实现KSM技术。由于需要对Linux操作系统进行模拟,对于很多程序而言都无法应用,因此实现在应用层上模拟应用KSM技术,从而降低进程的内存占用就显得尤为重要。
发明内容
鉴于上述问题,提出了本发明以便提供克服上述问题或者至少部分地解决上述问题的一种内存的设置方法及装置、电子设备、存储介质,包括:
为了解决上述问题,本发明实施例公开了一种内存的设置方法,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述方法包括:
获取与所述模拟器相对应的进程生成的内存申请指令;
根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
确定所述第一虚拟内存空间的剩余映射次数;
判断所述剩余映射次数是否为零;
若否,则采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
若是,则停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间。
优选地,所述获取与所述模拟器相对应的进程生成的内存申请指令的步骤之后,还包括:
根据所述终端的第一操作系统所对应的内存管理颗粒度,确定与第一虚拟内存空间对应的第一虚拟内存空间值;
基于所述第一虚拟内存空间值,创建所述第一虚拟内存空间。
优选地,所述根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数的步骤,包括:
从所述内存申请指令中提取第二虚拟内存空间对应的第二虚拟内存空间值;
采用所述第二虚拟内存空间值和所述第一虚拟内存空间值,确定针对所述第一虚拟内存空间的目标映射次数;所述第一虚拟内存空间值与第一虚拟内存空间对应。
优选地,所述方法还包括:
创建与所述进程对应的子进程;
采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程。
优选地,所述创建与所述进程对应的子进程的步骤之前,还包括:
判断所述进程是否已执行写入操作;
若是,则生成修改消息。
优选地,所述采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程的步骤之后,还包括:
采用所述修改消息,创建第三虚拟内存空间;所述第三虚拟内存空间与所述子进程对应;
将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中。
优选地,所述将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中的步骤之后,还包括:
当根据所述子进程生成新的子进程时,采用所述写时拷贝指令将所述第三虚拟内存空间映射到所述新的子进程中。
本发明实施例还公开了一种内存的设置装置,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述装置包括:
获取模块,用于获取与所述模拟器相对应的进程生成的内存申请指令;
目标映射次数确定模块,用于根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
剩余映射次数确定模块,用于确定所述第一虚拟内存空间的剩余映射次数;
判断模块,用于当判断所述剩余映射次数不为零时,采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
停止模块,用于当判断所述剩余映射次数为零时,停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间。
本发明实施例还提供了一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,计算机程序被处理器执行时实现如上内存的设置方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现如上内存的设置方法的步骤。
本发明具有以下优点:
在本发明的实施例中,获取与模拟器相对应的进程生成的内存申请指令,根据内存申请指令,确定针对第一虚拟内存空间的目标映射次数,确定第一虚拟内存空间的剩余映射次数,判断剩余映射次数是否为零,若剩余映射次数不为零,则采用写时拷贝指令将第一虚拟内存空间映射至第二虚拟内存空间,更新剩余映射次数,并再次判断所述剩余映射次数是否为零,若剩余映射次数为零,则停止采用写时拷贝指令将第一虚拟内存空间映射至第二虚拟内存空间。通过将虚拟内存空间值较小的第一虚拟内存空间延展映射至进程运行所需要的较大的第二虚拟内存空间,从而降低了系统根据虚拟内存空间分配的物理内存空间,达到使用较少虚拟内存空间即可满足进程运行的要求,降低了进程的物理内存占用,实现了在Windows系统应用层上对Linux系统的KSM技术的模拟应用,且无需模拟整个Linux系统。
附图说明
为了更清楚地说明本发明的技术方案,下面将对本发明的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种内存的设置方法的步骤流程图;
图2是本发明实施例提供的一种虚拟内存空间的映射示意图;
图3是本发明实施例提供的另一种内存的设置方法的步骤流程图;
图4是本发明实施例提供的一种内存的设置装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例提供的一种内存的设置方法的步骤流程图,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述方法具体可以包括如下步骤:
步骤101,获取与所述模拟器相对应的进程生成的内存申请指令;
终端中所运行的进程均需经由物理内存空间执行,若运行的进程占用物理内存空间过多,则会导致物理内存空间消耗殆尽。为了解决该问题,Windows系统中运用了虚拟内存技术,即采用一部分硬盘空间充当内存使用,该部分空间被称为虚拟内存空间。由于进程在运行的时候,其代码并不会同时全部运行,而是根据进程目前的运行情况,每次只运行需要的部分代码。因此进程在启动时,会将运行所需的代码和数据从磁盘中拷贝至虚拟内存空间,随后在运行过程中,实时将需要运行的代码和数据从虚拟内存空间中映射至物理内存空间,系统为生成映射的虚拟内存空间中的数据分配对应的物理内存空间,从而使得进程能够正常运行,而还未需要运行的数据则处于虚拟内存空间中,无需消耗物理内存空间。
模拟器是一种可以在终端所运行的操作系统中运行的应用程序,其内部可以运行与终端运行的操作系统不一样的操作系统,模拟器对应的进程可以通过内存申请指令向终端申请虚拟内存空间,终端在获取内存申请指令后,向该进程分配所需的虚拟内存空间。
步骤102,根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
系统在获取了进程所生成的内存申请指令后,根据内存申请指令中包含的虚拟内存空间值向进程分配对应数值的虚拟内存空间,第一虚拟内存空间为终端系统创建的虚拟内存空间,如在32位的Windows系统中,第一虚拟内存空间可以为64KB,根据内存申请指令,可以确定需要对第一虚拟内存空间进行重复映射的次数,从而在第一虚拟内存空间与进程实时所申请的虚拟内存空间之间建立起映射关系,例如目标映射次数为10次,则代表需要将第一虚拟内存空间重复映射10次到进程实时申请的虚拟内存空间中,才能使第一虚拟内存空间延展映射至整个进程实时申请的虚拟内存空间。进程实时申请的虚拟内存空间指存储着目前进程运行中所需要的代码和数据的虚拟内存空间,系统通过将实时申请的虚拟内存空间映射至物理内存空间为进程分配所需的物理内存空间。
步骤103,确定所述第一虚拟内存空间的剩余映射次数;
步骤104,判断所述剩余映射次数是否为零;
剩余映射次数用于判断是否还需要执行将第一虚拟内存空间映射至进程实时所申请的虚拟内存空间的操作,在确定剩余映射次数后,判断剩余映射次数是否为零。
步骤105,若否,则采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
系统在进行内存管理的时候,虚拟内存空间和物理内存空间均以内存页的形式存在,每个虚拟内存页对应的虚拟内存空间值至少为4KB,物理内存页对应的物理内存空间值也同样至少为4KB,写时拷贝(COW,Copy On Write)指的是把相同的物理页进行合并为同一个物理页,当发生修改的时候才真实的创建单独的物理内存页。
第二虚拟内存空间指的是进程实时所申请的虚拟内存空间,采用写时拷贝指令,利用FILE_MAP_COPY函数将第一虚拟内存空间映射至第二虚拟内存空间中,即将第一虚拟内存空间对应的虚拟内存页,映射至第二虚拟内存空间对应的虚拟内存页中,映射完成后,将当前的剩余映射次数减一,并更新所确定的剩余映射次数,重复该过程直至剩余映射次数为零。当剩余映射次数为零,即代表第一虚拟内存空间已经延展映射至整个第二虚拟内存空间,如图2所示,201为虚拟内存空间值为64KB的第一虚拟内存空间,202为虚拟内存空间值为1024KB的第二虚拟内存空间,将第一虚拟内存空间映射16次,延展映射至整个第二虚拟内存空间。
步骤106,若是,则停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间。
若判断剩余映射次数为零,即第一虚拟内存空间已经延展映射至整个第二虚拟内存空间,停止该映射操作。此时由于第一虚拟内存空间与第二虚拟内存空间所建立的映射关系,系统只在第一虚拟内存空间所对应的虚拟内存页和物理内存空间对应的物理内存页之间建立了映射关系,即系统只向进程分配了与第一虚拟内存空间值相等的物理内存空间,当进程所使用的物理内存空间值超过第一虚拟内存空间的虚拟内存空间值时,系统再实时分配新的物理内存空间给该进程。
在本发明的实施例中,获取与模拟器相对应的进程生成的内存申请指令,根据内存申请指令,确定针对第一虚拟内存空间的目标映射次数,确定第一虚拟内存空间的剩余映射次数,判断剩余映射次数是否为零,若剩余映射次数不为零,则采用写时拷贝指令将第一虚拟内存空间映射至第二虚拟内存空间,更新剩余映射次数,并再次判断所述剩余映射次数是否为零,若剩余映射次数为零,则停止采用写时拷贝指令将第一虚拟内存空间映射至第二虚拟内存空间。通过将虚拟内存空间值较小的第一虚拟内存空间延展映射至进程运行所需要的较大的第二虚拟内存空间,从而降低了系统根据虚拟内存空间分配的物理内存空间,达到使用较少虚拟内存空间即可满足进程运行的要求,降低了进程的物理内存占用,实现了在Windows系统应用层上对Linux系统的KSM技术的模拟应用,且无需模拟整个Linux系统。
参照图3,示出了本发明实施例提供的另一种内存的设置方法的步骤流程图,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述方法具体可以包括如下步骤:
步骤301,获取与所述模拟器相对应的进程生成的内存申请指令;
由于本步骤与步骤101类似,具体描述可参考步骤101,因此在此不再赘述。
步骤302,根据所述终端的第一操作系统所对应的内存管理颗粒度,确定与第一虚拟内存空间对应的第一虚拟内存空间值;
在终端系统中,系统每次为进程所分配的虚拟内存空间,其虚拟内存空间值必须为指定数值的倍数,该指定数值被称为内存管理颗粒度。例如在32位的Windows系统中,系统每次分配给进程的虚拟内存空间必须为64KB的倍数,若进程申请了110KB的虚拟内存空间,则系统会为其分配128KB的虚拟内存空间,64KB即是内存管理颗粒度。
为了实现映射,第一虚拟内存空间对应的第一虚拟内存空间值不少于内存管理颗粒度,例如在32位的Windows系统中,第一虚拟内存空间值可以为64KB。
步骤303,基于所述第一虚拟内存空间值,创建所述第一虚拟内存空间;
基于确定的第一虚拟内存空间值,系统创建对应的第一虚拟内存空间。
步骤304,根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
在本发明一种优选实施例中,步骤304还包括如下子步骤:
从所述内存申请指令中提取第二虚拟内存空间对应的第二虚拟内存空间值;
采用所述第二虚拟内存空间值和所述第一虚拟内存空间值,确定针对所述第一虚拟内存空间的目标映射次数;所述第一虚拟内存空间值与第一虚拟内存空间对应。
在进程的运行过程中,其代码是分段运行的,内存申请指令包含目前需要运行的部分代码所需要占用的虚拟内存空间的虚拟内存空间值,即第二虚拟内存空间值。采用第二虚拟内存空间值和第一虚拟内存空间值可以计算第一虚拟内存空间需要延展映射至整个第二虚拟内存空间值所需要的映射次数。例如第二虚拟内存空间值为1MB,第一虚拟内存空间值为64KB,1MB等于1024KB,因此有
Figure BDA0002458919230000081
可得到16次,即目标映射次数为16次。
步骤305,确定所述第一虚拟内存空间的剩余映射次数;
步骤306,判断所述剩余映射次数是否为零;
步骤307,若否,则采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
步骤308,若是,则停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间;
由于步骤305-308与上一个实施例中的步骤103-106相似,具体描述可参考步骤103-106,在此不再赘述。
步骤309,判断所述进程是否已执行写入操作;
步骤310,若是,则生成修改消息。
在Linux系统下可调用fork函数创建进程的子进程,此时系统为节省物理内存的占用,并不会直接将父进程对应的代码和数据直接拷贝至子进程内,而是在父进程和子进程之间建立映射关系,从而使得在查看子进程的内容时,用户实际查看到的是父进程的内容,当用户对子进程采用写入操作,即对子进程对应的内容,例如对函数的数值进行修改时,系统才会真正为子进程分配物理内存空间,存储父进程对应的代码和数据。
而在Windows系统下要对Linux系统下的fork函数进行模拟时,由于在采用写入操作时,FILE_MAP_COPY函数使用物理内存空间值为4KB的物理内存空间来为子进程分配物理内存空间,因此如果只使用DuplicateHan dle函数并不能做到将父进程的内容映射至子进程,需要通过VirtualQuery函数检查第一虚拟内存空间的映射状态,判断是否发生了写入操作,若发生了写入操作,则生成用于表示进程所包含的内容已发生了改变。
步骤311,创建与所述进程对应的子进程;
模拟Linux系统下的fork函数,创建与所述进程对应的子进程,该子进程内并不包含与父进程对应的代码和数据;
步骤312,采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程;
通过写时拷贝指令,将第一虚拟内存空间中包含的进程的数据和代码映射至子进程中,用户在查看子进程时,即可通过映射查看到父进程的数据和代码。
步骤313,采用所述修改消息,创建第三虚拟内存空间;所述第三虚拟内存空间与所述子进程对应;
系统根据修改消息,获知进程中曾发生过写入操作,因此在子进程中创建第三虚拟内存空间。
步骤314,将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中。
步骤315,当根据所述子进程生成新的子进程时,采用所述写时拷贝指令将所述第三虚拟内存空间映射到所述新的子进程中。
系统将进程所发生的写入操作对应的部分内容,写入子进程的第三虚拟内存空间中,当子进程再生成子进程的时候,由于此时一般只需对子进程进行读取操作,因此可直接采用写时拷贝指令将第三虚拟内存空间映射至新生成的子进程中,用户读取子进程所生成的子进程的内容时,亦可读取到发生过写入操作的部分内容,从而使得在创建子进程时,无需将进程中所有的代码和数据都拷贝进子进程中,只需要拷贝发生了改变的内容即可。
在本发明实施例中,判断进程是否已执行写入操作,若是则生成修改消息,在创建子进程时,采用写时拷贝指令将第一虚拟内存空间映射至子进程,采用修改消息,创建与子进程对应的第三虚拟内存空间,将与写入操作对应的修改内容,写入第三虚拟内存空间中,当根据子进程生成新的子进程时,采用写时拷贝指令将第三虚拟内存空间映射到新的子进程中,从而使得在生成子进程时,无需将父进程对应的代码和数据全部拷贝至子进程中,只需要拷贝发生了变化的内容即可,减少了拷贝进程对应的代码和数据时所占用的物理内存和CPU资源,提高了终端的性能。
为了使本领域技术人员能够更好地理解本发明方案,以下通过举例对本申请加以示例性说明,但应当理解的是,本申请并不限于此。
在游戏进程的虚拟内存空间中有一个比较特殊的部分称为栈,一个栈中大部分的内容都是0,例如一个占据1MB虚拟内存空间的栈,大部分情况下只有几十KB的是有内容的,其他的都是零。由于栈需要在内核上下文中使用,必须要进行初始化内容,所以栈在申请物理内存时,固定的占据了大量的物理内存。例如一百个线程就可能产生占用接近100MB的物理内存空间的零内容部分,浪费了大量的物理内存空间。
另一种情况则是进程中的匿名共享内存,这在安卓上应用比较多。匿名共享内存的使用特点是使用map函数后的初始化内容要求是0,这就造成很多的内容为零的物理内存页,同样可以进行物理内存页的合并。
当游戏进程的栈向系统申请1MB的虚拟内存空间时,因为栈的深度不深,目前实际只需要使用64KB的虚拟内存空间,在32位Windows系统中,64KB即为一个虚拟内存页的虚拟内存空间值,物理内存页也一样。但是栈要求1MB中除此之外的其他虚拟内存页也是可用的。系统分配1MB的第二虚拟内存空间给栈后,创建一个虚拟内存值为64KB的第一虚拟内存空间,系统将第一虚拟内存空间采用写时拷贝指令映射至第二虚拟内存空间中,经过16次重复映射后,第一虚拟内存空间已延展映射至整个第二虚拟内存空间。由于采用的是映射的方式,因此系统为进程的虚拟内存空间建立与物理内存空间之间的映射按照第一虚拟内存空间来建立,即向进程分配64KB的物理内存空间。当进程发生了写入操作,栈需要使用的虚拟内存的虚拟内存空间值超过第一虚拟内存空间的虚拟内存空间值时,根据写时拷贝指令,系统为进程再次分配物理内存空间,即生成物理内存页。例如栈需要使用的虚拟内存空间值为95KB,超过了第一虚拟内存空间值64KB,因此系统会再为进程分配一个物理页;当栈需要使用的虚拟内存空间值增加至158KB,系统则再为进程分配一个物理页,从而满足栈的使用需要。
在整个内存设置的过程中,通过对Linux系统的KSM技术进行模拟,使用较小虚拟内存,即可满足进程对较大虚拟内存的需求,从而使得进程的物理内存占用下降,提高终端的资源使用效率。
参照图4,示出了本发明一实施例提供的一种内存的设置装置的结构框图,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述装置可以包括如下模块:
获取模块401,用于获取与所述模拟器相对应的进程生成的内存申请指令;
目标映射次数确定模块402,用于根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
剩余映射次数确定模块403,用于确定所述第一虚拟内存空间的剩余映射次数;
判断模块404,用于当判断所述剩余映射次数不为零时,采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
停止模块405,用于当判断所述剩余映射次数为零时,停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间。
在本发明一实施例中,所述装置还包括:
第一虚拟内存空间值确定模块,用于根据所述终端的第一操作系统所对应的内存管理颗粒度,确定与第一虚拟内存空间对应的第一虚拟内存空间值;
创建模块,用于基于所述第一虚拟内存空间值,创建所述第一虚拟内存空间。
在本发明一实施例中,所述目标映射次数确定模块402还包括如下子模块:
提取子模块,用于从所述内存申请指令中提取第二虚拟内存空间对应的第二虚拟内存空间值;
确定子模块,用于采用所述第二虚拟内存空间值和所述第一虚拟内存空间值,确定针对所述第一虚拟内存空间的目标映射次数;所述第一虚拟内存空间值与第一虚拟内存空间对应。
在本发明一实施例中,所述装置还包括:
子进程模块,用于创建与所述进程对应的子进程;
第一虚拟内存空间映射子模块,用于采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程。
在本发明一实施例中,所述装置还包括:
写入操作判断子模块,用于判断所述进程是否已执行写入操作;
修改消息子模块,用于生成修改消息。
在本发明一实施例中,所述装置还包括:
第三虚拟内存空间子模块,用于采用所述修改消息,创建第三虚拟内存空间;所述第三虚拟内存空间与所述子进程对应;
写入子模块,用于将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中。
在本发明一实施例中,所述装置还包括:
第三虚拟内存空间映射子模块,用于当根据所述子进程生成新的子进程时,采用所述写时拷贝指令将所述第三虚拟内存空间映射到所述新的子进程中。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明一实施例还提供了电子设备,可以包括处理器、存储器及存储在存储器上并能够在处理器上运行的计算机程序,计算机程序被处理器执行时实现如上内存的设置方法的步骤。
本发明一实施例还提供了计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现如上内存的设置方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种内存的设置方法及装置、电子设备、存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种内存的设置方法,其特征在于,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述方法包括:
获取与所述模拟器相对应的进程生成的内存申请指令;
根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
确定所述第一虚拟内存空间的剩余映射次数;
判断所述剩余映射次数是否为零;
若否,则采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
若是,则停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间;
其中,所述第一虚拟内存空间为所述第一操作系统创建的虚拟内存空间,所述第二虚拟内存空间为进程实时所申请的虚拟内存空间。
2.根据权利要求1所述的方法,其特征在于,所述获取与所述模拟器相对应的进程生成的内存申请指令的步骤之后,还包括:
根据所述终端设备的第一操作系统所对应的内存管理颗粒度,确定与第一虚拟内存空间对应的第一虚拟内存空间值;
基于所述第一虚拟内存空间值,创建所述第一虚拟内存空间。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数的步骤,包括:
从所述内存申请指令中提取第二虚拟内存空间对应的第二虚拟内存空间值;
采用所述第二虚拟内存空间值和所述第一虚拟内存空间值,确定针对所述第一虚拟内存空间的目标映射次数;所述第一虚拟内存空间值与第一虚拟内存空间对应。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
创建与所述进程对应的子进程;
采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程。
5.根据权利要求4所述的方法,其特征在于,所述创建与所述进程对应的子进程的步骤之前,还包括:
判断所述进程是否已执行写入操作;
若是,则生成修改消息。
6.根据权利要求5所述的方法,其特征在于,所述采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述子进程的步骤之后,还包括:
采用所述修改消息,创建第三虚拟内存空间;所述第三虚拟内存空间与所述子进程对应;
将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中。
7.根据权利要求6所述的方法,其特征在于,所述将与所述写入操作对应的修改内容,写入所述第三虚拟内存空间中的步骤之后,还包括:
当根据所述子进程生成新的子进程时,采用所述写时拷贝指令将所述第三虚拟内存空间映射到所述新的子进程中。
8.一种内存的设置装置,其特征在于,应用于模拟器,所述模拟器运行于终端设备的用户空间,所述终端设备采用第一操作系统,所述模拟器采用与所述第一操作系统异构的第二操作系统,所述装置包括:
获取模块,用于获取与所述模拟器相对应的进程生成的内存申请指令;
目标映射次数确定模块,用于根据所述内存申请指令,确定针对第一虚拟内存空间的目标映射次数;
剩余映射次数确定模块,用于确定所述第一虚拟内存空间的剩余映射次数;
判断模块,用于当判断所述剩余映射次数不为零时,采用写时拷贝指令将所述第一虚拟内存空间映射至第二虚拟内存空间,更新所述剩余映射次数,并返回所述判断所述剩余映射次数是否为零的步骤;
停止模块,用于当判断所述剩余映射次数为零时,停止采用所述写时拷贝指令将所述第一虚拟内存空间映射至所述第二虚拟内存空间;
其中,所述第一虚拟内存空间为所述第一操作系统创建的虚拟内存空间,所述第二虚拟内存空间为进程实时所申请的虚拟内存空间。
9.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至7中任一项所述的内存的设置方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的内存的设置方法的步骤。
CN202010314151.XA 2020-04-20 2020-04-20 一种内存的设置方法及装置、电子设备、存储介质 Active CN111459849B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202010314151.XA CN111459849B (zh) 2020-04-20 2020-04-20 一种内存的设置方法及装置、电子设备、存储介质
PCT/CN2020/093488 WO2021212610A1 (zh) 2020-04-20 2020-05-29 一种内存的设置方法及装置、电子设备、存储介质
US17/760,005 US20230060835A1 (en) 2020-04-20 2020-05-29 Method and apparatus for setting memory, and electronic device and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010314151.XA CN111459849B (zh) 2020-04-20 2020-04-20 一种内存的设置方法及装置、电子设备、存储介质

Publications (2)

Publication Number Publication Date
CN111459849A CN111459849A (zh) 2020-07-28
CN111459849B true CN111459849B (zh) 2021-05-11

Family

ID=71685963

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010314151.XA Active CN111459849B (zh) 2020-04-20 2020-04-20 一种内存的设置方法及装置、电子设备、存储介质

Country Status (3)

Country Link
US (1) US20230060835A1 (zh)
CN (1) CN111459849B (zh)
WO (1) WO2021212610A1 (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219770B1 (en) * 1998-03-23 2001-04-17 Compaq Computer Corporation Method and apparatus for managing copy on write operations in a virtual memory
CN1545033A (zh) * 2003-11-14 2004-11-10 清华大学 Fc-san存储子系统的lun cache方法
US7318135B1 (en) * 2003-07-22 2008-01-08 Acronis Inc. System and method for using file system snapshots for online data backup
CN102308282A (zh) * 2011-07-20 2012-01-04 华为技术有限公司 多处理器体系结构远端内存访问的模拟方法及模拟器
CN103092673A (zh) * 2012-11-27 2013-05-08 北京航空航天大学 虚拟机快照处理方法及装置
CN105550123A (zh) * 2014-10-27 2016-05-04 联发科技股份有限公司 电子装置及其存储空间管理方法
CN106155933A (zh) * 2016-07-06 2016-11-23 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass‑through相结合的虚拟机内存共享方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9672052B1 (en) * 2012-02-16 2017-06-06 Google Inc. Secure inter-process communication
US9678863B2 (en) * 2012-06-12 2017-06-13 Sandisk Technologies, Llc Hybrid checkpointed memory
CN103034591A (zh) * 2012-11-21 2013-04-10 北京航空航天大学 虚拟机内存共享方法及装置
US10983821B2 (en) * 2016-09-26 2021-04-20 Intel Corporation Apparatus and method for a hybrid layer of address mapping for a virtualized input/output (I/O) implementation
US9959074B1 (en) * 2016-11-29 2018-05-01 EMC IP Holding Company LLC Asynchronous in-memory data backup system
US10534719B2 (en) * 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
CN110336894B (zh) * 2019-06-24 2021-03-30 中国科学院软件研究所 一种虚拟机用户空间地址到宿主机内核空间地址转换方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219770B1 (en) * 1998-03-23 2001-04-17 Compaq Computer Corporation Method and apparatus for managing copy on write operations in a virtual memory
US7318135B1 (en) * 2003-07-22 2008-01-08 Acronis Inc. System and method for using file system snapshots for online data backup
CN1545033A (zh) * 2003-11-14 2004-11-10 清华大学 Fc-san存储子系统的lun cache方法
CN102308282A (zh) * 2011-07-20 2012-01-04 华为技术有限公司 多处理器体系结构远端内存访问的模拟方法及模拟器
CN103092673A (zh) * 2012-11-27 2013-05-08 北京航空航天大学 虚拟机快照处理方法及装置
CN105550123A (zh) * 2014-10-27 2016-05-04 联发科技股份有限公司 电子装置及其存储空间管理方法
CN106155933A (zh) * 2016-07-06 2016-11-23 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass‑through相结合的虚拟机内存共享方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
内存数据的合并与压缩算法;李慧玲;《中国优秀硕士学位论文全文数据库(信息科技辑)》;20160331;全文 *

Also Published As

Publication number Publication date
CN111459849A (zh) 2020-07-28
WO2021212610A1 (zh) 2021-10-28
US20230060835A1 (en) 2023-03-02

Similar Documents

Publication Publication Date Title
US10474369B2 (en) Mapping guest pages to disk blocks to improve virtual machine management processes
CN107807839B (zh) 一种修改虚拟机内存数据的方法、装置及电子设备
CN106201659B (zh) 一种虚拟机热迁移的方法及宿主机
US20160034290A1 (en) Dynamically deployed virtual machine
WO2016184320A1 (zh) 在线升级机器虚拟器的方法与设备
US9792075B1 (en) Systems and methods for synthesizing virtual hard drives
US9460009B1 (en) Logical unit creation in data storage system
CN107025256B (zh) 用于减少基于云的服务的重新激活时间的方法和系统
CN114327777B (zh) 确定全局页目录的方法、装置、电子设备及存储介质
CN110908707A (zh) 一种资源打包方法、装置、服务器及存储介质
WO2001095160A2 (en) Accessing state information in a hardware/software co-simulation
CN103049546B (zh) 一种管理、访问系统日志的方法和装置
CN111459849B (zh) 一种内存的设置方法及装置、电子设备、存储介质
CN112433812A (zh) 一种虚拟机跨集群迁移方法、系统、设备及计算机介质
EP3264254B1 (en) System and method for a simulation of a block storage system on an object storage system
US20170090816A1 (en) Protection for Memory Deduplication by Copy-on-Write
US10445009B2 (en) Systems and methods of controlling memory footprint
CN107861795B (zh) 模拟物理tcm芯片的方法、系统、装置及可读存储介质
CN108196945B (zh) 一种核间通信方法、装置和虚拟化设备
US20180095690A1 (en) Creating virtual storage volumes in storage systems
CN111737223B (zh) 一种文件拷贝方法、装置、设备及存储介质
CN110378037B (zh) 基于Ceph的CFD仿真数据存储方法、装置及服务器
CN105389185A (zh) 用于虚拟云桌面启动风暴的处理方法及装置
CN117251118B (zh) 支持虚拟NVMe仿真与集成方法及系统
US11500560B2 (en) Method to suggest best SCM configuration based on resource proportionality in a de-duplication based backup storage

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