SFCMVCLHFEXZ.hwp

Similar documents
Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Slide 1

슬라이드 1

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

K&R2 Reference Manual 번역본

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

JVM 메모리구조

PowerPoint Presentation

자바에서 Swig를이용하기위해서는필요한파일은사용하고자하는 C/C++ 소스파일과 interface파일이필요합니다. 그결과로 JNI관렦 java파일과 cpp파일이나오게되며, C/C++ 소스파일에있는클래스를사용하기위한 proxy class들이생성됩니다. 다음부터 Swig를사

17장 클래스와 메소드

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

OCW_C언어 기초

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

untitled

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

gnu-lee-oop-kor-lec06-3-chap7

EA0015: 컴파일러

Microsoft PowerPoint - lec2.ppt

컴파일러

쉽게

슬라이드 1

PowerPoint Presentation

PowerPoint Template

제11장 프로세스와 쓰레드

PowerPoint Presentation

ThisJava ..

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

02 C h a p t e r Java

<C6F7C6AEB6F5B1B3C0E72E687770>

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

C++ Programming

Microsoft PowerPoint - chap04-연산자.pptx

제4장 기본 의미구조 (Basic Semantics)

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt


<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

금오공대 컴퓨터공학전공 강의자료

쉽게 풀어쓴 C 프로그래밊

BMP 파일 처리

슬라이드 1

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

C++ Programming

슬라이드 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

adfasdfasfdasfasfadf

EA0015: 컴파일러

PowerPoint 프레젠테이션

4S 1차년도 평가 발표자료

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint 프레젠테이션

11장 포인터

JDBC 소개및설치 Database Laboratory

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

4장.문장

오버라이딩 (Overriding)

설계란 무엇인가?

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

C 언어와 프로그래밍 개요

Microsoft PowerPoint - 2강

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

슬라이드 1

3장 어휘분석

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

1

슬라이드 1

OCW_C언어 기초

Microsoft PowerPoint - lec3.ppt

Transcription:

21-1-R02 가상기계를위한네이티브인터페이스정의언어 (Native Interface Definition Language for Virtual Machine) 박지우 * 이창환 ** 오세만 동국대학교컴퓨터공학과 * 링크젠 {jojaryong * ** yich * ** smoh * }@dongguk.edu 요 약 가상기계란하드웨어로이루어진물리적인시스템과는달리소프트웨어로제작되어논리적인 시스템구성을갖는개념적인컴퓨터이다. 가상기계에서실행되는프로그램은플랫폼독립적인장 점이있지만, 가상기계에서제공하지않는플랫폼의존적인기능은사용할수없다. 이와같은문 제를해결하기위해서가상기계환경에서는일반적으로네이티브인터페이스를제공한다. 제공된 네이티브인터페이스를통해구현된네이티브함수를가상기계환경에서사용하기위해서는네이 티브함수를위한정보가필요하다. 본논문에서는네이티브함수를위한정보를용이하게생성하기위해네이티브인터페이스정 의언어와언어로부터네이티브인터페이스사용에필요한정보를생성하는컴파일러를설계및 구현한다. 구현된컴파일러의결과인네이티브함수를위한정보는가상기계환경의내부표현으 로생성되며, 생성된정보는임베디드시스템을위한가상기계인 EVM 에적용하여검증한다. 제안 된언어와컴파일러를통해가상기계개발자가네이티브함수를위한정보를직접작성하는부담 을줄이고편의성을제공할수있다. 1. 서 론 다양한형태의모바일기기와컴퓨터의 등장으로각각의단말기에적합한서로다 른프로세서와운영체제가사용되고있다. 다양한환경은동일한작업을수행하는프 로그램을각각의사용자환경에맞도록수 정해야하는단점을지닌다. 단점을극복하 기위해서는다양한환경에서도프로그램 의수정없이실행되는기술을요구한다. 이에따른해결책으로이종의장치에탑재 되어플랫폼독립성을제공하는가상기계 가널리사용되고있다. 가상기계는소프트웨어로제작되어논리 적인시스템구성을갖는개념적컴퓨터이 다. 따라서가상기계환경에서실행되는프 로그램은플랫폼독립적인장점을갖는다. 그러나가상기계에서제공하지않는플랫 폼에의존적인기능을사용하는것이불가 능하다. 가상기계환경에서는일반적으로 플랫폼의존적인기능을사용하기위해네 이티브인터페이스를제공한다. 네이티브 언어로작성된함수를사용하는가상기계 코드의어셈블(Assemble) 과실행을위해

12 프로그래밍언어논문지제21권제1 호(2007. 4) 서는네이티브함수에대한추가적인정보 가필요하다. 네이티브함수에대한정보는 사전에네이티브함수테이블과함수원형 파일을생성하여가상기계환경에제공될 수있다. 그러나네이티브함수테이블과 함수원형파일을가상기계개발자가직접 작성할경우문제가발생할가능성이크다. 본논문에서는네이티브함수를위한정 보를용이하게생성하기위해네이티브인 터페이스정의언어와언어로부터네이티 브인터페이스사용에필요한정보를생성 하는컴파일러를설계및구현한다. 네이 티브인터페이스정의언어는명시적으로 함수정보를작성할수있도록설계하고 기존 EVM(Embedded Virtual Machine) 환경과의호환성을고려한다. 네이티브정 의언어컴파일러는네이티브정의언어로 작성된소스코드는입력으로하여네이티 브함수테이블과네이티브함수에대한 원형파일을생성한다. 가상기계의어셈블 러, 디스어셈블러, 실행엔진은생성된테 이블을사용하여네이티브함수와관련된 작업을수행한다. 컴파일러의결과인네이 티브함수테이블과함수원형파일은임 베디드시스템을위한가상기계인 EVM에 적용하여검증한다. 제안된언어와컴파일 러의설계및구현을통해가상기계개발 자에게네이티브함수테이블과함수원형 파일생성의편의성을제공할수있다. 본논문의 한가상기계인 2장에서는본논문에서사용 EVM에대한소개와특징 에대하여간략히언급하고, 현재사용되고 있는네이티브인터페이스와인터페이스 정의언어에대해서정리한다. 3장에서는 네이티브인터페이스정의언어의역할, 네 이티브인터페이스정의언어문법, 네이티 브인터페이스정의언어컴파일러에대해 소개한다. 4장실험및결과에서는실험데 이터를작성하여제안한방법을 EVM에 적용하고실험하여결과를확인한다. 마지 막 5장결론에서는본논문에서제시한네 이티브인터페이스정의언어를요약하고 향후연구방향에대하여언급한다. 2. 관련연구 2.1 EVM(Embedded Virtual Machine) EVM 은스택기반가상기계로서모바일 디바이스 (Mobile Device), 셋톱박스 (Set-top Box), 디지털 TV(Digital TV) 등에탑재되 어동적응용프로그램을다운로드하여실 행하는가상기계솔루션이다. EVM 은 ( 그 림 1) 과같이크게변환기, 어셈블러, 가상 기계의세부분으로나눌수있다. 변환기는 ( 그림 1) EVM 시스템구성도 C# 이나자바등의고급프로그 래밍언어로작성된프로그램을가상기계의 어셈블리포맷인 SAF(Standard Assembly Format) 로번역하고어셈블러는 SAF를 가상기계에서실행가능한형태인 EFF (Executable File Format) 파일로변환하며

가상기계를위한네이티브인터페이스정의언어 13 EVM은실제하드웨어에탑재되어 EFF 파일을실행하는가상기계역할을한다 [1][2]. EVM의중간언어인 SIL(Standard Intermediate Language) 은스택연산, 산 술연산, 흐름제어등총 6개의카테고리 로분류되는스택기반의명령어집합으로 언어독립성과하드웨어및플랫폼독립성 을갖고있다. SIL은다양한프로그래밍언 어를수용하기위해서바이트코드 [3],.NET IL[4] 등기존의가상기계코드들의분석을 토대로정의되었다. 또한프로그램의확장 성을위해순차적언어와객체지향언어를 모두수용할수있도록설계되었다. 각각의 명령어집합은 이진코드와 EVM에서실행될수있는 1:1 대응된다[5][6]. 고급언어로작성된코드는변환기를통 해서의사코드와연산코드로구성된 EVM의어셈블리포맷인 SAF로변환된 다. 이는어셈블러에의해 EFF 형태로변 환되고시스템의운영체제나구조에상관 없이 EVM 에의해실행된다. SAF는임베 디드시스템을위한가상기계의표준어셈 블리포맷으로설계되었으며, 클래스선언 등특정작업의수행을의미하는의사코 드와가상기계에서실행되는실제명령어 에대응되는연산코드로이루어져있다. 연산코드는스택기반의명령어집합이며 특정프로그래밍언어에종속되지않는언 어독립성과하드웨어및플랫폼독립성을 갖고있다. 따라서연산코드의연상기호 는특정하드웨어나소스언어에종속되지 않는추상적인형태를지닌다 [7][8]. EFF 는실행에필요한모든정보를가진 EVM 의실행파일포맷으로서이진형태 의바이트스트림으로구성되어있다. 다양 한프로그래밍언어를수용하기위해서자 바클래스파일[3],.NET PE 파일[4] 등기 존에널리사용되고있는가상기계실행 파일포맷들의분석을토대로정의하였다. EFF 는크게헤더, VM 코드, 메타데이터 의세부분으로구분할수있다. 헤더는해 당파일이 EFF 파일임을나타내고프로그 램의버전, 시작점등과같은정보를가지 고있다. VM 코드는프로그램에대한실 질적인명령어집합을포함하고있다. 메타 데이터는총 15 개의테이블로구분되며, 상 수값, 메소드정보와같은실행에필요한 그밖의정보들을저장하고있다 [9][10][11]. 2.2 네이티브인터페이스 2.2.1 JNI(Java Native Interface) JNI 는자바에서제공하는네이티브인터 페이스다. 자바로작성된프로그램은자바 가상기계(Java Virtual Machine) 상에서 수행된다. 따라서플랫폼의존적인부분을 직접개발할수없다. 이에대한해결책으 로자바에서는네이티브언어와연결할수 있는방법을제공하고있고이를네이티브 인터페이스라지칭한다. 네이티브인터페 이스를통해개발자는플랫폼의존적인기 능을구현하거나이미다른언어로작성된 라이브러리나프로그램을사용하여자바 프로그램을작성할수있다. 또한프로그램 의성능에크게영향을주는코드를네이 티브언어로작성하여속도향상을꾀할 수있다 [12][13]. 네이티브메소드를작성하고실행하는 방법은 ( 그림 2) 에서볼수있듯이컴파일 과정을통한클래스파일생성, Javah 유틸 리티를사용하여헤더파일생성, 네이티브 언어로메소드구현, 동적라이브러리파일 생성, 실행의 5 단계로나눌수있다. 우선자바프로그래머는네이티브메소

14 프로그래밍언어논문지제21권제1 호(2007. 4) 자는언어의각기다른네이티브인터페이 스사용방법을인지하고있어야하는어 려움이있다. SWIG는 C나 C++ 로작성된 프로그램과다른여러가지언어들을연결 시켜서사용할수있도록도와주는인터페 이스컴파일러이다[15]. SWIG를사용하면 서로다른언어의네이티브함수에대한 연결을일관된방법으로해결할수있다. ( 그림 3) 은 SWIG의구조를그림으로도식 화한것이다. ( 그림 2) JNI를통한네이티브메소드구현과정 드가포함된자바클래스를만든다. 자바 언어가아닌다른언어로메소드구현을 작성한다면, 자바클래스안에메소드를정 의할때 native native 키워드를포함해야한다. 키워드는함수가네이티브언어로 작성된함수라는것을컴파일러에게알린 다. 자바클래스에서네이티브메소드의선 언은단지메소드원형만있고구현은존 재하지않는다. 메소드는개별적인네이티 브언어소스파일에서구현된다. 작성한 자바프로그램을컴파일(Compile) 한후 javah 유틸리티를사용하여네이티브메소 드를위한헤더파일을생성할수있다. 생 성된헤더파일의정보를이용하여실제 메소드를 C/C++ 과같은네이티브언어로 구현하여컴파일러를사용하여공유라이 브러리파일을생성한다. 자바가상기계는 클래스파일과공유라이브러리파일을사 용하여프로그램을실행한다 [14]. 2.2.2 SWIG(Simplified Wrapper and Interface Generator) 언어별로지원하고있는네이티브인터 페이스는사용방법이복잡하고서로에대 한호환성을고려하지않는다. 따라서사용 ( 그림 3) SWIG의구조 SWIG 의입력인인터페이스파일은함수 원형과변수선언을포함한다. %module 지시자는 SWIG에의해생성되는모듈의 이름을정의한다. %{, %} 블록은 C 헤더 파일혹은추가적인 C 선언과같은추가적 인코드를삽입하기위한장소를규정한다. /* example.i */ %module example %{ /* Put header files here or function declarations like below */ extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time(); %} extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time(); ( 그림 4) SWIG의인터페이스파일

가상기계를위한네이티브인터페이스정의언어 15 SWIG 파서는입력파일을구문분석하 여코드생성기과문서생성기에전달한다. 각각의모듈은특정한스크립트언어를위 한인터페이스와생성된인터페이스를설 명하는문서를생성한다. 3. 가상기계를위한네이티브인터 페이스정의언어 가상기계환경에서실행되는프로그램은 플랫폼독립적인장점을갖는다. 그러나가 상기계에서제공하지않는플랫폼에의존 적인기능을사용하는것이불가능하다. 따 라서가상기계환경에서는일반적으로플 랫폼의존적인기능을사용하기위해네이 티브인터페이스를제공한다. ( 그림 5) 는 가상기계의네이티브인터페이스를그림으 로도식화한것이다. ( 그림 5) 가상기계의네이티브인터페이스 네이티브인터페이스를사용하기위해서 는가상기계환경에네이티브함수에대한 추가적인정보를내부표현의형태로제공 해야한다. 본논문에서는네이티브함수를위한추 가적인정보를표현하는네이티브함수테 이블과함수원형파일을자동적으로생성 하기위해네이티브함수에대한정보를 기술할수있는네이티브인터페이스정의 언어를설계하고컴파일러를구현한다. 네이티브인터페이스정의언어는네이 티브함수를위한테이블과구현하고자하 는네이티브함수에대한원형을용이하게 생성하기위한인터페이스정의언어이다. 일반적인인터페이스정의언어와비슷하 게함수집합에대한정의만을허락하며 구현부는포함할수없다. 새로운언어를 정의하기위해서는그언어에대한문법과 컴파일러가필요하다. 3.1 네이티브인터페이스정의언어 의역할 가상기계에네이티브함수로구현된기 능을추가하기위해서는함수에대한정보 를제공하는테이블과실제구현부가필요 하다. 네이티브함수에대한정보는사전에네 이티브함수테이블과함수원형파일을 생성하여가상기계환경에제공될수있다. 그러나네이티브함수테이블과함수원형 파일을가상기계개발자가직접작성할경 우문제가발생할수있다. 첫째로개발과정에서개발자가처리해 야할작업량이늘어나기때문에오류수 정이어렵다. 이진수로표현되는정보를저 장하는네이티브함수테이블과함수원형 파일을정해진규약에맞게실수없이직 접작성하는것은많은노력이필요하다. 두번째는네이티브함수테이블과함수 원형파일사이의일관성문제이다. 네이티 브함수테이블과함수원형파일의정보 는서로밀접한관계를가지고있고, 함수 이름등과같은특정정보는항상일치하 도록구성해야한다. 각각의개발자가파일 을직접수정하면서로다른파일에대한 일관성을유지하는데어려움이있다. 네이티브함수테이블은함수인덱스, 이

16 프로그래밍언어논문지제21권제1 호(2007. 4) 진수로표현되는디스크립터등의정보를 가지고있다. 또한, 테이블은정해진구조 에대하여유연하지않기때문에약간의 오차도허용하지않는다. 따라서네이티브 함수의수가증가할수록오류없는테이블 을직접작성하는것은쉽지않은작업이다. 네이티브인터페이스정의언어를도입 하면언급한문제점을쉽게해결할수있 다. 개발자는쉽고명확한문법으로정의된 네이티브인터페이스정의언어로네이티 브함수정보를소스파일로기술할수있 다. 네이티브함수테이블과함수원형파 일은소스파일로부터자동적으로생성된 다. 따라서개발자는이진수로구성된데이 터의작성과같은복잡한문제점을고려할 필요가없고네이티브함수테이블과함수 원형파일이일관성있는정보를유지한 형태로생성된다. 또한, 가상기계개발과 정을단순화하여프로그램에대한오류를 쉽게수정하고, 오류자체를줄일수있다. 3.2 네이티브인터페이스정의언어 문법 기존의인터페이스정의언어는가상기 계에대한고려가없기때문에가상기계에 그대로적용하기어려운측면이있고문법 이복잡하여컴파일러를구현하기힘들다. 특히, 임베디드가상기계는제한된자원을 가진장치에서사용되기때문에간결한인 터페이스정의언어가필요하다. 본논문에서는네이티브인터페이스를 위한내부정보를최대한간결한형태로 기술할수있도록반환값, 매개변수등최 소한의정보만을기술할수있는언어를 정의한다. 이와같은설계목표는부수적으 로프로그래머가새로운언어를익히는부 담을줄이는효과를얻을수있다. ( 그림 6) 은네이티브인터페이스정의언어의문법 을 EBNF(Extended Backus-Naur Form) 의형태로표기한것이다. <NIDL> ::= { <ninterface_dcl> } <ninterface_dcl> ::=.ninterface <modifiers> <ninterface_name>.bgn <ninterface_body>.end <ninterface_body> ::= <method_dcl> { <method_dcl> } <method_dcl> ::=.method <modifiers> <type_specifier> <method_name> ( [<formal_param>] ) <formal_param> ::= <type_specifier> <formal_param_name> {, <type_specifier> <formal_param_name> } <ninterface_name> ::= $identifier <method_name> ::= $identifier <formal_param_name> ::= $identifier <modifiers> ::= public private static terminal guarded interfacce concept <type_specifier> ::= byte integer long float double short char reference boolean void ( 그림 6) 네이티브인터페이스정의언어문법 (EBNF) 네이티브인터페이스정의언어는인터 페이스단위로구성되어있다. 따라서프로 그램은지정어.ninterface 를통해인터페 이스를선언하는것으로시작된다. 하나의 인터페이스안에는.method 지정어를사용 하여다수의함수를정의할수있으며, 함 수정의시반환값, 매개변수등의함수에 대한정보를명시할수있도록설계한다. 또한, 접근수정자와타입정보는가상기계 에서제공하는종류와완전히일치시킨다. 설계된문법에따라네이티브인터페이스 정의언어로작성하는소스파일은함수의 원형만을정의할수있으며, 구현부는작성 할수없다.

가상기계를위한네이티브인터페이스정의언어 17 3.3 네이티브인터페이스정의언어 컴파일러 네이티브인터페이스정의언어컴파일 러는일반적인컴파일러와같이어휘분석 기, 구문분석기, 생성기로구성되어있다. ( 그림 7) 은네이티브인터페이스정의언어 컴파일러를그림으로도식화한것이다. ( 그림 7) 네이티브인터페이스정의언어컴파일러 어휘분석기는소스프로그램을읽어들 여일련의토큰을생성한다. 구문분석기는 토큰을입력받아소스프로그램의에러를 체크하고올바른문장에대해서구문구조 를만든다. 구문구조는추상구문트리의 형태로생성되며, 생성기는트리를운행하 여네이티브함수테이블, 네이티브함수 원형파일을생성한다. 파서의출력인추상구문트리는 ( 그림 6) 의문법으로작성한프로그램의의미있 는정보만을표현하는트리로써, ( 그림 8) 과같은형태로설계한다. 생성기는네이티브인터페이스컴파일러 의출력인네이티브함수테이블, 네이티브 함수에대한원형파일을생성하며테이블 정보는 ( 표 1) 과같이네이티브함수에대 한인덱스, 이름, 디스크립터와링크로구 성된다. 네이티브함수원형파일은네이티브 함수구현시필요한네이티브함수에대한 원형을저장한다. ( 그림 9) 는네이티브함 수원형을위한헤더파일의구조를나타 낸것이다. ( 그림 8) 네이티브인터페이스정의언어의추상 구문트리 #ifndef NATIVE_FUNCTION_H #define NATIVE_FUNCTION_H extern C { #include NativeInterface.h Native Function Prototypes void ENF_<Interface_Name>_<Function_Name> (pevm pvm, int *error) } #endif // NATIVE_FUNCTION_H ( 그림 9) 네이티브함수원형을위한헤더 Descriptor 파일의구조 ( 표 1) 네이티브함수테이블 항목설명 Index Name Link Flag Length Attribute 네이티브함수의인덱스 네이티브함수의이름 필드와함수를구분 속성의길이 네이티브함수의매개변수및반환값 네이티브함수의구현부분과연결

18 프로그래밍언어논문지제21권제1 호(2007. 4) 헤더파일은 NativeInterface.h 파일을 포함하고있다. 함수이름은가독성을높이 고함수이름충돌을피하기위해네이티 브함수임을나타내는문자 ENF_ 와함수 를기능별로구분하는모듈이름, 해당함 수가처리하는작업을명시적으로나타내 는명칭으로구성된다. 매개변수는가상기 계의자료구조와오류정보를전달하기 위한변수로구성되어있다. 네이티브함수 구현부는이파일을내부적으로포함하여 작성된다. 4. 실험및결과 본논문에서제안한네이티브인터페이 스정의언어는컴파일러의출력인네이티 브함수테이블과함수원형파일을임베 디드시스템을위한가상기계인 EVM에 적용하여검증한다. 정의언어컴파일러는 일러인 네이티브인터페이스 ANSI-C 호환컴파 Microsoft Visual C++ 2005를사용 하여구현하였다. 파서는차후문법의수정 혹은기능추가를고려하여확장성이뛰어 난 LR(Left to right scanning / Right parse) 구문분석기의형태로구현하였으 며, LR 구문분석기구현시필요한파싱테 이블은동국 -PGS(Dongguk-Parser Generating System) 를통해생성하였다. 실험은펜티 엄4 2.0 프로세서와 1기가의메모리를갖는 IBM 호환컴퓨터와운영체제로서 Microsoft Windows XP 를사용하였다. 가상기계에정수, 실수, 문자등의입 출력기능을추가하기위해네이티브인터 페이스정의언어를사용하여표준입 출 력함수의정보를 ( 그림 10) 과같이기술하 였다..interface public StdIO.bgn.method public void PrintInt(integer i).method public void PrintFloat(float f).method public void PrintChar(char c).method public void PrintLn().method public integer ReadInt().method public float ReadFloat().method public char ReadChar().end ( 그림 10) 표준입 출력함수에대한 인터페이스정의파일 #ifndef NATIVE_FUNCTION_H #define NATIVE_FUNCTION_H extern C { #include ExeEngine/NativeInterface/NativeInterface.h enum nativefunctionindex { ienf_startindex = 0xFFFEFFFF, ienf_stdio_printint, ienf_stdio_printfloat, ienf_stdio_printchar, ienf_stdio_println, ienf_stdio_readint, ienf_stdio_readfloat, ienf_stdio_readchar }; NITable nativetable = { 7, {{ienf_stdio_printint, ENF_StdIO_PrintInt, {0x0000, 4, {0x0000, 0x5300}}, ENF_StdIO_PrintInt}, {ienf_stdio_printfloat, ENF_StdIO_PrintFloat, {0x0000, 4, {0x0000, 0x5400}}, ENF_StdIO_PrintFloat}, {ienf_stdio_printchar, ENF_StdIO_PrintChar, {0x0000, 4, {0x0000, 0x5100}}, ENF_StdIO_PrintChar}, {ienf_stdio_println, ENF_StdIO_PrintLn, {0x0000, 2, {0x0000}}, ENF_StdIO_PrintLn}, {ienf_stdio_readint, ENF_StdIO_ReadInt, {0x0000, 2, {0x5300}}, ENF_StdIO_ReadInt}, {ienf_stdio_readfloat, ENF_StdIO_ReadFloat, {0x0000, 2, {0x5400}}, ENF_StdIO_ReadFloat}, {ienf_stdio_readchar, ENF_StdIO_ReadChar, {0x0000, 2, {0x5100}}, ENF_StdIO_ReadChar} }}; } #endif // NATIVE_INTERFACE_TBL ( 그림 11) 네이티브함수테이블파일 네이티브인터페이스정의언어컴파일 러를사용하여작성한소스코드를컴파일 한결과네이티브함수테이블과네이티브 함수원형파일이생성되었다.

가상기계를위한네이티브인터페이스정의언어 19 #ifndef NATIVE_FUNCTION_H #define NATIVE_FUNCTION_H extern C { #include ExeEngine/NativeInterface/NativeInterface.h void ENF_StdIO_PrintInt(pEVM pvm, int *error); void ENF_StdIO_PrintFloat(pEVM pvm, int *error); void ENF_StdIO_PrintChar(pEVM pvm, int *error); void ENF_StdIO_PrintLn(pEVM pvm, int *error); void ENF_StdIO_ReadInt(pEVM pvm, int *error); void ENF_StdIO_ReadFloat(pEVM pvm, int *error); void ENF_StdIO_ReadChar(pEVM pvm, int *error); } #endif // NATIVE_FUNCTION_H ( 그림 12) 네이티브함수원형파일 네이티브함수테이블에서는열거형을 사용하여인덱스를결정하게되며, 내부적 으로복잡한필드구성을갖는테이블자 료구조를자동적으로생성한다. 네이티브인터페이스정의언어컴파일 러의출력으로생성된네이티브함수테이 블과함수원형파일을검증하기위해 EVM 에적용하고다양한프로그램을통해 네이티브함수의작동을검증하였다. 본논 문에는시스템의존적인기능인표준입 출력에관한함수를사용하는계산기프로 그램을수록하였다. 작성된프로그램은사 칙연산과나머지연산등다양한연산기 능을지원한다. 프로그램및실행결과는 ( 그림 13), ( 그림 14) 와같다. 계산기프로그램은표준입력을통해수 행할연산과피연산자를결정하고, 표준출 력으로결과를내보낸다. 5. 결론및향후연구 가상기계환경에서실행되는프로그램은 플랫폼독립적인장점이있지만, 가상기계.class public CalculatingMachine.bgn.method public void main().bgn.locals (integer choice, operand1, operand2) $$3: ldc.i 1 calli ENF_StdIO_ReadInt str.i choice ldl.i choice ldc.i 5 eq.i brt $$1 ldc.i 1 eq.i brf $$2 add.i.end.end ( 그림 13) 계산기프로그램 >>>>>> Starting program <<<<<< 1 Addition 2 Subtraction 3 Multiplication 4 Division 5 Modulation 6 Quit Select Menu 4 Operand 2048 Operand 256 Result is 8 ( 그림 14) 계산기프로그램실행결과 에서제공하지않는플랫폼의존적인기능 은사용할수없다. 이와같은문제를해결 하기위해서가상기계환경에서는일반적 으로네이티브인터페이스를제공한다. 네 이티브인터페이스를사용하면, 가상기계 에서네이티브코드로작성된프로그램을 사용할수있다. 네이티브코드로작성된 프로그램혹은함수는가상기계에네이티 브함수를위한정보를제공해야한다. 네이 티브함수에대한정보는일반적으로네이 티브함수테이블과함수원형파일을통 해제공된다.

20 프로그래밍언어논문지제21권제1 호(2007. 4) 본논문에서는네이티브함수테이블과 함수원형파일을자동적으로생성하기위 해네이티브인터페이스정의언어와언어 로부터네이티브인터페이스사용에필요 한정보를생성하는컴파일러를설계및 구현하였다. 네이티브인터페이스정의언 어는기존 EVM 환경과의호환성을고려 하고, 명시적으로함수정보를작성할수 있도록설계하였다. 컴파일러의결과인네 이티브함수테이블과함수원형파일은 임베디드시스템을위한가상기계인 EVM 에적용하여검증하였고, 예제프로그램을 작성하여정확한동작여부를확인하였다. 제안된언어와컴파일러의설계및구현을 통해가상기계개발자에게네이티브함수 테이블과함수원형파일생성의편의성을 제공할수있었다. 또한, 네이티브함수테이 블과함수원형파일을가상기계개발자가 직접작성할경우발생하는문제점을해결 하여개발과정을단순화하고각각의파일 에대한정보의일관성을유지할수있었다. 향후에는네이티브함수를사용하는가 상기계코드를네이티브함수에대한정보 와독립적으로어셈블할수있는방법에 대한연구가필요하다. 추가적으로, 네이티 브함수에대한의사코드를추가하여어 셈블러와네이티브정의언어컴파일러를통 합하는방안에대한연구도고려할수있다. 참고문헌 [1] 오세만, 이양선, 고광만, 임베디드시스 템을위한가상기계의설계및구현, 멀티미디어학회논문지, 제 8 권, 제 9 호, pp.1282-1291, 2005. [2] 손윤식, 오세만, 실행파일포맷생성 기의설계및구현, 한국정보처리학회 추계학술발표대회논문집, 제 11 권, 제 2 호, pp.623-626, 2004. [3] 전병준, 이창환, 오세만, 퍼베이시브 컴퓨팅을위한가상기계의어셈블러, 한국정보처리학회추계학술발표대회논 문집, 제13 권, 제 2 호, pp.589-592, 2006. [4] 최유리, 이창환, 오세만, 퍼베이시브 컴퓨팅을위한가상기계의디스어셈블 러, 한국정보처리학회추계학술발표대 회논문집, 제 13 권, 제 2 호, pp.585-588, 2006. [5] 박지우, 이창환, 오세만, 퍼베이시브 컴퓨팅을위한가상기계의실행엔진, 한국정보처리학회추계학술발표대회논 문집, 제13 권, 제 2 호, pp.581-584, 2006. [6] Tim Lindholm and Frank Yellin, The Java Virtual Machine Specification, 2nd Edition, Addison Wesley, 1999. [7] MSIL Instruction Set Specification, Microsoft Corporation, 2000. [8] SIL Specification, 동국대학교프로그래 밍언어연구실, 2006. [9] SAF Specification, 동국대학교프로그래 밍언어연구실, 2006. [10] 정한종, 임베디드가상기계를위한실 행파일포맷, 동국대학교석사학위논 문, 2004. [11] EFF Specification, 동국대학교프로그 래밍언어연구실, 2006. [12] Sheng Liang, The Java Native Interface: Programmer's Guide and Specification, Addison Wesley, 1999. [13] Rob Gordon, Essential JNI: Java Native Interface, Prentice Hall, 1998. [14] Mary Campione, Kathy Walrath and Alison Huml, The Java Tutorial Continued: The Rest of the JDK,

가상기계를위한네이티브인터페이스정의언어 21 Addison Wesley, 1998. [15] David M. Beazley, SWIG Users Manual, http://www.swig.org/doc1.1/html/cont ents.html, 1997. 박지우 1999 년~2004 년동국대학교전자 공학과( 학사) 2006 년~ 현재동국대학교컴퓨터 공학과( 석사과정) 관심분야 : 프로그래밍언어, 컴파일러, 가상기계 이창환 1994 년~1998 년동국대학교컴퓨터 공학과( 학사) 1998 년~2000 년동국대학교컴퓨터 공학과( 석사) 2000 년~2003 년동국대학교컴퓨터공학과( 박사) 2006 년~ 현재 ( 주) 링크젠책임연구원 2007 년~ 현재동국대학교산업기술연구원겸임교수 관심분야 : 프로그래밍언어, 컴파일러, 내장형시스템 오세만 1993 년~1999 년동국대학교컴퓨터 공학과대학원학과장 2001 년~2003년한국정보과학회 프로그래밍언어연구회위원장 2004 년~2005년한국정보처리학회게임연구회위원장 1985 년~ 현재동국대학교컴퓨터공학과교수 관심분야 : 프로그래밍언어, 컴파일러, 모바일컴퓨팅