BACKGROUND

Memory allocation systems assign blocks of memory on request. A memory allocation system employs an allocator to receive relatively large blocks of memory from an operating system and allocate that memory to satisfy memory requests. Upon receipt of a request for a relatively small block of memory, a standard and/or conventional allocator satisfies the request by dividing one of the large blocks of memory into multiple smaller blocks.

A known, standard, and/or conventional memory allocation system is the buddy system. The buddy system divides allocatable blocks of memory into pairs of contiguous equally-sized blocks, for example, buddies. The buddy system employs a buddy system memory allocator that allocates memory blocks of certain permitted sizes. The permitted sizes may be powers of two, such as 4 KB (kilobytes), 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, etc. In another example, the permitted sizes form a Fibonacci sequence, such as 16 KB, 32 KB, 48 KB, 80 KB, 128 KB, etc. Therefore, each memory block in the buddy system except the smallest allowable memory block can be divided into two smaller blocks of permitted sizes.

The buddy system memory allocator also maintains many free block lists, for example, memory buckets. The buddy system memory allocator maintains one free block list for each of the permitted memory block sizes. Where the permitted memory block sizes are 4 KB, 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, etc., the buddy system memory allocator may maintain a free block list for available 4 KB memory blocks, a free block list for available 8 KB memory blocks, a free block list for available 16 KB memory blocks, a free block list for available 32 KB memory blocks, a free block list for available 64 KB memory blocks, a free block list for available 128 KB memory blocks, etc. The free block lists comprise all the available blocks of a particular size. For example, the free block list for 16 KB memory blocks comprises all of the available 16 KB memory blocks.

When the buddy system memory allocator receives a request for a size of memory, the buddy system memory allocator rounds the requested size up to the size permitted in the buddy system, and returns the first block from the free block list for memory blocks of that permitted size. If the free list for memory blocks of that permitted size is empty, then the buddy system memory allocator splits a larger permitted size memory block and allocates one of the split pieces of memory to satisfy the original memory request. The buddy system memory allocator adds the other split pieces remaining from the satisfied memory request, to the appropriate lists of free blocks of permitted memory sizes in that buddy system.

When memory blocks are released, the buddy system memory allocator may attempt to join, merge, or coalesce two contiguous equally-sized memory blocks or buddies into a single memory block of a larger permitted size. For example, if two 16 KB memory blocks are available and contiguous, the buddy system memory allocator may attempt to coalesce the two 16 KB memory blocks into one 32 KB memory block. The coalescence requires the memory blocks to be contiguous.

In a known, standard, and/or conventional buddy system, the following requirements apply for two blocks of memory to qualify as buddies: 1) the two blocks of memory must be contiguous, 2) the two blocks of memory must be of equal size, and 3) the starting address of the combined block must be aligned to the size of the combined size. For example, if two 16 KB size blocks are to be combined into a 32 KB size, the starting address of the 32 KB size block should at least be 32 KB size aligned; that is, the 32 KB sized block needs to have a starting address that is a multiple of 32 KB to be aligned in the buddy system.

DETAILED DESCRIPTION

As described in the BACKGROUND section above, known, standard, and/or conventional buddy systems, as an exemplary shortcoming, create relatively large amounts of external memory fragmentation. External memory fragmentation occurs when the buddy system memory allocator divides large memory blocks to satisfy memory requests and leaves many smaller memory blocks unallocated. The small blocks may be too small to satisfy most memory requests, and the small blocks will therefore accumulate over time. When large amounts of external memory fragmentation occur, the system may run out of memory available to satisfy larger memory requests.

An exemplary known, standard, and/or conventional strategy to reduce external memory fragmentation in the buddy system is to allocate blocks that are only the permitted sizes. However, this strategy increases the amount of internal memory fragmentation. Internal memory fragmentation occurs when the buddy system memory allocator allocates more memory than is actually requested. Another exemplary known, standard, and/or conventional strategy to reduce external memory fragmentation in the buddy system is to classify memory requests based on the length of time that the memory will be needed. This strategy classifies all memory requests as either short-term allocations or long-term allocations. In an attempt to increase coalescing opportunities, this strategy groups together the short-term allocations and separately groups together the long-term allocations. However, this strategy requires multiple buddy system allocators for the multiple groups and may not improve external fragmentation in the long-term allocation group.

So, exemplary known, standard, and/or conventional buddy system memory allocators create relatively large amounts of external memory fragmentation. For example, exemplary known, standard, and/or conventional buddy system memory allocators result in many available memory blocks that may not be able to be coalesced and are also too small to satisfy a larger memory request. Thus, a need exists for an enhanced and/or modified buddy system memory allocator that determines whether the available memory blocks comprise a plurality of contiguous, differently-sized memory blocks that collectively add up to a size that would satisfy the larger memory request. By employing a plurality of contiguous, differently-sized memory blocks to satisfy a memory request, the enhanced and/or modified buddy system memory allocator in an example leads to better utilization of memory and reduces memory pressure on the system. Also, the use of the plurality of contiguous, differently-sized memory blocks to satisfy a memory request in an example reduces memory fragmentation.

Turning to FIG. 1, an implementation of an apparatus 100 in an example comprises one or more memory management sub-systems 101 and one or more client applications. An exemplary memory management sub-system 101 comprises one or more modified buddy system memory allocators 102, one or more indexers and/or fast search mechanisms 103, and one or more lower level memory allocators 104. Exemplary client applications comprise client applications 106108. The memory management sub-system 101 and the client applications 106 and 108 in an example operate on different levels of the apparatus 100. Within an exemplary memory management sub-system, the modified buddy system memory allocator 102 and the lower level memory allocator 104 operate at different levels. For example, the lower level memory allocator 104 operates on a first level 110 and the modified buddy system memory allocator 102 operates on a second level 112 which are within the memory management sub-system 101. The memory management sub-system 101 in an example operates at a different level 114 than the client applications 106 and 108, which operate on another level116. An exemplary modified buddy system memory allocator 102 comprises one or more recordable data storage media 150. An exemplary implementation of the index and/or fast search mechanism 103 comprises an algorithm, procedure, program, mechanism, coordinator, module, application, code, and/or logic.

The lower level memory allocator 104 allocates memory to the modified buddy system memory allocator 102 for potential allocation to the client applications 106 and 108. When the client applications 106 and 108 require memory, the client applications 106 and 108 make requests to the modified buddy system memory allocator 102. The modified buddy system memory allocator 102 attempts to satisfy the requests with memory that the modified buddy system memory allocator 102 controls at the time of the request. If the modified buddy system memory allocator 102 does not have sufficient memory to satisfy the request, then the modified buddy system memory allocator 102 requests additional memory from the lower level memory allocator104 to satisfy the request.

The memory management sub-system 101 in an example is responsible for memory related tasks on the apparatus 100 that comprise memory related tasks of the modified buddy system allocator 102 and the lower level memory allocator 104. For example, the memory management sub-system 101 is responsible for memory related tasks that include and are not limited to the memory related tasks of the modified buddy system allocator 102 and the lower level memory allocator 104. In a further example, the memory management sub-system 101 is also responsible for maintaining state information on different memory objects in the apparatus 100. The memory management sub-system 101 also provides the fast search mechanism 103, for example, to look up the state information of different memory objects within the memory management sub-system 101.

The modified buddy system memory allocator 102 allocates memory blocks of certain permitted sizes. In an example, the permitted sizes are powers of two, such as 4 KB (kilobytes), 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, etc. In another example, the permitted sizes form a Fibonacci sequence, such as 16 KB, 32 KB, 48 KB, 80 KB, 128 KB, etc. Therefore, each memory block in the modified buddy system except the smallest allowable memory block can be divided into two smaller blocks of permitted sizes. Each of these two smaller blocks can be further divided until the smallest allowable memory block size is reached. For example, a programmer can set the smallest allowable memory block size. The programmer in an example sets the smallest allowable memory block size to be one of 1 KB, 2 KB, 4 KB, or the like. In an example, referring to FIG. 2, the smallest allowable memory block size is set to 4 KB.

To satisfy a memory request, the modified buddy system memory allocator 102 in an example divides a memory block into two equally-sized blocks, for example, buddies. The modified buddy system memory allocator 102 may allocate one of the buddies to satisfy the memory request and add the other one of the buddies to a free block list. Once the allocated one of the buddies is released and both of the buddies are available, the modified buddy system memory allocator 102 may attempt to join, merge, or coalesce the two buddies into a single larger memory block. Coalescing involves the joining or merging of two contiguous equally-sized memory blocks.

Referring to FIGS. 1-2, the modified buddy system memory allocator 102 organizes available memory blocks into a plurality of free block lists 202, for example, memory buckets. The modified buddy system memory allocator 102 in an example maintains one free block list for each of the permitted memory block sizes. For example, where the permitted memory block sizes are 4 KB, 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, 256 KB, 512 KB, and 1 MB (megabyte), the modified buddy system memory allocator 102 maintains a free block list 204 for available 1 MB memory blocks, a free block list 206 for available 512 KB memory blocks, a free block list 208 for available 256 KB memory blocks, a free block list 210 for available 128 KB memory blocks, a free block list 212 for available 64 KB memory blocks, a free block list 214 for available 32 KB memory blocks, a free block list 216 for available 16 KB memory blocks, a free block list 218 for available 8 KB memory blocks, and a free block list 220 for available 4 KB memory blocks. The modified buddy system memory allocator 102 in an example may also organize available memory blocks of other sizes into additional free block lists, as will be appreciated by those skilled in the art. Each of the free block lists 202 in an example comprises all the available memory blocks controlled by the modified buddy system memory allocator 102 that are of a particular size. For example, the free block list 216 comprises all of the available 16 KB memory blocks that the modified buddy system memory allocator 102 controls.

Each of the free block lists 202 comprises zero or more memory blocks. In an example, referring to FIG. 2, the free block lists 204206208210212, and 214 comprise no memory blocks. The free block list 216 in an example comprises memory blocks 222224, and 226. The memory blocks 222224, and 226 are each 16 KB. The free block list 218 in an example comprises memory blocks 228230, and 232. The memory blocks 228230, and 232are each 8 KB. The free block list 220 in an example comprises memory blocks 234236, and 238. The memory blocks 234236, and 238 are each 4 KB.

When the modified buddy system memory allocator 102 allocates a memory block, the modified buddy system memory allocator 102 removes that memory block from the free block list 202 that corresponds to the size of the memory block. As additional memory blocks become available, the modified buddy system memory allocator 102 in an example may add the additional memory blocks to the appropriate ones of the free block lists 202.

The free block lists 202 in an example comprise circular linked lists of memory blocks. In an example, the free block lists 202 use pointers to connect the memory blocks, as will be appreciated by those skilled in the art. For example, each of the memory blocks 222224, and 226 in the free block list216 comprise head pointers and tail pointers to the other memory blocks 222224, and 226 in the free block list 216. When adding or removing a memory block to one of the free block lists 202, the modified buddy system memory allocator 102 modifies one or more pointers in the free block list202 to successfully add or remove the memory block. To add the memory block, the modified buddy system memory allocator 102 selects a location in the free block list 202 for addition of the memory block and modifies the pointers of the adjacent memory blocks in the free block list 202. To remove the memory block, the modified buddy system memory allocator 102 modifies the pointers of the adjacent memory blocks in the free block list 202 so that the adjacent memory blocks point to each other rather than the removed memory block.

Referring to FIGS. 1-3, an illustrative description of an exemplary operation of an implementation of the apparatus 100 is presented, for explanatory purposes. In exemplary logic 302, the modified buddy system memory allocator 102 attempts to satisfy a request for a size of memory made by one of the client applications 106 and 108. The requested size of memory is represented in the exemplary logic 302 by the variable X. The requested size (X) of memory may be any value, as will be appreciated by those skilled in the art. In an example, the requested size (X) of memory is a multiple of the smallest allowable memory block size and, referring to FIG. 2, the smallest allowable memory block size is set to 4 KB. For example, the requested size (X) of memory in the exemplary logic 302 is 28 KB.

At STEP 304, the modified buddy system memory allocator 102 receives a request for a size (X) of memory from one of the client applications 106 and108, for example, the client application 106. After the modified buddy system memory allocator 102 receives the request for the size (X) of memory from the client application 106, STEP 304 proceeds to STEP 306. At STEP 306, the modified buddy system memory allocator 102 rounds the requested size (X) of memory up to the nearest permitted size of a free block list 202 that is greater than or equal to the requested size (X). The nearest permitted size greater than the requested size (X) is represented in the exemplary logic 302 by the variable Y. The free block lists 202 in an example are organized as powers of two. For example, the modified buddy system memory allocator 102 has access to the free block lists 202 that hold memory blocks with sizes of 4 KB, 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, etc. Where the requested size (X) is 28 KB, the nearest power of two above 28 KB is 32 KB. Therefore, the modified buddy system memory allocator 102 rounds the requested size (X) of memory up to 32 KB, and STEP 306 proceeds to STEP 308.

At STEP 308, the modified buddy system memory allocator 102 attempts to locate an available memory block that has a size that is greater than or equal to the size (Y), which in this illustration is 32 KB. First, the modified buddy system memory allocator 102 checks the free block list 214 for an available memory block of size 32 KB. If the modified buddy system memory allocator 102 locates a memory block in the free block list 214, then STEP308 proceeds to STEP 310. If the free block list 214 is empty, then the modified buddy system memory allocator 102 in an example continues to check the other free block lists 202 for an available memory block of a size larger than 32 KB. For example, the modified buddy system memory allocator 102checks the free block list 212, followed by the free block list 210, etc. If the modified buddy system memory allocator 102 does locate an available memory block in the free block lists 202 that is at least as large as the size (Y), then STEP 308 proceeds to STEP 310. If the modified buddy system memory allocator 102 does not locate an available memory block in the free block lists 202 that is at least as large as the size (Y), then STEP 308proceeds to STEP 404 (FIG. 4), as described herein.

At STEP 310, the modified buddy system memory allocator 102 allocates a memory block of the requested size (X) to the client application 106 that requested the memory, as will be appreciated by those skilled in the art. Once the modified buddy system memory allocator 102 has allocated the memory, STEP 310 proceeds to STEP 312. At STEP 312, if the available memory block chosen to satisfy the request is larger than the requested size (X), then the modified buddy system memory allocator 102 returns the remainder from the memory allocation to the appropriate ones of the free block lists 202. In an example, the remainder may be returned to the free block lists 202 since the requested size (X) is a multiple of the smallest allowable memory block size. For example, if the modified buddy system memory allocator 102 located a 32 KB memory block to satisfy the request for 28 KB of memory, then the modified buddy system memory allocator 102 will allocate 28 KB to the client application 106 and add a 4 KB block of memory to the free block list 220. If the modified buddy system memory allocator 102 located a 64 KB memory block to satisfy the request for 28 KB of memory, then the modified buddy system memory allocator 102 will allocate 28 KB to the client application 106, add a 32 KB block of memory to the free block list214, and add a 4 KB block of memory to the free block list 220.

Referring to FIGS. 1-2 and 4, exemplary logic 402 serves to illustrate an attempt by the modified buddy system memory allocator 102 to satisfy the memory request received at STEP 304 (FIG. 3) with a plurality of contiguous, differently-sized memory blocks that are each smaller than the requested size (X) of memory. As noted above, if at STEP 308 (FIG. 3) the modified buddy system memory allocator 102 does not locate an available memory block in the free block lists 202 that is at least as large as the size (Y), then STEP 308 proceeds to STEP 404.

At STEP 404, the modified buddy system memory allocator 102 rounds the requested size (X) of memory down to the nearest permitted size of a free block list 202 that is less than the requested size (X). The nearest permitted size below the requested size (X) is represented in the exemplary logic 402by the variable Z. The free block lists 202 in an example are organized as powers of two. For example, the modified buddy system memory allocator102 has access to the free block lists 202 that hold memory blocks with sizes of 4 KB, 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, etc. Where the requested size (X) is 28 KB, the nearest power of two below 28 KB is 16 KB. Therefore, the modified buddy system memory allocator 102 rounds the requested size (X) of memory down to 16 KB, and STEP 404 proceeds to STEP 406. At STEP 406, the modified buddy system memory allocator 102 checks the free block list 216 for an available memory block of size 16 KB.

If at STEP 406 the modified buddy system memory allocator 102 determines that the free block list 216 is empty, then STEP 406 proceeds to STEP408. At STEP 408, the modified buddy system memory allocator 102 determines whether additional memory is available in the lower level memory allocator 104. If the lower level memory allocator 104 does not have available memory, then STEP 408 proceeds to STEP 410. At STEP 410, the modified buddy system memory allocator 102 determines that sufficient memory is not available to satisfy the request for the size of memory made by the client application 106. Therefore, the modified buddy system memory allocator 102 returns a Null or Fail result to the client application 106.

If at STEP 408 the lower level memory allocator 104 does have available memory, then STEP 408 proceeds to STEP 412. At STEP 412, memory is allocated from the lower level memory allocator 104 to the modified buddy system memory allocator 102. For example, a memory block large enough to satisfy the request is added to one of the free block lists 202. The lower level allocator 104 in an example allocates to the modified buddy system memory allocator 102 either: a memory block of a default refill size (R), or a memory block of the size (Y). If the size (Y) is smaller than the default refill size (R), then the lower level memory allocator 104 in an example allocates a memory block of the default refill size (R) to the modified buddy system memory allocator 102. If the size (Y) is larger than the default refill size (R), then the lower level memory allocator 104 in an example allocates a memory block of the size (Y) to the modified buddy system memory allocator 102.

The default refill size (R) in an example may be set to any value. For example, the default refill size (R) is set to 64 KB. In this illustration the size (Y) is 32 KB, which is smaller than the 64 KB of the default refill size (R), so the lower level memory allocator 104 allocates the 64 KB of the default refill size (R) of memory to the modified buddy system memory allocator for subsequent allocation to client applications 106 and 108. The modified buddy system memory allocator 102 in an example adds the 64 KB memory block to the free block list 212 for the 64 KB memory blocks.

After allocation of the newly received memory, the modified buddy system memory allocator 102 will allocate a memory block from the newly received memory to satisfy the memory request. For example, the modified buddy system memory allocator will perform STEPS 308310, and 312 (FIG. 3) to satisfy the memory request with the newly received memory.

If at STEP 406 the modified buddy system memory allocator 102 locates an available memory block in the free block list 216, then STEP 406 proceeds to STEP 414. For example, the modified buddy system memory allocator 102 locates the memory block 222 in the free block list 216. The modified buddy system memory allocator 102 in an example begins with the memory block 222 on the search for a plurality of contiguous, differently-sized memory blocks that are each smaller than the requested size (X) of memory, but collectively are at least as large as the requested size (X) of memory. The modified buddy system memory allocator 102 is able to proceed regardless whether the address of the memory block 222 is aligned or nonaligned to the rounded up to the next power of 2 value of the requested size (X) of memory; that is, the address of a first memory block or any other memory block to be combined in the plurality of contiguous, differently-sized memory blocks need not be a multiple of the rounded up to the next power of 2 value of the requested size (X) of memory.

At STEP 414, the modified buddy system memory allocator 102 calculates the address (Zn) of a memory block that would be contiguous to the memory block 222. In an example, referring to FIG. 2, the address (Z0) of the memory block 222 is 0x71604000. The memory block that is contiguous to the memory block 222 begins where the memory block 222 ends. Therefore, that contiguous memory block would have an address (Zn) that is 16 KB greater than 0x71604000, specifically, 0x71608000. After the modified buddy system memory allocator 102 calculates that the address (Zn) of the memory block that would be contiguous to the memory block 222 is 0x71608000, STEP 414 proceeds to STEP 416. The modified buddy system memory allocator 102 is able to proceed regardless whether the address (Z0) of the memory block 222 0x71604000 is aligned or nonaligned to the rounded up to the next power of 2 value of the requested size (X) of 28 KB. For the requested size (X) of 28 KB, the next power of 2 value is 32 KB. This alignment or nonalignment non-requirement means the address (Z0) of a first memory block or any other memory block to be combined in the plurality of contiguous, differently-sized memory blocks need not be a multiple of the rounded up to the next power of 2 value of the requested size (X) of 28 KB. So, for the requested size (X) of 28 KB, the address (Z0) of the first memory block or any other memory block to be combined in the plurality of contiguous, differently-sized memory blocks need not be a multiple 32 KB, which is the next power of 2 value after 28 KB.

Referring to FIGS. 4 and 5, the modified buddy system memory allocator 102 at STEP 416 determines if the memory block that starts at 0x71608000 is available in one of the free block lists 202. STEP 502 obtains the state information of the page that corresponds to the memory block that starts at 0x71608000. In an example, state information is maintained for each page of memory by the memory management sub-system 101. The state information in an example is updated to indicate all the relevant state changes of that page of memory. For example, the state information field in an example is marked as "In use by buddy allocator" by the memory management sub-system 101, if the page is located in one of the free block lists 202. In a further example, the state information field is marked as "In use by client application" by the memory management sub-system 101, if the page is allocated to one of the client applications 106 and 108. In a still further example, the state information field is marked as "Free" by the memory management sub-system 101, if the page is located in the lower level memory allocator 104.

If the modified buddy system memory allocator 102 allocates a block of memory from the lower level memory allocator 104, then the state information field is changed from "Free" to "In use by buddy allocator" by the memory management sub-system 101. The state is changed back to "Free" by the memory management sub-system 101, if the block is freed back to lower level memory allocator 104. Similarly, if the client application 106 or 108allocates memory from the modified buddy system memory allocator 102, the memory management sub-system 101 changes the state information field from "In use by buddy allocator" to "In use by client". The state information field is changed back to "In use by buddy allocator" from "In use by client" by the memory management sub-system 101, if the client application 106 or 108 returns the memory block back to the modified buddy system memory allocator 102.

An exemplary implementation of the modified buddy system memory allocator 102 comprises and/or employs a feature such as an exemplary search mechanism. Exemplary search mechanisms comprise a fast search mechanism and/or an indexer 103. The search mechanism in an example employs an exemplary data structure that serves to allow fast access to state information associated with an address. Exemplary addresses in the data structure comprise: a) addresses for memory blocks in use by the modified buddy system memory allocator 102 such as represented in FIG. 2; b) addresses for memory blocks on free block lists available for use by the modified buddy system memory allocator 102; and c) addresses for memory blocks in use by the client application 106 and/or 108. An exemplary implementation of the exemplary data structure comprises an exemplary array as follows.

 

 

Address

Array Index

State Information

 

0x1000

0x1

Free

0x2000

0x2

Client Application Use

0x3000

0x3

Client Application Use

0x4000

0x4

Free

. . .

. . .

. . .

0x3c007000

0x3c007

Buddy Allocator Use (Block 234)

0x3c00b000

0x3c00b

Buddy Allocator Use (Block 238)

0x6b8a6000

0x6b8a6

Buddy Allocator Use (Block 228)

. . .

. . .

. . .

0x7bc9c000

0x7bc9c

Buddy Allocator Use (Block 226)

 

The exemplary fast search mechanism 103 in an example employs an address for indexing and associates the address with state information. In a further example, the exemplary fast search mechanism 103 may employ other exemplary and/or basic data structures such as hash tables and/or binary trees for indexing. The exemplary array employs a top forty-two bits of a sixty-four bit address for indexing into the exemplary array. Each array element in an example comprises some state information associated with the array element. The address 0x1000 in an example indexes into the first index 0x1 and its current state says that it is in use by the modified buddy system memory allocator 102. Similarly, the address 0x4000, which indexes into the 0x4 index, is "Free" to be allocated. For example, if the address 0x4000, which is in a free state, were to be allocated by the modified buddy system memory allocator 102, then the memory allocator sub-system would change the state of the address 0x4000 from "Free" to "In use by buddy allocator".

Referring again to FIGS. 4 and 5, to determine if the memory block that starts at address 0x71608000 is available in one of the free block lists 202, the modified buddy system memory allocator 102 in an example employs the fast search mechanism 103, to get the state information of that address. For example, the fast search mechanism 103 indexes into the exemplary array of addresses, to retrieve the state information. If the state information for the address 0x71608000 indicates that the memory block that starts at address 0x71608000 is not available in one of the free block lists 202, then STEP 504 returns "No" and STEP 416 proceeds to STEP 418. In this illustration, the memory block that starts at 0x71608000 is not available in any of the free block lists 202. Therefore, STEP 504 returns "No" and STEP 416 proceeds to STEP 418.

At STEP 418, the modified buddy system memory allocator 102 determines whether any more memory blocks are available in the free block list 216. If the free block list 216 does not have any additional free memory blocks, then STEP 418 proceeds to STEP 408 to determine whether more memory is available in the lower level memory allocator 104. If the free block list 216 does have one or more additional free memory blocks, then STEP 418proceeds back to STEP 414.

When the modified buddy system memory allocator 102 executes STEP 414 for the second time, the modified buddy system memory allocator 102 will locate a second memory block in the free block list 216, for example, the memory block 224. The modified buddy system memory allocator 102calculates the address (Zn) of a memory block that would be contiguous to the memory block 224. The address (Z0) of the memory block 224 for illustrative purposes is 0x6fc6c000. The memory block that is contiguous to the memory block 224 begins where the memory block 224 ends. Therefore, that contiguous memory block would have an address (Zn) that is 16 KB greater than 0x6fc6c000, specifically, 0x6fc70000.

After the modified buddy system memory allocator 102 calculates that the address (Zn) of the memory block that would be contiguous to the memory block 224 is 0x6fc70000, STEP 414 proceeds to STEP 416. At STEP 416, the modified buddy system memory allocator 102 searches the free block lists 202 for an available memory block with an address of 0x6fc70000. To determine if the memory block that starts at address 0x6fc70000 is available in one of the free block lists 202, the modified buddy system memory allocator 102 in an example indexes into the exemplary array of addresses to obtain the state information for that particular address. The state information for the address 0x6fc70000 in an example indicates that the memory block starting at 0x6fc70000 is marked as "In use by the buddy allocator" and is available in one of the free block lists 202.

After determining that the memory block that begins at 0x6fc70000 is available in one of the free block lists 202, the modified buddy system memory allocator 102 determines which of the free block lists 202 comprises that memory block. When a memory block is located in one of the free block lists202, the size of the memory block is imprinted into the first few bits of the memory block. For example, when the memory block 232 is added to the free block list 218, the first few bits of the memory block are set to indicate that the memory block is 8 KB in size. Therefore, the first few bits of the memory block 232 indicate that the memory block 232 is located in the free block list 218. The modified buddy system memory allocator 102 then locates the memory block 232 that has the address 0x6fc70000 in the free block list 218, and STEP 504 (FIG. 5) returns "Yes" and STEP 416 proceeds to STEP420.

At STEP 420, the modified buddy system memory allocator 102 determines if the contiguous memory blocks that have been located at this point in the exemplary logic 402 are collectively large enough to satisfy the request for the size (X) of memory. If the contiguous memory blocks located at this point in the exemplary logic 402 are collectively too small to satisfy the request, then STEP 420 proceeds to STEP 422. If the contiguous memory blocks located at this point in the exemplary logic 402 are collectively large enough to satisfy the request, then STEP 420 proceeds to STEP 424.

In this illustration, the requested size (X) is 28 KB. At this point in the exemplary logic 402, the modified buddy system memory allocator 102 has determined that the memory block 224 and the memory block 232 are both available and contiguous. The memory block 224 has a size of 16 KB and the memory block 232 has a size of 8 KB. So, the sum of the two contiguous memory blocks is 24 KB, which is too small to satisfy the request, and STEP 420 therefore proceeds to STEP 422.

At STEP 422, the modified buddy system memory allocator 102 continues to search for additional contiguous memory blocks until the plurality of contiguous, differently-sized memory blocks collectively add up to a size that is at least as large as the size of memory from the request. The modified buddy system memory allocator 102 calculates the address (Zn) of a memory block that would be contiguous to the memory block 232. In an example, referring to FIG. 2, the address (Z0) of the memory block 232 is 0x6fc70000. The memory block that is contiguous to the memory block 232 begins where the memory block 232 ends. Therefore, that contiguous memory block would have an address (Zn) that is 8 KB greater than 0x6fc70000, specifically, 0x6fc72000. After the modified buddy system memory allocator 102 calculates that the address (Zn) of the memory block that would be contiguous to the memory block 224 is 0x6fc72000, STEP 422 proceeds to STEP 416.

At STEP 416, the modified buddy system memory allocator 102 searches the free block lists 202 for an available memory block with an address of 0x6fc72000. The modified buddy system memory allocator 102 in an example retrieves state information for the address 0x6fc72000. The modified buddy system memory allocator 102 then indexes into the exemplary array to locate the memory block 236 that has the address 0x6fc72000 in the free block list 220, and STEP 416 proceeds to STEP 420.

At STEP 420, the modified buddy system memory allocator 102 determines if the contiguous memory blocks located at this point in the exemplary logic402 are collectively large enough to satisfy the request for the size (X) of memory. In this illustration, the requested size (X) is 28 KB. At this point in the exemplary logic 402, the modified buddy system memory allocator 102 has determined that the memory block 224, the memory block 232, and the memory block 236 are all available and contiguous. The memory block 224 has a size of 16 KB, the memory block 232 has a size of 8 KB, and the memory block 236 has a size of 4 KB. So, the sum of the three contiguous memory blocks is 28 KB, which is large enough to satisfy the request, and STEP 420 therefore proceeds to STEP 424.

At STEP 424, if the plurality of contiguous memory blocks collectively adds up to a size that is larger than the requested size (X), then the modified buddy system memory allocator 102 returns the remainder to the appropriate free block lists 202. In this illustration, there was no remainder because the memory block 224, the memory block 232, and the memory block 236 add up to a size equal to the requested size (X). However, for other requested memory sizes a remainder may result. For example, if the requested size was 20 KB and the modified buddy system memory allocator 102 located a 16 KB memory block that is contiguous with an 8 KB memory block, then a remainder memory block that is 4 KB would result. The modified buddy system memory allocator 102 would add the 4 KB memory block to the free block list 220. After the modified buddy system memory allocator 102 determines whether there is a remainder to be added to the free block lists 202, STEP 424 proceeds to 426.

At STEP 426, the modified buddy system memory allocator 102 allocates the plurality of contiguous, differently-sized memory blocks to satisfy the request for the size (X) of memory. The plurality of contiguous, differently-sized memory blocks in an example has not been coalesced into a single memory block when the modified buddy system memory allocator 102 allocates the plurality of contiguous, differently-sized memory blocks to satisfy the memory request. The memory block 224 in an example is located at a beginning of a sequence of the plurality of contiguous, differently-sized memory blocks. To allocate the plurality of contiguous, differently-sized memory blocks to the client application 106, the modified buddy system memory allocator102 provides an address of the memory block 224 to the client application 106. The client application 106 in an example assumes that that the address of the memory block 224 corresponds to a memory block of a size that is large enough to satisfy the request. In an example, it will not matter to the client application 106 whether the memory request is satisfied with a single memory block, or the plurality of contiguous, differently-sized memory blocks. For example, the client application 106 is able to write over the boundaries of the individual contiguous memory blocks. The modified buddy system memory allocator 102 is able to proceed regardless whether the address of the memory block 224 is aligned or nonaligned to the requested size (X) of memory; that is, the address of a first memory block or any other memory block to be combined in the plurality of contiguous, differently-sized memory blocks need not be a multiple of the requested size (X) of memory.

To complete the allocation, the modified buddy system memory allocator 102 removes the memory blocks 224232, and 236 from the free block lists216218, and 220, respectively. If the client application 106 later releases the memory blocks 224232, and 236, then the modified buddy system memory allocator 102 will recreate the pointers for the memory blocks 224232, and 236 and add the memory blocks 224232, and 236 back into the free block lists 216218, and 220, respectively.

An exemplary implementation comprises a modified buddy system memory allocator that receives a request for a size of memory. The modified buddy system memory allocator identifies a plurality of contiguous, differently-sized memory blocks that are each smaller than the size of memory from the request. The modified buddy system memory allocator allocates the plurality of contiguous, differently sized memory blocks to satisfy the request for the size of memory.

The plurality of contiguous, differently sized memory blocks collectively adds up to a size that is at least as large as the size of memory from the request. A first memory block is located at a beginning of a sequence of the plurality of contiguous, differently sized memory blocks that collectively satisfies the request for the size of memory. The modified buddy system memory allocator provides an address of the first memory block to an application that made the request for the size of memory to allow the application to use the plurality of contiguous, differently sized memory blocks. The address of the first memory block is nonaligned to a rounded up to a next power of 2 value of the size of memory from the request.

A first free block list comprises one or more memory blocks that are of a first size. A second free block list comprises one or more memory blocks that are of a second size different than the first size. The plurality of contiguous, differently sized memory blocks comprises a first memory block of the one or more memory blocks that are of the first size. The plurality of contiguous, differently sized memory blocks comprises a second memory block of the one or more memory blocks that are of the second size. The modified buddy system memory allocator removes the first memory block from the first free block list and the second memory block from the second free block list to allocate the plurality of contiguous, differently sized memory blocks to an application that made the request for the size of memory. Upon release of the plurality of contiguous, differently sized memory blocks by the application, the modified buddy system memory allocator adds the first memory block back into the first free block list and the second memory block back into the second free block list.

A first free block list comprises one or more memory blocks that are of a first size. A second free block list comprises one or more memory blocks that are of a second size different than the first size. The first size and the second size are each smaller than the size of memory from the request. The first size and the second size collectively are at least as large as the size of memory from the request. The modified buddy system memory allocator searches the first free block list and the second free block list for a memory block from the first free block list and a memory block from the second free block list that are contiguous to satisfy the request for the size of memory.

Before allocating the plurality of contiguous, differently-sized memory blocks, the modified buddy system memory allocator searches for a single memory block that is larger than the size of memory from the request to satisfy the request. If the modified buddy system memory allocator does not locate a single memory block that is larger than the size of memory, then the modified buddy system memory allocator searches for the plurality of contiguous, differently-sized memory blocks that are each smaller than the size of memory and are collectively at least as large as the size of memory. The plurality of contiguous, differently sized memory blocks comprises three or more contiguous, differently sized memory blocks that are collectively at least as large as the size of memory. The plurality of contiguous, differently sized memory blocks has not been coalesced into a single memory block when the modified buddy system memory allocator allocates the plurality of contiguous, differently sized memory blocks to satisfy the request for the size of memory.

A search mechanism employs an address to index a set of memory blocks that comprises the plurality of contiguous, differently-sized memory blocks. The search mechanism associates state information with the address for each of the set of memory blocks; wherein the modified buddy system memory allocator identifies the plurality of contiguous, differently-sized memory blocks through employment of the state information that corresponds to the plurality of contiguous, differently-sized memory blocks.

An exemplary approach receives a request for allocation of a size of memory. A plurality of contiguous, differently-sized memory blocks that are each smaller than the size of memory from the request is identified. The plurality of contiguous, differently-sized memory blocks is organized in a plurality of different buddy system memory allocation free block lists. The plurality of contiguous, differently sized memory blocks is allocated to satisfy the request for the size of memory.

Additional contiguous memory blocks are searched for until the plurality of contiguous, differently sized memory blocks collectively adds up to a size that is at least as large as the size of memory from the request. A first memory block is located at a beginning of a sequence of the plurality of contiguous, differently sized memory blocks. An address of the first memory block is provided to an application that made the request for the size of memory to allow the application to use the plurality of contiguous, differently sized memory blocks. The plurality of contiguous, differently sized memory blocks is allocated to satisfy the request for the size of memory regardless of any alignment or nonalignment of any of the plurality of contiguous, differently sized memory blocks to a rounded up to a next power of 2 value of the size of memory from the request. The address of the first memory block is provided to the application that made the request to allow the application to use the plurality of contiguous, differently sized memory blocks regardless of any alignment or nonalignment of the address of the first memory block to the rounded up to the next power of 2 value of the size of memory from the request.

The plurality of contiguous, differently sized memory blocks is allocated to satisfy the request without coalescing the plurality of contiguous, differently sized memory blocks into a single memory block. An address is employed to index a set of memory blocks that comprises the plurality of contiguous, differently-sized memory blocks. State information is associated with the address for each of the set of memory blocks. The plurality of contiguous, differently-sized memory blocks is identified through employment of the state information that corresponds to the plurality of contiguous, differently-sized memory blocks.

An exemplary approach receives a request for allocation of a size of memory. A first memory block is identified in a first modified buddy system memory allocation free block list of a first modified buddy system memory allocator. A size of the first memory block is smaller than the size of memory from the request. A second modified buddy system memory allocation free block list of a second modified buddy system memory allocator is searched for a second memory block that is contiguous with the first memory block. The second memory block is identified in the second modified buddy system memory allocation free block list. A size of the second memory block is different from the size of the first memory block and is smaller than the size of memory from the request. The first memory block and the second memory block are allocated to a client application to satisfy the request for the size of memory.

A single memory block that is larger than the size of memory is searched for to satisfy the request. The single memory block that is larger than the size of memory is determined to be unavailable. A plurality of contiguous, differently-sized memory blocks that are each smaller than the size of memory and are collectively at least as large as the size of memory is searched for. The plurality of contiguous, differently-sized memory blocks comprises the first memory block and the second memory block.

An implementation of the apparatus 100 in an example comprises a plurality of components such as one or more of electronic components, mechanical components, hardware components, and/or computer software components. A number of such components can be combined or divided in an implementation of the apparatus 100. An exemplary component of an implementation of the apparatus 100 employs and/or comprises a set and/or series of computer instructions written in or implemented with any of a number of programming languages, as will be appreciated by those skilled in the art.

An implementation of the apparatus 100 in an example encompasses an article. The article comprises one or more computer-readable signal-bearing media. The article comprises means in the one or more media for one or more exemplary and/or desirable functions, approaches, and/or procedures.

SRC=http://www.freepatentsonline.com/7610468.html

PatentTips - Modified buddy system memory allocation的更多相关文章

  1. Operating System Memory Management、Page Fault Exception、Cache Replacement Strategy Learning、LRU Algorithm

    目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连 ...

  2. Buddy system伙伴分配器实现

    wikipedia:http://en.wikipedia.org/wiki/Buddy_memory_allocation The buddy memory allocation technique ...

  3. 内存管理(memory allocation内存分配)

    Memory management is the act of managing computer memory. The essential requirement of memory manage ...

  4. Memory Allocation with COBOL

    Generally, the use of a table/array (Static Memory) is most common in COBOL modules in an applicatio ...

  5. C++ TUTORIAL - MEMORY ALLOCATION - 2016

    http://www.bogotobogo.com/cplusplus/memoryallocation.php Variables and Memory Variables represent st ...

  6. PatentTips - Method to manage memory in a platform with virtual machines

    BACKGROUND INFORMATION Various mechanisms exist for managing memory in a virtual machine environment ...

  7. Linux下TomcatVM参数修改:Native memory allocation (mmap) failed to map 3221225472 bytes for committing reserved memory.

    不可行的方法最初我直接修改catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC最初看起来没啥问题,但是当服务器运行几天后,发 ...

  8. .NET Memory Allocation Profiling with Visual Studio 2012

    .NET Memory Allocation Profiling with Visual Studio 2012 This post was written by Stephen Toub, a fr ...

  9. Advanced Memory Allocation 内存分配进阶[转]

    May 01, 2003  By Gianluca Insolvibile  in Embedded Software Call some useful fuctions of the GNU C l ...

随机推荐

  1. Python day3 知识总结

    if salary.isdigit(): salary = int(salary)判断输入的salary是否是一个整数是否成立 for index,item in enumerate(product_ ...

  2. CMDB学习之一

    CMDB - 配置管理数据库 资产管理 自动化相关的平台(基础 CMDB): 1. 发布系统 2. 监控 3. 配管系统.装机 4. 堡垒机 CMDB的目的: 1. 替代EXCEL资产管理 —— 资产 ...

  3. golang 数组

    数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 在Go语言中数组 ...

  4. sqlserver 导入excel数据

    有的时候需要将excel数据导入到数据库中,这里介绍一下操作方法: 1.可能需要安装sqlserver的插件 [AccessDatabaseEngine],这个可以在网上早,很多. 2.安装插件后,右 ...

  5. 基于Linux系统的Nagios网络管理模块的实现

    基于Linux 系统的Nagios网络管理模块的实现 1.引言 随着计算机网络的普及,网络管理已成为信息时代中最重要的问题之一.在现有的技术条件下,人们希望有一个更加稳定可靠的网络环境.计算机网络管理 ...

  6. Oracle实现数据不存在则插入,数据存在则更新(insert or update)

    思路是写一个函数,先按条件查询数据,假设查询到数据则更新.假设没有查询到数据则插入: create or replace function fn_merge_index(statdate in dat ...

  7. 安卓手机运行WINDOWS

    http://www.pcdiy.com.tw/detail/1974 我的ZenFone 2手机可以跑Windows啦! 就在台风来袭,有人正准备去泛舟的那天,国外的XDA论坛神人则是选择让自己的Z ...

  8. 如何让Apache不显示服务器信息

    如何让Apache不显示服务器信息 Apache的默认配置是会显示服务器信息的,比如访问一个服务器上不存在的页面,Apache会返回"Not Found"的错误,这个错误页面的最下 ...

  9. libiconv 支持的编码

    libiconv 支持的编码 php 中的 iconv() 函数常用来作编码转换用.作一些不同编码的动态数据的转换时常遇到一些未知编码的数据,这时 iconv() 支持那些编码转换就很重要. 刚开始, ...

  10. 编译安装PHP-7.2.8

    一 下载并软件包 wget http://124.205.69.169/files/A218000006E9730A/cn2.php.net/distributions/php-7.2.8.tar.g ...