KR100984815B1 - 스크립트 언어의 실행속도 향상 방법 - Google Patents

스크립트 언어의 실행속도 향상 방법 Download PDF

Info

Publication number
KR100984815B1
KR100984815B1 KR1020080081242A KR20080081242A KR100984815B1 KR 100984815 B1 KR100984815 B1 KR 100984815B1 KR 1020080081242 A KR1020080081242 A KR 1020080081242A KR 20080081242 A KR20080081242 A KR 20080081242A KR 100984815 B1 KR100984815 B1 KR 100984815B1
Authority
KR
South Korea
Prior art keywords
bytecode
bytecodes
type
execution
compiler
Prior art date
Application number
KR1020080081242A
Other languages
English (en)
Other versions
KR20100022637A (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 KR1020080081242A priority Critical patent/KR100984815B1/ko
Publication of KR20100022637A publication Critical patent/KR20100022637A/ko
Application granted granted Critical
Publication of KR100984815B1 publication Critical patent/KR100984815B1/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • 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
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code

Landscapes

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

Abstract

본 발명은 스크립트 언어를 스크립트 언어에 특화된 바이트코드로 번역하여 실행 시에 동적으로 실행 속도를 향상시키는 방법에 관한 것이다. 본 발명에 따른 스크립트 언어 바이트코드는 레지스터 기반이며 일부 바이트코드는 명시적인 타입을 가진다. 바이트코드 중 자주 실행되는 부분은 추가로 최적화할 수 있도록 함수 호출 빈도와 분기 빈도 등 실행 정보를 바이트코드 내에 저장한다. 실행 시에 빈번히 실행되는 일련의 바이트코드를 찾아낸 후 같은 일을 한 번에 수행하는 새로운 바이트코드를 동적으로 만들어내 치환하는 방식으로 실행 속도를 높인다.
스크립트 언어, 웹, 바이트코드, 실행 환경, 최적화

Description

스크립트 언어의 실행속도 향상 방법{METHOD FOR IMPROEMENT OF PERFORMANCE OF SCRIPT LANGUAGE}
본 발명은 스크립트 언어 바이트코드 개선을 통한 스크립트 언어의 성능 향상 기술에 관한 것으로, 특히 스크립트 언어를 스크립트 언어에 특화된 바이트코드로 번역하여 실행 시에 동적으로 실행 속도를 향상시킬 수 있도록 한 스크립트 언어의 실행속도 향상 방법에 관한 것이다.
스크립트 언어인 자바스크립트(JavaScript)는 웹 클라이언트 프로그래밍에 이미 널리 사용되고 있으며, 웹 서버 프로그래밍도 피에치피(PHP), 루비(Ruby), 파이썬(Python) 등의 스크립트 언어의 사용이 늘고 있다. 리눅스 그놈(GNOME) 데스크톱도 여러 사용자 인터페이스 컴포넌트를 조합하는 언어로 스크립트 언어인 파이썬을 사용하고 있다. 게임을 제작할 때도 엔진을 제외한 사용자 인터페이스는 루아(Lua) 같은 스크립트 언어로 만드는 것이 일반적이다.
효율적인 스크립트 언어 구현은 대부분 소스 코드를 일단 바이트코드로 번역한 후에 바이트코드 인터프리터를 통해 코드를 실행하는 구조를 가지고 있다. 스크립트 언어는 실행 시에 타입 검사를 하기 때문에 스크립트 언어 바이트코드도 명시적인 타입 없이 실행 시에 타입을 검사하도록 설계되어 있는 경우가 많다. 실행 시에 타입을 검사하는 스크립트 언어의 특징은 개발자의 생산성을 높여주지만 동시에 스크립트 언어의 실행 속도를 현저히 떨어뜨린다는 문제점이 있다. 일례로, 애플사의 스쿼럴피시는 레지스터 기반의 바이트코드를 사용하고 있지만 명시적인 타입이 없어서 실행 시에 모든 타입 검사를 수행해야 하는 부담이 있다.
또한 바이트코드 기반의 언어는 코드 크기를 줄이기 위해 대부분 스택 기반 바이트코드를 채택하고 있다. 대표적인 예로 아도브 사의 액션스크립트가 스택 기반의 바이트코드를 채택해서 사용하고 있다. 스택 기반 바이트코드는 레지스터 기반 바이트코드 비해 개별 명령의 길이는 짧지만 같은 일을 하기 위해 더 많은 수의 명령을 실행해야 하므로 명령 수가 적을수록 효율적인 인터프리터에는 적합하지 않다.
본 발명이 해결하고자 하는 기술적과제는, 웹 등에서 많이 사용하는 스크립트 언어의 실행 속도 개선에 관한 것으로서 레지스터 기반의 타입 있는 바이트코드를 이용하여 빠른 실행 환경을 제공하는데 있다. 추가적인 최적화를 동적으로 이루기 위해 함수 호출 빈도와 분기 빈도 등을 바이트코드에 기록한다. 실행되는 바이트코드 수를 줄여 스크립트 언어의 실행 속도가 향상되도록 하기 위하여, 빈번히 실행되는 일련의 바이트코드를 실행 시에 찾아내어 같은 일을 하는 하나의 바이트코드를 만들어서 대체한다.
상기 기술적과제를 이루기 위한 본 발명에 따른 스크립트 언어의 실행속도 향상 방법은,
(a) 추론기가 입력되는 스크립트 언어 소스 코드에 대한 소스 코드 분석을 통해 일부 타입을 추론하는 단계와;
(b) 컴파일러가 상기 타입 추론기에서 추론된 타입 정보와 사용자가 추가로 입력한 타입 정보를 근거로 하여, 바이트코드 생성시에 오퍼랜드의 타입을 확실히 인식한 경우 타입이 있는 바이트코드를 생성하는 단계와;
(c) 바이트코드 인터프리터가 상기 컴파일러에서 출력되는 바이트코드를 근거로 빈번히 실행되는 일련의 바이트코드를 찾아내어 이를 같은 일을 하는 하나의 바이트코드로 대체하는 단계;로 이루어지는 것을 특징으로 한다.
본 발명은 스크립트 언어의 실행 속도 개선에 관한 것으로서 레지스터 기반 바이트코드를 사용하여 빠른 실행 환경을 구현하며 바이트코드에 명시적인 타입을 줌으로써 스크립트 언어에서 타입 추론이 가능하거나 타입 정보가 주어진 경우 좀 더 효율적인 실행이 가능하도록 한다. 실행 환경 정보를 쉽게 저장할 수 있도록 하여 향후 추가적인 최적화를 용이하도록 하고, 자주 실행되는 바이트코드를 하나의 바이트코드로 결합하여 스크립트 언어 실행 속도를 개선한다.
이하에서는 본 발명의 구체적인 실시 예를 도면을 참조하여 상세히 설명하도록 한다.
도 1은 본 발명의 스크립트 언어의 실행속도 향상 방법을 개념적으로 표현한 블록도로서 이에 도시한 바와 같이, 타입 추론기(10)와; 컴파일러(20)와; 바이트코드 인터프리터(30)로 구성된다.
본 발명에 따른 스크립트 언어 바이트코드 생성기는 상기 타입 추론기(10) 및 컴파일러(20)로 이루어지는 것으로, 이 바이트코드 생성기에 의해 생성되는 결과물은 바이트코드이다.
본 발명에서는 스크립트 언어 바이트코드로 레지스터 기반 바이트코드를 제안하였다. 바이트코드 인터프리터(30)를 실행함에 있어서 성능 상 가장 큰 장애물은 바이트코드 명령 하나를 실행할 때마다 마이크로프로세서에서 분기 예측을 하기 힘든 간접 분기를 실행한다는 점이다. 효율적인 인터프리터는 전체 실행 시간의 10-30% 정도를 분기 예측 실패로 인해 낭비한다. 레지스터 기반의 바이트코드는 스택 기반 바이트코드에 비해 같은 일을 수행하기 위한 바이트코드의 수가 적으므로 간접 분기로 인한 낭비를 줄일 수 있다.
타입 추론기(10)는 스크립트 언어 소스 코드를 입력으로 받아 소스 코드 분석을 통해 일부 타입을 추론한다. 컴파일러(20)는 상기 타입 추론기(10)에서 추론된 타입 정보와 사용자가 추가로 입력한 타입 정보를 입력으로 받아 바이트코드 생성시에 오퍼랜드의 타입을 확실히 아는 경우에는 타입이 있는 바이트코드를 생성한다. 여기서, '일부 타입'이란 상기 타입 추론기(10)가 모든 타입을 추론할 수 없기 때문에 사용된 단어이다. 즉, 타입 추론기(10)를 적용하면 일부 코드의 타입을 알 수 있지만, 여전히 타입을 알 수 없어 타입 없이 실행되는 코드도 있다는 것을 의미한다.
타입이 있는 바이트코드의 예로 add가 있다. 두 개의 값을 더하는 add의 경우 add는 모든 타입의 인자를 받을 수 있지만, add_i는 정수 타입의 인자만 받을 수 있고, add_string은 문자열 타입의 인자만 받을 수 있다. add는 add_i와 add_string 대신 사용될 수 있지만 실행 시에 타입 검사를 수행해야 하므로 add_i와 add_string에 비해 비효율적이다.
상기 설명에서와 같이 상기 컴파일러(20)는 스크립트 언어의 소스 코드를 컴파일 할 때 타입을 아는 경우 타입이 있는 바이트코드를 생성하는 것을 원칙으로 하고, 타입을 모를 때에는 범용의 바이트코드를 사용하도록 한다. 맥락상 타입 추론이 가능하거나 개발자가 명시적으로 타입 정보를 적어준 경우 타입이 있는 바이트코드를 생성하면 실행 시 타입 검사에 대한 부담을 줄일 수 있기 때문에 효율적인 수행이 가능하다.
도 2은 본 발명에 따라 실행 정보를 저장하기 위한 바이트코드의 구조를 나타낸 것이다.
함수 호출이나 분기 바이트코드는 자주 실행되는 바이트코드의 영역을 파악할 수 있는 중요한 지점이다. 따라서 실행 시에 추가적인 최적화를 하기 위해서는 함수 호출과 분기 바이트코드가 몇 번이나 호출되는지 빈도를 기록할 필요가 있다. 바이트코드 인터프리터(30)의 성능을 향상시키기 위해 사용하는 JIT(Just-In-Time) 컴파일러와 같은 컴파일러(30)는 이런 실행 정보에 의존해 어떤 부분을 기계어로 컴파일하여 실행 속도를 향상시킬 것인지 결정하게 된다.
도시한 바와 같이, 본 발명에서 제안한 바이트코드는 이런 실행 정보를 바이트코드에 직접 기록할 수 있도록 공간을 제공한다. 따라서, 바이트코드 인터프리터(30)가 해쉬 테이블과 같은 별도의 데이터 구조를 만들 필요 없이 빠르게 실행 정보를 갱신하고 읽을 수 있게 된다. 실행 정보 갱신은 바이트코드 인터프리터(30)의 실행 속도에도 영향을 미치기 때문에 반드시 빠른 속도로 수행되어야 한다.
상기 바이트코드 인터프리터(30)는 바이트코드를 동적으로 변환하는데, 이를 위해 바이트코드 빈도 분석기(31), 바이트코드 변환기(32) 및 바이트코드 실행기(33)를 구비한다.
삭제
상기 바이트코드 인터프리터(30)에 바이트코드가 입력될 때, 그 바이트코드 인터프리터(30)는 도 2와 같은 함수호출/분기 바이트코드 영역에 바이트코드를 기록하고, 실행정보 영역에 빈도수를 기록한다. 그리고, 상기 바이트코드가 입력될 때 마다 바이트코드 빈도 분석기(31)는 상기와 같이 기록된 바이트코드의 정보를 근거로 어떤 일련의 바이트코드가 미리 정의된 특정 빈도를 초과하는지 확인하여 초과하는 것으로 판명되면 그에 따른 초과정보를 바이트코드 변환기(32)에 전달한다. 이때 상기 바이트코드 변환기(32)는 일련의 바이트코드를 한 번에 수행할 수 있는 새로운 바이트코드를 생성하여, 그 일련의 바이트코드를 대체한다. 이후에 바이트코드 실행기(33)는 같은 코드를 다시 수행할 때 상기 변환된 바이트코드를 수행하므로 수행 속도가 빨라진다.
예를 들어, push 3, push 4, add라는 일련의 바이트코드가 빈번히 나타난다면 상기 바이트코드 인터프리터(30)는 이 정보를 파악하여 push_3_push_4_add라는 새로운 바이트코드를 생성해 낸 후 push 3, push 4, add 바이트코드를 모두 push_3_push_4_add로 갱신한다. 새롭게 생성된 바이트코드는 한 번에 세 가지 바이트코드의 일을 수행하므로 바이트코드를 가져와서 실행하는 부담을 덜어 실행 속도가 향상되게 된다.
이상에서는 본 발명에 대한 기술사상을 첨부 도면과 함께 서술하였지만 이는 본 발명의 바람직한 실시 예를 예시적으로 설명한 것이지 본 발명을 한정하는 것은 아니다. 또한 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 이라면 누구나 본 발명의 기술적 사상의 범주를 이탈하지 않는 범위 내에서 다양한 변형 및 모방이 가능함은 명백한 사실이다.
도 1은 본 발명에 의한 스크립트 언어의 실행속도 향상 방법을 개념적으로 나타낸 블록도.
도 2는 본 발명에 의한 실행 정보를 저장하는 바이트코드의 포맷도.
***도면의 주요 부분에 대한 부호의 설명***
10 : 타입 추출기
20 : 컴파일러
30 : 바이트코드 인터프리터
31 : 바이트코드 빈도 분석기
32 : 바이트코드 변환기
33 : 바이트코드 실행기
삭제

Claims (5)

  1. (a) 타입 추론기가 입력되는 스크립트 언어 소스 코드에 대한 소스 코드 분석을 통해 일부 타입을 추론하는 단계와;
    (b) 컴파일러가 상기 타입 추론기에서 추론된 타입 정보와 사용자가 추가로 입력한 타입 정보를 근거로 하여, 함수호출/분기 바이트코드 영역, 인자 영역, 실행정보 영역를 포함하여 이루어진 바이트코드 생성시에 오퍼랜드의 타입을 확실히 인식한 경우 타입이 있는 바이트코드를 생성하는 단계와;
    (c) 바이트코드 인터프리터가 상기 컴파일러에서 출력되는 바이트코드를 근거로 어떤 일련의 바이트 코드가 미리 정의된 특정 빈도를 초과하는지 확인하여 초과하는 것으로 판명되면 그 일련의 바이트코드를 한번에 수행할 수 있는 하나의 바이트코드로 대체하여 그 대체된 바이트코드를 수행하는 단계;로 이루어지는 것을 특징으로 하는 스크립트 언어의 실행속도 향상 방법.
  2. 삭제
  3. 제1항에 있어서, 실행정보 영역은 바이트코드의 실행정보가 기록되는 영역인 것을 특징으로 하는 스크립트 언어의 실행속도 향상 방법.
  4. 제1항에 있어서, (b) 단계는 컴파일러가 바이트코드 생성시에 오퍼랜드의 타입을 확실히 인식하지 못한 경우 범용의 바이트코드를 사용하는 것을 특징으로 하는 스크립트 언어의 실행속도 향상 방법.
  5. 삭제
KR1020080081242A 2008-08-20 2008-08-20 스크립트 언어의 실행속도 향상 방법 KR100984815B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080081242A KR100984815B1 (ko) 2008-08-20 2008-08-20 스크립트 언어의 실행속도 향상 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080081242A KR100984815B1 (ko) 2008-08-20 2008-08-20 스크립트 언어의 실행속도 향상 방법

Publications (2)

Publication Number Publication Date
KR20100022637A KR20100022637A (ko) 2010-03-03
KR100984815B1 true KR100984815B1 (ko) 2010-10-01

Family

ID=42175094

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080081242A KR100984815B1 (ko) 2008-08-20 2008-08-20 스크립트 언어의 실행속도 향상 방법

Country Status (1)

Country Link
KR (1) KR100984815B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010053875A (ko) * 1999-12-02 2001-07-02 오길록 내장형 자바가상머신을 위한 바이트코드 압축 방법
US20080091923A1 (en) * 2006-10-16 2008-04-17 International Business Machines Corporation Register-based instruction optimization for facilitating efficient emulation of an instruction stream

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010053875A (ko) * 1999-12-02 2001-07-02 오길록 내장형 자바가상머신을 위한 바이트코드 압축 방법
US20080091923A1 (en) * 2006-10-16 2008-04-17 International Business Machines Corporation Register-based instruction optimization for facilitating efficient emulation of an instruction stream

Also Published As

Publication number Publication date
KR20100022637A (ko) 2010-03-03

Similar Documents

Publication Publication Date Title
US7725883B1 (en) Program interpreter
US8769511B2 (en) Dynamic incremental compiler and method
US8522222B2 (en) Tracing just-in-time compilation with pointers to local variables
RU2668973C2 (ru) Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме
EP0905617B1 (en) Method for generating a java bytecode data flow graph
US9524175B2 (en) Target typing of overloaded method and constructor arguments
KR100763177B1 (ko) 자바 가상 머신의 명령어 수행 방법 및 그 장치
JP2009503677A (ja) プログラムをデータオブジェクトとしてサポートするコンパイラ
JP4806060B2 (ja) コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JPH09330233A (ja) 最適目的コード生成方法
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US9134973B2 (en) Dynamic compiling and loading at runtime
KR20120083803A (ko) 가상머신을 위한 추가코드 생성장치 및 방법
JP2013186647A (ja) 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード
Chang et al. Efficient just-in-time execution of dynamically typed languages via code specialization using precise runtime type inference
CN105786465A (zh) 一种脚本语言执行方法及装置
CN112052047A (zh) 一种指令处理方法、终端及存储介质
Marr et al. Are We There Yet?: Simple Language Implementation Techniques for the 21st Century
KR100984815B1 (ko) 스크립트 언어의 실행속도 향상 방법
CN116594622A (zh) 基于类型推导与数据流分析的Python程序编译方法及系统
KR102341137B1 (ko) 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
JP7391983B2 (ja) プログラム論理の表現を生成する方法、逆コンパイル装置、再コンパイルシステムおよびコンピュータプログラム製品
KR101705996B1 (ko) 자바스크립트 소스 코드를 최적화하기 위한 자바스크립트 소스 코드 정적 분석 장치 및 방법
KR100964582B1 (ko) 스크립트 언어의 실행속도 향상 시스템
Mohan Comparative Analysis Of JavaScript And WebAssembly In The Browser Environment

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated 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: 20130823

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee