KR101244069B1 - 프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치 - Google Patents

프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치 Download PDF

Info

Publication number
KR101244069B1
KR101244069B1 KR1020077024128A KR20077024128A KR101244069B1 KR 101244069 B1 KR101244069 B1 KR 101244069B1 KR 1020077024128 A KR1020077024128 A KR 1020077024128A KR 20077024128 A KR20077024128 A KR 20077024128A KR 101244069 B1 KR101244069 B1 KR 101244069B1
Authority
KR
South Korea
Prior art keywords
target
subject
code
counterpart
instructions
Prior art date
Application number
KR1020077024128A
Other languages
English (en)
Other versions
KR20070121785A (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
Priority claimed from GB0507943A external-priority patent/GB2425372B/en
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20070121785A publication Critical patent/KR20070121785A/ko
Application granted granted Critical
Publication of KR101244069B1 publication Critical patent/KR101244069B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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
    • 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/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling

Abstract

정밀한 예외 핸들링(precise exception handling)은 정확한 프로그램 카운터 및 서브젝트 프로세서의 레지스터 값들을 포함하는 정밀한 서브젝트 상태에 의존한다. 서브젝트 코드(17)는 타겟 프로세서(13)에 의해 실행가능한 타겟 코드(13)로 변환된다. 생성된 타겟 코드(17)는 폴트 취약(fault-vulnerable) 코드 명령들과 관련된 카운터파트(counterpart) 타겟 명령들(214)을 포함한다. 또한, 카운터파트 타겟 코드 명령(214) 각각은 복원 정보(195)와 관계된다. 예외(예를 들어, 폴트(fault))가 발생하면, 복원 정보(195)는 정밀한 서브젝트 상태를 복원하기 위해, 특히 공통 케이스(common-case) 타겟 코드(21)를 생성하기 위한 최적화(optimization)를 고려함으로써, 검색되고 이용된다. 이 때, 정밀한 서브젝트 상태는 예외를 정밀하게 핸들링하기 위해 이용된다.
정밀한 예외 핸들링(precise exception handling), 서브젝트 상태(subject state), 복원 정보(recovery information), 최적화(optimization)

Description

프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및 장치 {METHOD AND APPARATUS FOR PRECISE HANDLING OF EXCEPTIONS DURING PROGRAM CODE CONVERSION}
본 발명은 일반적으로 컴퓨터 및 컴퓨터 소프트웨어 분야에 관한 것으로, 더욱 상세하게는, 예를 들어, 프로그램 코드를 변환하는 코드 변환기, 에뮬레이터 및 액셀러레이터에 유용한 프로그램 코드 변환 방법 및 장치에 관한 것이다.
임베디드(embedded) CPU들 및 비임베디드(non-embedded)의 CPU들에 있어서, 소프트웨어의 큰 부분이 성능을 위해 "가속화(accelerated)"되거나 더 나은 가격/성능 이득을 제공할 수 있는 수많은 고성능의 프로세서들로 "해석(translated)"될 수 있으며, 관련 소프트웨어에 명백하게 억세스할 수 있는 널리 알려진 ISAs(Instruction Set Architectures)이 존재한다. 또한, 그 ISA에 때맞추어 고정되며, 그 성능이나 시장 접근의 면에서 개선될 수 없는 유력 CPU 아키텍쳐(dominant CPU architectures)도 또한 발견된다. 그러한 CPU들은 소프트 웨어 기원 프로세서 코-아키텍쳐(Software-oriented processor co-architecture)로부터 이익을 얻을 것이다.
PCT 출원 WO00/22521은 가속(acceleration), 해석 (translation), 및 코-아키텍쳐(co-architecture) 성능을 용이하게 하는 프로그램 코드 변환 방법 및 장치 를 개시한다.
프로그램 코드 변환 수행은 서브젝트 프로세서(subject processor) 상에서 서브젝트 프로그램(subject program)의 본질적 실행(native execution)과 비교하여, 변환 프로세스에서의 오버헤드(overhead)를 가져온다. 예외 핸들링에 관하여 특별한 어려움이 발생한다.
예외(exception)란 프로그램 상에서 제어에 대한 일반적인 흐름을 변화시키는 상태이다. 예외는 시스템 내의 도처에 발생하는 상태를 나타내며, 프로세서의 주의를 요구하고, 일반적으로 프로세싱이 계속될 수 있기 전에 핸들링될 필요가 있다. 예외들은 인터럽트(interrupts), 폴트(faults), 트랩(traps) 또는 중단(aborts)과 같은 다양한 다른 형태로 나누어질 수 있다. 용어(terminology)는 서로 다른 아키텍쳐들 사이에서 변하고, 예외들의 특별한 형태 또는 카테고리들은 특별한 아키텍쳐들에 유일할 수 있다.
예외는 하드웨어 또는 소프트웨어에 의해 생성될 수("일어날 수 (raised)") 있다. 하드웨어 예외들은 리셋들(resets), 인터럽트들(interrupts) 또는 기억 관리 장치(memory management unit)로부터의 신호들들과 같은 신호들을 포함한다. 예를 들면, 예외들은 0에 의해 나눔(divide-by-zero)과 같은 산술적인 오류들, 오버플로우(overflow) 또는 언더플로우(underflow), 또는 인증(privileged), 보류(reserved), 트랩(trap) 또는 정의되지 않는 명령들과 같은 에러들을 디코딩하는 명령들을 위한 부동 소수점 처리장치(floating-point unit) 또는 산술 로직부(arithmetic logic unit)에 의해 생성될 수 있다.
소프트웨어 예외들은 개별적으로 다양한 소프트웨어 프로그램들에 걸쳐서 변화되고 프로그램의 정규 동작(behaviour)을 변경시키는 어떤 종류의 에러 체킹에 적용될 수 있다. 실 예를 들면, 서브젝트 코드에서 명령은 하나의 레지스터 값이 두번째 레지스터 값보다 크다면 예외가 리포트되도록 유도한다.
예외 핸들러(exception handler)는 프로그램이 수행되는 동안 예외가 발생할 때 요청되는 특별한 코드이다. 서브젝트 프로그램이 주어진 예외에 대한 핸들러를 제공하지 않는다면, 디폴트 시스템 예외 핸들러(default system exception handler)가 호출될 것이며, 일반적으로 프로그램 수행 실패 및 오류 표시의 복귀로 끝마치게 된다.
예외 신호들은 많은 오퍼레이팅 시스템들 상에서 예외들을 야기하는 일반적인 메커니즘이다. 많은 오퍼레이팅 시스템들, 특히 유닉스(Unix)와 같은 시스템들에 의해서 고수되고 있는 POSIX 표준은 예외 신호들이 많은 시스템들에 걸쳐 전반적으로 유사하도록 이러한 메커니즘이 거동하여야 하는 방법을 특정한다. 예외들을 트리거(trigger)하는 가장 일반적인 경우들은 프로그램에 의해 구현되는 과정이 (i)매핑되지 않은 메모리 영역에 억세스(access)해 보거나 (ii)정확한 퍼미션(permission)들을 갖지 않는 메모리 영역을 조작해 보는 것이다. 예외 신호들을 트리거시키는 다른 일반적인 경우들은 (iii)또 다른 프로세스로부터 보내진 신호의 수신, (iv)프로세스가 실행을 위한 특권 레벨(privilege level)을 갖지 않는다는 명령의 프로세스에 의한 실행, 또는 하드웨어에서 I/O 경우이다.
본원발명은 특히 예외들의 정밀한 핸들링에 관한 것이며, 또한, 종종 정밀한 예외들로 언급된다. 정밀한 예외는 서브젝트 코드 명령들 사이의 바운더리 상에 리포트된다. 정밀한 예외가 리포트될 때, 모든 이전 서브젝트 명령들의 효과들은 완전해지고, 예외는 실행되지 않았던 서브젝트 코드의 첫번째 명령을 지시하고, 서브젝트 명령 또는 임의의 후속 명령으로부터의 이미 발생된 효과는 존재하지 않는다.
이진 변환 콘텍스트(context)에서, 타겟 명령이 타겟 프로세서 상에서 수행되어, 리포트할 예외가 야기되면, 타겟 명령은 일반적으로 서브젝트 코드로 기록한 예외 핸들러로 정밀한 예외를 리포트하기 위한 상태들을 이행하지 못할 것이라는 점은 명백하다. 첫째, 서브젝트 코드가 기록된 서브젝트 프로세서의 명령 셋(set) 타겟 코드가 실행되는 타겟 프로세서 사이의 차이점 때문에, 둘째, 프로그램 코드 변환시 일반적으로 발생하는 최적화(optimisations) 때문에, 명령들은 타겟 프로세서 상에서 거의 항상 서브젝트 코드의 대응하는 블럭에서의 명령들의 순서와 다른 순서로 수행된다.
알려진 접근 중 하나는, 해석되거나 실행되고 있는 코드의 섹션으로 진입 시에 적용되는 상태로 가상 서브젝트 장치를 리턴시키는, 즉 서브젝트 장치를 해석 또는 실행될 서브젝트 코드 명령의 현재 블록으로 진입하는 시점에 효력을 발휘하는 상태로 리턴시키는 방식으로, "복원 포인트(recovery points)"를 이용하는 것이다.
US 5832205(Kelly et al)는 게이티드 저장 버퍼(gated store buffer)를 이용하는, 서브젝트 코드의 각 섹션의 말단에 "오피셜(official)" 가상 서브젝트 레지스터의 셋으로 카피(copy)된 "워킹(working)" 레지스터의 셋을 이용하는 에뮬레이 터(emulator)를 개시한다. 예외가 발생하면, 워킹 레지스터 및 가상 서브젝트 장치의 상태만이 서브젝트 코드의 해당 섹션으로의 진입시점에, 오피셜 레지스터로부터 복원되도록 영향을 미친다. 하지만, "워킹" 및 "오피셜" 레지스터의 이용은 타겟 프로세서에서 에뮬레이션 과정의 오버헤드를 상당히 추가한다.
또 다른 예로서, 공개 PCT 출원 WO-A-00/65440은 프로그램 코드 변환시 과거의 복원 포인트들을 제공하기 위해 A 및 B 레지스터 셋 사이의 상호교환을 개시한다.
공개 PCT 출원 WO-A-2005/006106은 서브젝트 프로그램에서 복수 타입 명령들 각각에 대한 항목의 다른 레벨들을 리코딩(recording)함으로써, 가변적인 정밀한 예외 핸들링이 적용되는 또 다른 억세스을 개시한다. 즉, 리코딩될 정보의 양 및 타입은 서브젝트 명령의 특성에 따라 변한다. 적당하게, 각 서브젝트 명령은 네 가지 타입 중 하나로 결정되고, 대응하는 항목의 레벨이 리코딩된다. 제1 레벨은 상태를 전혀 리코딩하지 않는다. 제2 레벨은 마지막 기지의 스택 프레임(Known stack frame)을 이용하여 정밀하지 않은(부정확한) 상태 정보를 제공한다. 제3 레벨은 해석시 임시 요약 레지스터(temporary abstract resister)에서 예외를 핸들링하기 위해 검색되는 정밀한 서브젝트 프로그램 카운터를 리코딩한다. 제4 레벨은 예외를 유발하는 타겟 명령(구체적으로 예외를 트리거하는 트랩 타입의 명령)에 바로 선행하는 정확한 상태를 수정하기 위해, 추가적인 타겟 코드를 생성하고 플랜트(plant)한다(즉, 서브젝트 프로그램 카운터를 리코딩하고 어떤 나태하거나 또는 펜딩하고 있는 서브젝트 레지스터 값들을 수정한다). 첨부된 청구항의 선 특성적인(pre- characteristic) 부분들은 이 서류에 기초한다.
이러한 예전 접근 방식들은 기 정의된 복원 순간으로 롤백(roll back)함으로써 또는 그러한 순간에 앞서 서브젝트 상태를 수정함으로써, 예외가 발생하는 시점의 서브젝트 프로세스 상태가 정확하게 결정되도록 한다. 하지만, 종래기술에서 정밀한 예외 핸들링를 위한 정밀한 상태를 획득하는 것은 프로그램 코드 변환 프로세스 상에서 여전히 제한적이고, 상당한 오버헤드 및/또는 특수한 하드웨어 서포트를 수반한다.
본 발명의 목적은 프로그램 코드 변환 착수시 성능을 개선함에 있다.
본 발명의 바람직한 목적은 프로그램 코드 변환시, 특히, 다이나믹 이진(binary) 변환시 예외 핸들링과 관련된 오버헤드를 감소함에 있다.
본 발명의 실시 예들에 따른 또 다른 바람직한 목적은 정밀한 예외 핸들링을 위해 정밀한 서브젝트 상태를 제공하는 것과 관련된 오버헤드를 감소함에 있다.
본 발명에 따르면, 첨부된 청구항들에서 설명되는 바와 같은 장치 및 방법이 제공된다. 본 발명의 바람직한 특징들은 종속항들 및 후술하는 설명으로부터 명백해질 것이다.
다음은 본 발명의 실시 예들에 따라 실현가능한 장점들 및 여러 가지 측면들의 요약이다. 그것은 뒤따르는 상세한 설계 논의를 더욱 빠르게 이해하도록 기술 분야의 당업자를 돕기 위한 소개로서 제공되고, 여기서 어떤 방식으로든 첨부된 청구항의 범위를 제한하도록 의도되지는 않는다.
특히, 발명자들은, 특히 서브젝트 프로그램 코드의 타겟코드로의 다이나믹 이진 변환을 제공하는 런타임(run-time) 변환기와 관련하여 유용한, 프로그램 코드 변환 촉진에 관한 방법들을 개발했다.
본 발명의 일 실시 예에 따르면, 서브젝트 코드로부터 타겟 코드로의 프로그램 코드 변환의 컨텍스트(context)에서 정밀하게 예외들을 핸들링하는 방법이 제공된다. 상기 방법은, 폴트 취약 서브젝트 명령으로부터 적어도 하나의 카운터파트 타겟 명령들을 포함하는 타겟 코드를 생성하는 단계를 포함한다. 각 카운터파트 타겟 코드 명령들은 복원 정보에 관련된다. 상기 타겟 코드 명령들의 실행동안 예외(예를 들어, 폴트)가 발생한 이후에 상기 복원 정보는 정밀한 대상 상태를 수정하기 위해 검색되고, 이용된다.
바람직하게는, 상기 복원 정보는 타겟 코드 생성 동안 수행되는 최적화들(optimizations)을 고려한다. 적절하게, 상기 복원 정보는 폴트 취약 서브젝트 코드 명령의 일 지점에서 서브젝트 프로세서를 나타내는 정밀한 서브젝트 상태를 수정하는 복원 루틴을 수행하는데 이용된다.
바람직하게는, 상기 방법은 상기 생성된 타겟 코드를 즉시 뒤따르는 적어도 하나의 복원 정보 아이템들을 저장하는 단계를 포함한다. 상기 복원 정보를 검색하는 단계는, 그것에 연속하는 상기 복원 정보를 위치시키기 위해 상기 타겟 코드를 스캐닝 다운(scanning down)하는 단계 및 폴팅 카운터파트 타겟 명령과 관련된 복원 정보 아이템을 검색하는 단계를 포함한다.
바람직하게는, 상기 타겟 코드 및 복원 정보는 블럭들에서 인터리빙된다.
특히 바람직한 실시 예에서, 타겟 프로그램 카운터는 상기 복원 정보를 인덱스하는데 이용된다.
본 발명의 다른 실시 예에 따르면, 서브젝트 코드로부터 타겟 코드로의 프로그램 코드 변환 하에서 예외(exception)들을 정밀하게 핸들링하는 방법이 제공된다. 서브젝트 코드에서 잠재적으로 폴트한 서브젝트 명령에 대응하는 적어도 하나의 카운터파트 타겟 명령을 포함하는 타겟 코드를 생성하는 단계 및, 상기 적어도 하나의 카운터파트 타겟 명령과 관련된 복원 정보를 저장하는 단계를 포함한다. 인터럽트 신호를 수신하면, 상기 타겟 코드 명령들의 실행은 상기 카운터파트 타겟 코드 명령들 중 하나를 만날 때까지 계속한다. 상기 카운터파트 타겟 명령에 도달하면, 상기 관련된 복원 정보는 정밀한 서브젝트 상태를 복원하기 위하여 검색되고, 이용된다.
바람직한 실시 예에서, 정밀한 예외 핸들링 방법은 정밀한 서브젝트 상태가 상기 저장된 복원 정보를 이용하여 복원가능할 때까지 예외가 발생하는 지점으로부터 계속한다. 적절하게, 타겟 코드 명령들의 실행은, 바람직하게는 계단식 타겟 프로세서 모드를 인보크하거나, 타겟 코드 인터프리터(197)를 인보크함으로써 하나씩 실행한다.
본 발명은 또한 여기서 정의된 임의의 방법을 수행하기 위해 배열된 변환기 장치로 확장된다. 또한, 본 발명은 여기서 정의된 임의의 방법을 수행하기 위한 컴퓨터에 의해 실행가능한 명령들을 기록한 컴퓨터 판독 매체로 확장된다.
상세 설명의 부분을 구성하고 포함된 첨부된 도면들에서, 바람직한 구현들을 지금 설명하고 다음과 같이 상세하게 설명된다.
도 1은 본 발명의 실시 예들에 따른 장치를 나타내는 블럭도;
도 2는 프로그램 코드 변환 동안의 실행 콘트롤의 바람직한 방법을 나타내는 개략적인 흐름도;
도 3은 프로그램 코드 변환을 뒤따르는 서브젝트 명령 및 타겟 명령 사이의 관계를 나타내는 개략도;
도 4는 본 발명의 바람직한 실시 예에 따른 프로그램 코드 변환 동안의 타겟 장치에서 예시적인 프로그램 코드 구조;
도 5는 본 발명의 바람직한 실시 예에 따른, 정밀한 예외를 위한 타겟 코드를 생성하는 방법의 개략적인 흐름도이다.
도 6은 복원 정보 및 생성된 타겟 코드를 저장하기 위한 바람직한 메카니즘을 나타내는 개략도;
도 7은 복원 정보를 획득하는 바람직한 방법의 개략도;
도 8은 본 발명의 바람직한 실시 예에서 이용된 복원 정보의 개략적 표현;
도 9는 본 발명의 또 다른 바람직한 실시 예에서 이용된 복원 정보 개략적 표현;
도 10은 인터럽트의 핸들링을 나타내기 위한 예시적인 타겟 코드 시퀀스; 그리고
도 11은 타겟 컴퓨팅 플랫폼(computing platform) 내에서 인터럽트를 핸들링 하기 위한 바람직한 실행을 나타내는 개략도이다.
후술하는 설명은 당업자가 본 발명을 제작하고 이용할 수 있도록 제공되어지고, 본 발명을 실행하는 발명자들에 의해 고안된 최상의 모드들을 설명한다. 하지만, 본 발명의 일반적인 원칙들은 개선된 프로그램 코드 변환 방법 및 장치를 제공하기 위해 여기에서 구체적으로 정의되기 때문에, 다양한 변형들은 당업자에게 자명할 것이다.
아래의 용어에서, 서브젝트 프로그램은 서브젝트 프로세서를 포함하는 서브젝트 컴퓨팅 플랫폼 상에서 실행하도록 의도된다. 타겟 프로세서를 포함하는 타겟 컴퓨팅 플랫폼은 다이나믹 프로그램 코드 변환을 수행하는 변환기를 통해, 서브젝트 프로그램을 실행하는데 이용된다. 변환기는 타겟 코드가 타겟 컴퓨팅 플랫폼에서 실행가능하도록 서브젝트 코드로부터 타겟 코드로의 코드 변환을 수행한다.
도 1은 복수의 타겟 레지스터 15를 갖는 타겟 프로세서 13 및 복수의 소프트웨어 요소들 17, 19, 20, 21, 27을 저장하는 메모리 18을 포함하는 예시적인 타겟 컴퓨팅 플랫폼을 도시한다. 소프트웨어 요소들은 오퍼레이팅 시스템(operating system) 20, 서브젝트 코드(subject code) 17, 변환기 코드(translator) 19 및 변환된 타겟 코드(translated target code) 21를 포함한다.
일 실시 예에서, 변환기 코드 19는 서브젝트 ISA(instruction set architecture)의 서브젝트 코드를 최적화된 또는 최적화되지 않은 또 다른 ISA의 변환된 타겟 코드로 변환하는 에뮬레이터(emulator)이다. 또 다른 실시 예에서, 변 환기 19는 프로그램 코드 최적화를 수행함으로써 서브젝트 코드를, 각각의 동일한 ISA인 타겟 코드로 변환하기 위한 액셀러레이터(accelerator)와 같이 기능한다.
변환기 19 즉, 변환기를 실행하는 소스 코드의 컴파일된 버젼(compiled version) 및, 변환된 코드 21 즉, 변환기 19에 의해 생성된 서브젝트 코드 17의 변환은, 일반적으로 마이크로 프로세서 또는 다른 적절한 컴퓨터인, 타겟 프로세서 13 상에서 동작하는 오퍼레이팅 시스템 20과 관련하여 동작한다.
도 1에 도시된 구조는 단지 예시적인 것이며, 예를 들어, 본 발명에 따른 소프트웨어, 방법 및 프로세스는 오퍼레이팅 시스템 내 또는 하부에 존재하는 코드에서 실행될 수 있다. 서브젝트 코드 17, 변환기 코드 19, 오퍼레이팅 시스템 20, 및 메모리 18의 저장 메카니즘은 당업자에게 알려진 바와 같이 광범위한 다양한 타입 중 어느 하나가 될 수 있다.
도 1에 따른 장치에서, 프로그램 코드 변환은 타겟 코드 21이 실행 중인 동안, 런타임에서 동적으로 바람직하게 수행된다. 변환기 19는 변환된 프로그램 21과 인라인으로 동작한다. 변환기 19는 바람직하게는, 타겟 아키텍쳐로 컴파일된 (compiled) 어플리케이션으로 사용된다. 서브젝트 프로그램 17는 타겟 아키텍쳐 14 로 실행하기 위해 런타임에서 변환기 19에 의해 변환된다.
변환기 19를 통해 서브젝트 프로그램 17을 실행하는 것은 인터리브 방식으로실행하는 두가지의 서로 다른 타입의 코드, 번역기 코드 19 및 타겟 코드 21를 필요로 한다. 변환기 코드 19는 예컨데, 런 타임에 앞서, 변환기 19의 하이 레벨 소스 코드 실행에 기초하는 컴파일러에 의해 생성된다. 대조적으로, 타겟 코드 21은 변환되고 있는 프로그램의 저장된 서브젝트 코드 17에 기초하여, 런타임 동안, 변환기 코드 19에 의해 생성된다.
서브젝트 프로그램 17은 서브젝트 프로세서(미도시) 상에서 실행하도록 의도된다. 일 실시 예에서, 변환기 19는 에뮬레이터로 기능한다. 즉, 변환기 19는 서브젝트 프로세서를 에뮬레이트하고, 실질적으로 서브젝트 프로그램 17을 타겟 코드 21로서 타겟 프로세서 13 상에서 실행한다. 바람직한 실시 예에서, 적어도 하나의 글로벌(global) 레지스터 저장 27(또한, 서브젝트 레지스터 뱅크 27 또는 요약 레지스터 뱅크 27로 불리운다)이 제공된다. 멀티 프로세서 환경에서, 임의적으로 하나의 요약 레지스터 뱅크 27가 이상이 서브젝트 프로세서의 아키텍쳐에 따라 제공된다. 서브젝트 프로세서 상태의 표현이 변환기 19 및 타겟 코드 21의 구성요소에 의해 제공된다. 즉, 변환기 19는 변수 및/또는 객체와 같은 다양한 명백한 프로그래밍 언어 장치에서 서브젝트 프로세서 상태를 저장한다. 컴파일러는 상태 및 오퍼레이션들이 타겟 코드에서 실행되는 방법을 결정하는 변환기 19를 컴파일하는데 이용된다. 비교해 보면, 타겟 코드 21은 타겟 코드 21의 타겟 명령에 의해 조작되는, 타겟 레지스터 15 및 메모리 기억장소(memory locations) 18에서 서브젝트 프로세서 상태를 명확하게 제공한다. 예를 들어, 글로벌 레지스터 저장 27의 로우 레벨 표현은 단순히 할당된 메모리 영역이다. 하지만, 변환기 19의 소스 코드에서 글로벌 레지스터 저장 27은 더 높은 레벨에서 억세스되고, 조작될 수 있는 데이터 어레이(data array) 또는 객체(object)이다.
도 2는 프로그램 코드 변환시 실행 제어의 바람직한 방법을 나타내는 개략적 인 흐름도이다.
도 2에 도시된 바와 같이, 제어는 초기에 변환기 제어 루프 190에 존재한다. 단계 201에서, 제어루프(190)는 서브젝트 코드 17의 블럭을 변환된 코드 21의 대응하는 블럭으로 변환하는 변환기 코드 19의 코드 생성 함수 192를 호출(call)한다. 그러면, 단계 202에서, 변환된 코드 21의 블럭은 타겟 프로세서 13 상에서 실행된다. 편리하게, 번환된 코드 21의 각 블럭의 말미는 제어를 제어 루프 201로 복귀시키는 명령을 포함한다. 다시 말하면, 서브젝트 코드를 변환하고 실행하는 단계들은, 서브젝트 프로그램 17의 부분들이 변환되고 차례로 실행되도록, 인터레이스(interace)된다.
여기서, "베이직 블럭(basic block)"이란 용어는 당업자에게 익숙할 것이다. 베이직 블럭은 정확히 하나의 입력 포인트(entry point)와 정확히 하나의 종료 포인트(exit point)를 갖는 코드 섹션이며, 블럭 코드를 단일 제어 패스로 한정한다. 이러한 이유 때문에, 베이직 블럭들은 제어 플로우의 유용한 기본 유닛이다. 적절하게, 변환기 19는 서브젝트 코드 17을 복수의 베이직 블럭으로 나누고, 각 베이지 블럭은 단일 입력 포인트에서 첫번째 명령과 단일 종료 포인트에서 마지막 명령(점프, 콜, 또는 브랜치 명령과 같은) 사이의 명령들의 연속하는 셋이다. 변환기는 이러한 베이직 블럭들(베이직 모드) 중 단지 하나를 선택하거나 베이직 블럭들의 그룹(그룹 블럭 모드)을 선택하게 된다. 그룹 블럭은 단일 유닛으로서 함께 핸들링될 두 개 이상의 베이직 블럭들을 적절히 포함한다. 또한, 변환기는 서로 다른 입력 상태 하에서 서브젝트 코드의 동일한 베이직 블럭을 나타내는 동질 블럭(iso- blocks)을 형성할 수 있다.
바람직한 실시 예에서, 중간 표현(Intermediate Representation:IR)의 트리(tree)는 오리지널 서브젝트 프로그램 17으로부터 타겟 코드 21을 생성하는 프로세스의 부분으로서, 서브젝트 명령 시퀀스에 기초하여 생성된다. IR 트리들은 서브젝트 프로그램에 의해 계산되는 표현들 및 수행되는 오퍼레이션들의 요약 표현이다. 이후에, 타겟 코드 21은 IR 트리들에 기초하여 생성된다. IR 노드들의 집합들은 실제로 DAGs(directed acyclic graphs)이지만, 비형식적으로 "trees"로 불리운다.
당업자들이 인정하는 바와 같이, 일 실시 예에서 변환기 19는 C++와 같은 객체지향형(object-oriented) 프로그래밍 언어를 이용하여 실행된다. 예를 들어, IR 노드는 C++ 객체로서 실행되고, 다른 노드에 대한 레퍼런스(reference)는 그러한 다른 노드의 대응하는 C++ 객체에 대한 C++ 레퍼런스로서 실행된다. 그러므로, IR 트리는 서로에게 다양한 레퍼런스들을 포함하는, IR 노드 객체의 집합으로 실행된다.
또한, 논의 중인 실시 예에서, IR 생성은 서브젝트 프로그램 17이 실행하도록 의도된 서브젝트 아키텍쳐의 구체적 특징들에 대응하는 요약 레지스터 정의들의 셋을 이용한다. 예를 들면, 서브젝트 아키텍쳐 상에서 각 물리적 레지스터에 대한 유일한 요약 레지스터 정의가 존재한다("서브젝트 레지스터"). 그러한 것으로, 변환기에서 요약 레지스터 정의들은 IR 노드 객체(즉, IR 트리)에 대한 레퍼런스를 포함하는 C++ 객체로서 실행될 수 있다. 요약 레지스터 정의들의 셋으로 언급되는 모든 IR 트리의 집합체는, 동작하는 IR 포리스트(forest)로 언급된다("포리스트"는 각각 IR 트리로 언급되는, 다수의 요약 레지스터 루트들을 포함하기 때문에). 이러한 IR 트리들 및 다른 프로세서들은 변환기 코드 생성 기능 192의 부분을 적절히 형성한다.
예외 핸들링(Exception Handling)
도 3은 본 발명의 바람직한 실시 예에서 프로그램 코드 변환을 뒤따르는, 서브젝트 프로그램에서의 명령들 및 타겟 프로그램에서의 명령들 사이의 관계를 나타내는 개략도이다.
이러한 예에서, 서브젝트 명령들 S1-S3는 기능적으로 동등한 타겟 명령들 T1-T3로 끝난다. 서브젝트 명령 S1은 예컨대, 데드 코드 제거(dead code elimination) 최적화에 의해 제거되었고, 생성된 타겟 코드에서 카운터파트(counterpart)를 갖지 않는다. 서브젝트 명령 S2는 하나의 동등한 타겟 명령 T3로 끝난다. 대조적으로, 서브젝트 명령 S3는 두 타겟 명령들 T1 및 T2로 끝난다. 타겟 및 서브젝트 코드 명령들 사이에는 1:0, 1:1, 1:다수, 또는 다수:1의 관계가 존재할 수 있다.
또한, 도 3에 도시된 바와 같이, 일반적으로 이용되는 다른 최적화는, 타겟 코드에서 명령 시퀀스가 서브젝트 코드에서 오리지널 시퀀스와 동등하지 않은, 코드 리스케쥴링(code rescheduling)을 수행하는 것이다. 여기서, 제2 서브젝트 명령 S2는 제3 타겟 명령 T3로서 리스케쥴링되었다.
또한, 도 3은 서브젝트 예외 핸들러 170을 도시한다. 일반적으로, 서브젝트 환경은 하나 또는 그 이상의 특정 서브젝트 폴트 핸들러들(subject fault handlers) 170a(즉, 특수한 타입의 예외에 특별한) 및/또는 하나 또는 그 이상의 디폴트 예외 핸들러들(default exception handers) 170b(어떠한 특별한 예외 핸들러도 레지스터되지 않고 사용되도록)를 제공하게 된다.
이러한 예에서, 서브젝트 명령들 S1, S2 또는 S3 중 어느 것은 잠재적으로 서브젝트 예외 핸들러 170에 의해 핸들링될 필요가 있는 예외로 끝난다.
변환된 서브젝트 예외 핸들러 270은 서브젝트 예외 핸들러 170를 에뮬레이트하는 타겟 프로세서 상에서 실행할 타겟 코드에서 예외 핸들러를 제공한다. 실제적으로, 적어도 하나의 변환된 서브젝트 특정 예외 핸들러 270a 또는 디폴트 예외 핸들러 270b가 제공된다. 예외가 핸들링되었다면, 예외 핸들러 270는 일반적으로 타겟 코드 21로 제어를 리턴할 것이다.
변환된 서브젝트 예외 핸들러 270은 예외를 정밀하게 핸들링하기 위하여 정밀한 서브젝트 상태를 수신할 것을 기대한다. 상술한 바와 같이, 정밀한 서브젝트 상태를 재생성하는 것은 어렵고 비용이 많이 든다. 우선, 서브젝트 상태를 계산하고 수집하는 것과 관련된 실질적인 비용이 존재한다. 예를 들면, 나태 평가(lazy evaluation)와 같은 변환기 최적화들은, 그러한 값들을 계산하는데 필요한 기본 데이터(underlying data)를 저장함으로써 서브젝트 레지스터 값들의 계산을 지연시킬 수 있다. 예외에 대응하여 서브젝트 상태를 재생성하는 것은 그러한 값들이 즉시 수정되는(즉, 계산되는) 것을 요구한다. 서브젝트 레지스터들이 이전에 계산되었을 지라도, 그들은 메모리, 예컨대 서브젝트 레지스터 뱅크 27와 같은 메모리로부터 검색(retrieved)되어야 한다.
둘째로, 서브젝트 프로그램 내에서 임의의 순간에 정확한 서브젝트 상태를 계산하는 능력과 관련된 기회비용이 존재한다. 다이나믹한 이진 변환기(binary translator)에서 코드 리스케쥴링과 같은 많은 중요한 최적화들은 이진 호환성의 엄격한 모델로부터의 이탈들이 수반된다. 이진 호환성은 변환기가 서브젝트 아키텍쳐의 정확한 상태를 재생성할 수 있다는 것을 의미한다. 엄격한 모델은 서브젝트 상태가 변환된 프로그램에서 임의의 순간에(즉, 어떤 서브젝트 명령에서) 재생성될 수 있는 것이다. 실행에 있어 임의의 순간에 서브젝트 상태를 재생성하는데 필요한 정보를 보존하기 위하여, 변환기는 중요한 최적화들을 버려야 한다. 그러한 최적화들이 사용중일 때, 변환기는 서브젝트 콘텍스트를 정확하게 재생성할 방법이 없다. 따라서, 정밀한 예외 핸들링의 실질적인 비용은 단지 정확한 서브젝트 상태를 생성하는 작업만이 아니다. 서브젝트 상태를 완전히 생성할 수 있도록 코드 변환 프로세스에 제한이 존재한다.
폴트 (Faults)
일반적으로 폴트(Faults)로 알려진 예외들의 특별한 카테고리에 대해 우선적으로 집중함으로써 본 발명을 설명하는 것이 유용하다.
폴트들은 전형적으로 에러 핸들링에 이용된다. 많은 오퍼레이팅들은, 예외적인 환경에서, 정확한 결과를 생성할 수 없다. 예를 들어, 정수 추가 명령은 표시되 기에는 너무 큰 결과를 생성할 수 있다(결과의 크기는 입력의 크기와 매칭된다고 가정). 프로세서 아키텍쳐 디자이너들은 폴트가 플래그(flag)될 방법을 결정한다. 세 가지 일반적인 디자인 옵션들은 오버플로우를 조용히 무시하는 것, 내부 프로세서 상태를 수정함으로써 에러를 플래그하고(예를 들어, 상태 플래그), 뒤따르는 명령에 따른 실행을 계속하는 것, 또는 오버플로우 예외를 일으키는 것이다. 특별한 아키텍쳐는 특별한 명령의 폴트(fault) 및 논폴트(non-fault) 버젼을 제공함으로써 이러한 옵션들의 믹스를 제공할 수 있다.
다른 실시 예로써, 폴트의 일부 공통 클래스들은 수학적 예외들, 다양한 형태의 메모리 폴트(유효하지 않은 어드레스(invalid address), 보호 위반(protection violation), 및 얼라인먼트 체크(alignment check)), 및 (현재 특권 레벨(current privilege level)에서) 형식이 맞지 않거나(malformed) 비공식적인(illegal) 명령 폴트들이다.
폴트들은 연산수 데이터 콘텍스트 및 프로세서 상태(메모리 할당을 포함하는)에서 주어진 명령의 실행 때문에 발생하기 때문에 일반적으로 동시적이고, 강제적인 예외들이다. 폴트들은 명령들 내에서 발생하고, 말하자면, 폴트 명령은 완성될 수 없다. 일반적으로, 서브젝트 프로세서는 폴트 명령의 시작에서 다시 시작될 실행에 대해, 폴트 핸들러가 에러를 해결하기 위한 시도하도록 하는, 레지스터 상태를 결정할 것이다. 어떤 환경에서는 그런 상태를 결정하는 것이 가능하지 않을 수 있고, 순서대로 폴트가 터미널(terminal)이 되도록 유도할 수 있다.
복원가능한 폴트(일반적으로 OS 또는 sub-OS 레벨에서)의 예는 페이지 폴트- 메모리 억세스가 실존하지 않는 가상 메모리에서 페이지를 억세스하려고 시도하는 경우, 예외가 발생됨-이다. 페이지가 맵핑되면, 가상 메모리 시스템은 물리적인 페이지를 할당하고. 그것을 매핑에 따라 준비하고(예를 들어, 파일이 어드레스에서 맵핑 로드 데이터(load data)), 이에 따라 페이지 테이블 구조들을 업데이트 한다. 이 때, 프로세서는 동일한 명령에서 실행을 다시 시작하고, 이제 정확히 완성할 수 있게 된다.
일부 폴트들은 사용자 모드 어플리케이션으로부터 마스커블(maskable)될 수 있다. 예를 들어. 얼라인먼트 체크(alignment check)는 일반적으로 오정렬 억세스들(misaligned accesses)을 서포트하는 아키텍쳐 상의 마스커블(maskable) 폴트로서 유용하다. 얼라이먼트 폴트가 아닌 것들은 논마스커블(non-maskable)하다.
서브젝트 명령 셋 아키텍쳐에서 일부 명령들은 폴트들을 생성하는 데에 취약상이 있는 것으로 알려져 있는 반면, 다른 명령들은 그렇지 않다. 즉, 대부분의 명령 셋들은 폴트하지 않은 일부 폴트 비취약(fault invulnerable) 명령들과 함께 폴트 취약(fault invulnerable) 명령(또한, 기한이 있는(termed) 폴트 명령들 또는 잠재적으로 폴트한 명령들)들을 포함한다.
폴트들은 그들이 동시적이고, 일반적으로 회복가능하기 때문에 문제가 있다. 또한, 폴트-취약 명령들은 어떠한 리얼 라이프(real-life) 서브젝트 프로그램에서 상대적으로 자주 실행되는 경향이 있다. 그러므로, 폴트 핸들링에서 개선은 프로그램 코드 변환에서, 특히, 다이나믹 이진 변환에서 즉각적인 이득을 갖는다.
폴트 핸들링(Fault Handling)
도 4는 본 발명의 바람직할 실시 예에 따른 프로그램 코드 변환동안 타겟 장치에서의 예시적인 프로그램 코드 구조를 나타낸다.
도 4에서, 서브젝트 코드 17의 예시적인 블럭은 서브젝트 명령들 SC1 내지 SC4를 포함한다. 이러한 명령들 중 하나(SC3*)는 폴트 취약 명령 174인 반면, 나머지는 폴트 취약하다.
또한, 타겟 코드 21에 대응하는 블럭은 동등한 타겟 코드 명령들 TC1 내지TC6으로 도시된다. 폴트 취약 서브젝트 명령 174(SC3)는 생성된 타겟 코드 21에서(이 경우에 TC4*) 하나 또는 그 이상의 카운터 파트 타겟 명령들(counterpart target instructions) 214과 관련된다.
도 4에 도시된 바와 같이, 복원 맵(recovery map) 194는 카운터 타겟 명령들 214 각각을 각각의 복원 정보 항목 195로 링크하는데 제공된다. 즉, 폴트 취약 서브젝트 명령 174는 하나 또는 그 이상의 카운터파트 타겟 코드 명령 214를 가지며, 각각은 각각의 타겟 특정 복원 정보 항목 195와 매핑된다.
복원 정보 195는 타겟 코드 21의 실행시 발생하는 정밀한 예외(특히, 폴트) 핸들링을 허용한다. 구체적으로, 복원 정보 195는 변환된 서브젝트 예외 핸들러 270에서 예외의 정밀한 핸들링을 위한 정밀한 서브젝트 상태를 생성하기 위하여 추가적인 네이티브 코드 명령들이 수행되도록 한다.
바람직한 일 실시 예에서, 예외 핸들러 270에 의해 핸들링될 예외를 위해 준비된, 정확한 서브젝트 상태를 수정하기 위한 복원 정보 195를 이용하는 복원 핸들 러 215가 제공된다.
도 5는 본 발명의 바람직한 일 실시 예에 따라, 폴트-타입 예외들의 정밀한 핸들링을 가능하게 하는 타겟 코드를 생성하는 방법의 개략적인 흐름도이다.
단계 501에서, 서브젝트 코드 17의 섹션은 디코딩되어, 적절한 베이직 블럭이다. 디코딩시, 하나 또는 그 이상의 폴트 취약 명령들 174는 서브젝트 ISA의 정의에 따라 식별된다.
단계 502에서, 프로그램 코드 변환은 서브젝트 코드 17을 타겟 코드 21의 대응 블럭으로 변환하도록 수행된다. 임의적으로, 프로그램 코드 변환은 서로 다른 것들 사이에서, 데드 코드 제거(dead code removal) 및 또는 코드 리스케쥴링과 같은 최적화들을 포함한다. 타겟 코드 21의 생성된 블럭은 폴트 취약 서브젝트 명령들 174 각각에 대한 하나 또는 그 이상의 카운터파트 타겟 명령 214을 포함한다.
단계 503에서, 복원 정보 195는 카운터파트 타겟 명령 214 각각에 대해 제공된다. 적절하게는, 엔트리들은 카운터파트 타겟 명령 214를 각각의 복원 정보 195로 링크하며 복원 매핑 테이블 194에서 생성된다.
단계 504에서, 타겟 코드 21의 생성된 블럭에서 명령들이 실행된다. 어떠한 예외들(폴트들)도 발생하지 않는 경우, 실행은 예컨대, 도 2의 변환기 구동 루프(run loop)를 통과하여, 블럭의 말미까지 계속되고,다음 블럭을 호출하기 위해 플로우를 제어한다.
단계 505에서, 예외(폴트)가 카운터파트 타겟 명령들 214 중 하나에 관해서 발생하면, 각각의 복원 정보 195는 정밀한 서브젝트 상태를 수정하기 위해 획득되 고 이용된다. 즉, 복원 정보 195는 (이상적으로 복원 핸들러 215에서) 추가적인 복원 코드 명령들의 셋을 실행하기 위해 사용된다.
복원 핸들러 215는 타겟 프로세서에 의해 특성적으로 실행가능한 네이티브 코드에 적절하게 기록된다(변환기 19에 의해 다이나믹하게 생성되는 변환된 타겟 코드에 대조적으로).
단계 506에서, 예외는 예외 핸들러 270에 의해 정밀하게 핸들링된다. 즉, 단계 505에서 복원은 예외 핸들러 270에 의한 정밀한 예외 핸들링의 상태를 만족하기 위해 정밀한 서브젝트 상태를 제공한다. 일반적으로, 예외는 성공적으로 핸들링되고, 제어는 실행중인 프로그램으로 리턴한다. 일반적으로, 제어는 현재 블럭의 실행을 완성하도록 리턴한다. 다른 경우들에서 폴트는 터미널 및 프로그램 끝이다.
복원 정보 저장(Storing Recovery Information)
도 6은 타겟 컴퓨팅 플랫폼 상에서 복원 정보 195 및 생성된 타겟 코드 21을 저장하기 위한 바람직한 메카니즘을 도시한다.
이상에서 논의된 복원 메카니즘 그 자체는 변환기 19에 어느 정도의 비용을 가져온다. 우선적으로, 복원 정보 195를 저장할 메모리 공간이 요구된다. 또한, 각 카운터파트 타겟 코드 명령 214를 각각의 복원 정보 195로 링크하는 복원 맵을 저장할 공간이 요구된다. 예외(폴트)가 발생하면, 관련 복원 정보 195를 신속하고 효과적으로 획득하는 것이 바람직하다.
도 6은 타겟 코드 21a의 생성된 블럭을 저장하는 타겟 컴퓨팅 플랫폼에서 메 모리 영역을 도시한다. 타겟 코드 블럭 21a는 서브젝트 코드에서 폴트 취약 명령 174에 대응하는 하나 또는 그 이상의 카운터파트 타겟 명령 214를 포함한다.
복원 정보 195는 각각의 타겟 코드 블럭 21a를 곧이어 뒤따르는 메모리에 저장된다. 즉, 카운터파트 타겟 명령들 214 각각은 관련된 타겟 코드 블럭 21a 이후에 즉시 저장된 각각의 복원 정보 항목 195를 갖는다.
바람직하게는, 마커 196는 타겟 코드 블럭 21a의 말미와 복원 정보 195의 시작을 쉽게 구별하기 위해 제공된다.
또한, 도 6에 도시된 바와 같이, 또 다른 변환된 타겟 코드 블럭 21b는 메모리에 저장되고, 다시 각각의 복원 정보 195 및 마커 196가 뒤따르게 된다. 즉, 타겟 코드 21 및 복원 정보 195는 메모리에서 인터리빙된다.
예외(폴트)가 특별한 카운터파트 타겟 명령 214에서 발생하는 경우, 뒤따르는 단계들은 각각의 복원 정보를 획득하기 위해 수행된다.
첫번째 단계는 타겟 코드 블럭의 말미로 내려가며 스캔하는 것이다. 편리하게, 이 단계는 마커 196이 식별될 때까지 독출하는 연속적인 명령들을 독출하는 단계를 포함한다. 둘째로, 복원 정보의 리스트를 아래로 스캔하는 것은 각각의 바람직한 복원 정보를 식별한다.
특히 바람직한 실시 예에서, 각 복원 정보 195는 카운터파트 타겟 명령 214의 프로그램 카운터에 따라 인덱스된다. 즉, 카운터파트 타겟 코드 명령 214의 프로그램 카운터 값은 복원 정보 195의 리스트에서 인덱스를 형성한다. 예외가 발생하면, 타겟 프로그램 카운터는 타겟 프로세서에서 즉시 이용가능하다. 첫째로 마커 196에 대해, 둘째로 복원 정보의 리스트에서 타겟 프로그램 카운터에 대해 메모리를 스캐닝하는 것은 각각의 복원 정보 195를 알아낸다.
도 7은 도 6의 메모리 레이아웃을 이용하여 복원 정보를 획득하는 바람직한 방법을 도시한다.
실용적인 실시 예에서, 각 베이직 블럭은 일반적으로 약 열 두개의 명령들을 포함한다. 그러므로, 수반된 거리가 비교적 짧기 때문에 현재 타겟 코드 블럭의 말미로 스캔하는 것은 비교적 빠르다. 바람직한 실시 예에서, 각 서브젝트 블럭은 ㄷ대체로 100 또는 200 명령들의 최대 크기로 한정된다. 비교적 긴 타겟 블럭과 같은 드문 경우일지라도, 스캐닝은 여전히 효과적이고 저렴한 메카니즘이다.
도 8은 복원 정보 195의 구체적인 바람직한 실시 예를 나타낸다.
도 8의 예에서, 복원 정보 195는 타겟 프로그램 카운터 195a, 서브젝트 프로그램 카운터 195b, 복원 인디케이터들(recovery indicators) 195c의 셋 및 매핑 템플릿(mapping template) 195d를 포함한다.
복원 정보 195는 복원 핸들러 215가 정밀한 서브젝트 상태를 수정하도록 한다. 구체적으로, 정밀한 서브젝트 상태는 서브젝트 프로그램 카운터 값 195b 및 서브젝트 레지스터 값들을 포함한다.
적절하게, 복원 핸들러 215는 서브젝트 프로그램 카운터를 수정하기 위해 복원 정보를 이용한다(그것이 이미 이용가능하지 않다면). 이러한 예에서, 복원 정보 195는 각 타겟 PC 195a에 대해 정확한 서브젝트 PC 195b를 저장한다. 서브젝트 PC는 저장된 복원 정보에서 이러한 필드 195b를 독출함으로써 수정된다.
매핑 템플릿 195d는 카운터파트 타겟 명령 214의 일 지점에서 적용가능한 적절한 레지스터 매핑을 식별한다. 복원 핸들러 215는 서브젝트 프로세서 레지스터 값들을 수정한다. 일 실시 예에서, 레지스터 값들은 메모리에서 요약 레지스터 뱅크 27을 위해 수정된다. 선택적으로, 메모리 저장들은 타겟 레지스터 내에 남겨진다. 여기서, 복원 핸들러 215는 서브젝트 레지스터들이 물리적인 타겟 레지스터들에 매핑되는 레지스터 매핑을 셋하기 위해 저장된 매핑 템플릿 195d를 이용한다.
도 8에 도시된 바와 같이, 저장된 복원 정보 195는 바람직하게 특정 타겟 코드 명령의 순간에 우수한 최적화를 나타내는 복원 인디케이터들(최적화 플래그)들의 셋을 포함한다. 이러한 예에서, 플래그 F1, F2, F3 및 F4와 같은 네 개의 복원 인디케이터들 셋(set)이 존재한다. 적절하게, 복원 핸들러 215는 복원 인디케이터 F1-F4에 기초하여, 우수한 최적화를 수행하기 위해 하나 또는 그 이상의 네이티브한 코드 복원 루틴들 216을 호출한다.
특히, 복원 핸들러는 예외가 발생했던, 순간에서 지연되었던 나태(lazy) 작업을 수행한다. 예를 들어, 많은 프로세서들은 상태 코드 플래그들의 셋을 제공한다. 바람직한 최적화는 상태 코드 플래그의 현재 상태가 필요할 때 수정되도록, 기본 정보를 저장하는 대신에 상태 코드 플래그들의 수정을 지연시키는 것이다. 복원 루틴 216은 저장된 기본 정보로부터 나태 상태 코드 플래그 평가(evaluation)를 수행한다.
도 9는 저장된 복원 정보의 또 다른 구체적인 바람직한 실시 예를 나타낸다.
복원 정보 195는 압축된 형태로 이상적으로 저장된다. 유익하게, 복원 정보 의 메모리 공간(memory footprint)은 줄어든다. 일부 환경들에서 변환기 19는 많은 다른 프로세스에 따라 컴퓨팅 플랫폼 상에서 동작하고, 변환기 19의 오버헤드에 의해 소비되는 메모리의 양을 줄이는 것은 바람직하다.
도 9에 도시된 바와 같이, 제1 타겟 PC 195a 및 제1 서브젝트 PC 195b는 완전한 값(full values)으로 저장된다. 연속되는 PC들은 이러한 기본 값(basic value)들로부터의 오프셋으로 각각 저장된다. 적절하게, 타겟 코드 21a, 21b의 각 블럭에서 제1 복원 정보 195는 기본 값으로 풀(full) PC 값들과 함께 저장되고, 연속되는 복원 정보 195 각각은 기본 값으로부터의 오프셋으로 프로그램 카운터 값을 저장한다. 선택적으로, 베이스 PC는, 블럭에서 제1 타겟 코드 명령에 대한 PC들과 같은 블럭에 대해, 카운터파트 타겟 명령 214인지 아닌지를 정의한다.
Example 1: PPC to x86 Translation
서브젝트 코드 17의 예시적인 시퀀스는 현재 설명된 기술의 일 례로서 아래에 도시된다. 예시적인 서브젝트 코드 17은 PPC(PowerPC) 타입 프로세서에 적합하다.
서브젝트 코드(PPC)
0x0001003c: ...
0x00010040: add. r3, r3, 68
OxOOO10044: 1d r3, 0(r3)
0x00010048: ...
예시적인 PPC 서브젝트 코드는 레지스터 "r3"에 상수 68을 더하고, 이 어드레스로부터 r3으로 로드한다.
덧셈은 PPC 상태 필드 레지스터의 필드 0에서 플래그들을 셋하는 흩어진 PPC 더하기(PPC dotted add) 명령으로 수행된다. 정밀한 예외 핸들링에 대한, 로드 폴트라면, 로드 명령(OxOOO10044)의 프로그램 카운터 값이 리포트되어야 하고, r3는 더하기 동작이 수행된 후의 값을 포함하여야 하고, 상태 필드 0은 업데이트되어야 한다.
프로그램 코드 변환 후에, 아래의 예시적인 타겟 코드 21가 생성된다. 이 예에서, 타겟 코드는 x86 타입 프로세서에 의해 실행가능하다.
타겟 코드(x86)
0x40083200: mov 12(%ebp), %eax
0x40083203: add $68, %eax
Ox40083206: mov (%eax), %ecx
0x40083208: mov %ecx, 12(%ebp)
타겟 코드는 서브젝트 레지스터 r3에 대한 값을 (ebp 레지스터로부터 오프셋 12에서 발견되고, 여기서 요약 레지스터 뱅크 27를 가리키는), 레지스터 eax로 로드한다. 타겟 코드는 이제 eax에 68을 더하고, 이 어드레스로부터 ecx로 로드한다. 마지막으로 이 결과는 요약 레지스터 뱅크에서 서브젝트 레지스터 r3로 도로 저장된다.
이러한 실시 예에서, 복원 정보 195의 예시는 아래와 같다.
0x40083206:
subj_addr=0x00010044,
flags=cr0_lazy1_cmp0,
register_map=[lazy1(%eax), r3(%eax)]
타겟 PC (0x40083206)는 복원 정보를 인덱스하는데 이용된다. 이 경우, 타겟 mov 명령은 잠재적으로 폴트한 서브젝트 로드 명령에 대한 카운터파트 타겟 명령이다. 정확한 서브젝트 PC가 (0x00010044) 기록된다.
플래그는, 상태 레지스터 필드 0가 'lazy1'이라 불리는 특별한 서브젝트 레지스터의 값의 제로와의 비교에 기초하여 수정될 필요가 있다는 것을 보여주는데 이용된다. 또한, 복원 정보는 특수 레지스터 lazy1 및 r3에 대한 값이 타겟 레지스터 eax(추가 타겟 레지스터 명령 0x40083203에 의해 생성되는 값) 내에 있다는 것을 나타낸다. 복원하기 위해서, eax로부터의 값은 적절한 서브젝트 레지스터로 누설(spill)될 것이고, 상태 필드는 lazy1으로 누설된 값을 이용하여 적당한 비교를 수행함으로써 수정될 수 있고, 적당한 PC가 리포트될 수 있다.
요약에서, 복원 정보는 작업이 필요할 때만 수행되도록 한다. 즉, 작업은 예외가 발생하는, 예외적인 경우에서만 수행된다. 정상적인 실행에서, 대부분 시간 정밀한 서브젝트 상태는 요구되지 않고 수정되지 않는다. 여기서 논의된 복원 메카니즘은 생성된 타겟 코드의 정상적인 실행시, 작업이 연기되거나, 또는 전혀 수행되지 않도록 한다. 결과적으로, 타겟 코드의 정상적인 실행은 더 빨라지고, 더 효과적으로 된다. 하지만, 예외가 발생하면, 복원 정보 195는 여전히 정밀한 서브젝 트 상태가 수정되도록 하고, 예외에 대해 정밀하게 핸들링되도록 한다. 복원 작업은 정밀한 서브젝트 상태를 수정하기 위하여, 예외가 발생한 후에 수행된다.
인터럽트(Interrupts)
본 발명의 또 다른 바람직한 실시 예는 인터럽트의 정밀한 처리와 관련하여 좀 더 상세히 설명될 것이다.
인터럽트는 일반적으로 하드웨어 디바이스 서포트(support)에 이용된다. 프로세서 외부의 하드웨어 디바이스에서 이벤트가 발생하는 경우, 신호는 이벤트의 프로세서에 통지하도록 전송된다. 일 예는 I/O 디바이스로부터의 데이터의 유용성이다. 외부 디바이스는 인터럽트를 서비스할 루틴을 불러내기 위하여 프로세서를 통해 명령들의 현재 플로우를 인터럽트한다. 인터럽트의 이용은 그들이 서비스의 필요가 있는지를 확인하기 위해 시스템이 계속적으로 디바이스를 폴링할 필요를 경감시킨다. 또 다른 예는 일반적으로 오퍼레이팅 시스템으로 전송되는 제어와 함께, 사용자 어플리케이션이 소정의 간격으로 인터럽트되도록 하는 타이머 인터럽트이다. 정규 인터럽트들은 멀티태스킹 시스템에서 프로세서 리소스(resource)의 분배를 강화하는 편리한 메카니즘이다.
인터럽트는 프로세서 내에서 특수한 명령의 실행이 아닌, 외부 디바이스에서 이벤트에 반응하여 유발되는 비동기식 예외들이다. 예컨대, 인터럽트는 명령 스트림에서 임의의 순간에 발생할 수 있다. 인터럽트는 실행되고 있는 현 명령 스트림에 관련이 없고, 실행은 예외가 서비스되었을 때 다시 시작한다.
도 10은 인터럽트 핸들링을 나타내는 예시적인 타겟 코드 시퀀스를 도시한다.
타겟 코드 21a의 블럭은 명령들 TC1-TC6을 포함한다. 이 예시에서, 인터럽트는 프로세서가 명령 TC2를 실행하는 동안 발생한다. 현재 명령(TC2)의 실행은 완성된다. 또한, 제로 또는 그 이상의 추가적인 명령들은 카운터파트 타겟 명령 214(이 경우 명령 TC4)이 복원 정보 195와 관련되어 마주칠 때까지 실행된다(TC3). 즉, 타겟 코드 명령들의 실행은 정밀한 서브젝트 상태가 얻어질 수 있는 다음 순간까지 진행된다.
프로세서가 관련된 복원 정보 195를 가진 다음 카운터파트 타겟 명령 124에 도달하면, 복원 정보는 정밀한 서브젝트 상태를 수정하기 위하여 복원 핸들러 215로 패스된다. 그러면, 정밀한 서브젝트 상태는 적절한 서브젝트 인터럽트 핸들러인 적절한 예외 핸들러 270로 패스된다.
도 11은 타겟 컴퓨팅 플랫폼에서 인터럽트를 핸들링하기 위한 세 가지 바람직한 실행들을 나타낸다.
첫번째 바람직한 실시 예에서, 타겟 코드 인터프리터(interpreter) 197은 인터럽트 타입 예외가 발생할 때 인보크된다. 타겟 코드 인터프리터 197은 복원 정보 195를 갖는 카운터파트 명령 214가 도달할 때까지 타겟 코드 명령을 하나씩 실행한다.
두번째 실시 예에서, 단계 프로세서 모드가 인보크(invoke)된다. 즉, 타겟 프로세서 13은 카운터파트 명령 214가 도달할 때까지 하나씩 타겟 코드 명령들을 실행하는 단계적인 프로세서 모드에 들어가도록 조절된다.
세번째 실시 예에서, 체크 기준은 복원 정보 195를 갖는 카운터파트 명령 214가 도달할 때까지 명령에 의한 타겟 코드 명령을 실행하도록 인보크된다.
폴트 취약 카운터파트 타겟 명령들 214이 타겟 코드 블럭 21에서 전혀 마주지지 않는다면, 실행은 적절히 블럭의 말미로 진행한다. 바람직할 실시 예에서, 정밀한 서브젝트 상태는 블럭 바운더리(boundary)에서 수정된다.
트랩(Traps)
트랩은 일반적으로 명확하게, 무조건적으로 사용자가 요청한 예외들이다. 서브젝트 명령이 트랩 타입 예외를 일으키면, 변환기 19는 트랩 이벤트를 핸들링하기 위해 요구되는 거동을 직접적으로 수행하는 그러한 명령에 대한 타겟 코드를 생성한다.
일부 명령 셋 아키텍쳐들은 예컨대, 싱글 스텝핑(single-stepping) 트랩들이나, 조건부 트랩들(conditional traps)(예를 들어, IA-32 아키텍쳐에서 INTO 명령)과 같은, 더 특별한 핸들링를 요구하는 트랩들을 정의한다. 예외가 발생하지 않도록 하는 일반적인 경우에, 조건부 트랩들은 바람직하게는 위에서 논의한 폴트들과 유사하게 핸들링된다. 이러한 방법, 일반적인 경우의 작업은 최소화된다. 예외적인 경우에, 요구되는 추가적인 작업은 복원 핸들러를 통해 인보크된다.
중단(Aborts)
중단들은 일반적으로 복원가능하지 않은 이벤트들이지만, 다양한 특성들을 갖는다. 중단은 일반적으로 결정적인 시스템 고장(failure)를 관리하는데 이용된다. 내부 프로세서 상태의 불일치와 같은 하드웨어 고장 또는 오퍼레이팅 시스템의 결정적인 영역 내의 폴트와 같은 심각한 소프트웨어 고장을 감지하면, 프로세서는 에러를 무시하고 계속적인 실행(execution), 안정을 위한 정지(halt), 또는 리부팅(reboot)을 시도할 수 있다. 또는 예외는 오퍼레이팅 시스템에 에러를 신호로 알리도록 발생될 수 있다. 폴트와 같이, 중단은 명령들 내에서 발생한다. 중단은 종종 터미널(terminal)이다. 중단은 일반적으로 사용자 마스커블(maskable)하지 않다.
장치 체크 에러와 같은, 중단이 폴트로 예상되지 않는 명령의 실행 내에서 발생하면, 그 중단 명령에서 정밀한 서브젝트 상태를 전적으로 재생하는 것은 어렵다. 일반적으로 다이나믹 이진 변환의 콘텍스트에서 정밀하게 중단(abort)을 핸들링하기에는 매우 비용이 많이 든다.
상술한 논의로부터 인정되는 것처럼, 여기서 논의된 예외 핸들링 메카니즘들은 많은 이득들을 갖는다. 특히, 작업은 어디서나 가능한 일반적인 경우에서 제거되고, 프로그램의 일반적인 실행시 가끔 발생하는 예외적인 경우에만 수행된다. 하지만, 정밀한 서브젝트 상태는 요구되는 경우 달성된다. 또한, 정밀한 서브젝트 상태를 달성하기 위한 오버헤드는 최소화된다.
몇 가지 바람직한 실시 예들이 도시되고 설명되었을지라도, 첨부된 청구항에정의된 바와 같이, 기술분야의 당업자에 의하여 본 발명의 범위를 벗어나지 않고 여러가지 변화들 및 변형들이 된다는 것을 이해할 수 있을 것이다.
본 출원과 관련한 이러한 설명들에 앞서거나 현재 계류가 진행중이며 이러한 설명들에 대한 공개된 열람이 개방된 모든 논문들과 서류들에 주의가 집중되고, 모든 그러한 논문들과 서류들의 콘텐츠들은 여기서 참고적으로 포함된다.
본 명세서(첨부된 임의의 청구항들, 요약 및 도면들을 포함)에 개시된 모든 특징들 및/또는 개시된 방법 또는 프로세스의 모든 단계들은 그러한 특징들 및/또는 단계들의 적어도 몇몇이 상호 배타적인 조합들을 제외한, 임의의 조합들로 조합될 수 있다.
본 명세서(첨부된 임의의 청구항들, 요약 및 도면들을 포함)에 개시된 각 특징은 명시적으로 반대로 진술되지 않다면, 동일하거나 동등하거나 유사한 목적을 수행하는 대안적인 특징에 의하여 대체될 수 있다. 개시된 각각의 특징은 동등하거나 유사한 특징들의 일반적인 시리즈들 중 하나의 예일 뿐이다.
본 발명은 앞선 실시예(들)의 상세설명에 한정되지 않는다. 본 발명은 본 설명(첨부된 임의의 청구항들, 요약 및 도면들을 포함)에 개시된 특징들의 어떠한 신규한 발명 또는 어떠한 조합 또는 개시된 어떠한 방법 또는 과정의 단계들의 신규한 조합 또는 신규한 발명으로 확장된다.

Claims (29)

  1. 서브젝트 코드(subject code)(17)로부터 타겟 코드(target code)(21)로의 프로그램 코드 변환 하에서의 예외들(precise exceptions)을 핸들링(handling)하는 방법에 있어서,
    (a) 서브젝트 명령 셋 아키텍쳐(subject instruction set architecture)에 따라 서브젝트 프로세서에 의해 실행가능한 상기 서브젝트 코드(17)을 디코딩하는 단계;
    (b) 상기 서브젝트 코드(17)로부터 타겟 코드(21)를 생성하는 단계;
    (c) 타겟 명령 셋 아키텍쳐에 따라 타겟 프로세서(13) 상에서 상기 타겟 코드(21)를 실행하는 단계;를 포함하며,
    상기 (a) 단계는, 상기 서브젝트 명령 셋 아키텍쳐에서 잠재적으로 폴트한(potentially faulting) 폴트 취약 명령(fault-vulnerable instruction)(174)을 식별하는 것을 포함하고,
    상기 (b) 단계는, 상기 식별된 폴트 취약 서브젝트 명령으로부터 적어도 하나의 카운터파트 타겟 명령들(214)을 생성하는 단계, 및 상기 카운터파트 타겟 명령들(counterpart target instructions)(214) 또는 그들 각각과 관련된 복원 정보(195)를 저장하는 단계를 포함하는 것을 특징으로 하며,
    상기 방법은,
    (d) 상기 카운터파트 타겟 명령들(214) 또는 그 중 하나의 실행이 폴트를 나타내면,
    (ⅰ) 상기 카운터파트 타겟 명령(214)과 관련된 복원 정보(195)를 검색하는 단계;
    (ⅱ) 상기 복원 정보(195)를 이용하여, 상기 폴트에서 상기 서브젝트 프로세서를 정확히 나타내는 서브젝트 상태를 복원하는 단계; 및
    (ⅲ) 상기 서브젝트 상태를 이용하여 상기 폴트를 핸들링하는 단계;들을 실행하는 단계;를 더 포함하는 방법.
  2. 제1항에 있어서,
    상기 타겟 코드(21)을 생성하는 단계는,
    적어도 하나의 최적화들(optimizations)을 수행하는 단계를 포함하며, 상기 복원 정보(195)는 상기 적어도 하나의 최적화들에 관한 정보를 제공하는 방법.
  3. 제1항에 있어서,
    상기 타겟 코드를 생성하는 단계는,
    상기 적어도 하나의 카운터파트 타겟 명령들(214)에서 부정확한 서브젝트 상태를 남겨두는 적어도 하나의 최적화를 수행하는 단계를 포함하며,
    상기 복원 정보(195)는 이용가능한 부정확한 서브젝트 상태로부터 정확한 서브젝트 상태를 획득가능하게 하는 방법.
  4. 제1항에 있어서,
    상기 서브젝트 상태는 적어도 하나의 정확한 서브젝트 프로그램 카운터를 포함하는, 방법.
  5. 제1항에 있어서,
    상기 서브젝트 상태는 상기 서브젝트 프로세서의 서브젝트 레지스터들을 나타내는 정확한 레지스터 값들을 적어도 포함하는 방법.
  6. 제1항에 있어서,
    상기 복원 정보(195)를 저장하는 단계는,
    상기 생성된 타겟 코드(21)에 즉시 뒤따르는 상기 복원 정보(195)를 저장하는 단계를 포함하는 방법.
  7. 제6항에 있어서,
    복원 정보(195)를 검색하는 단계는,
    그것에 연속하는 상기 복원 정보(195)를 위치시키기 위한 상기 타겟 코드(21)를 스캐닝 다운(scanning down)하는 단계; 및
    상기 각각의 카운터파트 타겟 명령(214)과 관련된 상기 복원 정보(195)를 검색하는 단계;를 포함하는 방법.
  8. 제1항에 있어서,
    상기 서브젝트 코드(17)를 복수의 블럭들로 분리하는 단계;
    상기 타겟 코드(21)의 복수의 블럭들을 생성하는 단계; 및
    상기 생성된 타겟 코드(21)의 블럭들 사이에서 인터리빙된 복원 정보(195)를 저장하는 단계;를 포함하는 방법.
  9. 제1항에 있어서,
    상기 복원 정보(195)로부터 상기 타겟 코드(21)를 분리하는 마커(marker)(196)를 저장하는 단계; 및
    상기 마커(196)를 위치시키기 위한 폴트를 나타내는 상기 카운터파트 타겟 명령(214)으로부터의 스캐닝 및 상기 관련된 복원 정보(195)를 위치시키기 위한 마커(196)로부터의 스캐닝에 의해 상기 복원 정보(195)를 검색하는 단계;를 포함하는 방법.
  10. 제1항에 있어서,
    상기 관련된 카운터파트 타겟 명령(214)을 나타내는 타겟 프로그램 카운터에 의해 인덱스된 상기 복원 정보(195)를 저장하는 단계를 포함하는 방법.
  11. 제1항에 있어서,
    상기 서브젝트 상태를 복원하는 단계는,
    상기 검색된 복원 정보(195)를 복원 핸들러(215)로 패스하는 단계;
    현재 이용가능한 서브젝트 상태를 획득하는 단계; 및
    상기 서브젝트 상태를 제공하기 위해 상기 복원 정보(195)를 이용하여 상기 현재 이용가능한 서브젝트 상태를 수정하는 단계;를 포함하는 방법.
  12. 제1항에 있어서,
    상기 복원 정보(195)를 복원 핸들러(215)로 패스(pass)하는 단계; 및
    상기 복원 핸들러(215)로부터 상기 복원 정보(195)에 따른 적어도 하나의 고유 코드 복원 루틴(native code recovery routine)들을 호출(call)하는 단계;를 포함하는 방법.
  13. 제1항에 있어서,
    상기 복원 정보(195)는 타겟 프로그램 카운터 값(195a) 및 서브젝트 프로그램 카운터 값(195b)을 포함하는 방법.
  14. 제13항에 있어서,
    상기 복원 정보(195)는 상기 카운터파트 타겟 코드 명령의 순간에 우수한 최적화를 나타내는 복원 인디케이터(195c) 셋을 더 포함하는 방법.
  15. 제13항에 있어서,
    상기 복원 정보(195)는 상기 카운터파트 타겟 명령(214)의 순간에 적용가능한 요약 서브젝트 레지스터들로의 타겟 레지스터들의 매핑을 감정(identify)하는 매핑 템플릿(195d)을 더 포함하는 방법.
  16. 제1항에 있어서,
    상기 복원 정보(195)는 압축된 형태로 저장되는 방법.
  17. 제13항에 있어서,
    상기 복원 정보(195)는 풀(full) 프로그램 카운터 값을 기본 값(base value)으로 저장된 타겟 코드(21)의 블럭에 관한 제1 복원 정보 항목(195) 및 상기 기본값으로부터의 오프셋으로 프로그램 카운터 값을 각각 포함하는 적어도 하나의 후속 복원 정보 항목들(195)을 포함하는 방법.
  18. 제1항에 있어서,
    상기 타겟 코드(21)의 실행동안 상기 타겟 프로세서(13)에서 인터럽트(interrupt) 신호를 수신하면, 상기 카운터파트 타겟 명령들(214) 또는 그 중 하나를 만날(encounter) 때까지 상기 타겟 코드(21)의 실행을 계속하는 단계;
    상기 각각의 카운터파트 명령과 관련된 상기 복원 정보(195)를 검색하고, 상기 서브젝트 상태를 복원하는 단계;
    상기 서브젝트 상태를 이용하는 인터럽트를 핸들링하는 단계;를 더 포함하는 방법.
  19. 서브젝트 코드(17)로부터 타겟 코드(21)로의 프로그램 코드 변환 하에서 예외(exception)들을 핸들링하는 방법에 있어서,
    (a) 서브젝트 프로세서에 의해 실행가능한 서브젝트 코드(17)를 타겟 프로세서(13)에 의해 실행가능한 타겟 코드(21)로 변환하는 단계; 및
    (b) 상기 타겟 프로세서(13) 상에서 상기 타겟 코드(21)를 실행하는 단계;를 포함하며,
    상기 (a) 단계는,
    (a1) 상기 서브젝트 코드(17)에서 폴트 취약 명령(174)을 식별하는 단계;
    (a2) 상기 폴트 취약 서브젝트 명령에 대한 카운터파트로서 적어도 하나의 카운터파트 타겟 코드 명령들을 생성하는 단계; 및
    (a3) 상기 카운터파트 타겟 명령(214) 또는 그들 각각과 관련된 복원 정보(195)를 저장하는 단계;를 포함하며,
    상기 (b) 단계는,
    (b1) 예외가 상기 카운터파트 타겟 명령들(214) 또는 그들 중 하나에 관해서 발생하면, 상기 폴트한 카운터파트 타겟 명령(214)과 관련된 상기 복원 정보(195)를 위치시키는 단계;
    (b2) 상기 위치된 복원 정보(195)에 따라, 상기 서브젝트 프로세서를 나타내는 서브젝트 상태를 수정하기 위한 복원 루틴을 실행하는 단계; 및
    (b3) 상기 수정된 서브젝트 상태에 관하여 상기 예외를 핸들링하기 위한 예외 핸들러를 유도하는 단계;를 포함하는 방법.
  20. 서브젝트 코드(17)로부터 타겟 코드(21)로의 프로그램 코드 변환 하에서 예외들을 핸들링하는 방법에 있어서,
    상기 서브젝트 코드에서 잠재적으로 폴트한 서브젝트 명령에 대응하는 적어도 하나의 카운터파트 타겟 명령(214)을 포함하는 타겟 코드(21)를 생성하고, 상기 적어도 하나의 카운터파트 타겟 명령(214)과 관련된 복원 정보(195)를 저장하는 단계;
    인터럽트를 수신하면, 상기 적어도 하나의 카운터파트 타겟 명령(214)을 만날 때까지 타겟 코드 명령들의 실행을 계속하는 단계;
    상기 카운터파트 타겟 명령(214)에 도달하면, 상기 관련된 복원 정보(195)를 이용하여 서브젝트 상태를 복원하는 단계; 및
    상기 복원된 서브젝트 상태를 이용하여 상기 인터럽트를 핸들링하는 단계;를 포함하는 방법.
  21. 제20항에 있어서,
    상기 인터럽트를 수신하면, 상기 타겟 코드 명령들을 하나씩 실행하는 단계를 포함하는 방법.
  22. 제21항에 있어서,
    상기 타겟 명령들을 하나씩 실행하기 위해 상기 타겟 프로세서(13)에서 계단식 모드를 인보크(invoke)하는 단계;를 포함하는 방법.
  23. 제21항에 있어서,
    상기 타겟 코드 명령들을 하나씩 번역(interpret)하기 위해 타겟 코드 인터프리터(197)를 인보크하는 단계를 포함하는 방법.
  24. 서브젝트 코드(17)로부터 타겟 코드(21)로의 다이나믹 이진(binary) 변환 하에서 예외들을 핸들링하는 방법에 있어서,
    서브젝트 코드 명령들의 시퀀스로부터 타겟 코드 명령들의 시퀀스를 생성하는 단계; 및
    상기 타겟 코드 명령들의 시퀀스를 실행하는 단계;를 포함하며,
    예외가 발생하면, 정확한 서브젝트 상태가 달성할 수 있는 타겟 코드 명령을 만날 때까지 타겟 코드 명령들의 시퀀스를 따라 계속 실행하고,
    상기 정확한 서브젝트 상태가 달성가능할 때까지 상기 예외의 핸들링을 지연시키는 것을 특징으로 하는, 방법.
  25. 서브젝트 코드(17)로부터 타겟 코드(21)로의 프로그램 코드 변환을 수행하도록 배열된 변환기 장치에 있어서,
    서브젝트 명령 셋 아키텍쳐에 따라 서브젝트 프로세서에 의해 실행가능한 서브젝트 코드(17)를 디코딩하기 위한 디코딩 유닛(19), 및 상기 서브젝트 코드(17)로부터 타겟 코드(21)를 생성하는 타겟 코드 생성 유닛(192)을 구비한 변환기 유닛(19);
    타겟 명령 셋 아키텍쳐에 따라 상기 타겟 코드(21)를 실행하는 타겟 프로세서(13);를 포함하며,
    상기 디코딩 유닛(19)은 상기 서브젝트 명령 셋 아키텍쳐에서 잠재적으로 폴트하는 폴트 취약 명령(174)을 식별하도록 배열되며,
    상기 타겟 코드 생성 유닛(192)은 상기 식별된 폴트 취약 타겟 명령들로부터 적어도 하나의 카운터파트 타겟 명령들(214)을 생성하고, 상기 카운터파트 타겟 명령들(214) 또는 그들 각각과 관련된 복원 정보(195)를 저장하도록 배열되는 것을 특징으로 하며,
    상기 장치는,
    상기 타겟 프로세서(13)에서 상기 카운터파트 타겟 명령들(214) 각각의 실행이 폴트를 나타낼 때, 상기 적어도 하나의 카운터파트 타겟 명령들(214) 각각과 관련된 상기 복원 정보(195)를 회수하고, 상기 복원 정보(195)를 이용하여 서브젝트 상태를 복원하는 복원 핸들러 유닛(215); 및.
    상기 서브젝트 상태를 이용하여 상기 폴트를 정확하게 핸들링하는 예외 핸들링 유닛(170);을 더 포함하는 변환기 장치.
  26. 서브젝트 코드(17)로부터 타겟 코드(21)로 프로그램 코드 변환을 수행하도록 배열된 변환기 장치에 있어서,
    서브젝트 프로세서에 의해 실행가능한 상기 서브젝트 코드(17)를 타겟 프로세서(13)에 의해 실행가능한 타겟 코드(21)로 변환하는 변환기 유닛(19); 및
    상기 타겟 코드(21)를 실행하는 타겟 프로세서(13);를 포함하며,
    상기 변환기 유닛(19)은, 상기 서브젝트 코드(17)에서 폴트 취약 명령(174)을 식별하고, 상기 폴트 취약 서브젝트 명령에 카운터파트로서 적어도 하나의 카운터파트 타겟 코드 명령들을 생성하고, 상기 적어도 하나의 카운터파트 타겟 명령들(214) 또는 그들 각각과 관련된 복원 정보를 저장하도록 배열되며,
    상기 타겟 프로세서(13)는, 상기 적어도 하나의 카운터파트 타겟 명령들(214) 각각에 관해서 예외가 발생하면, 상기 복원 정보(195)가 상기 각각의 카운터파트 타겟 명령(214)과 관련하여 위치되며, 복원 루틴은 상기 위치된 복원 정보(195)에 따라 상기 서브젝트 프로세서를 나타내는 서브젝트 상태를 수정하도록 실행되며, 예외 핸들러(170)는 상기 수정된 서브젝트 상태에 관하여 상기 예외를 핸들링하게 인보크되도록 상기 타겟 코드를 실행하는 변환기 장치.
  27. 서브젝트 코드(17)로부터 타겟 코드(21)로의 프로그램 코드 변환을 수행하도록 배열된 변환기 장치에 있어서,
    서브젝트 프로세서에 의해 실행가능한 상기 서브젝트 코드(17)를 타겟 프로세서(13)에 의해 실행가능한 타겟 코드(21)로 변환하는 변환기 유닛(19); 및
    상기 타겟 코드를 실행하는 타겟 프로세서(13)를 포함하며,
    상기 변환기 유닛(19)은, 상기 서브젝트 코드(17)에서 잠재적으로 폴트한 서브젝트 명령에 대응하는 적어도 하나의 카운터파트 타겟 명령(214)을 포함하는 상기 타겟 코드(21)를 생성하고, 상기 적어도 하나의 카운터파트 타겟 명령(214)과 관련된 복원 정보(195)를 저장하도록 배열되며,
    상기 타겟 프로세서(13)는, 인터럽트를 수신하면, 적어도 하나의 카운터파트 타겟 명령(214)을 만날 때까지 타겟 코드 명령들의 실행이 계속되도록, 상기 타겟 코드(21)를 실행하도록 배열되는 것을 특징으로 하며,
    상기 장치는, 상기 적어도 하나의 카운터파트 타겟 명령(214)이 상기 타겟 프로세서(13)에 의해 만날 때, 상기 관련된 복원 정보(195)를 이용하여 서브젝트 상태를 복원하는 복원 핸들러; 및
    상기 복원된 서브젝트 상태를 이용하여 상기 인터럽트를 핸들링하기 위한 변환된 서브젝트 예외 핸들러(270);를 더 포함하는 변환기 장치.
  28. 서브젝트 코드(17)로부터 타겟 코드(21)로의 프로그램 코드 변환을 수행하도록 배열된 변환기 장치에 있어서,
    서브젝트 코드 명령들의 시퀀스로부터 타겟 코드 명령들의 시퀀스를 생성하는 변환기 유닛(19); 및
    상기 타겟 코드 명령들의 시퀀스를 실행하는 타겟 프로세서(13);를 포함하며,
    타겟 프로세서(13)는 예외가 발생하면, 정확한 서브젝트 상태가 달성될 수 있는 타겟 코드 명령을 만날 때까지, 타겟 코드 명령들의 시퀀스를 따라 에러가 계속 실행되도록, 상기 타겟 코드 명령들의 시퀀스를 실행하도록 배열되며, 예외 핸들러(170)는 상기 정확한 서브젝트 상태를 이용하여 상기 예외를 핸들링하도록 인보크 되는 변환기 장치.
  29. 상기 제1항 내지 제24항 중 어느 한 항의 방법을 수행하기 위한 컴퓨터에 의해 실행가능한 명령들을 기록한 컴퓨터 판독 매체.
KR1020077024128A 2005-04-20 2006-04-07 프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치 KR101244069B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0507943.9 2005-04-20
GB0507943A GB2425372B (en) 2005-04-20 2005-04-20 Method and apparatus for precise handling of exceptions during program code conversion
US11/272,882 2005-11-14
US11/272,882 US8020154B2 (en) 2005-04-20 2005-11-14 Precise handling of exceptions during program code conversion
PCT/GB2006/001268 WO2006111705A2 (en) 2005-04-20 2006-04-07 Method and apparatus for precise handling of exceptions during program code conversion

Publications (2)

Publication Number Publication Date
KR20070121785A KR20070121785A (ko) 2007-12-27
KR101244069B1 true KR101244069B1 (ko) 2013-03-18

Family

ID=36499316

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077024128A KR101244069B1 (ko) 2005-04-20 2006-04-07 프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치

Country Status (3)

Country Link
EP (1) EP1875339A2 (ko)
KR (1) KR101244069B1 (ko)
WO (1) WO2006111705A2 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2448523B (en) * 2007-04-19 2009-06-17 Transitive Ltd Apparatus and method for handling exception signals in a computing system
US8799884B2 (en) 2008-08-13 2014-08-05 Qualcomm Incorporated Software application performance enhancement
CN105949177B (zh) 2010-05-03 2019-02-01 默克专利有限公司 制剂和电子器件
WO2014155684A1 (ja) 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN117555555B (zh) * 2024-01-11 2024-04-12 龙芯中科技术股份有限公司 例外处理方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787241A (en) * 1995-12-18 1998-07-28 Integrated Device Technology, Inc. Method and apparatus for locating exception correction routines
WO2001027752A1 (en) 1999-10-13 2001-04-19 Transmeta Corporation A method for translating instructions in a speculative microprocessor

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787241A (en) * 1995-12-18 1998-07-28 Integrated Device Technology, Inc. Method and apparatus for locating exception correction routines
WO2001027752A1 (en) 1999-10-13 2001-04-19 Transmeta Corporation A method for translating instructions in a speculative microprocessor

Also Published As

Publication number Publication date
EP1875339A2 (en) 2008-01-09
WO2006111705A2 (en) 2006-10-26
WO2006111705A3 (en) 2007-03-29
KR20070121785A (ko) 2007-12-27

Similar Documents

Publication Publication Date Title
US8020154B2 (en) Precise handling of exceptions during program code conversion
US10698792B2 (en) Execution control with cross-level trace mapping
US20070294675A1 (en) Method and apparatus for handling exceptions during binding to native code
US8196120B2 (en) Computer emulator employing direct execution of compiled functions
US7685579B2 (en) Method and apparatus for performing adjustable precision exception handling
US20080263342A1 (en) Apparatus and method for handling exception signals in a computing system
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
US7320121B2 (en) Computer-implemented system and method for generating embedded code to add functionality to a user application
KR101244069B1 (ko) 프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치
WO2012010419A1 (en) A string cache file for optimizing memory usage in a java virtual machine
US20220383988A1 (en) Data processing system and method
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
Ročkai et al. Reproducible execution of POSIX programs with DiOS
US20060253271A1 (en) Method for facilitating transformation of multi-threaded process-oriented object code to event-based object code
Wang Design and Implementation of the MTX Operating system
Baur Instrumenting Java bytecode to replay execution traces of multithreaded programs
Bevemyr The Luther WAM Emulator
Haag Exception Support in a Graph-Based Intermediate Representation
Bebenita et al. Implementing fast jvm interpreters using java itself
Haney et al. Building Task-Oriented Applications: An Introduction to the Legion Programming Paradigm
Martorell et al. gtrace: function call and memory access traces of dynamically linked programs in IA-32 and IA-64 Linux

Legal Events

Date Code Title Description
N231 Notification of change of applicant
N231 Notification of change of applicant
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160229

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170227

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180227

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 8