KR100474357B1 - 다단계 분할을 이용한 기억소자 할당방법 - Google Patents

다단계 분할을 이용한 기억소자 할당방법 Download PDF

Info

Publication number
KR100474357B1
KR100474357B1 KR10-2001-0085017A KR20010085017A KR100474357B1 KR 100474357 B1 KR100474357 B1 KR 100474357B1 KR 20010085017 A KR20010085017 A KR 20010085017A KR 100474357 B1 KR100474357 B1 KR 100474357B1
Authority
KR
South Korea
Prior art keywords
value
size
subblocks
block
memory device
Prior art date
Application number
KR10-2001-0085017A
Other languages
English (en)
Other versions
KR20030055467A (ko
Inventor
김봉완
윤빈영
이형섭
이형호
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR10-2001-0085017A priority Critical patent/KR100474357B1/ko
Priority to US10/307,101 priority patent/US6931507B2/en
Publication of KR20030055467A publication Critical patent/KR20030055467A/ko
Application granted granted Critical
Publication of KR100474357B1 publication Critical patent/KR100474357B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

본 발명은 할당할 크기 값을 분석하여 기억소자를 복수의 블럭으로 분할하고 상기 각 블럭을 동일 개수의 서브블럭들로 나누어 상기 동일한 순서의 서브블럭을 같은 포인터값으로 지정하여 하나의 기억영역으로 할당하는 방법에 관한 것이다. 본 발명은, 기억소자를 활용하는 장치에서 기억소자를 고정된 크기의 기억영역으로 할당하기 위한 다단계 분할을 이용한 기억소자 할당방법에 있어서, 기억소자를 할당하고자 하는 크기 값을 이진수로 표기한 경우 "1"로 표기되는 개수만큼의 블럭으로 상기 기억소자를 분할하되, 상기 각 블럭의 크기는 상기 표기된 각 "1"의 위치가 갖는 값에 비례하여 분할하는 제1 단계; 상기 분할된 각 블럭을 서로 동일한 개수의 서브블럭으로 분할하되, 상기 서브블럭의 크기는 상기 각 블럭에 대응하는 "1"의 위치가 갖는 값의 크기로 분할하는 제2 단계; 상기 각각의 블럭 내에 분할된 동일 개수의 서브블럭에 대하여 상기 각 블럭내에서 동일한 순서상의 위치에 있는 각 서브블럭을 동일한 하나의 포인터값으로 지정하는 제3 단계; 및 상기 하나의 포인터값으로 지정된 상기 각 블럭 내의 서브블럭들을 하나의 기억영역으로 할당하는 제4 단계를 포함한다.

Description

다단계 분할을 이용한 기억소자 할당방법{A METHOD FOR MEMORY ALLOCATION USING MULTI-LEVEL PARTITION}
본 발명은 다단계 분할을 이용한 기억소자 할당방법에 관한 것으로서 보다 상세하게는, 할당의 기본 단위로 사용할 고정된 크기 값을 이진수로 분석하여 기억소자를 복수의 블럭으로 분할하고 상기 각 블럭을 동일 개수의 서브블럭들로 나누어 상기 동일한 순서의 서브블럭을 같은 포인터값으로 지정함으로써 블럭마다 떨어져 있는 서브블럭들을 하나의 기억영역 할당으로 관리하는 방법 및 이를 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
일반적으로 컴퓨터나 통신기기에서는 새로운 기억영역(memory space)이 필요할 때, 기억소자의 특정부분에 할당(allocation)이라는 과정을 통해 위치를 확보하고, 이를 포인터(pointer)라 부르는 주소값(address)을 보관하는 또 다른 기억영역을 통해 이를 관리한다. 이러한 기억소자 할당에 있어서 고정된 크기의 기억영역을 반복적으로 요구하는 경우가 있다.
특히, 데이터를 고정된 크기로 쪼개어 보관하는 경우, 하나의 데이터는 인덱스(index) 정보를 담는 헤더(header) 부분과 실제 쪼개어진 데이터가 담기는 페이로드(payload) 부분으로 나뉘어진 세그먼트(segment)들로 구성된다. 이 경우 각 세그먼트는 일정한 크기를 갖는다. 이러한 세그먼트의 기억소자로의 저장 요구는 항상 고정된 크기의 기억소자 할당 요구로 이루어진다.
종래의 기술은 기억소자에 할당된 영역의 시작 주소값을 비트단위로 정확히 표현할 수 있는 만큼의 비트 크기(bit size)를 갖는 포인터로 나타낸다. 따라서 이러한 포인터의 비트 크기는, 기억소자의 최소 정렬(alignment) 단위인 바이트나, 혹은 4 ~ 8 바이트의 처리 단위를 뜻하는 워드(word) 단위로, 증가하는 값을 표현할 수 있는 포인터로 지정(assign)되어야 하는 문제가 있었다.
이와 같은 기억소자 할당에 대한 위치 주소값을 관리하는 종래의 기술은 그 주소값을 바이트 혹은 워드 단위로 포인터값으로 저장 관리하는 것이다.
한편, 미국특허 제6,219,772호에 컴퓨터 프로그램에서 작은 블럭 메모리를 효과적으로 할당하는 작은 블럭 메모리 할당방법이 개시되어 있다. 상기 방법은 각각 복수의 데이터 페이지로 구성된 하나 이상의 세그먼트가 메모리에 할당하고, 같은 크기의 풀(pool)을 정해진 블럭 크기를 위해 생성하여 상기 정해진 크기의 다수의 빈 블럭들로 세분화된 하나 이상의 데이터 페이지를 상기 같은 크기의 풀에 지정하며, 상기 정해진 블럭 크기의 메모리에 대한 요구에 대응하여 상기 같은 크기의 풀에 지정된 데이터 페이지를 액세스하고 상기 요구에 대해 하나 이상의 상기 데이터 페이지의 빈 블럭을 할당함으로써 작은 크기의 메모리 요구에 대해 효율적으로 작은 메모리를 할당하는 것이다.
그러나, 상기 작은 블럭 메모리 할당방법은 다단계의 분할을 통해 세분화된 메모리를 할당하는 것이지만, 세분화된 블럭 하나 또는 여러개를 메모리 요구에 따라 할당하는 방법이며 소프트웨어 프로그램상에만 구현이 가능하므로 적용범위가 제한적이고 작은 크기의 메모리 요구를 처리하기 때문에 일정 크기 이상의 메모리 요구에는 효과적으로 대응할 수 없었다.
상기 문제점을 해결하기 위해 안출된 것으로 본 발명은 할당의 기본 단위로 사용할 고정된 크기값을 분석하여 기억소자를 복수의 블럭으로 분할하고 상기 각 블럭을 동일 개수의 서브블럭으로 분할하여 상기 블럭 내 동일 위치의 각 서브블럭을 동일한 포인터값으로 지정함으로써 블럭마다 떨어져 있는 서브블럭들을 하나의 기억영역으로 할당하는 다단계 분할을 이용한 기억소자 할당방법 및 이를 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는데 그 목적이 있다.
나아가, 본 발명을 통해 종래의 방식보다 작은 크기의 포인터로 기억영역 할당하는 방법을 추가적인 목적이 있다.
상기 목적을 달성하기 위한 것으로서 본 발명은, 기억소자(memory)를 활용하는 장치에서 상기 기억소자를 고정된 크기의 기억영역으로 할당하기 위한 다단계 분할을 이용한 기억소자 할당방법에 있어서,
기억소자를 할당하고자 하는 크기 값을 이진수로 표기한 경우 "1"로 표기되는 개수만큼의 블럭으로 상기 기억소자를 분할하되, 상기 각 블럭의 크기는 상기 표기된 각 "1"의 위치가 갖는 값에 비례하여 분할하는 제1 단계;
상기 분할된 각 블럭을 서로 동일한 개수의 서브블럭으로 분할하되, 상기 서브블럭의 크기는 상기 각 블럭에 대응하는 "1"의 위치가 갖는 값의 크기로 분할하는 제2 단계;
상기 각각의 블럭 내에 분할된 동일 개수의 서브블럭에 대하여 상기 각 블럭내에서 동일한 순서상의 위치에 있는 각 서브블럭을 동일한 하나의 포인터값으로 지정하는 제3 단계; 및
상기 하나의 포인터값으로 지정된 상기 각 블럭 내의 서브블럭들을 하나의 기억영역으로 할당하는 제4 단계를 포함하는 것을 특징으로 한다.
또한, 상기 목적을 달성하기 위해 본 발명은 프로세서를 구비하여 기억소자(memory)를 활용하는 시스템에,
기억소자를 할당하고자 하는 크기 값을 이진수로 표기한 경우 "1"로 표기되는 개수만큼의 블럭으로 상기 기억소자를 분할하되, 상기 각 블럭의 크기는 상기 표기된 각 "1"의 위치가 갖는 값에 비례하여 분할하는 제1 기능;
상기 분할된 각 블럭을 서로 동일한 개수의 서브블럭으로 분할하되, 상기 서브블럭의 크기는 상기 각 블럭에 대응하는 "1"의 위치가 갖는 값의 크기로 분할하는 제2 기능;
상기 각각의 블럭 내에 분할된 동일 개수의 서브블럭에 대하여 상기 각 블럭내에서 동일한 순서상의 위치에 있는 각 서브블럭을 동일한 하나의 포인터값으로 지정하는 제3 기능; 및
상기 하나의 포인터값으로 지정된 상기 각 블럭 내의 서브블럭들을 하나의 기억영역으로 할당하는 제4 기능을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
이하, 본 발명의 바람직할 일실시예를 첨부한 도면을 참조하여 본 발명을 보다 상세하게 설명한다. 여기서, 주의할 것은 이하에서 설명되는 상세한 설명 및 도면은 본 발명의 이해를 돕기 위한 일실시예에 불과하므로 본 발명을 한정하는 것이 아님을 밝혀둔다. 따라서, 이하에서 설명되는 예도 본 발명의 설명을 위한 하나의 실시형태에 불과함을 밝혀둔다.
도 1은 본 발명의 일실시예에 따른 기억소자 할당방법의 개략도이다. 먼저 할당 요구에 사용되는 고정된 크기 값을 이진수로 풀어서 표기한 다음, 여기서 0이 아닌 1로 표기되는 개수만큼의 블럭(도 1의 예에서는 A,B 두개)으로 기억소자(10)를 분할한다. 상기 분할된 각 블럭(A,B)의 크기는 표기된 1값의 위치가 갖는 값의 크기에 비례하여 분할한다. 이렇게 분할한 뒤 각 블럭(A,B)을 각각의 1값의 위치가 갖는 값의 크기로 다시 m개의 서브블럭으로 나눈다. 예를 들어, 도 1의 일례에서 288바이트의 전체 기억소자(10)의 크기에서, 할당 요구 크기가 72 바이트라면 이는 이진수로 1001000 으로 표기되며, 여기서 0이 아닌 1로 표기되는 개수는 2 개이므로 할당될 전체 기억소자는 2개로 분할된다. 이때, 분할된 각 블럭의 크기는 1값의 위치가 갖는 값의 크기 즉, 좌측의 1이 갖는 값은 64(2의 6승)이고 중간의 1이 갖는 값 8(2의 3승)이므로 상기 값의 크기에 비례하여 64 : 8 로 분해된다. 따라서 전체 기억영역은 64 : 8 즉, n = 8 이 되어 8 : 1 의 비율을 갖는 두 블럭(B,A)으로 분할된다.
그리고, 상기 분할된 블럭 중 큰 블럭(B)은 해당 1값의 위치가 갖는 값 즉, 64바이트 크기로 다시 m개의 서브블럭으로 나누고 작은 블럭(A)은 해당 1값의 위치가 갖는 값 즉, 8바이트 크기로 다시 상기한 m개의 서브블럭으로 나눈다. 이때, 상기 m은 하기 수식 1과 같이 구해진다.
[수식 1]
전체 기억소자 크기 288(바이트) = 64(바이트) ×m개 + 8(바이트) ×m개
∴ m = 288 / (64 + 8) = 4개
따라서, 큰 블럭(B)은 64바이트를 갖는 4개의 서브블럭들로 분할하고 작은 블럭(A)은 8바이트를 갖는 4개의 서브블럭들로 분할한다. 이와 같이 두 개의 블럭(A,B)은 동일 개수(도 1에서는 4개)의 서브블럭으로 분할된다.
포인터값(30)은 상기 블럭 내의 서브블럭의 위치상 순서를 나타낸다. 도 1에 도시된 바와 같이, 상기 포인터값(30)은 0 ~ m-1(m개)의 서브블럭의 순서를 나타내는 소정의 값을 지시하는데, 상술한 예에서 상기 m은 4개 이므로 상기 포인팅(30)의 값은 0 ~ 3 의 정수이다. 또한, 포인터값(30)은 상기 기억소자(10)의 절대 주소값이 아닌, 작은 크기를 갖고 블럭 내의 상대 위치 즉, 순서를 표시한다.
도 1의 미설명부호 20은 주소생성부(address generation unit)로서 상기 포인터값(30)에 따라 이를 실제 기억영역의 실제 주소값으로 변환한다.
본 발명의 일실시예를 도시한 도 2를 참조하여 이를 구체적으로 설명한다.
도 2는 본 발명의 기억소자 할당방법의 일실시예를 따른 기억소자의 구조를 도시한 것이다. 도 2에 대한 도면 및 상세한 설명도 일예에 불과하므로 기억소자의 크기, 분할비, 분할된 블럭의 크기 등도 변경될 수 있다. 도 2에 도시된 바와 같이, 본 발명에 따른 일실시예에서는 전체 기억소자(10)의 크기는 288바이트이고 할당 요구에 사용되는 고정된 크기 값을 72 인 경우이다. 이때, 분할되는 비율은 도 1의 예에서와 같이 8:1이며, 상기 분할비율 중 8에 해당하는 큰 블럭(B)은 64바이트로 4개의 서브블럭으로 분할하고 상기 분할비율 1에 해당하는 작은 블럭(A)은 8바이트로 4개의 서브블럭으로 분할되어 있다. 따라서, 모두 288 바이트(= 64 바이트 ×4 개 + 8 바이트 ×4 개)가 된다. 또한, 포인터값(30)은 0~ 3의 정수값이며 이는 상기 4개의 서브블럭의 순서에 따른 위치를 지시한다.
상기와 같이 두 번에 걸쳐 큰 블럭(B)과 작은 블럭(A)으로 분할하고 상기 각 블럭을 다시 서버블럭으로 분할 한 뒤, 미도시된 기억소자 접속(memory interface)장치에서 정해진 크기의 기억소자 할당 요구가 들어오면, 각 블럭의 순서상 같은 위치에 있는 영역을 묶어서 할당해 준다. 즉, 도 2를 참조하면, 상기 정해진 크기가 72바이트로 할당하는 경우 큰 블럭(B)의 x번째 서브블럭 64바이트와 작은 블럭(A)의 x번째 서브블럭 8바이트를 함께 할당해 주는 것이다. 여기서, 상기 x는 포인터값이 지시하는 순서를 나타내며 0 ~ 3 사이의 정수값이 된다. 그리고 이렇게 할당된 기억소자에 대한 읽기/쓰기(read/write) 및 접근(access)에 대한 주소값 변환은 주소생성부(20)에 의해 이루어진다.
한편, 32 비트 프로세서를 사용하는 경우(이에 한정되지 않음), 상기 정해진 할당 요구 크기 72 바이트에서 기본처리 단위인 4바이트 단위로 분할하여 처리하는데 여기서, 각각의 기본처리단위의 최초 바이트를 상대주소를 설정한다. 예를 들어, 72바이트를 기본처리단위인 4바이트로 구분하면, 0~3바이트, 4~7바이트, ..., 68~71바이트가 되고 각각의 최초 바이트를 각각 상대주소로 설정한다. 따라서, 상기 할당 요구 크기가 72 바이트인 경우 상대주소는 0, 4, 8, 12, ..., 68 로 설정된다. 이때, 상기 주소생성부(20)는 상기 포인터값(30)에 따라 상기 서브블럭의 상대주소에 대응하는 실제 주소값을 생성한다. 예를 들어, 도 2는 포인터값(30)이 "1" 인 경우 주소를 생성하는 과정을 개략적으로 도시한 것이다. 이와 같이 포인터값(30)이 1인 경우에는 작은 블럭(A)의 두 번째 서브블럭(a1)과 큰 블럭(B)의 두 번째 서브블럭(b1)을 지시하며 상기 주소생성부(20)에서는 상기 두 서브블럭(a1,b1)을 4바이트 단위로 분할한다(32 비트 프로세서인 경우). 상기 서브블럭(a1)은 크기가 8바이트이므로 4 바이트 단위로 나누면 '0~3바이트', 4~7바이트'이며, 각 기본처리단위의 상대주소 0 과 4로 각각 설정한다. 따라서, 작은 블럭(A)의 두 번째 서브블럭(a1) 내의 상대주소가 0인 서브블럭에 실제주소값을 할당하고(S0), 동시에 상기 두 번째 서브블럭(a2) 내의 상대주소가 4인 서브블럭에도 실제 주소값을 할당한다(S1).
그러나, 상기 큰 블럭(B)의 두 번째 서브블럭(b1)은 크기가 64 바이트이므로 4바이트 단위로 16개가 분할되고 각각 상대주소가 8, 12, 16, ..., 68로 설정된다. 이어, 상기 주소생성부(20)는 상기 상대주소 8에 대한 실제 주소값을 생성하고(T0), 상대주소 12에 대한 실제 주소값을 생성하고(T1), 상기 상대주소 16에 대한 실제 주소값을 생성한다(T2). 이와 같은 작업을 반복하여 상기 모든 상대주소에 대한 실제 주소값을 생성하게 되는 것이다. 나아가, 포인터값(30)이 0, 2, 3일 때도 마찬가지로 이를 반복하여 각각의 실제 주소값을 생성한다.
만약, 64비트 프로세서를 적용하게 되면 기본처리단위가 8바이트이므로 작은 블럭(A) 내에서 크기가 8바이트인 서브블럭(a1)은 상대주소는 단지 '0'으로 하나만 설정되고 큰 블럭(B) 내에서 크기가 64 바이트인 서브블럭(b1)은 그 크기가 64바이트이므로 상대주소는 8, 16, 24, 32, 40, 48, 56, 64로 설정될 것이다.
상술한 바와 같이, 이상에서 설명한 예들은 본 발명의 일실시예이며 이에 한정되지 않고 기본처리단위, 할당 요구 크기, 전체 기억소자 크기 등은 변경될 수 있으며 또한, 포인터값, 상대주소, 실제 주소값도 추가 및 변경될 수 있을 것이다.
도 3은 본 발명의 일실시예에 따른 도 2의 주소생성부(20)의 실제 주소값 생성방법을 보이는 테이블이다. 도 3을 참조하면, 포인터값(z)과 설정된 상대위치(y)값에 따라 상기 주소생성부(20)에서 소정의 적용규칙을 적용하여 생성되는 실제 주소값을 나타낸다. 도 3의 일예도 도 2의 일실시예를 설명하기 위한 것이므로 전체 기억소자(10)의 크기는 288 바이트이고 분할비, 분할된 블럭의 크기, 서브블럭, 서브블럭의 상대주소 등은 상기 도 2와 동일하게 적용된다. 따라서, 이는 본 발명을 한정하는 것이 아니다. 즉, 분할비는 1:8이고 각 블럭 내의 서브블럭의 총 개수(m)는 4개이며 기본처리단위는 4바이트로 설정된다. 따라서, 도 2에서 설명한 일실시예와 같이, 할당 요구 크기가 72바이트인 저장영역 4개를 갖는 기억소자(10)에서 작은 블럭(A)과 큰 블럭(B)을 1:8의 비율로 나누고, 다시 상기 작은 블럭(A)은 8바이트의 4개 서브블럭(a0,a1,a2,a3)으로, 상기 큰 블럭(B)은 64바이트의 4개 서브블럭(b0,b1,b2,b3)으로 나뉜다.
또한, 각 블럭(A,B)의 서브블럭(a0~a3, b0~b3)의 개수(m)가 각각 4개 이므로 포인터값(z)은 0에서 3사이의 값을 가지며, 이는 2비트의 크기로 충분히 표현된다.
이에 따라, 도 3의 일실시예에서의 주소생성은 테이블과 같이 나타낼 수 있다. 여기서, 상기 생성된 실제 주소값은 두 가지 규칙에 의해 생성됨을 알 수 있다. 첫 번째, 포인터값(z)에 상관 없이 상대위치값(y)이 0~7인 경우는 생성되는 실제 주소값은 (8 ×z + y)이다. 두 번째, 포인터값(z)에 상관 없이 상대위치값(y)이 8 ~ 71인 경우는 실제 주소값은 [8 ×(m -1) + 64 ×z + y]로 생성된다. 여기서, 상기 m은 각 블럭 내 서브블럭의 총 개수로서 본 발명에 따른 일실시예에서는 m=4이다. 상기와 같이 계산되어 각 블럭의 서브블럭에서 상대위치에 따른 실제 주소값이 생성되는 것이다. 이로써, 상기 기억소자(10) 전체를 할당하는 것이다.
만약, 할당할 전체 기억소자의 크기가 더 커진다면 포인터값, 블럭 내 서브블럭의 총 개수가 변동될 것이며 이에 따라 포인터값도 변동할 것이며 결과적으로 생성되는 실제 주소값도 변동할 것이다. 그러나, 상기 적용규칙은 상기 값들이 변하더라도 그 변동값에 무관하게 적용될 것이다.
도 4는 본 발명의 일실시예에 따른 주소생성부의 구성도로서, 도 2 및 도 3에서 보인 예와 동일한 설정에서의 주소생성부(20)의 구성도이다. 즉, 도 4는 전체 기억소자의 크기가 288바이트, 할당 요구에 사용되는 고정된 크기가 72바이트로 설정되고 특히, 도 3의 적용규칙을 적용할 때의 주소생성부(20)의 구조를 보이는 것이다. 따라서, 기억소자의 크기, 할당 요구 크기 등 조건이 변경되면 그에 따라 구성요소도 변경될 것이다. 이는 본 발명이 속하는 기술분야의 통상의 지식을 가진 자가 본 발명의 개념을 이해하면 용이하게 변경하여 적용할 수 있을 것이다.
도 4에 도시된 바와 같이, 주소생성부(20)는 블럭 개수만큼의 기본 주소값(base address)을 갖고, 덧셈기(adder)를 통해 실제 주소값을 구해낸다.
컴퓨터나 통신기기에서 정해진 크기의 기억영역을 접근하는 방식은 두 가지가 있다. 하나는 할당 받았던 기억영역 내 특정 위치를 무작위 접근(random access)하는 방식이고, 또 하나는 일종의 선입선출(FIFO;First-In First-Out)방식을 사용하여 할당된 기억영역의 맨 처음부터 끝까지를 순차적으로 읽거나 써가는 방식이다.
도 4는 전자의 경우를 구현한 일실시예로서, 상기 주소생성부(20)는 블럭의 개수만큼의 기본 주소값 레지스터(register)들(23,24) 및 덧셈기들(25,26,27,28)과, 이 들 결과 중 상대위치값에 따라 최종 주소값을 선택하는 선택장치(29)인 멀티플렉서(multiplexer)로 구성된다. 또한, 쉬프터(21,22;shifter)는 곱셈기 역할을 수행하며, 보조 덧셈기들(25,26)을 통해 포인터값과 상대위치값 입력에 대해 도 3에서 기술한 적용규칙과 같은 연산을 수행한다.
따라서, 상기 조건하에서 도 4의 본 발명에 따른 주소생성부(20)의 일실시예를 적용하기 위해서, 첫 번째 쉬프터(21)에서는 주어진 포인터값(z)에서 좌로 3 비트 이동시켜 8을 곱하는 연산을 수행하고 두 번째 쉬프터(22)로는 상기 주어진 포인터값(z)에서 좌로 6 비트 이동시켜 64를 곱하는 연산을 수행한다. 따라서, 상기 첫 번째 쉬프터(21)의 결과값(S1)은 8 ×z가 되고 두 번째 쉬프터(22)의 결과값(S2)은 64 ×z가 된다. 이는 상기 할당 요구 크기가 72바이트인 경우에 해당된다.
이어, 덧셈기(25,26)에서는 상기 계산된 결과값(S1,S2)에 상대위치값(y)을 각각 더한다(S3,S4). 상기 계산된 결과값(S3,S4)은 다른 덧셈기(27,28)를 통해 선택장치(29)로 입력된다. 여기서, 미설명 부호 23, 24는 기본주소값을 설정하는 제1 레지스터 및 제2 레지스터이다. 상기 기본주소값은 기억소자의 할당시 할당이 시작되는 바이트 위치값을 나타낸다. 즉, 할당할 기억소자의 맨 처음에서부터 할당하는 경우에는 기본주소값은 0이 된다.
따라서, 상기 제1 레지스터(23)에서는 기본주소값은 0을, 제2 레지스터(24)에서는 기본주소값은 24(이는 도 3의 적용규칙에서 8 ×(m-1)에 해당됨)를 설정한다.
결국, 상기와 같은 조건하에서 상기 덧셈기(27)는 덧셈기(25)의 출력값(S1)과 상기 제1 레지스터(23)에서 설정된 상기 기본주소값 0을 합산하여 선택장치(29)로 입력시키고(S5), 상기 다른 덧셈기(28)는 덧셈기(26)의 출력값(S2)과 상기 제2 레지스터(24)에서 설정된 상기 기본주소값 24를 합산하여 상기 선택장치(29)로 입력시킨다(S6).
상기 선택장치(29)는 상대위치값에 따라 입력값을 선택적으로 출력하게 되는데, 먼저 상대위치값이 8 미만이면 첫 번째 덧셈기(27)로부터 입력되는 결과값(S5)을 선택하여 출력하고, 상대위치값이 8 이상이면 두 번째 덧셈기(28)로부터 입력되는 결과값(S6)을 선택하여 출력한다. 이와 같이 주소생성부(20)를 구성하면 도 3의 적용규칙을 구현할 수 있다.
그러나, 상기 주소생성부(20)의 구성은 본 발명의 상세한 설명 및 도면에 개시된 일실시예에 따른 것이며 전체 기억소자의 크기, 할당 요구 크기 등의 조건이 변경되면 이에 따라 구성요소는 추가 또는 삭제되어 구성될 것이다.
후자의 경우는 상대위치값을 외부입력이 아닌 내부에 계수기(counter)를 통해 1씩 증가시키는 방식으로 구현이 가능하다. 이 방식에서는 상대위치값을 보관할 레지스터나 혹은 기억영역이 필요가 없어서, 기억소자 자원을 더 효과적으로 사용할 수 있다.
일반적으로, 어떠한 하나의 기억장소를 할당받아서 이의 위치를 저장하는 포인터값은 시스템 전체의 기억장소 영역 중 어딘가에 최소한 한 곳 이상의 곳에 저장되어 활용된다. 특히 소프트웨어 방식으로 이 포인터값을 활용하는 경우는 복수 개의 저장영역에 이 포인터값을 다시 저장하여 활용되는 경우가 많다. 이 경우 상기 포인터값이 차지하는 크기는 시스템 전체의 확장성 여부를 결정할 만큼 중요할 수 있다. 따라서, 본 발명에서는 이러한 포인터의 크기를 획기적으로 줄일 수 있다.
본 발명의 기억소자 할당방법에 따른 상세한 설명 및 도면에는 전체 기억소자의 크기를 288바이트, 할당 요구 크기를 72바이트, 기본처리단위를 4바이트 등에 한정하여 상기 기억소자를 다단계로 분할하여 기억소자를 할당하는 방법이 개시되어 있지만, 이는 단지 본 발명의 설명하기 위한 바람직한 일례로서 본 발명의 권리범위를 한정하는 것은 아니다. 또한, 상기한 상세한 설명에서는 할당 요구 크기가 72바이트이므로 1001000의 이진수값을 갖게되어 전체 기억소자를 1:8로 분할하였지만 상기 할당 요구 크기가 72바이트보다 커져 2진수로 표현된 값에서 1의 개수가 증가가게 되면 그 1의 개수만큼 분할되는 개수가 정해진다. 예를 들어, 할당 요구 크기가 76바이트인 경우 1001100이며 이때 전체 기억소자는 16:2:1로 분할될 것이다. 이러한 분할비 및 분할방법은 상술한 본 발명의 설명 및 개념을 이해한다면 용이하게 적용할 수 있을 것이다.
따라서, 본 발명의 권리의 범위는 상기한 상세한 설명에 의해 결정되는 것이 아니라 첨부한 청구범위에 의해 결정되어야만 할 것이다.
상기한 바와 같이, 종래방법이 포인터값으로 실제 주소값을 사용하는데 비해서, 훨씬 작은 비트만으로 포인팅 할 수 있는 장점을 갖는다.
또한, 288바이트의 기억영역을 물리적으로 연속되는 4개의 72바이트 영역으로 나누어 포인팅하는 경우 종래에는 32비트 프로세서라 할지라도 최소 5비트를 갖는 포인터값이 필요한 반면, 본 발명에서는 2비트에 할당된 포인터값만으로 표현함으로써 포인터값이 저장되는 영역의 기억영역 소모를 줄일 수 있다.
도 1은 본 발명의 일실시예에 따른 기억소자 할당방법의 개략도이다.
도 2는 본 발명의 기억소자 할당방법의 일실시예를 따른 기억소자의 구조를 도시한 것이다.
도 3은 본 발명의 일실시예에 따른 도 2의 주소생성부의 실제 주소값 생성방법을 보이는 테이블이다.
도 4는 본 발명의 일실시예에 따른 주소생성부의 구성도이다.
* 도면의 주요 부분에 대한 부호의 설명 *
10 : 기억소자 20 : 주소생성부
30 : 포인터값

Claims (9)

  1. 기억소자(memory)를 활용하는 장치에서 상기 기억소자를 고정된 크기의 기억영역으로 할당하기 위한 다단계 분할을 이용한 기억소자 할당방법에 있어서,
    기억소자를 할당하고자 하는 크기 값을 이진수로 표기한 경우 "1"로 표기되는 개수만큼의 블럭으로 상기 기억소자를 분할하되, 상기 각 블럭의 크기는 상기 표기된 각 "1"의 위치가 갖는 값에 비례하여 분할하는 제1단계;
    상기 분할된 각 블럭을 서로 동일한 개수의 서브블럭으로 분할하되, 상기 서브블럭의 크기는 상기 각 블럭에 대응하는 "1"의 위치가 갖는 값의 크기로 분할하는 제2단계;
    상기 각각의 블럭 내에 분할된 동일 개수의 서브블럭에 대하여 상기 각 블럭내에서 동일한 순서상의 위치에 있는 각 서브블럭을 동일한 하나의 포인터값으로 지정하는 제3 단계; 및
    상기 하나의 포인터값으로 지정된 상기 각 블럭 내의 서브블럭들을 하나의 기억영역으로 할당하는 제4 단계; 를 포함하는 것을 특징으로 하는 다단계 분할을 이용한 기억소자 할당방법.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 제 1항에 있어서,
    상기 포인터값은 상기 각 서브블럭의 위치상 순서를 나타내는 것을 특징으로 하는 다단계 분할을 이용한 기억소자 할당방법.
  6. 제 1항에 있어서, 상기 제4 단계는,
    상기 포인터값 및 설정된 상기 각 서브블럭의 상대위치값에 따라 상기 각 서브블럭의 실제 주소값을 생성하는 제5 단계를 추가로 포함하는 것을 특징으로 하는 다단계 분할을 이용한 기억소자 할당방법.
  7. 제 6항에 있어서,
    상기 실제 주소값(AD)은 하기 수식 2 및 수식 3에 의해 생성되는 것을 특징으로 하는 다단계 분할을 이용한 기억소자 할당방법.
    [수식 2]
    상기 서브블럭의 상대 위치값(y)이 '0 ~ (a - 1)' 인 경우는,
    AD = a ×z + y
    [수식 3]
    상기 서브블럭의 상대 위치값(y)이 'a ~ (D - 1)'인 경우는,
    AD = a ×(m - 1) + b ×z + y
    (여기서, 상기 a는 작은 서브블럭의 크기값, 상기 b는 큰 서브블럭의 크기값, D는 할당 요구 크기값, m은 블럭 내 서브블럭의 총 개수, z는 포인터값, y는 상대위치값)
  8. 제 6항에 있어서,
    상기 상대위치값의 입력 없이 상기 포인터값에 의해 할당된 주소영역을 순차적으로 접근하는 것을 특징으로 다단계 분할을 이용한 기억소자 할당방법.
  9. 프로세서를 구비하여 기억소자(memory)를 활용하는 시스템에,
    기억소자를 할당하고자 하는 크기 값을 이진수로 표기한 경우 "1"로 표기되는 개수만큼의 블럭으로 상기 기억소자를 분할하되, 상기 각 블럭의 크기는 상기 표기된 각 "1"의 위치가 갖는 값에 비례하여 분할하는 제1기능;
    상기 분할된 각 블럭을 서로 동일한 개수의 서브블럭으로 분할하되, 상기 서브블럭의 크기는 상기 각 블럭에 대응하는 "1"의 위치가 갖는 값의 크기로 분할하는 제2기능;
    상기 각각의 블럭 내에 분할된 동일 개수의 서브블럭에 대하여 상기 각 블럭내에서 동일한 순서상의 위치에 있는 각 서브블럭을 동일한 하나의 포인터값으로 지정하는 제3 기능; 및
    상기 하나의 포인터값으로 지정된 상기 각 블럭 내의 서브블럭들을 하나의 기억영역으로 할당하는 제4 기능; 을 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR10-2001-0085017A 2001-12-26 2001-12-26 다단계 분할을 이용한 기억소자 할당방법 KR100474357B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR10-2001-0085017A KR100474357B1 (ko) 2001-12-26 2001-12-26 다단계 분할을 이용한 기억소자 할당방법
US10/307,101 US6931507B2 (en) 2001-12-26 2002-11-27 Memory allocation method using multi-level partition

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2001-0085017A KR100474357B1 (ko) 2001-12-26 2001-12-26 다단계 분할을 이용한 기억소자 할당방법

Publications (2)

Publication Number Publication Date
KR20030055467A KR20030055467A (ko) 2003-07-04
KR100474357B1 true KR100474357B1 (ko) 2005-03-08

Family

ID=19717593

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-0085017A KR100474357B1 (ko) 2001-12-26 2001-12-26 다단계 분할을 이용한 기억소자 할당방법

Country Status (2)

Country Link
US (1) US6931507B2 (ko)
KR (1) KR100474357B1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7136871B2 (en) * 2001-11-21 2006-11-14 Microsoft Corporation Methods and systems for selectively displaying advertisements
US7133993B1 (en) * 2004-01-06 2006-11-07 Altera Corporation Inferring size of a processor memory address based on pointer usage
EP1619584A1 (en) * 2004-02-13 2006-01-25 Jaluna SA Memory allocation
CN100452761C (zh) * 2004-04-27 2009-01-14 华为技术有限公司 通信设备中数据包的存储方法
US7546588B2 (en) * 2004-09-09 2009-06-09 International Business Machines Corporation Self-optimizable code with code path selection and efficient memory allocation
US20060101439A1 (en) * 2004-10-25 2006-05-11 Microsoft Corporation Memory management in a managed code execution environment
US20060126751A1 (en) * 2004-12-10 2006-06-15 Anthony Bessios Technique for disparity bounding coding in a multi-level signaling system
KR100666325B1 (ko) 2004-12-15 2007-01-09 삼성전자주식회사 메모리 셀 어레이 블록 할당 방법, 메모리 셀 어레이블록의 어드레싱 방법 및 이를 이용한 반도체 메모리 장치
CN100382048C (zh) * 2005-11-08 2008-04-16 中兴通讯股份有限公司 一种内存管理方法
US8108649B2 (en) 2008-06-13 2012-01-31 International Business Machines Corporation Method of memory management for server-side scripting language runtime system
US8838910B2 (en) 2010-06-07 2014-09-16 International Business Machines Corporation Multi-part aggregated variable in structured external storage
US8341368B2 (en) 2010-06-07 2012-12-25 International Business Machines Corporation Automatic reallocation of structured external storage structures
US20230145114A1 (en) * 2021-11-09 2023-05-11 Micron Technology, Inc. Memory system directed memory address management techniques

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996041266A1 (en) * 1995-06-07 1996-12-19 Emulex Corporation Split buffer architecture
KR19990032182A (ko) * 1997-10-16 1999-05-06 정선종 가변길이 파일의 버퍼 관리 장치 및 그 방법
KR20000026038A (ko) * 1998-10-16 2000-05-06 서평원 메모리의 블록 할당 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2265734A (en) * 1992-03-27 1993-10-06 Ibm Free memory cell management system
US5561785A (en) * 1992-10-29 1996-10-01 International Business Machines Corporation System for allocating and returning storage and collecting garbage using subpool of available blocks
US5600840A (en) * 1995-01-10 1997-02-04 Dell Usa, L.P. Automatic adjustment of disk space required for suspend-to-disk operation
US6219772B1 (en) 1998-08-11 2001-04-17 Autodesk, Inc. Method for efficient memory allocation of small data blocks

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996041266A1 (en) * 1995-06-07 1996-12-19 Emulex Corporation Split buffer architecture
KR100288453B1 (ko) * 1995-06-07 2001-05-02 에멀럭스 코포레이숀 다수의관련데이타를참조하는데단일포인터를사용하는메모리버퍼시스템
KR19990032182A (ko) * 1997-10-16 1999-05-06 정선종 가변길이 파일의 버퍼 관리 장치 및 그 방법
KR20000026038A (ko) * 1998-10-16 2000-05-06 서평원 메모리의 블록 할당 방법

Also Published As

Publication number Publication date
US6931507B2 (en) 2005-08-16
US20030120887A1 (en) 2003-06-26
KR20030055467A (ko) 2003-07-04

Similar Documents

Publication Publication Date Title
US6381668B1 (en) Address mapping for system memory
JP3599352B2 (ja) フレキシブルなn−ウェイ・メモリ・インターリーブ方式
KR100474357B1 (ko) 다단계 분할을 이용한 기억소자 할당방법
JP4965009B2 (ja) オフセット表を使用する完全ハッシュの生成
US5555387A (en) Method and apparatus for implementing virtual memory having multiple selected page sizes
KR860001434B1 (ko) 데이타 처리시 스템
JP5489991B2 (ja) メモリ割り当ての機構
EP0523863B1 (en) Digital data processor for high level instructions
KR20010030593A (ko) 디지털 신호 프로세싱 능력을 가진 데이터 프로세싱 유닛
JP5575997B1 (ja) 半導体装置及び半導体装置に対するエントリアドレス書き込み/読み出し方法
US6366996B1 (en) Page memory management in non time critical data buffering applications
US6684267B2 (en) Direct memory access controller, and direct memory access control method
EP1614027B1 (en) Efficient multiplication sequence for large integer operands wider than the multiplier hardware
KR20210049703A (ko) 다수의 키-밸류 저장소들에 적응(적용)하기 위한 방법 및 시스템
CA1115425A (en) Data processor with address extension
JP2021060748A (ja) 演算装置および演算方法
CN112464157B (zh) 向量排序方法与排序系统
JPH0522238B2 (ko)
CN100353335C (zh) 增加处理器中存储器的方法
JP3042266B2 (ja) メモリアクセス方法
JP2728151B2 (ja) プログラマブルコントローラ
JPS6016650B2 (ja) 除算装置
JP4142299B2 (ja) 円環状アドレスバッファのアドレス生成装置およびこれを備えた集積回路
JPH08249225A (ja) メモリ管理装置
JP2006031187A (ja) メモリ管理方式

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130215

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140213

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee