KR20050022282A - 트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체 - Google Patents

트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체 Download PDF

Info

Publication number
KR20050022282A
KR20050022282A KR1020040057672A KR20040057672A KR20050022282A KR 20050022282 A KR20050022282 A KR 20050022282A KR 1020040057672 A KR1020040057672 A KR 1020040057672A KR 20040057672 A KR20040057672 A KR 20040057672A KR 20050022282 A KR20050022282 A KR 20050022282A
Authority
KR
South Korea
Prior art keywords
point
data object
lock
basic block
intersection
Prior art date
Application number
KR1020040057672A
Other languages
English (en)
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 KR20050022282A publication Critical patent/KR20050022282A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Abstract

프로그램 흐름 그래프(program's flow graph)의 데이터 흐름 분석(data flow analysis)을 이용하여 데이터 오브젝트의 수명(lifetime)을 결정하는 XLANG/s 컴파일(compilation) 방법이 개시된다. 흐름그래프는 추상 컴퓨터 명령어에 따라 생성된다. 깊이-우선 순서가 기본 블록에 할당되고 기본 블록간의 우위 관계가 결정된다. 흐름그래프내에 루프가 존재하는지, 또는 만약 있다면 그 루프가 식별되는지 여부에 관해 결정을 내린다. 데이터 오브젝트에 대해 생성 포인트(creation point), 파괴 포인트(destruction point) 및 락 포인트(lock point)가 결정된다. 명령어들이 컴퓨터 코드에 삽입되어 생성 포인트에서 적어도 하나의 데이터 오브젝트를 생성하고, 파괴 포인트에서 데이터 오브젝트를 파괴하고, 락 포인트에서 데이터 오브젝트를 잠근다.

Description

트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체{DATA FLOW ANALYSIS OF TRANSACTIONAL PROCESSES}
본 발명은 일반적으로 컴퓨터 소프트웨어 컴파일러에 관한 것이다. 구체적으로는, 본 발명은 컴파일 시에 프로그램 코드의 정적 데이터 흐름 분석을 수행하는 XLANG/s 컴파일 방법에 관한 것이다. 보다 구체적으로는, 본 발명은 이러한 정적 데이터 흐름 분석을 통해 컴파일 시에 데이터 오브젝트 생성, 락(lock), 파괴 포인트를 자동적으로 결정하는 방법에 관한 것이다.
기업은 인터넷 또는 월드 와이드 웹과 같은 분산 환경을 통해 다른 엔티티와 상호작용하는 웹 서비스를 사용할 수 있다. 이러한 상호작용이 성공적으로 달성될 수 있도록 하기 위해, 하나 이상의 프로토콜이 참가자로 또는 참가자로부터 메세지를 전달하기 위해 적소에 있어야 하며, 특정 비지니스 애플리케이션 또한 각 참가자 측 적소에 있어야 한다. 이러한 상호작용은 메세지에 의해 주도(message-driven)된다. 예를 들어, 바이어는 판매자에게 구입 주문을 전송한다. 그러면 판매자는 재고를 점검해서 주문된 품목을 제공할 수 있는지 여부를 결정한다. 만약 그렇다면, 판매자는 바이어에게 가격과 함께 ACK을 전송한다. 마지막으로, 바이어는 판매자의 제안(및/또는 아마 다른 주문이 있는)을 받아들이거나 거절한다. 이 실례를 통해 명백하듯이, 각 참가자들의 비지니스 애플리케이션은 메세지의 수신에 반응한다.
웹 서비스는 상술한 것과 같은 메세지 기반 비지니스 트랜잭션을 구현하는 소프트웨어 코드에 기반한 컴퓨터 프로그램을 사용한다. 이러한 소프트웨어 코드는 이어서 프로그래밍 언어로 구현된다. 프로그래밍 언어는 일반적으로 프로그래머로 하여금 프로그램의 상태를 수용하는 변수와 같은 하나 이상의 데이터 오브젝트를 선언할 수 있도록 해 준다.
상술된 비지니스 트랜잭션 구현을 가능하게 하는 메세지 지향 언어에서, 데이터 오브젝트가 어떤 외부 소스로부터 입력으로서 수신되는 메세지가 될 수 있다. 이러한 메세지는 상당히 크기 때문에, 다수의 데이터 오브젝트의 저장은 상당한 양의 메모리 리소스를 소비할 수 있다. 그러므로 데이터 오브젝트가 일단 소프트웨어의 적절한 작동을 위해 더 이상 필요하지 않다면, 데이터 오브젝트는 삭제되거나 파괴되어야 한다. 일반적으로, 하나 이상의 데이터 오브젝트를 파괴하는 코드 명령어인 파괴 포인트는, 프로그래머에 의해 수작업으로 소프트웨어 코드에 삽입된다. 프로그래머는 일반적으로 파괴될 특정 데이터 오브젝트 및 이러한 삭제가 발생할 코드내에서의 위치를 선택한다. 일반적으로, 프로그래머는 데이터 오브젝트가 마지막으로 사용된 바로 후에 파괴 포인트를 두려 한다. 이러한 방식으로, 데이터 오브젝트는 가능한 짧은 간격동안 메모리에서 유지된다.
수작업으로 수행되기 때문에, 그 결과 데이터 오브젝트를 파괴하는 이러한 일반적인 방법은 파괴 포인트 배치 및 삭제될 데이터 오브젝트를 선택하는 데 있어 사람이 실수를 할 가능성이 있다. 메세지 기반 트랜잭션을 구현하는 프로그램에 있어 추가의 단점이 존재한다. 예를 들어, 이러한 프로그램에서, 메세지가 중단될 수 있고 또는 다른 오류들이 메세지를 재전송하거나 오류를 수정하거나 보완하는 일부 다른 프로세스를 시도하는 특별한 "보완" 소프트웨어 컴포넌트를 호출할 수 있다. 보완 컴포넌트(compensation component)는 소프트웨어 코드에 복잡도를 더해서, 코드내에서 파괴 포인트를 어디에 둘 것인가 하는 적절한 위치를 결정하는 프로그래머의 태스크를 더 어렵게 만든다. 게다가, 메세지 기반 트랜잭션 프로그램 코드는 여러 연산이 병렬로 수행되기 때문에, 그리고 여러 연산 중 일부가 완료되지 않거나 실행 시에 보완 컴포넌트를 호출할 수 있다는 가능성 때문에 특별히 복잡할 수 있다. 그러므로, 처리 중에 취할 수 있는 모든 가능한 논리 경로를 고려해야 하기 때문에, 이러한 상황에서 파괴 포인트의 위치를 선택하는 것은 어렵다.
파괴 포인트의 일반적인 배치의 단점에 대한 상술은, 데이터 오브젝트 처리 연산의 모든 다른 유형 뿐만 아니라, "생성" 및 "락" 포인트에도 똑같이 적용된다. 생성 포인트는 데이터 오브젝트가 생성되는 소프트웨어 코드내의 위치이다. 이상적으로, 생성 포인트는 또한 메모리 리소스의 소비를 줄이기 위해, 데이터 오브젝트가 처음 사용되기 바로 전에 위치해야 한다. 락 포인트는 변수와 같이 일련의 공유된 오브젝트가 현재의 트랜잭션과 관련이 없는 프로그램 컴포넌트에 액세스할 수 없도록 만드는 소프트웨어 코드내의 위치이다. 이러한 방식으로, 데이터 오브젝트에 할당된 값은 트랜잭션 동안 외부의 컴포넌트에 의해 변경될 수 없으며, 따라서 처리동안 오류를 피할 수 있다. 생성 포인트처럼, 락 포인트도 가능한 한 데이터 오브젝트의 사용 가까이에 위치해야 하고, 불필요하게 변수를 잠그는 것을 피해야 한다. 그러나, 메세지 기반 트랜잭션을 구현하는 소프트웨어 프로그램에서, 락 포인트의 부적절한 배치는, 메세지 오류 또는 다른 형태의 오류 발생시, 프로그램이 장애를 가지게 하거나 또는 심지어 연산을 멈추게 할 수도 있다. 복잡한 소프트웨어에서, 프로그래머가 모든 가능한 논리 경로를 추적하고, 부수적인 보완 컴포넌트들이 최적의 위치(만약 오류가 발생할지라도 장애를 일으키지 않으면서 데이터 오브젝트의 사용에 가능한 한 가장 가까운 곳)에 락 포인트를 두는 것은 점점 어려워진다.
당업자들에게 알려져 있듯이, 컴파일러는 프로그래머에 의해 사용되는 하이-레벨 코드를 실행 시 좀 더 빨리 수행될 수 있는 기계-판독가능 언어로 변환한다. 컴파일 시, 컴파일러는 이러한 논리 경로의 흐름그래프를 생성하기 위해 프로그램에 의해 취해질 수 있는 다른 가능한 논리 경로를 매핑한다. 흐름그래프는 프로그램 정확성을 의미론적으로 분석하는데 사용되고, 가장 효율적인 코드를 생성하는 데 사용된다.
기존의 컴파일러는 생성, 락 및/또는 파괴 포인트의 최적의 위치를 결정할 수 있는 그러한 방법에서, 프로그램을 분석하고, 및/또는 흐름그래프를 생성하는 기능이 부족하다. 게다가, 기존의 컴파일러는 이러한 포인트들을 프로그램 속에 삽입하여 대응하는 데이터 오브젝트가 실행 시 적절한 포인트에서 생성되고, 잠겨지고 및/또는 파괴되는 능력이 부족하다.
따라서, 데이터 오브젝트 연산을 위한 적절한 포인트를 결정할 수 있는 그러한 방법으로 메세지 기반 트랜잭션을 구현할 수 있는 XLANG/s과 같은 소프트웨어를 분석하는 방법이 필요하다. 구체적으로 필요한 것은, 프로그램이 데이터 오브젝트를 처리하는 분석을 지원할 수 있는 프로그램의 흐름그래프를 생성하는 방법이다. 보다 구체적으로 필요한 것은, 흐름그래프를 생성하고, 그러한 흐름그래프에서 프로그램의 데이터 오브젝트에 대한 적절한 생성, 락 및 파괴 포인트를 결정하는 정적 데이터 흐름 분석을 수행하는 컴퓨터 코드를 컴파일하는 방법이다. 보다 더 구체적으로 필요한 것은, 그러한 프로그램과 관련된 흐름그래프 분석을 수행하고 데이터 오브젝트 오류가 실행 시 발생하는지 여부를 결정하는 컴파일러이다.
전술한 제한 및 단점의 견지에서, XLANG/s 컴파일 방법은 프로그램의 흐름 그래프의 데이터 흐름 분석을 이용하여 변수와 같은 데이터 오브젝트의 수명을 결정한다. 이 방법에 따르면, 흐름그래프가 추상 컴퓨터 명령어에 따라 생성되고, 이 때 흐름그래프는 복수의 기본 블록 및 데이터 오브젝트를 지니고 있고, 추상 명령어는 컴퓨터 코드로부터 형성된 구문분석 트리로부터 번역된다. 깊이 우선 순서가 기본 블록에 할당되고 기본 블록들간의 우위 관계가 결정된다. 흐름그래프내에 루프가 있는지, 만약 있다면 루프가 식별되는가에 관한 결정이 내려진다. 또한 데이터 오브젝트의 사용에 관한 결정이 내려지고, 복수의 기본 블록에 대한 사용, 식별된 루프, 우위 관계 및 깊이 우선 순서에 따라 데이터 오브젝트의 생성 포인트, 파괴 포인트 및 락 포인트가 결정된다. 생성 포인트에서 데이터 오브젝트를 생성하고, 파괴 포인트에서 데이터 오브젝트를 파괴하고, 락 포인트에서 데이터 오브젝트를 잠그는 명령어가 프로그램 코드에 삽입된다.
이하의 바람직한 실시예의 상세한 기술 및 전술한 요약은 첨부된 도면과 함께 참조될 때 더 잘 이해될 수 있다. 본 발명의 도시를 위해, 본 발명의 예시적인 실시예가 도면에 도시된다; 그러나, 본 발명이 개시된 특정 방법 및 수단에 제한되는 것은 아니다.
개관
XLANG/s 코드를 그 코드의 논리적 연산을 나타내는 하나 이상의 흐름그래프로 구문분석(parse)하는 XLANG/s 컴파일 방법(compilation method)이 개시된다. 이 방법은 예를 들어, 흐름그래프내의 변수와 같은 데이터 오브젝트를 식별하고, 그 데이터 오브젝트상에서 수행되는 연산(operation)을 추적한다. 이 방법은 또한 그 오브젝트를 처음 사용하기 전에 가능한 한 늦게, XLANG/s내의 최적의 위치에 이러한 오브젝트에 대한 생성 포인트를 둔다. 또한, 이 방법은 이러한 오브젝트가 마지막으로 사용된 후에 가능한 한 빨리, 이러한 데이터 오브젝트에 대한 파괴 포인트를 둔다. 이 방법은 또한 공유 데이터 오브젝트를 처음 사용하기 전에 가능한 한 가까이, 최적 위치에서 이러한 오브젝트에 대해 락 포인트를 둔다: 이 위치에서 교착상태에 빠지는 코드(deadlocked code)를 피할 수 있다.
예시적인 컴퓨팅 환경
도 1은 본 발명이 구현되기에 적절한 컴퓨팅 시스템 환경(100)의 예를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 단지 적절한 컴퓨팅 환경의 한 가지 예일 뿐이며, 본 발명의 사용 범위 또는 기능성에 어떤 제한을 두는 것은 아니다. 또한 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 구성요소 중 어느 하나 또는 그 조합에 관해 어떤 종속성 또는 요건을 갖는 것으로 해석되어져서는 안 된다.
본 발명은 많은 기타 범용 또는 특정 목적 컴퓨팅 시스템 환경 또는 구성에서 동작될 수 있다. 본 발명을 사용하기에 적절한 컴퓨팅 시스템, 환경, 및/또는 구성의 잘 알려진 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능 가전 제품, 네트워크 PC, 미니 컴퓨터, 메인 프레임 컴퓨터, 위의 시스템 및 장치 중 어느 하나를 포함하는 분산 컴퓨팅 환경 등이 있지만 이에 제한되는 것은 아니다.
본 발명은 컴퓨터에 의해 수행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어의 일반적인 컨텍스트로 설명될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하고 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 커뮤니케이션 네트워크 또는 기타 데이터 전송 매체를 통해 연결된 원격 처리 장치에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서도 수행되어 질 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈 및 기타 데이터는 메모리 기억 장치를 포함하는 로컬 또는 원격 컴퓨터 기억 장치 매체 둘 다에 위치할 수도 있다.
도 1에서, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110)의 형태인 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트로는 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 포함한 각종 시스템 컴포넌트를 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 콘트롤러, 주변장치 버스 및 각종 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 포함한 몇가지 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 구조는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 일반적으로 여러 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 불휘발성 매체, 이동식 및 이동불가식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 기억장치 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 기억장치 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보 저장을 위해 모든 방법과 기술로 구현된 휘발성 및 불휘발성, 이동식 및 이동불가식 매체를 포함한다. 컴퓨터 기억장치 매체는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 기억장치, 자기 카세트, 자기 테이프, 자기 디스크 기억장치 또는 기타 자기 기억장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 기타 모든 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 일반적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에서 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 전달 매체 정보를 포함한다. "피변조 데이터 신호"라는 용어는, 하나 이상의 특성 세트(characteristics set)를 가지고 있는 신호 또는 신호에서 정보가 암호화되는 것과 같은 방식으로 신호가 변경된 것을 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 다이렉트 유선 연결과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되어야 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리의 모양으로 컴퓨터 기억장치 매체를 포함한다. 시동 시 컴퓨터(110) 내의 구성요소들 사이의 정보의 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 일반적으로 ROM(131)에 저장되어 있다. RAM(132)은 일반적으로 즉시 액세스 가능하고/가능하거나 현재 처리 장치(120)에 의해 동작되고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 그리고 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/이동불가식, 휘발성/불휘발성 컴퓨터 기억장치 매체를 포함한다. 단지 예로서, 도 1은 이동불가식, 불휘발성 자기 매체로의 기록 또는 그로부터의 판독을 위한 하드 디스크 드라이브(141), 이동식, 불휘발성 자기 디스크(152)로의 기록 또는 그로부터의 판독을 위한 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식, 비휘발성 광 디스크(156)로의 기록 또는 그로부터의 판독을 위한 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/이동불가식, 휘발성/불휘발성 컴퓨터 기억장치 매체로는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 디지털 비디오 테이프, 고체(solid state) RAM, 고체 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 일반적으로 인터페이스(140)와 같은 이동불가식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 일반적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 기억장치 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 컴퓨터(110)의 다른 데이터에 대한 기억장치를 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장한다. 여기서 주의할 점은 이 컴포넌트들이 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 있고 다를 수도 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)에 다른 번호가 주어졌다는 것은 적어도 이들이 서로 다른 사본(copy)이라는 것을 나타낸다. 사용자는 키보드(162), 일반적으로 마우스라고 알려진 포인팅 디바이스(161), 트랙볼(trackball) 또는 터치 패드 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 및 다른 입력 장치는 종종 시스템 버스에 연결된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트, USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 연결될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 연결될 수 있다. 모니터 이외에, 컴퓨터는 또한 스피커(197) 및 프린터(196) 등의 다른 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 연결될 수 있다.
컴퓨터(110)는 하나 이상의 원격 컴퓨터로의 논리적 연결을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드일 수 있고, 일반적으로 컴퓨터(110)와 관련하여 위에서 설명한 엘리먼트의 대부분 또는 그 전부를 포함하지만, 도 1에는 메모리 저장 장치(181)만이 도시되어 있다. 도시된 논리적 연결로는 LAN(171) 및 WAN(173)이 있지만, 이에 제한되는 것은 아니다. 이러한 네트워킹 환경은 사무실, 회사 전체에 걸친 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 연결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 일반적으로 인터넷과 같은 WAN(173) 상에서의 통신을 설정하기 위한 모뎀(172) 또는 다른 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해 시스템 버스(121)에 연결된다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 그 예로서, 도 1은 메모리 장치(181)에 위치하고 있는 원격 애플리케이션 프로그램(185)을 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 연결은 예시적인 것이며 이 컴퓨터들 사이의 통신 링크를 설정하는 다른 수단이 사용될 수 있다는 것을 이해할 것이다.
예시적인 분산 컴퓨팅 프레임워크 또는 아키텍쳐
각종 분산 컴퓨팅 프레임워크가 있어왔고, 퍼스널 컴퓨팅 및 인터넷의 통합의 견지에서 개발되고 있다. 개인 및 비즈니스 사용자들은 애플리케이션 및 컴퓨팅 디바이스에 대해, 단절없이 서로 작동가능하고(seamlessly interoperable) 웹-가능한(web-enabled) 인터페이스를 제공받고, 이것은 컴퓨팅 활동을 점점 더 웹 브라우저 또는 네트워크 지향적이 되도록 한다.
예를 들어, MICROSOFT®의 .NET 플랫폼은 웹-기반 데이터 스토리지, 및 다운로드 가능한 장치 소프트웨어와 같은 서버, 빌딩-블록 서비스(building-block service)를 포함한다. 말하자면, .NET 플랫폼은 (1)전체 범위의 컴퓨팅 장치를 함께 동작하도록 하고, 모든 컴퓨팅 장치에서 사용자 정보가 자동적으로 갱신되고 동기화되도록 하는 기능, (2)HTML보다는 XML을 많이 사용하여 가능해진, 웹 사이트에 대한 대화식 기능(interactive capability)이 증가되었고, (3)예를 들어, 이메일, 또는 Office.NET과 같은 소프트웨어 등 각종 애플리케이션의 관리에 대해 중앙 시작 지점으로부터 커스토마이즈드된 액세스(customized access) 및 제품 및 서비스를 사용자에게 전달하는 것을 특징으로 하는 온라인 서비스, (4)중앙 집중화된 데이터 스토리지, 이것은 효율성을 증가시키고 사용자와 장치간에 정보의 동기화 뿐만 아니라 정보에 대한 액세스를 더욱 용이하게 해 주며, (5)이메일, 팩스 및 전화와 같은 각종 통신 매체를 통합하는 기능, (6)개발자에 대해, 재사용할 수 있는 모듈을 생성하고, 그렇게 함으로써 생산성을 증가시키고 프로그래밍 오류의 수를 감소시킬 수 있는 기능, 및 (7)많은 기타 크로스-플랫폼(cross-platform) 통합 특징들을 또한 제공한다.
컴퓨팅 장치에 상주하는 소프트웨어와 관련하여 예시적인 실시예들이 본 명세서에 기술되어 있으며, 본 발명의 하나 이상의 부분은 또한 운영 체제, API 또는 코프로세서(coprocessor) 및 요청 오브젝트간의 "미들 맨(middle man)" 오브젝트를 통해 구현될 수 있으며, 그리하여 서비스들은 또한, 기타 분산 컴퓨팅 프레임워크에서, .NET의 모든 언어, 서비스를 통해 수행될 수 있고, 지원될 수 있고 또는 액세스될 수 있다.
예시적인 실시예
웹 서비스의 개관
기업은 인터넷, 또는 월드 와이드 웹과 같은 분산 환경을 통해 점점 더 자주 상호작용하고 있다. 예를 들어, 소비자는 다가올 여행을 위해 렌트 카의 가격을 알고 싶어 할 수 있다. 소비자는 여행 웹사이트와 같은 인터넷 상의 중간 업체를 통해, 가격을 요청할 수 있다. 중간 업체는, 소비자의 요청을 수신하자마자, 각종 렌트 카 업체들에게 시세 요청을 전송한다. 렌트 카 업체들로부터 응답을 수신한 후에, 중간 업체는 그 응답을 소비자에게 전송한다. 그후, 소비자는 차를 예약하고 중간 업체를 통해 예약에 대해 지불한다. 상술한 대로 메세지를 이용하여 비지니스가 구현된다. 예를 들어, 중간 업체로의 소비자의 요청은 제안된 카 렌탈 사항, 예를 들어 : 렌탈 날짜 및 시간, 차의 유형, 추가적으로 보험을 원하는지, 소비자의 이름 및 주소, 신용카드 정보 및/또는 등을 포함하는 중간 업체로의 전자 메세지로서 구현된다. 중간 업체의 시세 요청은 렌트 카 업체로부터의 응답들과 마찬가지로 또 다른 메세지이고, 이 메세지는 렌트 카 업제들로부터 중간 업체로, 중간 업체로부터 소비자로 전달되고, 예약은 마침내 소비자에게 전송된다.
비지니스 프로세스 및 이러한 프로세스들을 수행하는 데 사용되는 메세지들을 자동화하도록 설계된 컴퓨터 언어가 XLANG/s이며, 이것은 이하에 더 상세히 기술된다. 이해할 수 있듯이, XLANS/s를 이용하여 구현된 프로세스들이, 오류 없이 제대로 수행하는 것은 중요하다. 또한, 이러한 프로세스는 통신 링크 실패 등과 같은 외부 오류를 보완할 수 있을 만큼 충분히 굳건해야 한다. 본 발명의 실시예의 애플리케이션은 굳건하고 오류 없는 방식으로 이러한 프로세스들을 완수하는 XLANG/s 프로그래밍 및 컴파일 방법을 제공한다.
XLANG/s 개관
XLANG/s은 각종 기술 컴포넌트 또는 서비스를 사용하여, 비지니스 프로세스 구현 뿐만 아니라 비지니스 프로세스의 논리적인 시퀀싱(sequencing)을 기술하는 언어이다. XLANG/s은 본 명세서에 개시된 것보다 제목이 "XLANG/s Language Specification"이고 version 0.55, Copyright ⓒ Microsoft Corporation 1999-2000인 문서, 및 제목이 "XLANG Web Services For Business Process Design" (Satish Thatte 저)이고 Copyright ⓒ Microsoft Corporation 2001인 문서에 더 상세히 기술되어 있으며, 이 두가지 문서 전부가 본 명세서에 포함된다. XLANG 언어는 확장된 마크 업 언어(Extensible Markup Language, 이하 "XML"이라고 함)로 표현된다. 상술된 대로, 비지니스 프로세스는 소프트웨어 코드를 이용하여 구현될 수 있다. XLANG/s 언어는 비지니스 프로세스 및 프로토콜을 기술하는 데 사용되는 현대적이고, 특정 영역에 관한 것이고, 특정 목적 언어이다. XLANG/s은 또한 선언적 언어이고, 이것은 XLANG/s이 비지니스 프로세스의 단계, 이 단계들간의 관계, 및 이들의 의미 및 상호작용 등을 기술하고 구현하는 명시적인 명령어 세트를 정의한다는 것을 의미한다. XLANG/s 코드는 단지 서술적이기만 한 것이 아니다; 이것은 또한 실행가능하도록 설계된다. XLANG/s의 서술적인 본질과 특정 의미 때문에, 그 결과 실행 가능한 코드는 결정론적이다; 즉, 수행하는 비지니스 프로세스의 행동이 XLANG/s 명령어 집합의 의미에 의해 잘 정의된다. 그러므로, XLANG/s를 검토함으로써, 이러한 코드에 의해 수행되는 비지니스 프로세스를 결정할 수 있다. 실행가능한 형태의 이러한 비지니스 프로세스의 정의는 "오케스트레이션(orchestration)"이다.
XLANG/s은 많은 인터넷 표준들과 호환가능하다. XLANG/s은 지원되는 표준들로서 XML, XSLT(http://www.w3.org/TR/xslt), XPATH(http://www.w3.org/TR/xpath), XSD(XML schema definition:스키마 정의), 및 WSDL(web service description language:웹 서비스 기술 언어)을 사용하도록 설계되어 있고, 오브젝트 및 메세지를 기반으로 하는 .NET와 함께 작동하기 위해 내장된 지원(embedded support)을 지니고 있다. WSDL은 제목이 "Web Service Description Language(WSDL) 1.1"이고 W3C 노트 2001년 1월, Microsoft 및 IBM 연구기관 발행, Copyright ⓒ 2000 Ariba, International Business Machines Corporation, Microsoft인 문서에 기술되어 있으며, 이는 그 전부가 본 명세서에 포함된다. XLANG/s 언어는 문법상으로 C#와 유사하므로, 정확한 문법을 이해하기 위해 참고로 C#의 사양을 참조할 수 있다. XLANG/s에 내장된 의미론은 제목이 "Business Process Execution Language for Web Service" 버전 1.1이고, 2003년 3월 3일자, Microsoft, IBM, BEA에 의해 비지니스 프로세스 의미의 정의에 대해 출간된 문서에서 정의된 것을 반영하고 있으며, 또한 이는 그 전부가 본 명세서에 포함된다. 웹 서비스 사양에 대한 비지니스 프로세스 실행 언어는 일반적으로 "BPEL4WS" 사양으로 간주된다. 그러므로, 이해할 수 있듯이, XLANG/s를 사용하는 것은 비지니스 프로세스에 적용될 때 가장 이점이 된다.
XLANG/s은 비지니스 프로세스를 정의하는 데 사용되는 하이-레벨(high-level) 구성체(constructs)의 풍부한 세트를 정의한다. XLANG/s 명령문은 일반적으로 두 가지 범주 즉, 수신 또는 송신과 같은 독립적으로 행동하는 간단한 명령문 및 간단한 명령문 및/또는 다른 복잡한 명령문을 포함하거나 그룹핑하는 복잡한 명령문 중 하나에 속한다. XLANG/s은 또한 문자열(string) 및 Int32(정수)와 같은 로우-레벨(low-level) 데이터 유형도 지원한다. 예를 들어, 메세지, 포트(메세지들이 전송되고 수신되는 위치), 연관 및 서비스 링크 등과 같은 하이-레벨 데이터 유형도 또한 정의한다. 데이터 유형은 비지니스 프로세스와 관련된 의미를 엄밀하게 정의하는 데 사용되고, "while" 및 "scope"와 같은 프로세스 제어문에 의해 보완된다.
상술된 대로, XLANG/s 서비스는 메세지를 전송 및/또는 수신함으로써 바깥 세상과 통신한다. 메세지 유형은 이러한 메세지의 구조적인 정의이다. 메세지는 연산(예를 들어, 수신, 응답)에 따라 행동하고, 연산은 하나의 비동기의 메세지 또는 메세지의 요청-응답 쌍 둘 중의 하나일 수 있다. 연산은 들어오는 것 또는 나가는 것일 수 있다. 예를 들어, 판매자는 서비스/프로덕트를 제공할 수 있고, 입력 메세지를 통해 구입 주문(잠재적인 바이어로부터)을 받아들임으로써 상호작용이 시작된다. 그 후 판매자는 그 주문이 이행될 수 있다면 바이어에게 ACK(acknowledgement)를 리턴한다. 판매자는 추가의 메세지(선적 통보, 영수증)를 바이어에게 전송할 수 있다. 일반적으로, 이러한 입력 및 출력 연산은 서비스 프로세스라고 하는, 정의된 시퀀스에 따라 일어나는 것이다. 판매자의 서비스는 구입 주문 상호 작용 각각의 상태를 다른 유사한 상호 작용과는 별도로 기억한다. 이것은 특히 바이어가 동일한 판매자와 동시에 많은 구입 프로세스를 진행하는 상황에서 특히 이롭다. 또한 서비스 프로세스의 각 인스턴스는 입력 연산에 자극받지 않고 백그라운드에서 활동(예를 들어, 재고 갱신, 계좌 잔액 갱신)을 수행할 수 있다.
서비스 프로세스는 여러 연산을 이용하는 상호 작용을 나타낼 수 있다. 이와 같이 상호 작용도 잘 정의된 시작 및 종료를 지닌다. 이 상호 작용은 서비스 인스턴스로서 간주된다. 인스턴스는 두 가지 중 한가지 방법으로 시작될 수 있다. 서비스는 일부 구현-특정 기능성을 이용하여 명시적으로 인스턴스화될 수 있고, 서비스는 인스턴스 연산이라고 생각되는 행위에서 연산으로 암시적으로 인스턴스화될 수 있다. 서비스 인스턴스는 그 행위를 정의하는 프로세스가 종료될 때 종료된다.
서비스는 인스턴스화되어 확장된 상호작용의 이력에 따라 행동한다. 이러한 서비스로 전송된 메세지들은 올바른 목적지 포트 뿐만 아니라 그 포트를 정의하는 서비스의 올바른 인스턴스에도 전달된다. 포트는 서비스에 의해 메세지가 전송되고 수신되는 끝점(end point)이다. 서비스를 호스팅하는 인프라스트럭처는 이 라우팅을 지원하므로, 각 서비스 구현으로 하여금 인스턴스 라우팅에 대해 커스텀 메커니즘(custom mechanisim)을 구현할 필요가 있다는 부담을 피할 수 있게 해 준다.
도 2에서는, 두 비지니스 엔티티간에 통신을 가능하게 하는 간략화된 컴퓨터 네트워크가 도시되어 있다. 제1 컴퓨터(220)는, 예를 들어 도 1과 관련하여 상술된 컴퓨터(110), 특정 목적 컴퓨터 등과 같은 모든 유형의 컴퓨팅 장치일 수 있고, 통신 링크(222)를 통해 네트워크(210)에 동작할 수 있게 접속되어 있다. 네트워크(210)는 복수의 컴퓨팅 장치를 서로 연결해주는 모든 유형의 네트워크일 수 있으며, 인트라넷, 인터넷 등일 수 있다. 통신 링크(222)는 유선, 무선, 광학 등의 모든 유형의 통신 매체를 포함할 수 있다. 제2 컴퓨터(230)는 제1 컴퓨터(220)와 같이, 모든 유형의 컴퓨팅 장치일 수 있고, 통신 링크(232)를 통해 네트워크(210)에 동작할 수 있게 접속되어 있다. 통신 링크(232)는 통신 링크(222)와 같이, 모든 유형의 통신 매체일 수 있다. 한 실시예에서, 통신 링크(222,232)는 통신 매체의 같은 유형인 반면, 또 다른 실시예에서 각 통신 링크(222,232)에 의해 적용된 매체는 다르다. 선택적으로, 추가 컴퓨터(224,226)는 제1 컴퓨터(220)에 동작할 수 있게 접속될 수 있다. 이해할 수 있듯이, 추가 컴퓨터는 또한 제2 컴퓨터(230)에 동작할 수 있게 접속될 수 있다(명확히 하게 위해 도 2에서는 도시 생략).
예를 들어, 바이어가 판매자에게 구입 주문을 전송하는 일반적인 공급 체인 상황(supply chain situation)을 고려해보자. 예를 들어, 바이어는 네트워크(210) 및 통신 링크(222,223)를 통해 제1 컴퓨터(220)로부터 판매자의 제2 컴퓨터(230)로 메세지를 전송한다. 바이어와 판매자가 안정된 비지니스 관계를 지니고 있고, 구입 상호 작용과 관련된 문서를 상대 포트와 관련된 URL로 전송하도록 고정적으로 구성되어 있다고 가정해보자. 판매자가 주문에 대한 ACK를 리턴했을 때, ACK는 컴퓨터(220) 또는 선택적으로 추가 컴퓨터(224,226)와 같은 다른 컴퓨터의 바이어 측의 올바른 서비스 인스턴스로 라우팅된다. 이러한 라우팅을 구현하는 한가지 방법은 내장 토큰(예를 들어, 쿠키)을 주문 메세지내에 넣어서 운반하는 것이고, 이 내장 토큰은 연관을 위해 ACK에 복사된다. 토큰은 헤더의 메세지 봉투 또는 비지니스 문서(구입 문서) 그 자체에 있을 수 있다. 각 메세지에서의 토큰의 구조 및 위치는 서비스 기술에서 선언적으로 표현될 수 있다. 이 선언적인 정보는 XLANG/s 가능 인프라스트럭처(compliant infrastructure)로 하여금 토큰을 사용하여 자동적으로 인스턴스 라우팅을 제공할 수 있도록 해 준다.
수명동안, 서비스 인스턴스는 일반적으로 상호 작용과 관련된 다른 참가자들을 나타내는 다른 서비스 인스턴스와의 하나 이상의 대화(conversation)를 유지한다. 대화는 대화에 관련된 메세지를 서로 관련시키고 그 메세지들을 올바른 서비스 인스턴스로 라우팅하는 정교한 전송 인프라스트럭처를 이용할 수 있다. 많은 경우에, 서로 관련된 대화는 둘 이상의 무리를 관련시키거나 교환될 비지니스 문서에 직접 내장된 연관 토큰으로 경량 전송 인프라스트럭처를 이용할 수도 있다. XLANG/s 는 아주 일반적인 메커니즘을 제공함으로써 서비스 인스턴스내의 서로 관련된 연산들의 그룹을 지정하기 위해 연관 시나리오를 다룬다. 연관 토큰 세트는 서로 관련된 그룹내의 모든 메세지들에 의해 공유되는 속성 세트로서 정의될 수 있다. 이러한 속성 세트는 연관 세트(correlation set)라 불린다.
본 발명의 실시예의 기술
데이터 유형, 토큰, 연관 세트 등의 특징은 변수를 이용한 XLANG/s 코드로 구현되어 이러한 특징들을 수행하는 데 필요한 값들을 저장한다. 다른 하이-레벨 소프트웨어 언어의 경우에서도 그러하듯이, XLANG/s은 실행 시간(run time)에 앞서 컴파일러에 의해 컴파일된다. 컴파일 프로세스와 관련된 상세 사항은 당업자들에게 잘 알려져 있으므로 본 명세서에서는 상세히 기술하지 않는다. 본 발명의 실시예는 컴파일 프로세스가 완료된 일부 단계 이후에, XLANG/s 코드 컴파일 프로세스의 일부로서 수행된다. 예를 들어, 본 명세서에서 프로그래머는 비지니스 프로세스의 문맥 기술을 기입하고, 이 문맥 기술은 XLANG/s와 같은 비지니스 프로세스 언어의 문법 및 사양을 따른다고 가정한다. 또한 문맥 프로그램이 구문분석기(parser)에 의해 판독되고, 이것은 입력이 형식이 잘 갖추어져 있다는 것을 보증하고, 문맥 표현에는 문맥상 또는 문법 오류가 없다는 것을 의미하고, 따라서 구문분석기는 문맥 표현을 정규 하이-레벨 구문분석 트리 표현(canonical high-level parse tree representation)으로 변환한다는 것을 가정한다. 마지막으로, 본 명세서에서는 하이-레벨 구문분석 트리가 분석되어 로우-레벨 추상 명령어 시퀀스를 생성한다고 가정한다. 이러한 명령어가 적절한 시퀀스로 수행될 때, 이것은 비지니스 프로세스 작성자가 문맥 표현으로 표현했던 액션들을 수행할 것이다.
상술된 대로, 컴파일 프로세스의 전술된 단계의 결과는 로우-레벨 추상 명령어 시퀀스이다. 그리고 나서, 명령어들은 본 발명의 실시예의 입력으로서 사용된다. 이해할 수 있듯이, 추가적인 단계 또는 프로세스가 본 발명의 실시예를 개시하기에 앞서 일어날 수 있고, 마찬가지로, 상기 단계 전부 또는 일부는 통합될 수 있다. 이러한 모든 상황은 동등하게 본 발명의 실시예에 호환될 수 있다. 실시예의 입력을 그 결과로 만들어내는 이전에 기술된 프로세스의 예가 도 3과 관련하여 이하에 기술되어 있다. 이해할 수 있듯이, 본 명세서에 개시된 실례는 명확성을 위해 간략화되었으므로, 대부분의 상황에서 더 많은 양의 문맥 코드 및 더 큰 구문분석 트리, 그 결과로 생기는 더 긴 명령어 세트를 포함한다.
첫째로, 비지니스 프로세스의 문맥 기술이 제공된다. 상술된 대로, 기술은 바람직하게 XLANG/s와 같이 이용되는 비지니스 프로세스 언어의 문법 및 사양을 따른다. 이 기술이 본 발명의 실시예에 따른 전체 컴파일 프로세스로부터 기인하는 프로그램에 의해 궁극적으로 수행될 비지니스 프로세스의 양상들을 기술한다는 것을 이해할 것이다. 비지니스 프로세스의 문맥 기술의 예시적인 단편은 이하와 같다:
이해할 수 있듯이, 비지니스 프로세스의 문맥 기술은 비지니스 소프트웨어에 의해 수행될 수 있는 이러한 비지니스 프로세스의 모든 양상을 기술할 수 있으므로, 위의 단편은 단지 예시적인 것이다. 이 특정 단편은 계좌에서 자금을 인출하는 요청과 관련된 비지니스 프로세스를 기술하고 있다. 특히, 위의 문맥 기술과 관련하여, 메세지는 myport라는 포트에서 수신된다. 메세지는 계좌에서 일정 금액을 인출하라는 명령어를 포함하고, 이것은 myAccount라고 라벨을 붙인다. 인출 후의 잔액이 0보다 적을 경우, 결과 메세지는 "초과인출" 값으로 할당되어 그 계좌가 충분하지 못한 자금을 가지고 있다는 것을 나타낸다. 그렇지 않을 경우, 결과 메세지는 "OK" 값으로 할당된다. 마지막으로, 결과 메세지는 응답으로서 최초 메세지의 전송자에게 다시 전송된다.
두번째로, 상술했듯이, 구문분석기가 위의 개시된 문맥 표현을 판독하고 텍스트에 포함된 형태와 구조를 캡처하는 구문분석 트리를 구축한다. 도 3에서, 위의 문맥 기술에 기반한 예시적인 구문분석 트리(300)가 제공된다. 도 3에 보여지는 바와 같이, 문맥 기술의 논리적인 구조는 구문분석 트리(300)의 레이아웃으로부터 명백해진다. 구문분석 트리(300)가 그래픽적으로 생성될 필요가 없고, 사실상 순간적인 것이고 본 발명에 개시된 전체 컴파일 프로세스의 일부로서 생성된 내부 프로덕트일 수 있다는 것을 이해할 것이다.
구문분석 트리(300)는 문맥 기술의 논리적인 구조를 나타내는 블록으로 구성되어 있다. 예를 들어 블록(305)은, receive(myPort,msgAccount) 명령문을 나타내고, 이것은 블록(303)에 이르며, 이 블록은 이어서 balance = myAccount.Withdraw(msgAccount) 명령문을 나타낸다. 도 3에서 볼 수 있듯이, balance = myAccount.Withdraw(msgAccount) 명령문은 위의 receive 명령문보다 논리적으로 좀 더 복잡한 명령문이며, 블록(303)내에서 논리적인 표현을 더 필요로 한다. 블록(305-313)은 문맥 기술의 명령어에 따라 msgAccount에서 인출한 후에 myAccount의 잔액을 결정하는 것과 관련된 로직을 나타낸다. 이해할 수 있듯이, 본 발명의 실시예는 동등하게 모든 관례와 호환할 수 있기 때문에, 문맥 기술의 논리적 구조를 표현하는 데 사용되는 정확한 그래픽 표현은 그 어떠한 관례든지 고수할 수 있다.
블록(315)은 if(balace < 0) 명령문의 "if"부분을 나타낸다. 블록(317)은, 블록(319-323)과 함께, 위의 if(balace < 0) 명령문에 따라, myAccount의 잔액이 0보다 작은지 여부를 결정하는 것과 관련된 로직을 나타낸다. 블록(325) 및 블록(333)은 블록(317)과 관련하여 내려진 결정의 결과에 따라 메세지를 생성하는 로직을 나타낸다. 예를 들어, 블록(317)에서 결정된 잔액이 0보다 작을 경우, 메세지는 블록(325) 및 내부 블록(327-331)에 따라 생성된다. 이해할 수 있듯이, 블록(325-331)은 위의 문맥 기술의 msgResult = "overdrawn" 명령문을 나타낸다. 만약 블록(317)에서 결정된 잔액이 0보다 클 경우, 메세지는 블록(333) 및 내부 블록(335-339)에 따라 생성된다. 이해할 수 있듯이, 블록(333-339)은 msgResult = "okay" 명령문을 나타낸다. 마지막으로, 블록(341)은 send(myPort, msgResult) 명령문을 나타내며, 이것은 블록(317-323)의 잔액 결정에 따라 블록(325-331) 또는 블록(333-339) 둘 중 하나에서 생성된 메세지를 전송하는 것을 기술하고 있다.
그리고 나서 구문분석 트리는, 수행될 때 비지니스 프로세스를 구현하는 추상 명령어들의 시퀀스로 번역된다.
이해할 수 있듯이, 실제 명령어 리스트는 임의의 형태를 취할 수 있고, 임의의 이러한 형태는 동등하게 본 발명의 실시예와 일치되기 때문에, 위의 리스트된 명령어들은 단지 명령어 리스트를 나타내는 것이다. 또한, 위의 번호 및 삽입된 설명은, 본 발명의 실시예와 일치되므로, 본 발명의 실시예에서 사용되는 추상 명령어에서 있을 필요는 없다. 상술한 대로, 추상 명령어 - 그들이 어떤 형태로 표현되었든지 간에 - 는 본 발명의 실시예의 입력으로서 사용된다.
도 4에서, 본 발명의 한 실시예에 따라 XLANG/s 코드를 컴파일하는 방법을 도시하는 흐름도를 보여주고 있다. 도 4에서 보여지듯이, 방법(400)은 비록 간단하게 언급되긴 했지만, 단계(405-440)를 포함하며, 단계(405-440)의 모든 단계들이 본 발명의 실시예에 있을 필요는 없다. 단계(405)에서, 도 3과 관련하여 상술된 추상 명령어와 같은 추상 명령어를 사용하여 흐름그래프가 생성된다. 예시적인 흐름그래프 생성에 관한 상세사항은 도 6a 내지 도 6f와 관련하여 이하에 설명될 것이다. 단계(410)에서, 단계(405)에서 생성된 흐름그래프의 기본 블록에 순서가 매겨지고, 단계(415)에서 각 기본 블록의 우위자가 발견되고, 이것은 도 7과 관련하여 이하에 상세히 설명될 것이다. 단계(420)에서, 루프가 발견되고, 이것 역시 도 8과 관련하여 이하에 상세히 설명될 것이다. 단계(425)에서, 각 기본 블록 내의 데이터 오브젝트 사용이 분석된다. 상술된 대로, 데이터 오브젝트는 변수, 기호(심볼) 등일 수 있다. 단계(430)에서, 이하에 상세히 설명될 도 9의 방법에 따라 하나 이상의 생성 포인트(creation point)가 결정된다. 단계(435)에서, 이하에 상세히 설명될 도 10의 방법에 따라 하나 이상의 파괴 포인트(destruction point)가 결정된다. 마지막으로, 단계(440)에서, 이하의 설명될 도 11a 내지 도 11b의 방법에 따라, 공유된 데이터 오브젝트 각각에 대해 하나 이상의 락 포인트(lock point)가 생성된다.
흐름그래프 구축
본 발명의 한 실시예에 따라, 명령어 리스트를 기본 블록으로 분할하고, 각 기본 블록을 그의 인접한 후임자(successor) 및 전임자(predecessor)로 접속함으로써 흐름그래프가 구성된다. 기본 블록은 연속되는 프로그래밍 명령문, 명령어의 시리즈이며, 제어 흐름은 첫번째 명령문에서 들어가서 중단되거나 블록의 마지막을 제외하고는 분기하는 가능성 없이 마지막 명령문에서 떠난다. 기본 블록에 관한 추가적인 참조는 Aho, Sethi 및 Ullman이 지은 "Compilers:Principles, Techniques, and Tools"에 있으며, 이는 그 전부가 본 명세서에 포함된다. 본 발명의 실시예와 호환가능한 한 예제 알고리즘은 Aho, Sethi 및 Ullman이 지은 "Compilers:Principles, Techniques, and Tools"의 알고리즘 9.1이다. 그러므로, 본 발명의 실시예는 예를 들어 위의 추상 명령어(1-7)에 알고리즘 9.1을 적용한다. 그러므로, 위의 실례에서, 기본 블록은 {1,2,3},{4,5},{6} 및 {7}이다.
전임자와 후임자 찾기
일단 추상 명령어 세트 또는 "명령어 스트림"이 기본 블록으로 분할되면, 블록은 그들의 후임자 및 전임자에게로 양방향으로 접속된다. 제1 기본 블록의 후임자는 단지 그 첫번째 문장이 제1 기본 블록의 마지막 명령어에 의해 도달되는 임의의 블록이다. 그러므로, 위의 실례에서, 기본 블록{1,2,3}의 마지막 명령어는 JumpFalse 명령어이다. 이 명령어는 조건이 거짓일 경우 다른 명령어로 점프를 수행하도록 정의된 것이다; 그렇지 않을 경우, 다음 순서의 명령어가 처리된다. 그러므로 {1,2,3}의 후임자는 {4,5} 및 {6}이다. 전임자는, 이름이 의미하듯이, 후임자의 반대 개념이다. 그 결과, 현재의 실례에서 {4,5}의 전임자는 {1,2,3}이다.
도 5에서, 위에서 리스트된 추상 명령어의 예시적인 흐름그래프(500)가 도시되어 있다. 블록(501)은 기본 블록{1,2,3}을 나타내고, 블록(505)은 기본 블록{4,5}를, 블록(507)은 기본 블록{6}을, 블록(509)은 기본 블록{7}을 나타낸다. 실선은 각 기본 블록간의 후임자 관계를 나타내고, 점선은 전임자 관계를 나타낸다. 예를 들어, 블록(505) 및 블록(507)은 각각 블록(509)으로 실선으로 접속되어 있으므로, 이것은 기본 블록{7}이 기본 블록{4,5} 및 {6}에 대해 후임자라는 것을 나타낸다. 이와 마찬가지로, 블록(509)은 블록(505) 및 블록(507)에 점선으로 접속되어 있으므로, 이것은 기본 블록{4,5} 및 {6}이 기본 블록{7}에 대해 전임자라는 것을 나타낸다.
트랜잭션용 흐름그래프
XLANG/s에서의 트랜잭션은 트랜잭션의 특징을 보여주는 서브-프로세스들을 캡슐화한다. 그러므로, XLANG/s내에 포함된 프로세스는 그 전체가 완료되거나, 또는 그 전체가 실패하거나 둘 중 하나이다. 이해할 수 있듯이, 특정 XLANG/s 트랜잭션의 성공 또는 실패를 계획하는 것은 프로그래머로 하여금 오류에 대해 보완할 수 있을 만큼 굳건한 비지니스 애플리케이션을 생성할 수 있도록 해 준다. 트랜잭션은 예를 들어, 원자형(atomic)이거나 장기 실행(long-running)일 수 있다.
원자형 XLANG/s 트랜잭션은 트랜잭션이 성공적으로 완료되지 않을 경우 아무런 액션이 일어나지 않고 프로그램의 상태도 변하지 않는 소프트웨어 트랜잭션이다. 이것은 성공적으로 완료하거나, 또는 아무 것도 하지 않는, 즉 아무 것도 "저장(commit)"하지 않는다는 점에서 원자형이다. 장기 실행 XLANG/s 트랜잭션은, 그 이름이 의미하듯이, 컴퓨팅 목적에 중요한 소프트웨어 트랜잭션이 일정 기간에 걸쳐 일어나는 것이다. 이러한 트랜잭션 처리동안 어떤 포인트에서든지, 예외가 발생할 수 있다. 장기 실행 트랜잭션에서 예외가 발생하면 또는 "예외가 던져지면(thrown from)", 컴파일러는, 만약 있다 하더라도, 트랜잭션이 성공적으로 수행해온 명령어의 일부일 수 없다.
그 유형에 관계없이, 각 트랜잭션은 바디 프로세스(body process), 0개 이상의 예외 핸들러 프로세스(exception handler process), 및 선택 보완 프로세스(optional compensation process)를 포함한다. 이해할 수 있듯이, 원자형 트랜잭션은 예외 핸들러를 가지지 않는다; 그러나, 원자형 트랜잭션은 다시 시도할 수 있다. 예외 핸들러 프로세스는 트랜잭션 바디의 임의의 명령어가 핸들러가 설계된 종류의 예외를 던질 때마다, 또는 트랜잭션이 중단될 때마다 수행되는 서브-프로세스이다. 보완 프로세스는 트랜잭션 바디에서 수행된 작업을 "되돌리기(undo)" 위해 트랜잭션 커밋(commit)이후에 프로그램의 구성에 따라 수행될 수 있는 서브-프로세스이다. 그러므로, 이해할 수 있듯이, 한 실시예 트랜잭션은 내부 트랜잭션이 커밋할 경우 내포할 수 있지만, 외부 트랜잭션이 중단될 경우, 외부 트랜잭션은 내부 트랜잭션의 예외 핸들러를 호출할 수 있다.
도 6a 내지 도 6f와 관련하여 이하에 기술된 도면은 본 발명의 실시예에 따라 트랜잭션 흐름그래프를 더 도시하는 몇몇 케이스 실례이다. 이러한 설명과 관련하여, Px 표기는 서브-프로세스를 표기하는 데 사용된다. 이 표기에서, 아래첨자 x는 서브-프로세스 P의 식별자이다. 명확히 하기 위해, 본 발명의 실시예가 임의의 복잡한 서브-프로세스를 처리하기 위해 구현된 것이라는 것을 이해함에도 불구하고, 본 명세서에서 도 6a 내지 도 6f와 관련하여 모든 서브-프로세스는 하나의 기본 블록으로 구성되었다고 가정한다. 마찬가지로, 도 6a 내지 도 6f와 관련하여 이하에 사용될 코드 실례는, 본 발명의 실시예와 관련된 코드가 임의의 길이 또는 복잡성을 지닐 수 있으므로 단지 예시적인 것을 이해해야 한다.
장기 실행 트랜잭션
XLANG/s 트랜잭션의 가장 간단한 형태는 예외 핸들러와 보완이 없는 장기 실행 트랜잭션이다. 예를 들어, 이러한 트랜잭션의 문맥 기술은 이하의 하이-레벨 코드를 포함한다.
이것은 이어서, 이하의 추상 명령어 스트림을 생성한다.
다시, 상술된 대로, 이 추상화 명령어 스트림은 넘버링 및 괄호로 묶은 코멘트로 구성되어 있으며, 이것은 설명을 용이하게 하기 위해 삽입되었다. 그러므로 이러한 넘버링 및 코멘트는 본 발명의 실시예에 일치되기는 하지만, 꼭 필요한 것은 아니다. 특별 추상 명령어 BeginTransaction은 그것의 후임자로서 트랜잭션 바디 프로세스 Pbody 및 만약 현재 실례에 있었다면, 모든 예외 핸들러 프로세스를 포함한다. 특별 추상 명령어 CommitTransaction은 그것의 후임자로서 다음 순서의 명령어 및 만약 현재 실례에 있었다면, 트랜잭션 보완 프로세스를 포함한다.
위의 두 특별 추상 명령어는 일반적으로 코드의 다른 영역에 있는 명령어로 점프하거나 분기하도록 야기시킴으로써 프로그램의 직선 수행을 방해하고, 그리하여 이러한 추상 명령어는 기본 블록의 끝을 표시한다. 그러므로, 위의 단편은 3개의 기본 블록을 지니고 있다:{1,2},{3,4},{5}. 도 6a에서, 상술된 기본 블록의 흐름그래프가 도시된다. 블록(601)은 Pstart 명령어에 의해 표시된 추상 명령어 BeginTransaction을 나타내고, 블록(603)은 Pbody 명령어에 의해 표시된 추상 명령어 CommitTransaction을 나타내고, 블록(605)은 Pend 명령어에 의해 표시된 트랜잭션의 끝을 나타낸다. 화살표가 블록(601)에서 블록(603)을 통과하여 블록(605)으로 향하는 프로그램 흐름을 표시한다. 현재의 간단한 실례에서는 명령어들이 분기 또는 보완 없이 순서대로 처리되기 때문에 본 발명의 실시예가 흐름그래프를 3개의 블록(601-605)으로 나눌 필요가 없다는 것을 이해할 것이다.
원자형 트랜잭션
본 실례는 실시예가 장기 실행 트랜잭션과는 달리 원자형 트랜잭션을 어떻게 다루는가를 도시한다. 이해할 수 있듯이, 이하의 기술은 도 6a와 관련하여 상술되었던 장기 실행 트랜잭션의 기술과 유사하다.
이것은 이어서, 이하의 추상 명령어 스트림을 생성하고, 이것은 또한 도 6a와 관련하여 상술되었던 장기 실행 트랜잭션의 것과 유사하다.
본 원자형 트랜잭션 실례에서, CommitTransaction 은 도 6a와 관련하여 상술된 것과 약간 다른 명령어를 포함한다. 트랜잭션이 커밋되는 경우, 제어 흐름은 다음 순서의 명령어로 진행되고, 트랜잭션이 중단되는 경우, 제어 흐름은 트랜잭션의 처음으로 다시 돌아가 루프를 돈다. 그러므로, 이해할 수 있듯이, 원자형 트랜잭션은 실패를 재시도할 수 있기 때문에 암시적인 루프를 형성한다. 도 6b에 상술된 트랜잭션의 흐름그래프가 도시되어 있다. 도 6a의 경우에 그랬듯이, 블록(601)은 Pstart 명령어에 의해 표시된 추상 명령어 BeginTransaction을 나타내고, 블록(603)은 Pbody 명령어에 의해 표시된 추상 명령어 CommitTransaction을 나타내고, 블록(605)은 Pend 명령어에 의해 표시된 트랜잭션의 끝을 나타낸다. 레이블이 없는 화살표는 정상적이고, 실패가 없는(failure-free) 프로그램 흐름을 나타내고, 이것은 블록(601)으로부터 블록(603)을 거쳐 블록(605)으로 이어진다. 화살표 A는 위에서 설명된 대로 CommitTransaction 명령어에 의해 형성되는 암시적인 루프를 나타낸다.
이해할 수 있듯이, 실선 화살표 A에 의해 표현되는 암시적인 루프를 고려한느 것은, 루프에 의해 영향을 받는 데이터 오브젝트에 관한 파괴 포인트 등을 결정할 때 매우 중요하다. 예를 들어, 데이터 오브젝트 v를 사전식으로 마지막으로 사용한 것이 트랜잭션 바디 Pbody에서였다면, 데이터 오브젝트 v는 트랜잭션이 커밋될 때까지 파괴될 수 없다. 데이터 오브젝트 v가 Pbody에서 파괴되었다면, 그리고 트랜잭션이 중단되고 재시도되었다면, 프로그램 오브젝트 v의 값은 재시도하는 동안 잃게 될 것이다. 따라서, 도 10과 관련하여 이하에 설명될 파괴 포인트를 결정하는 동안 암시적 루프가 있다는 것을 고려한다. 본 실례에서, 본 발명의 실시예는 v의 파괴를 Pend 를 포함하는 기본 블록으로 이동시킬 것이다.
예외 핸들러가 있는 장기 실행 트랙잭션
본 실례는 장기 실행 트랜잭션에서 구현되었듯이 XLANG/s 예외 핸들러의 처리를 도시하고 있다. 상술된 대로, 원자형 트랜잭션은 예외 핸들러를 가지지 않는다. 이러한 트랜잭션의 문맥 기술은 예를 들어, 이하의 하이-레벨 코드로 구성될 수 있다:
도 6c에서는, 명확하게 하기 위해 본 실례에서 추상 명령어 스트림을 생략하고, 상술된 트랜잭션의 흐름그래프가 도시되어 있다. 다시, 도 6a 및 도 6b의 경우와 마찬가지로, 블록(601)은 Pstart 명령어에 의해 표시된 추상 명령어 BeginTransaction을 나타내고, 블록(603)은 Pbody 명령어에 의해 표시된 추상 명령어 CommitTransaction을 나타내고, 블록(605)은 Pend 명령어에 의해 표시된 트랜잭션의 끝을 나타낸다. 또한 블록(607)은 추상 명령어 Resume을 나타내는데, 이것은 곧 기술될 예외 핸들러와 관련된 것이다. 다시, 레이블이 없는 화살표는 정상적이고, 실패가 없는 프로그램 흐름을 나타내고, 이것은 블록(601)으로부터 블록(603)을 거쳐 블록(605)으로 이어진다.
흐름그래프는 트랜잭션 바디에 들어온 직후 바로 예외가 발생할 수 있다고 가정한다; 그러므로, 바디 및 예외 핸들러 둘 다 논리적으로 BeginTransaction 추상 명령어를 따를 수 있다. 블록(601)을 따르는 레이블이 없고 실선인 화살표는 정상적인 프로그램 흐름을 나타내는 반면, 점선 화살표 A는 예외의 경우 취할 수 있는 논리 경로를 나타낸다. 블록(607)은 특별 추상 명령어 Resume을 포함하고, 이것은 트랜잭션 이후 다음 명령문으로 점프하도록 정의되어 있다. 그러므로, 블록(607)으로 표현된 예외 핸들러의 처리를 완료하자마자, 점선 B로 표시된 논리 경로는 블록(605)의 Pend에 이른다. 이해할 수 있듯이, 블록(603)의 바디 및 예외 핸들러 블록(607) 둘 다 동일한 후임자 블록(605)의 Pend로 흐른다.
보완이 있는 장기 실행 트랜잭션
본 실례는 장기 실행 트랜잭션에서 구현되었듯이 XLANG/s 보완 핸들러의 처리를 도시하고 있다. 상술된 대로, 보완 핸들러는 오류 등으로 인해 성공적으로 완료되지 못한 트랜잭션을 원상태로 돌리거나(undo), 보완을 시도하는 XLANG/s 코드 모듈이다. 이러한 보완 핸들러는, 예를 들어 실패한 트랜잭션의 반대인 기능을 수행하고, 실패한 트랜잭션의 영향을 무효로 만드는 기능 등을 수행하는 프로그래머가 원하는 모든 태스크를 수행할 수 있다. 이러한 트랜잭션의 문맥 기술은 예를 들어, 이하의 하이-레벨 코드로 구성될 수 있다:
도 6d에서는, 상술한 트랜잭션의 흐름그래프가 도시된다. 다시, 도 6a 내지 6c의 경우와 마찬가지로, 블록(601)은 Pstart 명령어에 의해 표시된 추상 명령어 BeginTransaction을 나타내고, 블록(603)은 Pbody 명령어에 의해 표시된 추상 명령어 CommitTransaction을 나타내고, 블록(605)은 Pend 명령어에 의해 표시된 트랜잭션의 끝을 나타낸다. 블록(609)은 보완 프로세스 및 추상 명령어 Resume을 나타내고, 이것은 도 6c와 관련하여 상술되었다. 블록(611)은 Pbody 다음에 오는 임의의 추가 프로그래밍을 표현하고, 이것은 Px로 표시된다. 다시, 레이블이 없는 화살표는 정상적이고, 실패가 없는 프로그램 흐름을 나타내고, 이것은 블록(601)으로부터 블록(603) 및 블록(611)을 거쳐 블록(605)으로 이어진다.
점선 화살표 A는 보완을 원하는 프로그램 상태가 발생할 경우 취할 수 있는 논리 경로를 나타낸다. 도 6d에서 볼 수 있듯이, 블록(609)은 Pcomp로 표시된 보완 핸들러를 나타낸다. 도 6d의 흐름그래프에 블록(609)을 둔다는 것은 보완 블록의 코드가 트랜잭션이 성공적으로 커밋된 후에 도달될 수 있고, 블록(605)으로 표현된 프로그램의 끝까지 여전히 도달할 수 있다는 것을 도시한다는 것을 이해할 것이다. 블록(609)의 이러한 사용가능성은, 점선 A를 통해 블록(609)을 블록(603)의 CommitTransaction 명령어의 가능한 후임자로 표시함으로써, 점선 B를 통해 블록(609)의 후임자인 블록(605), 프로그램의 끝으로 표시함으로써 도 6d의 흐름그래프에서 달성될 수 있다. 이해할 수 있듯이, 한 실시예에서, 블록(609)으로 나타내어진 보완 기능이 블록(609)가 흐르는 포인트에서 더 이상 필요하지 않다면, 보완 블록(609)은 블록(605)보다 프로그램에서 더 앞에 있는 포인트로 흘러갈 수 있다.
보완이 있는 원자형 트랜잭션
이해할 수 있듯이, 보완이 있는 원자형 트랜잭션의 흐름그래프는 도 6b와 관련하여 상술된 원자형 트랜잭션과 도 6d와 관련하여 상술된 보완이 있는 장기 실행 트랜잭션을 결합하여 기술될 수 있다. 도 6e에 이러한 흐름그래프가 도시되어 있다. 블록(601-611)의 기술, 실선의 레이블이 없는 화살표 및 점선 화살표 A,B는 도 6d와 관련하여 상술된 것과 일치한다. 이해할 수 있듯이, 점선 C는 도 6b와 관련하여 상술된 점선 A와 동등하며, 이것은 CommitTransacrtion 추상 명령어의 실패를 재시도하는 암시적인 루프를 나타낸다.
예외 핸들러 및 보완이 있는 장기 실행 트랜잭션
이해할 수 있듯이, 예외 핸들러 및 보완이 있는 장기 실행 트랜잭션의 흐름그래프는, 도 6c와 관련하여 상술된 예외 핸들러가 있는 장기 실행 트랜잭션과 도 6d와 관련하여 상술된 보완이 있는 장기 실행 트랜잭션을 결합하여 기술될 수 있다. 도 6f에 이러한 흐름그래프가 도시되어 있다. 블록(601-611)의 기술, 실선의 레이블이 없는 화살표는 도 6e와 관련하여 상술된 것과 일치한다. 이해할 수 있듯이, 점선 A 및 B는 도 6c와 관련하여 상술된 점선 A,B와 동등하며, 이것은 예외가 발생할 경우 제어 흐름을 나타내며, 이에 따라 제어 흐름은 점선 화살표 A를 통해 블록(607)의 예외 핸들러로 전달되고, 블록(611)에서 프로그램으로 리턴한다. 이해할 수 있듯이, 점선 C 및 D는 도 6d와 관련하여 상술된 점선 A,B와 동등하며, 이것은 블록(609)의 보완 핸들러가 호출되었을 경우 제어 흐름을 나타내며, 점선 화살표 C를 통해 일어나고, 이에 따라 제어 흐름은 점선 화살표 D를 통해 블록(605)에서 프로그램 끝으로 리턴한다.
흐름그래프 준비하기
이해할 수 있듯이, 예를 들어 도 6a 내지 도 6f와 관련하여 상술된 하나 이상의 흐름그래프가 일단 생성되면, 본 발명의 실시예는 각 기본 블록상에 정보 주석을 달 수 있다. 본 발명의 한 실시예에 따르면, 깊이-우선 탐색(depth-first search)이 수행되어 흐름 그래프를 깊이 우선으로 순서를 매기는 데 있어 기본 블록의 위치를 표시하는 번호를 할당한다. 또한, 실시예에서 두 우위자(dominator) 세트를 결정한다. 이러한 결정에서, 아래로부터 우위자 한 세트 뿐만 아니라 위로부터 우위자 한 세트가 만들어진다. 게다가, 실시예에서 하나 이상의 루프에 참가하는 블록이 있을 경우, 또한 블록을 결정한다.
이해할 수 있듯이, 본 발명의 실시예는 모든 레벨의 추상 명령어 복잡도에 대해, 도 6a 내지 도 6f와 관련하여 상술된 것과 같은 흐름그래프를 생성할 수 있다. 예를 들어, 도 6a - 도6b의 흐름그래프의 임의의 갯수의 임의의 조합이 직렬로 및/또는 병렬로 결합될 수 있다. 이러한 방식으로, 본 발명의 실시예는 또한 모든 복잡도의 코드를 처리할 수 있고 컴파일할 수 있다.
깊이 우선 순서 매기기
실시예에 따르면, 흐름그래프상에서 깊이 우선 탐색이 수행되고, 대응하는 깊이 우선 번호가 흐름그래프내에 포함된 각 블록에 할당된다. 이해할 수 있듯이, 흐름그래프의 깊이 우선 순서를 찾는 임의의 알고리즘은 본 발명의 실시예와 동등하게 일치한다. 예를 들어, 이러한 알고리즘 하나는 "Compilers:Principles, Techniques, and Tools"에 기술된 알고리즘 10.14이다.
깊이 우선 탐색의 본질상, 프로그램의 끝에 대응하는 프로그램의 마지막 기본 블록이 가장 낮은 번호를 받는 반면, 프로그램의 시작에 대응하는 프로그램의 제1 기본 블록이 가장 높은 번호를 받는다는 것을 이해할 것이다. 도 7에 각 기본 블록에 깊이 우선 번호가 할당된 예시적인 흐름그래프를 도시하고 있다. 흐름그래프(700)는 블록(705-720)을 포함하고, 이들 각각에는 깊이 우선 번호가 할당되어 있다. 흐름그래프(700)의 맨 밑, 블록(720)에서 시작하고, 이 블록(720)은 프름그래프(700)에 의해 표현되는 프로그램의 끝이며, 0이라는 번호가 할당되어 있다는 것을 알 수 있다. 블록(710) 및 블록(715)은, 흐름그래프(700)의 끝으로부터 다음 두 블록이 되며, 각각 1 및 2라는 번호가 할당되어 있다. 이해할 수 있듯이, 블록(710) 및 블록(715)은 흐름그래프(700)의 끝으로부터 같은 거리만큼 떨어져 있기 때문에, 번호 1 및 2의 할당은 본 발명의 실시예를 일치시키면서 바뀔 수 있다. 마지막으로, 블록(705)은 흐름그래프(700)의 끝으로부터 가장 멀리 떨어져 있고, 3이라는 번호가 할당되어 있다. 이해할 수 있듯이, 깊이 우선 순서 매기기는 하나 이상의 비트 세트로서처럼, 기본 블록(705-720)을 효과적으로 식별할 수 있도록 해 준다.
우위자 찾기
모든 블록(705-720)의 우위 관계는 예를 들어, "Compilers:Principles, Techniques, and Tools"에 기술된 알고리즘 10.16 등을 이용하여 양방향으로 결정된다. 상술된 대로, 기본 블록의 우위자를 찾는 임의의 알고리즘은 본 발명의 실시예와 동등하게 일치한다.
블록이 다른 블록을 이전에 지배하는지 여부를 결정하는 것은 흐름그래프(700)의 제일 위 - 제어 흐름의 시작을 나타냄 - 에서 시작하고, 특정 블록으로 이르는 모든 논리 경로가 그 이전의 블록을 통해 처음으로 통과했음에 틀림없음을 결정하는 것을 포함한다. 예를 들어, 흐름 그래프(700)에서, 블록(720)의 이전 지배자는 블록(720) 및 블록(705)이다. 블록이 자기자신을 지배한다는 것을 이해할 것이다. 또한, 제어 흐름은 블록(720)에 도달하기 전에 블록(710) 또는 블록(715) 둘 중의 하나를 통과해야 할 필요가 없기 때문에 블록(710) 및 블록(715)이 블록(720)을 이전에 지배하지 않는다는 것을 이해할 것이다. 예를 들어, 제어 흐름은 블록(705)에서 블록(710)으로, 블록(715)을 무시하고, 블록(720)으로 전달될 수 있다. 마찬가지로, 제어 흐름은 블록(705)에서 블록(715)으로, 블록(710)을 무시하고, 블록(720)으로 전달될 수 있다.
블록이 다른 블록을 이후에 지배하는지 여부를 결정하는 것은 흐름그래프(700)의 제일 바닥 - 제어 흐름의 끝을 나타냄 - 에서 시작하고, 특정 블록으로부터의 모든 경로가 궁극적으로 다른 블록을 통해 통과되어야 하는지 여부를 결정하는 것을 포함한다. 예를 들어, 흐름그래프(700)에서, 블록(705)의 이후 지배자는 블록(705) 및 블록(720)이다.
루프 찾기
도 8과 관련하여, 본 발명의 실시예는 예를 들어, "Compilers:Principles, Techniques, and Tools"에 기술된 알고리즘 10.1 등을 이용하여, 흐름그래프(800)에서 루프를 찾고 식별한다. 도 8에서 보여지듯이, 흐름그래프(800)는 이중으로 중첩된(doubly-nested) 루프이다. 상술된 대로, 본 발명의 실시예는 임의의 복잡도 및 임의의 루프 수를 지닌 흐름그래프(800)와 동등하게 일치한다. 예를 들어, 동일한 루프에 속하는 모든 기본 블록들에 동일한 루프 식별자가 주어진다는 것과 같은 넘버링 관례를 사용하여 각 루프를 식별한다. 루프 식별자는 예를 들어 안쪽 루프가 바깥쪽 루프보다 더 높은 번호를 지닌다는 속성을 지닌 정수와 같은 모든 유형의 식별자가 될 수 있다. 도 8에서, 블록(805) 및 블록(835)은 루프의 일부가 아니므로 루프 식별자가 주어지지 않았다는 것을 알 수 있다. 또한 블록(820)과 블록(825)간에 형성된 루프는 블록(810), 블록(815) 및 블록(830)에 의해 형성된 루프내에 내포되어 있다는 것을 알 수 있다. 그러므로, 본 발명의 한 실시예에 따르면, 블록(820) 및 블록(825)에는 2라는 루프 식별자가 할당되어 있고, 이것은 블록(820) 및 블록(825)이 2개의 루프에 참여한다는 것을 뜻하고, 블록(810), 블록(815) 및 블록(830)에는 1이라는 루프 식별자가 할당되어 있고, 이것은 블록(810), 블록(815) 및 블록(830)이 1개의 루프에 참여한다는 것을 뜻한다.
데이터 오브젝트 사용 분석하기
그러므로, 도 4의 단계 420의 완료시, 도 8과 관련하여 상세히 상술된 대로, 본 발명의 한 실시예에 따른 방법은 단계 430으로 진행하고, 여기서 각 데이터 오브젝트의 사용을 분석한다. 상술된 대로, 데이터 오브젝트는 예를 들어, 변수, 데이터 오브젝트 등이 될 수 있다. 도 8의 흐름그래프(800) 등과 같은 흐름그래프가 일단 준비되면, 흐름그래프를 통해 통과한다. 흐름그래프의 각 기본 블록내에, 추상 명령어들을 검토하여 어떤 프로그램 오브젝트가 사용되는지 및 그러한 오브젝트가 어떻게 사용되는지를 결정한다. 그러므로, 각 프로그램 오브젝트 S는 2개의 세트: 그러한 오브젝트로부터 판독하는 기본 블록의 Sread라는 세트 및 오브젝트로 기입하는 기본 블록의 Swrite라는 세트를 포함한다. 다들 이해하듯이, 오브젝트로부터의 판독 또는 오브젝트로의 기입을 하는 기본 블록의 Suse 세트는 단순히 Sread ∪ Swrite로부터 형성된다.
도 4 및 도 6a 내지 도 6f와 관련하여 상술된 대로, 본 발명의 실시예에 의해 생성된 흐름그래프는 XLANG/s 컴파일러에 의해 이용되어 몇몇 태스크를 수행한다. 예를 들어, 생성, 파괴, 락 포인트의 계산 및 삽입은 본 발명의 실시예에 의해 수행될 수 있는 태스크 중 일부이고, 이제 도 9 내지 도 11b와 관련하여 이하에 상세히 기술된다.
오브젝트에 대한 생성 포인트 계산
도 9에서, 데이터 오브젝트에 대해 하나 이상의 생성 포인트를 계산하는 방법(900)이 도시되어 있다. 단계(905)에서, 데이터 오브젝트로부터 판독되거나 데이터 오브젝트로 기입되는 기본 블록의 Suse 세트가 수집된다. 이해할 수 있듯이, Suse 세트는 데이터 오브젝트로부터 판독되는 기본 블록 Sread 세트와 데이터 오브젝트로 기입된 기본 블록 Swrite 세트의 합과 같다. 중요한 데이터 오브젝트가 Suse 세트내의 데이터 오브젝트를 사전적으로 처음 사용할 때 생성되었다고 가정하는 것을 이해할 것이다. 그러므로, 데이터 오브젝트의 첫번째 사전적 사용을 포함하는 기본 블록을 본 명세서에서 Bcreate라고 한다. 예를 들어, 이것은 도 7과 관련하여 상술된 대로, 깊이 우선 순서 매기기는 프로그램의 시작에 가까운 기본 블록들에게 더 높은 번호를 부여하기 때문에, 데이터 오브젝트를 참조하는 것은 가장 높은 번호가 매겨진 기본 블록이다. 한 실시예에서, Suse 내의 데이터 오브젝트의 매 사전적으로 이어지는 사용은 이어서 더 낮은 번호가 매겨지는 기본 블록 Bnext 각각이다. 따라서, 단계(908)에서 초기 세트 Bcreate 가 데이터 오브젝트의 첫번째 사전적 사용을 기반으로 하여 계산된다.
단계(910)에서, 본 발명의 실시예에 따라 컴파일러는 Bcreate 의 이전 우위자 및 Bnext 이전 우위자의 교차(intersection) I를 계산한다. 단계(915)에서, I 세트가 Bcreate 를 포함하는지에 대한 결정이 내려진다. 만약 그렇다면, 단계(920)에서 중요한 데이터 오브젝트의 생성 포인트는 Bcreate 에 남는다. 만약 그렇지 않다면, 단계(925)에서, I 세트로부터 새 생성 포인트 Bcreate 가 선택되고, 그리하여 새 생성 포인트의 깊이 우선 번호는 현재 생성 포인트의 깊이 우선 번호보다 더 큰 것 중 가장 작은 것이다. 그러므로 그 결과, 오브젝트가 아무 값을 참조하지 않거나 아무 값을 가지지 않을 경우 야기될 수 있는 오류를 피하기 위해, 이러한 데이터 오브젝트가 사용되기 전에 데이터 오브젝트의 생성 포인트가 발생한다. 마찬가지로, 생성 포인트는 불필요하게 메모리 리소스에 부담을 주는 것을 피하기 위해 오브젝트의 첫번째 사용에 가능한한 가까이에 생성된다. 이해할 수 있듯이, 새 생성 포인트가 이전 생성 포인트가 아닌 다른 루프에 있다면, I 세트로부터 연속적으로 더 높은 그리고 더 높은 번호가 매겨진 블록이 모든 내부 루프를 우회할 때까지 선택된다.
단계(930)에서, Suse 세트내에 데이터 오브젝트의 또 다른 사용이 있는지 여부에 관해 결정하고, 만약 그럴 경우, 방법(900)은 이러한 다음 사용을 위해 단계(910)로 리턴한다. 일단 데이터 오브젝트의 모든 사용이 고려되면, 방법(900)은 단계(935)로 진행한다. 단계(935)에서, 단계(905) 내지 단계(930)에서 결정된 대로, 임의의 블록 내부(intra-block) 사용에 앞서, 데이터 오브젝트의 생성 및 초기화를 수행하는 명령어가 기본 블록 Bcreate 내에 삽입된다.
오브젝트에 대한 파괴 포인트 계산
도 10에서, 데이터 오브젝트에 대해 하나 이상의 파괴 포인트를 계산하는 방법(1000)이 도시되어 있다. 단계(1105)에서, 위의 도 9의 단계(905)의 경우처럼, 데이터 오브젝트로부터 판독되거나 데이터 오브젝트로 기입되는 기본 블록 Suse 세트가 수집된다. 이해할 수 있듯이, Suse 세트는 데이터 오브젝트로부터 판독되는 기본 블록 Sread 세트와 데이터 오브젝트로 기입된 기본 블록 Swrite 세트의 합과 같다. 한 실시예에서, 중요한 데이터 오브젝트가 Suse 세트내에서 데이터 오브젝트를 사전적으로 마지막으로 사용할 때 파괴되었다고 가정한다. 그러므로, 데이터 오브젝트의 마지막 사전적 사용을 포함하는 기본 블록을 본 명세서에서 Bdestroy라고 한다. 예를 들어, 이것은 데이터 오브젝트와 관련하여 가장 낮은 번호가 매겨진 기본 블록이다. 한 실시예에서, Suse 세트 내의 데이터 오브젝트의 매 사전적인 이전의 사용은 이어서 더 높은 번호가 매겨지는 기본 블록 Bprev 각각이다. 따라서, 단계(1008)에서 초기 세트 Bdestroy 가 데이터 오브젝트의 마지막 사전적 사용을 기반으로 하여 계산된다.
단계(1010)에서, 본 발명의 실시예에 따라 컴파일러는 Bdestroy 의 이후 우위자 및 Bprev 이후 우위자의 교차 I를 계산한다. 단계(1015)에서, I 세트가 Bdestroy 를 포함하는지에 대한 결정이 내려진다. 만약 그렇다면, 단계(1020)에서 중요한 데이터 오브젝트의 파괴 포인트는 Bdestroy 에 남는다. 만약 그렇지 않다면, 단계(1025)에서, I 세트로부터 새 파괴 포인트 Bdestroy 가 선택되고, 그리하여 새 파괴 포인트의 깊이 우선 번호는 현재 파괴 포인트의 깊이 우선 번호보다 더 작은 것 중 가장 큰 것이다. 그러므로 그 결과, 불필요하게 메모리 리소스에 부담을 주는 것을 피하기 위해, 이러한 데이터 오브젝트가 마지막으로 사용된 후에 데이터 오브젝트의 파괴 포인트가 발생한다. 새 파괴 포인트가 이전 파괴 포인트가 아닌 다른 루프에 있다면, I 세트로부터 연속적으로 더 낮게 그리고 더 낮은 번호가 매겨진 블록이 모든 내부 루프를 우회할 때까지 선택된다는 것을 이해할 것이다.
단계(1030)에서, Suse 세트내에 데이터 오브젝트의 또 다른 사용이 있는지 여부에 관해 결정하고, 만약 그럴 경우, 방법(1000)은 이러한 다음 사용을 위해 단계(1010)로 리턴한다. 일단 데이터 오브젝트의 모든 사용이 고려되면, 방법(1000)은 단계(1035)로 진행한다. 단계(1035)에서, 단계(1005) 내지 단계(1030)에서 결정된 대로, 임의의 블록 내부(intra-block) 사용 이후, 데이터 오브젝트의 파괴 및 종결처리(cleanup)를 수행하는 명령어가 기본 블록 Bdestroy 내에 삽입된다.
공유 오브젝트에 대한 락 포인트 계산
이해할 수 있듯이, 락 포인트의 계산은, 공유 데이터 오브젝트가 처음으로 사용되기에 앞서 가능한 한 늦게 락을 두는 것이 바람직하기 때문에, 생성 포인트의 경우와 유사해 보인다. 그러나, 공유 오브젝트에 대한 락은 개별적으로 위치할 수 없다. 이하의 예시적인 XLANG/s 코드는 락 포인트를 계산할 때 발생하는 컴파일 실례를 제공한다.
위의 예시적인 코드에서, 각 병렬 태스크에서, 오브젝트 a 및 b는 반대 순서로 액세스된다. 적절하지 못한 락 배치(lock placement)의 실례가 이하의 코드 실례에서 굵은 글씨로 제공된다.
위의 코드가 중단 또는 오류 없이 수행할 수 있다면, 위의 락 배치는 받아들일 수 있다. 그러나, 제1 태스크가 a의 락을 얻을 만큼 충분히 멀리 진행되고 이후에 중단되었다면, 프로그램이 교착상태(deadlock)에 빠질 수 있다. 예를 들어, 위의 중단 이후에, 제2 태스크가 b의 락을 얻기 위해 진행한다면, 이것은 a의 락을 얻을 수 없기 때문에 차단될 것이다. 제1 태스크가 중단 이후 다시 시작한다면, 그것은 이제 b의 락을 얻을 수 없기 때문에 진행할 수 없을 것이다. 그러므로 프로세스는 교착상태에 빠진다.
본 발명의 실시예는 동기화된 범위내에서 모든 공유 데이터 오브젝트의 사용 시점을 고려하고, 임의의 오브젝트가 처음으로 사용되기에 앞서 이러한 모든 오브젝트의 락을 둠으로써 이 문제를 해결한다. 모든 동기화된 범위에 걸쳐 일치된 순서로 락을 얻음으로써 교착상태를 피할 수 있다. 이해할 수 있듯이, 이러한 순서가 일치하기만 하면 임의의 락 순서를 사용할 수 있다.
도 11a 및 도 11b의 방법을 이용하여, 이하에 설명될 굵은 글씨로 표기된 이하의 락 배치는 위의 코드 실례로부터 나온 것이다.
이해할 수 있듯이, 위의 락 배치는 상술한 교착상태 문제를 제거한다. 이하의 도 11a 및 도 11b의 설명에서 볼 수 있듯이, 실시예는 공유 데이터 오브젝트간의 판독 및 기입간을 더 구별한다. 그러므로, 공유 오브젝트가 동기화된 범위에서 절대 기입되지 않는다면, 본 발명에 따른 방법은 판독 전용 락 만을 얻을 것이다. 그 결과, 하나의 기입자, 다수의 판독자 동기화가 가능해진다.
도 11a에 본 발명의 실시예에 따라 락 포인트를 두는 예시적인 방법(1100)이 제공된다. 단계(1105)에서, 기본 블록 V 세트가 처음에는 공백 세트로 생성된다. 단계(1110)에서, 락을 필요로 하는 모든 공유 데이터 오브젝트의 세트 L이 수집된다. 단계(1115)에서 데이터 오브젝트로 기입하는 기본 블록 Swrite 세트가 생성되고, 단계(1120)에서 동기화된 범위내에 속하지 않는 모든 기본 블록이 Swrite 로부터 제거된다. 단계(1125)에서, 데이터 오브젝트로부터 판독되는 기본 블록 Sread 세트가 생성되고, 단계(1130)에서 동기화된 범위내에 속하지 않는 모든 기본 블록이 Sread 로부터 제거된다. 단계(1135)에서, 필요한 락의 유형에 대해 결정한다. 예를 들어, Swrite 세트가 공백이라면, 이것은 데이터 오브젝트에 아무 것도 기입되지 않았다는 것을 의미하므로, 데이터 오브젝트는 단지 판독 락만을 필요로 한다; 그렇지 않을 경우, 기입 락을 필요로 한다.
단계(1140)에서, Swrite 및 Sread 세트가 V에 추가된다. 단계(1145)에서, 또 다른 데이터 오브젝트가 L 세트내에 있는지 여부에 관한 결정이 내려지고, 만약 그럴 경우, 방법(1100)은 그 다음 데이터 오브젝트를 위해 단계(1115)로 이동한다. 그렇지 않을 경우, 방법(1100)은 이하의 도 11b의 단계(1150)로 진행된다.
도 11b에 본 발명의 실시예에 따라 락 포인트를 두는 방법(1100)의 나머지 부분이 도시된다. V 세트 내의 임의의 공유 데이터가 사전적으로 처음 사용될 때 모든 락이 발생한다고 가정하는 것을 이해할 것이다. 그러므로, 공유 데이터 오브젝트의 첫번째 사전적 사용을 포함하는 기본 블록을 본 명세서에서 Block이라고 한다. 예를 들어, 이것은 세트 V의 가장 높은 번호가 매겨진 기본 블록이다. 한 실시예에서, V 내의 데이터 오브젝트의 매 사전적으로 이어지는 사용은 이어서 더 낮은 번호가 매겨지는 기본 블록 Bnext 각각이다. 따라서, 단계(1150)에서 초기 세트 Block 이 데이터 오브젝트의 첫번째 사전적 사용을 기반으로 하여 계산된다.
단계(1155)에서, 본 발명의 실시예에 따라 컴파일러는 Block 의 이전 우위자 및 Bnext 의 이전 우위자의 교차 I를 계산한다. 단계(1160)에서, I 세트가 Block 을 포함하는지에 대한 결정이 내려진다. 만약 그렇다면, 단계(1170)에서 중요한 데이터 오브젝트의 락 포인트는 Block 에 남는다. 만약 그렇지 않다면, 단계(1165)에서, I 세트로부터 새 락 포인트 Bcreate 가 선택되고, 그리하여 새 락 포인트의 깊이 우선 번호는 현재 락 포인트의 깊이 우선 번호보다 더 큰 것 중 가장 작은 것이다. 그러므로 그 결과, 락 포인트는 리소스의 조기 잠금을 피하기 위해 데이터 오브젝트의 첫번째 사용에 가능한 한 가까이 생성됨과 동시에, 트랜잭션의 교착상태를 피할 수 있는 방식으로 배치된다. 이해할 수 있듯이, 새 락 포인트가 이전 락 포인트가 아닌 다른 루프에 있다면, I 세트로부터 연속적으로 더 높은 그리고 더 높은 번호가 매겨진 블록이 모든 내부 루프를 우회할 때까지 선택된다.
단계(1175)에서, V 세트내에 또 다른 사전적으로 이어지는 블록 Bnext가 있는지 여부에 관해 결정하고, 만약 그럴 경우, 방법(1100)은 이러한 다음 블록을 위해 단계(1155)로 리턴한다. 일단 데이터 오브젝트의 모든 사용이 고려되면, 방법(1100)은 단계(1180)로 진행한다. 단계(1180)에서, 각 공유된 오브젝트 - 도 11a와 관련하여 위에서 결정된 대로, 판독 또는 기입 블록 둘 중 하나 - 를 잠그는 명령어가 임의의 블록 내부(intra-block) 사용에 앞서 결정적으로 배치된다.
고정 데이터흐름 분석을 포함하는 XLANG/s 코드를 컴파일하는 방법 및 시스템이 제공되었다. 본 발명이 다양한 도면의 예시적인 실시예와 관련하여 기술되었지만, 다른 유사한 실시예가 사용될 수 있고 또는 본 발명에서 벗어나지 않고 본 발명의 동일한 기능을 수행하는 기술된 실시예에 변형 및 추가가 있을 수 있다는 것을 이해할 것이다. 예를 들어, 당업자들은 본 명세서에서 기술된 본 발명이 임의의 애플리케이션 환경에서 비지니스 방법 소프트웨어의 임의의 구성에 적용될 수 있다는 것을 인지할 것이다. 그러므로, 본 발명은 그 어떤 하나의 실시예에 제한되어서는 안 되며, 첨부된 청구항에 따라 그 폭과 범위가 해석되어야 한다.
기존의 컴파일러는 생성, 락 및/또는 파괴 포인트의 최적의 위치를 결정하는데 있어, 프로그램을 분석하고, 및/또는 흐름그래프를 생성하는 기능이 부족하다. 게다가, 기존의 컴파일러는 이러한 포인트들을 프로그램 속에 삽입하여 대응하는 데이터 오브젝트가 실행 시 적절한 포인트에서 생성되고, 잠겨지고 및/또는 파괴되는 능력이 부족하다. 따라서, 프로그램이 데이터 오브젝트를 처리하는 분석을 지원할 수 있는 프로그램의 흐름그래프를 생성하고, 그러한 흐름그래프에서 프로그램의 데이터 오브젝트에 대한 적절한 생성, 락 및 파괴 포인트를 결정하는 정적 데이터 흐름 분석을 수행하는 컴퓨터 코드를 컴파일함으로써 컴파일 시에 데이터 오브젝트 생성, 락(lock), 파괴 포인트를 자동적으로 결정할 수 있다.
도 1은 본 발명의 양상이 구현될 수 있는 예시적인 컴퓨팅 환경을 보여주는 블록도.
도 2는 본 발명의 양상이 구현될 수 있는 예시적인 네트워크된 컴퓨팅 환경을 보여주는 블록도.
도 3은 본 발명의 실시예에 따라 예시적인 구문분석(parse)을 보여주는 블록도.
도 4는 본 발명의 한 실시예에 따라 XLANG/s 코드를 컴파일하는 예시적인 방법을 도시하는 순서도.
도 5는 본 발명의 한 실시예에 따라 예시적인 흐름그래프 추상 명령어를 보여주는 블록도.
도 6a 내지 도 6f는 본 발명의 한 실시예에 따라 기본 블록의 예시적인 흐름그래프를 보여주는 블록도.
도 7은 본 발명의 한 실시예에 따라 각 기본 블록에 깊이 우선 번호가 할당된 예시적인 흐름그래프를 보여주는 블록도.
도 8은 본 발명의 한 실시예에 따라 루프가 할당된 예시적인 흐름그래프를 보여주는 블록도.
도 9는 본 발명의 한 실시예에 따라 데이터 오브젝트에 대해 하나 이상의 생성 포인트를 계산하는 예시적인 방법을 도시하는 흐름도.
도 10는 본 발명의 한 실시예에 따라 데이터 오브젝트에 대해 하나 이상의 파괴 포인트를 계산하는 예시적인 방법을 도시하는 흐름도.
도 11a 내지 도 11b는 본 발명의 한 실시예에 따라 데이터 오브젝트에 대해 락 포인트를 두는 예시적인 방법을 도시하는 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
100 : 컴퓨팅 환경
120 : 처리 장치
130 : 시스템 메모리
121 : 시스템 버스

Claims (47)

  1. 컴퓨터 코드를 컴파일하는 컴퓨터 구현가능 방법에 있어서,
    추상 컴퓨터 명령어에 따라 흐름그래프를 생성하는 단계 -상기 흐름그래프는 복수의 기본 블록들 및 적어도 하나의 데이터 오브젝트를 지니고, 상기 추상 명령어는 컴퓨터 코드로 형성된 구문분석 트리로부터 번역됨 -,
    깊이 우선 순서를 상기 복수의 기본 블록들에 할당하는 단계,
    상기 복수의 기본 블록들간에 우위 관계를 결정하는 단계,
    상기 흐름그래프내에 루프가 하나라도 있는지 여부를 결정하고, 및 만약 루프가 있다면 상기 루프들을 식별하는 단계,
    상기 적어도 하나의 데이터 오브젝트의 사용을 결정하는 단계,
    상기 사용, 식별된 루프들, 상기 복수의 기본 블록의 우위 관계 및 깊이 우선 순서에 따라 상기 적어도 하나의 데이터 오브젝트에 대해 생성 포인트, 파괴 포인트 및 락 포인트를 결정하는 단계, 및
    상기 생성 포인트에서 상기 적어도 하나의 데이터 오브젝트를 생성하기 위해, 상기 파괴 포인트에서 상기 적어도 하나의 데이터 오브젝트를 파괴하기 위해, 상기 락 포인트에서 상기 적어도 하나의 데이터 오브젝트를 잠그기 위해, 상기 컴퓨터 코드에 명령어를 삽입하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 생성 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 생성 포인트에서임-,
    상기 제1 사용에 이은 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이어지는 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 생성 포인트를 선택하는 단계
    를 더 포함하는 방법.
  3. 제2항에 있어서, 상기 교차로부터 새 생성 포인트를 선택하는 상기 단계는, 상기 새 생성 포인트가 상기 최초의 생성 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 생성 포인트와 상기 새 생성 포인트간의 모든 내부 루프를 우회하는 새 생성 포인트를 선택하는 단계를 포함하는 방법.
  4. 제1항에 있어서, 파괴 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 마지막 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 마지막 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 마지막 사용은 최초의 파괴 포인트에서임-,
    상기 마지막 사용 이전의 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이전 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이후 우위자와 상기 제2 기본 블록의 이후 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 파괴 포인트를 선택하는 단계
    를 포함하는 방법.
  5. 제4항에 있어서, 상기 교차로부터 새 파괴 포인트를 선택하는 상기 단계는, 상기 새 파괴 포인트가 상기 최초의 파괴 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 파괴 포인트와 상기 새 파괴 포인트간의 모든 내부 루프를 우회하는 새 파괴 포인트를 선택하는 단계를 포함하는 방법.
  6. 제1항에 있어서, 락 포인트를 결정하는 상기 단계는,
    적어도 하나의 데이터 오브젝트의 세트를 결정하는 단계,
    상기 복수의 기본 블록들로부터 상기 적어도 하나의 데이터 오브젝트에 기입하는 기본 블록들의 제1 세트를 생성하는 단계,
    상기 복수의 기본 블록들로부터 상기 적어도 하나의 데이터 오브젝트로부터 판독하는 기본 블록들의 제2 세트를 생성하는 단계,
    동기화된 범위내에 포함되지 않은 임의의 상기 복수의 기본 블록들을 상기 제1 및 제2 세트로부터 제거하는 단계,
    상기 적어도 하나의 데이터 오브젝트 각각에 대해 배치할 락의 유형을 결정하는 단계
    를 포함하는 방법.
  7. 제6항에 있어서, 상기 적어도 하나의 데이터 오브젝트 각각에 대해 락의 유형을 결정하는 상기 단계는, 상기 제1 세트가 공백일 경우, 상기 적어도 하나의 데이터 오브젝트에 대해 읽기 락을 선택하고, 그것이 아닐 경우, 쓰기 락을 선택하는 단계를 포함하는 방법.
  8. 제6항에 있어서, 상기 락 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 락 포인트에서임-,
    상기 제1 사용에 이은 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이어지는 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 락 포인트를 선택하는 단계
    를 더 포함하는 방법.
  9. 제8항에 있어서, 상기 교차로부터 새 락 포인트를 선택하는 상기 단계는, 상기 새 락 포인트가 상기 최초의 락 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 락 포인트와 상기 새 락 포인트간의 모든 내부 루프를 우회하는 새 락 포인트를 선택하는 단계를 포함하는 방법.
  10. 제1항에 있어서, 상기 컴퓨터 코드는 XLANG/s인 방법.
  11. 제1항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 변수인 방법.
  12. 제1항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 기호(심볼)인 방법.
  13. 제1항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 메세지인 방법.
  14. 제1항에 있어서, 상기 흐름그래프는 장기 실행 트랜잭션에 대응하는 방법.
  15. 제1항에 있어서, 상기 흐름그래프는 원자형 트랜잭션에 대응하는 방법.
  16. 제1항에 있어서, 상기 흐름그래프는 예외 핸들러가 있는 장기 실행 트랜잭션에 대응하는 방법.
  17. 제1항에 있어서, 상기 흐름그래프는 보완이 있는 장기 실행 트랜잭션에 대응하는 방법.
  18. 제1항에 있어서, 상기 흐름그래프는 보완이 있는 원자형 트랜잭션에 대응하는 방법.
  19. 제1항에 있어서, 상기 흐름그래프는 예외 핸들러 및 보완이 있는 장기 실행 트랜잭션에 대응하는 방법.
  20. 컴퓨터 코드를 컴파일하는 컴퓨터 실행가능 명령어를 지니는 컴퓨터 판독가능 매체에 있어서,
    추상 컴퓨터 명령어에 따라 흐름그래프를 생성하는 단계 -상기 흐름그래프는 복수의 기본 블록들 및 적어도 하나의 데이터 오브젝트를 지니고, 상기 추상 명령어는 컴퓨터 코드로 형성된 구문분석 트리로부터 번역됨 -,
    깊이 우선 순서를 상기 복수의 기본 블록들에 할당하는 단계,
    상기 복수의 기본 블록들간에 우위 관계를 결정하는 단계,
    상기 흐름그래프내에 루프가 하나라도 있는지 여부를 결정하고, 및 만약 루프가 있다면 상기 루프들을 식별하는 단계,
    상기 적어도 하나의 데이터 오브젝트의 사용을 결정하는 단계,
    상기 사용, 식별된 루프들, 상기 복수의 기본 블록의 우위 관계 및 깊이 우선 순서에 따라 상기 적어도 하나의 데이터 오브젝트에 대해 생성 포인트, 파괴 포인트 및 락 포인트를 결정하는 단계, 및
    상기 생성 포인트에서 상기 적어도 하나의 데이터 오브젝트를 생성하기 위해, 상기 파괴 포인트에서 상기 적어도 하나의 데이터 오브젝트를 파괴하기 위해, 상기 락 포인트에서 상기 적어도 하나의 데이터 오브젝트를 잠그기 위해, 상기 컴퓨터 코드에 명령어를 삽입하는 단계
    를 포함하는 매체.
  21. 제20항에 있어서, 생성 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 생성 포인트에서임-,
    상기 제1 사용에 이은 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이어지는 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 생성 포인트를 선택하는 단계
    를 더 포함하는 매체.
  22. 제21항에 있어서, 상기 교차로부터 새 생성 포인트를 선택하는 상기 단계는, 상기 새 생성 포인트가 상기 최초의 생성 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 생성 포인트와 상기 새 생성 포인트간의 모든 내부 루프를 우회하는 새 생성 포인트를 선택하는 단계를 포함하는 매체.
  23. 제20항에 있어서, 파괴 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 마지막 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 마지막 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 마지막 사용은 최초의 파괴 포인트에서임-,
    상기 마지막 사용 이전의 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이전 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이후 우위자와 상기 제2 기본 블록의 이후 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 파괴 포인트를 선택하는 단계
    를 포함하는 매체.
  24. 제23항에 있어서, 상기 교차로부터 새 파괴 포인트를 선택하는 상기 단계는, 상기 새 파괴 포인트가 상기 최초의 파괴 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 파괴 포인트와 상기 새 파괴 포인트간의 모든 내부 루프를 우회하는 새 파괴 포인트를 선택하는 단계를 포함하는 매체.
  25. 제20항에 있어서, 락 포인트를 결정하는 상기 단계는,
    적어도 하나의 데이터 오브젝트의 세트를 결정하는 단계,
    상기 복수의 기본 블록들로부터 상기 적어도 하나의 데이터 오브젝트에 기입하는 기본 블록들의 제1 세트를 생성하는 단계,
    상기 복수의 기본 블록들로부터 상기 적어도 하나의 데이터 오브젝트로부터 판독하는 기본 블록들의 제2 세트를 생성하는 단계,
    동기화된 범위내에 포함되지 않은 임의의 상기 복수의 기본 블록들을 상기 제1 및 제2 세트로부터 제거하는 단계,
    상기 적어도 하나의 데이터 오브젝트 각각에 대해 배치할 락의 유형을 결정하는 단계
    를 포함하는 매체.
  26. 제25항에 있어서, 상기 적어도 하나의 데이터 오브젝트 각각에 대해 락의 유형을 결정하는 상기 단계는, 상기 제1 세트가 공백일 경우, 상기 적어도 하나의 데이터 오브젝트에 대해 읽기 락을 선택하고, 그것이 아닐 경우, 쓰기 락을 선택하는 단계를 포함하는 매체.
  27. 제25항에 있어서, 상기 락 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 락 포인트에서임-,
    상기 제1 사용에 이은 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하고, 상기 복수의 기본 블록들로부터 상기 이어지는 사용이 일어나는 제2 기본 블록을 식별하는 단계,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차로부터 새 락 포인트를 선택하는 단계
    를 더 포함하는 매체.
  28. 제27항에 있어서, 상기 교차로부터 새 락 포인트를 선택하는 상기 단계는, 상기 새 락 포인트가 상기 최초의 락 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 락 포인트와 상기 새 락 포인트간의 모든 내부 루프를 우회하는 새 락 포인트를 선택하는 단계를 포함하는 매체.
  29. 제20항에 있어서, 상기 컴퓨터 코드는 XLANG/s인 매체.
  30. 제20항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 변수인 매체.
  31. 제20항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 기호(심볼)인 매체.
  32. 제20항에 있어서, 상기 적어도 하나의 데이터 오브젝트는 메세지인 매체.
  33. 제20항에 있어서, 상기 흐름그래프는 장기 실행 트랜잭션에 대응하는 매체.
  34. 제20항에 있어서, 상기 흐름그래프는 원자형 트랜잭션에 대응하는 매체.
  35. 제20항에 있어서, 상기 흐름그래프는 예외 핸들러가 있는 장기 실행 트랜잭션에 대응하는 매체.
  36. 제20항에 있어서, 상기 흐름그래프는 보완이 있는 장기 실행 트랜잭션에 대응하는 매체.
  37. 제20항에 있어서, 상기 흐름그래프는 보완이 있는 원자형 트랜잭션에 대응하는 매체.
  38. 제20항에 있어서, 상기 흐름그래프는 예외 핸들러 및 보완이 있는 장기 실행 트랜잭션에 대응하는 매체.
  39. XLANG/s 코드를 컴파일하는 방법에 있어서,
    추상 컴퓨터 명령어에 따라 복수의 기본 블록 및 적어도 하나의 데이터 오브젝트를 지니는 흐름그래프를 생성하는 단계,
    깊이 우선 순서를 상기 복수의 기본 블록들에 할당하는 단계,
    상기 복수의 기본 블록들간에 우위 관계를 결정하는 단계,
    상기 복수의 기본 블록들에 의해 형성된 임의의 루프를 식별하는 단계,
    상기 추상 명령어에 따라 상기 적어도 하나의 데이터 오브젝트의 사용을 결정하는 단계,
    상기 사용, 식별된 루프들, 상기 복수의 기본 블록의 우위 관계 및 깊이 우선 순서에 따라 상기 적어도 하나의 데이터 오브젝트에 대해 생성 포인트, 파괴 포인트 및 락 포인트를 결정하는 단계, 및
    상기 생성 포인트에서 상기 적어도 하나의 데이터 오브젝트를 생성하기 위해, 상기 파괴 포인트에서 상기 적어도 하나의 데이터 오브젝트를 파괴하기 위해, 상기 락 포인트에서 상기 적어도 하나의 데이터 오브젝트를 잠그기 위해, 상기 컴퓨터 코드에 명령어를 삽입하는 단계
    를 포함하는 방법.
  40. 제39항에 있어서, 생성 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 생성 포인트에서임-,
    상기 제2 기본 블록에서 상기 적어도 하나의 데이터 오브젝트의 제2 사용을 식별하는 단계 -상기 제2 기본 블록은 상기 제1 기본 블록보다 더 높은 순서가 매겨진 기본 블록임-,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차에 포함된 새 생성 포인트를 선택하는 단계
    를 더 포함하는 방법.
  41. 제40항에 있어서, 상기 교차로부터 새 생성 포인트를 선택하는 상기 단계는, 상기 새 생성 포인트가 상기 최초의 생성 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 생성 포인트와 상기 새 생성 포인트간의 모든 내부 루프를 우회하는 새 생성 포인트를 선택하는 단계를 포함하는 방법.
  42. 제39항에 있어서, 파괴 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 마지막 사용을 식별하고, 상기 마지막 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 마지막 사용은 최초의 파괴 포인트에서임-,
    제2 기본 블록에서 상기 적어도 하나의 데이터 사용을 식별하는 단계 -상기 제2 기본 블록은 상기 제1 기본 블록보다 더 낮은 순서가 매겨진 기본 블록임-,
    상기 제1 기본 블록의 이후 우위자와 상기 제2 기본 블록의 이후 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차에 포함된 새 파괴 포인트를 선택하는 단계
    를 포함하는 방법.
  43. 제42항에 있어서, 상기 교차로부터 새 파괴 포인트를 선택하는 상기 단계는, 상기 새 파괴 포인트가 상기 최초의 파괴 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 파괴 포인트와 상기 새 파괴 포인트간의 모든 내부 루프를 우회하는 새 파괴 포인트를 선택하는 단계를 포함하는 방법.
  44. 제39항에 있어서, 락 포인트를 결정하는 상기 단계는,
    적어도 하나의 데이터 오브젝트의 세트를 결정하는 단계,
    상기 적어도 하나의 데이터 오브젝트에 기입하는 기본 블록들의 제1 세트를 생성하는 단계,
    상기 적어도 하나의 데이터 오브젝트로부터 판독하는 기본 블록들의 제2 세트를 생성하는 단계,
    동기화된 범위내에 포함되지 않은 임의의 상기 복수의 기본 블록들을 상기 제1 및 제2 세트로부터 제거하는 단계,
    상기 적어도 하나의 데이터 오브젝트 각각에 대해 배치할 락의 유형을 결정하는 단계
    를 포함하는 방법.
  45. 제44항에 있어서, 상기 적어도 하나의 데이터 오브젝트 각각에 대해 락의 유형을 결정하는 상기 단계는, 상기 제1 세트가 공백일 경우, 상기 적어도 하나의 데이터 오브젝트에 대해 읽기 락을 선택하고, 그것이 아닐 경우, 쓰기 락을 선택하는 단계를 포함하는 방법.
  46. 제44항에 있어서, 락 포인트를 결정하는 상기 단계는,
    상기 적어도 하나의 데이터 오브젝트의 제1 사용을 식별하고, 상기 제1 사용이 일어나는 제1 기본 블록을 식별하는 단계 -상기 적어도 하나의 데이터 오브젝트의 상기 제1 사용은 최초의 락 포인트에서임-,
    제2 기본 블록에서의 상기 적어도 하나의 데이터 오브젝트의 사용을 식별하는 단계 -상기 제2 기본 블록은 상기 제1 기본 블록보다 높은 순서가 매겨짐-,
    상기 제1 기본 블록의 이전 우위자와 상기 제2 기본 블록의 이전 우위자간의 교차를 계산하는 단계,
    상기 교차가 상기 제1 기본 블록을 포함하는지 여부를 결정하는 단계, 및
    상기 교차가 상기 제1 기본 블록을 포함하지 않을 경우, 상기 교차에 포함된 새 락 포인트를 선택하는 단계
    를 더 포함하는 방법.
  47. 제46항에 있어서, 상기 교차로부터 새 락 포인트를 선택하는 상기 단계는, 상기 새 락 포인트가 상기 최초의 락 포인트가 아닌 다른 루프에 있는지 여부를 결정하는 단계, 및 만약 그럴 경우, 상기 최초의 락 포인트와 상기 새 락 포인트간의 모든 내부 루프를 우회하는 새 락 포인트를 선택하는 단계를 포함하는 방법.
KR1020040057672A 2003-08-26 2004-07-23 트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체 KR20050022282A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/648,461 2003-08-26
US10/648,461 US7210135B2 (en) 2003-08-26 2003-08-26 Data flow analysis of transactional processes

Publications (1)

Publication Number Publication Date
KR20050022282A true KR20050022282A (ko) 2005-03-07

Family

ID=34136617

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040057672A KR20050022282A (ko) 2003-08-26 2004-07-23 트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체

Country Status (7)

Country Link
US (2) US7210135B2 (ko)
EP (1) EP1513064B1 (ko)
JP (1) JP4728607B2 (ko)
KR (1) KR20050022282A (ko)
CN (1) CN100422933C (ko)
AT (1) ATE433150T1 (ko)
DE (1) DE602004021324D1 (ko)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7877681B2 (en) 2002-12-05 2011-01-25 Borland Software Corporation Automatic context management for web applications with client side code execution
US7194733B2 (en) * 2003-06-11 2007-03-20 Microsoft Corporation Transformation of an asynchronous transactional messaging language into a web services compatible language
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
TWI306215B (en) * 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US7779399B2 (en) * 2005-05-16 2010-08-17 Armorize Technologies, Inc. System and method for securing web application code and verifying correctness of software
US20070039000A1 (en) * 2005-08-10 2007-02-15 Hewlett-Packard Development Company, L.P. Lock order determination method and system
US8453131B2 (en) * 2005-12-24 2013-05-28 Intel Corporation Method and apparatus for ordering code based on critical sections
US7599861B2 (en) 2006-03-02 2009-10-06 Convergys Customer Management Group, Inc. System and method for closed loop decisionmaking in an automated care system
US7809663B1 (en) 2006-05-22 2010-10-05 Convergys Cmg Utah, Inc. System and method for supporting the utilization of machine language
US8379830B1 (en) 2006-05-22 2013-02-19 Convergys Customer Management Delaware Llc System and method for automated customer service with contingent live interaction
US8037466B2 (en) 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections
US20080209405A1 (en) * 2007-02-28 2008-08-28 Microsoft Corporation Distributed debugging for a visual programming language
CN100559347C (zh) * 2007-03-23 2009-11-11 北京大学 一种嵌套循环结构的识别方法
US20090064092A1 (en) * 2007-08-29 2009-03-05 Microsoft Corporation Visual programming language optimization
US8677336B2 (en) * 2008-01-17 2014-03-18 Microsoft Corporation Block count based procedure layout and splitting
US8966465B2 (en) 2008-02-12 2015-02-24 Oracle International Corporation Customization creation and update for multi-layer XML customization
US8484623B2 (en) * 2008-03-26 2013-07-09 Avaya, Inc. Efficient program instrumentation
US8739145B2 (en) * 2008-03-26 2014-05-27 Avaya Inc. Super nested block method to minimize coverage testing overhead
US8291399B2 (en) 2008-03-26 2012-10-16 Avaya Inc. Off-line program analysis and run-time instrumentation
US8752007B2 (en) * 2008-03-26 2014-06-10 Avaya Inc. Automatic generation of run-time instrumenter
US8996658B2 (en) 2008-09-03 2015-03-31 Oracle International Corporation System and method for integration of browser-based thin client applications within desktop rich client architecture
US8799319B2 (en) 2008-09-19 2014-08-05 Oracle International Corporation System and method for meta-data driven, semi-automated generation of web services based on existing applications
US9122520B2 (en) 2008-09-17 2015-09-01 Oracle International Corporation Generic wait service: pausing a BPEL process
TW201032535A (en) 2008-10-14 2010-09-01 Ibm A method of handling a message
US8244567B2 (en) * 2008-12-31 2012-08-14 Synnex Corporation Business goal incentives using gaming rewards
US8429606B2 (en) * 2009-05-29 2013-04-23 Red Hat, Inc. Transactional object container
US8495103B2 (en) * 2009-05-29 2013-07-23 Red Hat, Inc. Method and apparatus for determining how to transform applications into transactional applications
CN101630268B (zh) * 2009-08-20 2012-07-04 中国科学技术大学 同步优化的方法及设备
US8429627B2 (en) * 2009-10-12 2013-04-23 National Instruments Corporation Asynchronous preemptive edit time semantic analysis of a graphical program
US8468512B2 (en) * 2009-10-30 2013-06-18 International Business Machines Corporation Abstracting benefit rules from computer code
US8849780B2 (en) * 2009-11-02 2014-09-30 Sap Ag System and method for automation of consistent lock management
US8972994B2 (en) * 2009-12-23 2015-03-03 Intel Corporation Method and apparatus to bypass object lock by speculative execution of generated bypass code shell based on bypass failure threshold in managed runtime environment
US20110246970A1 (en) * 2010-03-30 2011-10-06 Nec Laboratories America, Inc. Interval analysis of concurrent trace programs using transaction sequence graphs
US8843907B2 (en) 2011-08-25 2014-09-23 Myezapp Inc. Compiler with error handling
US8954942B2 (en) * 2011-09-30 2015-02-10 Oracle International Corporation Optimizations using a BPEL compiler
US8806452B2 (en) 2011-11-10 2014-08-12 International Business Machines Corporation Transformation of computer programs and eliminating errors
US9971896B2 (en) * 2011-12-30 2018-05-15 International Business Machines Corporation Targeted security testing
US20130246080A1 (en) * 2012-03-19 2013-09-19 International Business Machines Corporation Generating Policy Summaries From Logic Code
US8997042B2 (en) * 2012-10-15 2015-03-31 Pivotal Software, Inc. Flexible and run-time-modifiable inclusion of functionality in computer code
US9195458B2 (en) 2013-07-31 2015-11-24 International Business Machines Corporation System and/or method for computing interprocedural dominators
US10095490B2 (en) * 2016-07-28 2018-10-09 International Business Machines Corporation System, method and apparatus for preventing vulnerable interleavings in web applications at compile time
CN111861747A (zh) 2020-07-08 2020-10-30 支付宝(杭州)信息技术有限公司 交易链路异常处理方法、装置、电子设备
CN113672206B (zh) * 2021-09-02 2024-04-02 北京航空航天大学 一种x语言混合建模平台及建模方法

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3311381B2 (ja) * 1992-03-18 2002-08-05 富士通株式会社 コンパイラにおける命令スケジューリング処理方法
CA2134059C (en) * 1993-10-29 2009-01-13 Charles Simonyi Method and system for generating a computer program
JP3311462B2 (ja) * 1994-02-23 2002-08-05 富士通株式会社 コンパイル処理装置
JP3606387B2 (ja) * 1994-09-13 2005-01-05 松下電器産業株式会社 コンパイル装置
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler
US6035124A (en) * 1995-12-06 2000-03-07 International Business Machines Corporation Method of, system for, and computer program product for providing extended global value numbering
JPH09330232A (ja) * 1996-06-07 1997-12-22 Nec Corp 動的記憶域割り付け方式
US5991540A (en) * 1997-04-01 1999-11-23 Intel Corporation Method for identifying partial redundancies in existing processor architectures
US6016398A (en) * 1997-04-01 2000-01-18 Intel Corporation Method for using static single assignment to color out artificial register dependencies
US6026241A (en) * 1997-06-13 2000-02-15 Silicon Graphics, Inc. System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation
JPH11238012A (ja) * 1998-02-20 1999-08-31 Hitachi Ltd メモリアクセス一括化方法および記憶媒体
SE521433C2 (sv) * 1998-07-22 2003-11-04 Ericsson Telefon Ab L M En metod för hantering av risken för en total låsning mellan samtidiga transaktioner i en databas
US6260190B1 (en) * 1998-08-11 2001-07-10 Hewlett-Packard Company Unified compiler framework for control and data speculation with recovery code
US6230198B1 (en) * 1998-09-10 2001-05-08 International Business Machines Corporation Server-to-server event logging
US6182284B1 (en) * 1998-09-30 2001-01-30 Hewlett-Packard Company Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6502238B1 (en) * 1998-12-31 2002-12-31 Honeywell International Inc. System for constructing and distributing block-based fragments
US6327699B1 (en) * 1999-04-30 2001-12-04 Microsoft Corporation Whole program path profiling
US7188344B1 (en) * 1999-12-21 2007-03-06 Unisys Corporation Architecture for a read/write thread lock
US6925638B1 (en) * 2000-09-21 2005-08-02 International Business Machines Corporation Mutability analysis in Java
GB0025053D0 (en) * 2000-10-12 2000-11-29 Sgs Thomson Microelectronics Compiling computer programs including branch instructions
GB0025052D0 (en) * 2000-10-12 2000-11-29 Sgs Thomson Microelectronics Compiling computer programs including branch instructions
US7117488B1 (en) * 2001-10-31 2006-10-03 The Regents Of The University Of California Safe computer code formats and methods for generating safe computer code
US7089542B2 (en) * 2002-12-13 2006-08-08 International Business Machines Corporation Method and apparatus for finding errors in software programs using satisfiability of constraints
US7895584B1 (en) * 2003-03-14 2011-02-22 Xilinx, Inc. Translation of a program in a dynamically-typed language to a program in a hardware description language
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
CA2453714A1 (en) * 2003-12-19 2005-06-19 Ibm Canada Limited - Ibm Canada Limitee Method, system and product for indentifying and executing locked read regions and locked write regions in programming languages that offer synchronization without explicit means to distinguish between such regions
US7490218B2 (en) * 2004-01-22 2009-02-10 University Of Washington Building a wavecache
US7574703B2 (en) * 2004-09-30 2009-08-11 Broadcom Corporation Method and apparatus for reducing instruction dependencies in extended SSA form instructions

Also Published As

Publication number Publication date
JP2005071331A (ja) 2005-03-17
JP4728607B2 (ja) 2011-07-20
US20050050527A1 (en) 2005-03-03
CN1591335A (zh) 2005-03-09
US20070214452A1 (en) 2007-09-13
EP1513064A2 (en) 2005-03-09
EP1513064B1 (en) 2009-06-03
US8196122B2 (en) 2012-06-05
US7210135B2 (en) 2007-04-24
DE602004021324D1 (de) 2009-07-16
CN100422933C (zh) 2008-10-01
EP1513064A3 (en) 2007-08-15
ATE433150T1 (de) 2009-06-15

Similar Documents

Publication Publication Date Title
KR20050022282A (ko) 트랜잭션 프로세스의 데이터 흐름을 분석하는 방법 및 매체
Gay et al. Linear type theory for asynchronous session types
Gay et al. Modular session types for distributed object-oriented programming
Zhang et al. Resolving feature convolution in middleware systems
US7774697B2 (en) System and method for structuring distributed applications
US8606843B2 (en) Efficient processing of a convoy workflow scenario in a message driven process
Kouzapas et al. Typechecking protocols with Mungo and StMungo
US7467371B1 (en) Binding for business workflow processes
KR20060087999A (ko) 확장가능 워크플로 모델에 관한 선언적 표현
WO2002005106A1 (en) Method and apparatus for providing process-container platforms
Imai et al. Multiparty session programming with global protocol combinators
US7343589B2 (en) Declarative state space reduction in a transactional messaging language
Kim et al. Design of service-oriented systems using SODA
Kozlenkov et al. Prova: Rule-based java scripting for distributed web applications: A case study in bioinformatics
Milanovic Contract-based web service composition
Carpineti et al. Piduce—a project for experimenting web services technologies
Pérez et al. An overview on protocol adaptors for service component integration
Heckel et al. Model-based development of executable business processes for web services
Schöne et al. Incremental causal connection for self-adaptive systems based on relational reference attribute grammars
Plyukhin et al. Ozone: Fully Out-of-Order Choreographies
Biörnstad A workflow approach to stream processing
Tremblay et al. Towards specifying contracts and protocols for Web services
Vajihollahi High level specification and validation of the business process execution language for web services
Venkatesan BPEL Validation with Object Constraint Language (OCL)
da Costa Web Services Recovery Mechanisms

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid