KR19990036884A - 다수의 복귀 사이트를 구현하기 위한 방법 및그 장치 - Google Patents

다수의 복귀 사이트를 구현하기 위한 방법 및그 장치 Download PDF

Info

Publication number
KR19990036884A
KR19990036884A KR1019980041793A KR19980041793A KR19990036884A KR 19990036884 A KR19990036884 A KR 19990036884A KR 1019980041793 A KR1019980041793 A KR 1019980041793A KR 19980041793 A KR19980041793 A KR 19980041793A KR 19990036884 A KR19990036884 A KR 19990036884A
Authority
KR
South Korea
Prior art keywords
routine
function
return
execution
computer
Prior art date
Application number
KR1019980041793A
Other languages
English (en)
Other versions
KR100519827B1 (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 올젠 케네스
Publication of KR19990036884A publication Critical patent/KR19990036884A/ko
Application granted granted Critical
Publication of KR100519827B1 publication Critical patent/KR100519827B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Abstract

대체 복귀 주소가 용이하게 접근될 수 있도록 한 기능호출과 관련된 상기 대체 복귀 주소가 효과적으로 저장될 수 있도록 하기 위한 방법 및 장치가 제안된다. 본 발명의 한 특징에 따라, 루틴에 의해 호출된 기능과 관련된 한 복귀주소가 효과적으로 저장될 수 있도록 하기 위한 방법은 루틴이 실행되는 동안 상기 루틴내로부터의 기능을 호출함을 포함한다. 일반적으로 상기 기능은 상기 루틴의 외부에 있다. 상기 기능은 일단 호출되면 실행을 시작한다. 종국에 가서는 상기 기능이 상기 루틴으로 복귀된다. 특히 상기 기능은 기대된 복귀 포인트 또는 정상 복귀주소에 의해 나타내진 상기 복귀내의 한 위치로 복귀된다. 상기 기대된 복귀 포인트에 해당하는 루틴내의 지시는 프로그램 실행에 영향을 미치지 않으며 매우 낮은 계산 오버헤드로 실행되는 더미지시이다. 상기 호출된 기능이 한 대체 복귀 포인트로 복귀되어지는때 상기 더미지시내에 포함된 데이터를 판독함으로써 상기 주소를 얻는다.

Description

다수의 복귀 사이트를 구현하기 위한 방법 및 그 장치
1. 본 발명의 분야
본 발명은 긴 기능으로의 호출을 위한 다수의 복귀 포인트를 구현하기 위한 방법 및 그 장치에 대한 것이다. 특히 본 발명은 다수의 복귀 포인트들이 얻어질 수 있기 위해 주소를 효율적으로 가능하게 하기 위한 방법 및 장치에 대한 것이다.
2. 종래기술
컴퓨터 시스템은 가령 컴퓨터 시스템의 지역 네트워크, 인트러넷, 그리고 인터넷과 같은 네트워크를 통해 자주 연결되어 이들이 소프트웨어 또는 프로그램, 코드와 같은 자원을 공유할 수 있도록 한다. 또한 루틴을 포함하는 많은 프로그램들이 한 프로그램이 그 프로그램내에 포함되지 않는 외부의 기능을 호출할 수 있도록 기록된다. 일반적으로 상기 기능들은 많은 루틴에 의해 공유됨으로써 컴퓨터 시스템 자원이 보다 효율적으로 사용될 수 있도록 한다.
한 루틴이 기능들을 호출하도록 된때 상기 기능들은 루틴내로 결국 복귀되어야 한다. 또한 루틴으로의 상기 복귀는 상기 루틴내의 적절한 위치로 보내져야 한다. 제 1 도에서 컴퓨터 프로그램과 상기 프로그램에 의해 호출된 기능사이의 흐름이 도시된다. 컴퓨터 코드(104)는 루틴 g()(108)을 포함한다. g()(108)은 실행된 지시를 포함한다. 도시된 바와 같이 상기 지시들은 기능 f()(116)으로의 반복된 호출(112)을 포함한다.
기능 f()(116)이 호출되고 "정상적으로" 실행되는때 가령 어떤 예외도 일어나지 않으며 다음에 기능 f()(116)이 실행을 완성하고 그리고 루틴 g()(108a) 컴퓨터 루틴으로 한 복귀가 일어난다. 기능 f()(116)이 복귀하게 되는 루틴 g()(108a) 컴퓨터 루틴내의 위치는 호출 사이트 또는 기능 f()(116)이라 불리는 루틴 g()(108a) 컴퓨터 루틴내의 사이트에 종속한다. 특히 호출(112a)의 결과로 기능 f()(116)이 실행되면 기능 f()(116)은 당해분야의 통상의 지식을 가진 자가 알 수 있는 바와 같이 루틴 g()(108a) 컴퓨터 루틴내 호출(112a)직후에 위치하는 복귀 주소(120)로 복귀된다. 이와 유사하게 호출(112b)에 의해 호출된때 기능 f()(116)이 실행되면 기능 f()(116)은 복귀 주소(120)로 복귀된다. 기능 f()(116)이 루틴 g()(108a) 컴퓨터 루틴으로 복귀되기만 하면 루틴 g()(108a)는 계속해서 실행된다.
많은 기능들이 둘이상의 복귀 장소 또는 포인트를 가질 수 있다. 일례로 한 기능은 대체 복귀 포인트 뿐 아니라 정상적인 또는 기대된 복귀 포인트를 가질 수 있다. 대체의 복귀 포인트들은 발생된 예외와 관련된 복귀 포인트들과 같은 비정상적인 복귀 포인트인 것으로 간주된다. 상기 대체의 복귀 포인트들은 한 전체 프로그램내에 저장 또는 분류되어 상기 복귀 포인트들이 필요한때 용이하게 식별될 수 있도록 한다. 일례로서 대체의 복귀 포인트들은 예외를 처리하지 않는 한 기능에 의해 발생된 예외의 처리중에 한 프로그램에 의해 필요하게 될 수 있다.
기능과 대체의 복귀 포인트들을 관련시키도록 사용된 한 수단이 복귀 포인트 또는 복귀 주소, 테이블이다. 도 2a 는 호출 스택과 관련된 한 복귀 포인트 테이블의 개략적인 도면이다. 도 2a 는 호출 스택과 관련된 복귀 포인트 테이블의 개략적인 도면이다. 한 호출 스택(204)은 또다른 프레임 즉 피호출자 프레임(212)을 호출하는 호출자 프레임(208)을 포함한다. 피호출자(202)는 기능 f()(214)와 관련된다. 마찬가지로 호출자(208)가 피호출자(212)를 호출하는때 기능 f()(214)는 실행을 시작한다.
기능 f()(214)의 실행이 끝나는때 기능 f()(214) 그리고 따라서 피호출자(212)가 호출자(208)로 복귀된다. 호출자(208)로의 복귀가 정상적인 복귀가 아닐 때 상기 정상적인 복귀 주소는 적당한 대체 복귀 포인트를 나타내도록 한 복귀 포인트 테이블로의 한 인덱스(216)로서 사용될 수 있다. 가령 상기 정상적인 복귀 주소가 "1234"이면 복귀 포인트 테이블(220)은 "1234"를 발견하도록 조사될 수 있다. 일단 "1234"가 발견되면 "1234"와 관련된 상기 대체 복귀 포인트 주소가 얻어질 수 있다. "1234"의 정상적인 복귀 주소에 대해서 도시된 바와 같이 상응하는 대체 복귀 포인트 주소는 "1256"이다. 일단 이것이 얻어지면, 상기 대체 복귀 포인트 주소는 피호출자(212)가 호출자(208)로 적절히 복귀될 수 있도록 사용될 수 있다.
탐색표 또는 해시표인 복귀 포인트 테이블의 사용이 피호출자를 위한 적절한 복귀 포인트를 식별시키는데 효과적이기는 하나 탐색표의 이같은 구현은 느리다. 다수의 복귀 포인트들을 구현하기 위한 더욱 빠른 처리는 복귀 포인트를 식별하기 위해 탐색표를 제거함을 포함한다. 당해분야의 지식을 가진 자에 의해 알 수 있는 바와 같이 한 기능의 실행중 그같은 기능이 정상의 복귀를 사용하여 복귀되어야 하는지 또는 그같은 기능이 대체의 복귀를 사용하여 복귀되어야 하는지 하는 것은 기본적인 그 기능에 알려져 있다. 따라서 대체 복귀 주소와 관련된 데이터는 저장되기 위해 이용된다.
도 2b 는 대체 복귀 주소 데이터를 저장하도록 된 한 루틴을 도시한 것이다. 한 루틴 g()(236)은 기능 f()로의 호출(238)을 포함한다. 기능 f()로의 호출(238)이 결국 한 대체 주소로 복귀될 것을 필요로 하는지와는 관계없이 호출(238)은 복귀 주소(240)로 보통 복귀될 것이다. 복귀 주소(240)는 저장된 대체 복귀 주소 데이터(242)를 나타낸다. 상기 저장된 대체 복귀주소 데이터(242)는 호출(238) 가까이에 있는 복귀 g()(236a) 컴퓨터 루틴내에 위치하여 대체 복귀주소 데이터(242)가 용이하게 접근될 수 있도록 한다. 일반적으로 대체 복귀주소 데이터(242)는 지시 스트림 자체내에 저장된다. 저장된 대체 복귀주소 데이터(242)가 한 적법한 지시를 나타내지 않을 수 있거나 레지스터 또는 메모리 셀내에 한 값을 중복기재하는 것과 같은 바람직하지 않은 부작용을 가질 수 있기 때문에 루틴 g()의 실행은 주소(240)에서 계속되지 않으나 대신에 다음 지시(244)에서 계속되어야 한다.
호출(238)이 정상적으로 복귀하는때 호출(238)은 다음 지시(244)로 복귀되어야 한다. 도시된 바와 같이 루틴 g()(236)내에서 다음 지시(244)가 거리 D 만큼 저장된 대체 복귀주소 데이터(242)로부터 오프셋된다. 따라서 호출(238)이 정상적으로 복귀하는때 호출(238)은 오프셋 D만큼 증가된 복귀 주소(240)의 위치에 의해 명시된 한 위치로 즉 다음 지시(244)의 위치로 복귀되어야 한다. 대개 거리 D 는 4바이트의 값을 가지므로 다음 지시(244)는 4바이트만큼 복귀 주소(240)의 위치로부터 오프셋된다.
한 대체 복귀주소가 필요한때 탐색기를 구현하는 것보다 한 프로그램내의 저장된 대체 복귀주소에 접근하는 것이 보다 시간 효율적이기는 하나 대체 복귀주소가 필요하지 않은 때에는 저장된 대체 복귀주소에 접근하기 위한 능력이 프로그램의 성능을 떨어뜨리게 된다. 한 기능호출이 복귀되는때 실행되어질 뒤이은 지시를 찾기 위하여 복귀주소의 위치로 오프셋을 추가시키는 것은 비교적 자주 느리며 뒤이은 지시의 위치를 계산함과 관련된 성능상의 패널티를 일으킬 수 있다. 다시 말해서 정상적인 복귀와 관련된 속도가 저장된 대체 복귀주소의 구현에 의해 조정될 수 있다. 더구나 한 정상적인 복귀 또는 가장 있을법한 복귀에 대한 "최상-추측(best-guess)" 평가를 발생시키기 위해 자주 사용되는 브랜치 예측은 당해분야의 통상의 기술을 가진 자가 알 수 있는 바와 같이 점프의 사용에 의해 조정될 수 있다.
선택에 따라 "점프(jumps)"는 다음과 같이 저장된 대체 주소를 바이패스하도록 사용될 수 있다. 점프 또는 브랜치는 몇 개의 상황에서 불필요할 수 있는 코드 섹션을 바이패스하기 위해 프로그램 또는 루틴내에 자주 포함된다. 가령 점프는 한 루틴내에서 구현되어 저장된 대체 복귀주소가 한 기능호출이 도 2c 에서 도시된 바와 같이 정상적으로 복귀되는때 바이패스 될 수 있도록 한다. 루틴 g()(266)내에서 한 호출(268)이 기능 f()로 발생된다. 호출(268)이 정상적인 복귀되는때 상기 복귀는 한 복귀주소(270)에 의해 명시된 루틴 g()(266)내의 상기 위치로 발생된다. 복귀 주소(270)에 상응하는 위치는 지시(272)로부터 고정된 오프셋 F에 위치하는 위치 L으로 점프하기 위한 한 지시(272)이다. 따라서 호출(268)이 복귀주소(270)로 정상적으로 복귀하는때 다음 지시(274)로 점프가 일어난다. 이와 같은 점프는 저장된 대체 복귀주소 데이터(276)를 지나지 않고 바이패스 또는 브랜치된다.
점프의 구현이 성능 패널티 가령 뒤이은 지시의 위치를 발견하기 위해 한 복귀주소로 오프셋을 추가시키는 것과 관련된 하드웨어 성능 패널티를 줄이지만 점프는 느릴 수 있다. 추가의 코드가 점프를 허락하기 위해 한 프로그램내에 포함되어야 하며 이에 의해 상기 프로그램의 전체 크기를 증가시키게 된다.
상기에서 논의된 바와 같이, 기능호출을 위한 다수의 복귀 포인트를 구현하는 종래의 방법은 자주 느려지며 비효율적이고 따라서 다수 복귀 포인트의 구현은 상기 기능호출과 관련된 프로그램 성능에 악영향을 미칠 수 있다. 따라서 필요한 것은 정상적인 복귀와 대체 복귀가 효율적으로 일어날 수 있도록 다수의 복귀 포인트를 구현하기 위한 효율적인 방법 및 장치이다.
상기 대체 복귀주소가 용이하게 접근될 수 있도록 한 기능호출과 관련된 대체 복귀주소가 필수적으로 캐시될 수 있도록 하기 위한 방법 및 장치가 공개된다. 본 발명의 한 특징에 따라 루틴에 의해 호출된 기능과 관련된 한 복귀주소가 효율적으로 캐시될 수 있도록 하기 위한 방법은 루틴이 실행되는 동안 상기 루틴내로부터 상기 기능을 호출함을 포함한다. 대체로 상기 기능은 상기 루틴외부에 있다. 일단 호출이 되면 상기 기능은 실행을 시작한다. 종국에 가서는 상기 기능이 상기 루틴으로 복귀된다. 특히 상기 기능은 예측된 복귀 포인트 또는 정상적인 복귀주소에 의해 표시되는 루틴내의 한 위치로 복귀된다. 예측된 복귀 포인트에 상응하는 루틴내의 지시는
상기 기대된 복귀 포인트에 해당하는 루틴내 지시는 낮은 계산 오버헤드로 실행하는 한 "더미"지시이다. 상기 더미지시는 정상 프로그램 실행에 영향을 주지 않고 실행하도록 선택된다. 즉 그 결과가 사용되지 않는다. 대신에 상기 더미지시의 목적은 적절한 방법으로 상기 대체 복귀 포인트 또는 포인트들을 암호화하는 것이다.
한 실시예에서 상기 기능이 기대된 방식으로 상기 루틴으로 복귀되는때 상기 기능의 실행은 상기 기대된 복귀 포인트로 되돌아가기 전에 완성되며 상기 더미지시의 실행은 아무런 영향을 받지 않는다. 또다른 실시예에서 상기 기능이 대체 복귀 포인트로 복귀되는때 코드는 상기 정상 복귀 포인트에 저장된 더미지시에 접근하기 위해 실행되며 상기 대체 복귀 포인트의 주소가 더미지시가 나타내는 라이브러리 값으로부터 계산된다. 하기에서는 첨부도면을 참조하여 본 발명을 상세히 설명한다.
도 1 은 외부 방법을 호출하는 컴퓨터 코드의 개략적 도면.
도 2a 는 한 호출 스택과 한 관련된 복귀 포인트 테이블의 개략적 도면.
도 2b 는 한 기능으로의 호출과 관련된 한 대체 복귀 주소를 저장하는 컴퓨터 루틴의 개략적 도면.
도 2c 는 한 기능으로의 호출과 관련된 한 저장된 대체 복귀 주소를 지나 브랜치된 컴퓨터 루틴의 개략적 도면.
도 3a 는 본 발명의 실시예에 따라 한 기능으로의 호출이 있은 후 한 더미지시를 실행하는 컴퓨터 루틴의 개략적 도면.
도 3b 는 본 발명의 실시예에 따라 한 기능으로의 호출이 있은 후 다수의 더미지시를 실행하는 한 컴퓨터 루틴의 개략적 도면.
도 3c 는 본 발명의 실시예에 따라 한 기능으로의 호출이 있기전 한 더미지시를 실행하는 컴퓨터 루틴의 개략적 도면.
도 4 는 본 발명의 실시예에 따라 다수의 복귀 포인트들을 갖는 한 기능호출을 포함하는 루틴의 실행과 관련된 단계를 설명하는 처리흐름도.
도 5a 는 본 발명의 실시예에 따라 정상적으로 복귀되는 기능호출의 개략적 도면.
도 5b 는 본 발명의 실시예에 따라 비정상적으로 복귀되며 발생된 예외를 일으키는 기능 호출의 개략적 도면.
도 6 은 본 발명을 실시하기 위해 적합한 컴퓨터 시스템의 개략적 도면.
도 7 은 본 발명을 실시하기 위해 적합한 한 가상머신의 개략적 도면.
컴퓨터 프로그램에 의해 호출된 기능이 상기 컴퓨터 프로그램으로 복귀되고자 하는때 상기 기능은 다수의 복귀 사이트 또는 포인트중 어느 하나로 복귀될 수 있다. 가령 한 기능이 정상적으로 혹은 기대된대로 복귀될 수 있다. 선택적으로 한 기능이 대체 방식 즉 비정상적으로 복귀될 수 있다. 비정상적인 복귀에 해당하는 비정상적인 복귀 사이트는 대체로 이들이 용이하게 접근될 수 있도록 저장되어야 한다.
한 프로그램내 한 기능으로부터 다른 포인트로의 복귀를 수용하는 몇 개의 구현은 탐색표내의 대체 복귀 사이트를 위한 주소들을 저장한다. 한 대체 복귀주소를 찾기 위해 탐색표를 구현하는 것은 대체로 느리다. 각기 다른 사이트로의 복귀를 수용하는 다른 구현은 한 복귀가 발생되어지는 기능으로의 호출 가까이에 있는 대체 복귀주소와 관련된 데이터를 저장한다. 한 호출 가까이에 있는 자료를 저장함으로 포함하는 이같은 구현은 별도의 공간 오버헤드를 필요로 하거나 하드웨어 성능 패널티를 발생시키고 혹은 정상적인 복귀에 악영향을 미친다.
성능 패널티를 발생시키거나 어떠한 복귀의 효율을 심각하게 저해시키지 않고 기능호출들로부터 다수의 복귀를 구현시키기 위해 복귀들에 상응하는 주소를 위한 데이터가 유용하지 않은 동작을 기본적으로 수행하는 지시내에 포함될 수 있다. 즉 어떠한 것에도 종속되지 않으며 매우 적은 오버헤드 가령 점프 실행보다도 적은 오버헤드로 실행하는 한 지시가 대체 복귀주소를 암호화하기 위해 사용될 수 있다. 어떠한 것에도 기본적으로 종속되지 않으며 무시할 수 있는 오버헤드로 실행되는 한 지시는 더미 지시인 것으로 간주된다. 이같은 지시는 이동지시 또는 검사지시와 같은 지시를 포함한다.
한 이동지시는 레지스터 또는 스택 위치내로 자료를 이동시키기 위해 사용된다. 가령 한 상수를 사용되지 않은 레지스터내로 이동시키도록 된 한 이동지시가 다음과 같은 구문을 가질 수 있다:
mov 상수, 사용되지 않은_reg
상기 구문에서 "사용되지 않은_reg"는 유용한 값을 현재 갖고 있지 않은 어떠한 레지스터일 수 있으며 "상수"는 대체 복귀주소와 같은 데이터를 포함할 수 있다. 한 검사지시는 레지스터의 값에 따른 처리기 플래그를 정하며 다음과 같은 구문을 가질 수 있다.
test 상수, reg
상기 구문에서 "reg"는 어떠한 레지스터일 수도 있으며 "상수"는 대체 복귀주소와 관련된 데이터를 포함할 수 있다.
대체로 더미지시의 실행이 무시할 수 있는 양의 계산 오버헤드를 필요로 하기 때문에 한 기능으로부터의 복귀가 정상적인 때 한 더미지시를 실행하는 것은 컴퓨터 시스템의 전체 성능에 해로운 영향을 미치지 않는다. 다시 말해서, 필요로 하지 않는때 한 더미지시를 실행하는 것은 컴퓨터 시스템의 성능에 아무런 영향을 미치지 않는다. 따라서 대체 복귀를 일으킬 수도 있는 기능호출과 함께 사용하기 위해 더미지시를 구현하는 것은 상기 복귀가 정상적인 복귀이든 혹은 대체 복귀이든 이와는 관계없이 비교적 빠르며 효율적이다.
한 더미지시는 프로그램 또는 루틴내의 어디에든 위치하여질 수 있다. 일례로서 한 더미지시가 루틴내 한 기능으로의 호출직후에 위치하여질 수 있다. 도 3a 와 관련하여 한 루틴내 한 기능으로의 호출후 더미지시를 포함시키는 것은 본 발명의 실시예에 따라 설명될 것이다. 루틴 g()(304)는 지시(308)를 포함한다. 기능 f()로의 호출(308a)은 정상적으로 또는 비정상적으로 복귀될 수 있다.
기능 f()로의 호출(308a)이 복귀되는때 상기 복귀는 복귀 주소(310)에 의해 명시된 루틴 g()(304)내의 위치로 일어난다. 복귀주소(310)는 더미지시(308b)를 나타낸다. 더미지시(308b)는 가령 호출(308a)로부터 기능 f()로의 4바이트와 같은 고정된 오프셋을 갖도록 위치된다.
한 실시예에서 기능 f()로의 호출(308a)이 정상적으로 복귀되는때 더미지시(308b)는 특히 당해분야에 통상의 지식을 가진자가 이해할 수 있는 바와 같이 매 주기마다 다수의 독립된 지시를 수행할 수 있는 현대의 슈퍼스칼라 중앙처리장치(CPU)에서 어떠한 오버헤드도 사용하지 않고 실행된다. 선택적으로 기능 f()로의 호출(308a)이 대체 복귀 포인트로 복귀하는때 이는 더미지시(308b)를 포함하는 바이트를 판독하며 더미지시(308b)내에 암호화된 대체 복귀주소를 호출한다. 그뒤에 실행이 이같은 대체 복귀 포인트로 되돌아가며 이에 의해 상기 대체 복귀를 완성한다.
상기에서 설명한 바와 같이 어떠한 특별한 오버헤드도 사용하지 않고 더미지시(308b)가 실행된 후에 루틴 g()(304)에서의 다음 지시(308c)가 실행된다. 지시(308)는 많은 다른 지시에 앞서거나 뒤이어 일어나게 된다.
한 실시예에서 한 기능으로의 호출은 두 개이상의 선택적 또는 비정상적인 복귀를 가질 수 있다. 가령 한 기능으로의 호출이 다수의 가능한 예외와 관련될 수 있는데 이에 대해서는 도 5a 및 5b 와 관련하여 하기에서 상세히 설명될 것이다. 두 개 이상의 비정상적 복귀가 가능한때 다수의 더미지시는 각 비정상적 복귀주소가 관련된 더미지시를 가질 수 있도록 한 기능호출 가까이에 포함될 수 있다. 다수의 더미지시는 또한 한 단일 더미지시가 한 레지스터 또는 스택 위치에 관련된 모든 데이터를 보유하는데 불충분하는 경우에 구현될 수 있기도 하다.
도 3b 는 본 발명의 한 실시예에 따른 한 기능으로의 호출이 있는 뒤에 다수의 더미 지시를 실행하는 한 컴퓨터 루틴의 개략적인 표시도이다. 도시된 바와 같이 루틴 g()(324)는 지시(328)를 포함한다. 지시(328)는 루틴 g()(324)내 어느곳에든 위치하여질 수 있다. 다시 말해서 지시(328)는 루틴 g()(324) 중앙에 혹은 루틴 g()(324) 끝에 혹은 루틴 g()(324) 시작 가까이에 위치하여 질 수 있다. 기능 f()로의 한 호출(328a)이 복귀되는때 상기 복귀는 복귀주소(330)로 표시된 한 위치로 발생된다. 복귀주소(333)는 첫 번째 더미지시(328b)를 나타낸다. 첫 번째 더미지시(328b)가 실행된 뒤에 첫 번째 더미지시(328b)를 뒤따르는 더미지시들이 실행된다. 마지막으로 "N번째" 더미지시(328c)가 실행된다.
가령 더미지시(328b, 328c)와 같은 각 더미지시는 호출(328a)로부터 고정된 오프셋을 갖는 곳에 위치하여 상기 더미위치가 호출(328a)에 대하여 용이하게 찾아질 수 있도록 한다. 모든 더미지시의 전체 실행은 각 더미지시가 개별적으로 아무런 오버헤드를 사용하지 않기 때문에 매우 적은 오버헤드를 사용한다. 다음의 지시(328d)는 "N번째" 더미지시(328c)가 실행된 후에 실행된다.
일반적으로 한 더미지시는 다수의 복귀 사이트를 가지는 한 기능으로의 호출이 있은 뒤에 위치할 필요가 있는 것은 아니다. 더미지시들은 또한 다수의 복귀 사이트를 갖는 한 기능으로의 호출 이전에도 위치할 수 있다. 도 3c 와 관련하여 한 루틴내의 한 기능으로 호출이 있기 전에 더미지시를 삽입하는 것은 본 발명의 한 실시예에 따라 설명될 것이다. 도시된 바와 같이 루틴 g()(344)은 더미지시(348a)로의 한 호출을 포함하는데 상기 더미지시는 기능 f()로의 한 호출(248b)이전에 발생된다. 더미지시(348a)는 기능 f()로의 호출로부터 고정된 오프셋을 갖도록 위치하여진다. 즉 각 시간 더미지시(348a)는 루틴 g()(344)내의 기능 f()로의 호출(248b) 이전에 발생되어 더미지시(348a)가 기능 f()로의 호출(248b)과 관련하여 같은 오프셋이 되는 곳에 있게 된다. 한 실시예에서 상기 오프셋은 비록 오프셋이 다양하게 변화될 수 있기는 하나 4바이트이다. 기능 f()로의 호출(348b)이 복귀되는때 상기 복귀는 복귀주소(350)로 표시된 위치로 일어난다. 설명된 실시예에서 복귀주소(350)에 의해 표시된 위치는 지시(348a)를 포함한다.
도 4 와 관련하여서 한 프로그램내에 담긴 루틴의 실행과정에 한 기능호출을 실행시킴과 관련된 단계는 본 발명의 한 실시예에 따라 설명될 것이다. 당해분야에 통상을 지식을 가진자가 알 수 있는 바와 같이 실행하는 한 루틴은 결국에 가서는 한 기능호출에 도달할 수 있다. 단계(402)에서 한 루틴에 의해 호출된 기능의 실행이 시작된다. 이같은 기능의 실행과정중에 발생되는 조건들이 상기 기능으로의 호출이 결국 정상적인 복귀 또는 비정상적인 또는 대체의 복귀를 발생시킬 것인가를 결정한다.
단계(402)에서 호출된 기능의 실행이 결국 정상적인 복귀를 발생시킨때 처리흐름은 단계(404)로 브랜치되며 이곳에서 호출된 기능의 실행이 완성된다. 상기 호출된 기능의 실행이 완성된 후에 상기 기능은 복귀주소 즉 단계(406)에서의 정상적인 복귀주소에 의해 명시된 위치로 복귀된다. 설명된 실시예에서 복귀주소에 의해 명시된 위치는 더미지시 가령 도 3a 에서 도시된 바와 같은 더미지시를 포함한다. 일반적으로 한 더미지시는 프로그램의 전체 실행과 관련된 내부 상태를 변경시키지 않고 한 상수를 내장한 "어떠한 오버헤드도 갖지 않는" 지시일 수 있다. 더미지시들은 한 이동지시 그리고 검사지시 등을 포함할 수 있다.
더미지시가 단계(412)에서 실행된 후 상기 루틴은 계속 실행된다. 일반적으로 루틴의 계속된 실행은 추가 지시호출 및 복귀와 같은 다양한 지시의 실행을 포함한다. 실행하기 위한 아무런 지시도 남아있지 않은때 상기 루틴의 실행은 종료된다.
단계(402)에서 호출된 기능의 실행으로 되돌아가서 호출된 기능의 실행이 대체 즉 비정상적인 복귀가 요구되도록 하는때 처리흐름은 대체 복귀주소가 메모리로부터 적재되는 단계(408)로 진행된다. 특히 한 실시예에서 상기의 대체 복귀주소는 오프셋만큼 증가된 정상적인 복귀주소로부터 적재된다.
일단 대체 복귀주소가 적재되기만 하면 상기 기능으로부터 단계(410)에서 대체 복귀주소로 표시된 위치로 점프가 일어난다. 한 대체 주소로의 복귀를 수행하는때 더미지시가 "데이터"로써 처리되며 이에 의해 한 지시를 나타내는 비트가 2진값으로 간주될 수 있다는 사실을 이용한다. 일례로써 한 처리기는 다음의 지시를 암호화할 수 있다.
mov #1234, reg1
상기 지시는 16진법 상수 "1234"를 이동시키며 이는 바이트 순서 "5B 00 00 12 34"로써 레지스터 "reg1"내로의 한 대체 복귀주소일 수 있다. 비록 암호화 지시가 각기 다른 처리기 타입 사이에서 변화할 수는 있으나 어떠한 암호화도 기본적으로는 지시타입 가령 "이동", 첫 번째 피연산자 가령 상수 "1234", 그리고 두 번째 피연산자 가령 레지스터 "reg1"를 포함하는 지시의 모든 부분을 나타낼 것이다.
한 컴파일러는 한 더미지시가 상기에서 설명된 바와 같이 더미 이동 지시의 첫 번째 피연산자로써 대체 복귀주소를 포함하도록 배치된다. 따라서 한 지시의 포맷에 대한 지식을 갖게 되면 가령 한 대체 복귀주소와 같은 상수값 정보가 정수값으로써 지시의 2 내지 5바이트를 판독함으로써 얻어질 수 있다.
당해분야에서 통상을 지식을 가진 자가 이해할 수 있는 바와 같이 상기 더미지시는 일종의 패턴을 형성시키며 이들 지시 비트의 몇 개는 고정되고 몇 개는 가변적이다. 상기 고정된 비트는 그렇지 않았더라면 지시가 실행하기 비싸거나 프로그램의 정상 실행과 간섭하는 부작용을 갖기 때문에 변경되지 않을 수 있다. 일례로써 몇 개의 고정된 비트는 "이동"과 같은 지시타입을 나타낼 수 있다. 상기 지시에서의 가변적 비트는 대체 복귀 포인트의 주소와 같은 임의값을 암호화하도록 사용될 수 있다. 일레로써 더미지시 "5B 00 00 12 34"에서 바이트 "5B"는 고정된 부분으로써 레지스터 "reg1"로의 이동을 나타내며 "00 00 12 34"는 가변 부분일 수 있다. 일반적으로 더미 지시의 가변부분은 사용된 특정 머신 지시 세트에 따라 다수의 비연속적 부분을 포함하는 지시 비트의 어떠한 조합으로 구성될 수 있다.
단계(410)으로부터 대체 복귀주소로 점프가 있게된 후에 처리흐름이 단계(413)로 진행되며 이때 상기 대체 복귀주소와 관련된 코드가 실행된다. 다음에 단계(414)에서 실행이 종료될때까지 프로그램 실행이 계속된다.
다수의 복귀 주소는 다양한 프로그래밍 언어 수단을 구현하기 위해 유용하다. 일례로써 더미지시들은 예외를 발생시킬 수 있는 기능 호출을 갖는 루틴 실행을 용이하게 하도록 사용될 수 있다. 호출된 기능이 한 예외를 발생시킬 때 상기 예외들은 호출된 기능에 의해 처리되지 않을 수 있다. 오히려 상기 기능의 호출자는 상기 기능에 의해 발생된 예외를 처리한다. 도 5a 및 5b 는 한 기능의 개략적 표시도면으로써 정상적으로 복귀되거나 예외를 발생시키고 따라서 본 발명의 실시예에 따라 비정상적으로 복귀됨을 도시한다. 루틴 g()(504)는 기능 f()(512)를 호출하는 시도 블럭(508)을 포함한다. 루틴 g()(504)는 기능 시도(508)의 예외중에 발생하는 예외들을 처리하도록 배치된 예외 처리기(510)를 더욱더 포함한다.
기능 f()(512)이 호출된때 그리고 정상적으로 복귀되어 어떠한 예외도 기능 f()(512)에 의해 발생되지 않는때 기능 f()(512)는 도 5a 에서 도시된 바와 같이 시도블럭(508)으로 복귀된다. 특히 기능 f()(512)는 정상적인 복귀주소(516)에 의해 표시된 시도블럭(508)내의 위치로 복귀된다. 설명된 실시예에서 정상적인 복귀주소(516)에 의해 표시된 위치는 도 3a 와 관련하여 상기에서 설명된 바와 같은 더미지시이다.
도 5b 에서 도시된 바와 같이 기능 f()(512)의 실행이 예외가 발생되도록 한때 기능 f()(512)은 예외 처리기(510)로 복귀된다. 즉 한 예외가 기능 f()(512)에 의해 발생된때 예외 처리기(510)와 관련된 한 지시를 나타내는 대체 복귀주소(520)에 의해 명시된 위치로 한 복귀가 발생된다.
실행 처리기(510)와 기능 f()(512)에 의해 발생된 상기 예외를 처리한 후에 기능 f()(512)는 결국 시도 블럭(508) 이후에 최초의 지시(522)에서 실행을 계속한다. 한 실시예에서 상기 더미지시는 이동지시 또는 검사지시와 같은 지시이며 상기의 지시는 대체 복귀주소(520)가 상기 지시 스트림내에 저장될 수 있도록 한다.
본 발명은 어떠한 적절한 컴퓨터 시스템에서도 구현될 수 있다. 특히 다수의 복귀 포인트들은 도 7 과 관련하여 하기에서 설명되는 바의 가상머신과 같은 어떤 적절한 가상머신을 사용하여 구현될 수 있다. 도 6 은 본 발명을 구현하기 위해 적합한 범용 컴퓨터 시스템을 도시한다. 컴퓨터 시스템(730)은 주기억장치(734)(판독전용기억장치, 또는 ROM) 및 주기억장치(736)(임의접근기억장치, 또는 RAM)를 포함하는 기억장치에 연결된 처리기(732)(중앙처리장치, CPU)를 포함한다.
컴퓨터 시스템(730) 또는 특히 CPU(732)는 당해분야에서 통상의 지식을 가진 자가 알 수 있는 바와 같이 가상머신을 지원하도록 배치될 수 있다. 컴퓨터 시스템(730)에서 지원되는 가상머신의 한 예가 도 7 과 관련하여서 하기에서 설명될 것이다. 당해분야에서 알려진 바와 같이 ROM은 CPU(732)에 단방향으로 데이터 및 지시를 전달할 수 있도록 하며 RAM은 양방향으로 데이터와 지시를 전달할 수 있도록 사용된다. CPU(732)는 처리기를 포함한다. 주기억장치(734, 736) 모두는 적절한 컴퓨터 판독가능 메디아를 포함할 수 있다. 2차 기억장치 매체(738)는 대용량 기억장치로써 CPU(732)에 양방향으로 연결되며 추가의 데이터 기억장치 용량을 제공한다. 상기 대용량 기억장치(738)는 컴퓨터 판독가능 매체이며 컴퓨터 코드, 데이터 등을 포함하는 프로그램을 저장하도록 사용될 수 있다. 대용량 기억장치(738)는 하드 디스크 또는 테이프와 같은 저장매체이며 주기억장치(734, 736)보다는 느리다. 대용량 기억장치(738)는 자기 또는 페이퍼 테이프 판독기 그밖의 다른 알려진 장치의 형태를 취할 수 있다. 대용량 기억장치(738)내에 담기는 정보는 가상메모리와 같은 RAM(736)의 일부로써 표준방식으로 포함될 수 있다. 특정 주기억장치(734)는 CD-ROM과 같은 것으로써 CPU(732)로 데이터를 단방향으로 보낼 수 있다.
CPU(732)는 비디오 모니터, 트랙볼, 마이스, 키보드, 마이크로폰, 터치-감각 표시장치, 변환기 카드 판독기, 자기 또는 페이퍼 테이프 판독기, 태블릿, 스타일러스, 음성 또는 수기 인식기, 또는 다른 컴퓨터와 같은 잘 알려진 입력장치를 포함하는 하나 또는 둘이상의 입출력 장치(740)에 연결될 수도 있다. 마지막으로 CPU(732)는 선택적으로 지역 네트워크, 인터넷 네트워크, 또는 인트러넷 네트워크와 같은 컴퓨터 또는 통신 네트워크에 712로 도시된 바와 같은 네트워크 연결을 사용하여 연결될 수 있다. 이와 같은 네트워크 연결로 CPU(732)는 네트워크로부터 정보를 수신할 수 있고 혹은 상기 설명된 단계를 수행하는 과정에서 네트워크로 정보를 출력할 수도 있음을 알 수 있다. CPU(732)를 사용하여 실시되기 위한 일련의 지시로 표시되는 이와 같은 정보는 네트워크로부터 수신될 수 있고 네트워크로 출력될 수 있으며 반송파내에 포함된 컴퓨터 데이터 신호 형태를 한다. 상기 설명된 장치들은 컴퓨터 하드웨어 및 소프트웨어 기술분야에서 잘 알려져 있다.
상기에서 설명된 바와 같이 한 가상머신은 컴퓨터 시스템(730)에서 실행될 수 있다. 도 7 은 도 7 의 컴퓨터 시스템(730)에 의해 지원되는 한 가상머신을 개략적으로 도시한 도면이다. 상기 도면은 본 발명을 구현하는데 적합하다. 가령 본원 출원인인 선 마이크로시스템스에 의해 개발된 자바 프로그래밍 언어로 기록된 컴퓨터 프로그램이 실행되는때 소스 코드(810)는 컴파일-시간 환경(805)내에서 컴파일러(820)로 제공된다. 컴파일러(820)는 소스 코드(810)를 바이트 코드(830)로 번역한다. 일반적으로 소스 코드(810)는 소스 코드(810)가 소프트웨어 개발자에 의해 창작되는때 바이트 코드(830)로 번역된다.
바이트 코드(830)는 가령 도 6 의 네트워크(712)와 같은 네트워크를 통하여 재생되고, 다운로드되거나 그렇지 않으면 분산될 수 있으며 혹은 도 6 의 주기억장치(734)와 같은 기억장치에 기억된다. 설명된 실시예에서 바이트 코드(830)는 플랫포옴 인디펜던트이다. 즉 바이트 코드(830)는 적절한 가상머신(840)을 실행시키는 컴퓨터 시스템에서 실행될 수 있다. 일례로써 자바 환경에서 바이트 코드(830)는 자바 가상머신을 실행시키는 한 컴퓨터 시스템에서 실행될 수 있다.
바이트 코드(830)는 가상머신(840)을 포함하는 한 실행시간 환경(835)으로 제공된다. 실행시간환경(835)은 도 7 의 CPU(732)와 같은 처리기를 사용하여 실행될 수 있다. 가상머신(840)은 컴파일러(842), 인터프리터(844), 그리고 한 실행시간 시스템(846)을 포함한다. 바이트 코드(830)는 컴파일러(842) 또는 인터프리터(844)로 제공될 수 있다.
바이트 코드(830)가 컴파일러(842)로 제공되는때 바이트 코드(630)내에 포함된 방법이 상기 설명된 바와 같이 머신 지시내로 컴파일된다. 다른 한편 바이트 코드(830)가 인터프리터(844)로 제공되는때 바이트 코드(830)는 한 번에 한 바이트 코드씩 인터프리터(844)로 판독된다. 인터프리터(844)는 다음에 인터프리터(844)내로 각 바이트 코드가 판독되는때 각 바이트 코드에 의해 규정된 동작을 수행한다. 일반적으로 인터프리터(844)는 바이트 코드(830)를 처리하며 계속해서 바이트 코드(830)와 관련된 동작을 수행한다.
한 방법이 한 동작 시스템(860)으로부터 호출된때 만약 그같은 방법이 해석된 방법으로써 호출될것이라는 것이 결정된다면 실행시간 시스템(846)은 인터프리터(844)로부터 그같은 방법을 얻어낼 수 있다. 반면에 만약 그같은 방법이 컴파일된 방법으로 호출될것이라는 것이 결정된다면 실행시간 시스템(846)은 컴파일러(842)를 작동시킨다. 컴파일러(842)가 다음에 바이트 코드(830)으로부터 머신지시를 발생시키며 머신언어 지시를 실행한다. 일반적으로 머신언어 지시는 가상머신(840)이 종료되는때 버려진다.
비록 본 발명의 몇가지 실시예만이 설명되었으나 본 발명은 본 발명의 사상을 벗어나지 않는 범위에서 다른 특정 형태로 실시될 수도 있는 것이다. 일례로서 비록 본 발명이 두 개의 복귀 포인트를 갖는 관점에서 설명되었으나 두 개의 복귀 포인트 이상을 가지는 기능으로의 호출을 위해 실시될 수 있기도 하다. 일반적으로 하나의 더미지시는 하나의 호출된 기능과 관련된 각 복귀 포인트를 위한 컴퓨터 루틴내에 추가되어질 수 있다.
몇가지 머신지시 세트는 길이가 32비트로 제한되는데 이는 완전한 복귀 주소를 나타내기 위해 필요한 32비트 또는 64비트 값을 암호화하는데 충분하지 않다. 이같은 경우에 32비트 또는 64비트 값을 직접 암호화하는 더미지시를 구성하는 것은 불가능하다. 그러나 본 발명은 그럼에도 불구하고 한 대체복귀 포인트로 신속한 접근을 제공하도록 적용될 수 있다. 상기 더미지시내에 직접 대체 복귀 주소를 암호화하는 대신 정상 복귀 포인트와 대체 복귀 포인트 사이의 거리가 암호화될 수 있다. 이같은 거리값이 제공되는때 대체 복귀 포인트는 정상 복귀 주소로 상기 거리를 추가시키므로써 용이하게 계산될 수 있다. 선택에 따라서는 한 더미지시내의 주소 일부가 다수의 더미지시를 사용하여 암호화될 수 있는데 이에 대해서는 도 3b 와 관련하여 상기에서 설명된 바와 같다. 일례로서 첫 번째 더미지시가 대체 복귀주소의 첫 번째 16비트를 내장할 수 있으며 두 번째 더미지시는 남아있는 32비트 값중 16비트를 내장할 수 있다.
다수의 복귀 포인트를 가지는 기능을 포함하는 한 프로그램의 실행과 관련된 단계가 다양하게 변경될 수 있다. 가령 도 3c 와 관련하여 상기에서 설명된 바와 같이 특정 기능과 관련된 한 더미지시가 기능호출을 선행하여 일어날 수 있다. 다시 말해서 이동지시 또는 검사지시와 같은 한 더미지시가 본 발명의 사상을 벗어나지 않는 한도에서 더미지시와 관련된 상기 기능호출 이전에 실행될 수 있다.
다수의 복귀 포인트의 사용은 다양한 각기 다른 목적을 위해 적절하다. 상기에서 설명된 바와 같이 다수의 복귀 포인트가 예외의 발생을 용이하게 하기 위해 사용될 수 있다. 비록 상기 예외가 본 발명에 따라 어떻게 구현되는가에 대한 단 하나의 예가 설명되었을 뿐이지만 상기 예외의 구현은 본 발명의 사상을 벗어나지 않는 한도에서 다양하게 변경될 수 있다. 다수의 복귀 포인트 사용은 가령 비-지역 복귀를 사용하는 개인용(스몰토크-베이스) 시스템과 같은 시스템에서 사용하기에 적합할 수 있다. 다수의 복귀 포인트가 사용된때 관련된 더미지시는 모두 다수의 복귀 포인트를 가지는 기능으로의 호출이 있은 후에 위치할 수 있다. 상기 더미지시는 상기 기능으로의 호출이 있기 전에 위치한다. 마지막으로 상기 더미지시는 더미지시중 몇가지가 호출이 있기전에 위치하도록 분산될 수 있으며 상기 더미지시의 나머지는 호출이 있은 후에 위치하게 하게 될 수 있다. 따라서 본 발명의 상기 예는 본 발명을 제한하는 것으로 간주되어서는 안된다.

Claims (15)

  1. 다수의 복귀 포인트중 하나와 관련된 자료가 효율적으로 얻어질 수 있도록 하기 위해 다수의 복귀 포인트중 하나와 관련된 데이터를 저장하기 위한 컴퓨터 구현 방법으로써
    다수의 복귀 포인트가 한 기대된 복귀 포인트 및 첫 번째 대체 복귀 포인트를 포함하며
    상기 기능이 루틴으로부터 분리되어지는 루틴이 실행되는 동안 루틴내에서부터 한 기능을 호출하고,
    상기 기능의 실행을 시작하며
    상기 기능으로부터 상기 루틴으로 복귀시키고 이때 상기 기대된 복귀 포인트에 의해 표시된 루틴내의 한 위치로 상기 기능이 복귀되며 그리고
    상기 루틴내의 첫 번째 지시를 실행하며 이때 상기 첫 번째 지시를 실행하는 것이 컴퓨터 오버헤드를 거의 사용하지 않으며 루틴의 실행에 영향을 미치지 않음을 포함하는 컴퓨터 구현 방법.
  2. 제 1 항에 있어서, 기대된 복귀 포인트로 복귀되기 전에 상기 기능의 실행을 완성하고 상기 기대된 복귀 포인트가 상기 루틴내 첫 번째 지시를 표시하도록 배치됨을 더욱더 포함하는 상기 기능이 기대된 루틴으로 복귀되는 컴퓨터 구현 방법.
  3. 제 2 항에 있어서, 루틴의 실행을 계속함을 더욱더 포함하는 컴퓨터 구현 방법.
  4. 전술한 항중 어느 한 항에 있어서, 상기 기능의 실행을 시작하는 것이 첫 번째 대체 복귀 포인트를 적재함을 포함하고 상기 첫 번째 대체 복귀 포인트가 기대된 복귀 포인트로부터 고정된 오프셋이 떨어진 위치의 지시에 의해 표시되는 컴퓨터 구현 방법.
  5. 제 4 항에 있어서, 호출된 기능의 실행을 버리고
    첫 번째 대체 복귀 포인트로 점프함을 더욱더 포함하는 컴퓨터 구현 방법.
  6. 다수의 복귀 포인트중 하나와 관련된 데이터가 효율적으로 얻어질 수 있도록 하기 위해 다수의 복귀 포인트중 하나와 관련된 데이터를 저장하고 상기 다수의 복귀 포인트가 기대된 한 복귀 포인트 및 첫 번째 대체 복귀 포인트를 포함하며
    처리기,
    상기 처리기에 연결되고 루틴이 실행되는 동안 루틴내로부터의 한 기능을 호출하도록 배치되고 이때 상기 기능은 상기 루틴으로부터 분리되어 있는 한 호출 메카니즘,
    상기 처리기에 연결되고 상기 기능의 한 실행을 시작하도록 배치된 한 실행 메카니즘, 그리고
    상기 기능으로부터 상기 루틴으로 복귀되도록 배치되며 상기 기능이 기대된 복귀 포인트에 의해 표시된 루틴내의 한 위치로 복귀되고, 상기 실행 메카니즘이 상기 루틴내 첫 번째 지시를 실행하도록 더욱더 배치되며, 상기 첫 번째 지시를 실행하는 것이 계산 오버헤드를 거의 사용하지 않으며 루틴의 실행에 영향을 주지 않는 한 복귀 메카니즘을 포함하는 컴퓨터 시스템.
  7. 제 6 항에 있어서, 상기 기능이 기대된 대로 상기 루틴으로 복귀되도록 되며 상기 실행 메카니즘이 기대된 복귀 포인트로 복귀되기 전에 상기 기능의 실행을 완성하도록 되고 상기 기대된 복귀 포인트가 상기 루틴내 첫 번째 지시를 표시하도록 배치된 컴퓨터 시스템.
  8. 제 6 항 또는 7 항에 있어서, 상기 실행 메카니즘이 첫 번째 대체 복귀 포인트를 적재하도록 배치된 적재기를 포함하며 상기 첫 번째 대체 복귀 포인트가 상기 기대된 복귀 포인트로부터 고정된 오프셋이 떨어진 위치의 지시에 의해 표시되는 컴퓨터 시스템.
  9. 다수의 복귀 포인트중 하나와 관련된 데이터가 효율적으로 얻어질 수 있도록 하기 위해 다수의 복귀 포인트중 하나와 관련된 데이터를 저장하고, 다수의 복귀 포인트가 기대된 복귀 포인트를 포함하며,
    상기 루틴이 실행되는 동안 한 루틴내로부터의 한 기능을 호출하기 위한 컴퓨터 코드, 이때 상기 기능은 상기 루틴으로부터 분리되고
    상기 기능의 실행을 시작하기 위한 컴퓨터 코드,
    상기 기능으로부터 상기 루틴으로 복귀하기 위한 컴퓨터 코드, 이때 상기 기능은 상기 기대된 복귀 포인트에 의해 표시된 루틴내의 한 위치로 복귀되며,
    상기 루틴내 한 첫 번째 지시를 실행하기 위한 컴퓨터 코드, 이때 상기 첫 번째 지시를 실행하는 것이 계산 오버헤드를 거의 사용하지 않으며 상기 루틴의 실행에 영향을 주지 않는, 그리고
    상기 컴퓨터 코드를 저장하는 컴퓨터 판독가능 매체를 포함하는 컴퓨터 프로그램 프로덕트.
  10. 제 9 항에 있어서, 상기 컴퓨터 판독가능 매체가 반송파내에 포함된 한 데이터 신호, CD-ROM, 컴퓨터 디스크, 컴퓨터 테이프, 그리고 컴퓨터 디스크 드라이브로 구성된 그룹으로부터 선택되는 컴퓨터 프로그램 프로덕트.
  11. 다수의 복귀 포인트중 하나와 관련된 데이터가 효과적으로 얻어질 수 있도록 하기 위해 다수의 복귀 포인트중 하나와 관련된 데이터를 저장하고, 다수의 복귀 포인트가 기대된 한 복귀 포인트 및 첫 번째 대체 복귀 포인트를 포함하며,
    루틴을 실행하고,
    상기 복귀가 실행되는 동안 상기 루틴내로부터 한 기능에 접근하고, 상기 기능이 상기 루틴으로부터 분리되어 있으며,
    상기 기능의 실행을 시작하고,
    상기 기능으로부터 루틴으로 복귀되며, 이때 상기 기능이 기대된 복귀 포인트에 의해 표시된 루틴내의 위치로 복귀되고, 그리고 상기 루틴내의 첫 번째 지시를 실행하며 이때 첫 번째 지시를 실행하는 것이 상기 루틴의 전체 실행속도에 영향을 미치지 않도록 함을 포함하는 컴퓨터 구현방법.
  12. 제 11 항에 있어서, 기대된 바대로 루틴으로 상기 기능이 복귀되는때를 결정하고, 그리고
    기대된 대로 상기 기능이 상기 루틴으로 복귀되는때 기대된 복귀 포인트로 복귀되기 전에 상기 기능의 실행을 완성하며, 상기 기대된 복귀 포인트가 루틴내의 첫 번째 지시를 나타내도록 배치됨을 더욱더 포함하는 컴퓨터 구현방법.
  13. 전술한 항중 어느 한 항에 있어서, 상기 기능의 실행을 시작하는 것이 상기 첫 번째 대체 복귀 포인트를 나타냄을 포함하며, 상기 첫 번째 대체 복귀 포인트가 상기 기대된 복귀 포인트로부터 고정된 오프셋이 떨어져 위치한 한 지시에 의해 나타내지는 컴퓨터 구현방법.
  14. 제 13 항에 있어서, 상기 기능의 실행을 버리고, 그리고 상기 첫 번째 대체 복귀 포인트로 점프함을 더욱더 포함하는 컴퓨터 구현방법.
  15. 루틴을 실행하기 위해, 상기 루틴이 다수의 복귀 포인트와 한 기능호출을 포함하며,
    상기 루틴의 실행을 시작하고,
    상기 기능호출의 실행을 시작하며,
    상기 루틴과 관련된 첫 번째 복귀주소를 적재하고,
    상기 기능호출로부터 첫 번째 복귀주소로 복귀하고,
    첫 번째 복귀주소와 관련된 코드를 실행하며, 이때 첫 번째 복귀주소와 관련된 코드를 실행하는 것이 이진값으로써 한 지시와 관련된 비트를 해석함을 포함하고, 그리고 상기 루틴의 실행을 계속함을 포함하는 컴퓨터 구현방법.
KR10-1998-0041793A 1997-10-06 1998-10-07 다수의복귀사이트를구현하기위한방법및그장치 KR100519827B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/944,326 1997-10-06
US08/944,326 US6553426B2 (en) 1997-10-06 1997-10-06 Method apparatus for implementing multiple return sites
US8/944,326 1997-10-06

Publications (2)

Publication Number Publication Date
KR19990036884A true KR19990036884A (ko) 1999-05-25
KR100519827B1 KR100519827B1 (ko) 2005-12-16

Family

ID=25481199

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1998-0041793A KR100519827B1 (ko) 1997-10-06 1998-10-07 다수의복귀사이트를구현하기위한방법및그장치

Country Status (6)

Country Link
US (1) US6553426B2 (ko)
EP (1) EP0908813B1 (ko)
JP (1) JP4005724B2 (ko)
KR (1) KR100519827B1 (ko)
CN (1) CN1122212C (ko)
DE (1) DE69807021T2 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6754828B1 (en) * 1999-07-13 2004-06-22 Intel Corporation Algorithm for non-volatile memory updates
US7032100B1 (en) 1999-12-17 2006-04-18 Koninklijke Philips Electronics N.V. Simple algorithmic cryptography engine
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
US7196710B1 (en) 2000-08-23 2007-03-27 Nintendo Co., Ltd. Method and apparatus for buffering graphics data in a graphics system
US7185329B1 (en) 2003-03-28 2007-02-27 Applied Micro Circuits Corporation Use of different color sequences for variables of different sizes and different semantics
US7207032B1 (en) * 2003-03-28 2007-04-17 Applied Micro Circuits Corporation Expanding a software program by insertion of statements
US20040250054A1 (en) * 2003-06-09 2004-12-09 Stark Jared W. Line prediction using return prediction information
KR100658918B1 (ko) * 2004-03-29 2006-12-15 주식회사 팬택앤큐리텔 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
US8266232B2 (en) * 2005-10-15 2012-09-11 International Business Machines Corporation Hardware processing of commands within virtual client computing environment
US8392895B2 (en) * 2009-01-13 2013-03-05 Mediatek Inc. Firmware extension method and firmware builder
US20140283060A1 (en) * 2013-03-15 2014-09-18 Oracle International Corporation Mitigating vulnerabilities associated with return-oriented programming
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
GB2551548B (en) * 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
US10152338B2 (en) * 2016-12-14 2018-12-11 International Business Machines Corporation Marking external sibling caller routines

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5856153A (ja) 1981-09-30 1983-04-02 Fujitsu Ltd サブル−チンリタ−ン方式
DE4211966A1 (de) * 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5606682A (en) * 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
JP2857600B2 (ja) * 1995-05-11 1999-02-17 松下電器産業株式会社 プロセッサ及びプログラム翻訳装置

Also Published As

Publication number Publication date
EP0908813A3 (en) 1999-04-28
DE69807021D1 (de) 2002-09-12
CN1234549A (zh) 1999-11-10
KR100519827B1 (ko) 2005-12-16
CN1122212C (zh) 2003-09-24
DE69807021T2 (de) 2002-12-12
US6553426B2 (en) 2003-04-22
JP4005724B2 (ja) 2007-11-14
EP0908813A2 (en) 1999-04-14
EP0908813B1 (en) 2002-08-07
US20020062400A1 (en) 2002-05-23
JPH11224195A (ja) 1999-08-17

Similar Documents

Publication Publication Date Title
KR100519827B1 (ko) 다수의복귀사이트를구현하기위한방법및그장치
EP1232430B1 (en) Optimization of n-base typed arithmetic expressions
US6324686B1 (en) Just in time compiler technique
JP4485198B2 (ja) Javaアクセラレータを備えたプロセッサシステム
US4777588A (en) General-purpose register file optimized for intraprocedural register allocation, procedure calls, and multitasking performance
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
US7987473B1 (en) Accelerated class check
EP0997816B1 (en) Method and apparatus for selecting ways to compile at runtime
US6253317B1 (en) Method and apparatus for providing and handling traps
US20020056078A1 (en) Program optimization
US6886094B1 (en) Apparatus and method for detecting and handling exceptions
RU2334268C2 (ru) Команды для поддержки обработки шифрованного сообщения
EP1301854B1 (en) Method and apparatus for creating efficient native methods that extend a bytecode interpreter
RU2327204C2 (ru) Обработка управляющей команды аутентификации сообщения для обеспечения безопасности данных
US8327122B2 (en) Method and system for providing context switch using multiple register file
US6779188B1 (en) Apparatus and method for improved devirtualization of method calls
US20050086455A1 (en) Method and apparatus for generating interrupts for specific types of instructions
US9342319B1 (en) Accelerated class check
JP3211423B2 (ja) 分岐命令実行方法および分岐命令実行装置
US20050240914A1 (en) Portable just-in-time compilation in managed runtime environments
US20050076172A1 (en) Architecture for static frames in a stack machine for an embedded device
JPH01291327A (ja) 処理モード先取り制御方式
KR100246465B1 (ko) 마이크로프로세서 스택 명령어의 수행사이클을 줄이기 위한 장치 및 그 방법
von Mayrhauser et al. Teaching engineering disciplines to tool developers
JPH05224947A (ja) 言語処理プログラム実行装置

Legal Events

Date Code Title Description
A201 Request for 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: 20120907

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130906

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140901

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20150827

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20160831

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20180903

Year of fee payment: 14

EXPY Expiration of term