문맥 (context)
본 발명은 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것으로서, 더욱 상세하게는 바이트 코드로의 컴파일과 네이티브 코드의 실행을 바이트 코드 단위로 수행하도록 하는 것이 아니라 일련의 바이트 코드인 블록 단위로 수행하도록 하는 작업 수행 속도를 향상시키는 장치 및 방법에 관한 것이다.
자바(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)는 번역된 바이트 코드의 실행의 마지막 단계에 수행된다.
그러나, 핸드오프는 또 다른 오버헤드로서 성능의 손실을 초래하게 되므로, 핸드오프의 횟수를 감소시킴으로써 시스템의 성능을 향상시키는 발명의 등장이 요구된다.
지시문 (instruction)
주어진 원문을 읽고 필요한 정보를 파악하여, 원문에 근거해 질문에 답하라.
질문 (question)
바이트 코드 번역기(220) 내부에서 네이티브 코드 캐시를 검색하여 동일한 바이트 코드에 대한 번역본이 있는지 확인하는 역할을 수행하는 구성요소는 무엇인가?
추론 과정 (compact_reasoning)
-
1과제 해석
task_interpretation바이트 코드 번역기(220) 내에서 캐시를 검색하고 번역본 존재 여부를 확인하는 특정 구성요소를 찾는 작업이다.
-
2정보 추출
information_extraction바이트 코드 번역기(220)의 동작 과정 중 캐시 검색 및 확인 단계에 대한 정보를 추출한다.
- 바이트 코드는 바이트 코드 번역기(220)의 내부에 구비된 상태 머신으로 입력되고, 상태 머신은 네이티브 코드 캐시를 검색하여 동일한 바이트 코드에 대하여 캐시된 번역본 즉, 네이티브 코드가 있는지 확인한다(S20).
-
3근거 선택
evidence_selection캐시 검색 및 확인 기능을 수행하는 주체인 '상태 머신'을 근거로 선택한다.
- 상태 머신은 네이티브 코드 캐시를 검색하여 동일한 바이트 코드에 대하여 캐시된 번역본 즉, 네이티브 코드가 있는지 확인한다
-
4논리 통합
logical_integration바이트 코드 번역기(220) 내부에 구비되어 해당 기능을 수행하는 구성요소가 상태 머신임을 확인한다.
- 바이트 코드 번역기(220)의 내부에 구비된 상태 머신
-
5결론 도출
conclusion_formulation질문에서 요구하는 구성요소는 상태 머신이다.
-
6답변 생성
answer_generation추출된 엔티티를 바탕으로 최종 답변을 작성한다.
- 상태 머신
최종 답변 (final_answer)
상태 머신
핵심 해석 (core_interpretation)
바이트 코드 번역기 내부에서 네이티브 코드 캐시를 검색하여 동일한 바이트 코드에 대한 번역본이 있는지 확인하는 구성요소는 상태 머신이다.