KR101171655B1 - 동적 바이너리 변환을 위한 트레이스 결정 방법 - Google Patents

동적 바이너리 변환을 위한 트레이스 결정 방법 Download PDF

Info

Publication number
KR101171655B1
KR101171655B1 KR1020100129535A KR20100129535A KR101171655B1 KR 101171655 B1 KR101171655 B1 KR 101171655B1 KR 1020100129535 A KR1020100129535 A KR 1020100129535A KR 20100129535 A KR20100129535 A KR 20100129535A KR 101171655 B1 KR101171655 B1 KR 101171655B1
Authority
KR
South Korea
Prior art keywords
basic block
block
memory access
primary
basic
Prior art date
Application number
KR1020100129535A
Other languages
English (en)
Other versions
KR20120067894A (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 KR1020100129535A priority Critical patent/KR101171655B1/ko
Publication of KR20120067894A publication Critical patent/KR20120067894A/ko
Application granted granted Critical
Publication of KR101171655B1 publication Critical patent/KR101171655B1/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명은 동적 바이너리 변환을 위한 트레이스 결정 방법에 관한 것으로서, 보다 구체적으로는 (1) 하나의 기본 블록(BB; Basic Block)을 1차 기본 블록으로 선정하는 단계; (2) 상기 1차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계; (3) 제어 흐름(control flow)을 통해 상기 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악하는 단계; (4) 상기 2차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계; (5) 상기 2차 기본 블록 중 상대적으로 상기 1차 기본 블록과 가장 많이 상기 메모리 접근 명령어가 중복되는 상기 2차 기본 블록을 추출하는 단계; 및 (6) 상기 1차 기본 블록과 상기 단계 (5)에서 추출된 2차 기본 블록을 포함하는 트레이스(trace)를 선택하여 변환 블록(TB; Translation Block)으로 설정하는 단계를 포함하는 것을 그 구성상의 특징으로 한다.
본 발명에서 제안하고 있는 동적 바이너리 변환을 위한 트레이스 결정 방법에 따르면, 제어 흐름(control flow)을 포함하는 변환 블록(TB; Translation Block)을 생성함으로써, 동적 바이너리 변환(Dynamic Binary Translation)에서 중복되는 메모리 접근 명령어를 최대한 제거할 수 있도록 하여 메모리 사용량을 절감하고 변환 효율을 대폭 향상시킬 수 있다.

Description

동적 바이너리 변환을 위한 트레이스 결정 방법{A METHOD FOR DETERMINING TRACE FOR DYNAMIC BINARY TRANSLATION}
본 발명은 동적 바이너리 변환을 위한 트레이스 결정 방법에 관한 것으로서, 특히 메모리 접근 수행(memory access)을 최소화시킬 수 있는 타깃 바이너리(target binary) 명령어들의 트레이스(trace)를 생성하는 동적 바이너리 변환을 위한 트레이스 결정 방법에 관한 것이다.
바이너리 변환(binary translation)은 타 기종 아키텍처(타깃, target)의 바이너리를 호스트라고 불리는 아키텍처(host)에서 수행하기 위해서 타깃 아키텍처의 명령어(ISA)를 호스트 아키텍처의 명령어로 번역하는 것을 의미한다.
동적 바이너리 변환(dynamic binary translation)이란 바이너리 변환의 번역과정을 실시간으로 수행하는 것을 의미한다. 즉, 타깃의 바이너리를 호스트 아키텍처의 명령어로 번역함과 동시에 수행하는 것이다. 따라서 동적 바이너리 변환을 통한 수행은 번역의 오버헤드를 함께 가지게 되어, 타깃 바이너리를 한꺼번에 번역하지 못하고 일부분씩 필요에 따라 번역하는 방식을 사용해야 한다.
호스트 아키텍처에서 동적 바이너리 변환을 통해 타깃 아키텍처의 바이너리를 수행하는 것을 다른 말로 에뮬레이션(emulation)이라 표현할 수 있다. 에뮬레이션 과정에서 타깃 아키텍처에서 수행되는 모습을 그대로 유지해서 프로그램의 수행 정확성을 유지하기 위해서는 타깃 아키텍처의 여러 특성을 유지해야 한다. 그 중에서 타깃 아키텍처의 레지스터(register)의 변화를 정확히 수집해야 한다. 이를 위해 사용할 수 있는 방법 중의 하나가 메모리 영역에 타깃 아키텍처의 레지스터를 가상으로 생성하는 것이다(virtual register mapping). 그러나 이 방법은 메모리 영역에 있는 타깃 아키텍처의 가상 레지스터를 호스트의 실제 레지스터로 이동해서 사용해야만 하기 때문에, 많은 메모리 접근 수행(memory access)이 발생하게 된다는 단점이 있다.
예를 들어, 동적 바이너리 변환 소프트웨어의 하나인 QEMU로 x86 명령어를 가지는 바이너리를 ARM(Advanced RISC Machines) 플랫폼에서 수행하게 되면, 타깃 머신(x86)이 가지는 레지스터를 호스트 머신(ARM)의 메모리 영역에 가상으로 할당하여 사용하게 된다. 이렇게 QEMU는 virtual register mapping을 이용하기 때문에, 명령어의 번역 시에 호스트에 번역되는 명령어는,
1. 메모리의 가상 레지스터에서 호스트의 실제 레지스터로의 load
2. 번역하기 전의 명령어가 수행하는 실제 작업
3. 명령어를 통해 변화된 레지스터를 가상 레지스터에 업데이트하는 store
의 세 단계의 명령어를 가지게 된다. 예를 들어, x86 명령어인“move %eax, %ebx”는 QEMU를 통하여 번역되면 세 개의 ARM 명령어인 "load r0, %eax”, “move r1, r0”, “store r1, %ebx”로 번역된다.
동적 바이너리 변환은 하나의 바이너리를 한 번에 번역하면 수행 중에 발생하는 오버헤드가 프로그램 수행 초반에 모이게 되어, 사용자의 입력을 받을 수 없게 된다. 따라서 바이너리의 일정부분을 정하여 번역하고 수행하는 방식을 택하게 된다. 예를 들어, QEMU는 control flow가 없는 일정영역을 하나의 변환 블록(TB; Translation Block)으로 설정하고 번역하여 수행한다.
따라서 하나의 변환 블록 내에는 여러 개의 타깃 명령어가 모이게 되며, 이를 번역한 호스트 번역 코드에는 많은 메모리 접근 명령어가 쌓이게 된다. 하나의 변환 블록을 번역하더라도 변환 블록 내의 각각의 명령어는 따로따로 번역되기 때문에, 하나의 가상 레지스터를 여러 번 읽고 쓰게 되는 일이 발생한다. 예를 들어, x86 바이너리에 “add eax, edx”, “sub eax, ebx”란 sequence의 명령어가 있다면 eax에 대한 load가 두 번 발생하고, eax에 대한 store가 두 번 발생하게 된다. 이와 같이 종래의 동적 바이너리 변환 방법은 하나의 변환 블록 내에서 메모리 접근 명령이 중복됨에 따라 효율이 저하된다는 문제점이 있다. 물론 이를 제거하면 성능을 개선할 수 있으나, 종래에 사용되는 하나의 변환 블록은 제어 흐름(control flow)이 없는 기본 블록(BB; Basic Block)수준으로 구성되어 있기 때문에, 제어 흐름상에 있는 중복된 메모리 접근을 제거할 수 없다는 문제점이 있다.
본 발명은 기존에 제안된 방법들의 상기와 같은 문제점들을 해결하기 위해 제안된 것으로서, 제어 흐름(control flow)을 포함하는 변환 블록(TB; Translation Block)을 생성함으로써, 동적 바이너리 변환(Dynamic Binary Translation)에서 중복되는 메모리 접근 명령어를 최대한 제거할 수 있도록 하여 메모리 사용량을 절감하고 변환 효율을 대폭 향상시킬 수 있는 동적 바이너리 변환을 위한 트레이스 결정 방법을 제공하는 것을 그 목적으로 한다.
상기한 목적을 달성하기 위한 본 발명의 특징에 따른, 동적 바이너리 변환을 위한 트레이스 결정 방법은,
(1) 하나의 기본 블록(BB; Basic Block)을 1차 기본 블록으로 선정하는 단계;
(2) 상기 1차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계;
(3) 제어 흐름(control flow)을 통해 상기 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악하는 단계;
(4) 상기 2차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계;
(5) 상기 2차 기본 블록 중 상대적으로 상기 1차 기본 블록과 가장 많이 상기 메모리 접근 명령어가 중복되는 상기 2차 기본 블록을 추출하는 단계; 및
(6) 상기 1차 기본 블록과 상기 단계 (5)에서 추출된 2차 기본 블록을 포함하는 트레이스(trace)를 선택하여 변환 블록(TB; Translation Block)으로 설정하는 단계를 포함하는 것을 그 구성상의 특징으로 한다.
바람직하게는, 상기 단계 (5)는,
(5a) 상기 각 2차 기본 블록에 대해서 상기 1차 기본 블록과 중복되는 상기 메모리 접근 명령어의 개수를 확인하는 단계;
(5b) 상기 각 2차 기본 블록의 수행 횟수를 파악하는 단계; 및
(5c) 상기 중복된 상기 메모리 접근 명령어의 개수와 상기 수행 횟수를 곱한 수가 상대적으로 가장 높은 상기 2차 기본 블록을 추출하는 단계를 포함할 수 있다.
바람직하게는,
상기 단계 (5)에서, 상기 1차 기본 블록과 상기 메모리 접근 명령어가 중복되는 상기 2차 기본 블록이 없다고 판단되는 경우, 상기 2차 기본 블록의 추출을 생략하며,
상기 (6)에서, 상기 1차 기본 블록만을 상기 변환 블록으로 설정할 수 있다.
바람직하게는,
(7) n차(n은 2 이상의 정수) 기본 블록에 대하여 상기 단계 (3) 내지 상기 단계 (6)을 반복 수행하여 상기 n차 기본 블록과 상기 메모리 접근 명령어가 가장 많이 중복되는 n+1차 기본 블록을 추출한 뒤 변환 블록을 생성하는 단계를 더 포함하며,
상기 단계 (6)에서, 상기 1차 내지 상기 n+1차 기본 블록을 모두 포함하는 트레이스를 선택하여 상기 변환 블록으로 설정할 수 있다.
바람직하게는,
(8) 상기 생성된 변환 블록을 번역하여 상기 호스트에서 수행하는 단계를 더 포함할 수 있다.
더욱 바람직하게는, 상기 단계 (8)에서,
상기 번역과 상기 수행을 동시에 진행하여 동적 바이너리 변환을 구현할 수 있다.
본 발명에서 제안하고 있는 동적 바이너리 변환을 위한 트레이스 결정 방법에 따르면, 제어 흐름(control flow)을 포함하는 변환 블록(TB; Translation Block)을 생성함으로써, 동적 바이너리 변환(Dynamic Binary Translation)에서 중복되는 메모리 접근 명령어를 최대한 제거할 수 있도록 하여 메모리 사용량을 절감하고 변환 효율을 대폭 향상시킬 수 있다.
도 1은 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 순서도.
도 2는 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 단계 S500의 세부 순서도.
도 3은 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 블록도.
이하에서는 첨부된 도면을 참조하여 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 바람직한 실시예를 상세히 설명한다. 다만, 본 발명의 바람직한 실시예를 상세하게 설명함에 있어, 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략한다. 또한, 유사한 기능 및 작용을 하는 부분에 대해서는 도면 전체에 걸쳐 동일 또는 유사한 부호를 사용한다.
덧붙여, 명세서 전체에서, 어떤 부분이 다른 부분과 ‘연결’되어 있다고 할 때, 이는 ‘직접적으로 연결’되어 있는 경우뿐만 아니라, 그 중간에 다른 소자를 사이에 두고 ‘간접적으로 연결’되어 있는 경우도 포함한다. 또한, 어떤 구성요소를 ‘포함’한다는 것은, 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있다는 것을 의미한다.
도 1은 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 순서도이다. 도 1에 도시된 바와 같이, 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법은, 하나의 기본 블록(BB; Basic Block)을 1차 기본 블록으로 선정하는 단계(S100), 1차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계(S200), 제어 흐름(control flow)을 통해 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악하는 단계(S300), 2차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계(S400), 2차 기본 블록 중 상대적으로 1차 기본 블록과 가장 많이 메모리 접근 명령어가 중복되는 2차 기본 블록을 추출하는 단계(S500), 1차 기본 블록과 단계 (5)에서 추출된 2차 기본 블록을 포함하는 트레이스(trace)를 선택하여 변환 블록(TB; Translation Block)으로 설정하는 단계(S600), n차(n은 2 이상의 정수) 기본 블록에 대하여 단계 S300 내지 단계 S600을 반복 수행하여 n차 기본 블록과 메모리 접근 명령어가 가장 많이 중복되는 n+1차 기본 블록을 추출한 뒤 변환 블록을 생성하는 단계(S700), 생성된 변환 블록을 번역하여 호스트에서 수행하는 단계(S800)를 포함하여 구성될 수 있다.
단계 S100에서는, 하나의 기본 블록을 1차 기본 블록으로 선정한다. 종래의 동적 바이너리 변환 방법에서는, 타깃 바이너리의 시작에서 끝으로 순차적으로 읽어가면서 제어 흐름(control flow)이나 함수 호출(function call) 등을 만나면 종료되도록 하여 변환 블록(Translation Block)을 만들게 된다. 즉, 하나의 기본 블록(Basic Block)으로 종료되는 것이다.
그러나 본 발명에서는, 하나의 기본 블록을 1차 기본 블록으로 선정하고, 1차 기본 블록에 연결된 n차 기본 블록을 모두 포함하는 변환 블록을 생성하여 사용한다. 다시 말하면 제어 흐름이나 함수 호출 지점에서 종료하지 않고 다음의 기본 블록으로 변환 블록을 확장하여 메모리 접근 명령어를 제거하는 것으로서, 이를 통하여 본 발명은 메모리 접근의 효율성을 대폭 향상시킬 수 있다.
단계 S200에서는, 1차 기본 블록에 포함된 메모리 접근 명령어를 파악한다. 단순히 복수 개의 기본 블록을 포함하는 변환 블록을 생성하는 것은 효율 상승에 아무런 효과를 나타내지 못하나, 본 발명은 복수 개의 기본 블록을 통합하여 변환 블록을 생성하되 중복되는 메모리 접근 명령어를 제거함으로써 성능을 개선할 수 있다. 이를 위해 단계 S200에서는 사전 작업으로 1차 기본 블록의 메모리 접근 명령어를 모두 확인할 수 있으며, 레지스터 단위로 메모리 접근 명령어를 파악한다.
단계 S300에서는, 제어 흐름을 통해 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악한다. 제어 흐름으로 연결된 2차 기본 블록을 파악하는 것은 제어 흐름으로 연결되었을 경우 두 기본 블록은 메모리 접근 명령어를 중복하여 포함할 수 있기 때문이다. 1차 기본 블록에 연결되는 2차 기본 블록은 복수 개일 수 있으며, 단계 S300에서는 복수 개의 2차 기본 블록을 모두 파악할 수 있다. 이후 단계 S500에서, 메모리 접근 명령어를 최대한 많이 제거할 수 있는 최적의 2차 기본 블록을 선택하게 된다.
단계 S400에서는, 2차 기본 블록에 포함된 메모리 접근 명령어를 파악한다. 메모리 접근 명령어를 파악하는 것은 단계 S200과 마찬가지로 중복되는 메모리 접근 명령어를 제거하기 위함이다. 즉 본 발명은 중복되는 메모리 접근 명령어를 제거하여, 메모리 접근 효율을 혁신적으로 개선할 수 있다.
단계 S500에서는, 2차 기본 블록 중 상대적으로 1차 기본 블록과 가장 많이 메모리 접근 명령어가 중복되는 2차 기본 블록을 추출한다. 단계 S500에서는 메모리 접근 명령어의 단순 중복 개수뿐만 아니라, 각 기본 블록의 수행 횟수를 고려하여 최적의 2차 기본 블록을 추출할 수 있다. 만약 1차 기본 블록과 메모리 접근 명령어가 중복되는 2차 기본 블록이 없다고 판단되는 경우에는, 2차 기본 블록의 추출을 생략할 수 있다. 이하 단계 S500의 구체적인 단계에 대하여, 도 2를 참조하여 상세히 설명하도록 한다.
도 2는 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 단계 S500의 세부 순서도이다. 도 2에 도시된 바와 같이, 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 단계 S500은, 각 2차 기본 블록에 대해서 1차 기본 블록과 중복되는 메모리 접근 명령어의 개수를 확인하는 단계(S510), 각 2차 기본 블록의 수행 횟수를 파악하는 단계(S520), 중복된 메모리 접근 명령어의 개수와 수행 횟수를 곱한 수가 상대적으로 가장 높은 2차 기본 블록을 추출하는 단계(S530)를 포함할 수 있다.
단계 S510에서는, 각 2차 기본 블록에 대해서 1차 기본 블록과 중복되는 메모리 접근 명령어의 개수를 확인한다. 각각의 기본 블록은 여러 개의 메모리 접근 명령어가 모여 있게 되며, 이를 번역한 호스트 번역 코드에는 많은 메모리 접근 명령어가 쌓이게 된다. 만약 종래의 동적 바이너리 변환 방법에 따라 하나의 기본 블록을 하나의 변환 블록으로 설정한다면, 기본 블록에 중복되어 포함된 메모리 접근 명령어는 중복된 횟수만큼 불필요하게 사용될 수 있으므로 매우 비효율적이다. 따라서 본 발명은 우선 단계 S510에서 중복되는 메모리 접근 명령어의 개수를 파악하고, 추후 단계 S520 및 단계 S530에서 수행 횟수를 곱하여 최적의 2차 기본 블록을 선택함으로써, 중복되는 메모리 접근 명령어를 최대한 많이 제거할 수 있는 변환 블록을 생성할 수 있다.
단계 S520에서는, 각 2차 기본 블록의 수행 횟수를 파악한다. 이는 프로파일 데이터가 있는 경우로 한정되며, 프로파일 데이터가 없는 경우에는 단계 520의 과정 없이 메모리 접근 명령어의 단순 중복 개수만을 통하여 최적의 2차 기본 블록을 선택할 수 있다.
2차 기본 블록의 수행 횟수를 파악하는 것은, 중복되는 메모리 접근 명령어의 개수가 적더라도, 수행 횟수를 감안할 때 전체적으로는 중복 횟수가 많아질 수 있기 때문이다. 따라서 본 발명은 2차 기본 블록의 수행 횟수를 고려하여 실질적으로 중복되는 메모리 접근 명령어를 명확하게 파악함으로써, 불필요하게 소모되는 메모리 사용량을 대폭 절감할 수 있다.
단계 S530에서는, 중복된 메모리 접근 명령어의 개수와 수행 횟수를 곱한 수가 상대적으로 가장 높은 2차 기본 블록을 추출한다. 이는 앞서 언급한 바와 같이 수행 횟수가 많은 2차 기본 블록의 경우에는 중복된 메모리 접근 명령어가 상대적으로 적더라도, 결과적으로는 중복 횟수가 많이 나타날 수 있기 때문이다. 그러므로 본 발명은 단계 S530에서, 중복되는 메모리 접근 명령어의 개수에 수행 횟수를 곱하여, 1차 기본 블록과 중복되는 최종 횟수를 파악하여 적절히 2차 기본 블록을 추출할 수 있다.
단계 S600에서는, 1차 기본 블록과 단계 S500에서 추출된 2차 기본 블록을 포함하는 트레이스를 선택하여 변환 블록으로 설정한다. 이는 중복된 메모리 접근 명령어가 가장 많은 트레이스를 선택하는 것으로서, 이를 통하여 메모리 접근 명령어의 중복을 최대한 차단할 수 있다.
이때 단계 S600에서는, 단계 S500에서 1차 기본 블록과 메모리 접근 명령어가 중복되는 2차 기본 블록이 없다고 판단되는 경우, 1차 기본 블록만을 변환 블록으로 설정할 수 있다. 이는 중복되는 메모리 접근 명령어가 없을 경우에는 1차 기본 블록과 2차 기본 블록을 모두 포함하는 변환 블록의 생성이 불필요하기 때문이다.
단계 S700에서는, n차(n은 2 이상의 정수) 기본 블록에 대하여 단계 S300 내지 단계 S600을 반복 수행하여 n차 기본 블록과 메모리 접근 명령어가 가장 많이 중복되는 n+1차 기본 블록을 추출한 뒤 변환 블록을 생성한다. 2차 기본 블록이 제어 흐름을 통해 1차 기본 블록에 연결될 수 있듯이, 3차 또는 4차 기본 블록 또한 2차 기본 블록에 연결될 수 있다. 따라서 단계 S700은 2차 기본 블록 이후 연결되는 모든 기본 블록을 고려하기 위하여, n차 기본 블록에 대해 단계 S300 내지 단계 S600을 반복 실시함으로써, 1차 기본 블록에 연결된 모든 기본 블록을 포함하는 변환 블록을 생성할 수 있다. 물론 이 경우 단계 S600에서는, 1차 내지 n+1차 기본 블록을 모두 포함하는 트레이스를 선택하여 변환 블록으로 설정할 수 있다.
단계 S800에서는, 생성된 변환 블록을 번역하여 호스트에서 수행한다. 이때 번역과 수행을 동시에 진행하여 동적 바이너리 변환을 구현할 수 있다. 앞서 설명한 바와 같이 본 발명을 통해 생성되는 변환 블록을 번역할 경우에는, 메모리 접근 명령어의 중복이 전혀 나타나지 않기 때문에 종래의 동적 바이너리 변환 방법에 비하여 메모리 접근 수행(memory access)을 대폭 줄일 수 있다는 효과가 발생한다. 따라서 본 발명은 메모리 사용을 감축할 수 있다는 장점으로 인해, 기존의 방법들을 충분히 대체할 수 있을 것이다.
도 3은 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법의 블록도이다. 도 3에서 BB a 내지 BB d는 모두 기본 블록이며, 각 블록에 연결된 선은 제어 흐름을 의미한다. 도 3에 도시된 바와 같이, 기본 블록 a, b, c, d가 존재할 경우, 종래의 방법에서는 제어 흐름을 가지지 않는 각각의 기본 블록 a 내지 d가 독자적으로 변환 블록이 된다. 그러나 본 발명의 일실시예에 따른 동적 바이너리 변환을 위한 트레이스 결정 방법에 따르면, a-b, a-c, a-b-d, a-c-d 등의 여러 기본 블록의 트레이스 중에서 중복된 메모리 접근 명령어가 가장 많이 제거될 수 있는 트레이스를 선택하여 변환 블록을 설정하게 된다.
보다 구체적으로는, 기본 블록 a가 eax, ebx를 읽어서 사용했고, 기본 블록 b는 eax, edx를, 기본 블록 c는 ecx, edx를 사용하였다면, 본 발명은 a-b로 트레이스를 선택하게 되며, 중복되는 메모리 접근 명령어인 eax에 대한 로드(load)를 제거할 수 있다. 즉 본 발명은 기본 블록 a의 successor(2차 기본 블록)인 기본 블록 b와 c에서 읽어 들이는 타깃의 가상 레지스터들 중, 기본 블록 a와 겹치는 것의 개수를 세어서 더 많은 쪽을 선택하는 것이다.
만약 모든 successor 기본 블록들이 기본 블록 a와 겹치는 레지스터의 수가 0이라면, 더 이상 변환 블록을 확장하지 않고 현재까지 결정된 변환 블록을 번역하여 호스트에서 수행하게 된다.
프로파일 데이터를 통해서 각 기본 블록이 수행되는 횟수를 알 수 있는 경우에는, 수행 횟수를 고려하여 기본 블록을 선택할 수 있다. 즉 predessor(1차 기본 블록)인 a와 겹치는 레지스터의 개수를 각각 Nb, Nc라고 하고, 기본 블록 b와 c가 수행되는 횟수를 Mb, Mc라고 한다면, Nb×Mb와 Nc×Mc 중에서 큰 값을 가지는 기본 블록을 선택하여 트레이스를 키워갈 수 있다. 이는 하나의 기본 블록에서 제거되는 메모리 접근 명령어가 적더라도, 수행 횟수가 많다면 실제로 얻는 메모리 절감 이득은 더욱 커지기 때문이다.
이상 설명한 본 발명은 본 발명이 속한 기술분야에서 통상의 지식을 가진 자에 의하여 다양한 변형이나 응용이 가능하며, 본 발명에 따른 기술적 사상의 범위는 아래의 특허청구범위에 의하여 정해져야 할 것이다.
S100: 하나의 기본 블록을 1차 기본 블록으로 선정하는 단계
S200: 1차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계
S300: 제어 흐름을 통해 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악하는 단계
S400: 2차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계
S500: 2차 기본 블록 중 상대적으로 1차 기본 블록과 가장 많이 메모리 접근 명령어가 중복되는 2차 기본 블록을 추출하는 단계
S510: 각 2차 기본 블록에 대해서 1차 기본 블록과 중복되는 메모리 접근 명령어의 개수를 확인하는 단계
S520: 각 2차 기본 블록의 수행 횟수를 파악하는 단계
S530: 중복된 메모리 접근 명령어의 개수와 수행 횟수를 곱한 수가 상대적으로 가장 높은 2차 기본 블록을 추출하는 단계
S600: 1차 기본 블록과 단계 S500에서 추출된 2차 기본 블록을 포함하는 트레이스를 선택하여 변환 블록으로 설정하는 단계
S700: n차(n은 2 이상의 정수) 기본 블록에 대하여 단계 S300 내지 단계 S600을 반복 수행하여 n차 기본 블록과 메모리 접근 명령어가 가장 많이 중복되는 n+1차 기본 블록을 추출한 뒤 변환 블록을 생성하는 단계
S800: 생성된 변환 블록을 번역하여 호스트에서 수행하는 단계

Claims (6)

  1. 트레이스 결정 방법에 있어서,
    (1) 하나의 기본 블록(BB; Basic Block)을 1차 기본 블록으로 선정하는 단계;
    (2) 상기 1차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계;
    (3) 제어 흐름(control flow)을 통해 상기 1차 기본 블록에 연결된 적어도 하나 이상의 2차 기본 블록을 파악하는 단계;
    (4) 상기 2차 기본 블록에 포함된 메모리 접근 명령어를 파악하는 단계;
    (5) 상기 2차 기본 블록 중 상대적으로 상기 1차 기본 블록과 가장 많이 상기 메모리 접근 명령어가 중복되는 상기 2차 기본 블록을 추출하는 단계; 및
    (6) 상기 1차 기본 블록과 상기 단계 (5)에서 추출된 2차 기본 블록을 포함하는 트레이스(trace)를 선택하여 변환 블록(TB; Translation Block)으로 설정하는 단계를 포함하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
  2. 제1항에 있어서, 상기 단계 (5)는,
    (5a) 상기 각 2차 기본 블록에 대해서 상기 1차 기본 블록과 중복되는 상기 메모리 접근 명령어의 개수를 확인하는 단계;
    (5b) 상기 각 2차 기본 블록의 수행 횟수를 파악하는 단계; 및
    (5c) 상기 중복된 상기 메모리 접근 명령어의 개수와 상기 수행 횟수를 곱한 수가 상대적으로 가장 높은 상기 2차 기본 블록을 추출하는 단계를 포함하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
  3. 제1항에 있어서,
    상기 단계 (5)에서, 상기 1차 기본 블록과 상기 메모리 접근 명령어가 중복되는 상기 2차 기본 블록이 없다고 판단되는 경우, 상기 2차 기본 블록의 추출을 생략하며,
    상기 (6)에서, 상기 1차 기본 블록만을 상기 변환 블록으로 설정하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
  4. 제1항에 있어서,
    (7) n차(n은 2 이상의 정수) 기본 블록에 대하여 상기 단계 (3) 내지 상기 단계 (6)을 반복 수행하여 상기 n차 기본 블록과 상기 메모리 접근 명령어가 가장 많이 중복되는 n+1차 기본 블록을 추출한 뒤 변환 블록을 생성하는 단계를 더 포함하며,
    상기 단계 (6)에서, 상기 1차 내지 상기 n+1차 기본 블록을 모두 포함하는 트레이스를 선택하여 상기 변환 블록으로 설정하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
  5. 제1항에 있어서,
    (8) 상기 생성된 변환 블록을 번역하여 상기 호스트에서 수행하는 단계를 더 포함하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
  6. 제5항에 있어서, 상기 단계 (8)에서,
    상기 번역과 상기 수행을 동시에 진행하여 동적 바이너리 변환을 구현하는 것을 특징으로 하는 동적 바이너리 변환을 위한 트레이스 결정 방법.
KR1020100129535A 2010-12-16 2010-12-16 동적 바이너리 변환을 위한 트레이스 결정 방법 KR101171655B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100129535A KR101171655B1 (ko) 2010-12-16 2010-12-16 동적 바이너리 변환을 위한 트레이스 결정 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100129535A KR101171655B1 (ko) 2010-12-16 2010-12-16 동적 바이너리 변환을 위한 트레이스 결정 방법

Publications (2)

Publication Number Publication Date
KR20120067894A KR20120067894A (ko) 2012-06-26
KR101171655B1 true KR101171655B1 (ko) 2012-08-06

Family

ID=46686789

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100129535A KR101171655B1 (ko) 2010-12-16 2010-12-16 동적 바이너리 변환을 위한 트레이스 결정 방법

Country Status (1)

Country Link
KR (1) KR101171655B1 (ko)

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
논문1:대한전자공학회
논문2:ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE
논문3:ESG/CSE/AALTO UNIVERSITY
논문4:UNIVERSITY OF EDINBURGH

Also Published As

Publication number Publication date
KR20120067894A (ko) 2012-06-26

Similar Documents

Publication Publication Date Title
EP2629197B1 (en) Simulation device, method, and program
KR101332499B1 (ko) 시뮬레이션 장치, 방법, 및 기록 매체
CN101452396B (zh) 结合静态优化的动态二进制翻译方法
US11068268B2 (en) Data structure processing
JP2004038923A (ja) プログラムコード変換のための条件コードフラグのエミュレーション
US20150277876A1 (en) Compiling device, compiling method, and storage medium storing compiler program
CN109145534B (zh) 针对软件虚拟机保护的反混淆系统及方法
US10146565B2 (en) Method for executing a computer program with a parameterised function
US10564992B2 (en) Simulation apparatus and storage medium
CN103714288A (zh) 一种数据流跟踪方法
US8732679B2 (en) Loop transformation for computer compiler optimization
US20140365735A1 (en) Computing apparatus, computing method, and computing program
CN105988854B (zh) 动态编译方法及装置
JP6394341B2 (ja) 計算装置、計算方法、および計算プログラム
CN102999409A (zh) 一种内存测试方法及嵌入式设备
CN103942082A (zh) 一种消除冗余的内存访问操作的编译优化方法
US9940267B2 (en) Compiler global memory access optimization in code regions using most appropriate base pointer registers
KR101171655B1 (ko) 동적 바이너리 변환을 위한 트레이스 결정 방법
CN102236575A (zh) 一种基于寄存器映射的动态编译方法
KR100725415B1 (ko) 데이터베이스의 로그병합 방법 및 장치
JP3863544B1 (ja) 演算処理装置及び演算処理方法
CN101546271A (zh) 动态二进制翻译系统中超级块的寄存器分配方法
CN101819608A (zh) 一种微处理器指令级随机验证中加速取指的装置和方法
JP5021584B2 (ja) マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体
US10140135B2 (en) Method for executing a computer program with a parameterised function

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160701

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170703

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180703

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190702

Year of fee payment: 8