KR20150122923A - 자바스크립트 가속 장치 및 가속 방법 - Google Patents

자바스크립트 가속 장치 및 가속 방법 Download PDF

Info

Publication number
KR20150122923A
KR20150122923A KR1020140049066A KR20140049066A KR20150122923A KR 20150122923 A KR20150122923 A KR 20150122923A KR 1020140049066 A KR1020140049066 A KR 1020140049066A KR 20140049066 A KR20140049066 A KR 20140049066A KR 20150122923 A KR20150122923 A KR 20150122923A
Authority
KR
South Korea
Prior art keywords
machine code
code
jit
memory
javascript
Prior art date
Application number
KR1020140049066A
Other languages
English (en)
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 KR1020140049066A priority Critical patent/KR20150122923A/ko
Publication of KR20150122923A publication Critical patent/KR20150122923A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명에 따른 자바스크립트 가속 장치는 수신된 자바스크립트 소스 코드를 어휘분석(Lexer) 및 파싱(Parsing)하는 중앙처리부, 파싱된 중간 표현 코드를 하드웨어로 구현된 JIT 컴파일(Just In Time Compile)을 통해 실행 가능한 기계어 코드(Machine Code)로 변환하는 JIT 테이블부, 변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하고, 요청에 따라 고속 테이블 탐색 기능을 통해 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 속성 액세스부 및 자바스크립트 실행 시, 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 메모리의 힙 메모리 영역(Heap Memory Space) 내의 미사용 객체 메모리를 반환하여 여유 메모리를 확보하는 가비지 콜렉터부를 포함한다.

Description

