KR101407628B1 - 작업 수행 속도를 향상시키는 장치 및 방법 - Google Patents
작업 수행 속도를 향상시키는 장치 및 방법 Download PDFInfo
- Publication number
- KR101407628B1 KR101407628B1 KR1020070054661A KR20070054661A KR101407628B1 KR 101407628 B1 KR101407628 B1 KR 101407628B1 KR 1020070054661 A KR1020070054661 A KR 1020070054661A KR 20070054661 A KR20070054661 A KR 20070054661A KR 101407628 B1 KR101407628 B1 KR 101407628B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- bytecode
- native code
- block
- native
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000013523 data management Methods 0.000 claims description 8
- 238000013519 translation Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 7
- 239000000284 extract Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
본 발명은 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것으로서, 바이트 코드로의 컴파일과 네이티브 코드의 실행을 바이트 코드 단위로 수행하도록 하는 것이 아니라 일련의 바이트 코드인 블록 단위로 수행하도록 하는 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것이다.
본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 장치는 바이트 코드를 수신하는 수신부와, 상기 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 제어부 및 상기 확인 결과에 따라 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 송신하는 송신부를 포함한다.
바이트 코드, 네이티브 코드, 블록
Description
도 1은 종래 기술에 따라 바이트 코드를 네이티브 코드로 변환하여 실행하는 과정을 나타낸 흐름도이다.
도 2는 본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 장치를 나타낸 블록도이다.
도 3은 도 2의 장치에 포함된 상태 머신의 상세한 구성을 나타낸 블록도이다.
도 4는 본 발명의 실시예에 따라 네이티브 코드가 블록 단위로 구성되는 것을 나타낸 도면이다.
도 5는 본 발명의 실시예에 따른 블록이 분기 명령어를 기준으로 형성된 것을 나타낸 도면이다.
도 6은 본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 과정을 나타낸 흐름도이다.
<도면의 주요 부분에 관한 부호의 설명>
100 : 프로세서 200 : 번역 가속기
210 : 네이티브 코드 캐시 220 : 바이트 코드 번역기
300 : 상태 머신
본 발명은 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것으로서, 더욱 상세하게는 바이트 코드로의 컴파일과 네이티브 코드의 실행을 바이트 코드 단위로 수행하도록 하는 것이 아니라 일련의 바이트 코드인 블록 단위로 수행하도록 하는 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것이다.
자바(Java)는 작성된 코드를 플랫폼 독립적으로 수행하는 객체 지향 프로그래밍 언어이다. 여기서, 플랫폼은 프로그램이 실행되는 하드웨어 또는 운영체계와 같은 소프트웨어 환경을 말한다. 자바로 작성된 코드는 자바 컴파일러(Java Compiler)에 의해 바이트 코드(Byte Code)로 컴파일되고, 바이트 코드는 다양한 하드웨어 기반 플랫폼에 포팅된 자바 가상 머신(Java Virtual Machine)에 의해 실행된다.
바이트 코드는 기계어와 같은 명령어로서 특정 프로세서에 국한되지 않는다. 이러한 바이트 코드를 실행하기 위하여 가상 머신이 동작하게 되는데, 가상 머신은 바이트 코드를 번역하여 대응하는 네이티브 코드로 변환한다. 바이트 코드는 특정 아키텍처에 국한되지 않으므로 바이트 코드를 실행하는 자바 가상 머신이 구비된 어떠한 아키텍처에서도 실행될 수 있고, 이에 따라 이진(binary) 바이트 코드 파일이 플랫폼 독립적으로 실행될 수 있는 것이다.
자바에서의 주요 약점으로는 실행 속도에 있다. 특정 아키텍처에서 컴파일된 프로그램은 바이트 코드보다 빠르게 실행되는데, 이는 그러한 프로그램이 프로세서 아키텍처를 또 다른 프로세서 아키텍처상에서 에뮬레이트(emulate)할 필요 없이 하드웨어상에서 직접 실행되기 때문이다.
바이트 코드에 있어서, 프로세서상에서 동작하는 자바 가상 머신은 그 동작 이전에 바이트 코드를 네이티브 코드로 변환하여야 하는 것이다.
바이트 코드의 실행 속도를 증가시키기 위한 하드웨어 또는 소프트웨어적인 다양한 기술이 시도되고 있다. 자바 가상 머신의 속도를 증가시키기 위하여 JIT(Just In Time) 또는 이보다 더 빠른 Hot Spot JITs와 같은 소프트웨어 기술이 이용되기도 한다. 여기서, JIT는 네이티브 프로세서 명령어를 생성함에 있어서 컴파일 오버헤드 및 메모리 오버헤드를 수반한다.
바이트 코드의 번역 속도를 향상시키는 하드웨어적인 기술들로서, 프로세서 아키텍처를 수정하거나 외부 프로세서를 이용하는 기술들이 시도되고 있다.
도 1은 종래 기술에 따라 바이트 코드를 네이티브 코드로 변환하여 실행하는 과정을 나타내고 있다.
그 동작 과정을 살펴보면, 프로세서(CPU)상에서 동작하는 소프트웨어 루틴이 우선 바이트 코드를 로드(load)하고, 프로세서는 바이트 코드 또는 바이트 코드의 주소를 자바 번역 가속기로 전달한다(S10). 전달되는 대상이 바이트 코드의 주소인 경우, 해당 위치에 있는 바이트 코드가 호출될 수 있다.
그리고, 바이트 코드는 바이트 코드 번역기(220)의 내부에 구비된 상태 머신 으로 입력되고, 상태 머신은 네이티브 코드 캐시를 검색하여 동일한 바이트 코드에 대하여 캐시된 번역본 즉, 네이티브 코드가 있는지 확인한다(S20). 그리하여, 만일 존재하면 캐시된 위치의 주소가 프로세서로 전달되어(S60) 해당 위치에서부터 코드가 실행된다(S70).
한편, 번역본에 대한 캐시가 존재하지 않는 경우, 상태 머신은 룩업 테이블(225)을 검색한다(S30). 바이트 코드 번역 룩업 테이블은 네이티브 코드의 매핑 또는 변환을 위하여 저장된 정보로서, 룩업 테이블의 검색이 완료되면 네이티브 코드의 번역본이 네이티브 코드 캐시에 복사된다(S50). 그리고, 프로세서는 네이티브 코드 캐시의 저장 위치 중 해당 네이티브 코드의 주소를 전달받은 후(S60) 해당 위치에서부터 네이티브 코드에 따른 명령어를 실행한다(S70).
최종적으로 번역된 바이트 코드에 대한 네이티브 코드가 실행되고 나면, 다음 바이트 코드의 번역 개시를 담당하는 소프트웨어 또는 하드웨어 루틴으로 제어권이 이전되고, 이와 같은 핸드오프(handoff)는 번역된 바이트 코드의 실행의 마지막 단계에 수행된다.
그러나, 핸드오프는 또 다른 오버헤드로서 성능의 손실을 초래하게 되므로, 핸드오프의 횟수를 감소시킴으로써 시스템의 성능을 향상시키는 발명의 등장이 요구된다.
본 발명은 바이트 코드로의 컴파일과 네이티브 코드의 실행을 일련의 바이트 코드인 블록 단위로 수행하도록 하는데 그 목적이 있다.
본 발명의 목적들은 이상에서 언급한 목적으로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해되어질 수 있을 것이다.
상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 장치는 바이트 코드를 수신하는 수신부와, 상기 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 제어부 및 상기 확인 결과에 따라 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 송신하는 송신부를 포함한다.
본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 방법은 바이트 코드를 수신하는 단계와, 상기 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 단계 및 상기 확인 결과에 따라 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 송신하는 단계를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
도 2는 본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 장치를 나타낸 블록도로서, 작업 수행 속도를 향상시키는 장치(이하, 가속 장치라 한다)는 프로세서(100) 및 번역 가속기(200)를 포함하여 구성되고, 번역 가속기(200)는 네이티브 코드 캐시(210) 및 바이트 코드 번역기(220)를 포함하여 구성된다.
프로세서(100)는 번역 가속기(200)로 바이트 코드(110)를 송신하고, 송신된 바이트 코드(110)에 대응하는 네이티브 코드(130)를 수신하여 네이티브 코드(130)에 따른 명령어를 실행하는 역할을 한다. 여기서, 바이트 코드(110)는 프로그래밍 코드가 컴파일된 기계어와 같은 명령어로서 특정 플랫폼에 국한되지 않는 코드를 포함한다.
한편, 프로세서(100)는 바이트 코드(110) 대신에 바이트 코드(110)의 주소를 번역 가속기(200)로 송신할 수도 있는데, 바이트 코드(110)의 주소가 송신된 경우에도 프로세서(100)는 해당 바이트 코드(110)에 대응하는 네이티브 코드(130)를 수신하여 네이티브 코드(130)에 따른 명령어를 실행할 수 있다.
네이티브 코드(130)에 따른 명령어를 실행하기 위하여, 프로세서(100)는 번역 가속기(200)로부터 특정 네이티브 코드의 주소(120)를 수신하고 수신된 주 소(120)를 시작으로 이후에 존재하는 네이티브 코드(130)에 따른 명령어를 실행한다. 즉, 프로세서(100)는 하나의 바이트 코드를 송신하고 해당 바이트 코드에 대응하는 네이티브 코드를 수신하는 것이 아니라 복수 개의 바이트 코드를 송신하고 복수 개의 네이티브 코드에 따른 명령어를 실행하는 것이다.
여기서, 프로세서(100)에 의한 작업 대상인 네이티브 코드(130)는 소정의 블록 단위로 존재할 수 있는데, 블록의 마지막에 위치하고 있는 네이티브 코드에는 해당 네이티브 코드가 블록의 마지막에 있음을 나타내는 정보가 포함되어 있을 수 있다. 이에 따라, 프로세서(100)는 하나의 블록에 포함된 일련의 네이티브 코드에 따른 복수 개의 명령어를 실행하게 되며, 블록의 마지막까지 작업을 완료한 경우 이후 블록의 첫 번째 네이티브 코드의 주소를 수신하여 이후 블록에 대한 작업을 수행하게 된다.
번역 가속기(200)는 프로세서(100)로부터 바이트 코드(110)를 수신한 후, 수신된 바이트 코드(110)를 포함하는 블록의 첫 번째 네이티브 코드의 주소(120)를 프로세서(100)로 송신하는 역할을 한다.
한편, 번역 가속기(200)는 프로세서(100)로부터 바이트 코드(110) 대신에 바이트 코드(110)의 주소를 수신할 수도 있는데, 이 때 번역 가속기(200)는 해당 주소에 존재하는 바이트 코드를 이용하여 네이티브 코드의 주소(120)를 프로세서(100)로 송신할 수 있다.
바이트 코드(110)를 수신하고 네이티브 코드(130)를 송신하기 위하여, 번역 가속기(200)에는 바이트 코드 번역기(220)가 포함될 수 있는데, 바이트 코드 번역 기(220)는 상태 머신(300) 및 룩업 테이블(225)을 포함하여 구성된다.
상태 머신(300)은 프로세서(100)로부터 수신된 바이트 코드(110)가 블록의 마지막 바이트 코드인지 확인하여, 그 결과에 따라 네이티브 코드의 주소(120)를 프로세서(100)로 송신하는 역할을 한다.
즉, 수신된 바이트 코드(110)가 블록의 마지막 바이트 코드가 아닌 경우 네이티브 코드 캐시(210)에 해당 바이트 코드(110)에 대한 네이티브 코드를 저장하고, 수신된 바이트 코드(110)가 블록의 마지막 바이트 코드인 경우 블록의 첫 번째 바이트 코드에 대응하는 네이티브 코드의 주소(120)를 프로세서(100)로 송신하는 것이다. 상태 머신(300)에 대한 자세한 설명은 도 3을 통하여 후술하기로 한다.
한편, 본 발명의 실시예에 따른 가속 장치는 프로그래밍 코드를 컴파일(compile)하여 바이트 코드로 변환하고 바이트 코드에 대응하는 네이티브 코드로 번역(interpret)한 후 번역된 네이티브 코드를 실행하는데, 프로그래밍 코드에는 자바 코드가 포함될 수 있다. 그러나, 이는 본 발명의 가속 장치가 자바 코드에 대한 작업만을 수행할 수 있는 것을 의미하는 것은 아니며, 컴파일과 번역을 실시간으로 수행하는 모든 환경에서 동작할 수 있는 것임을 의미하는 것으로 이해하여야 한다.
도 3은 도 2의 장치에 포함된 상태 머신(300)의 상세한 구성을 나타낸 블록도로서, 상태 머신(300)은 수신부(310), 인터프리터(320), 데이터 관리부(330), 제어부(340), 코드 확인부(350), 룩업 테이블 검색부(360) 및 송신부(370)를 포함하여 구성된다.
수신부(310)는 프로세서(100)로부터 바이트 코드를 수신하는 역할을 한다. 또한, 프로세서(100)가 바이트 코드의 주소를 송신한 경우 수신부(310)는 바이트 코드의 주소를 수신할 수도 있다.
코드 확인부(350)는 네이티브 코드 캐시(210)에 수신된 바이트 코드에 대응하는 네이티브 코드가 존재하는지 확인하는 역할을 한다. 네이티브 코드 캐시(210)는 빠른 속도로 읽기와 쓰기가 가능한 저장 공간으로서 임시적으로 네이티브 코드를 저장하는 역할을 하는데, 코드 확인부(350)는 네이티브 코드 캐시(210)에 저장된 정보 중 수신된 바이트 코드에 대응하는 네이티브 코드가 저장되어 있는지 확인하는 것이다.
룩업 테이블 검색부(360)는 룩업 테이블(225)을 검색하여 수신된 바이트 코드가 존재하는지 확인하는 역할을 한다. 룩업 테이블(225)은 바이트 코드와 네이티브 코드간의 대응 관계가 명시된 테이블로서, 룩업 테이블 검색부(360)는 룩업 테이블(225)을 검색함으로써 특정 바이트 코드에 대응하는 네이티브 코드의 존재 유무 및 저장 위치를 확인할 수 있게 된다.
인터프리터(320)는 수신된 바이트 코드를 네이티브 코드로 번역하는 역할을 한다. 코드 확인부(350)의 확인 결과에 따라 네이티브 코드 캐시(210)에 해당 네이티브 코드가 저장되어 있지 않고, 룩업 테이블 검색부(360)의 검색 결과에 따라 수신된 바이트 코드에 대응하는 네이티브 코드가 존재하지 않는 경우 인터프리터(320)가 수신된 바이트 코드를 분석하여 네이티브 코드를 생성하는 것이다.
데이터 관리부(330)는 네이티브 코드 캐시(210)에 네이티브 코드를 저장하는 역할을 한다. 즉, 데이터 관리부(330)는 룩업 테이블 검색부(360)에 의하여 수신된 바이트 코드에 대응하는 네이티브 코드의 위치가 확인된 경우 해당 네이티브 코드를 네이티브 코드 캐시(210)에 저장하거나 인터프리터(320)에 의하여 네이티브 코드가 생성된 경우 생성된 네이티브 코드를 네이티브 코드 캐시(210)에 저장하는 것이다.
데이터 관리부(330)는 제어부(340)로부터 네이티브 코드 저장에 대한 제어 명령을 수신함에 따라 네이티브 코드를 저장하는데, 제어 명령을 수신한 순서에 따른 네이티브 코드 캐시(210)의 저장 공간에 네이티브 코드를 저장할 수 있다. 예를 들어, 현재 저장 대상이 되는 네이티브 코드의 저장 위치는 이전에 저장된 네이티브 코드에 인접한 다음 번지의 저장 공간인 것이다.
또한, 저장 유무 및 저장 위치가 명시된 인덱스 테이블이 구비될 수도 있는데, 인덱스 테이블이 구비된 경우 데이터 관리부(330)는 저장 대상인 네이티브 코드를 네이티브 코드 캐시(210)의 임의의 위치에 저장할 수 있으며 네이티브 코드가 저장된 경우 인덱스 테이블을 갱신할 수 있다.
제어부(340)는 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 역할을 한다. 블록의 마지막 바이트 코드에는 해당 바이트 코드가 마지막 바이트 코드임을 나타내는 정보가 포함될 수 있는데, 제어부(340)는 이를 이용하여 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 것이다. 예를 들어, 모든 바이트 코드에는 마지막 바이트 코드 여부를 나타내는 플래그가 포함될 수 있는 것으로서, 플래그의 값이 0이면 마지막 바이트 코드가 아니고 플래그의 값이 1 이면 마지막 바이트 코드로 설정될 수 있는 것이다.
또한, 제어부(340)는 수신부(310), 인터프리터(320), 데이터 관리부(330), 코드 확인부(350), 룩업 테이블 검색부(360) 및 송신부(370)의 전반적인 제어를 수행한다.
송신부(370)는 제어부(340)의 확인 결과에 따라 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 프로세서(100)로 송신하는 역할을 한다.
네이티브 코드의 주소를 수신함에 따라 프로세서(100)는 수신된 네이티브 코드의 주소를 시작으로 해당 블록에 포함된 모든 네이티브 코드에 따른 명령어를 실행하게 된다. 이 때, 프로세서(100)는 인덱스 테이블을 참조하여 실행 대상이 되는 네이티브 코드의 순서와 마지막 네이티브 코드의 위치를 확인할 수도 있다.
도 4는 본 발명의 실시예에 따라 네이티브 코드가 블록 단위로 구성되는 것을 나타낸 도면이다.
전술한 바와 같이 네이티브 코드 캐시(210)에는 네이티브 코드가 저장되는데, 네이티브 코드는 도 4에 도시된 바와 같이 블록 단위로 저장될 수 있다. 즉, 적어도 하나 이상의 블록(410, 420, 430) 각각에 적어도 하나 이상의 네이티브 코드가 포함될 수 있는 것이다.
수신부(310)에 의하여 바이트 코드가 수신된 경우, 코드 확인부(350) 및 룩업 테이블 검색부(360)는 수신된 바이트 코드에 대응하는 네이티브 코드가 존재하는지 확인하고, 그 결과에 따라 인터프리터(320)는 네이티브 코드를 생성하며 데이 터 관리부(330)는 별도의 저장 수단에 저장되어 있는 네이티브 코드 또는 생성된 네이티브 코드를 네이티브 코드 캐시(210)에 블록 단위로 저장하는 것이다.
그리고, 제어부(340)에 의하여 수신된 바이트 코드가 블록의 마지막 바이트 코드인 것으로 확인되면, 제어부(340)는 해당 블록의 첫 번째 위치에 존재하는 네이티브 코드(411, 421, 431)의 주소를 추출한 후 송신부(370)를 통하여 프로세서(100)로 송신한다. 여기서, 네이티브 코드의 주소는 네이티브 코드 캐시(210)상의 주소를 의미하는데, 이를 수신한 프로세서(100)는 해당 주소에 위치하고 있는 네이티브 코드를 시작으로 순차적으로 네이티브 코드를 추출하여 대응하는 명령어를 실행한다. 이는 블록의 마지막에 존재하는 네이티브 코드에 따른 명령어를 실행할 때까지 진행되며, 블록에 포함된 모든 작업이 완료되면 수신부(310)는 이후 바이트 코드를 수신하게 된다.
도 5는 본 발명의 실시예에 따른 블록이 분기 명령어를 기준으로 형성된 것을 나타낸 도면이다.
본 발명에서 블록은 명령어의 집합으로 이해될 수 있다. 즉, 블록에 포함된 일련의 명령어가 순차적으로 실행되는 것이다. 따라서, 컴파일과 인터프리트의 핸드오프를 감소시키기 위해서는 블록에 보다 많은 수의 네이티브 코드가 포함되어 있는 것이 바람직한데, 실제로 블록은 분기 명령어의 위치에 따라 그 크기가 결정될 수 있다.
예를 들어, if 명령어와 같은 분기 명령어가 하나의 블록에 포함된 경우 이후 작업은 런타임 시의 상태에 따라 결정될 수 있으므로 이후 작업은 별도의 블록 에 포함될 수밖에 없는 것이다.
결국, 블록의 마지막에 위치하고 있는 네이티브 코드에 따른 명령어는 분기 명령어일 수 있는 것으로서, 블록의 분기가 수행됨에 따라 적어도 둘 이상의 분기된 블록이 형성된다.
도 5에 도시된 바와 같이, 제 1 블록(510)의 마지막에 위치하고 있는 네이티브 코드에 따른 명령어가 분기 명령어이므로 분기점(501)에서 제 2 블록(520)과 제 3 블록(530)으로 분기된다.
그리고, 제 2 블록(520) 및 제 3 블록(530)의 마지막에 위치하고 있는 네이티브 코드에 따른 명령어가 분기 명령어이므로 각 분기점(502, 503)에서 제 4 블록(540)과 제 5 블록(550)으로 분기되거나 제 6 블록(560)과 제 7 블록(570)으로 분기되는 것이다.
이상, 분기점의 위치는 분기 명령어의 위치에 따라 결정되는 것으로 설명하였으나, 설정에 따라 임의의 위치에 분기점이 위치할 수도 있음은 물론이다.
도 6은 본 발명의 실시예에 따른 작업 수행 속도를 향상시키는 과정을 나타낸 흐름도이다.
작업 수행 속도를 향상시키기 위하여 상태 머신(300)의 수신부(310)는 우선 프로세서(100)로부터 바이트 코드 또는 바이트 코드의 주소를 수신한다(S610).
그리고, 코드 확인부(350)는 수신된 바이트 코드에 대응하는 네이티브 코드가 네이티브 코드 캐시(210)에 저장되어 있는지 확인한다(S620). 이 때, 바이트 코드의 주소가 확인된 경우 코드 확인부(350)는 해당 바이트 코드를 호출한 후 이를 이용하여 네이티브 코드의 저장 여부를 확인할 수도 있다.
네이티브 코드가 저장되어 있는 경우 송신부(370)는 프로세서(100)로 네이티브 코드의 주소 즉, 네이티브 코드가 저장되어 있는 네이티브 코드 캐시(210)상의 주소를 프로세서(100)로 송신한다(S690).
네이티브 코드의 주소를 수신함에 따라 프로세서(100)는 해당 네이티브 코드를 시작으로 해당 블록의 모든 네이티브 코드에 따른 명령어를 실행한다(S700).
한편, 네이티브 코드가 네이티브 코드 캐시(210)에 저장되어 있지 않는 경우 룩업 테이블 검색부(360)는 룩업 테이블(225)을 검색하여(S630) 수신된 바이트 코드가 존재하는지 확인한다(S640).
그리고, 룩업 테이블(225)에 바이트 코드가 포함되어 있는 경우 제어부(340)는 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인한다(S660).
한편, 룩업 테이블(225)에 바이트 코드가 포함되어 있지 않는 경우 제어권이 인터프리터(320)로 이전되고, 인터프리터(320)에 의하여 수신된 바이트 코드에 대응하는 네이티브 코드가 생성된 후에(S650) 제어부(340)는 해당 바이트 코드가 블록의 마지막 바이트 코드인지 확인한다(S660).
수신된 바이트 코드가 블록의 마지막 바이트 코드인 경우 송신부(370)는 프로세서(100)로 해당 바이트 코드에 대응하는 네이티브 코드의 주소를 프로세서(100)로 송신한다(S690).
한편, 수신된 바이트 코드가 블록의 마지막 바이트 코드가 아닌 경우 데이터 관리부(330)는 수신된 바이트 코드에 대응하는 네이티브 코드를 네이티브 코드 캐 시(210)에 저장한다(S670). 이 때, 데이터 관리부(330)는 네이티브 코드의 저장 여부 및 저장 위치가 명시된 인덱스 테이블을 갱신할 수 있다.
네이티브 코드가 네이티브 코드 캐시(210)에 저장되고 인덱스 테이블이 갱신됨에 따라 수신부(310)는 다음 바이트 코드 또는 바이트 코드의 주소를 수신하게 되고(S680), 수신된 바이트 코드에 대응하는 네이티브 코드의 존재 여부 및 블록에서의 바이트 코드의 위치 확인 등이 반복되어 수행된다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
상기한 바와 같은 본 발명의 작업 수행 속도를 향상시키는 장치 및 방법에 따르면 바이트 코드로의 컴파일과 네이티브 코드의 실행을 일련의 바이트 코드인 블록 단위로 수행함으로써 작업 수행 속도를 향상시키는 장점이 있다.
Claims (14)
- 바이트 코드를 수신하는 수신부;상기 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 제어부; 및상기 확인 결과에 따라 상기 수신된 바이트 코드가 상기 블록의 마지막 바이트 코드인 경우, 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 송신하는 송신부를 포함하는데,상기 블록의 마지막에 위치하고 있는 네이티브 코드에 따른 명령어에 분기 명령어가 포함될 때까지 바이트 코드가 상기 블록에 추가되는 작업 수행 속도를 향상시키는 장치.
- 제 1항에 있어서,상기 블록은 적어도 하나 이상의 명령어 중 분기 명령어 사이에 포함된 명령어에 대한 바이트 코드를 포함하는 작업 수행 속도를 향상시키는 장치.
- 제 1항에 있어서,상기 확인 결과에 따라 네이티브 코드 캐시에 상기 수신된 바이트 코드에 대한 네이티브 코드를 저장하는 데이터 관리부를 더 포함하는 작업 수행 속도를 향상시키는 장치.
- 제 3항에 있어서,상기 송신부는 상기 네이티브 코드 캐시에 저장된 네이티브 코드 중 상기 블 록의 첫 번째 바이트 코드에 대응하는 네이티브 코드의 주소를 송신하는 작업 수행 속도를 향상시키는 장치.
- 제 1항에 있어서,상기 네이티브 코드의 주소를 수신하여 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드에 따른 작업을 수행하는 프로세서를 더 포함하는 작업 수행 속도를 향상시키는 장치.
- 제 1항에 있어서,상기 수신된 바이트 코드에 대응하는 네이티브 코드의 존재 여부에 따라 상기 수신된 바이트 코드에 대응하는 네이티브 코드를 생성하는 인터프리터를 더 포함하는 작업 수행 속도를 향상시키는 장치.
- 제 1항에 있어서,상기 바이트 코드는 자바 컴파일러에 의하여 컴파일된 자바 코드를 포함하는 작업 수행 속도를 향상시키는 장치.
- 바이트 코드를 수신하는 단계;상기 수신된 바이트 코드가 블록의 마지막 바이트 코드인지 확인하는 단계; 및상기 확인 결과에 따라 상기 수신된 바이트 코드가 상기 블록의 마지막 바이트 코드인 경우, 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드 중 첫 번째 네이티브 코드의 주소를 송신하는 단계를 포함하는데,상기 블록의 마지막에 위치하고 있는 네이티브 코드에 따른 명령어에 분기 명령어가 포함될 때까지 바이트 코드가 상기 블록에 추가되는 작업 수행 속도를 향상시키는 방법.
- 제 8항에 있어서,상기 블록은 적어도 하나 이상의 명령어 중 분기 명령어 사이에 포함된 명령어에 대한 바이트 코드를 포함하는 작업 수행 속도를 향상시키는 방법.
- 제 8항에 있어서,상기 확인 결과에 따라 네이티브 코드 캐시에 상기 수신된 바이트 코드에 대한 네이티브 코드를 저장하는 단계를 더 포함하는 작업 수행 속도를 향상시키는 방법.
- 제 10항에 있어서,상기 송신하는 단계는 상기 네이티브 코드 캐시에 저장된 네이티브 코드 중 상기 블록의 첫 번째 바이트 코드에 대응하는 네이티브 코드의 주소를 송신하는 단계를 포함하는 작업 수행 속도를 향상시키는 방법.
- 제 8항에 있어서,상기 네이티브 코드의 주소를 수신하여 상기 블록에 포함된 적어도 하나의 바이트 코드에 대한 네이티브 코드에 따른 작업을 수행하는 단계를 더 포함하는 작업 수행 속도를 향상시키는 방법.
- 제 8항에 있어서,상기 수신된 바이트 코드에 대응하는 네이티브 코드의 존재 여부에 따라 상기 수신된 바이트 코드에 대응하는 네이티브 코드를 생성하는 단계를 더 포함하는 작업 수행 속도를 향상시키는 방법.
- 제 8항에 있어서,상기 바이트 코드는 자바 컴파일러에 의하여 컴파일된 자바 코드를 포함하는 작업 수행 속도를 향상시키는 방법.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020070054661A KR101407628B1 (ko) | 2007-06-04 | 2007-06-04 | 작업 수행 속도를 향상시키는 장치 및 방법 |
US12/023,456 US9235397B2 (en) | 2007-06-04 | 2008-01-31 | Method and apparatus for increasing task-execution speed |
JP2008043716A JP5508681B2 (ja) | 2007-06-04 | 2008-02-26 | 作業遂行速度を向上させる装置および方法 |
CN200810098633.5A CN101344856B (zh) | 2007-06-04 | 2008-06-03 | 增加任务执行速度的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020070054661A KR101407628B1 (ko) | 2007-06-04 | 2007-06-04 | 작업 수행 속도를 향상시키는 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080106795A KR20080106795A (ko) | 2008-12-09 |
KR101407628B1 true KR101407628B1 (ko) | 2014-06-13 |
Family
ID=40089750
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020070054661A KR101407628B1 (ko) | 2007-06-04 | 2007-06-04 | 작업 수행 속도를 향상시키는 장치 및 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9235397B2 (ko) |
JP (1) | JP5508681B2 (ko) |
KR (1) | KR101407628B1 (ko) |
CN (1) | CN101344856B (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8286152B2 (en) * | 2007-08-22 | 2012-10-09 | International Business Machines Corporation | Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance |
US9176714B2 (en) * | 2007-11-12 | 2015-11-03 | International Business Machines Corporation | Re-using legacy libraries in software |
US9836316B2 (en) * | 2012-09-28 | 2017-12-05 | Intel Corporation | Flexible acceleration of code execution |
CN103092618A (zh) * | 2013-01-15 | 2013-05-08 | 东南大学 | 基于软件Cache的Dalvik虚拟机JIT加速方法 |
KR101694291B1 (ko) * | 2014-01-28 | 2017-01-10 | 한국전자통신연구원 | 자바 스크립트 엔진 가속 장치 및 방법 |
CN105589729A (zh) * | 2015-12-28 | 2016-05-18 | 北京锐安科技有限公司 | 一种基于嵌入式虚拟机的动态编译的方法及装置 |
US11188316B2 (en) * | 2020-03-09 | 2021-11-30 | International Business Machines Corporation | Performance optimization of class instance comparisons |
US20210405982A1 (en) * | 2020-06-25 | 2021-12-30 | Red Hat, Inc. | Bytecode transformations using virtual artifacts |
WO2024060232A1 (en) * | 2022-09-23 | 2024-03-28 | Intel Corporation | Apparatus, device, method, and computer program for executing bytecode |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20020028814A (ko) * | 2000-10-10 | 2002-04-17 | 나조미 커뮤니케이션즈, 인코포레이티드 | 마이크로코드 엔진을 이용한 자바 하드웨어 가속기 |
US20040073904A1 (en) | 2002-10-15 | 2004-04-15 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
KR20040063923A (ko) * | 2001-11-07 | 2004-07-14 | 후지쯔 가부시끼가이샤 | Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 |
US7124407B1 (en) * | 2000-08-16 | 2006-10-17 | Sun Microsystems, Inc. | Method and apparatus for caching native code in a virtual machine interpreter |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6410335A (en) * | 1987-07-03 | 1989-01-13 | Nec Corp | System for shortening compiling time |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US6332216B1 (en) * | 1999-03-09 | 2001-12-18 | Hewlett-Packard Company | Hybrid just-in-time compiler that consumes minimal resource |
US6964039B2 (en) | 2000-12-13 | 2005-11-08 | Esmertec Ag | Method to create optimized machine code through combined verification and translation of JAVA™ bytecode |
US20020156977A1 (en) * | 2001-04-23 | 2002-10-24 | Derrick John E. | Virtual caching of regenerable data |
FR2831969B1 (fr) * | 2001-11-08 | 2004-01-16 | Schneider Automation | Systeme de telechargement et de telemaintenance d'une carte electronique |
AU2002363920A1 (en) * | 2002-10-29 | 2004-05-25 | Freescale Semiconductor, Inc. | Method and apparatus for selectively optimizing interpreted language code |
JP3757235B2 (ja) * | 2003-02-18 | 2006-03-22 | 株式会社Access | ネイティブコンパイル方法、ネイティブコンパイル前処理方法、コンピュータプログラム、サーバ、通信システム、および移動体通信端末装置 |
KR100597413B1 (ko) * | 2004-09-24 | 2006-07-05 | 삼성전자주식회사 | 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터 |
US20060129990A1 (en) * | 2004-12-13 | 2006-06-15 | International Business Machines Corporation | System, method, and article of manufacture for determining execution counts associated with a software program of an embedded system |
KR100725393B1 (ko) * | 2005-05-19 | 2007-06-07 | 삼성전자주식회사 | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 |
-
2007
- 2007-06-04 KR KR1020070054661A patent/KR101407628B1/ko active IP Right Grant
-
2008
- 2008-01-31 US US12/023,456 patent/US9235397B2/en not_active Expired - Fee Related
- 2008-02-26 JP JP2008043716A patent/JP5508681B2/ja active Active
- 2008-06-03 CN CN200810098633.5A patent/CN101344856B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7124407B1 (en) * | 2000-08-16 | 2006-10-17 | Sun Microsystems, Inc. | Method and apparatus for caching native code in a virtual machine interpreter |
KR20020028814A (ko) * | 2000-10-10 | 2002-04-17 | 나조미 커뮤니케이션즈, 인코포레이티드 | 마이크로코드 엔진을 이용한 자바 하드웨어 가속기 |
KR20040063923A (ko) * | 2001-11-07 | 2004-07-14 | 후지쯔 가부시끼가이샤 | Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 |
US20040073904A1 (en) | 2002-10-15 | 2004-04-15 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
Also Published As
Publication number | Publication date |
---|---|
US20080301653A1 (en) | 2008-12-04 |
JP2008299833A (ja) | 2008-12-11 |
US9235397B2 (en) | 2016-01-12 |
KR20080106795A (ko) | 2008-12-09 |
JP5508681B2 (ja) | 2014-06-04 |
CN101344856A (zh) | 2009-01-14 |
CN101344856B (zh) | 2014-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101407628B1 (ko) | 작업 수행 속도를 향상시키는 장치 및 방법 | |
US7069549B2 (en) | Multi-threaded fragment patching | |
US8028268B2 (en) | System and method for building software package for embedded system | |
US5339422A (en) | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment | |
EP3314422B1 (en) | Extending a virtual machine instruction set architecture | |
US10216497B2 (en) | Selective compiling method, device, and corresponding computer program product | |
US20050028155A1 (en) | Java execution device and Java execution method | |
CN111399990B (zh) | 解释执行智能合约指令的方法及装置 | |
US8776024B2 (en) | Software application fine-tuning method, system, and corresponding computer program product | |
US6243668B1 (en) | Instruction set interpreter which uses a register stack to efficiently map an application register state | |
KR101407629B1 (ko) | 자바 변환 가속 장치 및 방법 | |
EP3084596A1 (en) | Executable code for constrained computing environments | |
US8881123B2 (en) | Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols | |
US10635472B2 (en) | Import mechanism for hardware intrinsics | |
US6931638B2 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
JP2014002790A (ja) | 高速パッチベースメソッドコール | |
KR101083271B1 (ko) | 액티브엑스 컨트롤 변환 시스템 및 방법 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
US6904516B2 (en) | Mechanism for enabling efficient execution of an instruction | |
US20240134666A1 (en) | Hybrid just in time load module compiler with performance optimizations | |
KR101598819B1 (ko) | 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 | |
US7743371B1 (en) | System and method for dynamically loading object modules | |
CN114691200A (zh) | 指令模拟装置及其方法 | |
CN117093229A (zh) | 二进制翻译方法、装置、电子设备及存储介质 | |
JPH0695921A (ja) | シミュレーション方法、及びプログラムデバッグシステム |
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: 20170522 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20180518 Year of fee payment: 5 |