WO2024078429A1 - 内存管理方法、装置、计算机设备及存储介质 - Google Patents

内存管理方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
WO2024078429A1
WO2024078429A1 PCT/CN2023/123475 CN2023123475W WO2024078429A1 WO 2024078429 A1 WO2024078429 A1 WO 2024078429A1 CN 2023123475 W CN2023123475 W CN 2023123475W WO 2024078429 A1 WO2024078429 A1 WO 2024078429A1
Authority
WO
WIPO (PCT)
Prior art keywords
memory
block
metadata
segments
target
Prior art date
Application number
PCT/CN2023/123475
Other languages
English (en)
French (fr)
Inventor
郑豪
Original Assignee
杭州阿里云飞天信息技术有限公司
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 杭州阿里云飞天信息技术有限公司 filed Critical 杭州阿里云飞天信息技术有限公司
Publication of WO2024078429A1 publication Critical patent/WO2024078429A1/zh

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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • G06F12/0653Configuration or reconfiguration with centralised address assignment

Definitions

  • the present invention relates to the field of computer technology, and in particular to memory management methods, devices, computer equipment and storage media.
  • the memory is divided into multiple memory pages (pages), and metadata (such as struct page) needs to be created for each page to manage each page. Since memory pages are usually small (such as 4k bytes), for example, each 4k memory page requires 64 bytes of metadata for each memory page. In large memory scenarios, storing metadata will take up a lot of memory space, which will cause a large amount of metadata to occupy memory.
  • a larger granularity is used as the management unit to manage the memory, such as dividing the memory into memory blocks of 2M and other sizes for management.
  • each memory block may not store all the data, thus causing a waste of storage space within the memory block.
  • there is also a need to manage memory blocks at a smaller granularity Based on this, how to avoid memory waste at a large management granularity is a technical problem that needs to be solved urgently.
  • the embodiments of this specification provide a memory management method, apparatus and computer device.
  • a memory management method wherein the memory includes a plurality of memory blocks, each of the memory blocks is divided into a plurality of memory segments; the memory is used to store total metadata, and block metadata corresponding to each allocated memory block;
  • the block metadata includes: allocation status information of each memory segment in the allocated memory block;
  • the total metadata includes: information on the number of unallocated memory segments in each of the allocated memory blocks;
  • the method comprises:
  • the allocation status information of the block metadata of the target memory block to which the target memory segment belongs is updated, and the quantity information of the unallocated memory segments in the target memory block in the total metadata is updated.
  • a memory management device wherein the memory includes a plurality of memory blocks, and each of the memory blocks is divided into a plurality of memory segments;
  • the memory is used to store total metadata and block metadata corresponding to each allocated memory block;
  • the block metadata includes: allocation status information of each memory segment in the allocated memory block;
  • the total metadata includes: information on the number of unallocated memory segments in each of the allocated memory blocks;
  • the device comprises:
  • a determination module configured to: in response to a memory adjustment request, determine a target memory segment whose allocation state needs to be adjusted according to the total metadata and the block metadata;
  • An adjustment module configured to: adjust the allocation state of the target memory segment based on the memory adjustment type corresponding to the memory adjustment request;
  • the update module is used to: after adjusting the allocation status of the target memory segment, update the allocation status information of the block metadata of the target memory block to which the target memory segment belongs, and update the number information of the unallocated memory segments in the target memory block in the total metadata.
  • a computer device comprising a memory, a processor, and a computer program stored in the memory and executable on the processor, wherein when the processor executes the computer program, the steps of the method embodiment described in the first aspect are implemented.
  • a computer program product is provided, comprising a computer program, wherein when the computer program is executed by the processor, the steps of the method embodiment described in the first aspect are implemented.
  • a computer-readable storage medium on which a computer program is stored, and when the computer program is executed by a processor, the steps of the method embodiment described in the first aspect are implemented.
  • the memory includes a plurality of memory blocks, and each of the memory blocks is divided into a plurality of memory segments; Therefore, the memory block can be designed to have a larger granularity, thereby reducing the occupation of the block metadata of the memory block; in addition, the memory segments in the memory block can also be specifically managed.
  • This embodiment designs two layers of metadata, including total metadata and block metadata of each allocated memory block.
  • the block metadata includes: allocation status information of each memory segment in the allocated memory block, which is used to determine the memory segments that can be allocated in the allocated memory block; the total metadata includes: the number information of unallocated memory segments in each of the allocated memory blocks, which is used to determine the memory blocks that can be allocated in the memory.
  • the target memory segment whose allocation status needs to be adjusted can be determined; after adjusting the allocation status of the target memory segment, the allocation status information of the block metadata of the target memory block to which the target memory segment belongs is updated, and the number information of the target memory block in the total metadata is updated, so that the allocation of memory segments can be realized, the waste of remaining space of large-granularity memory blocks can be reduced, and the management of memory blocks with smaller granularity can be realized.
  • FIGS. 1A and 1B are schematic diagrams of a memory architecture according to an exemplary embodiment of this specification.
  • FIG. 2A is a schematic diagram of dividing a memory block into memory segments according to an exemplary embodiment of this specification.
  • FIG. 2B is a schematic diagram of a singly linked list according to an exemplary embodiment of this specification.
  • FIG. 2C is a schematic diagram of a double linked list according to an exemplary embodiment of this specification.
  • FIG. 2D is a schematic diagram of two double-linked lists according to an exemplary embodiment of this specification.
  • FIG. 2E is a schematic diagram of a linked list array according to an exemplary embodiment of this specification.
  • FIG. 2F is a schematic diagram of total metadata according to an exemplary embodiment of this specification.
  • 2G to 2J are schematic diagrams of memory management according to an exemplary embodiment of this specification.
  • FIG3 is a block diagram of a computer device where a memory management apparatus is located according to an exemplary embodiment of this specification.
  • FIG. 4 is a block diagram of a memory management device according to an exemplary embodiment of this specification.
  • first, second, third, etc. may be used in this specification to describe various information, these information should not be limited to these terms. These terms are only used to distinguish the same type of information from each other.
  • first information may also be referred to as the second information, and similarly, the second information may also be referred to as the first information.
  • word “if” as used herein may be interpreted as "at the time of” or "when” or "in response to determining”.
  • memory metadata refers to data that records the status information of each management unit of memory (which may be called a memory page or a memory block, etc.) in order to facilitate memory management. Based on specific management needs, various types of status information can be recorded in metadata. It can be understood that metadata is stored in memory during the operation of a computer device. As mentioned in the background technology, when the memory management granularity is small, a large amount of metadata will occupy the memory. For example, in scenarios such as virtual machines, the memory management overhead will be high. As shown in Figure 1A, it is a schematic diagram of running a virtual machine on a host machine (Host) according to an exemplary embodiment of this specification.
  • Host host machine
  • the host machine in this embodiment refers to a physical computer used to install virtual machine software.
  • the host machine is a concept relative to the virtual machine.
  • the virtual machine (virtual machine) of this embodiment refers to a complete computer system with complete hardware system functions and running in a completely isolated environment that is simulated by software.
  • the work completed by a physical computer can be implemented in a virtual machine.
  • part of the hard disk and memory capacity of the physical machine needs to be used as the hard disk and memory capacity of the virtual machine.
  • Each virtual machine has an independent operating system and can be operated on the virtual machine like a physical machine.
  • General virtual machine software includes but is not limited to: VMware (VMWare ACE), Virtual Box, Virtual PC or KVM (Kernel-based Virtual Machine), etc., which can virtualize multiple computers in a physical machine system.
  • multiple virtual machines VM1, VM2, ... VMn can run in a host machine HOST, and the memory used by them comes from the host's memory.
  • the host's kernel kernel and other applications on the host may also use the above memory. This will cause the memory used by the kernel and applications to compete with the memory used by the virtual machines during operation, resulting in uncertainty in the host's salable memory. Especially in the case of severe memory shortage, it may cause the virtual machine memory to The virtual machine may be swapped out or even unusable, which in turn affects system performance and stability.
  • FIG. 1B is a schematic diagram of a reserved memory scenario according to an exemplary embodiment of this specification.
  • the host machine's memory includes two storage spaces, as shown in FIG. 1B, which uses different filling methods to show two storage spaces of the memory, including a non-reserved storage space a for use by the kernel (filled with diagonal lines in the figure), and a reserved storage space b for use by the virtual machine (filled with vertical lines and grayscale in the figure).
  • the non-reserved storage space a is used for use by the kernel in the figure, and applications running on the operating system (such as applications 1 to 3 in the example in the figure) can use the non-reserved storage space a.
  • the reserved storage space b can be used by virtual machines (VM, Virtual Machine), such as VM1 to VMn shown in the figure, a total of n virtual machines.
  • VM Virtual Machine
  • the two storage spaces can use different management granularities, that is, the way of dividing the memory can be different.
  • FIG. 1B for the convenience of example, the two storage spaces are illustrated in a continuous manner in the figure. It can be understood that in actual applications, the two storage spaces can be non-continuous.
  • the reserved memory space occupies most of the memory and is not available to the host kernel.
  • a reserved memory module can be inserted into the kernel of the operating system for special management.
  • the reserved memory module usually manages the reserved memory with a larger granularity as the management unit, for example, the reserved memory is divided into memory blocks (memory section, ms) of 2MB and other sizes for management; in some scenarios, large memory is also commonly used, and other granularities, such as 1GB (GigaByte, gigabyte), are optional.
  • each memory block may not store all the data, which will cause a waste of storage space inside the memory block.
  • the compressed data is also smaller than the size of the memory block. Based on this, how to avoid memory waste and efficiently manage the memory block at a large management granularity is a technical problem that needs to be solved urgently.
  • an embodiment of this specification provides a memory management method, in which the memory includes multiple memory blocks, and each of the memory blocks is divided into multiple memory segments; therefore, the memory block can be designed to have a larger granularity, thereby reducing the occupation of the block metadata of the memory block; in addition, the memory segments in the memory block can also be specifically managed, and this embodiment designs two layers of metadata, which includes total metadata on the basis of the block metadata of each allocated memory block; the block metadata includes: the allocation status information of each memory segment in the allocated memory block, so as to determine the memory segments that can be used for allocation in the allocated memory block; the total metadata includes: the number information of the unallocated memory segments in each of the allocated memory blocks, so as to determine the memory blocks that can be allocated in the memory.
  • the target memory segment whose allocation status needs to be adjusted can be determined; after adjusting the allocation status of the target memory segment, the allocation status information of the block metadata of the target memory block to which the target memory segment belongs is updated, and the number information of the target memory blocks in the total metadata is updated, so that it can be The allocation of memory segments is realized, and the waste of remaining space of large-grained memory blocks is reduced.
  • the memory of this embodiment includes a plurality of memory blocks, each of which is divided into a plurality of memory segments.
  • the size of the memory block can be flexibly configured as needed, such as the aforementioned 2MB or 1GB, etc., which is not limited in this embodiment.
  • the memory blocks can be continuous or non-continuous.
  • this specification shows a method of dividing each memory block into multiple memory segments according to an embodiment.
  • the size of the memory segment is flexibly configured as needed, and this embodiment does not limit this. For example, taking a 2MB memory block as an example, it is divided into multiple small segments, such as 2048 memory segments with a granularity of 1k.
  • the data structure of this embodiment includes block metadata and total metadata.
  • This embodiment uses memory blocks as the granularity to establish metadata for each allocated memory block, which is called block metadata (header).
  • the block metadata includes the allocation status information of each memory segment in the allocated memory block.
  • the data structure of the block metadata can be flexibly implemented as needed, and the implementation of the allocation status information can also be implemented in a variety of ways, which are not limited in this embodiment. It can be understood that block metadata is only needed to be established for memory blocks that have been allocated, that is, memory blocks that have stored data.
  • each memory segment of the memory block can be numbered in a set order (for example, in the order of address from high to low or from low to high, etc.), and each number is configured with an allocation status mark indicating whether it has been allocated.
  • the allocation status of each memory segment in the memory block can be represented by a bitmap.
  • a bitmap is a data structure, and a bitmap includes at least one element, each element is arranged in order, and each element uses "0" or "1" to indicate that its corresponding element does not exist or exists.
  • each memory segment can be sorted in a set order, and two bits 0 and 1 are used to represent the two states of whether the memory segment is allocated, so that the allocation status information of each memory segment in a memory block can be represented by a bitmap, and the low data occupancy is also convenient for rapid analysis of the occupancy of each segment in the memory block during subsequent processing.
  • the allocation status information can be implemented in a variety of ways in actual applications, and this embodiment does not limit this.
  • the storage location of the block metadata can be in multiple ways.
  • the memory occupied by the block metadata is very small and can be stored in the memory segment of the memory block; according to the size of the block metadata and the size of the memory segment, the block metadata can occupy one or more memory segments; the memory segment storing the block metadata can be configured as needed, for example, the block metadata is stored from the first memory segment of the memory block, or the block metadata is stored from the last memory segment of the memory block, etc.
  • the block metadata can also be uniformly stored in other locations of the memory, which is not limited in this embodiment.
  • the memory may include a first storage space (non-reserved memory) for use by the operating system of the computer device and a second storage space (reserved memory) for use by the virtual machine, wherein the second storage space includes the plurality of memory blocks.
  • the first storage space and the second storage space may adopt different management granularities, and the first storage space may be managed by the first memory management module of the operating system.
  • the method of this embodiment may be applied to the second memory management module for managing the second storage space in the operating system. If the second memory management module uses the first storage space, it is necessary to initiate memory allocation to the first memory management module. If the block metadata changes frequently, the second memory management module needs to frequently interact with the first memory management module.
  • the block metadata is stored in the memory segment of the memory block and is directly managed by the second memory management module, which can improve processing efficiency.
  • the memory block of the reserved memory is of a larger granularity and is often not fully used, and the space occupied by the block metadata is also very limited, which will not affect the use of the memory block. There is no need to specifically establish a corresponding relationship between the block metadata and the memory block. When the address of the memory block is determined, the block metadata of the memory block can be directly determined.
  • the size of the memory segment can be determined based on the size of the block metadata, and the size of the memory segment is greater than or equal to the size of the block metadata, so that the block metadata is stored in one memory segment, such as the first memory segment, which facilitates management and improves management efficiency.
  • block metadata may be included in the block metadata as needed, such as the physical address paddr (physics address) of the memory block ms, the number of free memory segments free, the maximum number of free segments (i.e., the maximum number of consecutive unallocated memory segments in the allocated memory block) max_free, and the serial number max of the starting position of the largest consecutive free segment, etc., to facilitate the subsequent allocation or release of memory segments.
  • the physical address paddr physics address
  • This embodiment also establishes total metadata, which includes information on the number of unallocated memory segments in each of the allocated memory blocks, so as to determine the allocatable memory blocks in the memory.
  • the number information of unallocated memory segments in each of the allocated memory blocks may include information related to each free memory segment in the allocated memory block, such as the number of free memory segments and/or the maximum number of free segments, etc.
  • the maximum number of free segments represents the maximum number of continuous free memory segments in the memory block. For example, the number of free memory segments in a certain memory block ms is 200, including two continuous free memory segments, one of which has 50 continuous free memory segments, and the other has 150 continuous free memory segments, and the maximum number of free segments is 150.
  • the total metadata can be used to quickly determine whether there is a memory block in the allocated memory block that meets the allocation request.
  • the implementation method of the data structure of the total metadata can be flexibly configured as needed, and this embodiment does not limit this.
  • the storage location of the total metadata can also be in multiple ways; for example, in the reserved memory scenario, the total metadata Data can be stored in the non-reserved storage space of the memory or in the reserved storage space of the memory. For example, due to the size of the total metadata and the requirement that the memory should be reserved as much as possible for the virtual machine in the reserved memory scenario, the total metadata can be stored in the non-reserved storage space.
  • the total metadata may include the address of each of the block metadata.
  • the method further includes: reading the block metadata of the at least one alternative memory block according to the address of the block metadata of the at least one alternative memory block. Therefore, this embodiment can quickly read the block metadata of the alternative memory block after determining the alternative memory block.
  • the information of fully allocated memory blocks and the information of incompletely allocated memory blocks in the total metadata can be managed and stored separately.
  • the total metadata for recording the number information of unallocated memory segments in each of the allocated memory blocks can be implemented in a variety of ways.
  • the number information of unallocated memory segments in each of the allocated memory blocks in the total metadata can be stored in a linked list.
  • a linked list is a non-continuous and non-sequential storage structure in physical storage structure.
  • the logical order of data elements is realized by the pointer link order in the linked list.
  • a linked list consists of a series of nodes (each element in the linked list is called a node), and the nodes can be dynamically generated at runtime.
  • Each node consists of two parts: one is the data field for storing data elements, and the other is the pointer field for storing addresses.
  • Linked lists include single linked lists and double linked lists; as shown in FIG2B , it is a schematic diagram of a single linked list according to an embodiment of the present specification, in which the first node of the linked list includes a head pointer head, whose data field is empty, and the head pointer head points to the data field of the next node.
  • the back pointer next of the last node points to the end null.
  • the end indicates that the linked list is a non-circular linked list.
  • the back pointer next of the last node can also point to the head pointer, thereby forming a circular linked list.
  • the pointer field of each node in the doubly linked list includes a front pointer prev (used to point to the data field of the previous node) and a back pointer next, so the previous node of the current node can be found quickly compared to a single linked list.
  • the doubly linked list can also include a non-circular and circular doubly linked lists. As shown in Figure 2C, it is a schematic diagram of a doubly linked list shown in this specification according to an embodiment.
  • the pointer field (i.e., the head pointer) of the first node includes a front pointer and a back pointer, and the data field head can be empty or store data as needed; the pointer fields of other nodes are similar, and the pointer fields all include a front pointer and a back pointer.
  • the data fields in the figure are a1, a2, and a3 respectively.
  • the figure is used as an example for convenience.
  • Each node is shown in the form of a front pointer, a data field, and a back pointer respectively.
  • other methods can be used to implement it as needed, such as a front pointer, a back pointer, and a data field respectively. This embodiment does not limit this.
  • the type of double linked list can be selected as needed, and this embodiment does not limit this.
  • the total metadata includes one or more first linked lists, and different first linked lists correspond to different quantity information; in actual applications, according to needs, the first linked list can be a single linked list or a double linked list, which is not limited in this embodiment.
  • the first linked list includes at least one node, and the node is used to store the address of the block metadata of an allocated memory block, so that the block metadata of the memory block can be quickly accessed through the total metadata.
  • the addresses of the block metadata of the allocated memory blocks with the same amount of information are stored in different nodes of the first linked list.
  • FIG. 2D shows two double linked lists: linked list List_a and linked list List_b.
  • the linked lists in this embodiment include a head node. In practical applications, it is optional to provide a head node as required, and this embodiment does not limit this.
  • the linked list List_a is a bidirectional circular linked list.
  • the pointer field (head pointer) of the first node includes the front pointer and the back pointer, as well as the data head_a; the back pointer points to the next node a1, the front pointer points to the last node a1, and the back pointer points to the next node a1; similarly, the front pointer of node a1 points to head_a, and the back pointer points to head_a.
  • the linked list List_b is a bidirectional circular linked list.
  • the pointer field (head pointer) of the first node includes a front pointer and a back pointer, and also includes the data head_b.
  • the back pointer points to the next node b1, and the front pointer points to the last node b2; the pointing directions of the other two nodes are similar, as shown in the attached figure.
  • the node can store the address of the block metadata header of the allocated memory block.
  • a1, b1 and b2 respectively store the address of the block metadata header of the corresponding allocated memory block.
  • the block metadata is stored in the memory segment of the memory segment ms, such as the first memory segment, and the header of the memory block can be accessed through the node.
  • Node a1 in linked list List_a is used to connect to memory block m1.
  • Nodes b1 and b2 in linked list List_b represent memory blocks m2 and m3, respectively, that is, the block metadata of m2 and the block metadata of m3 are linked in a linked list, indicating that these two allocated memory blocks have the same number of unallocated memory segments (such as max_free).
  • the block metadata of the allocated memory block corresponding to a1 and the block metadata of the allocated memory block corresponding to b1 use different linked lists, that is, the number information (such as max_free) of the unallocated memory segments of the allocated memory block corresponding to a1 is different from the number information (such as max_free) of the unallocated memory segments of the allocated memory block corresponding to b1.
  • Each first linked list corresponds to the number information of an unallocated memory segment, that is, there may be multiple first linked lists.
  • the total metadata includes a linked list array, and each element in the linked list array corresponds to a different quantity range; each of the elements is used to link to one or more of the first linked lists, and the linked first linked lists
  • the number corresponding to the table is within the number range corresponding to the element.
  • the linked list array in the total metadata may be a separate metadata for managing the linked lists under each element in the array.
  • the number range can be divided according to the number of memory segments, and there are multiple number ranges, each of which can be the same or different. For example, there are 2048 memory segments, which can be divided into 16 parts, with the 1st to 128th as a number range, the 129th to 256th as a number range, and so on. It is clear to those skilled in the art that there can be many other division methods in actual applications, and this embodiment does not limit this.
  • n number ranges are divided, and there are n elements in the linked list array.
  • Each element in the linked list array is a linked list.
  • the linked list array partial[nlist] (where nlist indicates n linked list elements) includes 16 elements: partial[0] to partial[15].
  • the first linked list with the number of unallocated memory segments in the range of "1 to 128" is linked to the first element of the array, partial[0], and so on.
  • FIG2E it is a schematic diagram of a linked list array shown in this specification according to an exemplary embodiment.
  • the linked list array shown in FIG2E includes 16 elements, and the number range corresponding to each element is shown in the figure. For example, assuming that there are the following three allocated memory blocks in the memory, according to the maximum number of free memory segments of these three allocated memory blocks, the corresponding linked lists can be:
  • the block metadata header of the memory block can be linked in the linked list List_a shown in FIG2D;
  • each of the elements corresponds to a total linked list and is used to store the head pointer of the corresponding total linked list; the head pointer of each of the first linked lists is stored in the node of the total linked list corresponding to the element corresponding to the first linked list.
  • Each element under the linked list array is a linked list, and the information stored in each element can be the information of the first node of the linked list.
  • Figure 2E shows the information stored in the first element partial[0] of the linked list array, which is the first node information of the bidirectional circular linked list List_k.
  • the bidirectional circular linked list List_k under partial[0] includes: node head_k, which points to node k1, node k1 points to node k2, and k2's next can point to head_k, thus forming a bidirectional circular linked list.
  • head_k, k1 and k2 constitute the linked list List_k; different from the linked list List_k, the other two groups of linked lists List_a and List_b can be linked to the linked list List_k respectively.
  • node k1 can store the first node of the linked list List_a
  • the other node Point k2 can store the first node of linked list List_b; as shown in FIG2F , k1 actually stores the information of the first node of List_a framed by the dotted line in the figure, and k2 actually stores the information of the first node of List_b framed by the dotted line in the figure, thereby realizing the links between linked lists List_k, List_a and linked list List_b.
  • the information in the dotted line frame is not put into k1 and k2.
  • the above example involves two cases where max_free is 100 and 120.
  • the max_free can also be stored in a linked list as needed, for example, it can be stored in the data field head_a of the first node of List_a and the data field head_b of the first node of List_b respectively.
  • the order of the two linked lists List_a and List_b linked by the linked list List_k can be flexibly configured as needed, for example, they can be sorted in ascending order of max_free, or in descending order, or other custom ordering, which is not limited in this embodiment.
  • the corresponding first linked list can be created only when max_free appears; for example, in the range of "1-128" corresponding to the first element partial[0], since there are only two cases of max_free, 100 and 120, only the linked list List_a corresponding to 100 and the linked list List_b corresponding to 120 are created, so as to reduce resource occupation. Accordingly, the linked list List_k includes nodes for linking the two linked lists. It can be understood that in actual applications, a corresponding linked list can be created for each max_free. In the case where a max_free does not correspond to an allocated memory block, it is also optional for the linked list corresponding to the max_free to store a null value, which is not limited in this embodiment.
  • a first linked list indicating that max_free is zero can be created.
  • the fully allocated memory blocks can be managed separately.
  • another linked list can be created, which is referred to as the second linked list in this embodiment. The second linked list is not linked to the aforementioned first linked list in the linked list array.
  • the data domain of the node in the second linked list can be used to store the address of the block metadata of the fully allocated memory blocks, thereby linking the block metadata headers of each fully allocated memory block, so that the block metadata headers of each fully allocated memory block can be mounted in the same linked list.
  • the memory allocation scenario there are no free memory segments in the fully allocated memory blocks and they cannot be used for allocation. Based on this, the separate management of the fully allocated memory blocks is realized, and the processing efficiency of memory allocation is improved.
  • the elements in the linked list array may not be directly linked to the block metadata header, and there is a layer of structure list (i.e., each first linked list) in the middle, which can be allocated on demand according to the maximum number of free segments; for example, if the 1-128 corresponding to partial[0] has only one ms containing 5 consecutive small segments, then a linked list list is allocated so that its corresponding max_free is 5, and then this list is linked to partial[0] upward and to the header downward; and the other maximum free segments If the number has not yet appeared, it will not be allocated to avoid metadata waste.
  • a layer of structure list i.e., each first linked list
  • the above-mentioned linked list data and the second linked list can be organized in a pool overall structure, which can be used as the overall metadata to manage all memory blocks of this embodiment.
  • the overall metadata may also include other information, such as recording the number nr of memory blocks ms it contains, the protection mark lock for protecting the linked list operation, and the cache pool for caching list metadata, etc. In actual applications, it can be flexibly configured as needed, and this embodiment does not limit this.
  • this specification also provides an embodiment of a memory management method. As shown in FIG. 2G and FIG. 2H, it is a flowchart of a memory management method according to an exemplary embodiment of this specification, and the method may include the following steps:
  • step 202 in response to a memory adjustment request, a target memory segment whose allocation state needs to be adjusted is determined according to the total metadata and the block metadata.
  • step 204 based on the memory adjustment type corresponding to the memory adjustment request, the allocation state of the target memory segment is adjusted;
  • step 206 after adjusting the allocation status of the target memory segment, the allocation status information of the block metadata of the target memory block to which the target memory segment belongs is updated, and the quantity information of the unallocated memory segments in the target memory block in the total metadata is updated.
  • the memory management method of this embodiment can be applied to any scenario where memory management is required, including but not limited to the aforementioned reserved memory scenario.
  • the method of this embodiment can manage all or part of the storage space of the internal memory; for example, in the reserved memory scenario, the storage space in the internal memory is reserved for use by the virtual machine.
  • the memory When applied to a reserved memory scenario, the memory may include a first storage space used by an operating system of a computer device and a second storage space used by a virtual machine, wherein the second storage space includes the plurality of memory blocks.
  • the first storage space and the second storage space may use different management units, and the first storage space may be managed by a first memory management module of the operating system.
  • the method of this embodiment is applied to a second memory management module of the operating system that manages the second storage space, that is, the solution of this embodiment may be used to manage the second storage space of the memory.
  • memory management generally involves two operations: memory allocation and memory release. They are described separately below. Taking the application of the method of this embodiment to a memory management module as an example, in actual applications, memory allocation and memory release can be independently running functions.
  • the step of determining the target memory segment 211 in step 211 can be executed, and after adjusting the allocation status of the target memory segment, the step of updating 212 can be executed, which specifically includes the step of updating the block metadata of the target memory block and the step of updating the total metadata.
  • the step of determining the target memory segment 221 in step 221 can be executed, and after adjusting the allocation status of the target memory segment, the step of updating 212 can be executed, which specifically includes the step of updating the block metadata of the target memory block and the step of updating the total metadata.
  • an updating step 222 is performed, which specifically includes a step of updating the block metadata of the target memory block and a step of updating the total metadata.
  • the memory adjustment request includes: a memory allocation request; and determining the target memory segment whose allocation state needs to be adjusted according to the total metadata and the block metadata includes:
  • a target memory block and a target memory segment for allocating memory in the target memory block are determined in the at least one candidate memory block according to the block metadata corresponding to the at least one candidate memory block.
  • the memory allocation request may carry the size of the storage space to be allocated.
  • the size of the storage space may be larger than the size of a memory block or smaller than the size of a memory block. In the case where the size is smaller than the size of a memory block, it can be determined whether there is a suitable free memory segment for allocation through the above-mentioned total metadata and block metadata.
  • the number information of the unallocated memory segments includes a maximum number of free segments, and the maximum number of free segments represents the maximum number of continuous unallocated memory segments in the allocated memory block; and determining whether there is at least one candidate memory block that satisfies the memory allocation request according to the total metadata includes:
  • the storage space size size may be divided by the memory segment size and rounded up to obtain the number of memory segments chunk to be allocated.
  • the total metadata includes the number of unallocated memory segments in each of the allocated memory blocks, it is possible to determine whether there are allocatable memory blocks in the memory, and then query the allocatable memory segments.
  • the number of unallocated memory segments recorded in the total metadata may be the number of free memory segments, and the storage space required for a memory allocation request may be a non-contiguous memory segment.
  • the storage space required for a memory allocation request may be a continuous memory segment.
  • this embodiment is based on the design of the maximum number of free segments.
  • continuous target memory segments can be allocated, thereby reducing the complexity of memory management.
  • the total metadata stores the max_free of each memory block, determines the number range to which the number of memory segments to be allocated, and then queries the information stored in each element in the linked list array. If the element corresponding to the number range greater than or equal to the chunk is not empty and there is a first linked list under the element, it can be determined that there is an allocatable memory block.
  • determining a target memory block and a target memory segment for allocating memory in the target memory block in the at least one candidate memory block according to block metadata corresponding to the at least one candidate memory block includes:
  • the maximum number of free segments of at least one alternative memory block is greater than the number of memory segments to be allocated, determine the difference between the number of consecutive unallocated memory segments in the alternative memory block and the number of memory segments to be allocated based on the block metadata of the at least one alternative memory block, and determine the target memory block and the target memory segment for allocation in the target memory block based on the difference.
  • the total data stores a max_free value that is exactly equal to the memory segment chunk to be allocated
  • one or more memory blocks under the first linked list corresponding to max_free can be used as the target memory block; if there are multiple memory blocks, one of them can be flexibly selected as the target memory block as needed.
  • the memory block to which the block metadata linked to the last node in the first linked list corresponding to max_free belongs can be used as the target memory block, so that the node can be quickly removed from the first linked list, thereby realizing a rapid update of the total metadata.
  • max_free If there is no max_free that is exactly equal to the memory segment chunk to be allocated, you can select other memory blocks corresponding to max_free as needed. For example, if the memory segment chunk to be allocated is 110, and max_free includes 120, 150, 200, etc. in ascending order, you can select the allocated memory block corresponding to 120, so that after the 120 memory segments of the memory block are allocated, the memory segment fragmentation is minimized; of course, selecting other allocated memory blocks corresponding to max_free is also optional, and this embodiment does not limit this.
  • each allocated memory block corresponding to max_free being 120 there are multiple memory blocks corresponding to max_free being 120, assuming that two are taken as examples, including alternative memory block ms2 and alternative memory block ms3. Since the maximum number of continuous free segments of ms2 and ms3 is greater than the memory segment chunk to be allocated, there may be smaller continuous free memory segments under ms2 and ms3, which may just match chunk. In order to reduce the situation of memory segment fragmentation, one of the memory blocks can be selected as needed, and its block metadata can be traversed to determine whether there is a more suitable continuous memory segment.
  • the block metadata of ms2 is read, the allocation status information of each memory segment therein is traversed, the block metadata of ms2 is read, the allocation status information of each memory segment therein is traversed, and the continuous free memory segment required to meet the chunk is finally determined.
  • the block metadata of ms2 it is determined that there is a continuous free memory segment with the number of 115. Since the difference between 115 and chunk is less than the difference between 118 and chunk, ms2 is determined as the target memory segment, and the found continuous free memory segment 115 is determined as the target memory segment.
  • the target memory segment in the determined target memory block is the memory block used for this allocation, and the address of the target memory segment can be returned to the request.
  • the allocation status of each target memory segment is adjusted from the unallocated state to the allocated state.
  • the block metadata of the target memory block is updated, that is, the allocation status information of each memory segment of the target memory block is updated.
  • the number information of the unallocated memory segments of the target memory block in the total metadata is updated. For example, if the target memory block becomes a fully allocated memory block after the allocation status is adjusted, the header of the target memory block is removed from the original first linked list and linked to the aforementioned second linked list representing the fully allocated memory block. If the maximum number of free segments of the target memory block changes, the header of the target memory block is removed from the original first linked list, and the new maximum number of free segments is re-determined; wherein, if the header of the memory block is not linked to the original first linked list after the removal, the original first linked list is deleted, that is, the linked list header metadata is deleted. If the new maximum number of free segments has a corresponding first linked list, it is added to the first linked list; if not, a first linked list is created and linked to the corresponding element in the linked list array.
  • step 3 check whether there is a chunk that satisfies max_free; if so, the address information of the block metadata header of the target memory block can be obtained according to the corresponding linked list, and the address information of the found header is returned, and jump to step 5; otherwise, execute step 3.
  • a new memory block ms is allocated, the block metadata header of the memory block is initialized and the address information of the header is returned; and other related processes such as establishing a virtual address mapping may also be performed, which will not be described in detail in this embodiment.
  • the starting allocation position sidx is set to the starting position max of the largest continuous segment in the block metadata header, and jump directly to step 14.
  • max_free is larger than the required chunk (in this case, there may be multiple memory chunks with the same max_free), traverse the allocation bitmap recorded in the header and find the first free small segment position idx.
  • step 7 The number of consecutive free segments free is increased by 1, and the next small segment is judged to be free. If it is step 11, Otherwise step 8.
  • next segment is still a free memory segment. Determine whether the traversal is completed (in the case of multiple memory blocks with the same max_free, you can traverse the bitmap of one or more memory blocks as needed), set the end mark, and jump to step 8; otherwise, jump back to step 7.
  • the minimum difference min_diff found is the required target memory segment, and the allocation starting position sidx is set to min_idx.
  • the memory adjustment request includes: a memory release request, the memory release
  • the release request carries: the size of the memory to be released and the address of the memory to be released; the determining of the target memory segment whose state needs to be adjusted according to the total metadata and the block metadata includes: determining the target memory block according to the size of the memory block and the address of the memory to be released; determining the target memory segment to be released in the target memory block according to the size of the memory segment and the size of the memory to be released.
  • a small piece of memory needs to be moved out of the pool; according to the memory release request, the position handler to be released is determined, and its size is size; according to the size of the memory segment, it is converted into the number of memory segments to be allocated, chunk;
  • this specification also provides an embodiment of a memory management device and a computer device to which it is applied.
  • the embodiments of the memory management device of this specification can be applied to computer devices, such as servers or terminal devices.
  • the device embodiments can be implemented through software, hardware, or a combination of software and hardware. Taking software implementation as an example, as a device in a logical sense, it is formed by the processor in which it is located reading the corresponding computer program instructions in the non-volatile memory into the memory and running them. From a hardware perspective, as shown in Figure 3, it is a hardware structure diagram of the computer device in which the memory management device of this specification is located.
  • the computer device where the memory management device 331 is located in the embodiment may also include other hardware according to the actual function of the computer device, which will not be described in detail.
  • FIG. 4 is a block diagram of a memory management device according to an exemplary embodiment of the present specification, wherein the memory includes a plurality of memory blocks, and each of the memory blocks is divided into a plurality of memory segments;
  • the memory is used to store total metadata and block metadata corresponding to each allocated memory block;
  • the block metadata includes: allocation status information of each memory segment in the allocated memory block;
  • the total metadata includes: information on the number of unallocated memory segments in each of the allocated memory blocks;
  • the device comprises:
  • a determination module 41 is used to: in response to a memory adjustment request, determine a target memory segment whose allocation state needs to be adjusted according to the total metadata and the block metadata;
  • the adjustment module 42 is used to: adjust the allocation state of the target memory segment based on the memory adjustment type corresponding to the memory adjustment request;
  • the updating module 43 is used to: after adjusting the allocation status of the target memory segment, update the allocation status information of the block metadata of the target memory block to which the target memory segment belongs, and update the quantity information of the unallocated memory segments in the target memory block in the total metadata.
  • the memory adjustment request includes: a memory allocation request
  • the determining module is further used for:
  • a target memory block and a target memory segment for allocating memory in the target memory block are determined in the at least one candidate memory block according to the block metadata corresponding to the at least one candidate memory block.
  • the number information of the unallocated memory segments includes a maximum number of free segments, where the maximum number of free segments represents the maximum number of continuous unallocated memory segments in the allocated memory block;
  • the determining module is further used for:
  • the determining module is further configured to:
  • the maximum number of free segments of at least one alternative memory block is greater than the number of memory segments to be allocated, determine the difference between the number of consecutive unallocated memory segments in the alternative memory block and the number of memory segments to be allocated based on the block metadata of the at least one alternative memory block, and determine the target memory block and the target memory segment for allocation in the target memory block based on the difference.
  • the total metadata also includes the address of each of the block metadata; the determination module is also used to read the block metadata of at least one alternative memory block according to the address of the block metadata of the at least one alternative memory block after determining that there is at least one alternative memory block that satisfies the memory allocation request.
  • the total metadata includes one or more first linked lists, and different first linked lists correspond to different quantity information
  • the first linked list includes at least one node, each node is used to store the address of block metadata of an allocated memory block, so as to access the block metadata of the alternative memory block after the alternative memory block is determined; wherein the addresses of block metadata of allocated memory blocks with the same amount of information are stored in different nodes of the first linked list.
  • the total metadata includes a linked list array, each element in the linked list array corresponds to a different quantity range;
  • Each of the elements is used to link to one or more of the first linked lists, and the quantity information corresponding to the linked first linked lists is within the quantity range corresponding to the element.
  • each of the elements corresponds to a total linked list and is used to store a head pointer of the corresponding total linked list
  • the head pointer of each of the first linked lists is stored in the node of the total linked list corresponding to the element corresponding to the first linked list.
  • the memory adjustment request includes: a memory release request, the memory release request carries: the size of the memory to be released and the address of the memory to be released;
  • the determining module is further used for:
  • a target memory segment to be released in the target memory block is determined.
  • the memory includes a first storage space for use by an operating system of the computer device and a second storage space for use by the virtual machine, the second storage space including the plurality of memory blocks;
  • the first storage space is managed by a first memory management module of the operating system, and the device is applied to a second memory management module in the operating system for managing the second storage space;
  • the block metadata of the allocated memory block is stored in the memory segment of the memory block, and the total metadata is stored in the first storage space by calling the first memory management module.
  • an embodiment of the present specification also provides a computer program product, including a computer program, which implements the steps of the aforementioned memory management method embodiment when executed by a processor.
  • an embodiment of the present specification also provides a computer device, including a memory, a processor, and a computer program stored in the memory and executable on the processor, wherein the processor implements the steps of the memory management method embodiment when executing the program.
  • an embodiment of the present specification further provides a computer-readable storage medium on which a computer program is stored, and when the computer program is executed by a processor, the steps of the memory management method embodiment are implemented.
  • the relevant parts can refer to the partial description of the method embodiment.
  • the device embodiment described above is only schematic, wherein the modules described as separate components may or may not be physically separated, and the components displayed as modules may or may not be physical modules, that is, they may be located in one place, or they may be distributed on multiple network modules. Some or all of the modules may be selected according to actual needs to achieve the purpose of the scheme of this specification. Ordinary technicians in this field can understand and implement it without paying creative work.
  • the electronic device is a device that can automatically perform numerical calculations and/or information processing according to pre-set or stored instructions
  • the hardware of the electronic device includes but is not limited to a microprocessor, an application specific integrated circuit (ASIC), a field-programmable gate array (FPGA), a digital processor (DSP), an embedded device, etc.
  • the electronic device can be any electronic product that can perform human-computer interaction with a user, such as a personal computer, a tablet computer, a smart phone, a personal digital assistant (PDA), a game console, an interactive network television (Internet Protocol Television, IPTV), a smart wearable device, etc.
  • a personal computer a tablet computer
  • a smart phone a personal digital assistant (PDA)
  • PDA personal digital assistant
  • IPTV interactive network television
  • smart wearable device etc.
  • the electronic device may also include a network device and/or a user device.
  • the network device includes, but is not limited to, a single network server, a server group consisting of multiple network servers, or a cloud consisting of a large number of hosts or network servers based on cloud computing.
  • the network where the electronic device is located includes but is not limited to the Internet, a wide area network, a metropolitan area network, a local area network, a virtual private network (VPN), etc.
  • VPN virtual private network
  • step division of the above methods is only for clear description. When implemented, they can be combined into one step or some steps can be split and decomposed into multiple steps. As long as they include the same logical relationship, they are all within the protection scope of this patent; adding insignificant modifications to the algorithm or process or introducing insignificant designs without changing the core design of the algorithm and process are all within the protection scope of this application.

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 (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

提供一种内存管理方法、装置、计算机设备及存储介质,内存包括多个内存块,每个内存块划分为多个内存段;内存用于存储总元数据,以及每个已分配内存块对应的块元数据;块元数据包括:已分配内存块中每个内存段的分配状态信息;总元数据包括:每个已分配内存块中未分配内存段的数量信息;方法包括:响应于内存调整请求,根据总元数据和块元数据确定需调整状态的目标内存段;基于内存调整请求对应的内存调整类型,对目标内存段的分配状态进行调整;在调整目标内存段的分配状态后,更新目标内存段所属目标内存块的块元数据的分配状态信息,以及更新总元数据中目标内存块中未分配内存段的数量信息。

Description

内存管理方法、装置、计算机设备及存储介质
本申请要求于2022年10月12日提交中国专利局、申请号为202211248341.1、申请名称为“内存管理方法、装置、计算机设备及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本说明书涉及计算机技术领域,尤其涉及内存管理方法、装置、计算机设备及存储介质。
背景技术
传统的内存管理方案中,对内存划分为多个内存页(page),对每个page需要创建元数据(例如struct page)以对各个page进行管理。由于内存页通常较小(例如4k字节),例如每个4k的内存页,每个内存页的元数据就需要64字节,大内存场景下,存储元数据就要占用大量的内存空间,因此会造成大量元数据对内存的占用。
另一些方案中,为了避免大量元数据对内存的占用,则采用较大的粒度作为管理单位来管理内存,例如将内存划分为2m等大小的内存块进行管理。然而较大的管理粒度下,每个内存块可能未完全存储数据,因此会造成内存块内部存储空间的浪费。另外,针对需要小块内存的场景,比如保存压缩后内存数据的场景,也具有对内存块进行更小粒度的管理需求。基于此,在大的管理粒度下,如何避免内存浪费是亟待解决的技术问题。
发明内容
为克服相关技术中存在的问题,本说明书实施例提供了内存管理方法、装置及计算机设备。
根据本说明书实施例的第一方面,提供一种内存管理方法,所述内存包括多个内存块,每个所述内存块划分为多个内存段;所述内存用于存储总元数据,以及每个已分配内存块对应的块元数据;
所述块元数据包括:所述已分配内存块中每个内存段的分配状态信息;
所述总元数据包括:每个所述已分配内存块中未分配内存段的数量信息;
所述方法包括:
响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整状态的目标内存段;
基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
根据本说明书实施例的第二方面,提供一种内存管理装置,所述内存包括多个内存块,每个所述内存块划分为多个内存段;
所述内存用于存储总元数据,以及与每个已分配内存块对应的块元数据;
所述块元数据包括:所述已分配内存块中每个内存段的分配状态信息;
所述总元数据包括:每个所述已分配内存块中未分配内存段的数量信息;
所述装置包括:
确定模块,用于:响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整分配状态的目标内存段;
调整模块,用于:基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
更新模块,用于:在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现前述第一方面所述方法实施例的步骤。根据本说明书实施例的第三方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述第一方面所述方法实施例的步骤。
根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述第一方面所述方法实施例的步骤。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,内存包括多个内存块,对每个所述内存块划分了多个内存段; 因此,可以将内存块设计为较大的粒度,从而减少内存块的块元数据的占用;另外,还可以对内存块中的内存段进行具体管理,本实施例设计了两层元数据,包括总元数据和每个已分配的内存块的块元数据,块元数据包括:已分配内存块中每个内存段的分配状态信息,以用于确定该已分配内存块中可用于分配的内存段;总元数据包括:每个所述已分配内存块中未分配内存段的数量信息,以用于确定所述内存中可分配的内存块。在有内存调整请求时,可以确定需调整分配状态的目标内存段;在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块的所述数量信息,从而可以实现对内存段的分配,减少大粒度的内存块的剩余空间浪费,实现对内存块更小粒度的管理。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1A和图1B是本说明书根据一示例性实施例示出的内存架构的示意图。
图2A是本说明书根据一示例性实施例示出的内存块划分内存段的示意图。
图2B是本说明书根据一示例性实施例示出的单链表的示意图。
图2C是本说明书根据一示例性实施例示出的双链表的示意图。
图2D是本说明书根据一示例性实施例示出的两个双链表的示意图。
图2E是本说明书根据一示例性实施例示出的链表数组的示意图。
图2F是本说明书根据一示例性实施例示出的总元数据的示意图。
图2G至图2J分别是本说明书根据一示例性实施例示出的内存管理示意图。
图3是本说明书根据一示例性实施例示出的一种内存管理装置所在计算机设备的框图。
图4是本说明书根据一示例性实施例示出的一种内存管理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中 所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在内存管理领域,内存的元数据,是指为了便于管理内存,对内存的每个管理单位(可称为内存页或内存块等)记录其状态信息的数据。基于具体的管理需要,元数据中可以记录多种类型的状态信息。可以理解,计算机设备运行过程中,元数据存储于内存中。如背景技术所言,内存的管理粒度较小的情况下会造成大量元数据对内存的占用,例如,如虚拟机等场景下会造成内存管理的开销较高。如图1A所述,是本说明书根据一示例性实施例示出的在宿主机(Host)上运行虚拟机的示意图。
本实施例的宿主机是指用于安装虚拟机软件的实体计算机,宿主机是相对于虚拟机的概念。
本实施例的虚拟机(virtual machine):指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟机中能够实现实体计算机完成的工作。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的操作系统,可以像使用实体机一样对虚拟机进行操作。通用的虚拟机软件包括但不限于:VMware(VMWare ACE)、Virtual Box、Virtual PC或KVM(Kernel-basedVirtual Machine)等,它们可以在实体机系统中虚拟出多个计算机。
结合图1A所示,在一台宿主机HOST中,可以运行多台虚拟机VM1,VM2,…VMn,其所使用的内存来自Host的内存Memory,同时Host的内核kernel以及Host上的其他应用程序Application(如图中应用1至应用3)也可能会使用上述的内存Memory。这就会使得在运行的过程中,内核以及应用程序使用的内存会和虚拟机所使用内存产生竞争,从而导致宿主机的可售卖内存不确定,尤其在内存严重紧张的情况下,可能会导致虚拟机内存 被交换出去甚至虚拟机无法使用,进而影响了系统性能和稳定性。
基于此,可以采用预留内存的内存分配架构,如图1B所示,是本说明书根据一示例性示出的预留内存场景的示意图,在该架构中,宿主机的内存包括两个存储空间,如图1B中采用不同填充方式示出了内存的两个存储空间,包括供内核使用的非预留存储空间a(图中采用斜线填充),以及供虚拟机使用的预留存储空间b(图中采用竖线及灰度填充)。也即是,非预留存储空间a用于供图中的内核使用,运行于操作系统上的应用(如图中示例的应用1至应用3)可使用该非预留存储空间a。而预留存储空间b则可供虚拟机(VM,Virtual Machine)使用,如图中示出的VM1至VMn共n个虚拟机。两个存储空间可以采用不同的管理粒度,即对内存的划分方式可以是不同的。图1B中为了示例方便,两个存储空间在图中是以连续的方式进行示意的。可以理解,实际应用中,两个存储空间可以是非连续的。
预留内存空间占据内存的大部分,且对于宿主机内核不可用,可以在操作系统的内核中插入一预留内存模块专门进行管理。为了方便管理这一系列的内存同时避免大量元数据对内存的占用,以及考虑到为虚拟机分配内存时往往最少也是数百MB(MByte,兆字节)起,因此预留内存模块通常以较大的粒度作为管理单位来管理预留内存,例如将预留内存划分为2MB等大小的内存块(memory section,ms)进行管理;在一些场景中,大内存也普遍被使用,其他粒度,如1GB(GigaByte,吉字节)等都是可选的。
然而较大的管理粒度下,每个内存块可能未完全存储数据,因此会造成内存块内部存储空间的浪费。另外,在内存压缩场景下,压缩后的数据也小于内存块的大小。基于此,在大的管理粒度下,如何避免内存浪费,对内存块内部进行高效管理,是亟待解决的技术问题。
基于此,本说明书实施例提供了一种内存管理方法,内存包括多个内存块,对每个所述内存块划分了多个内存段;因此,可以将内存块设计为较大的粒度,从而减少内存块的块元数据的占用;另外,还可以对内存块中的内存段进行具体管理,本实施例设计了两层元数据,在每个已分配的内存块的块元数据的基础上,还包括了总元数据;块元数据包括:已分配内存块中每个内存段的分配状态信息,以用于确定该已分配内存块中可用于分配的内存段;总元数据包括:每个所述已分配内存块中未分配内存段的数量信息,以用于确定所述内存中可分配的内存块。在有内存调整请求时,可以确定需调整分配状态的目标内存段;在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块的所述数量信息从而,可以 实现对内存段的分配,减少大粒度的内存块的剩余空间浪费。接下来对本实施例进行详细说明。
本实施例的内存包括多个内存块,每个所述内存块划分为多个内存段。其中,内存块的大小可以根据需要灵活配置,例如前述的2MB或1GB等等,本实施例对此不进行限定。各个内存块之间可以是连续的,也可以是非连续的。
如图2A所示,是本说明书根据一实施例示出的一种对每个内存块划分多个内存段,内存段的大小根据需要灵活配置,本实施例对此不进行限定。示例性的,以2MB的内存块为例,划分为多个小段,比如以1k为粒度,可以分为2048个内存段。
基于上述对内存块划分出多个内存段的设计,需要设计管理各个内存段的数据结构,本实施例的数据结构包括块元数据和总元数据。
本实施例以内存块为粒度,建立各个已分配内存块的元数据,称之为块元数据(header)。块元数据中包括所述已分配内存块中每个内存段的分配状态信息。实际应用中,可以根据需要灵活实现块元数据的数据结构,分配状态信息的实现也可以有多种方式,本实施例对此不进行限定。可以理解,对于已被分配、即已有存储数据的内存块,才需要建立块元数据。
示例性的,可以对内存块的各内存段按设定顺序进行编号(例如按地址由高位至低位的顺序或由低位至高位的顺序等等),并对每个编号配置表示是否已分配的分配状态标记。或者,可以采用位图的方式表示该内存块中每个内存段的分配状态。位图(bitmap)是一种数据结构,位图包括有至少一个元素,各元素按顺序排列,每个元素采用“0”或“1”表示其对应的元素不存在或者存在。本实施例中可以将各内存段按设定顺序排序,并采用0和1两个比特位表示内存段是否分配的两种状态,从而通过一个位图即可表示一个内存块内各个内存段的分配状态信息,数据占用较低也便于后续处理时快速分析内存块内各段的占用情况。当然,本领域技术人员清楚实际应用中可以采用多种方式实现分配状态信息,本实施例对此不进行限定。
示例性的,块元数据的存储位置可以有多种方式,例如,块元数据所占的内存很小,可以存储在该内存块的内存段中;根据块元数据的大小以及内存段的大小,块元数据可以占用一个或多个内存段;存储块元数据的内存段可以根据需要配置,例如从内存块的第一个内存段开始存储块元数据,或者是从内存块的最后一个内存段开始存储块元数据等。在其他例子中,块元数据也可以统一存储在内存的其他位置,本实施例对此不进行限定。
在预留内存场景下,内存可以包括供计算机设备的操作系统使用的第一存储空间(非预留内存)以及用于供虚拟机使用的第二存储空间(预留内存),所述第二存储空间包括所述多个内存块。第一存储空间和第二存储空间可以采用不同的管理粒度,第一存储空间可以由所述操作系统的第一内存管理模块进行管理,本实施例方法可以应用于所述操作系统中用于管理所述第二存储空间的第二内存管理模块中。若第二内存管理模块使用第一存储空间时,需要向第一内存管理模块发起内存分配。若块元数据频繁变动,需要第二内存管理模块频繁与第一内存管理模块交互,基于此,将块元数据存储在内存块的内存段中,由第二内存管理模块直接进行管理,可以提升处理效率。并且,预留内存的内存块是较大的粒度,往往未完全被使用,而块元数据所占用的空间也非常有限,不会影响内存块的使用。也不需要专门建立块元数据和内存块之间的对应关系,当确定内存块的地址,就可以直接确定该内存块的块元数据。
作为一个示例,可以基于块元数据的大小确定内存段的大小,另内存段的大小大于或等于块元数据的大小,使得块元数据存储在一个内存段中,例如第一个内存段,从而可以方便管理,提升管理效率。
示例性的,块元数据中根据需要还可以包括其他信息,例如该内存块ms的物理地址paddr(physics address)、空闲内存段个数free、最大空闲段个数(即已分配内存块中最大的连续未分配内存段的个数)max_free、以及最大的连续空闲小段的起始位置的序号max等,以方便后续的内存段的分配或释放的处理。
本实施例还建立有总元数据,总元数据包括每个所述已分配内存块中未分配内存段的数量信息,以用于确定所述内存中可分配的内存块。
每个所述已分配内存块中未分配内存段的数量信息可以包括与已分配内存块中各个空闲的内存段相关的信息,例如空闲内存段的数量和/或最大空闲段个数等,所述最大空闲段个数表征内存块中最大的连续空闲内存段的个数。例如,某个内存块ms中空闲的内存段数量为200个,其中包括两个连续空闲内存段,其中一个连续空闲内存段的数量为50个,另一个连续空闲内存段的数量为150个,最大空闲段个数即150。已分配的内存块存在两种类型:如上述例子中存在空闲内存段的内存块;以及完全占用的内存块,即内存块中未有空闲内存段,空闲内存段个数为零。通过上述信息在获取到内存分配请求时,可以利用总元数据快速地确定已分配的内存块中是否有满足分配请求的内存块。实际应用中,总元数据的数据结构的实现方式,可以根据需要灵活配置,本实施例对此不进行限定。
示例性的,总元数据的存储位置也可以有多种方式;例如,在预留内存场景下,总元 数据可以存储在内存的非预留存储空间中,也可以在内存的预留存储空间中。示例性的,由于总元数据的大小,以及预留内存场景下内存希望尽量预留给虚拟机使用的需求,总元数据可以存储在非预留存储空间中。
在一些例子中,所述总元数据可以包括每个所述块元数据的地址,在确定存在满足所述内存分配请求的至少一个备选内存块后,所述方法还包括:根据所述至少一个备选内存块的块元数据的地址,读取所述至少一个备选内存块的块元数据,因此本实施例在确定出备选内存块后可以快速地读取到所述备选内存块的块元数据。
为了方便管理以及实现快速分配,由于已分配的内存块存在两种类型,在一些例子中,总元数据中完全分配的内存块的信息以及未完全分配的内存块的信息还可以分开进行管理和存储。
实际应用中,用于记录每个所述已分配内存块中未分配内存段的数量信息的总元数据,可以有多种实现方式。在一些例子中,可以采用链表的方式存储总元数据中每个所述已分配内存块中未分配内存段的数量信息。
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储地址的指针域。
链表包括单链表和双链表;如图2B所示,是本说明书根据一实施例示出的一种单链表的示意图,图中该链表的首个结点包括头指针head,其数据域为空,头指针head指向下一个结点的数据域。最后一个结点的后指针next的指向为结束null。结束表示该链表为非循环链表,在其他例子中,最后一个结点的后指针next还可以指向头指针,从而构成循环链表。
双链表中每个结点的指针域包括前指针prev(用于指向上一个结点的数据域)和后指针next,因此相对于单链表可以快速的找到当前结点的前一个结点。同理,根据最后一个结点的后指针next的指向,双链表中还可以包括非循环和循环双链表。如图2C所示,是本说明书根据一实施例示出的一种双链表的示意图,图中以循环双链表为例,首个结点的指针域(即头指针)包括前指针和后指针,数据域head根据需要可以为空或者是存储数据;其他结点同理,指针域均包括前指针和后指针,图中数据域依次为a1、a2和a3。图中为例示例方便,每个结点示出的形式依次是前指针、数据域和后指针,实际应用中根据需要可以采用其他方式实现,例如依次为前指针、后指针和数据域,本实施例对此不进行限定。 实际应用中根据需要可以选择双链表的类型,本实施例对此不进行限定。
在一些例子中,所述总元数据包括一个或多个第一链表,不同所述第一链表对应不同的所述数量信息;实际应用中,根据需要,第一链表可以是单链表也可以是双链表,本实施例不进行限定。
所述第一链表包括至少一个结点,所述结点用于存储一个已分配内存块的块元数据的地址,以通过总元数据可以快速地访问内存块的块元数据。其中,相同数量信息的已分配内存块的块元数据的地址存储在所述第一链表的不同结点中。
如图2D示出了两个双链表:链表List_a和链表List_b;本实施例的链表中包括头结点,实际应用中,根据需要设置有头结点也是可选的,本实施例对此不进行限定。
链表List_a是一个双向循环链表,首个结点的指针域(头指针)包括前指针和后指针,还包括数据head_a;后指针指向下一个结点a1,前指针指向最后一个结点a1,后指针指向下一个结点a1;同理,结点a1的前指针指向head_a,后指针指向head_a。
链表List_b是一个双向循环链表,首个结点的指针域(头指针)包括前指针和后指针,还包括数据head_b,后指针指向下一个结点b1,前指针指向最后一个结点b2;另外两个结点的指向同理,可参考附图所示。
本实施例,结点可以存储已分配内存块的块元数据header的地址。如图中示出的a1、b1和b2分别存储对应的已分配内存块的块元数据header的地址。块元数据存储在内存段ms的内存段中,如第一个内存段,通过结点可以访问到该内存块的header。
链表List_a中的结点a1,用于连接至内存块m1。链表List_b中的结点b1和b2,分别表示内存块m2和m3,即m2的块元数据和m3的块元数据链接在一个链表中,表示这两个已分配内存块具有相同的未分配内存段的数量信息(例如max_free)。
而a1对应的已分配内存块的块元数据,和b1对应的已分配内存块的块元数据采用不同的链表,即表示a1对应的已分配内存块的未分配内存段的数量信息(例如max_free),不同于b1对应的已分配内存块的未分配内存段的数量信息(例如max_free)。
实际应用中存在内存段的数量较多的情况,则各个已分配内存块的未分配内存段的数量信息也存在很多可能性的情况。例如,一个内存块有2048个内存段,当内存块很多个,则已分配内存块中未分配内存段的数量有2048种可能性,每个第一链表对应一个未分配内存段的数量信息,即可能存在多个第一链表。为了便于在内存分配时通过总数据查询可分配的内存块,本实施例中,所述总元数据包括链表数组,所述链表数组中每个元素对应不同的数量范围;每个所述元素用于链接至一个或多个所述第一链表,且所链接的第一链 表对应的所述数量处于该元素所对应的数量范围中。示例性的,总元数据中的链表数组可以是单独的元数据,用于管理数组中每个元素下链接的链表。
数量范围可以根据内存段的个数进行划分,数量范围有多个,每个数量范围可以相同也可以不同。例如,内存段有2048个,可以划分为16份,第1至128作为一个数量范围,129至256作为一个数量范围,以此类推。本领域技术人员清楚,实际应用中可以有其他多种划分方式,本实施例对此不进行限定。
基于此,划分出n种数量范围,则链表数组中的元素有n个。链表数组中每个元素即链表。作为示例,链表数组partial[nlist](其中,nlisit表示有n个链表元素)中包括16个元素:partial[0]至partial[15]。未分配内存段的数量在“1至128”范围内的第一链表,即链接到数组的第一个元素partial[0]下面,以此类推。
如图2E所示,是本说明书根据一示例性实施例示出的一种链表数组的示意图,图2E中示出的链表数组包括16个元素,各个元素对应的数量范围如图所示。示例性,假设内存中存在有如下三个已分配内存块,根据这三个已分配内存块的最大空闲段内存段个数,对应的链表可以是:
假设内存块ms1的最大空闲内存段个数是100;则该内存块的块元数据header可以链接在图2D所示的链表List_a中;
假设内存块ms2和内存块ms3的最大空闲内存段个数max_free都是120;则这两个内存块的块元数据header可以链接在图2D所示的链表List_b中;其中b1表示内存块ms2的header,b2表示内存块ms3的header。
由于这三个内存块的最大空闲内存段个数都处于“1-128”的范围,即可以链接到数组的第一个元素partial[0]。
实际应用中可以根据需要采用多种链接方式,例如,每个所述元素对应一个总链表,并且用于存储对应的总链表的头指针;每个所述第一链表的头指针,存储在该第一链表对应的元素所对应的总链表的结点中。
链表数组下每个元素即一个链表,每个元素存储信息可以是链表的首个节点的信息。例如,图2E示出链表数组总,首个元素partial[0]存储的信息即双向循环链表List_k的首个结点信息。具体的,partial[0]下的双向循环链表List_k包括:结点head_k,其指向结点k1,结点k1指向结点k2,k2的next可以指向head_k,从而构成双向循环链表。也即是,head_k、k1和k2组成了链表List_k;与链表List_k不同,另外两组链表List_a和List_b可以分别与链表List_k链接,例如,结点k1可以存储链表List_a的首个结点,另一个结 点k2可以存储链表List_b的首个结点;如图2F所示,k1实际上存储的是图中虚线框框出的List_a的首个结点的信息,k2实际上存储的是图中虚线框框出的List_b的首个结点的信息,从而实现链表List_k、List_a和链表List_b之间的链接。图中为了方便理解,未将虚线框内的信息放入至k1和k2中。
示例性的,上述例子中涉及了max_free为100和120的两种情况,该max_free也可以根据需要存储于链表中,例如,可以分别存储在List_a的首个结点的数据域head_a和List_b的首个结点的数据域head_b中。
示例性的,链表List_k所链接的两个链表List_a和List_b的顺序,可以根据需要灵活配置,例如可以以max_free的升序排序,也可以是降序排序,或者其他自定义排序,本实施例对此不进行限定。
由于最大内存段个数max_free存在多种可能性,本实施例中可以在max_free出现的情况下才创建对应的第一链表;例如,在第一个元素partial[0]对应的“1-128”的范围中,由于只有max_free只有100和120两种情况,因此只创建100对应的链表List_a,以及120对应的链表List_b,从而可以减少资源占用,相应的,链表List_k中包括用于链接这两个链表的结点。可以理解,实际应用中也可以对每一种max_free均创建对应链表,对于某一个max_free未有对应已分配内存块的情况,该max_free对应的链表存储空值也是可选的,本实施例对此不进行限定。
实际应用中,存在完全分配的内存块,即已分配内存块的所有内存段都被分配,已分配内存块的空闲内存段为零,此种情况下,如前所述,与前述例子相同,可以创建一表示max_free为零的第一链表。在另一些例子中,可以对完全分配的内存块进行单独的管理,例如,可以创建另一链表,本实施例称之为第二链表,该第二链表未与前述的第一链表链接在链表数组中,该第二链表中的结点的数据域可以用于存储完全分配的内存块的块元数据的地址,从而链接各个完全分配的内存块的块元数据header,使得各个完全分配的内存块的块元数据header可以挂载在同一链表中。在内存分配场景下,完全分配的内存块中未有空闲内存段,无法用于分配,基于此实现对完全分配的内存块的单独管理,提升内存分配的处理效率。
由上述实施例可见,链表数组中的元素可以不直接链接至块元数据header,中间还有一层结构体list(即各个第一链表),其可以根据最大空闲段个数按需分配;比如partial[0]所对应的1-128只有一个含5个连续小段的ms,那就分配一个链表list,使其对应max_free为5,然后这个list对上链接到partial[0]中,对下链接到header中;而其他的最大空闲段 个数还没有出现,就先不分配,避免元数据浪费。
上述的链表数据和第二链链表可以组织在一个pool总结构中,其作为总元数据,可以用来管理本实施例的所有内存块,可选的,总元数据还可以包括其他信息,例如记录其包含的内存块ms的数量nr,以及保护链表操作的保护标记lock,以及缓存list元数据的缓存池等等,实际应用中可以根据需要灵活配置,本实施例对此不进行限定。
基于上述的元数据的设计,本说明书还提供了内存管理方法的实施例。如图2G和图2H所示,是本说明书根据一示例性实施例示出的一种内存管理方法的流程图,该方法可以包括如下步骤:
在步骤202中,响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整分配状态的目标内存段。
在步骤204中,基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
在步骤206中,在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
本实施例的内存管理方法可以应用于任意需要对内存进行管理的场景中,包括但不限于前述的预留内存场景。在一些例子中,本实施例方法所管理的可以是内存储器的全部存储空间,也可以是部分存储空间;例如预留内存场景中,内存储器中被预留专门给虚拟机使用的存储空间。
应用于预留内存场景时,内存可以包括供计算机设备的操作系统使用的第一存储空间以及用于供虚拟机使用的第二存储空间,所述第二存储空间包括所述多个内存块。第一存储空间和第二存储空间可以采用不同的管理单位,第一存储空间可以由所述操作系统的第一内存管理模块进行管理,本实施例方法应用于所述操作系统的管理所述第二存储空间的第二内存管理模块中,即本实施例的方案可以用于对内存的第二存储空间进行管理。
如图2I和图2J所示,内存的管理通常涉及两种操作:内存分配和内存释放。接下来分别进行说明。以本实施例方法应用于内存管理模块为例,实际应用中,内存分配和内存释放可以是独立运行的功能。内存分配请求21输入至内存管理模块,可以执行步骤211的确定目标内存段211的步骤,以及在对目标内存段调整分配状态后,执行更新的步骤212,具体包括更新目标内存块的块元数据的步骤和更新总元数据的步骤。同理,内存释放请求22输入至内存管理模块,可以执行步骤221的确定目标内存段221的步骤,以及在对目标 内存段调整分配状态后,执行更新的步骤222,具体包括更新目标内存块的块元数据的步骤和更新总元数据的步骤。
在一些例子中,所述内存调整请求包括:内存分配请求;所述根据所述总元数据和所述块元数据确定需调整分配状态的目标内存段,包括:
根据所述总元数据,确定是否存在满足所述内存分配请求的至少一个备选内存块;
若是,根据至少一个所述备选内存块对应的块元数据,在所述至少一个备选内存块中确定目标内存块以及所述目标内存块中用于分配内存的目标内存段。
本实施例中,内存分配请求可以携带需分配的存储空间大小。实际应用中,存储空间的大小可能大于一个内存块的大小、可能小于一个内存块的大小。在小于一个内存块的大小的情况下,可以通过上述总元数据和块元数据确定是否有合适的空闲内存段进行分配。
在一些例子中,所述未分配内存段的数量信息包括最大空闲段个数,所述最大空闲段个数表征所述已分配内存块中最大的连续未分配内存段的个数;所述根据所述总元数据,确定是否存在满足所述内存分配请求的至少一个备选内存块,包括:
确定满足所述内存分配请求所需的需分配内存段个数;
根据所述总元数据确定是否存在最大空闲段个数大于或等于所述需分配内存段个数的至少一个备选内存块。
示例性的,可以将存储空间大小size除以内存段大小并向上取整,得到需分配的内存段数量chunk。
由于总元数据包括每个所述已分配内存块中未分配内存段的数量信息,可以确定内存中是否存在可分配的内存块,进而查询可分配的内存段。在一些例子中,总元数据中记录的未分配内存段的数量信息可以是空闲内存段的数量,一次内存分配请求所需要的存储空间,可以是非连续的内存段。
在另一些例子中,一次内存分配请求所需要的存储空间可以是连续的内存段。例如,本实施例基于最大空闲段个数的设计,在响应每次内存分配请求时,可以分配连续的目标内存段,从而减少内存管理的复杂度。总元数据存储各个内存块的max_free,确定需分配的内存段数量chunk所属的数量范围,进而查询链表数组中各元素存储的信息,大于或等于chunk所属的数量范围对应的元素非空,元素下链接有第一链表,即可确定存在可分配的内存块。
在一些例子中,所述根据至少一个所述备选内存块对应的块元数据,在所述至少一个备选内存块中确定目标内存块以及所述目标内存块中用于分配内存的目标内存段,包括:
若存在最大空闲段个数等于所述需分配内存段个数的备选内存块,根据所述备选内存块的块元数据,将所述备选内存块及所述备选内存块中的最大空闲段确定为目标内存块及所述目标内存块中用于分配的目标内存段;
若所述至少一个备选内存块的最大空闲段个数均大于所述需分配内存段个数,根据所述至少一个备选内存块的块元数据,确定所述备选内存块中连续的未分配内存段的个数与所述需分配内存段个数的差异,根据所述差异确定目标内存块及所述目标内存块中用于分配的目标内存段。
本实施例中,若总数据中存储有刚好等于需分配内存段chunk的max_free,则max_free对应的第一链表链接下的一个或多个内存块均可以作为目标内存块;在有多个的情况下,可以根据需要灵活选取其中一个作为目标内存块,例如,为了便于元数据的更新,可以将max_free对应的第一链表中最后一个结点链接的块元数据所属的内存块作为目标内存块,从而可以快速地将该结点从第一链表中移除,实现对总元数据的快速更新。
若未有刚好等于需分配内存段chunk的max_free,则可以根据需要选择其他max_free对应的内存块。例如,需分配内存段chunk为110,max_free中按升序包括120、150、200等,可以选择120对应的已分配内存块,从而使得该内存块的120个内存段被分配后,尽量减少内存段碎片的情况;当然,选择其他max_free对应的已分配内存块也是可选的,本实施例对此不进行限定。
以选择max_free为120对应的各个已分配内存块作为备选内存块为例,max_free为120对应的内存块有多个,假设以2个为例,包括备选内存块ms2和备选内存块ms3。由于ms2和ms3的最大连续空闲段个数大于需分配内存段chunk,则ms2和ms3下还可能存在有更小的连续空闲内存段,有可能刚好匹配chunk。为了减少内存段碎片的情况,可以根据需要任选其中一个内存块,遍历其块元数据,从中确定是否有更合适的连续内存段。当然,在其他例子中,选取多个内存块或者全部内存块,对各个内存块的块元数据都进行遍历也是可选的,但此种方式在系统繁忙的时候会产生开销,实际应用中可以根据需要灵活配置,本实施例对此不进行限定。示例性的,以选取ms2为例,读取ms2的块元数据,遍历其中每个内存段的分配状态信息,读取ms2的块元数据,遍历其中每个内存段的分配状态信息,最终确定满足chunk所需的连续空闲内存段。例如,通过ms2的块元数据确定其中还有一个连续空闲内存段的个数为115,由于115与chunk的差异,小于118与chunk的差异,因此,确定ms2为目标内存段,并确定寻找出的115的连续空闲内存段为目标内存段。
基于此,确定出的目标内存块中目标内存段即用于本次分配的内存块,可以将目标内存段的地址返回该请求。并且,对各个目标内存段调整分配状态,从未分配状态调整为分配状态。之后,更新目标内存块的块元数据,即更新该目标内存块的各个内存段的分配状态信息。
并且,更新总元数据中目标内存块的未分配内存段的数量信息。例如,若调整分配状态后,目标内存块变成完全分配的内存块,目标内存块的header从原有第一链表中移除,并链接至前述表示完全分配内存块的第二链表中。若目标内存块的最大空闲段个数发生变化,目标内存块的header从原有第一链表中移除,并重新确定新的最大空闲段个数;其中,若移除后原有第一链表下未链接有内存块的header,则删除该原有第一链表,即删除链表头元数据。若新的最大空闲段个数有对应的第一链表,即加入至该第一链表中,若未有,则创建第一链表,并链接至链表数组中所对应的元素下。
接下来再通过一内存分配的实施例:
1、接收内存分配请求,确定需要分配的存储空间大小size;需要分配的内存块/内存块的信息需要记录于总元数据pool中;本实施例根据size以及内存段的粒度,转换为为需要的内存段个数chunk。
2、在pool的链表数组partial[]中,查找是否有满足chunk的max_free;若有,可以根据对应的链表得到目标内存块的块元数据header的地址信息,返回找到的header的地址信息,跳转至步骤5;否则,执行步骤3。
3、由于pool现存的所有内存块ms的空闲内存块均不能满足分配要求,需要重新分配一个空闲的内存块ms。如果内存空间不足,则分配失败直接退出,否则执行步骤4。
4、新分配一个内存块ms,初始化该内存块的块元数据header并返回该header的地址信息;并且,还可以执行建立虚拟地址映射等其他相关处理,本实施例对此不进行赘述。
5、根据返回的header的地址信息,可以确定已经找到能满足分配要求的块元数据header;对于max_free与需要的chunk相等的情况下,将起始分配位置sidx设置为块元数据header中的最大连续小段的起始位置max,直接跳转步骤14。
6、否则,即max_free大于需要的chunk(此时,可能存在多个max_free都相同的内存块),遍历header中记录的分配位图bitmap,查找到第一个空闲小段位置idx。
7、连续空闲段个数free加1,继续判断下一个小段是否为空闲,如果是步骤11, 否则步骤8。
8、判断这个空闲段free是否和需求大小chunk相等,相等则说明满足分配要求,直接步骤13。
9、如果空闲段free比chunk大,则记录之间差值diff,并和最小差值min_diff比较,如果小于min_diff,则记录这段连续段开始的位置min_idx,并更新min_diff。
10、判断是否设置了结束标记,是,步骤13;否则,步骤11。
11、继续查找下一个空闲内存段的起始位置。
12、这时下一段还是空闲内存段,判断是否遍历结束(在有多个max_free都相同的内存块的情况下,可以根据需要需要遍历其中一个或多个内存块的bitmap),结束设置结束标记,跳转步骤8;否则跳转回步骤7。
13、这时候找到的最小差值min_diff就是所需要的目标内存段,分配起始位置sidx设置为min_idx。
14、将分配位置sidx的开始的chunk大小设置为已分配状态。
15、返回该内存块的sidx内存段所在的虚拟地址handle,该位置就可以用于保存小块内存。
16、如果不是新分配的内存块,则将内存块header的地址信息从已有的链表中移除;若移除后原有链表下未链接有内存块的header,则删除该原有第一链表,即删除链表头元数据。
17、判断此时header中空闲内存段个数,如果全满,则移入full链表,跳转至步骤23;否则执行步骤18。
18、由于该内存块未全满,先更新块元数据中header中最大连续内存小段的位置max及其大小max_free。
19、根据max_free查找其所在的未全满数组位置partial[i]。
20、遍历partial[i]链表头,查看其下面的list中是否存在max_free的链表结点;没有,执行步骤21;否则,找到list,执行步骤22。
21、先分配一个链表结点list,并设置其max_free值,将其向上链接到partial[i]中。
22、找到满足max_free的list,向下将header链接进来。
23、完成整个分配过程。
接下来提供内存释放的实施例。所述内存调整请求包括:内存释放请求,所述内存释 放请求携带:需释放内存的大小以及需释放内存的地址;所述根据所述总元数据和所述块元数据确定需调整状态的目标内存段,包括:根据所述内存块的大小和所述需释放内存的地址,确定目标内存块;根据所述内存段的大小和所述需释放内存的大小,确定所述目标内存块中需释放的目标内存段。
1、响应于内存释放请求,需要将一小块内存移出pool;根据内存释放请求,确定需释放的位置handler,其大小为size;根据内存段的大小,将其转化为所需分配的内存段个数chunk;
2、根据handler的地址,确定其所在内存块,并访问该内存块的块元数据header;
3、根据块元数据header确定出handler在header中的位置idx;
4、设置idx开始的chunk个内存段为空闲状态;
5、将header从已有的链表中移除;若移除后原有链表下未链接有内存块的header,则删除该原有链表,即删除链表头元数据;
6、判断此时header中空闲内存段个数,如果全空,直接释放该内存块ms,还给上一级的预留内存管理系统,跳转至步骤12;否则执行步骤7;
7、若未全空,则更新该内存块ms的header中最大连续内存小段的位置max及其大小max_free;
8、根据max_free查找其所对应的元素在链表数组中的位置partial[i];
9、遍历partial[i]链表头,查看其下面的list中是否存在max_free的链接表结点;没有,步骤11;否则,找到list,步骤10;
10、先分配一个链表结点list,并设置其max_free值,将其向上链接到partial[i]中;
11、找到满足max_free的list,向下将header链接进来。
12、完成整个分配过程。
与前述内存管理方法的实施例相对应,本说明书还提供了内存管理装置及其所应用的计算机设备的实施例。
本说明书内存管理装置的实施例可以应用在计算机设备上,例如服务器或终端设备等。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书内存管理装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、 网络接口320、以及非易失性存储器340之外,实施例中内存管理装置331所在的计算机设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种内存管理装置的框图,所述内存包括多个内存块,每个所述内存块划分为多个内存段;
所述内存用于存储总元数据,以及与每个已分配内存块对应的块元数据;
所述块元数据包括:所述已分配内存块中每个内存段的分配状态信息;
所述总元数据包括:每个所述已分配内存块中未分配内存段的数量信息;
所述装置包括:
确定模块41,用于:响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整分配状态的目标内存段;
调整模块42,用于:基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
更新模块43,用于:在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
在一些例子中,所述内存调整请求包括:内存分配请求;
所述确定模块,还用于:
根据所述总元数据,确定是否存在满足所述内存分配请求的至少一个备选内存块;
若是,根据至少一个所述备选内存块对应的块元数据,在所述至少一个备选内存块中确定目标内存块以及所述目标内存块中用于分配内存的目标内存段。
在一些例子中,所述未分配内存段的数量信息包括最大空闲段个数,所述最大空闲段个数表征所述已分配内存块中最大的连续未分配内存段的个数;
所述确定模块,还用于:
确定满足所述内存分配请求所需的需分配内存段个数;
根据所述总元数据确定是否存在最大空闲段个数大于或等于所述需分配内存段个数的至少一个备选内存块。
在一些例子中,所述确定模块,还用于:
若存在最大空闲段个数等于所述需分配内存段个数的备选内存块,根据所述备选内存块的块元数据,将所述备选内存块及所述备选内存块中的最大空闲段确定为目标内存块及所述目标内存块中用于分配的目标内存段;
若所述至少一个备选内存块的最大空闲段个数均大于所述需分配内存段个数,根据所述至少一个备选内存块的块元数据,确定所述备选内存块中连续的未分配内存段的个数与所述需分配内存段个数的差异,根据所述差异确定目标内存块及所述目标内存块中用于分配的目标内存段。
在一些例子中,所述总元数据还包括每个所述块元数据的地址;所述确定模块,还用于在确定存在满足所述内存分配请求的至少一个备选内存块后,根据所述至少一个备选内存块的块元数据的地址,读取所述至少一个备选内存块的块元数据。
在一些例子中,所述总元数据包括一个或多个第一链表,不同所述第一链表对应不同的所述数量信息;
所述第一链表包括至少一个结点,每个结点用于存储一个已分配内存块的块元数据的地址,以在确定出所述备选内存块后访问所述备选内存块的块元数据;其中,相同数量信息的已分配内存块的块元数据的地址存储在所述第一链表的不同结点中。
在一些例子中,所述总元数据包括链表数组,所述链表数组中每个元素对应不同的数量范围;
每个所述元素用于链接至一个或多个所述第一链表,且所链接的第一链表对应的所述数量信息处于该元素所对应的数量范围中。
在一些例子中,每个所述元素对应一个总链表,并且用于存储对应的总链表的头指针;
每个所述第一链表的头指针,存储在该第一链表对应的元素所对应的总链表的结点中。
在一些例子中,所述内存调整请求包括:内存释放请求,所述内存释放请求携带:需释放内存的大小以及需释放内存的地址;
所述确定模块,还用于:
根据所述内存块的大小和所述需释放内存的地址,确定目标内存块;
根据所述内存段的大小和所述需释放内存的大小,确定所述目标内存块中需释放的目标内存段。
在一些例子中,所述内存包括供计算机设备的操作系统使用的第一存储空间以及用于供虚拟机使用的第二存储空间,所述第二存储空间包括所述多个内存块;
所述第一存储空间由所述操作系统的第一内存管理模块进行管理,所述装置应用于所述操作系统中用于管理所述第二存储空间的第二内存管理模块;
所述已分配内存块的块元数据存储在该内存块的内存段中,所述总元数据通过调用所述第一内存管理模块存储在所述第一存储空间。
上述内存管理装置中各个模块的功能和作用的实现过程具体详见上述内存管理方法中对应步骤的实现过程,在此不再赘述。
相应的,本说明书实施例还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述内存管理方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现内存管理方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现内存管理方法实施例的步骤。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例可以应用于一个或者多个电子设备中,所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述电子设备的硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述电子设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述电子设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量主机或网络服务器构成的云。
所述电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该申请的保护范围内。
其中,“具体示例”、或“一些示例”等的描述意指结合所述实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

Claims (13)

  1. 一种内存管理方法,所述内存包括多个内存块,每个所述内存块划分为多个内存段;所述内存用于存储总元数据,以及每个已分配内存块对应的块元数据;
    所述块元数据包括:所述已分配内存块中每个内存段的分配状态信息;
    所述总元数据包括:每个所述已分配内存块中未分配内存段的数量信息;
    所述方法包括:
    响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整状态的目标内存段;
    基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
    在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
  2. 根据权利要求1所述的方法,所述内存调整请求包括:内存分配请求;
    所述根据所述总元数据和所述块元数据确定需调整状态的目标内存段,包括:
    根据所述总元数据,确定是否存在满足所述内存分配请求的至少一个备选内存块;
    若是,根据至少一个所述备选内存块对应的块元数据,在所述至少一个备选内存块中确定目标内存块以及所述目标内存块中用于分配内存的目标内存段。
  3. 根据权利要求2所述的方法,所述未分配内存段的数量信息包括最大空闲段个数,所述最大空闲段个数表征所述已分配内存块中最大的连续未分配内存段的个数;
    所述根据所述总元数据,确定是否存在满足所述内存分配请求的至少一个备选内存块,包括:
    确定满足所述内存分配请求所需的需分配内存段个数;
    根据所述总元数据确定是否存在最大空闲段个数大于或等于所述需分配内存段个数的至少一个备选内存块。
  4. 根据权利要求3所述的方法,所述根据至少一个所述备选内存块对应的块元数据,在所述至少一个备选内存块中确定目标内存块以及所述目标内存块中用于分配内存的目标内存段,包括:
    若存在最大空闲段个数等于所述需分配内存段个数的备选内存块,根据所述备选内存块的块元数据,将所述备选内存块及所述备选内存块中的最大空闲段确定为目标内存块及所述目标内存块中用于分配的目标内存段;
    若所述至少一个备选内存块的最大空闲段个数均大于所述需分配内存段个数,根据 所述至少一个备选内存块的块元数据,确定所述备选内存块中连续的未分配内存段的个数与所述需分配内存段个数的差异,根据所述差异确定目标内存块及所述目标内存块中用于分配的目标内存段。
  5. 根据权利要求2所述的方法,所述总元数据还包括每个所述块元数据的地址;在确定存在满足所述内存分配请求的至少一个备选内存块后,所述方法还包括:根据所述至少一个备选内存块的块元数据的地址,读取所述至少一个备选内存块的块元数据。
  6. 根据权利要求5所述的方法,所述总元数据包括一个或多个第一链表,不同所述第一链表对应不同的所述数量信息;
    所述第一链表包括至少一个结点,每个结点用于存储一个已分配内存块的块元数据的地址,以在确定出所述备选内存块后访问所述备选内存块的块元数据;其中,相同数量信息的已分配内存块的块元数据的地址存储在所述第一链表的不同结点中。
  7. 根据权利要求6所述的方法,所述总元数据包括链表数组,所述链表数组中每个元素对应不同的数量范围;
    每个所述元素用于链接至一个或多个所述第一链表,且所链接的第一链表对应的所述数量信息处于该元素所对应的数量范围中。
  8. 根据权利要求7所述的方法,每个所述元素对应一个总链表,并且用于存储对应的总链表的头指针;
    每个所述第一链表的头指针,存储在该第一链表对应的元素所对应的总链表的结点中。
  9. 根据权利要求1所述的方法,所述内存调整请求包括:内存释放请求,所述内存释放请求携带:需释放内存的大小以及需释放内存的地址;
    所述根据所述总元数据和所述块元数据确定需调整状态的目标内存段,包括:
    根据所述内存块的大小和所述需释放内存的地址,确定目标内存块;
    根据所述内存段的大小和所述需释放内存的大小,确定所述目标内存块中需释放的目标内存段。
  10. 根据权利要求1至9任一项所述的方法,所述内存包括供计算机设备的操作系统使用的第一存储空间以及用于供虚拟机使用的第二存储空间,所述第二存储空间包括所述多个内存块;
    所述第一存储空间由所述操作系统的第一内存管理模块进行管理,所述方法应用于所述操作系统中用于管理所述第二存储空间的第二内存管理模块;
    所述已分配内存块的块元数据存储在该内存块的内存段中,所述总元数据通过调用所述第一内存管理模块存储在所述第一存储空间中。
  11. 一种内存管理装置,所述内存包括多个内存块,每个所述内存块划分为多个内存段;
    所述内存用于存储总元数据,以及与每个已分配内存块对应的块元数据;
    所述块元数据包括:所述已分配内存块中每个内存段的分配状态信息;
    所述总元数据包括:每个所述已分配内存块中未分配内存段的数量信息;
    所述装置包括:
    确定模块,用于:响应于内存调整请求,根据所述总元数据和所述块元数据确定需调整分配状态的目标内存段;
    调整模块,用于:基于所述内存调整请求对应的内存调整类型,对所述目标内存段的分配状态进行调整;
    更新模块,用于:在调整所述目标内存段的分配状态后,更新所述目标内存段所属目标内存块的块元数据的分配状态信息,以及更新所述总元数据中所述目标内存块中未分配内存段的数量信息。
  12. 一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现权利要求1至10任一所述方法的步骤。
  13. 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任一所述方法的步骤。
PCT/CN2023/123475 2022-10-12 2023-10-09 内存管理方法、装置、计算机设备及存储介质 WO2024078429A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202211248341.1A CN115599544A (zh) 2022-10-12 2022-10-12 内存管理方法、装置、计算机设备及存储介质
CN202211248341.1 2022-10-12

Publications (1)

Publication Number Publication Date
WO2024078429A1 true WO2024078429A1 (zh) 2024-04-18

Family

ID=84847498

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2023/123475 WO2024078429A1 (zh) 2022-10-12 2023-10-09 内存管理方法、装置、计算机设备及存储介质

Country Status (2)

Country Link
CN (1) CN115599544A (zh)
WO (1) WO2024078429A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118409979A (zh) * 2024-06-28 2024-07-30 中国兵器装备集团兵器装备研究所 一种基于多尺寸数据块管理的低碎片内存管理方法
CN118626272A (zh) * 2024-07-18 2024-09-10 西交利物浦大学 内存的分配方法、装置、设备、介质和产品

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116991595B (zh) * 2023-09-27 2024-02-23 太初(无锡)电子科技有限公司 一种基于Bitmap的内存分配方法、装置、设备及介质
CN117130565B (zh) * 2023-10-25 2024-02-06 苏州元脑智能科技有限公司 数据处理方法、装置、磁盘阵列卡及介质
CN117555674B (zh) * 2023-10-26 2024-05-14 南京集成电路设计服务产业创新中心有限公司 一种高效多线程批处理块内存池管理方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7533228B1 (en) * 2005-05-27 2009-05-12 Sun Microsystems, Inc. Two-pass sliding compaction
CN108304259A (zh) * 2017-01-11 2018-07-20 中兴通讯股份有限公司 内存管理方法及系统
CN110287127A (zh) * 2019-05-14 2019-09-27 江苏大学 一种多粒度多核可扩展的非易失性内存管理方法及系统
CN111143058A (zh) * 2019-12-17 2020-05-12 长沙新弘软件有限公司 一种基于后备列表的内存管理方法
CN114546661A (zh) * 2022-03-01 2022-05-27 浙江大学 基于内存变换的动态内存分配方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7533228B1 (en) * 2005-05-27 2009-05-12 Sun Microsystems, Inc. Two-pass sliding compaction
CN108304259A (zh) * 2017-01-11 2018-07-20 中兴通讯股份有限公司 内存管理方法及系统
CN110287127A (zh) * 2019-05-14 2019-09-27 江苏大学 一种多粒度多核可扩展的非易失性内存管理方法及系统
CN111143058A (zh) * 2019-12-17 2020-05-12 长沙新弘软件有限公司 一种基于后备列表的内存管理方法
CN114546661A (zh) * 2022-03-01 2022-05-27 浙江大学 基于内存变换的动态内存分配方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118409979A (zh) * 2024-06-28 2024-07-30 中国兵器装备集团兵器装备研究所 一种基于多尺寸数据块管理的低碎片内存管理方法
CN118626272A (zh) * 2024-07-18 2024-09-10 西交利物浦大学 内存的分配方法、装置、设备、介质和产品

Also Published As

Publication number Publication date
CN115599544A (zh) 2023-01-13

Similar Documents

Publication Publication Date Title
WO2024078429A1 (zh) 内存管理方法、装置、计算机设备及存储介质
US11861204B2 (en) Storage system, memory management method, and management node
US11797436B2 (en) Memory system and method for controlling nonvolatile memory
JP6542909B2 (ja) ファイル操作方法及び装置
EP2645259B1 (en) Method, device and system for caching data in multi-node system
JP2019008729A (ja) メモリシステムおよび制御方法
US20110246742A1 (en) Memory pooling in segmented memory architecture
KR20170088933A (ko) 파일 액세스 방법 및 장치 및 스토리지 디바이스
JP7467593B2 (ja) リソース割振り方法、記憶デバイス、および記憶システム
US20140019706A1 (en) System and method of logical object management
TWI710899B (zh) 計算系統以及其操作方法
WO2021047425A1 (zh) 一种持久性内存的虚拟化方法及系统
US10976946B2 (en) Method and computer system for managing blocks
CN110968269A (zh) 基于scm与ssd的键值存储系统及读写请求处理方法
WO2024099448A1 (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
WO2024169286A1 (zh) 写时拷贝方法、装置、设备及非易失性可读存储介质
US20190332261A1 (en) Storage system, method of controlling storage system, and management node
CN109902033B (zh) 应用于NVMe SSD控制器的namespace的LBA分配方法和映射方法
US11429519B2 (en) System and method for facilitating reduction of latency and mitigation of write amplification in a multi-tenancy storage drive
US10168911B1 (en) Defragmentation of persistent main memory
US20090327640A1 (en) Method for expanding logical volume storage space
CN113741787B (zh) 一种数据存储方法、装置、设备、介质
JP6273678B2 (ja) ストレージ装置
JP2022121655A (ja) メモリシステムおよび制御方法
JP2000010842A (ja) ファイル管理方法および方式

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 23876631

Country of ref document: EP

Kind code of ref document: A1