자바스크립트 가속 장치 및 가속 방법{APPARATUS AND METHOD FOR ACCELLATION OF JAVA SCRIPT}
본 발명은 웹 기반 어플리케이션 최적화에 관한 기술로서, 보다 상세하게는 웹 기반 가상 머신의 실행 속도 가속에 관한 기술이다.
월드 와이드 웹(World Wide Web)의 측면을 서술하고 정의하는 공식적인 표준 기술 규격인 웹 표준에 따라 차세대 웹으로 글로벌 웹 표준인 HTML5 기반의 웹 플랫폼이 부상하고 있다. 현재 스마트폰과 같은 모바일 단말에서 주로 사용되는 응용프로그램은 대부분 네이티브 앱(Native App)형태를 가진다. 네이티브 앱은 구성요소가 패키지화 되어 있거나 라이브러리 형태로 제공되기 때문에 개발과 유지가 편리하여 로딩되는 속도가 빠른 장점이 있다. 하지만, 네이티브 앱은 모바일 단말의 운영체제에 종속되어 있다. 따라서, 네이티브 앱은 모바일 단말의 운영체제에 따라 개발환경이 다르며, 개발환경에 따른 운영체제 하에서만 실행이 가능하다는 단점이 존재한다. 반면에, HTML5 기반의 웹 앱은 모바일 단말의 운영체제에 종속되지 않아 웹 앱 개발환경에서 만들어진 하나의 소스 코드(One Source Code)로 다양한 운영체제(Multi-OS)를 지원할 수 있다.
웹 표준에 따른 HTML5 기반의 웹 응용프로그램(Web Application)은 크게 HTML5(HyperText Markup Language 5), CSS3(Cascading Style Sheet 3.0) 및 자바스크립트(JavaScript)로 구성된다. HTML5는 정해진 태그를 사용하여 웹 문서를 작성하는 기본 언어로 콘텐츠 내용과 형식을 표현한다. CSS3는 웹 페이지의 스타일과 레이아웃을 제어하는 언어로서 콘텐츠 표현 방법을 정의한다. 그리고, 자바스크립트는 웹상에서 발생하는 이벤트를 처리하고 사용자에게 정보를 입력 받는 폼 값을 가공하여 서버로 전송하는 스트립트 언어로서 각종 API(Application Programming Interface)를 통해 기능을 표현한다.
자바스크립트는 프로그래밍이 용이하고 하드웨어 및 운영체제와 같은 플랫폼에 의존하지 않고 작동하는 장점이 있다. 하지만, 자바스크립트는 C언어나 자바(Java)와 같은 프로그래밍 언어에 비해 실행속도가 상대적으로 느린 문제가 있다. 이와 같은 자바스크립트의 단점을 개선하기 위해 다양한 자바스크립트 가속화 연구가 추진되고 있다. 자바스크립트의 실행속도 문제를 개선하기 위한 방법으로 AP(Application Processor) 또는 CPU(Central Processor Unit)의 코어(Core) 및 스레드(Thread) 수를 증가시켜 자바스크립트를 병렬 처리 하는 방안이 연구되고 있다. 하지만, 이처럼 코어 및 스레드 수를 증가시켜 자바스크립트를 가속화하는 방법은 코어 및 스레드 수가 증가한 만큼 소비 전력이 증가하여 높은 소비 전력을 가지는 문제가 있다. 특히, 배터리 용량이 한정된 스마트폰과 같은 모바일 단말에서 소비 전력 증가는 모바일 단말의 사용시간을 감소시키게 된다.
대한민국 공개특허 제10-2013-0022493호는 모바일 환경에서 자바 스크립트 라이브러리 최적화 방법 및 장치에 대해 기술되어 있다. 대한민국 공개특허 제10-2013-0022493호는 기존의 자바 스크립트 라이브러리에서 다양한 웹 브라우저에 적용 가능하도록 구현된 이식성 코드를 제거하고 모바일 단말의 웹 브라우저에 맞추어 자바 스크립트 라이브러리를 재구현하고, 미리 정의된 주요 기능 모듈을 웹 브라우저 엔진상에서 수행되도록 구현하여 최적화를 수행한다. 하지만, 이 특허문헌은 라이브러리에 대한 최적화만을 수행할 뿐, 자바 스크립트 실행 처리에 소요되는 시간을 단축시키기 위한 하드웨어 장치를 포함하고 있지 않다.
대한민국 공개특허 제10-2013-0022493호
본 발명이 해결하고자 하는 과제는 소비 전력 증가를 최소화한 상태로 자바스크립트의 실행 속도를 개선시키기 위해 단말의 하드웨어 형태로 자바스크립트 가속 장치 및 방법을 제공하는 것이다.
본 발명에 따른 자바스크립트 가속 장치는 수신된 자바스크립트 소스 코드를 어휘분석(Lexer) 및 파싱(Parsing)하는 중앙처리부, 파싱된 중간 표현 코드를 하드웨어로 구현된 JIT 컴파일(Just In Time Compile)을 통해 실행 가능한 기계어 코드(Machine Code)로 변환하는 JIT 테이블부, 변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하고, 요청에 따라 고속 테이블 탐색 기능을 통해 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 속성 액세스부 및 자바스크립트 실행 시, 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 메모리의 힙 메모리 영역(Heap Memory Space) 내의 미사용 객체 메모리를 반환하여 여유 메모리를 확보하는 가비지 콜렉터부를 포함한다.
속성 액세스부는 객체 타입 예측을 위한 런타임(Run-Time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화한다. 중앙처리부는 수신된 자바스크립트 소스 코드의 어휘를 분석하여 파싱 과정을 수행하고, 파싱된 자바스크립트 소스 코드를 고속 인터페이스(High-speed Interface)를 통해 상기 JIT 테이블부로 전달한다. 그리고, JIT 테이블부는 파싱된 자바스크립트 소스 코드에 포함된 다수의 코드를 컴파일을 필요로 하는 소스 파일 및 바이트 코드 형태의 클래스 파일로 구분하고, 소스 파일은 JIT 컴파일을 통해 바이트 코드로 구성된 클래스 파일로 컴파일 하고, 클래스 파일은 인터프리팅(Interpreting)을 통해 기계어 코드로 변환한다.
속성 액세스부는 생성된 기계어 코드와 대응하는 해시값을 생성하고, 생성된 해시값과 기계어 코드를 JIT 테이블에 저장하며, 기계어 코드를 사용 빈도에 따라 분류하고, 해시값을 통해 저장된 기계어 코드를 고속 검색한다. 그리고, 가비지 콜렉터부는 메모리 영역을 분석하여 스택 영역 및 레지스터에 위치한 하나 이상의 변수의 참조 경로를 추적하고, 참조 경로 추적을 통해 힙 메모리 영역(Heap Memory Space) 내에 존재하는 다수의 힙 객체(Hep Object) 중에서 변수와 연결되어 사용중인 힙 객체(Heap Object Reachable) 및 불필요한 힙 객체(Unreachable Heap Object)를 구분하고, 불필요한 힙 객체의 주소를 일괄적으로 확인한 후, 불필요한 힙 객체를 병렬적으로 회수하여 메모리를 반환한다. 본 발명에 따른 자바스크립트 가속 장치는 모바일 단말에 구비된 AP(Application Processor) 또는 CPU(Central Processing Unit) 내부에 일체화된 하드웨어 형태로 구현한다.
본 발명에 따른 자바스크립트 가속 방법은 수신된 자바스크립트 소스 코드를 어휘분석(Lexer) 및 파싱(Parsing)하는 단계, 파싱된 중간 표현 코드를 하드웨어로 구현된 JIT 컴파일(Just In Time Compile)을 통해 실행 가능한 기계어 코드(Machine Code)로 변환하는 단계, 변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계, 요청에 따라 고속 테이블 탐색 기능을 통해 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 단계 및 자바스크립트 실행 시, 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도를 통해 메모리의 힙 메모리 영역(Heap Memory Space) 내의 미사용 객체 메모리를 반환하여 여유 메모리를 확보하는 단계를 포함한다.
변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계는 객체 타입 예측을 위한 런타임(Run-Time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화한다. 기계어 코드(Machine Code)로 변환하는 단계는 파싱된 자바스크립트 소스 코드에 포함된 다수의 코드를 컴파일을 필요로 하는 소스 파일 및 바이트 코드 형태의 클래스 파일로 구분하는 단계, 소스 파일을 JIT 컴파일을 통해 바이크 코드로 구성된 클래스 파일로 컴파일 하는 단계 및 클래스 파일을 언터프리팅(Interpreting)을 통해 기계어 코드로 변환하는 단계를 포함한다.
그리고, 변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계는 생성된 기계어 코드와 대응하는 해시값을 생성하고, 생성된 해시값과 기계어 코드를 상기 JIT 테이블에 저장하며, 기계어 코드를 사용 빈도에 따라 분류한다. 요청에 따라 고속 테이블 탐색 기능을 통해 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 단계는 해시값을 통해 저장된 기계어 코드를 고속 검색한다.
여유 메모리를 확보하는 단계는 메모리 영역을 분석하여 스택 영역 및 레지스터에 위치한 하나 이상의 변수의 참조 경로를 추적하는 단계, 참조 경로 추적을 통해 힙 메모리 영역(Heap Memory Space) 내에 존재하는 다수의 힙 객체(Hep Object) 중에서 변수와 연결되어 사용중인 힙 객체(Heap Object Reachable) 및 불필요한 힙 객체(Unreachable Heap Object)를 구분하는 단계 및 불필요한 힙 객체의 주소를 일괄적으로 확인한 후, 불필요한 힙 객체를 병렬적으로 회수하여 메모리를 반환하는 단계를 포함한다.
본 발명에 따른 자바스크립트 가속 장치 및 방법은 자바스크립트의 컴파일 과정에서 변환된 기계어 코드를 대응하는 해시값과 함께 JIT 테이블에 저장하고, 필요 시 고속 검색을 통해 기계어 코드를 호출할 수 있으며, 확인된 불필요한 힙 객체의 주소에 기초하여 하드웨어로 구현된 가비지 콜렉터를 통해 일괄적으로 메모리를 반환할 수 있다. 이를 통해, 자바스크립트 실행 시 중앙처리장치(CPU)의 처리 부담 및 처리 과정의 시간 지연을 줄일 수 있다.
도 1은 본 발명에 따른 자바스크립트 가속 장치의 일 실시예를 나타내는 구성도이다.
도 2는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 중앙처리부(110) 및 JIT 테이블부(120)를 나타내는 구성도이다.
도 3은 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 함수 호출 과정을 나타내는 도면이다.
도 4는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 속성 액세스부(130)를 나타내는 구성도이다.
도 5는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 가비지 콜렉터부(140)의 동작을 나타내는 도면이다.
도 6은 본 발명의 일 실시예에 따른 자바 스크립트 가속 장치의 가속 방법을 나타내는 흐름도이다.
이하, 본 발명의 실시예를 첨부된 도면들을 참조하여 상세하게 설명한다. 본 명세서에서 사용되는 용어 및 단어들은 실시예에서의 기능을 고려하여 선택된 용어들로서, 그 용어의 의미는 발명의 의도 또는 관례 등에 따라 달라질 수 있다. 따라서 후술하는 실시예에서 사용된 용어는, 본 명세서에 구체적으로 정의된 경우에는 그 정의에 따르며, 구체적인 정의가 없는 경우는 당업자들이 일반적으로 인식하는 의미로 해석되어야 할 것이다.
도 1은 본 발명에 따른 자바스크립트 가속 장치의 일 실시예를 나타내는 구성도이다.
도 1을 참조하면, 본 발명에 따른 자바스크립트 가속 장치(100)는 중앙처리부(110), JIT 테이블부(120), 속성 액세스부(130), 가비지 콜렉터부(140) 및 메모리(150)를 포함한다.
중앙처리부(110)는 수신된 자바스크립트 소스 코드를 파싱(Parsing) 및 중간 표현(Intermediated Representation) 과정을 통해 중간 표현 코드로 변환하여 JIT 테이블부(120)로 전달한다. JIT 테이블부(120)는 하드웨어로 구현된 JIT 컴파일(Just In Time Compilation)을 통해 병렬 처리하여 실행 가능한 코드인 기계어 코드(Machine Code)로 변환하는 인터프리팅(Interpreting)을 수행한다. 그리고, JIT 테이블부(120)는 변환된 기계어 코드를 프로그래밍 가능한 JIT 테이블(Programmable Just In Time Table) 형태로 메모리(150)에 저장한다. 상기 과정에서, 중앙처리부(110)와 JIT 테이블부(120)는 고속 인터페이스(High-speed Interface)를 통해 중간 표현 코드 및 기계어 코드를 빠르게 교환한다.
JIT 테이블부(120)는 소프트웨어 절차를 통해 동작하는 중앙처리부(110)와 달리 상기 과정을 하드웨어 절차를 통해 수행한다. 즉, JIT 테이블부(120)는 자바스크립트 소스 코드를 기계어 코드로 인터프리팅 하는 과정을 하드웨어 장치로 구현하여 처리하여, 자바 스크립트를 소프트웨어적으로 인터프리팅 하는 종래 방법에 비해 중앙처리부(110)의 부담을 줄이고, 처리 속도를 높여 고속 변환을 가능하게 한다.
속성 액세스부(130)는 객체 타입 예측을 위한 런타임(Run-time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화하고, 함수 및 메소드 매칭을 위한 고속 테이블 탐색 기능을 통해 메모리(150)에 저장된 JIT 테이블을 검색한다. 속성 액세스부(130)는 JIT 테이블 형태로 저장된 기계어 코드의 사용 빈도를 검사하여, 사용 빈도에 따라 분류하고, 소정의 기준 이하의 사용 빈도를 보이는 기계어 코드를 삭제할 수 있다. 그리고, 속성 액세스부(130)는 중앙처리부(110)로부터 새로운 중간 표현 코드가 수신되면, 객체 추적용 고속 탐색을 통해 JIT 테이블을 검색하여 동일한 기계어 코드가 저장되어 있는지를 확인한다. 동일한 기계어 코드가 저장되어 있다면, 속성 액세스부(130)는 수신된 중간 표현 코드를 기계어 코드로 변환하는 과정을 생략하고 저장된 기계어 코드를 다시 중앙처리부(110)로 전달한다.
가비지 콜렉터부(140)는 전용 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 자바스크립트 수행시 메모리(150)의 힙 메모리 영역(Heap Memory Space)내의 미사용 객체 메모리를 반환하고 여유 메모리를 확보한다. 가비지 콜렉터부(140)는 힙 영역내 모든 객체의 참조 경로를 추적하여 참조되지 않는 객체의 힙 메모리를 병렬적으로 회수한다. 그리고, 가비지 콜렉터부(140)는 메모리(150)의 힙 메모리 회수에 따른 메모리 프리 리스트(Free list)를 갱신하여 가비지 콜렉션(Garbage Collection)을 위한 가속 절차를 수행한다.
HTML5 기반의 웹 앱을 실행하는 자바스크립트의 경우 급격하게 애플리케이션에 의한 객체의 사용이 집중되거나, 메모리 부족 현상이 발생하는 경우, 가비지 콜렉터부(140)는 먼저 모든 프로세서를 중단하고, 메모리(150)의 스택 영역(Stack Segment) 또는 레지스터(Register)에 위치한 지역 변수(Local Variable)의 참조 경로를 추적하여 힙 메모리 영역 내에 존재하는 다수의 힙 객체(Heap Object) 중에서 지역 변수가 도달한 힙 객체(Heap Object Reachable)와 도달하지 못한 힙 객체(Unreachable Heap Object)의 주소를 확인한다. 그리고, 가비지 콜렉터부(140)는 확인된 도달하지 못한 힙 객체를 병렬적으로 회수하여 메모리를 반환한다. 그리고, 가비지 콜렉터부(140)는 메모리 프리 리스트를 갱신한다. 메모리 프리 리스트는 메모리(150)에서 할당 가능한 모든 힙 블록(Heap Block)을 포함한다. 이를 위해, 가비지 콜렉터부(140)는 중앙처리부(110)와 가비지 콜렉터부(140)의 동기화를 위한 신호(Sync), 가비지 콜렉팅 시작 신호(GC Start), 가비지 콜렉팅 종료 신호(GC End) 및 캐쉬 제어 신호(Cache Control)를 송수신한다.
본 발명에 따른 자바 스크립트 가속 장치(100)는 모바일 단말에 구비된 AP(Application Processor) 또는 CPU(Central Processing Unit) 내부에 일체화된 하드웨어 형태로 구현될 수 있다.
도 2는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 중앙처리부(110) 및 JIT 테이블부(120)를 나타내는 구성도이다.
도 1 및 도 2를 참조하면, 중앙처리부(110)는 전단(Front End) 처리부 (111), 프로파일부(112) 및 펌웨어부(113)를 포함한다.
자바스크립트 소스 코드가 수신되면, 전단 처리부(111)는 렉서(Lexer) 및 파서(Parser)를 통해 수신된 자바스크립트 소스 코드의 어휘를 분석하고, 파싱 과정을 수행한다. 그리고, 파싱된 자바스크립트 소스 코드를 중간 표현(Intermediated Representation) 과정을 통해 중간 표현 코드로 변환한다. 그리고, 프로파일부(112)는 대상 기계어 코드 생성 및 전달을 위한 프로파일 정보를 포함한다. 프로파일부(112)로부터 전달된 프로파일 정보를 통해 펌웨어부(113)는 타겟 머신코드 생성 및 전달을 위한 최적화 펌웨어를 생성하고, 생성된 펌웨어에 기초하여 전단 처리부(111)를 통해 변환된 중간 표현 코드를 JIT 테이블부(120)로 전달한다. 중앙처리부(110)는 고속 인터페이스(High-speed Interface)를 통해 중간 표현 코드를 JIT 테이블부(120)로 지연 시간 없이 전달할 수 있다.
JIT 테이블부(120)는 스위치부(121), 인터프리터부(122) 및 가속 컴파일부(123)를 포함한다.
스위치부(121)는 수신된 중간 표현 코드에 포함된 다수의 코드 중에서 컴파일을 필요로 하는 소스 파일과 바이트 코드 형태의 클래스 파일로 구분한다. 수신된 중간 표현 코드에 포함된 다수의 코드 중에서 컴파일을 필요로 하는 소스 파일은 컴파일부(123)에서 JIT 컴파일러를 통해 바이트 코드로 구성된 클래스 파일로 컴파일한다. 그리고, 수신된 중간 표현 코드에 포함된 다수의 코드 중에서 바이트 코드 형태의 클래스 파일은 인터프리터부(122)를 통해 실행되어 기계어 코드로 변환된다. 그리고, JIT 테이블부(120)는 변환된 기계어 코드를 프로그래밍 가능한 JIT 테이블 형태로 메모리(150)에 저장한다. 상기 과정에서, 중앙처리부(110)와 JIT 테이블부(120)는 고속 인터페이스(High-speed Interface)를 통해 중간 표현 코드 및 기계어 코드를 빠르게 교환한다.
JIT 테이블부(120)는 소프트웨어 절차를 통해 동작하는 중앙처리부(110)와 달리 상기 과정을 하드웨어 절차를 통해 수행한다. 즉, JIT 테이블부(120)는 자바스크립트 소스 코드를 기계어 코드로 인터프리팅 하는 과정을 하드웨어 장치로 구현하여 처리하여, 자바 스크립트를 소프트웨어적으로 인터프리팅 하는 종래 방법에 비해 중앙처리부(110)의 부담을 줄이고, 처리 속도를 높여 고속 변환을 가능하게 한다.
도 3은 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 함수 호출 과정을 나타내는 도면이다.
도 1 및 도 3을 참조하면, 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 함수 호출 과정은 먼저, 중앙처리부(110)로 새로운 함수 호출이 수신(301)되면, 수신된 자바스크립트 소스 코드의 어휘를 분석하고, 파싱 과정을 수행하여 중간 표현 코드를 생성한다(302). 그리고, 중앙처리부(110)는 생성된 중간 표현 코드를 JIT 테이블부(120)로 전달한다(303).
JIT 테이블부(120)는 JIT 컴파일을 통해 수신된 중간 표현 코드를 기계어 코드로 컴파일한다(304). 이 과정에서 JIT 테이블부(120)는 간단한 JIT 컴파일러를 적용하여 짧은 컴파일 시간과 낮은 최적화 수준으로 범용적 기계어 코드를 생성한다. 다음으로, JIT 테이블부(120)는 생성된 범용적 기계어 코드를 속성 액세스부(130)로 전달한다(305). 그리고, 속성 액세스부(130)는 전달된 범용적 기계어 코드와 대응하는 해시값을 생성(306)하여 기계어 코드를 JIT 테이블 형태로 메모리(150)에 저장 및 관리한다(307).
중앙처리부(110)로 이전에 사용된 기록이 있는 함수 요청이 수신(308)되면, 중앙처리부(110)는 속성 액세스부(130)로 해당 기계어 코드를 요청한다(309). 속성 액세스부(130)는 중앙처리부(110)로부터 수신된 기계어 코드 요청에 따라, 메모리(150)에 저장된 JIT 테이블의 해시값을 통해 해당하는 기계어 코드를 검색한다(310). 그리고, 속성 액세스부(130)는 검색된 기계어 코드를 중앙처리부(110)로 전달한다(311). 다음으로, 속성 액세스부(130)는 중앙처리부(110)로 전달한 기계어 코드의 실행 횟수를 카운트한다(312). JIT 테이블 형태로 저장된 기계어 코드는 JIT 테이블부(120)에서 간단한 JIT 컴파일러를 통해 짧은 컴파일 시간 및 낮은 최적화 수준으로 생성된 범용적 기계어 코드이다. 생성된 범용적 기계어 코드는 함수 요청에 따라 검색되어 제공되며, 만약 동일한 기계어 코드의 호출 횟수가 기 설정된 기준 이상으로 호출된다면, 해당 범용적 기계어 코드를 분류한다. 그리고, 속성 액세스부(130)는 기 설정된 기준 이상ㅇ로 호출된 범용적 기계어 코드를 재컴파일하여 최적화된 코드를 생성한다(313). 최적화된 코드는 긴 컴파일 시간을 가지고 컴파일을 수행하여 높은 최적화 수준을 가진다. 이후, 해당 기계어 코드는 최적화된 코드로 제공된다.
도 4는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 속성 액세스부(130)를 나타내는 구성도이다.
도 1 및 도 4을 참조하면, 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 속성 액세스부(130)는 테이블 검색부(131), 해시 생성부(132) 및 테이블 접근부(133)를 포함한다.
해시 생성부(132)는 생성된 기계어 코드와 대응하는 해시값을 생성하여 기계어 코드를 JIT 테이블 형태로 메모리(150)에 저장 및 관리한다. 테이블 검색부(131)는 해시값을 통해 JIT 테이블을 고속 검색한다. 그리고, 테이블 검색부(131)는 객체 타입 예측을 위한 런타임(Run-time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화하고, 함수 및 메소드 매칭을 위한 키 값을 통해 고속 테이블 탐색 기능을 통해 메모리(150)에 저장된 JIT 테이블을 검색한다.
또한, 테이블 검색부(131)는 JIT 테이블 형태로 저장된 기계어 코드의 사용 빈도를 검사하여, 사용 빈도에 따라 분류하고, 소정의 기준 이하의 사용 빈도를 보이는 기계어 코드를 삭제할 수 있다. 그리고, 테이블 검색부(131)는 중앙처리부(110)로부터 코드 호출이 수신되면, 객체 추적용 고속 탐색을 통해 JIT 테이블을 검색하여 동일한 기계어 코드가 저장되어 있는지를 확인한다. JIT 테이블은 기계어 코드 및 기계어 코드와 대응하는 해시값을 함수 형태로 저장하여 필요로 하는 기계어 코드에 대한 빠른 검색 및 접근을 지원한다.
테이블 접근부(133)는 동일한 기계어 코드가 저장되어 있다면, 수신된 중간 표현 코드를 기계어 코드로 변환하는 과정을 생략하고 저장된 기계어 코드를 다시 중앙처리부(110)로 전달한다.
속성 액세스부(130)는 상술한 내용을 통해 하드웨어를 이용하여 함수 및 메소드 매칭을 위한 고속 테이블 탐색을 지원하여 새로운 소스 코드에 대한 JIT 컴파일 시간을 단축할 수 있다.
도 5는 본 발명의 일 실시예에 따른 자바스크립트 가속 장치의 가비지 콜렉터부(140)의 동작을 나타내는 도면이다.
도 1 및 도 5를 참조하면, 가비지 콜렉터부(140)는 전용 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 자바스크립트 수행시 메모리(150)의 힙 메모리 영역(Heap Memory Space)내의 미사용 객체 메모리를 반환하고 여유 메모리를 확보한다. 가비지 콜렉터부(140)는 힙 영역내 모든 객체의 참조 경로를 추적하여 참조되지 않는 객체의 힙 메모리를 병렬적으로 회수한다. 그리고, 가비지 콜렉터부(140)는 메모리(150)의 힙 메모리 회수에 따른 메모리 프리 리스트(Free list)를 갱신하여 가비지 콜렉션(Garbage Collection)을 위한 가속 절차를 수행한다.
자바 스크립트 기반의 웹 앱을 실행하는 과정에서 각각의 코드 및 데이터는 메모리 영역에 상주하여 실행되게 된다. 이 과정에서, 사용이 종료된(또는 불필요한) 메모리 영역을 방치하는 경우 메모리 부족 현상이 발생할 수 있다. 따라서, 사용이 종료된 메모리 영역을 반환해야 하지만, 사용중인 메모리 영역을 검색하여 회수하는 과정에서 시간 지연이 발생할 수 있다. 따라서, 가비지 콜렉터부(140)는 이와 같은 가비지 콜렉팅 과정에서 소요되는 시간을 최소화하기 위하여 우선 데이터 영역을 검색하여 사용이 종료된 메모리 영역의 주소만을 가져온 후, 병렬적으로 처리하여 메모리를 회수한다.
가비지 콜렉터부(140)는 먼저 메모리 루트 세트(Root set, 510)의 스택 영역(520) 및 레지스터(530)에 위치한 지역 변수(521) 및 스태틱/글로벌 변수(522)의 참조 경로를 추적한다. 참조 경로 추적을 통해 가비지 콜렉터부(140)는 힙 메모리 영역(530)에 존재하는 다수의 힙 객체 중에서 지역 변수(521)와 직간접적으로 연결되어 있는 사용 힙 객체(Heap Object Reachable, 531)와 불필요한 힙 객체(Unreachable Heap Object, 432))를 검사한다. 그리고, 가비지 콜렉터부(140)는 불필요한 힙 객체(532) 전체의 메모리 주소를 일괄적으로 확인한 후, 불필요한 힙 객체(532)를 병렬적으로 회수하여 메모리 공간을 확보한다. 그리고, 가비지 콜렉터부(140)는 메모리 프리 리스트를 갱신한다. 메모리 프리 리스트는 메모리(150)에서 할당 가능한 모든 힙 블록(Heap Block)을 포함한다. 이를 위해, 가비지 콜렉터부(140)는 중앙처리부(110)와 가비지 콜렉터부(140)의 동기화를 위한 신호(Sync), 가비지 콜렉팅 시작 신호(GC Start), 가비지 콜렉팅 종료 신호(GC End) 및 캐쉬 제어 신호(Cache Control)를 송수신한다.
도 6은 본 발명의 일 실시예에 따른 자바 스크립트 가속 장치의 가속 방법을 나타내는 흐름도이다.
도 6을 참조하면, 본 발명의 일 실시예에 따른 자바 스크립트 가속 방법은 먼저, 수신된 자바스크립트 소스 코드를 파싱(Parsing) 및 중간 표현(Intermediated Representation) 과정을 통해 중간 표현 코드로 변환한다(601). 자바스크립트 소스 코드가 수신되면, 렉서(Lexer) 및 파서(Parser)를 통해 수신된 자바스크립트 소스 코드의 어휘를 분석하고, 파싱 과정을 수행한다. 그리고, 파싱된 자바스크립트 소스 코드를 중간 표현(Intermediated Representation) 과정을 통해 중간 표현 코드로 변환한다.
다음으로, 변환된 중간 표현 코드를 컴파일을 필요로 하는 소스 파일과 바이트 코드 형태의 클래스 파일로 구분한다(602). 그리고, 수신된 중간 표현 코드에 포함된 다수의 코드 중에서 컴파일을 필요로 하는 소스 파일은 JIT 컴파일러를 통해 바이트 코드로 구성된 클래스 파일로 컴파일하고, 수신된 중간 표현 코드에 포함된 다수의 코드 중에서 바이트 코드 형태의 클래스 파일은 실행 과정을 통해 기계어 코드로 변환하여 JIT 테이블에 저장한다(603). 컴파일 및 인터프리팅 과정을 통해 생성된 기계어 코드는 프로그래밍 가능한 JIT 테이블 형태로 메모리에 저장한다. 컴파일 및 인터프리팅 과정을 하드웨어 절차를 통해 수행하여, 자바 스크립트를 소프트웨어적으로 인터프리팅 하는 종래 방법에 비해 중앙처리부의 부담을 줄이고, 처리 속도를 높여 고속 변환을 가능하게 한다.
다음으로, JIT 테이블의 기계어 코드를 사용 빈도에 따라 분류한다(604). 객체 타입 예측을 위한 런타임(Run-time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화하고, 함수 및 메소드 매칭을 위한 고속 테이블 탐색 기능을 통해 메모리에 저장된 JIT 테이블을 검색한다. 그리고, JIT 테이블 형태로 저장된 기계어 코드의 사용 빈도를 검사하여, 사용 빈도에 따라 분류하고, 소정의 기준 이하의 사용 빈도를 보이는 기계어 코드를 삭제할 수 있다. 다음으로 새로운 중간 표현 코드가 수신되면, 객체 추적용 고속 탐색을 통해 JIT 테이블을 검색하여 동일한 기계어 코드가 저장되어 있는지를 확인한다(605). 동일한 기계어 코드가 저장되어 있다면, 수신된 중간 표현 코드를 기계어 코드로 변환하는 과정을 생략하고 저장된 기계어 코드를 전달한다.
자바 스크립트 기반의 HTML5 웹 앱이 실행되면, 먼저 메모리 루트 세트의 스택 영역 및 레지스터에 위치한 지역 변수 및 스태틱/글로벌 변수의 참조 경로를 추적한다(606). 그리고, 참조 경로 추적을 통해 힙 메모리 영역에 존재하는 다수의 힙 객체 중에서 지역 변수와 직간접적으로 연결되어 있는 사용 힙 객체와 불필요한 힙 객체를 검사하여 불필요한 힙 객체의 메모리 주소를 확인한다(607). 그리고, 확인된 메모리 주소에 기초하여 불필요한 힙 객체를 병렬적으로 회수하여 메모리 공간을 확보한다(508). 그리고, 메모리 프리 리스트를 갱신한다. 메모리 프리 리스트는 메모리에서 할당 가능한 모든 힙 블록(Heap Block)을 포함한다.
이상 바람직한 실시예를 들어 본 발명을 상세하게 설명하였으나, 본 발명은 전술한 실시예에 한정되지 않고, 본 발명의 기술적 사상의 범위 내에서 당분야에서 통상의 지식을 가진자에 의하여 여러 가지 변형이 가능하다.
100: 자바스크립트 가속 엔진
110: 중앙 처리부
111: 전단 처리부
112: 프로파일부
113: 펌웨어부
120: JIT 테이블부
121: 스위치부
122: 인터프리터부
123: 가속 컴파일부
130: 속성 액세스부
131: 테이블 검색부
132: 해시 생성부
133: 테이블 접근부
140: 가비지 콜렉터부
150: 메모리

Claims (14)

  1. 수신된 자바스크립트 소스 코드를 어휘분석(Lexer) 및 파싱(Parsing)하는 중앙처리부;
    상기 파싱된 중간 표현 코드를 하드웨어로 구현된 JIT 컴파일(Just In Time Compile)을 통해 실행 가능한 기계어 코드(Machine Code)로 변환하는 JIT 테이블부;
    상기 변환된 기계어 코드의 사용 빈도에 따라 분류하여 JIT 테이블로 저장하고, 코드 호출 요청에 따라 고속 테이블 탐색 기능을 통해 상기 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 전달하는 속성 액세스부; 및
    자바스크립트 실행 시, 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 메모리의 힙 메모리 영역(Heap Memory Space) 내의 미사용 객체 메모리를 반환하여 여유 메모리를 확보하는 가비지 콜렉터부;
    를 포함하는 것을 특징으로 하는 자바스크립트 가속 장치.
  2. 제1항에 있어서,
    상기 속성 액세스부는 상기 전달하는 기계어 코드의 실행 횟수를 카운트하여, 기 설정된 소정의 횟수 이상 실행된 기계어 코드를 재컴파일 하여 최적화된 코드를 생성하는 것을 특징으로 하는 자바스크립트 가속 장치.
  3. 제1항에 있어서,
    상기 중앙처리부는,
    상기 수신된 자바스크립트 소스 코드의 어휘를 분석하여 파싱 과정을 수행하고, 상기 파싱된 자바스크립트 소스 코드를 고속 인터페이스(High-speed Interface)를 통해 상기 JIT 테이블부로 전달하는 것을 특징으로 하는 자바스크립트 가속 장치.
  4. 제1항에 있어서,
    상기 JIT 테이블부는,
    상기 파싱된 자바스크립트 소스 코드에 포함된 다수의 코드를 컴파일을 필요로 하는 소스 파일 및 바이트 코드 형태의 클래스 파일로 구분하고, 상기 소스 파일은 JIT 컴파일을 통해 바이트 코드로 구성된 상기 클래스 파일로 컴파일 하고, 상기 클래스 파일은 언터프리팅(Interpreting)을 통해 기계어 코드로 변환하는 것을 특징으로 하는 자바스크립트 가속 장치.
  5. 제1항에 있어서,
    상기 속성 액세스부는,
    상기 생성된 기계어 코드와 대응하는 해시값을 생성하고, 상기 생성된 해시값과 상기 기계어 코드를 상기 JIT 테이블에 저장하며, 상기 기계어 코드를 사용 빈도에 따라 분류하고, 상기 해시값을 통해 상기 저장된 기계어 코드를 고속 검색하는 것을 특징으로 하는 자바스크립트 가속 장치.
  6. 제1항에 있어서,
    상기 가비지 콜렉터부는,
    메모리 영역을 분석하여 스택 영역 및 레지스터에 위치한 하나 이상의 변수의 참조 경로를 추적하고, 상기 참조 경로 추적을 통해 힙 메모리 영역(Heap Memory Space) 내에 존재하는 다수의 힙 객체(Hep Object) 중에서 변수와 연결되어 사용중인 힙 객체(Heap Object Reachable) 및 불필요한 힙 객체(Unreachable Heap Object)를 구분하고, 상기 불필요한 힙 객체의 주소를 일괄적으로 확인한 후, 상기 불필요한 힙 객체를 병렬적으로 회수하여 메모리를 반환하는 것을 특징으로 하는 자바스크립트 가속 장치.
  7. 제1항에 있어서,
    상기 자바스크립트 가속 장치는 모바일 단말에 구비된 AP(Application Processor) 또는 CPU(Central Processing Unit) 내부에 일체화된 하드웨어 형태로 구현하는 것을 특징으로 하는 자바스크립트 가속 장치.
  8. 수신된 자바스크립트 소스 코드를 어휘분석(Lexer) 및 파싱(Parsing)하는 단계;
    상기 파싱된 중간 표현 코드를 하드웨어로 구현된 JIT 컴파일(Just In Time Compile)을 통해 실행 가능한 기계어 코드(Machine Code)로 변환하는 단계;
    상기 변환된 기계어 코드의 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계;
    요청에 따라 고속 테이블 탐색 기능을 통해 상기 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 단계; 및
    자바스크립트 실행 시, 가비지 콜렉터(Garbage Collector) 하드웨어 구조와 분석 도구를 통해 메모리의 힙 메모리 영역(Heap Memory Space) 내의 미사용 객체 메모리를 반환하여 여유 메모리를 확보하는 단계;
    를 포함하는 것을 특징으로 하는 자바스크립트 가속 방법.
  9. 제8항에 있어서,
    상기 변환된 기계어 코드의 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계는,
    객체 타입 예측을 위한 런타임(Run-Time) 프로파일링 기법을 통해 실행 패턴을 분석하여 동적 바인딩(Binding)을 최적화하는 것을 특징으로 하는 자바스크립트 가속 방법.
  10. 제8항에 있어서,
    상기 기계어 코드(Machine Code)로 변환하는 단계는,
    상기 파싱된 자바스크립트 소스 코드에 포함된 다수의 코드를 컴파일을 필요로 하는 소스 파일 및 바이트 코드 형태의 클래스 파일로 구분하는 단계;
    상기 소스 파일을 JIT 컴파일을 통해 바이트 코드로 구성된 상기 클래스 파일로 컴파일 하는 단계; 및
    상기 클래스 파일을 언터프리팅(Interpreting)을 통해 기계어 코드로 변환하는 단계;
    를 포함하는 것을 특징으로 하는 자바스크립트 가속 방법.
  11. 제8항에 있어서,
    상기 변환된 기계어 코드의 사용 빈도를 검사하여 사용 빈도에 따라 분류하여 JIT 테이블로 저장하는 단계는,
    상기 생성된 기계어 코드와 대응하는 해시값을 생성하고, 상기 생성된 해시값과 상기 기계어 코드를 상기 JIT 테이블에 저장하며, 상기 기계어 코드를 사용 빈도에 따라 분류하는 것을 특징으로 하는 자바스크립트 가속 방법.
  12. 제11항에 있어서,
    코드 호출에 따라 고속 테이블 탐색 기능을 통해 상기 JIT 테이블에 저장된 기계어 코드를 검색하여 대응하는 기계어 코드를 검색하는 단계는 상기 해시값을 통해 상기 저장된 기계어 코드를 고속 검색하는 것을 특징으로 하는 자바스크립트 가속 방법.
  13. 제8항에 있어서,
    상기 여유 메모리를 확보하는 단계는,
    메모리 영역을 분석하여 스택 영역 및 레지스터에 위치한 하나 이상의 변수의 참조 경로를 추적하는 단계;
    상기 참조 경로 추적을 통해 힙 메모리 영역(Heap Memory Space) 내에 존재하는 다수의 힙 객체(Hep Object) 중에서 변수와 연결되어 사용중인 힙 객체(Heap Object Reachable) 및 불필요한 힙 객체(Unreachable Heap Object)를 구분하는 단계; 및
    상기 불필요한 힙 객체의 주소를 일괄적으로 확인한 후, 상기 불필요한 힙 객체를 병렬적으로 회수하여 메모리를 반환하는 단계
    를 포함하는 것을 특징으로 하는 자바스크립트 가속 방법.
  14. 제8항에 있어서,
    상기 검색된 기계어 코드의 실행 횟수를 카운트하여, 기 설정된 소정의 횟수 이상 실행된 기계어 코드를 재컴파일 하여 최적화된 코드를 생성하는 단계;를 더 포함하는 것을 특징으로 하는 자바스크립트 가속 방법.
KR1020140049066A 2014-04-24 2014-04-24 자바스크립트 가속 장치 및 가속 방법 KR20150122923A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140049066A KR20150122923A (ko) 2014-04-24 2014-04-24 자바스크립트 가속 장치 및 가속 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140049066A KR20150122923A (ko) 2014-04-24 2014-04-24 자바스크립트 가속 장치 및 가속 방법

Publications (1)

Publication Number Publication Date
KR20150122923A true KR20150122923A (ko) 2015-11-03

Family

ID=54599065

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140049066A KR20150122923A (ko) 2014-04-24 2014-04-24 자바스크립트 가속 장치 및 가속 방법

Country Status (1)

Country Link
KR (1) KR20150122923A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105676823A (zh) * 2016-02-29 2016-06-15 广西升禾环保科技股份有限公司 具有垃圾点监控功能的用于卫生的运营作业系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105676823A (zh) * 2016-02-29 2016-06-15 广西升禾环保科技股份有限公司 具有垃圾点监控功能的用于卫生的运营作业系统
CN105676823B (zh) * 2016-02-29 2018-06-26 广西升禾环保科技股份有限公司 具有垃圾点监控功能的用于卫生的运营作业系统

Similar Documents

Publication Publication Date Title
US11366677B2 (en) Methods, blockchain nodes, and node devices for executing smart contract
Würthinger et al. Practical partial evaluation for high-performance dynamic language runtimes
US8819649B2 (en) Profile guided just-in-time (JIT) compiler and byte code generation
AU2014275115B2 (en) Debugging native code by transitioning from execution in native mode to execution in interpreted mode
US7725883B1 (en) Program interpreter
US5815720A (en) Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
US20130205282A1 (en) Transferring program execution from compiled code to interpreted code
US8522222B2 (en) Tracing just-in-time compilation with pointers to local variables
TWI525543B (zh) 混合式動態碼編譯裝置、方法及其服務系統
CN103412754A (zh) 动态语言代码执行方法和装置
CN104134039A (zh) 病毒查杀方法、客户端、服务器以及病毒查杀系统
CN111770204A (zh) 一种执行智能合约的方法、区块链节点和存储介质
KR20170014613A (ko) 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
Strumpen Compiler technology for portable checkpoints
Park et al. Concurrent JavaScript parsing for faster loading of Web apps
CN105786465A (zh) 一种脚本语言执行方法及装置
KR20150122924A (ko) 자바스크립트 성능 평가 장치 및 성능 평가 방법
KR20150122923A (ko) 자바스크립트 가속 장치 및 가속 방법
CN113220327B (zh) 智能合约升级方法及区块链系统
Park et al. Reusing the Optimized Code for JavaScript Ahead-of-Time Compilation
CN114610364A (zh) 应用程序更新、应用程序开发方法、装置及计算机设备
US11080033B2 (en) Method for installing a program on an embedded system, an embedded system for such a method, and a method for generating additional information
Puder et al. Cross-compiling Java to JavaScript via tool-chaining
KR101694291B1 (ko) 자바 스크립트 엔진 가속 장치 및 방법
CN117785213B (zh) 基于Rust开发的前端构建工具及构建方法

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination