US20010011338A1 - System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system - Google Patents

System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system Download PDF

Info

Publication number
US20010011338A1
US20010011338A1 US09/140,210 US14021098A US2001011338A1 US 20010011338 A1 US20010011338 A1 US 20010011338A1 US 14021098 A US14021098 A US 14021098A US 2001011338 A1 US2001011338 A1 US 2001011338A1
Authority
US
United States
Prior art keywords
memory
heap
application program
free list
data structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
US09/140,210
Other versions
US6412053B2 (en
Inventor
Thomas J. Bonola
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Compaq Information Technologies Group LP
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 Compaq Information Technologies Group LP filed Critical Compaq Information Technologies Group LP
Priority to US09/140,210 priority Critical patent/US6412053B2/en
Assigned to COMPAQ COMPUTER CORPORATION reassignment COMPAQ COMPUTER CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: BONOLA, THOMAS J.
Publication of US20010011338A1 publication Critical patent/US20010011338A1/en
Assigned to COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P. reassignment COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: COMPAQ COMPUTER CORPORATION
Priority to US10/098,398 priority patent/US6625710B2/en
Application granted granted Critical
Publication of US6412053B2 publication Critical patent/US6412053B2/en
Assigned to HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. reassignment HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: COMPAQ INFORMATION TECHNOLOGIES GROUP, LP
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management

Definitions

  • the present invention relates to a computer system using intelligent input-output, and more particularly, to a system and method for providing linearly scalable dynamic memory management in a multiprocessing system.
  • a conventional computer system typically includes one or more central processing units (CPUs) capable of executing various sequential sets of instructions, known as threads.
  • CPUs central processing units
  • threads Historically, a computer system included a single CPU capable of performing a single thread at a given time. Advances in operating systems have provided a technique for sharing a single CPU among multiple threads, known as multitasking. The development of multiprocessing brought computer systems with multiple CPUs, each executing a different thread at the same time.
  • processors In tightly-coupled multiprocessing, by contrast, the operations of the processors are more closely integrated. They typically share memory, and may even have a shared cache. The processors may not be identical to each other, and may or may not execute similar threads. However, they typically share other system resources such as mass storage and input/output (I/O). Moreover, instead of a separate copy of the operating system for each processor, they typically run a single copy, with the operating system handling the coordination of threads between the processors. The sharing of system resources makes tightly-coupled multiprocessing less expensive, and it is the dominant multiprocessor architecture in network servers.
  • I/O input/output
  • Hardware architectures for tightly-coupled multiprocessing systems can be further divided into two broad categories.
  • system resources such as memory and disk input/output are shared by all the microprocessors in the system.
  • the workload is distributed evenly to available processors so that one does not sit idle while another is loaded with a specific thread.
  • the performance of SMP systems generally increases for all threads as more processor units are added.
  • a common problem with multiprocessing occurs when more than one thread attempts to read or write to a common or shared memory.
  • Those skilled in the art will recognize the data corruption that would occur if one thread were to read a set of memory locations while another thread were to write to the same set of memory locations.
  • Common memory locations that are frequently accessed by various threads are the heap data structure and the free list.
  • a heap is a portion of memory that is divided into smaller partitions. Each partition is allocatable on demand to store data for the need of particular threads. Once the data stored in the partition is no longer needed by the thread, the partition is returned to the heap.
  • the heap data structure and the free list keep track of which partitions are allocated to the various threads, and which partitions are unallocated.
  • the heap data structure and free list are accessed to assign an unallocated partition of the heap to the thread.
  • the partition of memory is returned to the heap.
  • the heap data structure and free list are updated to reflect that the partition of memory is now unallocated.
  • the management of concurrent threads is performed by the operating system of the computer system which allocates various resources among various threads.
  • the threads accessing the heap data structure and free list are synchronized by the operating system.
  • a thread makes a call into the operating system.
  • the actual access is performed at the operating system level. Consequently, by accessing heap data structure and free list at the operating system level, the accesses by each thread can be synchronized to prevent more than one thread from accessing the heap data structure and free list at the same time.
  • the operating system prevents simultaneous access to the heap data structure and free list by using spinlocks and interrupt masks. While accessing the heap data structure and free list through calls to the operating system prevents simultaneous access by the various threads, there are a number of associated drawbacks.
  • the use of spinlocks and interrupt masking requires threads to wait while another thread is accessing the heap data structure or free list. Requiring threads to wait while another thread is accessing the heap data structure or free list substantially curtails the benefits of concurrent thread execution. As more CPUs are added, a bottleneck could potentially be created as each thread awaits access to the heap data structure and free list.
  • Another problem occurs because of the transition from the thread to the operating system. Normally, while a thread is being performed, the instructions of the thread are being executed, known as the application mode. When the thread makes a call to the operating system to access the heap data structure or free list, the access is performed at the operating system level, known as the kernel mode. Changing execution modes causes substantial time delays.
  • the present invention is directed to a system and method for dynamically managing memory in a computer system by executing an instruction within an application program causing the application program to access a heap data structure and a free list containing the addresses of unallocated regions of memory, determining the address of an appropriately sized region of memory, and allocating the region of memory to the application program.
  • the present invention is also directed to a method for dynamically deallocating memory in a computer system by causing an application program to place the address of a region of memory in a free list, and modifying an entry in the heap data structure.
  • FIG. 1 is an illustration of a computer system embodying the present invention
  • FIG. 2 is an illustration of an exemplary operating system embodying the present invention
  • FIG. 3 is a diagram of system memory in accordance with the present invention.
  • FIGS. 4A and 4B are diagrams of a heap data structure, a free list, and a heap in accordance with the present invention.
  • FIGS. 5 is a flow chart illustrating the allocation of memory to an application program.
  • FIG. 6 is a flow chart illustrating the deallocation of memory from an application program.
  • FIG. 1 there is illustrated a schematic block diagram of a computer system 100 .
  • computer system 100 is a multiprocessor system and contains multiple host processors 110 , 112 , 114 and 116 ; system memory 119 storing an operating system 118 ; and associated hardware 130 .
  • the associated hardware 130 includes items such as LAN controller 124 , SCSI controller 126 , an audio controller 128 , and a graphics controller 132 .
  • computer system 100 is a multiprocessing computer, it is able to execute multiple threads simultaneously, one for each of the processors therein. Further, it is contemplated that the computer system 100 can operate asymmetrically, symmetrically, or both symmetrically and asymmetrically.
  • FIG. 2 there is illustrated a more detailed block diagram of an exemplary operating system 118 .
  • Applications 202 utilized in a computer system are kept separate from the operating system 118 itself.
  • Operating system 118 runs in a privileged processor mode known as kernel-mode and has access to system data and hardware.
  • Applications 202 run in a non-privileged processor mode known as user mode and have limited access to system data and hardware through a set of tightly controlled application programming interfaces (APIs) 204 .
  • APIs application programming interfaces
  • operating system 118 is a kernel based operating system.
  • Operating system 118 includes subsystems 210 (which operate in user mode), and system or executive services 212 (which operate in kernel mode).
  • Executive services 212 may typically comprise multiple components, such as the I/O manager 214 , the object manager 216 , the security reference monitor 219 , the process manager 220 , the local procedure call facility 222 , the virtual memory manager 224 , the kernel 226 , and the hardware abstraction layer (HAL) 228 .
  • the components that make up the executive services provide basic operating system services to the subsystems 210 and to each other. The components are generally completely independent of one another and communicate through controlled interfaces.
  • the I/O manager 214 manages all input and output for the operating system 118 including the managing of the communications between drivers of the computer system.
  • Object manager 216 is for creating, managing, and deleting executive objects.
  • Security reference monitor 219 is utilized to ensure proper authorization before allowing access to system resources such as memory, I/O devices, files and directories.
  • Process manager 220 manages the creation and deletion of processes by providing a standard set of services for creating and using threads and processes in the context of a particular subsystem environment.
  • Local procedure call facility 222 is message-passing mechanism for controlling communication between the client and server when they are on the same machine.
  • Virtual memory manager 224 maps virtual addresses in the process' address space to physical pages in the computer's memory.
  • kernel 226 is the core of the architecture of operating system 118 and manages the most basic of the operating system functions. It is responsible for thread dispatching, multiprocessor synchronization, and hardware exception handling.
  • the hardware abstraction layer (HAL) 228 is an isolation layer of software that hides, or abstracts, hardware differences from higher layers of the operating systems. Because of the HAL 228 , the different types of hardware 130 all look alike to the operating system 118 , removing the need to specifically tailor the operating system to the hardware 130 with which it communicates. Ideally, the HAL 228 provides routines that allow a single device driver to support the same device on all platforms.
  • HAL routines are called from both the base operating system 218 , including the kernel 226 , and from the device drivers.
  • the HAL 228 enables device drivers to support a wide variety of I/O architectures without having to be extensively modified.
  • the HAL 228 is also responsible for hiding the details of symmetric multiprocessing hardware from the rest of the operating system.
  • An application 202 causes a processor 110 , 112 , 114 or 116 to allocate a portion of memory 119 (see FIG. 1) called a heap by including an instruction, HeapCreate(n).
  • a processor 110 , 112 , 114 or 116 executes the command HeapCreate(n)
  • FIG. 3 a block diagram of the system memory 119 is described. Execution of a HeapCreate (n) command by a processor 110 , 112 , 114 or 116 causes a portion of system memory 119 , or a heap 302 to be created. Associated with the heap 302 is a heap data structure 304 and a Free List 306 . The heap 302 is a continuous portion of system memory 119 that is available for assignment to various different applications 202 . Heap Subportions 302 A can be created from the heap 302 and individually assigned to various applications 202 . The heap 302 is managed according to an algorithm known in the art as the Binary Buddy Algorithm. In accordance with the Binary Buddy Algorithm, all heap subportions 302 A comprise 2 ′′ continuous bytes of memory, wherein N is an integer less than M.
  • the heap data structure 304 comprises an array of up to M+ 1 bits 402 .
  • the bits 402 are numbered starting from M and are sequentially descending until, at the minimum, zero.
  • the free list 306 includes multiple lists 407 for each of the M+ 1 bits 402 in the heap data structure 304 .
  • the M bit M+ 1 bits 402 in the heap data structure 304 is set to 1, while all of the remaining bits of the M+ 1 402 are set to zero.
  • the list 407 corresponding to the M bit contains an entry 408 which is the address of the first byte of the heap 302 .
  • the initial settings of the heap data structure 304 and the free list 306 indicate that the heap 302 contains a region of continuous unassigned memory, 2 m bytes in size, beginning at the address contained in the entry 408 in the free list 306 .
  • heap subregions 302 A are assigned to various applications 202 , the heap 302 will contain regions of assigned memory scattered throughout the heap 302 . Therefore, the unassigned memory in the heap 302 will be non-continuous. Instead, the unassigned memory will comprise a number of regions. Furthermore, because the heap contains 2 m bytes of memory and every region of assigned memory will contain 2 n bytes, where n ⁇ m, the region of unassigned memory will consist of a number of heap subregions 302 A, each containing a number of bytes equal to an integer power of 2.
  • the free list 306 contains lists 407 of entries 408 of every starting address of unassigned heap subregions 302 A- 302 F.
  • the entries 408 are sorted according to the size of the represented heap subregion 302 A- 302 F, such that there is a list of unassigned heap subregions 302 A- 302 F, for each integer power of 2, up to 2 M .
  • Each bit 402 of the heap data structure 304 corresponds to a list in the free list 407 and is set to 1 if the list contains at least entry 408 containing an address of at least one heap subregion 302 A- 302 F.
  • an application program can take a heap subregion 302 A- 302 F of the heap 302 by including an instruction HeapAlloc(X, heapID) where X is the number of bytes required, and heapID is a pointer which will point to the beginning address of the heap at the completion of the instruction.
  • the processor 110 , 112 , 114 , or 116 executes the instruction HeapAlloc(X, heapID) is described.
  • the processor 110 , 112 , 114 , or 116 can then examine the N bit 402 of the heap data structure 304 to determine if there is an appropriately sized heap subregion 302 A- 302 F in the free list 306 (step 502 ).
  • an entry 408 containing an address to a heap subregion 302 A- 302 F from the list 407 corresponding to the N bit 402 (the N list) is removed from the N list 407 (step 503 ).
  • the N list 407 is checked to if the list 407 has become empty (step 504 ).
  • the N bit 402 in the heap data structure 304 is set to zero. In either case, the address of the heap subregion 302 A- 302 F contained in the entry 408 is then assigned to the application 202 .
  • the processor increments N (step 510 ) and begins examining the bits 402 of the heap data structure 304 in ascending order.
  • the value of N is compared to M (step 512 ), and if N exceeds M, then the there is no heap subregion 302 A- 302 F within heap 302 which can accommodate a demand for X bytes of memory from application 202 . Accordingly, the HeapAlloc(X) instruction will fail for the application 202 (step 514 ). So long as N does not exceed M, the N bit 402 of the heap data structure 304 is examined (step 516 ).
  • N is incremented (step 510 ) and the process (step 512 - 516 ) is repeated.
  • step 510 N is incremented
  • step 512 - 516 the process (step 512 - 516 ) is repeated.
  • step 512 the process (step 512 - 516 ) is repeated.
  • step 512 the process (step 512 - 516 ) is repeated.
  • step 512 the process (step 512 - 516 ) is repeated.
  • an N bit 402 is found that is set to 1
  • an entry 408 is removed from the N list 407 , in the free list 306 (step 518 ).
  • the N list 407 is now examined to see if the N list 407 is empty (step 520 ). Where the N list 407 is empty, the N bit 402 is set to zero (step 522 ). In either case, the heap subregion 302 A- 302 F referred to by the entry 408 is divided into two heap subregions. It is noted that dividing a
  • N is decremented (step 530 ).
  • the address of the heap subregion with the higher memory address is entered into the N list 407 of the free list 306 (step 532 ) and the N bit 402 in the heap data structure 302 is set to 1 (step 534 ). If the remaining half of the heap subregion contains twice as much memory as is required by the requesting application, the remaining half of the heap subregion can be further divided in half. On the other hand, if the remaining half of the subregion does not contain more than twice as much memory as is need by the requesting application, the remaining half of the subregion should be assigned.
  • a comparison is performed to see if the remaining half of the heap subregion contains at least twice as much memory as is required (step 536 ). If the remaining half contains more than twice as much memory as is required, the remaining half is further divided in half (step 540 ), and steps 532 - 540 are repeated until a heap subregion is yielded which does not have twice as much memory as is required. The subregion is then assigned to the application (step 542 ).
  • the application 202 When the application 202 is finished using an assigned heap subregion 302 A- 302 F, it can return the heap subregion 302 A- 302 F to the heap 302 by including an instruction HeapFree(heapID, X), where heapID is a pointer which points to the starting address of the heap subregion 302 A- 302 F to be returned, and X is the number of bytes in the heap subregion 302 A- 302 F.
  • HeapFree(heapID, X) where heapID is a pointer which points to the starting address of the heap subregion 302 A- 302 F to be returned, and X is the number of bytes in the heap subregion 302 A- 302 F.
  • the processor 110 , 112 , 114 , or 116 then proceeds to determined whether the N bit 402 is set to 1 (step 604 ).
  • the processor 110 , 112 , 114 , or 116 sets the N bit 402 to 1 (step 606 ) and places the address pointed to by the pointer heapID in the N list 407 (step 608 ), thus completing the instruction. If the N bit 402 is set to 1, (at step 604 ), the processor 110 , 112 , 114 , or 116 proceeds to examine the N list 407 (step 612 ). The processor 110 , 112 , 114 , or 116 examines the entries 408 in the N list 407 to try to find what is known in the art as a “Binary Buddy.” When the heap 302 is first created, the heap 302 contains 2 M continuous bytes of unassigned memory.
  • the heap 302 is progressively partitioned in half, such as in steps 524 and 540 .
  • the two partitions created in steps 524 or 540 are said to be Binary Buddies with respect to each other.
  • the processor 110 , 112 , 114 , or 116 seeks, where possible, to reunite partitions created in steps 524 or 540 .
  • Determining whether a Binary Buddy exists in the N list 407 (step 614 ) can be done in a number of different ways.
  • the address of the Binary Buddy can be recorded in a predetermined address of each subregion 302 A- 302 F at the time of partitioning in step 524 and 540 .
  • the address of the Binary Buddy can be implicitly determined by examining the address of the heap subregion 302 A- 302 F. For example, if a heap 302 containing 2 M bytes begins at an address wherein the M least significant bits in the address are 0, the address of the Binary Buddy for a heap subregion 302 A- 302 F can be determined by setting the N least significant bits of the address to zero and inverting the N+ 1 bit.
  • the N bit 402 in the heap data structure 304 is set to 1 (step 606 ) and the address referred to by heapID is placed in the N list 407 (step 608 ), completing execution of the HeapFree(heapID, X) instruction.
  • step 614 if a Binary Buddy is found (in step 614 ), the entry 408 containing the address of the Binary Buddy is removed from the N list 407 (step 616 ). The N list 407 is checked to see whether it is empty after removing the entry 408 containing the Binary Buddy (step 618 ). If the N list 402 is empty, the N bit 402 is set to zero (step 620 ). In either case, the Binary Buddy and the heap subregion 302 A- 302 F referred to by heapID are combined. The address of the first byte of either heapID or the Binary Buddy, whichever has the lowest address is used as the starting address of the new heap subregion 302 A- 302 F.
  • N is incremented (step 624 ) and the process (steps 612 - 624 ) is repeated for the new heap subregion 302 A- 302 F, until the largest possible heap subregion 302 A 302 F without an unassigned Binary Buddy is placed in the free list 306 .
  • the invention provides an advantageous way to provide dynamic memory management, particularly in multiprocessing environments.
  • Concurrent, non-blocking queues are used to list the available heap subregions which are available for assignment.
  • application programs can concurrently access the heap data structure and the free list instead of having to block other applications.
  • applications can concurrently access the heap data structure and the free list, the bottleneck associated with the allocation of memory in a multiprocessing environment is substantially curtailed.
  • Another benefit of enabling application programs to concurrently access the heap data structure is that there is no longer a need for the operating system to arbitrate contention between two application programs attempting to allocate memory. Accordingly, the performance delay incurred when switching from the user mode of the application program to the kernel mode of the operating system is eliminated.

Abstract

A system and method for dynamically allocating memory in a computer system at the application level. The application examines a heap data structure and a free list, identifies an unallocated region of memory that is appropriately sized, and allocates the memory to the application. The application deallocates a memory region by placing the memory region in the free list and modifying the heap data structure.

Description

    BACKGROUND OF THE INVENTION
  • 1. Field of the Invention [0001]
  • The present invention relates to a computer system using intelligent input-output, and more particularly, to a system and method for providing linearly scalable dynamic memory management in a multiprocessing system. [0002]
  • 2. Description of Related Art [0003]
  • A conventional computer system typically includes one or more central processing units (CPUs) capable of executing various sequential sets of instructions, known as threads. Originally, a computer system included a single CPU capable of performing a single thread at a given time. Advances in operating systems have provided a technique for sharing a single CPU among multiple threads, known as multitasking. The development of multiprocessing brought computer systems with multiple CPUs, each executing a different thread at the same time. [0004]
  • There are many variations on the basic theme of multiprocessing. In general, the differences are related to how independently the various processors operate and how the workload among these processors is distributed. In loosely-coupled multiprocessing, the processors execute related threads, but, they do so as if they were stand-alone processors. Each processor may have its own memory and may even have its own mass storage. Further, each processor typically runs its own copy of an operating system, and communicates with the other processor or processors through a message-passing scheme, much like devices communicating over a local-area network. Loosely-coupled multiprocessing has been widely used in mainframes and minicomputers, but the software to do it is very closely tied to the hardware design. For this reason, it has not gained the support of software vendors, and is not widely used in PC servers. [0005]
  • In tightly-coupled multiprocessing, by contrast, the operations of the processors are more closely integrated. They typically share memory, and may even have a shared cache. The processors may not be identical to each other, and may or may not execute similar threads. However, they typically share other system resources such as mass storage and input/output (I/O). Moreover, instead of a separate copy of the operating system for each processor, they typically run a single copy, with the operating system handling the coordination of threads between the processors. The sharing of system resources makes tightly-coupled multiprocessing less expensive, and it is the dominant multiprocessor architecture in network servers. [0006]
  • Hardware architectures for tightly-coupled multiprocessing systems can be further divided into two broad categories. In symmetrical multiprocessor systems, system resources such as memory and disk input/output are shared by all the microprocessors in the system. The workload is distributed evenly to available processors so that one does not sit idle while another is loaded with a specific thread. The performance of SMP systems generally increases for all threads as more processor units are added. [0007]
  • An important goal in the design of multiprocessing systems is linear scalability. In a completely linearly scalable system, the performance of the system increases linearly with the addition of each CPU. The performance of the system is measured in the number of instructions that the system as a whole completes in a given time. However, in most multiprocessing systems, as the number of CPUs are increased, the performance gain realized by adding an additional CPU decreases and becomes negligible. [0008]
  • A common problem with multiprocessing occurs when more than one thread attempts to read or write to a common or shared memory. Those skilled in the art will recognize the data corruption that would occur if one thread were to read a set of memory locations while another thread were to write to the same set of memory locations. Common memory locations that are frequently accessed by various threads are the heap data structure and the free list. A heap is a portion of memory that is divided into smaller partitions. Each partition is allocatable on demand to store data for the need of particular threads. Once the data stored in the partition is no longer needed by the thread, the partition is returned to the heap. The heap data structure and the free list keep track of which partitions are allocated to the various threads, and which partitions are unallocated. When a thread is in need of memory, the heap data structure and free list are accessed to assign an unallocated partition of the heap to the thread. When the thread is no longer in need of the partition of memory, the partition of memory is returned to the heap. The heap data structure and free list are updated to reflect that the partition of memory is now unallocated. [0009]
  • The management of concurrent threads is performed by the operating system of the computer system which allocates various resources among various threads. The threads accessing the heap data structure and free list are synchronized by the operating system. In order to access the heap data structure and free list, a thread makes a call into the operating system. The actual access is performed at the operating system level. Consequently, by accessing heap data structure and free list at the operating system level, the accesses by each thread can be synchronized to prevent more than one thread from accessing the heap data structure and free list at the same time. [0010]
  • The operating system prevents simultaneous access to the heap data structure and free list by using spinlocks and interrupt masks. While accessing the heap data structure and free list through calls to the operating system prevents simultaneous access by the various threads, there are a number of associated drawbacks. The use of spinlocks and interrupt masking requires threads to wait while another thread is accessing the heap data structure or free list. Requiring threads to wait while another thread is accessing the heap data structure or free list substantially curtails the benefits of concurrent thread execution. As more CPUs are added, a bottleneck could potentially be created as each thread awaits access to the heap data structure and free list. [0011]
  • Another problem occurs because of the transition from the thread to the operating system. Normally, while a thread is being performed, the instructions of the thread are being executed, known as the application mode. When the thread makes a call to the operating system to access the heap data structure or free list, the access is performed at the operating system level, known as the kernel mode. Changing execution modes causes substantial time delays. [0012]
  • SUMMARY OF THE INVENTION
  • The present invention is directed to a system and method for dynamically managing memory in a computer system by executing an instruction within an application program causing the application program to access a heap data structure and a free list containing the addresses of unallocated regions of memory, determining the address of an appropriately sized region of memory, and allocating the region of memory to the application program. [0013]
  • The present invention is also directed to a method for dynamically deallocating memory in a computer system by causing an application program to place the address of a region of memory in a free list, and modifying an entry in the heap data structure. [0014]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • A more complete understanding of the present invention may be had by reference to the following Detailed Description when taken in conjunction with the accompanying drawings wherein: [0015]
  • FIG. 1 is an illustration of a computer system embodying the present invention; [0016]
  • FIG. 2 is an illustration of an exemplary operating system embodying the present invention; [0017]
  • FIG. 3 is a diagram of system memory in accordance with the present invention; [0018]
  • FIGS. 4A and 4B are diagrams of a heap data structure, a free list, and a heap in accordance with the present invention; [0019]
  • FIGS. [0020] 5 is a flow chart illustrating the allocation of memory to an application program; and
  • FIG. 6 is a flow chart illustrating the deallocation of memory from an application program. [0021]
  • DETAILED DESCRIPTION OF THE DRAWINGS
  • The numerous innovative teachings of the present application will be described with particular reference to presently preferred exemplary embodiments. However, it should be understood that this class of embodiments provides only a few examples of the many advantageous uses of the innovative teachings herein. In general, statements made in the specification of the present application do not necessarily delimit any of the various claimed inventions. Moreover, some statements may apply to some inventive features but not to others. [0022]
  • Referring now to the drawings wherein like or similar elements are designated with identical reference numerals throughout the several views, and wherein the various elements depicted are not necessarily drawn to scale, and, in particular to FIG. 1, there is illustrated a schematic block diagram of a [0023] computer system 100. As illustrated, computer system 100 is a multiprocessor system and contains multiple host processors 110, 112, 114 and 116; system memory 119 storing an operating system 118; and associated hardware 130. As depicted, the associated hardware 130 includes items such as LAN controller 124, SCSI controller 126, an audio controller 128, and a graphics controller 132.
  • As [0024] computer system 100 is a multiprocessing computer, it is able to execute multiple threads simultaneously, one for each of the processors therein. Further, it is contemplated that the computer system 100 can operate asymmetrically, symmetrically, or both symmetrically and asymmetrically.
  • Referring now to FIG. 2, there is illustrated a more detailed block diagram of an [0025] exemplary operating system 118. Applications 202 utilized in a computer system are kept separate from the operating system 118 itself. Operating system 118 runs in a privileged processor mode known as kernel-mode and has access to system data and hardware. Applications 202 run in a non-privileged processor mode known as user mode and have limited access to system data and hardware through a set of tightly controlled application programming interfaces (APIs) 204.
  • As depicted, the architecture of [0026] operating system 118 is a kernel based operating system. Operating system 118 includes subsystems 210 (which operate in user mode), and system or executive services 212 (which operate in kernel mode). Executive services 212 may typically comprise multiple components, such as the I/O manager 214, the object manager 216, the security reference monitor 219, the process manager 220, the local procedure call facility 222, the virtual memory manager 224, the kernel 226, and the hardware abstraction layer (HAL) 228. The components that make up the executive services provide basic operating system services to the subsystems 210 and to each other. The components are generally completely independent of one another and communicate through controlled interfaces.
  • Still referring to FIG. 2, the I/[0027] O manager 214 manages all input and output for the operating system 118 including the managing of the communications between drivers of the computer system. Object manager 216 is for creating, managing, and deleting executive objects. Security reference monitor 219 is utilized to ensure proper authorization before allowing access to system resources such as memory, I/O devices, files and directories. Process manager 220 manages the creation and deletion of processes by providing a standard set of services for creating and using threads and processes in the context of a particular subsystem environment. Local procedure call facility 222 is message-passing mechanism for controlling communication between the client and server when they are on the same machine. Virtual memory manager 224 maps virtual addresses in the process' address space to physical pages in the computer's memory.
  • With further reference to FIG. 2, [0028] kernel 226 is the core of the architecture of operating system 118 and manages the most basic of the operating system functions. It is responsible for thread dispatching, multiprocessor synchronization, and hardware exception handling. The hardware abstraction layer (HAL) 228 is an isolation layer of software that hides, or abstracts, hardware differences from higher layers of the operating systems. Because of the HAL 228, the different types of hardware 130 all look alike to the operating system 118, removing the need to specifically tailor the operating system to the hardware 130 with which it communicates. Ideally, the HAL 228 provides routines that allow a single device driver to support the same device on all platforms. HAL routines are called from both the base operating system 218, including the kernel 226, and from the device drivers. The HAL 228 enables device drivers to support a wide variety of I/O architectures without having to be extensively modified. The HAL 228 is also responsible for hiding the details of symmetric multiprocessing hardware from the rest of the operating system.
  • An [0029] application 202 causes a processor 110, 112, 114 or 116 to allocate a portion of memory 119 (see FIG. 1) called a heap by including an instruction, HeapCreate(n). When the processor 110, 112, 114 or 116 executes the command HeapCreate(n), a continuous number of bytes, 2 M, are set aside, wherein M is equal to the lowest integer power of 2 which equals or exceeds n. For example, for HeapCreate(5000), M=13, and a heap 302 containing 2 M or 8192 bytes is set aside.
  • Referring now to FIG. 3 a block diagram of the [0030] system memory 119 is described. Execution of a HeapCreate (n) command by a processor 110, 112, 114 or 116 causes a portion of system memory 119, or a heap 302 to be created. Associated with the heap 302 is a heap data structure 304 and a Free List 306. The heap 302 is a continuous portion of system memory 119 that is available for assignment to various different applications 202. Heap Subportions 302A can be created from the heap 302 and individually assigned to various applications 202. The heap 302 is managed according to an algorithm known in the art as the Binary Buddy Algorithm. In accordance with the Binary Buddy Algorithm, all heap subportions 302A comprise 2″ continuous bytes of memory, wherein N is an integer less than M.
  • Referring now to FIGS. 4A and 4B, more detailed diagrams of the [0031] heap data structure 304, the free list 306, and the heap 302 of FIG. 3 are illustrated. Referring to FIG. 4A, the heap data structure 304 comprises an array of up to M+1 bits 402. The bits 402 are numbered starting from M and are sequentially descending until, at the minimum, zero. The free list 306 includes multiple lists 407 for each of the M+1 bits 402 in the heap data structure 304.
  • When the [0032] heap 302 is first created, the M bit M+1 bits 402 in the heap data structure 304 is set to 1, while all of the remaining bits of the M+1 402 are set to zero. In the free list 306, the list 407 corresponding to the M bit contains an entry 408 which is the address of the first byte of the heap 302. The initial settings of the heap data structure 304 and the free list 306 indicate that the heap 302 contains a region of continuous unassigned memory, 2m bytes in size, beginning at the address contained in the entry 408 in the free list 306.
  • Those skilled in the art will appreciate that as [0033] heap subregions 302A are assigned to various applications 202, the heap 302 will contain regions of assigned memory scattered throughout the heap 302. Therefore, the unassigned memory in the heap 302 will be non-continuous. Instead, the unassigned memory will comprise a number of regions. Furthermore, because the heap contains 2m bytes of memory and every region of assigned memory will contain 2n bytes, where n<m, the region of unassigned memory will consist of a number of heap subregions 302A, each containing a number of bytes equal to an integer power of 2.
  • Referring now to FIG. 4B, the [0034] free list 306 contains lists 407 of entries 408 of every starting address of unassigned heap subregions 302A-302F.
  • The [0035] entries 408 are sorted according to the size of the represented heap subregion 302A-302F, such that there is a list of unassigned heap subregions 302A-302F, for each integer power of 2, up to 2 M. Each bit 402 of the heap data structure 304 corresponds to a list in the free list 407 and is set to 1 if the list contains at least entry 408 containing an address of at least one heap subregion 302A-302F.
  • Accordingly, an application program can take a [0036] heap subregion 302A-302F of the heap 302 by including an instruction HeapAlloc(X, heapID) where X is the number of bytes required, and heapID is a pointer which will point to the beginning address of the heap at the completion of the instruction.
  • Referring now to FIG. 5, the process by which the [0037] processor 110, 112, 114, or 116 (see FIG. 1) executes the instruction HeapAlloc(X, heapID) is described. Referring to FIG. 5A, the processor 110, 112, 114, or 116 begins by determining the lowest power, N, of 2 which equals or exceeds X (step 501). For example, if X=1000, N=10 and 2 10=1024 bytes. The processor 110, 112, 114, or 116 can then examine the N bit 402 of the heap data structure 304 to determine if there is an appropriately sized heap subregion 302A-302F in the free list 306 (step 502). Where the N bit is set, an entry 408 containing an address to a heap subregion 302A-302F from the list 407 corresponding to the N bit 402 (the N list) is removed from the N list 407 (step 503). After removing the entry 408, the N list 407 is checked to if the list 407 has become empty (step 504). When the list has become empty, the N bit 402 in the heap data structure 304 is set to zero. In either case, the address of the heap subregion 302A-302F contained in the entry 408 is then assigned to the application 202.
  • Still referring to FIG. 5, where the [0038] N bit 402 is 0, the processor increments N (step 510) and begins examining the bits 402 of the heap data structure 304 in ascending order. The value of N is compared to M (step 512), and if N exceeds M, then the there is no heap subregion 302A-302F within heap 302 which can accommodate a demand for X bytes of memory from application 202. Accordingly, the HeapAlloc(X) instruction will fail for the application 202 (step 514). So long as N does not exceed M, the N bit 402 of the heap data structure 304 is examined (step 516). If the N bit 402 is not set to 1, N is incremented (step 510) and the process (step 512-516) is repeated. Once an N bit 402 is found that is set to 1, an entry 408 is removed from the N list 407, in the free list 306 (step 518). The N list 407 is now examined to see if the N list 407 is empty (step 520). Where the N list 407 is empty, the N bit 402 is set to zero (step 522). In either case, the heap subregion 302A-302F referred to by the entry 408 is divided into two heap subregions. It is noted that dividing a region of memory consisting of 2N bytes in half will yield two regions of memory, each containing 2N-1 bytes.
  • Still referring to FIG. 5, N is decremented (step [0039] 530). The address of the heap subregion with the higher memory address is entered into the N list 407 of the free list 306 (step 532) and the N bit 402 in the heap data structure 302 is set to 1 (step 534). If the remaining half of the heap subregion contains twice as much memory as is required by the requesting application, the remaining half of the heap subregion can be further divided in half. On the other hand, if the remaining half of the subregion does not contain more than twice as much memory as is need by the requesting application, the remaining half of the subregion should be assigned. Accordingly, a comparison is performed to see if the remaining half of the heap subregion contains at least twice as much memory as is required (step 536). If the remaining half contains more than twice as much memory as is required, the remaining half is further divided in half (step 540), and steps 532-540 are repeated until a heap subregion is yielded which does not have twice as much memory as is required. The subregion is then assigned to the application (step 542).
  • When the [0040] application 202 is finished using an assigned heap subregion 302A-302F, it can return the heap subregion 302A-302F to the heap 302 by including an instruction HeapFree(heapID, X), where heapID is a pointer which points to the starting address of the heap subregion 302A-302F to be returned, and X is the number of bytes in the heap subregion 302A-302F.
  • Referring now to FIG. 6, the process by which the [0041] processor 110, 112, 114, or 116 executes the instruction HeapFree(heapID, X) is described. The processor 110, 112, 114, or 116 begins by determining an integer, N. such that 2 N=X (step 602). The processor 110, 112, 114, or 116 then proceeds to determined whether the N bit 402 is set to 1 (step 604). Where the N bit 402 is set to zero, the processor 110, 112, 114, or 116 sets the N bit 402 to 1 (step 606) and places the address pointed to by the pointer heapID in the N list 407 (step 608), thus completing the instruction. If the N bit 402 is set to 1, (at step 604), the processor 110, 112, 114, or 116 proceeds to examine the N list 407 (step 612). The processor 110, 112, 114, or 116 examines the entries 408 in the N list 407 to try to find what is known in the art as a “Binary Buddy.” When the heap 302 is first created, the heap 302 contains 2M continuous bytes of unassigned memory.
  • As applications request assignment of memory, the [0042] heap 302 is progressively partitioned in half, such as in steps 524 and 540. The two partitions created in steps 524 or 540 are said to be Binary Buddies with respect to each other. In accordance with the Binary Buddy Algorithm, the processor 110, 112, 114, or 116 seeks, where possible, to reunite partitions created in steps 524 or 540. Determining whether a Binary Buddy exists in the N list 407 (step 614) can be done in a number of different ways. In one embodiment, the address of the Binary Buddy can be recorded in a predetermined address of each subregion 302A-302F at the time of partitioning in step 524 and 540. In another embodiment, the address of the Binary Buddy can be implicitly determined by examining the address of the heap subregion 302A-302F. For example, if a heap 302 containing 2M bytes begins at an address wherein the M least significant bits in the address are 0, the address of the Binary Buddy for a heap subregion 302A-302F can be determined by setting the N least significant bits of the address to zero and inverting the N+1 bit.
  • If the Binary Buddy is not found, the [0043] N bit 402 in the heap data structure 304 is set to 1 (step 606) and the address referred to by heapID is placed in the N list 407 (step 608), completing execution of the HeapFree(heapID, X) instruction.
  • On the other hand, if a Binary Buddy is found (in step [0044] 614), the entry 408 containing the address of the Binary Buddy is removed from the N list 407 (step 616). The N list 407 is checked to see whether it is empty after removing the entry 408 containing the Binary Buddy (step 618). If the N list 402 is empty, the N bit 402 is set to zero (step 620). In either case, the Binary Buddy and the heap subregion 302A-302F referred to by heapID are combined. The address of the first byte of either heapID or the Binary Buddy, whichever has the lowest address is used as the starting address of the new heap subregion 302A-302F. The value of N is incremented (step 624) and the process (steps 612-624) is repeated for the new heap subregion 302A-302F, until the largest possible heap subregion 302A 302F without an unassigned Binary Buddy is placed in the free list 306.
  • Based on the foregoing, those skilled in the art should now understand and appreciate that the invention provides an advantageous way to provide dynamic memory management, particularly in multiprocessing environments. Concurrent, non-blocking queues are used to list the available heap subregions which are available for assignment. Accordingly, application programs can concurrently access the heap data structure and the free list instead of having to block other applications. Because applications can concurrently access the heap data structure and the free list, the bottleneck associated with the allocation of memory in a multiprocessing environment is substantially curtailed. Another benefit of enabling application programs to concurrently access the heap data structure is that there is no longer a need for the operating system to arbitrate contention between two application programs attempting to allocate memory. Accordingly, the performance delay incurred when switching from the user mode of the application program to the kernel mode of the operating system is eliminated. [0045]
  • As will be recognized by those skilled in the art, the innovative concepts described in the present application can be modified and varied over a wide range of applications. Accordingly, the scope of the present invention should not be limited to any of the specific exemplary teachings discussed, but is only limited by the following claims. [0046]

Claims (10)

What is claimed is:
1. In a computer system comprising an operating system, at least one application program, and system memory, a method for allocating the system memory, said method comprising the steps of:
finding a portion of said system memory comprising at least a predetermined amount of memory, by said application program; and
allocating said predetermined amount of memory within said portion to said application program.
2. The method of
claim 1
, wherein said finding step further comprises the step of accessing a heap data structure by said application program.
3. The method of
claim 1
, wherein said finding step further comprises the step of accessing a free list by said application program.
4. The method of
claim 1
, wherein said allocating step further comprises the steps of:
comparing said portion to said predetermined amount of memory; and
dividing said portion into two half-portions, wherein said portion comprises at least twice as much memory as said predetermined amount.
5. The method of
claim 4
, wherein said allocating step further comprises the step of recording the address of at least one of said half-portions in a free list.
6. In a computer system comprising an operating system, an application program, and system memory, a system for allocating said system memory comprising:
a heap data structure for listing a size of at least one unallocated portion of said system memory;
a free list for listing at least one address of said at least one unallocated portion of said system memory; and
means for accessing said free list and said heap data structure by said application program, wherein said computer system includes a motherboard, and wherein at least part of said system is off said motherboard.
7. The system of
claim 6
, wherein said free list lists a plurality of addresses, wherein each of said plurality of addresses corresponds to a unallocated portion of said system memory, said plurality of addresses sorted by the size of said corresponding unallocated portion.
8. The system of
claim 6
, wherein said application program comprises a particular executable instruction, and wherein said means for accessing comprises said particular executable instruction.
9. In a computer system comprising an operating system, a system memory, and an application program associated with a portion of said system memory, a method for disassociating said portion of said system memory from the application program, said method comprising the steps of:
placing, by said application program, an address corresponding to said portion in a free list; and
modifying an entry in a heap data structure, said entry corresponding to a size, said size equal to the size of said portion.
10. The method of
claim 9
, wherein said free list comprises a plurality of addresses, and wherein said placing step further comprises:
examining said plurality of addresses in said free list by said application program; and
selectively combining said portion with a second portion corresponding with at least one of said plurality of addresses.
US09/140,210 1998-08-26 1998-08-26 System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system Expired - Fee Related US6412053B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US09/140,210 US6412053B2 (en) 1998-08-26 1998-08-26 System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US10/098,398 US6625710B2 (en) 1998-08-26 2002-03-15 System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/140,210 US6412053B2 (en) 1998-08-26 1998-08-26 System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US10/098,398 Continuation US6625710B2 (en) 1998-08-26 2002-03-15 System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system

Publications (2)

Publication Number Publication Date
US20010011338A1 true US20010011338A1 (en) 2001-08-02
US6412053B2 US6412053B2 (en) 2002-06-25

Family

ID=22490214

Family Applications (2)

Application Number Title Priority Date Filing Date
US09/140,210 Expired - Fee Related US6412053B2 (en) 1998-08-26 1998-08-26 System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US10/098,398 Expired - Fee Related US6625710B2 (en) 1998-08-26 2002-03-15 System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system

Family Applications After (1)

Application Number Title Priority Date Filing Date
US10/098,398 Expired - Fee Related US6625710B2 (en) 1998-08-26 2002-03-15 System, method, and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system

Country Status (1)

Country Link
US (2) US6412053B2 (en)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020016878A1 (en) * 2000-07-26 2002-02-07 Flores Jose L. Technique for guaranteeing the availability of per thread storage in a distributed computing environment
US20050071595A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation Methods and apparatus for allocating memory
US20070083726A1 (en) * 2003-10-13 2007-04-12 Koninklijke Philips Electronics N.V. Storage allocation per application
US20070156997A1 (en) * 2004-02-13 2007-07-05 Ivan Boule Memory allocation
US20090043971A1 (en) * 2003-09-26 2009-02-12 Ximeta Technology, Inc. Data integrity for data storage devices shared by multiple hosts via a network
US20130254512A1 (en) * 2012-03-23 2013-09-26 Kabushiki Kaisha Toshiba Memory management method and information processing device

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6804763B1 (en) * 2000-10-17 2004-10-12 Igt High performance battery backed ram interface
US7111141B2 (en) * 2000-10-17 2006-09-19 Igt Dynamic NV-RAM
US8550922B2 (en) * 2006-03-03 2013-10-08 Igt Game removal with game history
US7076629B2 (en) * 2001-12-26 2006-07-11 Bonola Thomas J Method for providing concurrent non-blocking heap memory management for fixed sized blocks
JP2003196553A (en) * 2001-12-27 2003-07-11 Seiko Epson Corp Member administration server system, program therefor, and member administration method
US20040131055A1 (en) * 2003-01-06 2004-07-08 Juan-Carlos Calderon Memory management free pointer pool
TWI229817B (en) * 2003-01-07 2005-03-21 Wistron Corp Kernel-mode operating system of application program and method thereof
US7290110B2 (en) * 2003-09-11 2007-10-30 International Business Machines Corporation System and method of squeezing memory slabs empty
US7100009B2 (en) * 2003-09-18 2006-08-29 International Business Machines Corporation Method and system for selective memory coalescing across memory heap boundaries
US7447829B2 (en) 2003-10-15 2008-11-04 International Business Machines Corporation Heap and stack layout for multithreaded processes in a processing system
US7225209B2 (en) * 2003-11-06 2007-05-29 International Business Machines Corporation Computer-implemented method for allocating new additional area for the dataset in storage based on the size of the new additional area wherein if the new area number does not exceed clipping threshold, the size of a new additional area being greater than the size of each previously allocated additional area of the dataset
US7587566B2 (en) * 2004-02-20 2009-09-08 Microsoft Corporation Realtime memory management via locking realtime threads and related data structures
US7716669B2 (en) * 2004-04-30 2010-05-11 Microsoft Corporation Concurrent system applications in a multimedia console
US7951008B2 (en) * 2006-03-03 2011-05-31 Igt Non-volatile memory management technique implemented in a gaming machine
US7610468B2 (en) * 2006-10-26 2009-10-27 Hewlett-Packard Development Company, L.P. Modified buddy system memory allocation
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US20080148002A1 (en) * 2006-12-13 2008-06-19 Fleming Matthew D Method and Apparatus for Allocating A Dynamic Data Structure
US8721458B2 (en) * 2007-11-09 2014-05-13 Wms Gaming Inc. NVRAM management in a wagering game machine
US8108649B2 (en) * 2008-06-13 2012-01-31 International Business Machines Corporation Method of memory management for server-side scripting language runtime system
US9542227B2 (en) * 2012-01-30 2017-01-10 Nvidia Corporation Parallel dynamic memory allocation using a lock-free FIFO
US9417881B2 (en) * 2012-01-30 2016-08-16 Nvidia Corporation Parallel dynamic memory allocation using a lock-free pop-only FIFO
US9195578B2 (en) 2012-08-24 2015-11-24 International Business Machines Corporation Systems, methods and computer program products memory space management for storage class memory
US10318198B2 (en) * 2017-02-23 2019-06-11 Ralph Crittenden Moore Optimizable heap for embedded and similar systems with enhanced debugging and self-healing
US11681625B2 (en) * 2018-12-20 2023-06-20 Intel Corporation Receive buffer management
US11010070B2 (en) * 2019-01-31 2021-05-18 Ralph Crittenden Moore Methods for aligned, MPU region, and very small heap block allocations
US11449419B2 (en) 2020-08-17 2022-09-20 Micron Technology, Inc. Disassociating memory units with a host system

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994002898A1 (en) * 1992-07-24 1994-02-03 Microsoft Corporation Computer method and system for allocating and freeing memory
CA2136154C (en) * 1994-11-18 1999-08-24 Jay William Benayon User control of multiple memory heaps
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
US5949972A (en) * 1996-08-23 1999-09-07 Compuware Corporation System for memory error checking in an executable
US6047280A (en) * 1996-10-25 2000-04-04 Navigation Technologies Corporation Interface layer for navigation system
US5930827A (en) * 1996-12-02 1999-07-27 Intel Corporation Method and apparatus for dynamic memory management by association of free memory blocks using a binary tree organized in an address and size dependent manner
US6076151A (en) * 1997-10-10 2000-06-13 Advanced Micro Devices, Inc. Dynamic memory allocation suitable for stride-based prefetching

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020016878A1 (en) * 2000-07-26 2002-02-07 Flores Jose L. Technique for guaranteeing the availability of per thread storage in a distributed computing environment
US20050071595A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation Methods and apparatus for allocating memory
US20090043971A1 (en) * 2003-09-26 2009-02-12 Ximeta Technology, Inc. Data integrity for data storage devices shared by multiple hosts via a network
US20070083726A1 (en) * 2003-10-13 2007-04-12 Koninklijke Philips Electronics N.V. Storage allocation per application
US20070156997A1 (en) * 2004-02-13 2007-07-05 Ivan Boule Memory allocation
US20130254512A1 (en) * 2012-03-23 2013-09-26 Kabushiki Kaisha Toshiba Memory management method and information processing device

Also Published As

Publication number Publication date
US6412053B2 (en) 2002-06-25
US20020099921A1 (en) 2002-07-25
US6625710B2 (en) 2003-09-23

Similar Documents

Publication Publication Date Title
US6412053B2 (en) System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US4511964A (en) Dynamic physical memory mapping and management of independent programming environments
US5539899A (en) System and method for handling a segmented program in a memory for a multitasking data processing system utilizing paged virtual storage
US7409487B1 (en) Virtualization system for computers that use address space indentifiers
KR100553917B1 (en) Deallocation of computer data in a multithreaded computer
US4914570A (en) Process distribution and sharing system for multiple processor computer system
US8352938B2 (en) System, method and program to migrate a virtual machine
KR920005853B1 (en) Apparatus for controlling input/output operation in virtual memory/visual computer type data processing system
US7921426B2 (en) Inter partition communication within a logical partitioned data processing system
US5675793A (en) Dynamic allocation of a common buffer for use by a set of software routines
US5842226A (en) Virtual memory management for a microkernel system with multiple operating systems
US5897660A (en) Method for managing free physical pages that reduces trashing to improve system performance
US7587566B2 (en) Realtime memory management via locking realtime threads and related data structures
JPH11505653A (en) Operating system for use with protection domains in a single address space
JPH07175698A (en) File system
JP4599172B2 (en) Managing memory by using a free buffer pool
JPH10254756A (en) Use of three-state reference for managing referred object
US6629111B1 (en) Memory allocation system
US8291426B2 (en) Memory allocators corresponding to processor resources
CN111897651B (en) Memory system resource management method based on label
US5671405A (en) Apparatus and method for adaptive logical partitioning of workfile disks for multiple concurrent mergesorts
KR19990013934A (en) Mass memory allocation method and device
US20140289739A1 (en) Allocating and sharing a data object among program instances
Silberschatz et al. Operating systems
US7197620B1 (en) Sparse matrix paging system

Legal Events

Date Code Title Description
AS Assignment

Owner name: COMPAQ COMPUTER CORPORATION, TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BONOLA, THOMAS J.;REEL/FRAME:009417/0412

Effective date: 19980715

AS Assignment

Owner name: COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P., TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:COMPAQ COMPUTER CORPORATION;REEL/FRAME:012470/0701

Effective date: 20010620

AS Assignment

Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS

Free format text: CHANGE OF NAME;ASSIGNOR:COMPAQ INFORMATION TECHNOLOGIES GROUP, LP;REEL/FRAME:015000/0305

Effective date: 20021001

FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

REMI Maintenance fee reminder mailed
LAPS Lapse for failure to pay maintenance fees
STCH Information on status: patent discontinuation

Free format text: PATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362

FP Expired due to failure to pay maintenance fee

Effective date: 20140625