KR101775554B1 - 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치 - Google Patents

동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치 Download PDF

Info

Publication number
KR101775554B1
KR101775554B1 KR1020100014740A KR20100014740A KR101775554B1 KR 101775554 B1 KR101775554 B1 KR 101775554B1 KR 1020100014740 A KR1020100014740 A KR 1020100014740A KR 20100014740 A KR20100014740 A KR 20100014740A KR 101775554 B1 KR101775554 B1 KR 101775554B1
Authority
KR
South Korea
Prior art keywords
instruction
data
offset
block
data block
Prior art date
Application number
KR1020100014740A
Other languages
English (en)
Other versions
KR20110094977A (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 KR1020100014740A priority Critical patent/KR101775554B1/ko
Priority to US13/030,787 priority patent/US8826251B2/en
Publication of KR20110094977A publication Critical patent/KR20110094977A/ko
Application granted granted Critical
Publication of KR101775554B1 publication Critical patent/KR101775554B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Abstract

동적 기계어 코드 생성시, 생성된 명령어를 제1 버퍼에 순차적으로 저장하여 명령어 블록을 생성하는 단계와, 명령어가 데이터를 참조하는 경우 해당 데이터를 제2 버퍼에 순차적으로 저장하여 데이터 블록을 생성하는 단계와, 명령어 블록에 포함된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 제1 버퍼와 제2 버퍼를 실행 코드에 플러싱(flushing)하는 단계를 포함하는 명령어 및 데이터의 배치 방법과 장치가 개시된다.

Description

동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치{Method and apparatus for arranging instructions and data when dynamically generating machine code}
본 발명은 가상 머신(virtual machine)을 이용한 동적 컴파일 환경에 대한 것으로, 보다 구체적으로는 적시 컴파일러(just-in-time compiler)를 이용해 동적으로 기계어 실행 코드를 생성할 때 명령어 및 데이터를 배치하는 방법 및 장치에 관한 것이다.
가상 머신의 해석기를 사용하는 소프트웨어 수행 환경에서는, 성능 향상을 위해 소프트웨어 수행중 적시 컴파일러를 통해서 동적으로 생성한 기계어 실행 코드(executable code)를 사용한다. 이 실행 코드는 PC 기반(Program Counter-relative)의 load 명령어나 store 명령어를 사용하여 필요한 데이터에 접근할 수 있다. 길이가 고정된 명령어(instruction)를 사용하는 경우 명령어의 오프셋 크기에 따라 해당 명령어를 사용하여 접근할 수 있는 메모리 범위(range)에 한계가 있기 때문에 실행 코드 안에 명령어와 데이터가 혼재하도록 실행 코드를 생성한다.
따라서, 마이크로프로세서가 데이터를 명령어로 인식하지 않도록 하기 위해서는 데이터 영역의 직전 주소에 해당 데이터 영역을 건너뛰고 다음 명령어를 수행하도록 하는 분기 명령어(branch instruction)가 삽입되어야 한다. 즉 데이터 영역(data area)에 의해 분리된 제1 코드 영역(code are)과 제2 코드 영역을 연결하기 위해 제1 코드 영역의 끝에 분기 명령어를 삽입한다. 이때 명령어와 데이터를 너무 산발적으로 쪼개어 배치하면 캐시 메모리(cache memory)의 성능이 저하될 뿐만 아니라 분기 명령어가 과도하게 삽입되므로 코드의 품질이 악화된다.
명령어를 저장하기 위한 캐시 메모리와 데이터를 저장하기 위한 캐시 메모리를 따로 사용하는 환경에서 캐시 메모리의 성능을 개선하기 위해서는 명령어와 데이터의 지역성을 높여서 캐시 메모리에 저장된 명령어와 데이터의 적중률을 높여야 한다. 명령어와 데이터가 혼재하는 실행 코드에서 각각의 지역성을 높이기 위해서는 가능한 데이터 영역의 크기를 증가시켜 그 개수를 줄임으로써 데이터의 연속성 및 명령어의 연속성을 극대화해야 한다. 데이터 영역의 수를 감소시키면 다음 코드 영역으로 분기하기 위한 분기 명령어의 수를 줄이는 효과도 기대할 수 있다.
본 발명은 실행 코드 내에 명령어와 데이터를 효율적으로 배치함으로써 분기 명령어의 삽입을 최소화하면서 명령어 및 데이터의 지역성을 높일 수 있는 명령어 및 데이터 배치 방법 및 장치를 제공하기 위한 것이다.
본 발명의 일 실시예에 따른 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법은, 생성된 명령어를 제1 버퍼에 순차적으로 저장하여 명령어 블록을 생성하는 단계와, 상기 명령어가 데이터를 참조하는 경우 해당 데이터를 제2 버퍼에 순차적으로 저장하여 데이터 블록을 생성하는 단계와, 상기 명령어 블록에 포함된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 상기 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 상기 제1 버퍼와 상기 제2 버퍼를 메모리에 플러싱(flushing)함으로써 실행 코드를 생성하는 단계를 포함한다.
상기 플러싱 단계는, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함할 수 있다.
상기 명령어 및 데이터 배치 방법은 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행되고, 상기 플러싱 단계는, 상기 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 배치하고, 상기 음수 오프셋 모드의 경우는 상기 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함할 수 있다.
상기 명령어 블록에 작은 오프셋을 가지는 명령어와 큰 오프셋을 가지는 명령어가 혼재하는 경우, 상기 데이터 블록 생성 단계는, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 별도의 버퍼에 저장하는 단계를 포함하고, 상기 플러싱 단계는, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 상기 명령어 블록과 인접하도록 상기 실행 코드에 추가하는 단계를 포함할 수 있다.
상기 명령어 및 데이터 배치 방법은 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행되고, 상기 플러싱 단계는, 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행코드에 추가하고, 음수 오프셋 모드의 경우는 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함할 수 있다.
상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록은 양수 오프셋을 사용하여 생성되고, 상기 플러싱 단계는, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함할 수 있다.
상기 명령어 및 데이터 배치 방법은, 다음 영역을 처리할 때, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록은 양수 오프셋을 사용하여, 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록은 음수 오프셋을 사용하여 생성하고, 플러싱 수행시는 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 더 포함할 수 있다.
본 발명의 다른 실시예에 따른 동적 기계어 코드 생성시 명령어 및 데이터의 배치 장치는, 제1 버퍼 및 제2 버퍼와; 생성된 명령어를 상기 제1 버퍼에 순차적으로 저장하여 명령어 블록을 생성하고, 상기 명령어가 데이터를 참조하는 경우 해당 데이터를 상기 제2 버퍼에 순차적으로 저장하여 데이터 블록을 생성하고, 상기 명령어 블록에 포함된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 상기 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 상기 제1 버퍼와 상기 제2 버퍼를 실행 코드에 플러싱(flushing)하는 제어부를 포함한다.
상기 명령어 및 데이터 배치 장치는, 상기 제어부가 상기 명령어 블록의 생성, 상기 데이터 블록의 생성 및 상기 플러싱을 양수 오프셋 모드에서 수행중인지 음수 오프셋 모드에서 수행중인지 여부를 나타내는 플래그를 더 포함할 수 있다.
도 1은 본 발명의 일실시예에 따른 명령어 및 데이터 배치 장치의 구성도이다.
도 2는 본 발명의 다른 실시예에 따른 명령어 및 데이터 배치 방법의 흐름도이다.
도 3은 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 4는 양수 오프셋 모드와 음수 오프셋 모드를 전환하면서 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 5는 본 발명의 또 다른 실시예에 따른 명령어 및 데이터 배치 방법의 흐름도이다.
도 6은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 7은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 양수 오프셋 모드와 음수 오프셋 모드를 전환하면서 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 8은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 다른 예이다.
이하에서는 도면을 참조하여 본 발명의 다양한 실시예들을 설명한다.
도 1은 본 발명의 일실시예에 따른 명령어 및 데이터 배치 장치(100)의 구성도이다.
도 1을 참조하면, 명령어 및 데이터 배치 장치(100)는 생성된 명령어를 임시 저장하기 위한 제1 버퍼(111)와 데이터를 임시 저장하기 위한 제2 버퍼(112)를 포함하는 버퍼부(110); 및 생성된 명령어를 상기 제1 버퍼에 순차적으로 저장하고, 명령어가 데이터를 참조하는 경우 해당 데이터를 제2 버퍼에 순차적으로 저장하고, 제1 버퍼에 저장된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 제1 버퍼(111)와 제2 버퍼(112)를 실행 코드에 플러싱(flushing)하는 제어부(120)를 포함한다. 버퍼부(110)는 완성된 실행 코드를 저장하기 위한 메모리(130)와의 용도에 따른 구분이며, 실제로는 메모리(130) 상에 위치한다. 또한, 명령어 및 데이터 배치 장치(100)는 제어부(120)가 상기 명령어 블록의 생성, 상기 데이터 블록의 생성 및 상기 플러싱을 양수 오프셋 모드에서 수행중인지 음수 오프셋 모드에서 수행중인지 여부를 나타내는 플래그(미도시)를 포함할 수 있다. 또한, 제어부(120)는 적시 컴파일러의 형태로 구현될 수 있다. 제어부(120)의 기능과 다양한 실시예에 대해서는 도 2 내지 도 8을 참조하여 후술하기로 한다.
본 발명에서는 버퍼에 임시로 저장된 명령어과 그에 대응하는 일련의 데이터를 각각 명령어 블록(instructions block)과 데이터 블록(data block)으로 칭하고, 실행 코드에 추가된 명령어들의 집합과 데이터 집합을 각각 코드 영역(code area)과 데이터 영역(data area)으로 칭하기로 한다.
도 2는 본 발명의 다른 실시예에 따른 명령어 및 데이터 배치 방법의 흐름도이다.
도 2를 참조하면, 첫번째로 생성되는 명령어를 제1 버퍼에 저장한다(S210). 생성된 명령어가 데이터를 참조하는 명령어인 경우, 즉 PC 기반 오프셋을 사용하는 명령어인 경우, 명령어가 참조하는 데이터를 제2 버퍼에 저장한다(S220). 명령어의 저장과 데이터의 저장은 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때까지 순차적으로 하나씩 생성되는 명령어를 대상으로 반복된다. 추가로 명령어 및/또는 데이터를 제1 버퍼 및/또는 제2 버퍼에 저장함으로써 생성될 명령어 블록과 데이터 블록을 실행 코드에 추가했을 때, 명령어 블록 내에 포함된 데이터 참조 명령어들이 대응하는 데이터를 유효하게 참조할 수 있다면, 오프셋 범위의 한계에 이르지 않은 것이다. 반면, 추가로 명령어 및/또는 데이터를 제1 버퍼 및/또는 제2 버퍼에 저장함으로써 생성될 명령어 블록과 데이터 블록을 실행 코드에 추가했을 때, 명령어 블록 내에 포함된 데이터 참조 명령어들이 대응하는 데이터를 유효하게 참조할 수 없다면, 오프셋 범위의 한계에 이른 것이다. 오프셋 범위의 한계에 도달한 경우는(S230), 제1 버퍼 및 제2 버퍼를 실행 코드로 플러싱(flushing)한다(S240). 즉, 제1 버퍼에 생성된 명령어 블록과 제2 버퍼에 생성된 데이터 블록을 실행 코드에 추가하고 제1 버퍼 및 제2 버퍼의 내용을 삭제한다. 오프셋 범위의 한계에 도달하지 않은 경우는(S230) 다음 명령어를 생성하기 위해 S210 단계로 돌아간다.
도 3은 명령어 블록 및 데이터 블록을 실행 코드(300)에 추가하는 모습을 예시한 것이다.
도 1 및 도 3을 참조하면, 제1 버퍼(111)에 생성되어 있는 명령어 블록과 제2 버퍼(112)에 생성되어 있는 데이터 블록이 실행 코드(300)에 추가되며, 다음에 생성될 명령어 블록이 삽입될 다음 코드 영역의 시작(323)으로의 분기를 위한 분기 명령어(321)가 명령어 블록과 데이터 블록의 사이에 삽입된다. 결과적으로, 실행 코드(300)에 하나의 코드 영역(311)과 하나의 데이터 영역(312)이 생성되었다. 다음에 생성되는 명령어 블록과 데이터 블록의 경우도 이와 유사한 방법으로 실행 코드(300)의 다음 공간에 다음 코드 영역과 데이터 영역을 형성할 것이다.
도 1 및 도 3을 참조하면, 하나씩 생성되는 명령어와 데이터를 각각 제1 버퍼(111) 및 제2 버퍼(112)에 저장하다가 오프셋 범위를 벗어나기 전에 실행 코드(300)에 두 버퍼(111, 112)의 내용을 기입한다. 다시 말해, 코드 영역(311) 내의 첫번째 데이터 참조 명령어(320)가 가진 오프셋 범위의 한계 내에서 데이터 영역(312)이 시작되도록 명령어와 데이터를 실행 코드(300)에 배치한다. 오프셋 범위의 한계를 계산할 때는 데이터 영역(312) 앞에 삽입되어야 하는 분기 명령어(321)가 차지하는 메모리 크기도 고려하여야 한다.
도 4는 양수 오프셋 모드와 음수 오프셋 모드를 전환하면서 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 4를 참조하면, 양수 오프셋 모드와 음수 오프셋 모드를 전환하면서 실행 코드(400)에 코드 영역(411, 422, 431)과 데이터 영역(413, 421, 433)을 생성한다. 결과적으로, 양수 오프셋 사용 영역(410), 음수 오프셋 사용 영역(420), 양수 오프셋 사용 영역(430)의 순으로 실행 코드가 채워진다.
도 1 및 도 4를 참조하면, 양수 오프셋 사용 영역(410)의 생성 과정은 다음과 같다. 양수 오프셋 모드에서 명령어 블록과 데이터 블록을 생성한다. 명령어를 하나씩 순차적으로 생성하는 과정에서 명령어가 사용하는 데이터가 발생하면 이를 별도의 저장 공간인 제2 버퍼(112)에 순차적으로 저장한다. 양수 오프셋 모드이므로 하나씩 생성되는 명령어들을 실행 코드(400)에 직접 추가하는 방법이 사용될 수도 있고, 명령어들도 별도의 제1 버퍼(111)에 저장하여 명령어 블록을 생성했다가 이 명령어 블록에 포함된 데이터 참조 명령어들 중 적어도 하나와 데이터 블록 내의 대응하는 데이터의 거리가 오프셋 범위의 한계에 이르렀을 때 제1 버퍼(111)의 명령어들을 한번에 실행 코드(400)에 추가하는 방법이 사용될 수도 있다. 양수 오프셋 사용 영역(410)에서는 코드 영역(411)의 명령어 블록 끝에 다음 코드 영역(422)으로 분기하기 위한 분기 명령어(412)가 삽입되고, 그 뒤에 데이터 영역(413)이 생성된다. 따라서, 오프셋 범위의 한계를 계산할 때는 분기 명령어(412)가 차지하는 공간도 고려해야 한다. 양수 오프셋 사용 영역(410)이 채워짐과 동시에 제1 버퍼(111) 및 제2 버퍼(112)는 비워지고 오프셋 모드가 음수 오프셋 모드로 전환된다.
음수 오프셋 사용 영역(420)의 생성 과정은 다음과 같다. 이전의 코드 영역(411)에 생성된 명령어의 다음 명령어부터 생성하여 제1 버퍼(111)에 하나씩 저장하고, 이 과정에서 명령어가 사용하는 데이터가 발생하면 이를 제2 버퍼(112)에 순차적으로 저장한다. 제1 버퍼(111)에 생성된 명령어 블록에 포함된 데이터 참조 명령어들 중 적어도 하나와 제2 버퍼(112)에 생성된 데이터 블록 내의 대응하는 데이터의 거리가 오프셋 범위의 한계에 이르렀을 때, 제1 버퍼(111) 및 제2 버퍼(112)를 실행 코드(400)로 플러싱한다. 음수 오프셋 사용 영역(420)은 데이터 영역(421)과 코드 영역(422) 순으로 채워지며, 분기 명령어는 삽입되지 않는다. 이와 동시에 제1 버퍼(111) 및 제2 버퍼(112)는 비워지고 오프셋 모드가 다시 양수 오프셋 모드로 전환된다.
양수 오프셋 영역(430)의 생성은 이전의 양수 오프셋 영역(410)의 생성과 동일한 과정에 의해 수행되어, 다음 코드 영역(미도시)으로 분기하기 위한 분기 명령어(431)가 끝에 삽입된 코드 영역(431)과 데이터 영역(433)으로 채워진다.
도 4를 참조하면, 양수 오프셋 사용 영역(410)의 데이터 영역(413)과 음수 오프셋 사용 영역(420)의 데이터 영역(421)이 하나의 통합된 데이터 영역을 이루고, 음수 오프셋 사용 영역(420)의 코드 영역(422)과 양수 오프셋 사용 영역(430)의 코드 영역(431)이 하나의 통합된 코드 영역을 이루게 되었다. 즉, 데이터는 데이터끼리 명령어는 명령어끼리 가능한 많이 모이게 함으로써 명령어와 데이터의 지역성을 극대화시킬 수 있다. 결과적으로, 명령어와 데이터에 대한 캐시 메모리를 별도로 사용하는 환경에서 캐시 적중률이 높아지므로 캐시 메모리로부터 획득하지 못한 명령어나 데이터를 주메모리로부터 읽기 위해 소모하는 시간이 감소되어 프로그램 수행 시간이 단축된다. 또한, 분기 명령어의 수도 최대한 줄일 수 있어 분기 명령어에 의해 소모되는 메모리 사용량 및 클럭 주기를 절약할 수 있다.
도 5는 본 발명의 또 다른 실시예에 따른 명령어 및 데이터 배치 방법의 흐름도로서, 오프셋 범위를 달리하는 복수 종류의 명령어가 혼재되어 있는 경우를 처리한 예이다.
도 5를 참조하면, 먼저 명령어를 생성하여 명령어 버퍼에 저장한다(S510). 생성된 명령어가 데이터를 참조하는지 여부를 판단한다(S512). 명령어의 생성 과정에서 데이터가 발생하면 이를 별도의 저장 공간에 저장하는데, 이때 명령어의 오프셋 범위에 따라 다른 버퍼에 저장한다(S514). 두 종류의 명령어가 혼재되어 있는 경우는, 작은 오프셋을 가진 명령어를 위한 데이터를 제1 데이터 버퍼에 저장하고, 큰 오프셋을 가진 명령어를 위한 데이터를 제2 데이터 버퍼에 저장한다. 다음으로 명령어 블록에 저장된 명령어들의 오프셋 범위 내에서 데이터 블록들의 삽입이 가능한지 여부를 판단하여 오프셋 범위의 한계에 도달했는지 여부를 결정한다(S516). 명령어의 종류에 상관없이 명령어의 오프셋 범위의 한계에 도달해서 데이터를 삽입해야 하는 시점이 도달하면, S522 단계로 진행하여 임시 저장된 명령어와 모든 데이터를 한번에 실행 코드에 삽입한다. 아직 오프셋 범위의 한계에 도달하지 않았고(S516), 명령어의 생성도 종료되지 않은 경우는(S518), S510 단계로 돌아가서 명령어의 생성을 계속한다.
실행 코드에 명령어와 데이터를 추가하기 전에, 오프셋 모드가 양수 오프셋 모드인지 체크한다(S522). 양수 오프셋 모드의 경우, 코드 영역의 마지막 주소에 분기 명령어를 삽입하면서(S524) 명령어 버퍼와 오프셋별 데이터 버퍼들을 모두 실행 코드로 플러싱한다(S526). 음수 오프셋 모드인 경우는, 분기 명령어의 삽입 없이 명령어 블록과 오프셋별 데이터 블록들을 실행 코드에 추가하면 된다(S526). 데이터 블록들의 추가시, 작은 오프셋을 가지는 명령어를 위한 데이터가 코드 영역에 인접하도록 하고, 오프셋이 클수록 코드 영역과 멀어지도록 배치한다. 다음으로, 현재 양수 오프셋 모드이면 음수 오프셋 모드로, 음수 오프셋 모드이면 양수 오프셋 모드로 전환한다(S528).
명령어의 생성이 종료되면(S518), 현재 명령어 버퍼에 저장되어 있는 명령어 블록과 오프셋별 데이터 버퍼에 저장되어 있는 데이터 블록들을 실행 코드에 추가하고 종료한다. 이때도, 작은 오프셋을 가지는 명령어를 위한 데이터가 코드 영역에 인접하도록 하고, 오프셋이 클수록 코드 영역과 멀어지도록 데이터 블록들을 배치한다. 처리할 명령어가 아직 남은 경우는 S510 단계로 돌아간다.
이와 같이, 본 발명의 일 실시예에 따르면 복수의 오프셋 범위를 사용하는 환경을 지원할 수 있으므로 코드 생성기의 명령어 선택 폭이 확장된다.
도 6은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 6을 참조하면, 양수 오프셋 모드에서 생성된 명령어 블록과 다음 코드 영역의 시작 위치(615)로의 분기 명령어(612)를 실행 코드(600)에 추가하여 코드 영역(511)을 형성하고, 오프셋 범위가 다른 2개의 데이터 블록이 코드 영역(511) 다음에 2개의 데이터 영역(513, 514)을 형성하였음을 알 수 있다(여기서, a < b). 양수 오프셋 모드만을 채용하는 경우는 다음 코드 영역과 데이터 영역들도 이와 동일한 방법으로 생성될 것이다.
도 7은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 양수 오프셋 모드와 음수 오프셋 모드를 전환하면서 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 모습을 예시한 것이다.
도 7을 참조하면, 양수 오프셋 사용 영역(711)이 도 6의 예에서와 유사한 방법으로 형성되며, 여기에도 분기 명령어(713)가 다음 음수 오프셋 사용 영역(712)의 코드 영역으로 분기하기 위해 삽입되었다. 음수 오프셋 사용 영역(712)에는 큰 오프셋을 가지는 명령어를 위한 데이터 영역, 작은 오프셋을 가지는 명령어를 위한 데이터 영역 및 코드 영역이 순차적으로 배치된다. 음수 오프셋 사용 영역(712) 뒤에는 다음 양수 오프셋 사용 영역의 코드 영역이 배치될 것이므로 분기 명령어의 삽입이 필요 없다.
도 8은 오프셋 범위가 다른 두 종류의 명령어가 혼재하는 경우 명령어 블록 및 데이터 블록을 실행 코드에 추가하는 다른 예로서, 16 비트 명령어와 32비트 명령어가 같이 사용되는 경우이다. 이 실시예에서 16 비트 명령어는 음수 오프셋을 지원하지 않는 것으로 가정한다.
도 8의 실시예에서는, 명령어 버퍼, 32 비트 명령어를 위한 상수를 저장하기 위한 CP(Constant Pool) 버퍼(이하, CP32라 함), 16 비트 명령어를 위한 상수를 저장하기 위한 CP 버퍼(이하, CP16라 함)가 사용된다. CP32는 양수 오프셋 모드인지 음수 오프셋 모드인지를 나타내기 위한 플래그를 가지며, 각각 CP+32 버퍼, CP-32 버퍼로 구분된다. 즉, CP+32, CP-32, CP+16의 3가지 종류의 데이터 버퍼가 사용된다. 생성된 데이터 참조 명령어와 대응하는 상수 사이의 거리가 오프셋 범위의 한계에 이르면, 명령어 버퍼 및 데이터 버퍼들은 실행 코드가 임시로 저장되는 코드 버퍼(800)로 플래싱된다.
코드 버퍼(800)가 채워지는 과정은 다음과 같다. 명령어를 하나씩 생성하면서 상수를 생성할 필요가 있을 때, 32 비트 load 명령어라면 CP32 버퍼(양수 오프셋 모드에서는 CP+32 버퍼, 음수 오프셋 모드에서는 CP-32버퍼)에, 16 비트 load 명령어라면 CP+16 버퍼에 상수를 추가한다. 새로운 명령어의 추가로 인해 명령어 버퍼의 load 명령어 중 적어도 하나에 대한 오프셋 범위를 벗어나게 될 때, 양수 오프셋 모드인 경우는 첫번째 영역(811)과 같은 형태로, 음수 오프셋 모드인 경우는 두번째 영역(812)과 같은 형태로 명령어 버퍼 및 데이터 버퍼들을 코드 버퍼(800)로 플러싱한다. 다음으로, 오프셋 모드를 전환한다.
32 비트 load 명령어들에 의해 CP-32가 채워지는 동안 명령어 버퍼의 크기가 32 비트 load 명령어의 오프셋 범위의 한계에 도달하는 경우는, 세번째 영역(813)과 같은 형태로 명령어 버퍼 및 CP-32 버퍼를 코드 버퍼(800)로 플러싱한다. 다음으로, 오프셋 모드를 양수 모프셋 모드로 전환한다. 하나의 함수에 대해 실행 코드 생성이 완료되면 코드 버퍼의 내용이 코드 캐시로 복사될 것이다.
상기와 같이, [코드, CP+16, CP+32]의 형태로 구성되는 첫번째 영역(811), [CP-32, 코드, CP+16]의 형태로 구성되는 두번째 영역(812), [CP-32, 코드]의 형태로 구성되는 세번째 영역(813)이 각각 하나의 단위로 실행 코드로의 플러싱이 수행된다. 결과적으로, {CP+16, CP+32, CP-32} 또는 {CP+16, CP-32}와 같은 2가지의 CP 패턴이 형성되는바, PC 기반 오프셋을 사용하는 명령어에 의해 사용되는 데이터를 가능한 많이 모아 실행 코드에 삽입할 수 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다. 또한, 본 발명에 따른 시스템은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크 및 광데이터 저장장치 등을 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.

Claims (16)

  1. 전자 장치가 동적 기계어 코드 생성시 명령어 및 데이터를 배치하는 방법에 있어서,
    생성된 명령어를 제1 버퍼에 순차적으로 저장하여 명령어 블록을 생성하는 단계와;
    상기 명령어가 데이터를 참조하는 경우 해당 데이터를 제2 버퍼에 순차적으로 저장하여 데이터 블록을 생성하는 단계와;
    상기 명령어 블록에 포함된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 상기 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 상기 제1 버퍼와 상기 제2 버퍼를 메모리에 플러싱(flushing)함으로써 실행 코드를 생성하는 단계를 포함하고,
    상기 실행 코드의 데이터 영역은 상기 데이터 참조 명령어의 오프셋 범위의 한계 내에서 시작되는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  2. 제1항에 있어서,
    상기 실행 코드를 생성하는 단계는, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  3. 제1항에 있어서,
    상기 명령어 및 데이터 배치 방법은 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행되고,
    상기 실행 코드를 생성하는 단계는, 상기 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 배치하고, 상기 음수 오프셋 모드의 경우는 상기 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  4. 제1항에 있어서,
    상기 명령어 블록에 작은 오프셋을 가지는 명령어와 큰 오프셋을 가지는 명령어가 혼재하는 경우,
    상기 데이터 블록 생성 단계는, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 별도의 버퍼에 저장하는 단계를 포함하고,
    상기 실행 코드를 생성하는 단계는, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 상기 명령어 블록과 인접하도록 상기 실행 코드에 추가하는 단계를 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  5. 제4항에 있어서,
    상기 명령어 및 데이터 배치 방법은 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행되고,
    상기 실행 코드를 생성하는 단계는, 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행코드에 추가하고, 음수 오프셋 모드의 경우는 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  6. 제4항에 있어서,
    상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록은 양수 오프셋을 사용하여 생성되고,
    상기 실행 코드를 생성하는 단계는, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  7. 제6항에 있어서,
    다음 영역을 처리할 때, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록은 양수 오프셋을 사용하여, 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록은 음수 오프셋을 사용하여 생성하고, 플러싱 수행시는 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 단계를 더 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 의한 명령어 및 데이터 배치 방법을 수행하는 프로그램을 기록한 컴퓨터 판독 가능한 기록매체.
  9. 동적 기계어 코드 생성시 명령어 및 데이터의 배치 장치에 있어서,
    제1 버퍼 및 제2 버퍼와;
    생성된 명령어를 상기 제1 버퍼에 순차적으로 저장하여 명령어 블록을 생성하고, 상기 명령어가 데이터를 참조하는 경우 해당 데이터를 상기 제2 버퍼에 순차적으로 저장하여 데이터 블록을 생성하고, 상기 명령어 블록에 포함된 데이터 참조 명령어와 그에 대응하는 데이터의 거리가 상기 데이터 참조 명령어의 오프셋 범위의 한계에 이르렀을 때, 상기 제1 버퍼와 상기 제2 버퍼를 실행 코드에 플러싱(flushing)하는 제어부를 포함하고,
    상기 실행 코드의 데이터 영역은 상기 데이터 참조 명령어의 오프셋 범위의 한계 내에서 시작되는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  10. 제9항에 있어서,
    상기 제어부는, 플러싱 수행시, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  11. 제9항에 있어서,
    상기 제어부가 상기 명령어 블록의 생성, 상기 데이터 블록의 생성 및 상기 플러싱을 양수 오프셋 모드에서 수행중인지 음수 오프셋 모드에서 수행중인지 여부를 나타내는 플래그를 더 포함하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  12. 제9항에 있어서,
    상기 제어부는, 상기 명령어 블록의 생성, 상기 데이터 블록의 생성 및 상기 플러싱을 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행하고, 플러싱 수행시, 상기 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어 및 상기 데이터 블록을 순차적으로 상기 실행 코드에 추가하고, 상기 음수 오프셋 모드의 경우는 상기 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  13. 제9항에 있어서,
    제3 버퍼를 더 포함하고,
    상기 제어부는, 상기 명령어 블록에 작은 오프셋을 가지는 명령어와 큰 오프셋을 가지는 명령어가 혼재하는 경우, 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록과 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 상기 제2 버퍼 및 상기 제3 버퍼에 별도로 저장하고, 플러싱 수행시, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 상기 명령어 블록과 인접하도록 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  14. 제13항에 있어서,
    상기 제어부는, 상기 명령어 블록의 생성, 상기 데이터 블록의 생성 및 상기 플러싱을 양수 오프셋 모드와 음수 오프셋 모드를 교대로 전환하면서 수행하고, 플러싱 수행시, 양수 오프셋 모드의 경우는 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행코드에 배치하고, 음수 오프셋 모드의 경우는 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 명령어 블록을 순차적으로 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  15. 제13항에 있어서,
    상기 제어부는, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 양수 오프셋을 사용하여 생성하고, 플러싱 수행시, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록 및 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
  16. 제13항에 있어서,
    상기 제어부는, 다음 영역을 처리할 때, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록은 양수 오프셋을 사용하여, 큰 오프셋을 가지는 명령어를 위한 데이터 블록은 음수 오프셋을 사용하여 생성하고, 플러싱 수행시, 상기 큰 오프셋을 가지는 명령어를 위한 데이터 블록, 상기 명령어 블록, 다음 코드 영역으로의 분기를 위한 분기 명령어, 상기 작은 오프셋을 가지는 명령어를 위한 데이터 블록을 순차적으로 상기 실행 코드에 추가하는 것을 특징으로 하는 명령어 및 데이터 배치 장치.
KR1020100014740A 2010-02-18 2010-02-18 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치 KR101775554B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020100014740A KR101775554B1 (ko) 2010-02-18 2010-02-18 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치
US13/030,787 US8826251B2 (en) 2010-02-18 2011-02-18 Method and apparatus for dynamically generating machine code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100014740A KR101775554B1 (ko) 2010-02-18 2010-02-18 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20110094977A KR20110094977A (ko) 2011-08-24
KR101775554B1 true KR101775554B1 (ko) 2017-09-07

Family

ID=44930900

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100014740A KR101775554B1 (ko) 2010-02-18 2010-02-18 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101775554B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009106901A1 (en) * 2008-02-29 2009-09-03 Euroclear Sa/Nv Improvements relating to handling and processing of massive numbers of processing instructions in real time

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009106901A1 (en) * 2008-02-29 2009-09-03 Euroclear Sa/Nv Improvements relating to handling and processing of massive numbers of processing instructions in real time

Also Published As

Publication number Publication date
KR20110094977A (ko) 2011-08-24

Similar Documents

Publication Publication Date Title
US10740247B2 (en) Method for accessing entry in translation lookaside buffer TLB and processing chip
EP2487585A1 (en) Method and device for dynamically loading relocatable file
US20110154299A1 (en) Apparatus and method for executing instrumentation code
US20130036426A1 (en) Information processing device and task switching method
CN108073525B (zh) 预取数据的方法、装置和系统
RU2405188C2 (ru) Способы и устройство для обеспечения корректного предварительного декодирования
JP2011065503A (ja) キャッシュメモリシステム及びキャッシュメモリのway予測の制御方法
US20100153622A1 (en) Data Access Controller and Data Accessing Method
US9158545B2 (en) Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler
JP2007206933A (ja) 情報処理装置、情報処理装置におけるブートローダ生成方法およびプログラム転送方法
KR101775554B1 (ko) 동적 기계어 코드 생성시 명령어 및 데이터의 배치 방법 및 장치
JP2009116621A (ja) 演算処理装置
WO2009098737A1 (ja) 外部デバイスアクセス装置、その制御方法及びシステムlsi
JP2008305246A (ja) 情報処理装置、キャッシュフラッシュ制御方法及び情報処理制御装置
JP4342392B2 (ja) ソフトウェア検証モデル生成方法
US8826251B2 (en) Method and apparatus for dynamically generating machine code
US20060225049A1 (en) Trace based signal scheduling and compensation code generation
US8694975B2 (en) Programming system in multi-core environment, and method and program of the same
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
JP2004070439A (ja) データの記憶領域への配置を決定するコンパイラ装置及び配置決定方法
CN103003796B (zh) 线程级推测中的动态数据同步
KR20140111416A (ko) 정적 스케쥴 프로세서의 논블로킹 실행 장치 및 방법
JP2009064207A (ja) コンパイル装置
US11681527B2 (en) Electronic device and multiplexing method of spatial
CN109710268B (zh) 面向vliw架构的动态二进制翻译方法和装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal