28 research outputs found

    Implementation of SOAP Client in nML Programming Environment

    No full text
    웹 서비스에 대한 구현이 많이 늘고 있다. 웹 서비스는 각 프로그래밍 언어에서 XML를 이용해서 원격 호출을 한다. 이때 사용하는 대표적인 프로토콜이 SOAP으로써 본 논문에서는 nML 프로그래밍 환경에서 SOAP 클라이언트 구현을 제시한다. nML은 한국과학기술원 ROPAS에서 만든 SML과 OCaml의 한국형 함수형 언어이다. nML에서의 soaptype 타입으로 SOAP 값을 정의한다. SOAP은 XML Schema에 의해서 객체에 대한 인코딩이 정의된다. 즉 XML Schema가 SOAP 값의 유효성을 판단한다. 본 논문은 XML Schema의 엘리먼트와 타입에 대한 정의로써 element와 typeinfo 타입을 정의한다. 그리고 상호호환성 테스트를 통하여 안전하게 다른 언어와 대응됨을 보인다

    Profile Guided Selection of ARM and Thumb Instructions at Function Level

    No full text
    임베디드 시스템에서는 메모리와 에너지의 소비가 중요한 관심사 중 하나이다. 메모리와 에너지의 소비를 줄이기 위해 32비트의 ARM 프로세서는 16비트 Thumb 명령어 세트를 지원한다. 주어진 응용프로그램에 대해 Thumb 코드는 일반적으로 ARM 코드보다 코드 사이즈가 작지만, 실행속도는 느리다. 코드 사이즈가 작으면서도 실행속도가 느리지 않은 코드를 생성하기 위한 방법으로 Krishnaswarmy는 응용프로그램에 대한 프로파일 정보를 이용하여 모듈 수준에서 ARM과 Thumb 명령어 세트를 선택하는 알고리즘을 고안했다. 이 알고리즘은 작은 성능 손실로도 상당한 코드 사이즈 감소 효과를 갖지만, 명령어 세트가 모듈 수준에서 선택되기 때문에 Thumb 코드로 컴파일 하면 코드 사이즈를 줄일 수 있는 함수들도 ARM 코드로 컴파일 되어, 추가적인 코드 사이즈 감소의 기회를 잃게 되는 문제점을 갖고 있다.본 논문에서는 ARM과 Thumb 코드가 혼합된 코드 사이즈의 감소를 이끌어내기 위해 함수 수준에서 프로파일(profile) 정보를 이용한 명령어 세트 선택 알고리즘을 제안했다. 우리는 성능에서의 페널티는 없이 2.7%의 코드 사이즈를 추가로 줄일 수 있었다

    Compiling Lazy Functional Programs to Java on the basis of Spineless Tagless G-Machine with Eval-Apply Model

    No full text
    최근에 지연 계산 함수형 언어를 자바 프로그램으로 변환함으로써 지연 계산 함수형 언어 프로그램에 대해 코드 이동성을 제공하려는 연구가 있었다. 이러한 연구들은 자바와 지연 계산형 함수형 언어의 추상 기계가 가지는 구조적 유사성에 바탕을 두고 있다. 지연 계산 함수형 언어에 대한 추상 기계인 STGM(Spineless Tagless G-Machine)과 자바 언어에 대한 추상 기계인 JVM(Java Virtual Machine)은 기억장소 재활용 체계와 스택 기계 구조를 가진다는 점에서 공통된 특징을 가지고 있다. 그러나 현재까지의 지연 계산 함수형 언어로부터 자바로의 변환 구조는 이와 같은 추상 기계 구조상의 공통점을 충분히 이용하지 못하였다.본 논문에서는 STGM의 계산 모델을 eval-apply 모델로 새로이 정의함으로써 STGM과 JVM의 공통점을 충분히 이용하는 새로운 변환 구도를 제안한다. 새로이 제안된 변환 구도에서는 자바 스택(Java Virtual Machine Stack)을 사용하여 함수 계산을 수행하도록 함으로써 스택 시뮬레이션으로 인해 나타나는 자바에서의 배열 접근 부담을 제거하였다.본 논문의 변환 구도에 의해 자바로 변환된 벤치마크 프로그램들은 기존의 변환 구도에 의해 변환된 경우보다 JDK 1.3에서 빠르게 동작한다

    Applying Database to Trace Analysis of Obfuscated Binaries

    No full text
    난독화된 바이너리는 구조가 복잡하게 변형되어 정적으로 분석하기 어려울 때가 많다. 이때 난독화된 바이너리도 원본 바이너리와 실행 결과는 같아야 한다는 점을 이용하여 동적으로 실행 트레이스를 생성해 분석하기도 한다. 난독화된 바이너리는 실행 결과에 영향을 주지 않는 명령을 다수 포함하고 있어 비대한 트레이스를 얻게 되며, 이를 효과적으로 처리할 수 있는 기법이 필요하다. 이 논문에서는 데이터베이스를 이용해 난독화된 바이너리의 트레이스를 처리하는 도구를 설계하고 구현하여 분석 작업을 수행한 결과를 소개한다. 데이터베이스를 이용해 안정적인 분석 도구를 편리하게 구현할 수 있었다

    Improvement of Iterative Algorithm for Live Variable Analysis based on Computation Reordering

    No full text
    LVA를 수행하는 알고리즘은 반복적 정보흐름분석(Iterative Data Flow Analysis - DFA) 프레임워크에 따라 프로그램 전체를 반복적으로 스캔하면서 진행되어진다. Zephyr[1] 컴파일러의 경우 이와 같은 반복적 알고리즘으로 LVA를 수행하는 시간이 전체 컴파일 시간에서 약 7%를 차지하고 있다.기존 LVA 알고리즘은 여러 가지로 개선할 점들이 있다. LVA를 수행하는 기존의 반복적 알고리즘은 알고리즘의 특성상 방문하지 않아도 되는 basic block들에 대한 방문이 잦고, 살아있는 변수들의 집합을 점차적으로 증가해 가면서 구하는 특성상 큰 변수들의 집합에 대한 연산을 계속 하게 된다.우리는 기존의 알고리즘과 달리 사용된 변수들(USE set)에 대해 Control Flow Graph(CFG)에서 거슬러 올라가면서 LVA를 수행하는 반복적인 알고리즘의 개선안을 제안하고자 한다. 이는 기존의 알고리즘과 같은 결과를 내면서 더 빠른 알고리즘이다. DFA에서의 flow equation을 적용하는 순서를 바꿈으로써 많은 중복 계산을 줄일 수 있다. 이러한 방법으로 인해 basic block을 방문해야만 하는 횟수를 줄이면서 전체 수행 시간을 단축시킨다. 간단한 추가 구현만으로 Zephyr 컴파일러에서의 실험 결과에서 LVA만을 수행하는 시간에서 기존의 알고리즘보다 36.4% 짧은 시간을 사용하였고, 이는 전체 컴파일 시간을 2.6% 줄이는 효과를 가져왔다
    corecore