KR20010082033A - 영구적이고 확실한 저장 할당을 위한 시스템 및 방법 - Google Patents
영구적이고 확실한 저장 할당을 위한 시스템 및 방법 Download PDFInfo
- Publication number
- KR20010082033A KR20010082033A KR1020010004535A KR20010004535A KR20010082033A KR 20010082033 A KR20010082033 A KR 20010082033A KR 1020010004535 A KR1020010004535 A KR 1020010004535A KR 20010004535 A KR20010004535 A KR 20010004535A KR 20010082033 A KR20010082033 A KR 20010082033A
- Authority
- KR
- South Korea
- Prior art keywords
- block
- main memory
- storage
- data structure
- memory
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
본 발명에 따라, 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 포함한 메모리 저장 시스템에서 영구 저장기 (persistent storage)를 관리하는 방법은 다수의 블록에 대해 영구 저장기에 헤더 (header)를 포함하는 단계 - 각 블록에 대한 헤더는 블록 크기 및 블록의 할당 상태를 포함함 -, 및 영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계를 포함한다. 저장 블록은 메인 메모리내의 적어도 하나의 데이터 구조를 사용하여 저장 블록을 식별하고, 메인 메모리내의 적어도 하나의 데이터 구조를 수정하고, 또한 디스크에서 블록에 대한 할당 상태를 지정함으로서 할당된다. 저장 블록은 블록에 대해 디스크에서 할당 상태를 지정하고, 메인 메모리내의 적어도 하나의 데이터 구조를 수정함으로서 할당 해제된다.
Description
본 발명은 컴퓨터 저장 방법 및 시스템에 관한 것으로, 특별히 확실한 동적 저장 할당 (dynamic storage allocation)을 위한 방법 및 시스템에 관한 것이다.
다수의 컴퓨터 시스템은 동적으로 저장을 할당할 필요가 있다. 동적 저장 할당은 운영 시스템에 의해 프로그램을 실행하도록 저장을 할당하는데 사용된다. 동적 저장 할당의 다른 예는 웹 (Web) 데이터를 저장하는 웹 서버를 포함한다. 많은 경우에서 요구되는 메모리의 크기는 요구 시간까지 알려지지 않는다. 또한, 동적으로 할당된 블록의 수명도 알려지지 않는다.
메인 메모리에 대해 효과적인 동적 저장 할당 알고리즘을 전개하는데는 상당한 양의 작업이 실행된다. 디스크에 대해 효과적인 동적 저장 할당 알고리즘을 전개하는데는 상당히 적은 양의 작업이 실행된다.
디스크상의 동적 저장 할당은 여러 가지 이유로 중요하다. 많은 경우에서는 시스템의 동작이 정지된 이후에도 지속되는 데이터를 갖는 것이 필수적이다. 디스크 메모리는 또한 고장 방지 (fault-tolerant) 저장을 제공한다; 메인 메모리의 내용이 손실된 상황에서 시스템 충돌 이후에 디스크에 저장된 정보가 때로 보존될 수 있다. 디스크 메모리의 또 다른 이점은 메인 메모리 보다 더 합리적인 가격으로 더 많은 디스크 메모리가 이용가능해질 수 있다는 가능성을 포함한다. 그래서, 이는 메인 메모리에 고정될 수 없는 정보를 저장하는데 사용될 수 있다.
도 1을 참고로, 제1 피트 시스템 (fit system)은 메모리 요구를 만족시키기에 충분히 큰 제1 메모리 블록 (일부 또는 그 모두)을 위치 지정하여 할당한다. "7"의 메모리 요구에 대해, 제1 피트는 요구를 만족시키기 위해 만나게 되는 첫번째 블록이므로 B1을 복귀시킨다. 최상의 피트 시스템은 요구를 만족시키기에 충분히 큰 최소 블록 (일부 또는 그 모두)을 할당한다. 도 1에서는 B3 (8의 용량을 갖는)에서 "7"이 가장 적합하므로 블록 B3가 복귀된다.
도 2를 참고로, 2진수 버디 시스템 (buddy system)에서는 블록 크기가 2의 제곱이다 (예를 들면, 4와 4, 8과 8 등). 다수의 동적 저장 할당기 (dynamic storage allocator, DSA)는 하나 이상의 자유 블록 리스트를 유지한다. 이러한 리스트는 자유 리스트 (free list), 예를 들면 자유 블록의 리스트라 공지된다. 다른 크기의 블록에 대해 분리된 자유 리스트가 존재한다. 다른 크기의 블록을 할당하는 버디 시스템도 또한 존재한다. 동적 저장 할당에 대한 종래 기술의 양호한 개요는 Arun Iyengar의 "동적 저장 할당 알고리즘의 측정성 (Scalability of Dynamic Storage Allocation Algorithms)", Proceedings of IEEE Frontiers' 96, 1996년 10월 및 이 논문의 참고 목록에서 설명된다.
동적 저장 할당기(DSA)는 인접한 자유 블록을 유착시키는데 다른 방법을 사용할 수 있다. 한가지 접근법은 즉각적인 유착을 사용하는 것으로, 여기서는 도 3에 도시된 바와 같이 블록이 할당 해제될 때 할당 해제되는 블록이 부근의 자유 블록과 조합된다. 도 3에서는 블록 크기가 각 블록에 표시된다. 양수 크기는 자유 블록을 나타내고, 음수 크기는 할당된 블록을 나타낸다.
도 4를 참고로, 또 다른 접근법은 유예 유착을 포함한다. 유예 유착이 사용될 때, 인접한 자유 블록은 할당 해제 이후에 자동적으로 조합되지 않는다. 그 대신, 일부 시점에 (예를 들면, 요구를 만족시키기에 충분히 큰 블록의 위치가 지정될 수 없을 때), DSA가 메모리에서 블록을 주사하고, 도 4에 도시된 바와 같이 인접한 것들을 조합하게 된다.
분열은 DSA에 의해 메모리가 낭비된다. 내부 분열은 요구 크기 보다 더 큰 블록으로 요구를 만족시킴으로서 (예를 들면, 크기 32의 블록으로 크기 25의 블록에 대한 요구를 만족시킴으로서) 메모리가 손실된다. 외부 분열은 자유 블록이 할당 블록과 흩어져 있게 될 때 발생된다. 이러한 상황에서는 자유 저장의 최대 인접 블록이 b 바이트 보다 작기 때문에 b 바이트 이상이 자유롭더라도 b 바이트에 대한 할당 요구가 만족될 수 없다.
상기에 언급된 "동적 저장 할당 알고리즘의 측정성"에서 설명된 바와 같이, 다수 자유 리스트 피트 I (multiple free list fit I, MFLF I)은 크기별로 조직된 다수의 자유 리스트를 사용한다. 작은 블록에 대한 자유 리스트는 신속 리스트 (quick list)라 공지된다. 큰 블록에 대한 자유 리스트는 혼합 리스트 (misc list)라 공지된다. 하나의 혼합 리스트가 유지될 때, MFLF I은 신속 피트 (quick fit)라 공지된 저장 할당 시스템으로 변질된다.
도 5를 참고로, 신속 피트 기술이 도시된다. 본 시스템에서는 크기 16까지의 블록에 대해 신속 리스트가 존재한다; 신속 리스트의 수는 다른 요구 분포에 대한 성능을 최적화하도록 변화될 수 있다. 본 예에서, 크기 s (여기서, 2 ≤ s ≤ 16, 2가 최소 블록 크기)의 블록에 대한 할당은 크기 s에 대한 신속 리스트를 조사함으로서 실행된다. 이 리스트가 비어있을 때, 리스트상의 제1 블록은 요구를 만족시키는데 사용된다. 입자 크기의 배수에 대응하는 블록 크기로 신속 리스트를갖는 것이 가능함을 주목한다. 예를 들면, 도 2에서는 입자 크기가 1이다. 입자 크기가 1000이면, 크기 1000, 2000, 3000, ..., 16000의 블록에 대한 신속 리스트 (총 16개의 신속 리스트)가 사용될 수 있다. MFLF I은 유예 유착 방법을 사용한다. 메모리는 도 5에 도시된 바와 같이 작업 저장부(12)와 테일 (tail)(14)로 나뉜다. 작업 저장부(12)는 할당된 블록과 자유 리스트상의 블록을 포함한다. 테일(14)은 메모리의 한 끝부분에 할당되지 않은 저장부의 인접 블록을 포함한다. 먼저, 임의의 것이 할당되기 이전에, 테일(14)은 모든 할당가능한 메모리를 포함하고, 자유 리스트는 비어있다. 자유 리스트는 신속 리스트와 혼합 리스트를 포함하고, 여기서 혼합 리스트는 더 큰 메모리 블록에 사용된다. 블록(13)은 크기를 포함한다 (블록 13에 숫자로 나타내진). 요구가 하나 이상의 자유 리스트를 조사함으로서 만족될 수 없을 때, 요구는 테일(14)로부터 할당됨으로서 만족된다. 테일 포인터 (테일 ptr)는 테일(14)이 시작되는 위치를 나타낸다. 자유 리스트는 할당된 블록이 할당 해제될 때 자리를 차지한다.
신속 리스트에 너무 큰 블록에 대한 요구를 만족시키기 위해, 신속 피트는 혼합 리스트의 제1 피트 탐색을 실행한다. 큰 블록에 대한 탐색은 많은 지시를 요구할 수 있다. 이러한 오버헤드를 감소시키기 위해, MFLF I는 신속 피트로 단일 리스트 대신에, 도 6에 도시된 바와 같이, 다수의 혼합 리스트를 사용할 수 있다. 도 6에서, 혼합 리스트는 크기 17-25의 블록 13에 존재하고, 또 다른 것은 크기 26-40의 블록 13에 존재하고, 또 다른 것은 크기 41-60의 블록에 존재한다. 요구를 만족시키기 위해서는 MFLF I을 사용하여 "84"를 할당하는 도 7a 및 도 7b에 도시된 것을 포함하여, 다양한 전략이 사용될 수 있다. 도 7a는 84를 할당하는 요구가 만족될 때 메모리의 "이전" 단면을 도시하고, 도 7b는 "이후" 단면을 도시한다. 도 7a 및 도 7b에서, 시스템은 크기 "90"의 블록을 분할하여 크기 "6"의 여분을 자유 리스트에 복귀시킴으로서 요구를 만족시키도록 리스트 L2에 제1 블록을 할당한다. L2에 허용된 최소 블록의 크기가 89이기 때문에, 시스템은 L1 대신에 L2를 조사한다. 그러므로, 89 보다 작거나 같은 크기의 요구를 만족시키기 위해 L2의 제1 블록을 넘어 탐색할 필요가 없다.
비록 상기에 설명된 기술이 많은 응용에서 충분하지만, 디스크 시스템에 메인-메모리 동적 저장 할당 알고리즘을 직접적으로 적응시키면, 디스크에 억세스하고 기록하는 잠재기가 메인 메모리에 대한 것 보다 훨씬 더 크기 때문에, 때로는 열악한 성능을 제공하게 된다.
그러므로, 디스크에 대한 억세스 및 기록의 회수를 감소시키는 디스크 메모리에 대한 동적 저장 방법이 존재할 필요가 있다. 또한, 보다 효과적인 저장 및 보다 신속한 억세스 시간을 제공하는 메모리 할당 및 할당 해제 방법이 존재할 필요가 있다.
도 1은 제1 피트 할당 (fit allocation) 및 최상의 피트 할당을 도시하는 도면.
도 2는 종래 기술에 따른 이진수 버디 시스템 (binary buddy system)을 도시하는 도면.
도 3은 메모리 블록의 즉각적인 유착을 도시하는 도면.
도 4는 메모리 블록의 유예 유착을 도시하는 도면.
도 5는 종래 기술에 따른 특별한 경우의 다수 자유 리스트 피트 (multiple free list fitting)에 대해 신속 피트 (Quick fit)의 예를 도시하는 도면.
도 6은 종래 기술에 따른 다수 자유 리스트 피트 (MFLF I)의 예를 도시하는 도면.
도 7a 및 도 7b는 종래 기술에 따른 MFLF I을 사용하는 큰 블록의 할당예에서 전후의 단편을 도시하는 도면.
도 8은 본 발명에 따른 다수 자유 리스트 피트 할당 (MFLF III)을 도시하는 블록 흐름도.
도 9는 본 발명에 따른 큰 블록의 다수 자유 리스트 피트 (MFLF III) 할당을도시하는 블록 흐름도.
도 10은 본 발명에 따른 인접한 자유 블록의 유착을 도시하는 블록 흐름도.
도 11은 본 발명에 따른 메모리 관리 방법 I을 사용하는 할당을 도시하는 블록 흐름도.
도 12는 본 발명에 따른 메모리 관리 방법 I을 사용하는 할당 해제 (deallocation)을 도시하는 블록 흐름도.
도 13은 본 발명에 따른 메모리 관리 방법 II을 설명하는 블록 흐름도.
도 14는 본 발명에 따른 메모리 관리 방법 II의 예를 도시하는 도면.
도 15는 본 발명에 따른 메모리 관리 방법 III을 설명하는 블록 흐름도.
도 16은 본 발명에 따른 메모리 관리 방법 III의 예를 도시하는 도면.
도 17은 본 발명에 따른 메모리 관리 방법 IV을 설명하는 블록 흐름도.
도 18은 본 발명에 따라 테일 (tail) 할당 및 할당 해제를 관리하는 블록 흐름도.
도 19는 본 발명 대 종래 기술의 한 실시예에 대한 테스트 결과를 도시하는 그래프.
도 20은 본 발명 대 종래 기술의 한 실시예에 대한 테스트 결과를 도시하는 또 다른 그래프.
본 발명에 따라 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 포함하는 메모리 저장 시스템에서 영구 저장기(persistent storage)를 관리하는 방법은, 다수의 블록에 대해 상기 영구 저장기에 헤더(header)를 유지하는 단계 - 각블록에 대한 헤더는 블록 크기 및 블록의 할당 상태를 포함함 -와, 영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계를 포함한다. 저장 블록은 상기 메인 메모리 내의 상기 적어도 하나의 데이터 구조를 사용하여 상기 저장 블록을 식별하고, 상기 메인 메모리 내의 상기 적어도 하나의 데이터 구조를 수정하고, 디스크 상의 상기 블록에 대한 할당 상태를 지정함으로써, 할당된다. 저장 블록은 디스크 상의 할당 상태를 지정하고 메인 메모리 내의 상기 적어도 하나의 데이터를 수정함으로써 할당 해제 된다.
다른 방법으로, 상기 방법은 상기 영구 저장기에서 다수의 헤더로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함할 수도 있다. 상기 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계는 단일 디스크 억세스가 다수의 바이트로 판독하는 적어도 하나의 상기 영구 메모리의 디스크 억세스를 포함할 수도 있다. 상기 방법은 시스템 정지 이전에 상기 메인 메모리 내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계와, 출력된 상기 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함할 수도 있다. 상기 영구 저장기에 헤더를 유지하는 단계는 상기 영구 저장기에서 인접한 영역에 저장된 다수의 헤더를 제공하는 단계를 포함할 수도 있다. 상기 영구 저장기에 헤더를 유지하는 단계는 상기 영구 저장기 내의 한 위치를 지시하는 포인터 필드(pointer field)를 갖는 헤더를 유지하는 단계를 포함할 수도 있다. 상기 방법은 상기 헤더 내의 포인터 필드를 사용하여 상기 영구 저장기에 블록의 리스트 (list)를 유지하는 단계와 상기 블록 리스트의 헤드에 대해 상기 메인 메모리에 적어도 하나의 현재 포인터를 유지하는 단계를 더 포함할 수도 있다.
또다른 방법으로, 상기 영구 저장기에서 새로운 블록을 생성하는 단계와, 상기 메인 메모리에서 상기 적어도 하나의 현재 포인터의 값 p로 상기 새로운 블록에 대한 상기 영구 저장기내의 포인터 필드를 설정하는 단계와, 상기 p를 상기 새로운 블록에 설정하는 단계가 포함될 수도 있다. 상기 새로운 블록에 대한 헤더는 단일 블록 기록을 사용하여 초기화될 수도 있다. 상기 방법은 상기 메인 메모리내의 상기 적어도 하나의 현재 포인터로부터 상기 리스트에 대응하는 영구 저장기에서 적어도 하나의 헤드를 주기적으로 업데이트하는 단계를 포함할 수도 있다. 상기 리스트는 다수의 리스트를 포함하고, 상기 리스트는 또한 상기 영구 저장기에서 인접하게 유지되는 상기 다수의 리스트에 대응하는 헤드를 포함할 수도 있고, 상기 방법은 상기 헤드를 단일 블록 기록으로 업데이트하는 단계를 더 포함할 수도 있다. 상기 제1 저장 블록 및 상기 제2 저장 블록은 동일한 블록을 포함할 수도 있다.
메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 갖춘 메모리 저장 시스템에서 영구 저장기를 관리하는 방법은 다수의 블록에 대해 상기 영구 저장기에 헤더를 유지하는 단계 - 각 블록에 대한 헤더는 블록 크기 및 블록의 할당 상태 및 포인터를 포함함 -와, 상기 영구 저장기를 할당 및 할당 해제하도록 상기 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계와, 상기 다수의 블록 중 제1 저장 블록을 할당하는 단계를 포함한다. 상기 할당 단계는 상기 메인 메모리내의상기 적어도 하나의 데이터 구조를 사용하여 제1 저장 블록을 식별하는 단계와, 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하여 상기 영구 저장기에서 상기 제1 저장 블록에 대한 할당 상태를 지정하는 단계와, 상기 영구 저장기에서 제2 저장 블록에 대한 할당 상태를 지정함으로서 상기 다수의 블록 중 상기 제2 저장 블록을 할당 해제하는 단계와, 상기 제2 저장 블록에 대해 상기 디스크 상의 포인터 필드를 업데이트하는 단계와, 상기 메인 메모리 내의 상기 적어도 하나의 데이터 구조를 수정하는 단계를 포함한다.
다른 방법으로, 상기 헤더내의 포인터 필드를 사용하여 상기 영구 저장기에 블록의 리스트를 유지하는 단계와, 상기 블록 리스트의 헤드에 대해 상기 메인 메모리에 적어도 하나의 현재 포인터를 유지하는 단계가 포함될 수도 있다. 상기 방법은 시스템의 작동 실패에 응답하여, 할당된 블록을 제거하도록 상기 블록의 리스트를 조사하는 단계를 포함할 수도 있다.
상기 방법은 상기 블록의 리스트에서 자유 블록(free block)이 발견될 때 상기 조사하는 단계를 종료하는 단계를 포함할 수도 있다. 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조는 상기 영구 저장기에서 상기 블록의 리스트에 대응하는 적어도 하나의 자유 블록 리스트를 포함할 수도 있다. 상기 방법은 상기 메인 메모리 내의 상기 적어도 하나의 현재 포인터로부터 상기 블록 리스트에 대응하는 상기 영구 저장기에서 적어도 하나의 헤드를 주기적으로 업데이트하는 단계를 더 포함할 수도 있다. 상기 블록의 리스트는 다수의 리스트 및 상기 영구 저장기에서 인접하게 유지되는 헤드를 포함하고, 상기 헤드를 단일 블록 기록으로 업데이트하는 단계를 더 포함할 수도 있다.
다른 방법으로, 상기 포인터 필드를 업데이트하는 단계는 상기 메인 메모리에서 적어도 하나의 자유 블록 리스트 L의 헤드로 상기 포인터 필드내의 포인터를 설정하는 단계를 포함할 수도 있고, 상기 할당 해제하는 단계는 상기 메인 메모리에서 상기 L의 헤드에 상기 제2 저장 블록을 부가하는 단계를 더 포함할 수도 있다. 상기 제2 저장 블록에 대한 헤더는 단일 블록 기록을 사용하여 업데이트될 수도 있다. 상기 방법은 상기 영구 저장기에서 다수의 헤더로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함할 수도 있다. 상기 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계는 단일 디스크 억세스가 다수의 바이트로 판독하는 디스크를 억세스하는 단계를 포함할 수도 있다. 상기 방법은 시스템 정지 이전에 상기 메인 메모리 내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계와, 출력된 상기 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함할 수도 있다. 상기 방법은 상기 영구 저장기에서 인접한 영역에 다수의 헤더를 저장하는 단계를 포함할 수도 있다. 상기 제1 저장 블록 및 상기 제2 저장 블록은 동일한 블록을 포함할 수도 있다.
영구적인 저장 시스템에서 메모리를 관리하는 또다른 방법은 영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계와, 상기 영구 저장기에 억세스하거나 기록하지 않고 상기 적어도 하나의 데이터구조로부터 전체적으로 상기 영구 저장기를 할당 및 할당 해제하는 단계와, 상기 영구 저장기에 대한 저장 할당 정보를 주기적으로 점검하는 단계와, 상기 점검된 정보로부터 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함한다.
영구적인 저장 시스템에서 메모리를 관리하는 또다른 방법은 영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계와, 상기 영구 저장기에 억세스하거나 기록하지 않고 상기 적어도 하나의 데이터 구조로부터 전체적으로 상기 영구 저장기를 할당 및 할당 해제하는 단계와, 시스템 정지 이전에 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계와, 상기 출력된 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함한다.
상기 방법들 및 여기에서 설명한 방법 단계들은 기계에 의해 판독가능하고, 상기 기계에 의해 실행가능한 지시의 프로그램 저장 디바이스 상에서 구현되어 상술된 방법 단계들을 실행할 수도 있다.
본 발명의 이러한 목적과 다른 목적, 특성, 및 이점들은 첨부된 도면과 연관되어 이해될 실시예에 대한 다음의 상세한 설명으로부터 명확해질 것이다.
본 발명은 도면을 참조하여 다음의 바람직한 실시예의 다음 설명에서 상세히 설명될 것이다.
본 발명은 메모리 관리 및 할당 시스템과 방법에 관련된다. 그 시스템 및방법은 종래 기술의 시스템 및 방법 보다 개선된 성능을 제공하고, 본 발명은 특히 디스크 메모리에 유용하다. 디스크상에 정보를 영구적으로 저장하기 위한 종래의 기술은 파일 시스템 및 데이터베이스의 사용을 포함한다.
본 발명에 의해, 정보는 종래 기술을 사용했던 것 보다 훨씬 더 적은 오버헤드를 사용하여 디스크상에 저장될 수 있다. 또한, 본 발명을 사용함으로서, 많은 수의 객체 (object)가 저장될 수 있다. 많은 파일 시스템은 디렉토리 (directory)에 저장될 수 있는 파일의 수에 의해 제한된다; 본 발명에서는 저장되는 객체의 수에 대한 제한이 없다.
한 실시예에서는 여분 저장 공간을 현저하게 낭비하지 않고 블록의 분할을 최소화하도록 설계된 방법이 제공된다. 본 발명의 용도는 디스크 할당 및 메인 메모리 할당에 모두 확장된다.
본 발명은 MFLF I와 유사성을 갖는 새롭고 유용한 동적 저장 할당 방법을 제공하지만, 메모리 관리 및 디스크 성능면에서 많이 개선되는 수정 부분을 포함한다. 한가지 수정되는 것으로 블록 분할수의 감소가 포함된다. 블록 분할수의 감소는 예를 들어, 디스크 할당과 같이 블록을 분할하는 것이 바람직하지 않을 때 보다 중요해진다.
도 8 내지 도 19에 도시된 소자는 하드웨어, 소프트웨어, 또는 그들이 조합되는 다양한 형태로 실시될 수 있는 것으로 이해되어야 한다. 바람직하게, 일부 소자는 프로세서와 메모리 및 입력/출력 인터페이스를 갖는 적절하게 프로그램된 하나 이상의 범용 디지털 컴퓨터에서 저장 디바이스로 실시된다.
본 발명의 설명에서, 종래 기술에 숙련된 자는 여기서 이후 설명될 바와 같이 본 발명을 사용하는데 공통적으로 사용되는 다수의 저장 할당 알고리즘을 적응시킬 수 있는 것으로 이해되어야 한다. 그러므로, 본 발명은 다음의 실시예에 의해 설명되는 것이지, 본 발명을 제한하는 것으로 구성되지 말아야 한다. 본 발명에서 사용되는 메모리에서, 메인 메모리는 랜덤 억세스 메모리 (random access memory) 또는 캐시 메모리 (cache memory)와 같은 휘발성 메모리 (volatile memory)를 칭하지만, 다른 메모리 종류가 사용될 수 있다. 디스크 또는 디스크 메모리는 하드 디스크, 플로피 디스크, 컴팩트 디스크, DVD, 디스크 어레이, 및 다른 용구 저장 디바이스를 포함하는 영구 메모리 (persistent memory)를 칭한다.
상기에 설명된 바와 같이, MFLF I은 때로 할당하는 동안 자유 블록을 분할하여, 블록 일부를 할당하고 다른 부분을 자유 저장기로 복귀한다. 본 발명은 유리하게 MFLF I과 비교하여 분할되는 블록의 수를 감소시킨다. 블록을 분할하는 것이 추가 디스크 동작 (여기서 동작은 기록 또는 판독)을 일으킬 수 있기 때문에, 이는 디스크 저장기를 할당하는데 중요한 매개변수가 된다. 그러므로, 본 발명은 블록을 할당할 때 MFLF I 보다 덜 분할된다. 본 발명은 디스크 메모리 뿐만 아니라 메인 메모리를 할당하는데도 사용될 수 있다.
이제는 동일한 참고번호가 똑같거나 유사한 소자를 나타내는 도면 중에서 먼저 도 8 및 도 9를 참고로, 디스크의 할당 및 저장 관리에 대한 시스템/방법을 도시하는 블록도가 도시된다. 리스트 (예를 들면, 신속 리스트 (quick list), 혼합 리스트 (misc list), 또는 자유 리스트 (free list))는 통상적으로 리스트에 저장될 수 있는 최대 블록 및 최소 블록을 나타내는 최소 (min) 및 최대 (max) 크기를 갖는다 (입자 크기가 1인 신속 리스트에서 min 및 max 크기는 동일하다). 최대 블블록 크기를 갖는 시스템에서, 최종 혼합 리스트의 max 크기는 최대 블록 크기가 된다. 최대 블록 크기를 갖지 않는 시스템에서, 최종 혼합 리스크는 max 크기를 갖지 않는다.
요구 크기를 s라 놓는다. 박스(807)에서는 가장 큰 블록을 저장하는 리스트에 대해 s > min 크기인가를 결정한다. 그런 경우, 처리는 도 9의 박스(905)로 계속된다. 그렇지 않은 경우, 처리는 박스(805)로 계속된다. 가장 작은 min 크기, lmin ≥ s인 리스트 L이 선택된다. 리스트 선택에는 또한 다른 기준이 사용될 수 있다. 처리는 박스(810)로 계속된다. 박스(810)에서는 리스트 L이 비었있는가를 결정한다. 그런 경우, 박스(815)에서, 크기 lmin의 블록은 테일로부터 할당되어 요구를 만족시키는데 사용된다. 리스트 L이 비어있지 않으면, 박스(820)에서, 리스트 L로부터의 제1 블록은 메모리 블록을 분할하지 않고 그 요구를 만족시키는데 사용된다. 리스트 L이 다른 크기의 블록을 포함할 때는 더 나은 피트 (fit) 블록을 구하도록 또한/또는 할당에 선택된 블록을 분할하여 내부 분열을 감소시키도록 종래 기술로의 간단한 확장으로 리스트 L의 탐색이 실행된다.
도 9를 참고로, 본 발명에 따른 큰 블록에 대한 할당 전략이 도시된다. 가장 큰 블록을 저장하는 혼합 리스트를 L이라 놓는다. 박스(905)에서, L은 s 보다 크거가 같지만 s + 한계값 (예를 들면, acceptable_waste) 보다 작거나 같은 크기의 제1 블록의 위치를 정하도록 조사된다. acceptable_waste는 내부 분열을 감소시키도록 할당하는 동안 일부 경우에서 블록을 분할하는데 사용되는 매개변수이다. 적절한 블록이 발견되면, 블록은 박스(910)에서 분할되지 않고 할당된다. 이러한 블록이 발견되지 않으면, 2가지 가능성이 있다. L에서 요구를 만족시키기에 충분히 큰 블록이 없으면, 블록(930)에서는 테일로부터 크기 s의 블록이 할당된다. L이 충분히 큰 블록을 포함하면, s 보다 큰 크기를 갖는 L의 가장 작은 블록은 각각 크기 s 및 r을 갖는 분열 부분 f1 및 f2로 분할된다 (박스 350).
f1은 요구를 만족시키는데 사용된다. f2는 그 크기에 대응하는 자유 리스트의 시작부에 위치한다. acceptable_waste 매개변수는 동적으로 변화될 수 있다. 간단한 변화로, acceptable_waste 매개변수 대신에, 예를 들면 요구 크기와 같은 독립변수를 취할 수 있는 함수를 사용한다.
본 발명에 따른 할당 해제 (deallocation)는 수월하다. 할당 해제된 블록은 그 크기에 대응하는 자유 리스트의 시작부에 위치한다. 한 실시예에서는 유예 유착이 사용된다. 본 발명이 메인 메모리 할당에 사용될 때, 유착은 수월하다.
본 발명은 디스크 저장기를 관리하는 동적 저장 할당기 (dynamic storage allocator, DSA)로 유예 유착을 실행하는 새로운 방법을 포함하고, 이는 제한되는 것은 아니지만 제1 피트 (first fit), 최상 피트 (best fit), 버디 시스템 (buddy system), MFLF 시스템 등을 포함하여 다양한 다른 방법과 조합되어 사용될 수 있다.
저장 블록은 헤더 (header)를 포함한다. 헤더는 블록 크기 뿐만 아니라 그 블록이 자유로운가 할당되는가 여부를 나타내는 태그 (tag)를 포함한다. 헤더 정보는 시스템이 충돌하거나 off 상태로 될 때 보존되도록 디스크상에 포함된다. 헤더 정보는 또한 보다 신속한 억세스를 위해 메인 메모리에서 캐시 (cache) 처리될 수 있다. 헤더 정보는 다양한 방법으로 디스크상에 유지될 수 있다. 한가지 방법은 헤더 정보로 블록 중 지정된 바이트 (예를 들면, 초기 바이트)를 사용하는 것이다. 또 다른 방법은 인접한 메모리의 단일 블록에서 다수의 블록에 대한 헤더 정보를 저장하는 것이다.
도 10을 참고로, 인접한 자유 블록을 유착시키는 한가지 바람직한 방법이 도시된다. 박스(1005)에서는 유착에 필요한 데이터 구조가 초기화된다. 예를 들면, 다수의 DSA가 자유 리스트를 사용한다. 이러한 DSA는 박스(1005)를 사용하여 자유 리스트를 초기화한다 (하나 이상의 자유 리스트를 비워 놓는다). 박스(1010, 1020, 1025)는 시스템이 헤더 블록을 주사하고 인접한 자유 블록을 조합하는 루프를 형성한다. 시스템은 메모리의 한 끝부분에 있는 블록으로 시작되고, 제1 블록에 대응하는 헤더를 판독한다. 이어서, 시스템은 순차적으로 헤더를 주사하고 인접한 자유 블록을 조합한다. 자유 리스트를 사용하는 메모리 시스템에서, 자유 블록은 유착된 이후 적절한 자유 리스트에 부가된다. 박스(1025)에서, 시스템은 유착이 영구 저장기로 진행된 지점을 기록함으로서 유착을 점검 (check point)한다. 점검의 목적은 실패하는 경우 필요한 작업량을 줄이기 위한 것이다. 점검은 본 발명에 의해 안 쓰이는 정보를 업데이트하는데 사용된다.
시스템 실패가 일어난 경우, 메인 메모리의 내용은 손실되기 쉽지만, 디스크 메모리의 내용은 보존된다. 시스템 실패가 일어난 경우, 점검은 이미 실행된 유착작업 대부분 또는 모두를 다시 실행할 필요성을 제거할 수 있다. 대조적으로, 종래 기술의 방법은 실패된 이후 처음부더 헤더를 재주사할 것을 요구한다. 유리하게, 헤더의 순차적인 주사 및 점검을 제공함으로서, 보다 확실하고 영구적인 메모리 시스템이 제공된다. 또한, 실패 이후 시간이 낭비되는 재유착이 감소되거나 제거된다. 예를 들면, 50% 이상의 유착 시간이 제거되고, 많은 경우에서 100%의 유착 시간이 제거된다. 점검이 실행되는 회수는 적적하게, 예를 들면 트랜잭션 (transaction)의 수에 따라 또는 설정된 시간이 경과된 이후에 변화될 수 있다. 자주 일어나는 점검은 실패 이후 다시 실행될 필요가 있는 작업의 양을 감소시킨다.
박스(1015)에서는 최종적인 클린업 (clean up) 및 정리 동작이 실행된다. 예를 들어, 작업 저장의 종료시 자유 블록이 포함되면, 그 블록은 이 단계에서 테일에 부가될 수 있다.
이제는 본 발명에 따라 영구 저장를 효과적으로 할당 및 할당 해제하는 방법이 보다 상세히 설명된다. 본 발명은 제한되는 것은 아니지만 MFLF 시스템, 제1 피트, 최상 피트 등을 포함하여 다양한 DSA와 조합되어 사용될 수 있다. 설명되는 제1 메모리 관리 방법 (이후 간략하게 방법 I로 칭하여지는)에서, 디스크는 블록 크기 뿐만 아니라 블록이 자유로운가 할당되었나 여부를 나타내는 태그를 포함하는 헤더를 유지한다. 메모리에는 할당 및 할당 해제를 처리하기 위한 자유 리스트 데이터 구조가 유지된다.
도 11을 참고로 본 발명의 메모리 관리 방법 I에 따른 할당이 도시된다. 도11에 도시된 박스는 임의의 순서로 실행 또는 실시될 수 있음을 주목한다. 박스(1105)에서는 적절한 자유 블록이 메모리내 데이터 구조를 사용하여 위치가 정해진다. 일단 블록의 위치가 정해지면, 이는 박스(1110)에서 적절한 메모리내 데이터 구조를 수정하고 디스크상의 헤더 태그를 "할당됨 (allocated)"으로 표시함으로서 할당된다. 분할이 실행되지 않으면, 할당은 단지 단일 디스크 동작만을 소비한다.
도 12를 참고로, 본 발명의 방법 I에 따른 할당 해제가 도시된다. 적절한 메모리내 데이터 구조는 블록을 할당 해제하도록 수정된다. 부가하여, 박스(1205)에서, 디스크상의 헤더 태그는 "할당 해제됨 (deallocated)"으로 표시된다. 유착이 실행되지 않으면, 할당 해제는 단지 단일 디스크 동작만을 소비한다. 실패가 일어나거나 정상적인 정지 이후에 시스템이 재시작될 때, DSA에 의해 사용되는 메모리내 데이터 구조 (자유 리스트와 같은)는 디스크에 저장된 헤더를 주사함으로서 구성될 수 있다. 이러한 데이터는 필요에 따라 증가적으로 판독될 수 있고, 한번에 모두 판독될 필요는 없지만, 한번에 모두 판독될 수도 있다.
한 실시예에서, 디스크로부터 정보를 판독하는 시간은 디스크 저장기에서 하나 이상의 인접한 블록에 다수의 헤더 워드 (word)를 유지함으로서 감소될 수 있다. 인접한 블록 b1이 가득 찰 때, 새로운 블록 b2는 추가 헤더를 포함하도록 b1에 연관될 수 있다. 디스크상의 인접한 저장 블록은 크게 인접하지 않은 정보 보다 더 신속하게 판독될 수 있다. 예를 들면, 한 블록 (또는 더 적은 수의 블록) 판독이 수개의 인접한 헤더를 판독하는데 사용될 수 있다. 블록 판독이 사용되지않더라도, 서로 가까이 부근에 있는 디스크 위치로부터의 다수의 판독은 디스크 헤드를 조금 이동시킬 필요만 있다. 이는 시간을 절약시킨다.
정상적인 정지 이후에 시동 시간을 개선하는 또 다른 실시예는 DSA가 정지 직전에 하나 이상의 인접한 디스크 저장 블록에 메인 메모리 데이터 구조 (자유 리스트와 같은)를 출력하는 것이다. 재시동되면, DSA는 정지 직전에 기록된 저장 블록으로부터 데이터 구조를 판독한다. 이는 헤더로부터 정보를 구하는 것 보다 상당히 더 빠르다. 이들 실시예는 상기에 설명된 바와 같이, 메모리 관리 방법 I 뿐만 아니라 이후 설명될 메모리 관리 방법에서도 사용될 수 있다.
도 13을 참고로, 설명되는 또 다른 메모리 관리 방법은 디스크에서 영구적인 저장을 관리하도록 본 발명에 따라 도시된다. 이 방법은 간략하게 이후 메모리 관리 방법 II 또는 방법 II라 칭하여진다. 도 13에 도시된 박스는 임의의 순서로 실행 또는 실시될 수 있음을 주목한다. 시스템은 디스크에 적어도 하나의 블록 리스트 (자유 블록 및 할당된 블록 중 하나 또는 그 모두를 포함하는)를 유지한다 (박스 1305). 리스트는 헤더에 리스트 포인터를 보존시킴으로서 유지될 수 있다. 할당 (박스 1310)은 도 11에 도시되고 첨부된 내용에서 설명되는 바와 같은 방식으로 일어난다. 그러나, 방법 II에 의해 유지되는 메모리내 데이터 구조는 방법 I에 의해 사용되는 것과 다를 수 있다 (예를 들면, 도 14를 참고). 할당 해제 (박스 1320)는 도 12에 도시되고 첨부된 내용에서 설명된 바와 같은 방식으로 일어난다.
새로운 저장 블록을 생성하는 것이 필요하다 (박스 1315). 이는 MFLF 알고리즘에서 테일로부터 블록이 할당될 때 일어날 수 있다. 또한, 블록이 분할된 이후에 일어날 수 있다. 새로운 저장 블록 b가 생성될 때, 박스(1315)에서는 블록의 할당 상태, 블록 크기, 및 리스트상의 다음 블록에 대한 포인터를 포함하는 디스크 헤더가 초기화된다. 디스크 동작을 최소화하기 위해, 이들 헤더 필드는 인접한 디스크 저장 바이트에 유지될 수 있다. 이 방법으로, 헤더는 예를 들면, 단일 블록 기록에 의해, 또는 디스크 헤드의 움직임이 거의 없는 다수의 기록에 의해 효과적으로 업데이트될 수 있다. b는 자유 리스트의 헤드에 부가된다. 메인 메모리에는 또한 head_of_list 포인터가 유지될 수 있다; 그런 경우, 이는 b로 업데이트된다. 디스크 동작을 최소화하기 위해, 리스트의 헤드에 대한 디스크 포인터는 박스(1315)에서 업데이트되지 않을 수 있다. 이는 리스트의 헤드에 대한 디스크 포인터가 폐기될 수 있음을 의미한다. 이들 디스크 포인터를 업데이트하기 위해, 시스템은 박스(1325)에서 주기적으로 점검된다. 예를 들면, 시스템은 매 n회의 트랜잭션 이후마다 점검될 수 있고, 여기서 n은 시스템 매개변수이다. 트랜잭션은 할당, 할당 해제, 또는 다른 저장 동작을 포함할 수 있다.
다른 방법으로, 시스템은 매 m개의 새로운 블록이 생성된 이후마다 점검될 수 있고, 여기서 m은 시스템 매개변수이다. 점검은 일반적으로 정상 동작 동안 시스템이 off 상태로 되기 이전에 실행된다.
박스(1325)의 단계 동안, 디스크 리스트 헤드 포인터는 메인 메모리에 유지되는 head_of_list 포인터로부터 업데이트된다. 다수의 디스크 리스트를 갖춘 시스템에서는 예를 들면, 단일 블록 기록 또는 디스크 헤드의 움직임이 거의 없는 다수의 기록을 실행함으로서 리스트 헤드 포인터가 효과적으로 업데이트될 수 있도록디스크에서 인접한 메모리 위치에 디스크 리스트 헤드 포인터를 유지하는 것이 바람직하다.
도 14를 참고로, 설명되는 예는 랜덤 억세스 메모리(RAM)와 디스크 사이에서 메모리 관리 방법 II을 사용하는 메모리 할당을 도시한다. 메모리 관리 방법 II은 MFLF 알고리즘과 연관되어 사용될 수 있다. 그런 경우, 메모리내 데이터 구조는 신속 리스트 및 혼합 리스트에 대해 유지된다. 메모리내 리스트와 디스크 리스트 사이에는 일-대-일 대응 관계가 있을 필요는 없지만, 일-대-일 대응 관계가 있을 수 있다.
실패가 일어나거나 정상적인 정지 이후에 시스템이 재시동될 때, DSA에 의해 사용되는 메모리내 데이터 구조 (자유 리스트와 같은)는 디스크에 기록된 헤더를 주사함으로서, 메모리 관리 방법 I에서와 같이 블록 크기 및 할당 상태를 조사함으로서, 또는 디스크에 저장된 리스트를 조사함으로서 구성될 수 있다. 이러한 데이터는 필요에 따라 증가적으로 판독될 수 있고, 한번에 모두 판독될 필요는 없지만, 한번에 모두 판독될 수 있다.
도 14에 도시된 바와 같이, 메모리 관리는 본 발명을 사용하는 다수의 다른 저장 동작으로 도시된다. 처리 과정은 랜덤 억세스 메모리(1404)와 디스크(1406) 사이에서 분할된다. 메모리 블록(1408)은 직사각형으로 도시된다. 메모리 블록(1408)은 블록의 제1 위치(1410)에서 크기를 나타내는 수를 포함하고, 그 수는 자유로운 경우에 양수이고, 할당된 경우에 음수이다. 메인 메모리 (RAM 1404)의 메모리 블록(1409)은 예를 들어 a1, a2, a3, ..., a5인 어드레스로 리스트되고, 여기서 대응하는 블록은 디스크(1406)에 위치한다. 리스트헤드 (listhead)는 디스크(1406)상의 리스트에서 제1 메모리 블록의 위치를 지시한다. 디스크에서 블록(1408)의 어드레스는 블록(1408)의 제2 위치(1412)에 있는 어드레스 라벨로 나타내진다. 어드레스 라벨(1412)은 설명을 쉽게 하도록 도시된 것으로, 반드시 디스크에 저장될 필요는 없다. 블록(1408)의 마지막 위치(1414)는 리스트에서 다음 메모리 블록을 지시하거나, NIL 또는 리스트나 세트의 끝을 의미하는 "#"을 지시한다.
도 14의 예에서의 저장 동작은 도 13을 참고로 설명된다. RAM(1404)은 자유로운 블록만을 포함한다. 디스크에 블록의 리스트를 유지하는 동작 (박스 1305)이 실행된다. 할당(25)은 박스(1310)에 따라 실행된다. 할당 해제(a2)는 박스(1320)에 따라 실행된다. 할당(90)은 박스(1315)에 따라 실행된다. 리스트헤드 a1은 디스크에서 리스트의 앞부분으로 이동되는 테일로부터의 할당으로 인해 폐기됨을 주목한다. 박스(1325)에 따른 점검은 도 14에 도시된 바와 같이 리스트헤드를 a5로 업데이트한다.
도 15를 참고로, 디스크에서 영구적인 저장을 관리하는 메모리 관리 방법 III이 도시된다. 도 15에 도시된 박스는 임의의 순서로 실행 또는 실시될 수 있음을 주목한다. 박스(1505)에서, 시스템은 디스크에 적어도 하나의 자유 블록 리스트를 유지한다. 리스트는 헤더에 리스트 포인터를 보존시킴으로서 유지될 수 있다. 이 리스트의 헤드는 폐기될 수 있지만, 박스(1520)에서 실행되는 점검 동안 업데이트된다. 이 리스트의 최신 버전은 메인 메모리에 유지된다. 이 방법은 특별히 리스트의 제1 멤버로부터 할당이 일어날 때 유용하다. MFLF 방법에서, 모든 신속 리스트 및 최종 혼합 리스트를 제외한 모든 혼합 리스트로부터의 할당은 리스트의 제1 멤버로부터 일어나므로, 이들 리스트는 메모리 관리 방법 III에 매우 알맞다.
박스(1515)에서, 블록은 자유 리스트의 시작부에서부터 할당된다. 메모리내 자유 리스트는 업데이트된다. 부가하여, 그 블록은 디스크에서 할당된 것으로 표시된다. 그러나, 디스크에서 리스트 포인터는 디스크 동작을 감소시키기 위해 폐기하도록 허용된다. 박스(1510)에서, 블록은 적절한 자유 리스트의 시작부에 이를 부가하고 메모리내 데이터 구조를 업데이트함으로서 할당 해제된다. 그 블록은 디스크에서 할당된 것으로 표시되고, 헤더는 자유 리스트상의 다음 블록을 지시하도록 업데이트된다. 이 디스크 업데이트에 대한 오버헤드를 최소화하기 위해, 할당 상태 태그 및 다음 리스트 소자에 대한 포인터는 디스크에서 서로 가까이 부근에 있도록 저장될 수 있다. 리스트의 헤드에 대한 디스크 포인터는 디스크 동작을 유리하게 감소시키기 위해 폐기하도록 허용된다.
디스크에서 리스트 헤드 포인터를 업데이트하기 위해, 시스템은 박스(1520)에서 주기적으로 점검된다. 예를 들면, 시스템은 매 n회의 트랜잭션 이후마다 점검될 수 있고, 여기서 n은 시스템 매개변수이다. 부가하여, 점검은 일반적으로 시스템이 off 상태로 되기 이전에 실행된다. 박스(1520)의 단계 동안, 디스크 자유 리스트 포인터는 메모리에 유지되는 리스트 포인터의 헤드로부터 업데이트된다. 다수의 자유 리스트를 갖춘 시스템에서는 예를 들면, 단일 블록 기록 또는 디스크헤드의 움직임이 거의 없는 다수의 기록을 실행함으로서 포인터가 효과적으로 업데이트될 수 있도록 디스크에서 인접한 메모리 위치에 디스크 자유 리스트 포인터를 유지하는 것이 바람직하다. 디스크에서 하나 이상의 자유 리스트가 정확하지 않을 때 시스템의 실패가 일어나면, 이러한 자유 리스트는 할당된 블록을 포함할 수 있음을 주목한다. 이러한 자유 리스트는 박스(1525)에서 실패 이후에 고정된다.
시스템은 메모리 관리 방법 III에 의해 관리되는 디스크에서 각 자유 리스트를 조사하고, 할당된 블록을 제거한다. 이는 시스템에 의해 시작부로부터 자유 리스트를 주사하고 헤더를 조사함으로서 실행된다. 시스템이 자유로운 자유 리스트상의 블록을 만나자 마자, 시스템은 리스트의 조사를 중단한다. 이는 리스트상의 나머지 블록이 또한 자유롭기 때문이다.
도 16을 참고로, 설명되는 예의 메모리 관리 방법 III이 도시된다. 도 16에 도시된 바와 같이, 메모리 관리는 본 발명을 사용하는 다수의 다른 저장 동작으로 도시된다. 처리 과정은 랜덤 억세스 메모리(1604)와 디스크(1606) 사이에서 분할된다. 메모리 블록(1608)은 직사각형으로 도시된다. 메모리 블록(1608)은 블록의 제1 위치(1610)에서 크기를 나타내는 수를 포함하고, 그 수는 자유로운 경우에 양수이고, 할당된 경우에 음수이다. 메인 메모리 (RAM 1604)의 메모리 블록(1611)은 본 예에서 "3"인 크기를 갖는 블록을 나타내는 인덱스(1609)를 포함한 자유 리스트(1607)를 포함한다. 대응하는 블록이 디스크(1606)에 위치하는 리스트(1607)에는 예를 들어 a1, a2, a3, a4인 어드레스가 포함된다. 디스크에서 블록(1608)의 어드레스는 블록(1608)의 한 위치(1612)에 있는 어드레스 라벨로 나타내진다. 어드레스 라벨(1612)은 설명을 쉽게 하도록 도시된 것으로, 반드시 디스크에 저장될 필요는 없다. 블록(1608)의 마지막 위치(1614)는 다음 메모리 블록을 지시하거나, NIL 또는 리스트의 끝을 의미하는 "#"을 지시한다.
도 16의 예에서의 저장 동작은 도 15를 참고로 설명된다. 디스크에 블록의 리스트를 유지하는 동작 (박스 1505)이 실행된다. 할당(3)은 박스(1515)에 따라 실행된다. 할당(3)은 또한 박스(1515)에 따라 다시 실행된다. 할당 해제 또는 자유롭게 설정하는 처리(a3)는 박스(1510)에 따라 실행된다. 어드레스 a2 및 a4를 갖는 블록(1608)은 블록 어드레스 a3를 지시함을 주목한다. 이는 점검에 의해 고정된다. 박스(1520)에 따른 점검은 어드레스 a4 및 a3를 갖는 블록이 자유 리스트에 유지되도록 자유 리스트(1609)를 업데이트한다.
도 17을 참고로, 메모리 관리 방법의 또 다른 실시예가 도시되고, 이는 간략하게 메모리 방법 IV라 칭하여진다. 도 17에 도시된 박스는 임의의 순서로 실행 또는 실시될 수 있음을 주목한다. 시스템은 저장을 관리하기 위한 메모리내 데이터 구조를 유지한다. 이러한 메모리내 데이터 구조는 리스트를 포함한다. 할당 및 할당 해제는 박스(1705)에서 메모리내 데이터 구조를 수정함으로서 실행된다. 통상적으로, 박스(1705)에서는 디스크 동작이 일어나지 않는다. 그래서, 할당 및 할당 해제가 신속해질 수 있다. 시스템은 박스(1710)에서 메모리에 대한 정보를 주기적으로 점검한다. 예를 들면, 시스템은 매 n회의 트랜잭션 이후마다 점검될 수 있고, 여기서 n은 시스템 매개변수이다. 부가하여, 점검은 일반적으로 시스템이 off 상태로 되기 이전에 실행된다. 정상적인 정지 직전에, 시스템은 나중에 판독되어 시동 시간을 줄일 수 있는 디스크상의 추가 정보 (예를 들어, 시스템이 자유 리스트를 사용하고 있다고 가정하면, 메모리내의 자유 리스트 구조)를 저장할 수 있다.
이러한 점검은 시스템이 실패되거나 정상적인 정지 이후에 재시동하도록 허용한다. 정상적인 정지 직전에, 시스템은 정상적인 점검 동안 시스템이 저장하지 못하는 디스크상의 정보를 저장할 수 있다. 이러한 보조 정보는 나중에 판독되어 시동 시간을 줄일 수 있다.
시스템 설계자에게는 필요한 성능에 가장 적절한 메모리 관리 방법을 선택할 때 다른 메모리 관리 방법의 균형적인 교환이 고려될 수 있다. 여기서 설명되는 메모리 관리 방법은 종래 기술 보다 많은 이점을 제공한다. 메모리 관리 방법 I은 메모리 관리 방법 II 및 III 보다 더 적은 헤더 공간을 필요로 한다. 부가하여, 메모리 관리 방법 I은 할당 및 할당 해제에 대해 II 및 III 보다 더 적은 디스크 기록을 실행한다. 메모리 관리 방법 I에서는 디스크상의 정보가 항상 최신의 것으로, 점검이 필요하지 않다.
메모리 관리 방법 II는 방법 I 보다 적은 디스크 판독을 사용하여 시동하는 동안 특정한 크기의 블록 위치를 정하는데 사용될 수 있는 다수의 리스트가 디스크에 유지되도록 허용한다. 방법 II에서는 점검이 사용되고, 디스크상의 리스트 헤드는 항상 유통되지 않을 수 있다.
메모리 관리 방법 III은 자유 리스트를 사용하고, 모든 할당은 최상의 성능을 얻도록 자유 리스트의 시작부에서부터 이루어질 수 있다. 방법 III은 다수의리스트를 사용하므로 방법 I 및 II 보다 더 적은 판독을 사용하여 시동하는 동안 특정한 크기의 자유 블록 위치를 정하는데 사용될 수 있다. 메모리 관리 방법 II와 다르게, 방법 III의 리스트는 자유 블록만을 포함한다 (정상적인 정지라 가정하는 경우). 점검은 사용되고, 디스크상의 리스트는 업데이트될 필요가 있고, 디스크상의 리스트는 실패 이후에 고정되어야 한다.
메모리 관리 방법 IV는 디스크 동작 없이 할당 및 할당 해제를 실행한다. 그러나, 방법 IV는 다른 방법 (예를 들면, 방법 I - III) 보다 더 많은 점검 과정을 포함할 수 있다. 부가하여, 실패가 일어나는 경우, 디스크 메모리는 다른 방법을 사용하는 것 보다 방법 IV를 사용하는 경우 보다 안 쓰일 수 있다.
이제는 본 발명에 따라 저장을 할당하는 다른 방법 (관리 방법 V)이 설명된다. 이 방법은 특히 제1 자유 바이트에 대한 포인터 (테일 포인터)를 유지하고 업데이트함으로서 시스템이 큰 블록의 디스크 메모리 (예를 들면, 도 5의 테일)로부터 저장을 할당하고 있을 때 유용하다.
도 18을 참고로, 시스템은 박스(1805)에서 코드 바이트 (code byte)라 공지된 적어도 하나의 바이트를 포함하여, 디스크상에서 블록에 대한 헤더를 유지한다. 도 18에 도시된 박스는 임의의 순서로 실행 또는 실시될 수 있음을 주목한다. 시스템은 또한 디스크에서 현재 테일 포인터 및 테일 포인터를 나타내는 변수를 메모리에 유지한다. 디스크상의 테일 포인터는 폐기될 수 있다. 박스(1810)에서, 시스템은 테일로부터 블록 b1을 할당한다. 이 단계에 의해 헤더에 저장되는 정보는 할당된 태그, 블록 크기, 및 하나 이상의 코드 바이트를 포함한다. 디스크상의 테일 포인터는 통상적으로 이 단계에서 업데이트되지 않는다. 그 이유는 테일 포인터가 디스크에서 b1에 대한 헤더로부터 떨어져 있기 때문이다. 디스크상의 테일 포인터를 업데이트하는 것은 추가 디스크 동작을 포함할 필요가 있다. 대조적으로, b1에 대한 헤더 바이트는 디스크에서 가깝게 유지될 수 있으므로, 헤더에 대한 모든 업데이트는 일반적으로 디스크 동작을 거의 사용하지 않고 (많은 경우에서 한 디스크 기록으로 충분하다) 실행될 수 있다. 블록이 더 이상 테일의 일부가 아님을 나타내도록 특수한 정보가 코드 바이트에 저장된다. 다른 목적으로 사용되는 헤더 바이트가 또한 코드 바이트로 동작하여, 코드 바이트에 의해 발생되는 오버헤드를 감소 또는 제거하는 것이 가능하다. 예를 들어, 메모리 관리 방법 II 및 III은 블록 크기 및 리스트 포인터를 저장하는데 헤더 바이트를 사용한다. 이들 바이트는 또한 코드 바이트로 동작할 수 있다.
메모리내의 테일 포인터 (디스크상이 아니라)는 박스(1810)에서 업데이트된다. 박스(1825)에서, 블록 b1은 테일로 할당 해제된다. 코드 바이트는 b1이 이제 테일의 일부임을 나타내도록 수정된다. 메모리에서 캐시 처리되어 디스크를 억세스하지 않고 조사될 수 있는 디스크상의 테일 포인터가 유통되고 있으면, 테일 포인터는 b1이 테일로 할당 해제된 이후 유통되게 남아있도록 업데이트된다. 그렇지 않으면, 디스크상의 테일 포인터는 쓰이지 않고 남아있도록 허용된다.
업데이트된 테일 포인터는 박스(1820)에서 디스크에 대해 주기적으로 점검된다. 예를 들면, 시스템은 매 n회의 트랜잭션 이후마다 점검될 수 있고, 여기서 n은 시스템 매개변수이다. 다른 방법으로, 시스템은 디스크상의 테일 포인터가 업데이트된 최종 시간에 이어서 테일에 대한 p회 업데이트 이후에 점검될 수 있고, 여기서 p는 시스템 매개변수이다. 점검은 일반적으로 정상적인 동작 동안 시스템이 off 상태가 되기 이전에 실행된다.
디스크상의 테일 포인터를 업데이트하는 대가는 수회의 할당 및/또는 할당 해제에 걸쳐 상환될 수 있다. 본 발명은 예를 들면, 도 8 및 도 9를 참고로 설명된 방법이나 메모리 관리 방법 I, II, 및 III과 같이 앞서 설명된 발명과 연관되어 사용될 수 있다. 메모리 관리 방법 II 및 III과 연관되어 사용되면, 테일의 점검은 자유 리스트의 점검과 조합될 수 있다. 예를 들어, MFLF 시스템이 테일 포인터 및 자유 리스트 포인터의 점검을 필요로 한다고 가정한다. 디스크상의 테일 포인터는 자유 리스트 포인터에 인접하게 저장될 수 있다. 그 방법으로, 테일 포인터 및 자유 리스트는 단일 블록 기록 또는 디스크 헤드가 거의 움직이지 않는 적은 수의 기록을 사용하여 점검될 수 있다.
시스템 실패가 발생되면, 디스크에 저장된 테일 포인터는 유통되지 않는다. 박스(1815)는 실패 이후에 테일 포인터를 정정하도록 시도한다. t를 테일 포인터의 저장값이라 놓는다. 시스템은 t에서 시작되는 블록에 대응하는 헤더에서 코드 바이트가 되는 바이트를 조사한다. t가 블록에 대응하는 것으로 코드 바이트가 나타내면, 블록 크기 s는 헤더로부터 결정된다. 테일 포인터는 t + s로 증가되고, 처리 과정은 저장이 블록에 대응하지 않음을 나타내는 코드 바이트가 조사될 때까지 계속된다. 이어서, 업데이트된 테일 포인터가 디스크에 저장된다.
설명되는 한 예에서는 메모리 관리 방법 II가 사용되고 있다고 가정한다.크기와 포인터 헤더는 모두 코드 바이트로 사용될 수 있다. 박스(1815)에서, 유효 코드 바이트에 대한 테스트는 크기 바이트가 요구되는 크기를 저장하고 포인터가 적절한 크기 등급에 속하는 블록을 지시함을 확인하는 것을 포함할 수 있다. 도 18은 가망성 회복 알고리즘을 실시한다. 테일 포인터는 박스(1815)에서 불필요하게 진보될 가능성이 있다. 적절한 코드 바이트의 사용으로, 이러한 확률은 임의적으로 낮추어질 수 있다. 최악의 경우, 일부 테일 저장이 손실될 수 있지만, 할당된 저장은 실수로 할당 해제되지 않는다.
MFLF 알고리즘과 같이, 테일형 데이터 구조를 사용하는 수개의 다른 DSA와 연관되어 도 18의 방법을 사용하는 것이 가능하다. 테일에 대한 블록을 할당 해제하는데 박스(1825)를 사용하는 것이 항상 필요한 것은 아니다. 예를 들면, MFLF 알고리즘은 일반적으로 최근에 공급된 블록을 테일에 부가하도록 시도하지 않는다. 그 대신, MFLF 알고리즘은 공급된 블록을 자유 리스트에 부가한다. 저장부는 유착하는 동안 테일에 부가될 수 있다.
도 19를 참고로, 메모리 관리 방법 I을 사용하는 MFLF III는 IBM으로부터 상업적으로 이용가능한 DB2TM과 대조하여 성능 특징에 대하여 본 발명자에 의해 테스트되었다. 판독 및 기록 동작은 크기가 각각 100 바이트 이하인 5300 항목 (item)에 대해 실행되었다. 보고 타이밍은 초기화 시간을 포함한다. 운행되는 테스트는 다음을 포함한다:
- (A) 간단한 기능적 테스트를 포함하여 한 실행에서 모든 테스트를 운행.
- (R) 데이터베이스로부터 각 항목을 1회 판독 (키드 룩업 (keyed lookup)).
- (Wp) 데이터베이스를 비우도록 각 항목을 1회 기록 (베이스 (base)를 미리 알려둔다).
- (Wn) 데이터베이스를 채우도록 각 항목을 1회 기록 (미리 알려진 데이터베이스에서 각 항목을 대치).
- (I) 데이터베이스에서 각 항목에 걸쳐 반복 운행 (논키드 룩업 (non-keyed lookup)).
초기 시간 + 테스트 A를 위한 추가 기능 테스트 때문에, (R+Wp+Wn+I)는 A 까지 더하지 않음을 주목한다. 데이터베이스는 인덱스 처리된 주요 키 (스트링 (string))와 데이터 객체 (LOB)를 갖춘 한 테이블을 포함한다. 베이스 테스트 수행은 모든 업데이트가 완료된 이후에만 업데이트된다. 보충적인 업데이트는 도 19에 도시된 바와 같이 매 다섯번째 업데이트 또는 매 업데이트 이후에 수행되었다. DB2에 테스트를 실제로 적용하는데는 매 5회의 업데이트를 수행할 필요가 있었고, 테스트를 완료하기 위해 몇가지 동조 매개변수가 필요하였다. 베이스 테스트 결과는 도 19에 도시된다. 초로 표시된 테스트 시간은 (1902)로 칭하여지는 DB2 보다 (1900)으로 칭하여지는 본 발명의 놀라운 개선을 나타낸다. 대부분의 경우에서, 한 등급의 크기 개선이 얻어졌다.
도 20을 참고로, DB2는 몇가지 모드에서 운행되었다. 예를 들면, DB2에 대한 테스트의 적용은 도 20에 도시된 바와 같이 수동 수행, 자동 수행, 및 매 5회 업데이트의 수행으로 실행되었다. Wp 및 Wn 테스트에 대해 본 발명의 동작 시간 (초)은 한 등급의 크기 보다 더 컸고, 일부 경우에서는 두 등급의 크기 보다 더 컸다.
본 발명에서 종래 기술에 숙련된 자에 의해 이루어질 수 있는 변화는 많이 있다. 예를 들면, DSA는 다수의 트랜잭션을 동시에 처리하도록 병렬화될 수 있다. 이는 디스크 어레이와 사용하는데 적절하다. 병렬화를 이루는 기술은 다음의 참고문헌에서 설명된다:
1) "멀티프로세서에서 동적 저장 할당 (Dynamic Storage Allocation on a Multiprocessor)", Arun Iyengar, Massachusetts Institute of Technology Laboratory for Computer Science TR-560 (박사 논문), 1992년 12월; 및
2) "동적 저장 할당 알고리즘의 측정성 (Scalability of Dynamic Storage Allocation Algorithms)", Arun Iyengar, Proceedings of IEEE Frontiers'96 에서, 1996년 10월.
영구적이고 확실한 저장 할당에 대한 시스템 및 방법의 바람직한 실시예가 설명되었지만 (제한하지 않고 설명적인 것으로 의도되는), 상기의 내용에서 종래 기술에 숙련된 자에 의해 수정 및 변화가 이루어질 수 있음을 주목한다. 그러므로, 첨부된 청구항에 의해 요약되는 본 발명의 범위 및 의도내에 있는 설명된 본 발명의 특정한 실시예에서 변화가 이루어질 수 있는 것으로 이해되어야 한다. 그래서, 특허법에 의해 요구되는 특수성 및 상세한 내용으로 본 발명을 설명하였으므로, 특허법에 의해 보호되기 원하고 청구되는 것은 첨부된 청구항에서 설명된다.
Claims (32)
- 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 포함하는 메모리 저장 시스템에서 영구 저장기 (persistent storage)를 관리하는 방법에 있어서,다수의 블록에 대해 상기 영구 저장기에 헤더 (header)를 유지하는 단계 - 각 블록에 대한 헤더는 블록 크기 및 블록의 할당 상태를 포함함 -;상기 영구 저장기를 할당 및 할당 해제하도록 상기 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 사용하여 제1 저장 블록을 식별하고, 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하여 상기 영구 메모리에서 상기 블록에 대한 할당 상태를 지정함으로서, 상기 제1 저장 블록을 할당하는 단계;상기 영구 메모리에서 제2 저장 블록에 대한 할당 상태를 지정함으로서 상기 제2 저장 블록을 할당 해제하는 단계; 및상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제1항에 있어서,상기 영구 저장기에서 다수의 헤더로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제2항에 있어서,상기 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계는 단일 디스크 억세스가 다수의 바이트로 판독되는 적어도 하나의 상기 영구 메모리의 디스크 억세스를 포함하는 것을 특징으로 하는 방법.
- 제1항에 있어서,시스템 정지 이전에 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계; 및출력된 상기 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제1항에 있어서,상기 영구 저장기에 헤더를 유지하는 단계는 상기 영구 저장기에서 인접한 영역에 저장된 다수의 헤더를 제공하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제1항에 있어서,상기 영구 저장기에 헤더를 유지하는 단계는 상기 영구 저장기에서 한 위치를 지시하는 포인터 필드 (pointer field)를 갖는 헤더를 유지하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제6항에 있어서,상기 헤더내의 포인터 필드를 사용하여 상기 영구 저장기에 블록의 리스트 (list)를 유지하는 단계; 및상기 블록 리스트의 헤드 (head)에 대해 상기 메인 메모리에 적어도 하나의 현재 포인터를 유지하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제7항에 있어서,상기 영구 저장기에서 새로운 블록을 생성하는 단계;상기 메인 메모리에서 상기 적어도 하나의 현재 포인터의 값 p로 상기 새로운 블록에 대한 상기 영구 저장기내의 포인터 필드를 설정하는 단계; 및상기 p를 상기 새로운 블록에 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제8항에 있어서,상기 새로운 블록에 대한 헤더는 단일 블록 기록을 사용하여 초기화되는 것을 특징으로 하는 방법.
- 제7항에 있어서,상기 메인 메모리내의 상기 적어도 하나의 현재 포인터로부터 상기 리스트에 대응하는 상기 영구 저장기에서 적어도 하나의 헤드를 주기적으로 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제10항에 있어서,상기 리스트는 다수의 리스트를 포함하고, 상기 리스트는 상기 영구 저장기에서 인접하게 유지되는 상기 다수의 리스트에 대응하는 헤드를 포함하고,상기 헤드를 단일 블록 기록으로 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제1항에 있어서,상기 제1 저장 블록 및 상기 제2 저장 블록은 동일한 블록을 포함하는 것을 특징으로 하는 방법.
- 기계에 의해 판독가능하고, 상기 기계에 의해 실행가능한 지시의 프로그램을 확실하게 실현하여 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 갖춘메모리 저장 시스템에서 영구 저장기를 관리하는 방법 단계를 실행하는 프로그램 저장 디바이스에 있어서,상기 방법 단계는다수의 블록에 대해 상기 영구 저장기에 헤더를 유지하는 단계 - 각 블록에 대한 헤더는 블록 크기 및 블록의 할당 상태를 포함함 -;상기 영구 저장기를 할당 및 할당 해제하도록 상기 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 사용하여 제1 저장 블록을 식별하고,상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하여 상기 영구 메모리에서 상기 블록에 대한 할당 상태를 지정함으로서,상기 제1 저장 블록을 할당하는 단계;상기 영구 메모리에서 제2 저장 블록에 대한 할당 상태를 지정함으로서 상기 제2 저장 블록을 할당 해제하는 단계; 및상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하는 단계를 포함하는 것을 특징으로 하는 프로그램 저장 디바이스.
- 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 갖춘 메모리 저장 시스템에서 영구 저장기를 관리하는 방법에 있어서,다수의 블록에 대해 상기 영구 저장기에 헤더를 유지하는 단계 - 각 블록에대한 헤더는 블록 크기, 블록의 할당 상태, 및 포인터를 포함함 -;상기 영구 저장기를 할당 및 할당 해제하도록 상기 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 사용하여 제1 저장 블록을 식별하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하여 상기 영구 저장기에서 상기 제1 저장 블록에 대한 할당 상태를 지정하는 단계;상기 영구 저장기에서 제2 저장 블록에 대한 할당 상태를 지정함으로서 상기 다수의 블록 중 상기 제2 저장 블록을 할당 해제하는 단계;상기 제2 저장 블록에 대해 상기 디스크에서 포인터 필드를 업데이트하는 단계; 및상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하는 단계를 포함하여 상기 다수의 블록 중 상기 제1 저장 블록을 할당하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 헤더내의 포인터 필드를 사용하여 상기 영구 저장기에 블록의 리스트를 유지하는 단계; 및상기 블록 리스트의 헤드에 대해 상기 메인 메모리에 적어도 하나의 현재 포인터를 유지하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제15항에 있어서,시스템의 작동 실패에 응답하여, 할당된 블록을 제거하도록 상기 블록의 리스트를 조사하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제16항에 있어서,상기 블록의 리스트에서 자유 블록 (free block)이 발견될 때 상기 조사하는 단계를 종료하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제15항에 있어서,상기 메인 메모리내의 상기 적어도 하나의 데이터 구조는 상기 영구 저장기에서 상기 블록의 리스트에 대응하는 적어도 하나의 자유 블록 리스트를 포함하는 것을 특징으로 하는 방법.
- 제15항에 있어서,상기 메인 메모리내의 상기 적어도 하나의 현재 포인터로부터 상기 블록 리스트에 대응하는 상기 영구 저장기에서 적어도 하나의 헤드를 주기적으로 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제19항에 있어서,상기 블록의 리스트는 다수의 리스트 및 상기 영구 저장기에서 인접하게 유지되는 헤드를 포함하고,상기 헤드를 단일 블록 기록으로 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 포인터 필드를 업데이트하는 단계는 상기 메인 메모리에서 적어도 하나의 자유 블록 리스트 L의 헤드로 상기 포인터 필드내의 포인터를 설정하는 단계를 포함하고, 상기 할당 해제하는 단계는 상기 메인 메모리에서 상기 L의 헤드에 상기 제2 저장 블록을 부가하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 제2 저장 블록에 대한 헤더는 단일 블록 기록을 사용하여 업데이트되는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 영구 저장기에서 다수의 헤더로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제23항에 있어서,상기 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계는 단일 디스크 억세스가 다수의 바이트로 판독되는 디스크를 억세스하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,시스템 정지 이전에 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계; 및출력된 상기 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 영구 저장기에서 인접한 영역에 다수의 헤더를 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제14항에 있어서,상기 제1 저장 블록 및 상기 제2 저장 블록은 동일한 블록을 포함하는 것을 특징으로 하는 방법.
- 기계에 의해 판독가능하고, 상기 기계에 의해 실행가능한 지시의 프로그램을 확실하게 실현하여 메인 메모리 및 적어도 하나의 디스크 메모리 디바이스를 갖춘 메모리 저장 시스템에서 영구 저장기를 관리하는 방법 단계를 실행하는 프로그램 저장 디바이스에 있어서,상기 방법 단계는다수의 블록에 대해 상기 영구 저장기에 헤더를 유지하는 단계 - 각 블록에 대한 헤더는 블록 크기, 블록의 할당 상태, 및 포인터를 포함함 -;상기 영구 저장기를 할당 및 할당 해제하도록 상기 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 사용하여 제1 저장 블록을 식별하는 단계;상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하여 상기 영구 저장기에서 상기 제1 저장 블록에 대한 할당 상태를 지정하는 단계;상기 영구 저장기에서 제2 저장 블록에 대한 할당 상태를 지정함으로서 상기 다수의 블록 중 상기 제2 저장 블록을 할당 해제하는 단계;상기 제2 저장 블록에 대해 상기 디스크에서 포인터 필드를 업데이트하는 단계; 및상기 메인 메모리내의 상기 적어도 하나의 데이터 구조를 수정하는 단계를 포함하여 상기 다수의 블록 중 상기 제1 저장 블록을 할당하는 단계를 포함하는 것을 특징으로 하는 프로그램 저장 디바이스.
- 영구적인 저장 시스템에서 메모리를 관리하는 방법에 있어서,영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 영구 저장기에 억세스하거나 기록하지 않고 상기 적어도 하나의 데이터 구조로부터 전체적으로 상기 영구 저장기를 할당 및 할당 해제하는 단계;상기 영구 저장기에 대한 저장 할당 정보를 주기적으로 점검하는 단계; 및상기 점검된 정보로부터 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
- 기계에 의해 판독가능하고, 상기 기계에 의해 실행가능한 지시의 프로그램을 확실하게 실현하여 제29항에 기술된 바와 같은 방법 단계를 실행하는 것을 특징으로 하는 프로그램 저장 디바이스.
- 영구적인 저장 시스템에서 메모리를 관리하는 방법에 있어서,영구 저장기를 할당 및 할당 해제하도록 메인 메모리에 적어도 하나의 데이터 구조를 유지하는 단계;상기 영구 저장기에 억세스하거나 기록하지 않고 상기 적어도 하나의 데이터 구조로부터 전체적으로 상기 영구 저장기를 할당 및 할당 해제하는 단계;시스템 정지 이전에 상기 메인 메모리내의 상기 적어도 하나의 데이터 구조로부터의 정보를 상기 영구 저장기에 출력하는 단계; 및상기 출력된 정보로부터 시스템이 재시동된 이후에 상기 메인 메모리에서 상기 적어도 하나의 데이터 구조를 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
- 기계에 의해 판독가능하고, 상기 기계에 의해 실행가능한 지시의 프로그램을 확실하게 실현하여 제31항에 기술된 바와 같은 방법 단계를 실행하는 것을 특징으로 하는 프로그램 저장 디바이스.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/504,064 | 2000-02-15 | ||
US09/504,064 US6446183B1 (en) | 2000-02-15 | 2000-02-15 | Systems and methods for persistent and robust memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20010082033A true KR20010082033A (ko) | 2001-08-29 |
KR100390734B1 KR100390734B1 (ko) | 2003-07-10 |
Family
ID=24004703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-2001-0004535A KR100390734B1 (ko) | 2000-02-15 | 2001-01-31 | 고정적이고 확실한 저장 할당을 위한 시스템 및 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6446183B1 (ko) |
JP (1) | JP3771803B2 (ko) |
KR (1) | KR100390734B1 (ko) |
CN (1) | CN1226687C (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100818797B1 (ko) * | 2006-10-19 | 2008-04-01 | 삼성전자주식회사 | 메모리 용량 조절 방법과 메모리 용량 조절 장치 |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6643754B1 (en) * | 2000-02-15 | 2003-11-04 | International Business Machines Corporation | System and method for dynamically allocating computer memory |
US6711595B1 (en) * | 2000-05-09 | 2004-03-23 | Openwave Systems Inc. | Method and apparatus for sharing standard template library objects among processes |
US7072916B1 (en) * | 2000-08-18 | 2006-07-04 | Network Appliance, Inc. | Instant snapshot |
US6691121B1 (en) * | 2000-10-27 | 2004-02-10 | Bmc Software, Inc. | Method and apparatus for online and dynamic extension of IMS data entry databases |
US20020100062A1 (en) * | 2001-01-19 | 2002-07-25 | Lowthert Jonathan E. | Content with advertisement information segment |
US6851021B2 (en) * | 2001-08-03 | 2005-02-01 | International Business Machines Corporation | Methods and systems for efficiently managing persistent storage |
KR100724438B1 (ko) * | 2001-12-26 | 2007-06-04 | 엘지전자 주식회사 | 기지국 모뎀의 메모리 제어장치 |
US7330956B1 (en) * | 2002-04-16 | 2008-02-12 | Emc Corporation | Bucket based memory allocation |
US20030236826A1 (en) * | 2002-06-24 | 2003-12-25 | Nayeem Islam | System and method for making mobile applications fault tolerant |
US8060680B2 (en) * | 2002-09-16 | 2011-11-15 | Hewlett-Packard Development Company, L.P. | Method of allocating memory |
US7107367B1 (en) * | 2003-08-12 | 2006-09-12 | Advanced Micro Devices, Inc. | Method for efficient buffer tag allocation |
US7788299B2 (en) * | 2004-11-03 | 2010-08-31 | Spectra Logic Corporation | File formatting on a non-tape media operable with a streaming protocol |
US20060190697A1 (en) * | 2005-02-10 | 2006-08-24 | Grant Calum A | A lock-free memory allocator with delayed coalescing |
US7478278B2 (en) * | 2005-04-14 | 2009-01-13 | International Business Machines Corporation | Template based parallel checkpointing in a massively parallel computer system |
US7809918B1 (en) * | 2005-07-22 | 2010-10-05 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for providing physical memory management functions |
US7574556B2 (en) | 2006-03-20 | 2009-08-11 | International Business Machines Corporation | Wise ordering for writes—combining spatial and temporal locality in write caches |
US7500050B2 (en) | 2006-03-20 | 2009-03-03 | International Business Machines Corporation | Wise ordering for writes—combining spatial and temporal locality in write caches for multi-rank storage |
KR100883651B1 (ko) * | 2006-05-18 | 2009-02-18 | 삼성전자주식회사 | 파일을 저장할 디스크의 공간을 할당하는 방법 및 장치 |
US7610468B2 (en) * | 2006-10-26 | 2009-10-27 | Hewlett-Packard Development Company, L.P. | Modified buddy system memory allocation |
US8139071B1 (en) * | 2006-11-02 | 2012-03-20 | Nvidia Corporation | Buffering unit to support graphics processing operations |
US7999817B1 (en) | 2006-11-02 | 2011-08-16 | Nvidia Corporation | Buffering unit to support graphics processing operations |
US8214343B2 (en) * | 2008-03-19 | 2012-07-03 | Microsoft Corporation | Purposing persistent data through hardware metadata tagging |
US20100250830A1 (en) * | 2009-03-27 | 2010-09-30 | Ross John Stenfort | System, method, and computer program product for hardening data stored on a solid state disk |
US8230159B2 (en) * | 2009-03-27 | 2012-07-24 | Lsi Corporation | System, method, and computer program product for sending logical block address de-allocation status information |
US8671258B2 (en) | 2009-03-27 | 2014-03-11 | Lsi Corporation | Storage system logical block address de-allocation management |
US8090905B2 (en) * | 2009-03-27 | 2012-01-03 | Sandforce, Inc. | System, method, and computer program product for converting logical block address de-allocation information in a first format to a second format |
US9792074B2 (en) * | 2009-07-06 | 2017-10-17 | Seagate Technology Llc | System, method, and computer program product for interfacing one or more storage devices with a plurality of bridge chips |
EP2701639B1 (en) * | 2011-04-29 | 2022-07-06 | Evasc Neurovascular Enterprises ULC | Delivery device for an endovascular prosthesis |
US9471450B2 (en) * | 2013-03-07 | 2016-10-18 | International Business Machines Corporation | Reducing data loss in a computing storage environment |
DE102019117097A1 (de) * | 2019-06-25 | 2020-12-31 | Kiefel Gmbh | Vorrichtung und verfahren zur prozesszeitoptimierung einer produktionsmaschine |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742793A (en) * | 1991-12-18 | 1998-04-21 | 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 |
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 |
-
2000
- 2000-02-15 US US09/504,064 patent/US6446183B1/en not_active Expired - Fee Related
-
2001
- 2001-01-31 KR KR10-2001-0004535A patent/KR100390734B1/ko not_active IP Right Cessation
- 2001-02-08 JP JP2001032350A patent/JP3771803B2/ja not_active Expired - Fee Related
- 2001-02-14 CN CNB011045108A patent/CN1226687C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100818797B1 (ko) * | 2006-10-19 | 2008-04-01 | 삼성전자주식회사 | 메모리 용량 조절 방법과 메모리 용량 조절 장치 |
Also Published As
Publication number | Publication date |
---|---|
KR100390734B1 (ko) | 2003-07-10 |
CN1226687C (zh) | 2005-11-09 |
JP2001249835A (ja) | 2001-09-14 |
US6446183B1 (en) | 2002-09-03 |
JP3771803B2 (ja) | 2006-04-26 |
CN1309353A (zh) | 2001-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100390616B1 (ko) | 고정적이고 확실한 저장 할당을 위한 시스템 및 방법 | |
KR100390734B1 (ko) | 고정적이고 확실한 저장 할당을 위한 시스템 및 방법 | |
US8024507B2 (en) | Transaction-safe FAT file system improvements | |
US7610434B2 (en) | File recording apparatus | |
US7599972B2 (en) | File system having variable logical storage block size | |
AU2012352178B2 (en) | Working set swapping using a sequentially ordered swap file | |
US5784699A (en) | Dynamic memory allocation in a computer using a bit map index | |
US8176233B1 (en) | Using non-volatile memory resources to enable a virtual buffer pool for a database application | |
US5794256A (en) | Pointer swizzling facility using three-state references to manage access to referenced objects | |
US7500077B2 (en) | Use of region-oriented memory profiling to detect heap fragmentation and sparse memory utilization | |
JPS61117638A (ja) | 要求ペ−ジ仮想アドレス空間におけるメモリ・ブロツク圧縮方法 | |
US6629111B1 (en) | Memory allocation system | |
US6219678B1 (en) | System and method for maintaining an association for an object | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
US20060236065A1 (en) | Method and system for variable dynamic memory management | |
US6799253B1 (en) | Stochastic scratchpad storage management technique | |
EP1126373A2 (en) | Storage allocation system and method | |
CN111367836B (zh) | 一种针对数据库的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20080526 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |