[go: up one dir, main page]

KR20040086214A - 인핸스드 런타임 호스팅 - Google Patents

인핸스드 런타임 호스팅 Download PDF

Info

Publication number
KR20040086214A
KR20040086214A KR1020040022635A KR20040022635A KR20040086214A KR 20040086214 A KR20040086214 A KR 20040086214A KR 1020040022635 A KR1020040022635 A KR 1020040022635A KR 20040022635 A KR20040022635 A KR 20040022635A KR 20040086214 A KR20040086214 A KR 20040086214A
Authority
KR
South Korea
Prior art keywords
runtime
computer
host application
task
instructions
Prior art date
Application number
KR1020040022635A
Other languages
English (en)
Other versions
KR100898315B1 (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 KR20040086214A publication Critical patent/KR20040086214A/ko
Application granted granted Critical
Publication of KR100898315B1 publication Critical patent/KR100898315B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47GHOUSEHOLD OR TABLE EQUIPMENT
    • A47G7/00Flower holders or the like
    • A47G7/02Devices for supporting flower-pots or cut flowers
    • A47G7/04Flower tables; Stands or hangers, e.g. baskets, for flowers
    • A47G7/044Hanging flower-pot holders, e.g. mounted on walls, balcony fences or the like
    • AHUMAN NECESSITIES
    • A01AGRICULTURE; FORESTRY; ANIMAL HUSBANDRY; HUNTING; TRAPPING; FISHING
    • A01GHORTICULTURE; CULTIVATION OF VEGETABLES, FLOWERS, RICE, FRUIT, VINES, HOPS OR SEAWEED; FORESTRY; WATERING
    • A01G9/00Cultivation in receptacles, forcing-frames or greenhouses; Edging for beds, lawn or the like
    • A01G9/02Receptacles, e.g. flower-pots or boxes; Glasses for cultivating flowers
    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47GHOUSEHOLD OR TABLE EQUIPMENT
    • A47G7/00Flower holders or the like
    • A47G7/02Devices for supporting flower-pots or cut flowers
    • A47G7/06Flower vases
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Environmental Sciences (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

인핸스드 런타임 호스팅(enhanced runtime hosting)을 위한 시스템 및 방법이 설명된다. 한 실시양상에서, 런타임은 호스트 어플리케이션에 의해 노출된 소정의 추상화 인터페이스(들)을 식별한다. 추상화 인터페이스(들)은 호스팅 어플리케이션에 의해 구현된 각각의 실행 환경 기능에 대응한다. 런타임 관리 코드의 실행 중에, 그리고 각각의 실행 환경 추상화들 중의 식별된 것과 연관된 액션 또는 이벤트에 응답하여, 런타임은 추상화 인터페이스(들) 중의 특정한 것에 대응하는 특정 인터페이스 또는 오브젝트를 호출한다. 이것은 호스트 어플리케이션이, 구현된 추상화(들)의 기능으로서 런타임을 포함하는 실행 환경을 개별주문화/향상할 수 있게 한다.

Description

인핸스드 런타임 호스팅{ENHANCED RUNTIME HOSTING}
<관련 출원>
본원은 본원의 출원인에게 함께 양도되고 2000년 6월 21일자로 미국특허청에출원된 제목이 "Method And System For Compiling Multiple Languages"인 미국특허출원 제09/598,105호와 관련되며, 이를 참조한다.
본 발명은 컴퓨터 소프트웨어 개발에 관한 것이다. 더욱 구체적으로, 본 발명은 어플리케이션과 호스트된 런타임 서비스 사이의 실행 환경의 통합을 증가시키는 어플리케이션 프로그램 인터페이스(API)들에 관한 것이다.
오늘날의 복잡한 컴퓨터-프로그램 및 네트워킹 환경에서, 코드 공유, 범위성(scalability), 및 기타 상호-플랫폼 프레임네트워크와의 통합은 일반적으로 매우 바람직하다. 호스팅 어플리케이션(즉, 이후 종종 "호스트"로 언급)에 의한 런타임의 사용은 일반적으로 어플리케이션 개발자가 상호-플랫폼 호환성, 증가된 범위성, 공통 유형 시스템, 다중-언어 지원, 자동 메모리 관리 등을 갖는 관리 코드를 기입할 수 있게 한다. 런타임은, 예를 들어 CLR(Common Language Runtime), 자바 VM(Java Virtual Machine) 등을 포함한다.
대부분의 호스트는 관리 코드 및 비관리 코드로 이루어진다. 관리 코드는 런타임의 제어 하에 실행되는 코드이다. 이와 반대로, 비관리 코드는 런타임의 밖에서 실행되는 코드이다. 공통 오브젝트 모델(COM) 컴포넌트인 ActiveX인터페이스 및 WIN32API 함수들은 비관리 코드의 예이다. 비관리 호스팅 코드는 공통 언어 런타임을 구성하고, 이것을 프로세스(즉, 실행 프로그램) 내로 로드하여, 프로그램을 관리 코드로 바꾸는데 사용된다.
이러한 기본적인 상호작용 이외에, 일단 한 프로세스가 실행되고 있으면, 호스트와 런타임 사이의 상호작용은 전형적으로, 소정의 태스크를 실행하기 위한 런타임을 관리하는 호스트에 제한된다. 몇몇 경우에, 호스트는 요청된 런타임 태스크가 완료되었다는 것을 알려주는 이벤트 또는 메시지를 수신할 수 있다. 이러한 제한된 호스트/런타임 상호작용은 프로세스 실행 동안에 호스트와 런타임 간의 통합의 상당한 결핍을 나타낸다. 이러한 이유로, 호스트 및 런타임은 하나의 프로세스에 있어서 실질적으로 분리된 엔티티를 나타낸다고 할 수 있다. 호스트와 런타임 간의 실행 환경 통합의 이러한 결핍은 호스팅 어플리케이션이 런타임에 의해 제공된 다수의 서비스에 관해 거의 제어하지 않는다는 점에 있어서 상당히 제한적이다.
예를 들어, 호스트가 협동적 또는 비선점의 스레딩을 이용한다고 하면, 이것은 일반적으로 호스트에게 호스트의 실행 환경에서 실행되는 모든 스레드의 지식을 최소한 가질 것을 요구한다. 또한, 런타임이 OS의 비협동적 또는 선점의 스레딩 모델에 의지한다고 하자. (런타임은 전형적으로 운영 체계(OS) 스레딩, 메모리 관리, 동기화, 보안 등, 구현에 의지한다). 이 시나리오에 있어서, 호스트는 스레드를 런타임 내로 보낼 수 있다. 이때, OS 선점 태스킹은 호스트의 비선점 스레드를 차단할 수 있고/있거나, 호스트는 태스크를 완전히 다른 물리 스레드로 이동시킬 수 있다. 사태를 더욱 악화시키는 것으로, 호스트 스레드는 런타임에서 호스트 또는 런타임에 속하지 않는 코드로 나갈수 있고, 그 결과 호스트 지식이 없는 호스트 스레드에 정말로 무슨일이 발생할 수 있다. 이러한 비통합된 호스트/런타임 스레드 관리는 호스트 런타임 성능 및 범위성을 상당히 열화시킬 수 있고; 데이터 응집손실 초래, 호스트가 검출할 수 없는 교착상태 발생, 및/또는 그렇지 않으면 예측불가능한 호스트 및 시스템 동작 야기를 발생시킬 수 있다.
상술한 예는 호스트와 런타임 간의 실행 환경 통합의 결핍이 호스트 어플리케이션의 예상된 구현(들)을 망칠 수 있다는 것을 보여준다. 이것은 특히, 호스트가 향상된 범위성 및 높은 성능을 위해서 시간을 통해 스레딩, 메모리, 동기화, 및/또는 보안 구현을 조정한 경우이다. 그러므로, 호스트가 런타임 사용의 이점(예를 들어, 상호-플랫폼 호환성, 감소된 코딩 노력 등)을 원하더라도, 호스트가 특별히 조정한 구현은 대응하는 런타임 서비스와 호환할 수 없게 될 수 있다. 따라서, 호스트는 단지, 호스트-공급 서비스에 의지하는 런타임을 로드할 수 있거나, 또는 언더라잉 OS 서비스를 직접 억세스함으로써 런타임 서비스를 완전히 바이패스할 수 있다. 이러한 워크-어라운드(들)(work-around(s))은 유익한 런타임 시스템 서비스가 제공을 위해 설계된 것에 어플리케이션 설계자가 영향을 줄 수 없게 하여, 보다 덜 통합된 휴대용 제품을 초래한다.
따라서, 호스트와 런타임 간의 실행 환경 제어를 증가시키기 위한 시스템 및 방법이 매우 요구된다.
인핸스드 런타임 호스팅을 위한 시스템 및 방법이 설명된다. 한 실시양상에서, 런타임은 호스트 어플리케이션에 의해 노출된 소정의 추상화 인터페이스(들)을 식별한다. 추상화 인터페이스(들)은 호스팅 어플리케이션에 의해 구현된 각각의 실행 환경 기능에 대응한다. 런타임 관리 코드의 실행 중에, 그리고 각각의 실행환경 추상화들 중의 식별된 것과 연관된 액션 또는 이벤트에 응답하여, 런타임은 추상화 인터페이스(들) 중의 특정한 것에 대응하는 특정 인터페이스 또는 오브젝트를 호출한다. 이것은 호스트 어플리케이션이, 구현된 추상화(들)의 기능으로서 런타임을 포함하는 실행 환경을 개별주문화/향상할 수 있게 한다.
도 1은 인핸스드 런타임 호스팅을 제공하기 위한 시스템 및 방법이 구현될 수 있는 예시적인 컴퓨팅 환경의 블록도이다.
도 2는 인핸스드 런타임 호스팅을 제공하기 위한 예시적인 절차를 도시한 도면이다.
도 3은 런타임과 호스팅 어플리케이션 메모리 추상화(abstraction) 인터페이스들 사이의 예시적인 구조적 관계를 도시한 도면이다. 이 설명을 위해, "추상화"는 호스트 어플리케이션 내의 어플리케이션 개발자에 의해 선택적으로 구현되는 기능/방법이다. 호스트-구현 기능은 추상적인데, 왜냐하면, 이것은 뒤따랐던 런타임이 호스트 비구현 기능을 가진 실행 스레드를 본질적으로 대체할 것이기 때문이다. 이에 따라, 호스트-구현 기능을 억세스하는데 사용된 어플리케이션 프로그램 인터페이스는 "추상적(abstracted)" 또는 "추상화 인터페이스"라 불린다.
도 4는 런타임과 호스팅 어플리케이션 스레드 추상화 인터페이스들 사이의 예시적인 구조적 관계를 도시한 도면이다.
도 5는 관리 코드로부터/로 비관리 코드로/로부터 퇴출(exit)/역(reverse)-퇴출 및 진입(enter)/역-진입하기 위한 예시적인 관리/비관리 코드 호출 시퀀스를 도시한 도면이다.
도 6은 호스트 어플리케이션에 의해 OS 스레드 상에 스케쥴링된 파이버(fiber)로서 다루어지는 런타임 태스크의 예시적인 태스크 스케쥴링을 도시한 블록도이다.
<도면의 주요 부분에 대한 부호의 설명>
102 : 컴퓨팅 장치
104 : 프로세서
110 : RAM
128 : 운영 체계
130 : 런타임
131 : 런타임 호스팅 인터페이스(RHI)
132 : 호스트 어플리케이션
133 : 호스트 추상화 인터페이스(HAI)
136 : 다른 프로그램 모듈
134 : 런타임 인터페이스(RI)
138 : 프로그램 데이터
이하, 첨부된 도면을 참조하여 본 발명에 대해 상세하게 설명하겠다. 도면에서, 구성요소 참조번호의 가장 좌측 숫자는 그 구성요소가 처음으로 나타나는 특정 도면과 동일한 것으로 간주한다.
개요
인핸스드 런타임 호스팅이 설명된다. 런타임을 호스트하는 어플리케이션(호스팅 어플리케이션)과 런타임 간의 종래의 통합은 호스팅 어플리케이션이 그것의 실행 환경의 상당한 부분에 관해서 거의 제어하지 않는다는 점에서 상당히 제한된다. 본 발명은 호스트와 런타임 간의 상당히 증가된 실행 환경 통합을 제공함으로써 이러한 통합의 결핍에 역점을 두고 다룬다. 이 증가된 통합은 호스트 어플리케이션이 제어를 구현하고 실행하여 실행 환경 기능, 이벤트 통지 및 런타임 동작을 개별주문화할 수 있게 하는 다중 레벨의 추상적 인터페이스로 구현된다. 이러한 추상화는, 예를 들어 메모리 관리, 스레딩, 입/출력(I/O) 완료, 동기화, 이벤트 통지(예를 들어, 스레드가 런타임에 진입하고 런타임에서 퇴출하는 경우) 서비스 추상화를 포함한다.
부수적으로, 런타임 인터페이스는 이벤트 통지를 포함하는 호스트 어플리케이션 구현의 특정 양상에 관해 실질적인 제어를 갖는 런타임을 제공한다. 런타임의 기능은 호스트 어플리케이션이 이러한 인핸스드 런타임 호스팅 인터페이스를 구현하도록 결정되었는 지의 여부에 상관없다.
예시적인 동작 환경
도면을 참조하면, 동일한 참조번호는 동일한 구성요소를 나타내고, 본 발명은 적절한 컴퓨팅 환경에서 구현되는 것으로 도시된다. 요구되지는 않았지만, 본 발명은 퍼스널 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 일반적으로 관련하여 설명된다. 프로그램 모듈은 일반적으로, 특정 태스크를 실행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다.
도 1은 이후 설명되는 인핸스드 런타임 호스팅을 위한 시스템, 장치 및 방법이 (완전히 또는 부분적으로) 구현될 수 있는 적절한 컴퓨팅 환경(100)의 예를 도시한 것이다. 예시적인 컴퓨팅 환경(100)은 적절한 컴퓨팅 환경의 한 예일 뿐이고, 여기에 설명된 시스템 및 방법의 사용 또는 기능의 범위에 관해 어떠한 제한을 가하도록 의도된 것은 아니다. 컴퓨팅 환경(100)은 컴퓨팅 환경(100)에 도시된 컴포넌트들 중의 임의의 하나 또는 조합에 관하여 임의의 종속성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
여기에 설명된 방법 및 시스템은 여러가지 다른 범용 또는 특수목적 컴퓨팅 시스템 환경들 또는 구성들과 함께 동작할 수 있다. 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 멀티프로세서 시스템, 마이크로프로세서-기반 시스템, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템 또는 장치 중의 임의의 것을 포함하는 분산형 컴퓨팅 환경 등을 포함하는데, 이것에 제한되지는 않는다. 프레임워크의 컴팩트 또는 서브셋 버전은 또한 셀룰러 폰, 퍼스널 디지털 어시스턴츠, 핸드헬드 컴퓨터 또는 다른 통신/컴퓨팅 장치와 같은 제한된 자원의 클라이언트 내에 구현될 수 있다. 본 발명은 또한 통신 네트워크를 통해 링크되는 원격 프로세싱 장치에 의해 태스크가 수행되는 분산형 컴퓨팅 환경에서 실시될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치 내에 위치될 수 있다.
도 1에 도시된 바와 같이, 컴퓨팅 환경(100)은 컴퓨터(102) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(102)의 컴포넌트들은 하나 이상의 프로세서 또는 프로세싱 유닛(104), 시스템 메모리(106), 및 시스템 메모리(106)를 포함하는 여러가지 시스템 컴포넌트를 프로세서(104)에 연결하는 버스(108)를 포함할 수 있는데, 이것에 제한되지는 않는다.
시스템 버스(108)는 여러가지 버스 아키텍처들 중의 임의의 것을 사용하는 메모리 버스 또는 메모리 제어기, 주변 버스, 가속 그래픽 포트, 및 프로세서 또는 로컬 버스를 포함하는 임의의 몇가지 유형의 버스 구조들 중의 하나 이상을 나타낸다. 예로서, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 인핸스드 ISA(Enhanced ISA; EISA) 버스, 비디오 일렉트로닉스 표준 어소시에이션(VESA) 로컬 버스, 및 메자닌(Mezzanine) 버스로도 알려져 있는 주변 컴포넌트 상호접속(PCI) 버스를 포함하지만, 이에 제한되지는 않는다.
컴퓨터(102)는 전형적으로 여러가지 컴퓨터 판독가능 매체를 포함한다. 이러한 매체는 컴퓨터(102)에 의해 억세스가능한 임의의 이용가능한 매체일 수 있으며, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 포함한다. 도 1에서, 시스템 메모리(106)는 RAM(Random Access Memory)(110)과 같은 휘발성 메모리의 형태 및 ROM(Read Only Memory)(112)과 같은 비휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함한다. 시동중과 같은 때에 컴퓨터(102) 내의 구성요소들 사이의 정보 전달을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(BIOS)(114)은 ROM(112) 내에 저장된다. RAM(110)은 전형적으로 프로세서(104)에 즉시 억세스가능하고/하거나 프로세서(104)에 의해 현재 동작되고 있는 프로그램 모듈 및/또는 데이터를 포함한다.
컴퓨터(102)는 또한 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 예를 들어, 도 1은 비분리형 비휘발성 자기 매체(도시되지 않음, 전형적으로 "하드 드라이브"로 불림)로부터/로 판독/기입하기 위한 하드 디스크 드라이브(116), 분리형 비휘발성 자기 디스크(120)(예를 들어, "플로피 디스크)로부터/로 판독/기입하기 위한 자기 디스크 드라이브(118), 및 CD-ROM/R/RW, DVD-ROM/R/RW/+R/RAM 또는 다른 광 매체와 같은 분리형 비휘발성 광 디스크(124)로부터 판독하거나 또는 그 광 디스크(124)로 기입하기 위한 광 디스크 드라이브(122)를 도시한 것이다. 하드 디스크 드라이브(116), 자기 디스크 드라이브(118) 및 광 디스크 드라이브(122)는 하나 이상의 인터페이스(126)에 의해 버스(108)에 각각 접속된다.
드라이브 및 연관된 컴퓨터-판독가능 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램, 모듈, 및 컴퓨터(102)를 위한 다른 데이터의 비휘발성 저장을 제공한다. 여기에 설명된 예시적인 환경이 하드 디스크, 분리형 자기 디스크(120) 및 분리형 광 디스크(124)를 사용하고 있지만, 본 분야에 숙련된 기술자라면, 자기 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, RAM, ROM 등과 같이 컴퓨터에 의해 억세스가능한 데이터를 저장할 수 있는 다른 형태의 컴퓨터 판독가능 매체가 또한 예시적인 동작 환경에서 사용될 수 있다는 것을 이해할 수 있을 것이다.
사용자는 키보드(140) 및 포인팅 장치(142)(예를 들어, "마우스")와 같은 입력 장치를 통해 커맨드 및 정보를 컴퓨터(102) 내로 제공할 수 있다. 다른 입력 장치(도시되지 않음)는 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 직렬 포트, 스캐너, 카메라 등을 포함할 수 있다. 이들 및 다른 입력 장치는 버스(108)에 연결되는 사용자 입력 인터페이스(144)를 통해 프로세싱 유닛(104)에 접속되지만, 병렬 포트, 게임 포트 또는 유니버셜 시리얼 버스(USB)와 같은 기타 인터페이스 및 버스 구조에 의해 접속될 수 있다.
모니터(146) 또는 다른 형태의 표시 장치는 또한 비디오 어댑터(148)와 같은 인터페이스를 통해 버스(108)에 접속된다. 모니터(146) 이외에, 퍼스널 컴퓨터는 전형적으로, 출력 주변 인터페이스(150)를 통해 접속될 수 있는 스피커 및 프린터와 같은 기타 주변 출력 장치(도시되지 않음)를 포함한다.
컴퓨터(102)는 원격 컴퓨터(152)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용한 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(152)는컴퓨터(102)와 관련하여 여기에 설명된 다수의 또는 모든 구성요소 및 특징을 포함할 수 있다. 도 1에 도시된 논리적 접속은 LAN(Local Area Nerwork)(154) 및 일반적인 WAN(Wide Area Network)(156)이다. 이러한 네트워킹 환경은 사무실, 기업 광역 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적인 것이다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(102)는 네트워크 인터페이스 또는 어댑터(158)를 통해 LAN(154)에 접속된다. WAN 네트워킹 환경에서 사용되는 경우, 컴퓨터는 전형적으로 WAN(156)을 통해 통신을 설정하는 모뎀(160) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(160)은 사용자 입력 인터페이스(144) 또는 기타 적절한 메카니즘을 통해 시스템 버스(108)에 접속될 수 있다.
도 1에 도시된 것은 인터넷을 통한 WAN의 특정 구현예이다. 여기에서, 컴퓨터(102)는 인터넷(162)을 통해 최소한 하나의 원격 컴퓨터(152)와의 통신을 설정하기 위해 모뎀(160)을 사용한다.
네트워크 환경에서, 컴퓨터(102)와 관련하여 설명된 프로그램 모듈, 또는 그 일부분은 원격 메모리 저장 장치 내에 저장될 수 있다. 그러므로, 예를 들어, 도 1에 도시된 바와 같이, 원격 어플리케이션 프로그램(164)은 원격 컴퓨터(152)의 메모리 장치에 상주할 수 있다. 도시되고 설명된 네트워크 접속은 예시적인 것이고, 컴퓨터들 사이의 통신을 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 수 있을 것이다.
다수의 프로그램 모듈은 하드 디스크, 자기 디스크(120), 광 디스크(124), ROM(112), 또는 예를 들어, 운영 체계(OS)(128), 런타임(130), 호스트 어플리케이션(132)(이후, 종종 "호스트"(132)로 언급됨), 다른 프로그램 모듈(136) 및 프로그램 데이터(138)를 포함하는 RAM(110) 상에 저장될 수 있다. OS는 파일 관리, 이벤트 핸들링, 프로세스 및 스레드, 메모리 관리, 사용자 인터페이스(예를 들어, 윈도윙, 메뉴, 다이알로그 등), 보안, 인증, 검증 등과 같은 종래의 기능을 제공한다.
런타임(130) 및 호스트 어플리케이션(132)은 어플리케이션 개발자가 호스팅 어플리케이션과 런타임 사이의 프로세스 실행을 개별화하여 긴밀하게 통합하도록 인핸스드 런타임 호스팅 추상화 인터페이스(131)를 노출시킨다. 이 설명을 위해, "추상화"는 호스트 어플리케이션 내에서 어플리케이션 개발자에 의해 선택적으로 구현되는 기능/방법이다. 호스트-구현 기능은 추상적인데, 왜냐하면, 이것은 뒤따랐던 런타임이 호스트 비구현 기능를 가진 실행 스레드를 본질적으로 대체할 것이기 때문이다. 이에 따라, 런타임이 서비스를 호스트 구현 기능으로 다시 향하게 하도록 호스트(132)에 의해 노출된 API 및/또는 호스트가 호스트 액션의 런타임을 통지하도록 런타임(130)에 의해 노출된 API는 "추상적" 또는 "추상화 인터페이스"(즉, 추상화 인터페이스(131))라 불린다.
호스트에 의해 구현된 추상화 인터페이스(131)(이후 종종 "런타임 호스팅 인터페이스"(RHI)(131)로 언급됨)는 호스트 추상화 인터페이스(HAI)(133)로 언급된다. HAI는 메모리, 스레딩, I/O 완료, 동기화, 및/또는 호스트에 의해 제공된 기타 서비스 기능의 소정의 조합에 매핑된다. RHI(131)는 호스트 어플리케이션(들)이 현재의 구현예에서 가능한 것보다 더 많은 런타임(13)의 양상을 개별주문화하고 제어할 수 있게 함으로써 런타임과 호스트 사이의 종래의 인터페이스의 기능을 상당히 확장시킨다. 이것은 상당히 제한적이고 문제가 있는 종래의 호스트/런타임 실행 환경 통합에 비해, 런타임(130)과 호스트(132) 실행 모델 간의 상당히 더욱 긴밀한 실행 환경 통합을 제공한다.
런타임(130)과 호스트 어플리케이션(132) 사이의 HAI(133)의 협동적 교환은 각각의 엔티티가 어떤 기능들이 호스트에 의해 실행될 것인지와 어떤 기능들이 추상화될 것인 지를 협의할 수 있게 하므로, 이 기능들이 런타임에 의해 실행된다. 이와 같이, 호스트 어플리케이션은 그것의 실행 환경을 개별주문화할 수 있다. 노출된 HAI는 또한 런타임이 소정의 호스트 실행 환경 파라미터를 구성할 수 있게 하고, 호스트에게(예를 들어, 공급된 콜백(callbacks)을 통해) 특정 런타임 이벤트(예를 들어, 자원 할당 실패, 스레드 상태 등)를 통지한다.
런타임(130)은 호스트 어플리케이션(132)에 의해 사용하기 위한 런타임 인터페이스(RI)(134)를 노출시켜서, 런타임 동작을 구성하고, 런타임에게 소정의 이벤트를 통지하며, 프로세스 실행 중에 추가 정보를 얻는 등등을 한다. 프로세스 실행 중에, RI로의 호스트 어플리케이션 호출은 특정 서비스의 호스트 특정 구현을 위해 하나 이상의 HAI(133)를 통해 다시 호스트 어플리케이션으로 향해지고, 실행을 위해 운영 체계(128)로 넘겨지며, 런타임에 의해 국부적으로 다루어지고, 그리고/또는 오브젝트 모델 서비스(즉, "다른 프로그램 모듈"(136))로 통신된다.
메모리 추상화 인터페이스
런타임 호스팅 인터페이스(RHI)(131)의 메모리 관리부는:
· 런타임(130)이 모든 메모리 할당을 요청할 수 있는 인터페이스(즉, 노출된 호스트 어플리케이션 인터페이스(HAI)(133)들 중의 하나)를 호스트(132)가 제공할 수 있게 한다. 한 구현예에서, 호스트 인터페이스(133)는 OS 메모리 API와 표준 C 런타임 할당 루틴을 대체하는 방법을 제공한다.
· 런타임(130)이 현재 OS로부터 얻은 로우(low) 메모리 통지를 추상화하기 위해 호스트(132)에게 메카니즘을 제공한다. 이것은 런타임(130)에게, 예를 들어 불용정보(garbage) 수집 서비스를 통해 이용가능한 추가 메모리를 작성하라고 요청하는 메카니즘을 호스트에게 제공한다.
· 런타임(130)이 특정 할당의 실패 결과를 호스트(132)에게 알릴 수 있게 하고, 더 나아가 할당이 실패되어야 하는 경우에 런타임이 취해야 하는 액션을 호스트가 개별주문화할 수 있게 한다. 예를 들어, 런타임이 어플리케이션 도메인을 언로드(unload)해야 하거나, 이것을 "장애" 상태로 실행하게 한다.
다음의 시나리오는 RHI(131)의 메모리 부분의 예시적인 사용을 제공한다. 호스트(132)가 구성가능한 양의 메모리(110)(예를 들어, 컴퓨팅 장치(102) 상의 물리적 메모리의 일부 또는 거의 전부) 내에서 동작한다고 하자. 성능을 최대화하기 위해, 호스트는 모든 메모리 할당을 추적하고, 페이징이 결코 발생하지 않게 보장한다(이 예의 호스트는 디스크(116)로 페이징하기 보다는 오히려 메모리 할당을 실패할 것이다). 모든 할당을 정확하게 추적하기 위해, 호스트는 메모리를 할당하기 위해 노출된 호스트 추상화 인터페이스(HAI)(133)를 호출하기 위한 런타임(130)을 감독한다. 이것은 페이징이 발생하기 전에 런타임의 메모리 할당을 실패하게 하는 능력을 호스트에게 제공한다.
스레딩 추상화 인터페이스
이 부분은 RHI(131)의 스레드 관리부의 상세이다. 이들 스레드 관리 호스팅 API는 OS 스레드의 노션(notion)을 추상화하고, 호스트(132)에 의해 정의될 실행 및 스케쥴링의 유닛을 본질적으로 움직이게 한다. 이것은 그들 자신의 파이버 기반의 스케쥴링 메카니즘을 구현하는 호스트를 지원한다. "태스크"라는 용어는 이 추상화를 정의하는데 종종 사용되고, "스레드"라는 말을 특정 호스트 어플리케이션의 실행 및 스케쥴링 유닛으로부터 분리하는데 사용된다. 이것에 비추어보아, 스레드 관리 API는:
· 런타임(130)이 새로운 태스크(스레드)를 작성하여 시작하기 위해 사용할 수 있는 인터페이스(133)를 호스트(132)가 제공할 수 있게 한다.
· 호스트(132)에게 태스크의 런타임 구현 부분을 "재사용"하거나 풀링(pooling)하는 메카니즘을 제공한다. 이것은 호스트 구현 태스크 작성 및 셋업 동작을 최소화하기 위해 호스트 어플리케이션에 의해 사용될 수 있는 성능 최적화를 고려한 것이다.
· 태스크가 실행가능 상태로 또는 실행가능 상태로부터 이동되었을 때 런타임(130)에게 통지하기 위해 콜백을 구현한다. 호출이 실행가능 상태로부터 이동되면, 호스트 API(133)는 태스크가 가능한 한 빨리 호스트(132)에 의해 다시 스케쥴링되어야 한다는 것을 런타임(130)이 지정할 수 있게 한다.
· 주어진 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우 동안에 차단된 실행을 할 수 없다는 것을 런타임(130)이 호스트(132)에게통지하는 방식을 제공한다.
· 호스트(132)가 스레드 풀의 구현을 제공할 수 있게 하여, 작업 아이템을 큐잉하고, 스레드 풀의 크기를 설정하고 조회할 수 있는 등의 능력을 런타임(130)에게 제공한다.
· "장소(locale)"가 주어진 태스크에 대해 변경되었다는 통지를 호스트(132) 및 런타임(130) 양측에 제공한다. 장소는 소프트웨어의 국소화에 관련된다. 런타임(130)은 현재 장소의 노션을 포함하고, 대부분의 호스트 어플리케이션(132)도 마찬가지로 행한다. 이들 통지 인터페이스는 장소가 런타임(130)과 호스트(132)의 어느 한쪽에서 변경된 경우에 런타임(130) 및 호스트(132)가 서로 말할 수 있게 하므로, 런타임과 호스트의 양측은 동기로 유지된다. 예를 들어, 장소가 런타임측에서 변경되면, 호스트(132)에 의해 구현된 데이터베이스 내의 분류 순서에 영향을 미칠 수 있다.
· 런타임(130)이 주어진 태스크의 호스트(132) 중단을 지연할 수 있게 한다.
· 런타임(130)(및 사용자 코드)에 태스크의 우선순위를 조정하는 수단을 제공한다.
다음의 시나리오는 RHI(131)의 스레드 관리부의 예시적인 사용을 제공한다. 특정 호스트 어플리케이션(132)이 "파이버 모드" 실행을 구현한다고 하자. 파이버 모드에서, 특정 호스트(예를 들어, SQL 서버)는 컴퓨팅 장치(102) 상의 프로세서(104)의 수에 기초하거나, 그밖의 다른 호스트-지정 기준에 기초하여 몇개의 스레드를 작성할 수 있다. 그 다음 호스트는 사용자 코드("다른 프로그램 모듈"(136)의 일부)를 실행하기 위한 이들 스레드 상에 파이버를 작성한다. 호스트는 이들 파이버를 협동적인 형태(호스트 전문용어로 비선점이라 함)로 스케쥴링하고 - 파이버가 몇가지 동작에 대해 방해할 때, 이것은 "스위치드 아웃"으로 되고, 스레드는 다른 파이버를 실행한다. 나중에, 파이버는 다시 스케줄링되어 실행될 수 있다(반드시 동일한 스레드 상에서는 아님). 런타임(130)이 호스팅 API(134)를 통해 "태스크"를 작성하면, 그것은 호스트(132) 내의 파이버가 되고, 호스트의 스케쥴러에 의해 자연스럽게 이해된다.
I/O 완료 추상화 인터페이스
이 부분은 RHI(131)의 I/O 완료 관리부의 상세로서, 여기에서:
· 호스트(132)는 I/O 완료 포트로 핸들(handle)을 바인딩(binding)하기 위해 HAI(133)를 런타임(130)에 제공한다.
· 호스트(132)는 콜백을 공급하기 위해 HAI(133)를 런타임(130)에 제공한다. 콜백은, 예를 들어 비동기 I/O 동작이 완료될 때 호스트(132)에 의해 인보킹(invoking)된다.
· 런타임(130)은 런타임 서비스 I/O 루틴으로 패스된 OVERLAPPED 구조의 끝에 주문 데이터를 삽입하기 위해 RI(134)를 호스트(132)에 제공한다. OVERLAPPED 구조는 데이터형 파일 포인터 위치를 제공한다.
동기화
런타임(130)이 HAI(133)를 통해(즉, 호스트 어플리케이션(132)의 감독을 통해) 하나 이상의 태스크를 작성하면, 런타임은 또한 마찬가지로 대응하는 HAI를 통해 이들 태스크(들)에 대한 동기화 오브젝트를 작성할 것이다. 이것은 호스트의 지식없이 OS 스레드 상에서 로크(lock)가 취해지지 않는 것을 보장한다. 이것은 런타임(130) 태스크가 호스트 스레드 스케쥴링 메카니즘과 더욱 통합할 수 있게 하고, 호스트가 교착상태 검출을 수행할 수 있게 한다. 이 때문에, RHI(131)의 동기화 관리부는 런타임(130)이 HAI(133)를 통해 다음과 같은 동기화("sync") 프리미티브(primitive)들: 임계 구역, 이벤트(수동 및 자동-리셋), 세마포어(semaphores), 판독기/기입기 로크 및 모니터를 작성할 수 있게 한다.
런타임으로 진입하고 런타임에서 퇴출하기 위한 추상화 인터페이스
스레드 실행 관리 코드는 비관리 코드를 실행하기 위해 런타임(130)에서 나올 수 있다. 비관리 코드를 실행하기 위해 런타임(130)에서 나오는 스레드 상에 취해진 로크는 RHI(131)를 통해 진행할 수 없으므로, 이들은 호스트 어플리케이션(132)의 스레딩 및 동기화 모델과 통합될 수 없다. 이와 같이, 런타임은 스레드가 비관리 코드로부터 런타임(130)으로 진입하거나 런타임(130)에서 비관리 코드로 퇴출할 때 호스트-구현 콜백(콜백은 호스트에 의해 대응하는 RI(134)를 통해 런타임으로 제공됨)을 통해 호스트 어플리케이션에 통지한다. 이에 비추어보아, 런타임은:
· 런타임(130)의 안으로 그리고 밖으로의 스레드 이동 시에 호스트(132)에게 통지한다. 이러한 통지는 코드가 JIT(Just-In-Time) 컴파일링 시나리오로 컴파일되었는지 또는 본래의 이미지 컴파일 시나리오(예를 들어, ngen)로 컴파일되었는지에 상관없이 런타임의 밖으로 및 안으로의 호출을 후킹(hooking)함으로써 구현된다. 한 구현예에서, 통지는 호출되고 있는 루틴의 어드레스를 포함한다.
· 비관리 코드 및 대응하는 런타임 재진입에 대한 특정 기능 호출이 이러한 통지를 위해 런타임(130)에 의해 후킹되지 않는다는 것을 호스트(132)가 지정할 수 있게 한다. 이러한 호스트 명세는 런타임이 특정 호출을 최적화 방식으로 구현(예를 들어, 호출 인라인을 구현)할 수 있게 한다. 호스트는 이 인터페이스를 사용하여 그들이 "알고 있는(know about)" 호출(즉, 호스트 자체 또는 긴밀하게 통합된 기능의 구현의 일부인 호출)에 대한 훅(hook)을 바이패스한다.
예를 들어, 이러한 호스트-구현 콜백은 스레드가 런타임(130)에서 사용자 코드로 퇴출했기 때문에 특정 스레드의 움직임을 더 이상 예상할 수 없다는 것을 호스트에게 알려주는 "통지"(훅에 대한 호출)를 런타임(130)이 호스트(132)에게 보낼 수 있게 한다. 이러한 통지에 응답하여, 호스트(132)는 스레드가 런타임으로 복귀할 때까지, 호스트의 특정 구현에 특별한 소정의 비선점 스케쥴링 활동에 참여하기 위해 특정 스레드가 호스트(132)에 의해 스케쥴링되지 않는다는 것을 보장하도록 사전동작 단계를 가질 수 있다.
한 구현예에서, 이러한 훅은 프로세서(104)의 부동 소수점 상태를 조정하기 위해 호스트(132)에 의해 사용될 수 있다. 호스트(132)는 또한 하나 이상의 특정 기능 호출이, 예를 들어 호스트가 데이터 억세스 API를 호출할 때 런타임 통지를 피하기 위해 런타임(130)에 의해 후킹되지 않는다는 것을 나타내기 위해 RI(134)를 이용할 수 있다.
인핸스드 런타임 호스팅을 위한 예시적인 절차
도 2는 인핸스드 런타임 호스팅을 위한 예시적인 절차를 도시한 것이다. 설명을 위해, 도 2의 동작은 도 1을 참조하여 설명된다. 도 2는 동작(204-122)을 특정 번호로 나타냈지만, 이들 각각의 동작은 호스트 어플리케이션(132) 및 런타임(130) 상호작용의 기능, 실행 환경의 특성 등으로서 논리적으로 소정의 순서로 발생할 수 있다.
블록(202)에서, 호스트 어플리케이션(132)(도 1)이 런타임(130)(도 1)을 프로세스(즉, 개시시) 내로 로드한 후, 런타임(130)은 소정의 호스트-구현 실행 환경 추상화(즉, 호스트-구현 추상화)를 결정한다. 설명을 위해, 프로세스는 RAM(110)(도 1) 내의 각각의 호스트(132) 및 런타임(130) 컴포넌트에 의해 표시된다. (특정 추상화가 호스트에 의해 지원되었는 지의 여부는 런타임이 실행되는 방법의 중심이 아니다.) 한 구현예에서, 이 동작은 관심있는 실행 환경 추상화를 나타내는 리스트를 갖는 노출된 HAI(133)에 대한 런타임에 의한 요청/호출로 달성된다. 이러한 요청은 도 1의 "프로그램 데이터"(138)의 일부로 표시된다. 이러한 요청/호출에 응답하여, 호스트는 호스트-구현 실행 환경 추상화(예를 들어, 메모리, 스레드, 동기화, I/O 완료, 정책, 및/또는 기타 구현 추상화)를 억세스하기 위한 하나 이상의 추상화-특정 인터페이스(HAI(133) 내의 각 API)를 런타임(130)에 제공한다.
블록(204)에서, 만일 있다면, 실행 환경 추상화가 호스트 어플리케이션(132)에 의해 구현되는/지원되는 것에 관한 정보에 대한 런타임 요청에 응답하여, 런타임(130)은 추상화 기능에 대응하는 HAI(133)의 리스트를 수신한다. 이러한 HAI가참조 오브젝트 및/또는 인터페이스일 수 있다. 블록(206)에서, 런타임은 하나 이상의 수신된 HAI를 통해 추상화 기능 구현(들)을 구성할 수 있다.
블록(208)에서, 런타임(130)은 호스트 어플리케이션(132)에게 런타임에 의해 노출된 하나 이상의 런타임 인터페이스(134)(RI)를 통지한다. 이 구현예에서, 이러한 통지는 호스트 어플리케이션(132)에 의해 런타임(130)에 보내진 요청에 응답한다. 이러한 통지 및 요청은 도 1의 "프로그램 데이터"(138)의 각 부분으로 표시된다. 이러한 RI는 호스트가 런타임에게 소정의 이벤트를 통지할 수 있게 하고/하거나 프로세스 실행 중에 추가 정보를 얻을 수 있게 한다. 한 구현예에서, RI는 런타임에게 소정의 이벤트를 통지하거나 프로세스 실행 중에 추가 정보를 얻기 위해 호스트에 의해 이용된 콜백이다. 블록(210)에서, 런타임은 소정의 호스트 어플리케이션 구성 요청, 콜백, 런타임 데이터 등에 대한 요청에 응답한다.
블록(212)에서, 관리 코드의 실행 중에, 그리고 호스트 어플리케이션 추상화 기능과 연관된 하나 이상의 액션 또는 이벤트에 응답하여, 런타임은 복귀된 HAI들 중의 특정한 것에 대응하는 최소한 하나의 특정 인터페이스 또는 오브젝트를 호출한다. 이러한 액션 및 이벤트는 예를 들어, 메모리, 스레드/태스크, I/O 완료, 동기화, 이벤트 통지(들), 불용정보 수집(GC) 등을 위한 관리 서비스에 대응한다.
런타임 관리 코드의 실행 중에, 그리고 각각의 실행 환경 추상화들 중의 식별된 것과 연관된 액션 또는 이벤트에 응답하여, 런타임은 추상화 인터페이스(들) 중의 특정한 것에 대응하는 특정 인터페이스 또는 오브젝트를 호출한다. 이것은호스트 어플리케이션이, 구현된 추상화(들)의 기능으로서 런타임을 포함하는 실행 환경을 개별주문화/향상할 수 있게 한다.
결론
상술된 시스템 및 방법은 인핸스트 런타임 호스팅을 제공한다. 시스템 및 방법은 구조적인 특징 및 방법론적인 동작에 대해 특정한 언어로 설명되었지만, 첨부된 청구범위에 정의된 주제는 설명된 특정한 특징 또는 동작에 반드시 제한되는 것은 아니다. 오히려, 특정한 특징 및 동작은 청구된 본 발명의 주제를 구현하는 예시적인 형태로 개시된 것이다.

Claims (60)

  1. 인핸스드(enhanced) 런타임 호스팅을 위한 방법에 있어서,
    호스트 어플리케이션에 의해 노출되고, 호스팅 어플리케이션에 의해 지원된 각각의 실행 환경 추상화(들)에 대응하는 하나 이상의 호스트 추상화 인터페이스(HAI)를 식별하는 단계; 및
    런타임 관리 코드의 실행 중에, 그리고 각각의 실행 환경 추상화들 중의 식별된 추상화와 연관된 액션 또는 이벤트에 응답하여, 상기 HAI들 중의 특정한 것에 대응하는 최소한 하나의 특정 인터페이스 또는 오브젝트를 런타임에 의해 호출하는 단계
    를 포함하고, 상기 식별단계 및 상기 호출단계의 동작은 호스트 어플리케이션 개별주문가능 런타임 호스팅 환경을 호스팅 어플리케이션에 제공하는 방법.
  2. 제1항에 있어서, 상기 하나 이상의 실행 환경 추상화는 메모리, 스레드(thread)들/태스크들, I/O 완료, 동기화, 런타임 진입/퇴출 통지, 및/또는 불용정보(garbage) 수집(GC)에 대한 관리 서비스에 대응하는 방법.
  3. 제1항에 있어서, 상기 호출단계는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통한 메모리 할당을 런타임에 의해 요청하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 상기 호출단계는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 OS로부터 호스트 어플리케이션으로의 로우(low) 메모리 통지를 런타임에 의해 통신하는 단계; 및/또는
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 특정 메모리 할당의 실패 결과를 호스트 어플리케이션에게 런타임에 의해 알림으로써, 메모리 할당이 실패되어야 하는 경우에 런타임이 취해야 할 액션을 호스트 어플리케이션이 개별주문할 수 있게 하는 단계
    를 더 포함하는 방법.
  5. 제1항에 있어서, 상기 호출단계는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통한 새로운 스레드/태스크를 런타임에 의해 작성하는 단계를 더 포함하는 방법.
  6. 제1항에 있어서, 상기 호출단계는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통한 태스크의 런타임-구현 부분을 런타임에 의해 재사용하거나 풀링(pooling)하는 단계를 더 포함하는 방법.
  7. 제1항에 있어서, 상기 호출단계는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에에게 통지하거나, 또는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을 풀링하는 단계를 더 포함하는 방법.
  8. 제1항에 있어서, 상기 호출단계는,
    태스크가 실행가능 또는 비실행가능 상태로 이동되었을 때 런타임에게 통지하기 위해 호스트 어플리케이션으로의 콜백을 최소한 하나의 특정 오브젝트 또는 인터페이스를 통해 런타임에 의해 나타내는 단계; 및
    태스크가 비실행가능 상태로 이동되었으면, 태스크가 호스트 어플리케이션에 의해 가능한 한 빨리 다시 스케쥴링될 것이라는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 지정하는 단계
    를 더 포함하는 방법.
  9. 제1항에 있어서, 상기 호출단계는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀로의 스레드/태스크를 큐잉(queuing)하는 단계;
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀의 크기를 설정하는 단계; 및/또는
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 호스트 어플리케이션구현 스레드 풀을 런타임에 의해 조회하는 단계
    를 더 포함하는 방법.
  10. 제1항에 있어서, 상기 호출단계는,
    태스크가 상이한 장소(locale)로 이동되었거나 태스크에 대해 장소가 변경되었다는 것을 런타임에게 통지하기 위해 호스트 어플리케이션으로 콜백을 제공하는 단계; 및/또는
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 태스크가 상이한 장소로 이동되었거나 태스크에 대해 장소가 변경되었다는 것을 호스트 어플리케이션에게 통지하는 단계
    를 더 포함하는 방법.
  11. 제1항에 있어서, 상기 호출단계는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크의 호스트 어플리케이션 중단을 런타임에 의해 지연시키는 단계를 더 포함하는 방법.
  12. 제1항에 있어서, 상기 호출단계는 태스크의 우선순위를 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 조정하는 단계를 더 포함하는 방법.
  13. 제1항에 있어서, 상기 호출단계는 태스크/스레드가 런타임에서 비관리 코드 내로 퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 단계를 더 포함하는 방법.
  14. 제1항에 있어서, 상기 호출단계는 태스크/스레드가 런타임에서 비관리 코드 내로 역(reverse)-퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 단계를 더 포함하는 방법.
  15. 제1항에 있어서, 상기 호출단계는 태스크/스레드가 비관리 코드로부터 런타임으로 진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 단계를 더 포함하는 방법.
  16. 제1항에 있어서, 상기 호출단계는 태스크/스레드가 비관리 코드로부터 런타임으로 역-진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 단계를 더 포함하는 방법.
  17. 제1항에 있어서, 상기 호출단계는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 하나 이상의 I/O 완료 포트에 관한 서비스 요청에 이용될 수 있는 최대 수의 스레드/태스크를 지정하는 단계를 더 포함하는 방법.
  18. 제1항에 있어서, 상기 호출단계는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, I/O 완료 포트 또는 호스트 어플리케이션에 핸들(handle)을 바인딩(binding)하는 단계를 더 포함하는 방법.
  19. 제1항에 있어서, 상기 호출단계는 호스트 어플리케이션으로 런타임 구현 콜백을 공급하는 단계를 더 포함하고, 상기 런타임 구현 콜백은 비동기 I/O 동작이 완료될 때 호스트 어플리케이션에 의해 인보킹(invoking)되는 방법.
  20. 제1항에 있어서, 상기 호출단계는,
    호스트 어플리케이션으로 런타임 구현 콜백을 공급하는 단계를 더 포함하고, 런타임 구현 콜백은 비동기 I/O 동작이 완료될 때 호스트 어플리케이션에 의해 인보킹되며;
    상기 공급단계는 호스트 어플리케이션이 런타임 구현 콜백으로 호스트 어플리케이션에 의해 패스된 구조의 끝에 주문 데이터를 삽입할 수 있게 하고, 상기 주문 데이터는 상태 정보를 제공하는 방법.
  21. 제1항에 있어서,
    상기 호출단계는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크를 생성하는 단계를 더 포함하고;
    상기 방법은 태스크에 관한 로크(lock)의 호스트 어플리케이션 지식을 실질적으로 보장하기 위해 태스크를 위한 하나 이상의 동기화 오브젝트를, 최소한 하나의 특정 오브젝트 또는 인터페이스를 통해 런타임에 의해 작성하는 단계를 더 포함하고, 상기 하나 이상의 동기화 오브젝트는 임계 구역, 수동 및/또는 자동-리셋 이벤트, 세마포어(semaphore), 판독기/기입기 로크, 및/또는 태스크 모니터를 포함하는 방법.
  22. 제1항에 있어서, 런타임에 의해 노출된 하나 이상의 런타임 인터페이스들을 런타임에 의해 호스트 어플리케이션에 통지하는 단계를 더 포함하고, 상기 런타임 인터페이스는 호스트가 런타임에게 소정의 이벤트를 통지할 수 있게 하고/하거나 프로세스 실행 중에 추가 정보를 얻을 수 있게 하는 방법.
  23. 인핸스드 런타임 호스팅을 위한 컴퓨터-판독가능 매체에 있어서,
    런타임에 의해, 호스트 어플리케이션에게 호스팅 어플리케이션에 의해 지원된 소정의 실행 환경 추상화(들)을 식별하라는 요청을 하고;
    요청에 응답하여, 하나 이상의 호스트 추상화 인터페이스(HAI)들을 수신하며;
    런타임 관리 코드의 실행 중에, HAI들 중의 특정한 것에 대응하는 최소한 하나의 특정 인터페이스 또는 오브젝트를 런타임에 의해 호출하기 위해
    프로세서에 의해 실행가능한 컴퓨터-프로그램 실행가능 명령어들을 포함하는 컴퓨터-판독가능 매체.
  24. 제23항에 있어서, 상기 하나 이상의 실행 환경 추상화는 호스트-구현 메모리, 스레드/태스크, I/O 완료, 동기화, 이벤트 통지, 및/또는 불용정보 수집(GC) 기능에 대응하는 컴퓨터-판독가능 매체.
  25. 제23항에 있어서, 판단하기 위한 컴퓨터-프로그램 명령어는 런타임에 의해 인터페이스 식별자(IID)를 호스팅 어플리케이션에 통신하는 명령어를 더 포함하고, 상기 IID는 추상화 특정 인터페이스에 대응하는 컴퓨터-판독가능 매체.
  26. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 OS로부터 호스트 어플리케이션으로의 로우 메모리 통지를 런타임에 의해 통신하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  27. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통한 특정 메모리 할당의 실패 결과를 호스트 어플리케이션에게 런터임에 의해 알림으로써, 메모리 할당이 실패되어야 하는 경우에 런타임이 취해야 할 액션을 호스트 어플리케이션이 개별주문할 수 있게 하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  28. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 새로운 스레드/태스크를 런타임에 의해 작성하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  29. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크의 런타임-구현 부분을 런타임에 의해 재사용하거나 풀링하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  30. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하거나, 또는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을 풀링하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  31. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    태스크가 실행가능 또는 비실행가능 상태로 이동되었을 때 런타임에게 통지하기 위해 호스트 어플리케이션으로의 콜백을 최소한 하나의 특정 오브젝트 또는인터페이스를 통해 런타임에 의해 나타내는 명령어; 및
    태스크가 비실행가능 상태로 이동되었으면, 태스크가 호스트 어플리케이션에 의해 가능한 한 빨리 다시 스케쥴링될 것이라는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 지정하는 명령어
    를 더 포함하는 컴퓨터-판독가능 매체.
  32. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀로의 스레드/태스크를 큐잉하는 명령어;
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀의 크기를 설정하는 명령어; 및/또는
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 호스트 어플리케이션 구현 스레드 풀을 런타임에 의해 조회하는 명령어
    를 더 포함하는 컴퓨터-판독가능 매체.
  33. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크가 상이한 장소로 이동되었다는 것을 런타임에게 통지하기 위해 호스트 어플리케이션으로 콜백을 제공하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  34. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 태스크가 상이한 장소로 이동되었다는 것을 호스트 어플리케이션에게 통지하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  35. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크의 호스트 어플리케이션 중단을 런타임에 의해 지연시키는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  36. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크의 우선순위를 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 조정하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  37. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크/스레드가 런타임에서 비관리 코드 내로 퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  38. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크/스레드가 런타임에서 비관리 코드 내로 역-퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  39. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크/스레드가 비관리 코드로부터 런타임으로 진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  40. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크/스레드가 비관리 코드로부터 런타임으로 역-진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  41. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 하나 이상의 I/O 완료 포트에 관한 서비스 요청에 이용될 수 있는 최대 수의 스레드/태스크를 지정하는 명령어를 더 포함하는 컴퓨터-판독가능 매체.
  42. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, I/O 완료 포트 또는 호스트 어플리케이션에 핸들을 바인딩하는 명령어를 더 포함하는 컴퓨터-판독가능매체.
  43. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 호스트 어플리케이션으로 런타임 구현 콜백을 공급하는 명령어를 더 포함하고, 상기 런타임 구현 콜백은 비동기 I/O 동작이 완료될 때 호스트 어플리케이션에 의해 인보킹되는 컴퓨터-판독가능 매체.
  44. 제23항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    호스트 어플리케이션으로 런타임 구현 콜백을 공급하는 명령어를 더 포함하고, 상기 런타임 구현 콜백은 비동기 I/O 동작이 완료될 때 호스트 어플리케이션에 의해 인보킹되며;
    상기 공급하는 명령어는 호스트 어플리케이션이 런타임 구현 콜백으로 호스트 어플리케이션에 의해 패스된 구조의 끝에 주문 데이터를 삽입할 수 있게 하고, 상기 주문 데이터는 상태 정보를 제공하는 컴퓨터-판독가능 매체.
  45. 제23항에 있어서,
    상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크를 생성하는 명령어를 더 포함하고;
    상기 컴퓨터-프로그램 명령어들은 태스크에 관한 로크의 호스트 어플리케이션 지식을 실질적으로 보장하기 위해 태스크를 위한 하나 이상의 동기화 오브젝트를, 최소한 하나의 특정 오브젝트 또는 인터페이스를 통해 런타임에 의해 작성하는 명령어를 더 포함하고, 상기 하나 이상의 동기화 오브젝트는 임계 구역, 수동 및/또는 자동-리셋 이벤트, 세마포어, 판독기/기입기 로크, 및/또는 태스크 모니터를 포함하는 컴퓨터-판독가능 매체.
  46. 제23항에 있어서, 런타임에 의해 노출된 하나 이상의 런타임 인터페이스들을 런타임에 의해 호스트 어플리케이션에 통지하는 명령어를 더 포함하고, 상기 런타임 인터페이스들은 호스트가 런타임에게 소정의 이벤트를 통지할 수 있게 하고/하거나 프로세스 실행 중에 추가 정보를 얻을 수 있게 하는 컴퓨터-판독가능 매체.
  47. 인핸스드 런타임 호스팅을 위한 컴퓨팅 장치에 있어서,
    청구항 23항의 컴퓨터-판독가능 매체에 연결된 프로세서를 포함하고, 상기 프로세서는 컴퓨터-판독가능 매체 상에 저장된 컴퓨터-프로그램 명령어들을 실행하도록 구성되어 있는 컴퓨팅 장치.
  48. 인핸스드 런타임 호스팅을 위한 컴퓨팅 장치에 있어서,
    프로세서; 및
    상기 프로세서에 연결되고, 프로세서에 의해 실행가능한 컴퓨터-프로그램 명령어들을 포함하는 메모리
    를 포함하고,
    상기 컴퓨터-프로그램 명령어들은
    호스트 어플리케이션에 의해 노출되고, 호스팅 어플리케이션에 의해 지원된 각각의 실행 환경 추상화(들)에 대응하는 하나 이상의 호스트 추상화 인터페이스(HAI)들을 식별하는 명령어; 및
    런타임 관리 코드의 실행 중에, 그리고 각각의 실행 환경 추상화들 중의 식별된 추상화와 연관된 액션 또는 이벤트에 응답하여, HAI들 중의 특정한 것에 대응하는 최소한 하나의 특정 인터페이스 또는 오브젝트를 런타임에 의해 호출하는 명령어
    를 포함하며,
    하나 이상의 실행 환경 추상화는 메모리, 스레드/태스크, I/O 완료, 동기화, 런타임 진입/퇴장 통지, 및/또는 불용정보 수집(GC)에 대한 관리 서비스에 대응하는 컴퓨팅 장치.
  49. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통한 특정 메모리 할당의 실패 결과를 호스트 어플리케이션에게 런타임에 의해 알림으로써, 메모리 할당이 실패되어야 하는 경우에 런타임이 취해야 할 액션을 호스트 어플리케이션이 개별주문할 수 있게 하는 명령어를 더 포함하는 컴퓨팅 장치.
  50. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 새로운 스레드/태스크를 런타임에 의해 작성하는 명령어를 더 포함하는 컴퓨팅 장치.
  51. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 호스트 어플리케이션에 의해 구현된 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크의 런타임-구현 부분을 런타임에 의해 재사용하거나 풀링하는 명령어를 더 포함하는 컴퓨팅 장치.
  52. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하거나, 또는 태스크가 상이한 물리적 OS 스레드로 이동될 수 없고 특정된 타임 윈도우에 대해 차단된 태스크의 실행을 할 수 없다는 것을 풀링하는 명령어를 더 포함하는 컴퓨팅 장치.
  53. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀로의 스레드/태스크를 큐잉하는 명령어;
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 호스트 어플리케이션 구현 스레드 풀의 크기를 설정하는 명령어; 및/또는
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 호스트 어플리케이션 구현 스레드 풀을 런타임에 의해 조회하는 명령어
    를 더 포함하는 컴퓨팅 장치.
  54. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크의 호스트 어플리케이션 중단을 런타임에 의해 지연시키는 명령어; 및
    태스크의 우선순위를 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 조정하는 명령어
    를 더 포함하는 컴퓨팅 장치.
  55. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    태스크/스레드가 런타임에서 비관리 코드 내로 퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어; 및
    태스크/스레드가 런타임에서 비관리 코드 내로 역-퇴출한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어
    를 더 포함하는 컴퓨팅 장치.
  56. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    태스크/스레드가 비관리 코드로부터 런타임으로 진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어; 및
    태스크/스레드가 비관리 코드로부터 런타임으로 역-진입한다는 것을 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해 호스트 어플리케이션에 통지하는 명령어
    를 더 포함하는 컴퓨팅 장치.
  57. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, I/O 완료 포트 또는 호스트 어플리케이션에 핸들을 바인딩하는 명령어; 및
    최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 런타임에 의해, 하나 이상의 I/O 완료 포트에 관한 서비스 요청에 이용될 수 있는 최대 수의 스레드/태스크를 지정하는 명령어
    를 더 포함하는 컴퓨팅 장치.
  58. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는,
    호스트 어플리케이션으로 런타임 구현 콜백을 공급하는 명령어를 더 포함하고, 상기 런타임 구현 콜백은 비동기 I/O 동작이 완료될 때 호스트 어플리케이션에 의해 인보킹되고;
    상기 공급하는 명령어는 호스트 어플리케이션이 상기 런타임 구현 콜백으로 호스트 어플리케이션에 의해 패스된 구조의 끝에 주문 데이터를 삽입할 수 있게 하고, 상기 주문 데이터는 상태 정보를 제공하는 컴퓨팅 장치.
  59. 제48항에 있어서, 상기 호출하기 위한 컴퓨터-프로그램 명령어는 최소한 하나의 특정 인터페이스 또는 오브젝트를 통해 태스크를 생성하는 명령어를 더 포함하고, 상기 컴퓨터-프로그램 명령어들은 OS 스레드의 로크의 호스트 어플리케이션 지식을 실질적으로 보장하기 위해 태스크를 위한 하나 이상의 동기화 오브젝트를, 최소한 하나의 특정 오브젝트 또는 인터페이스를 통해 런타임에 의해 작성하는 명령어를 더 포함하며, 상기 하나 이상의 동기화 오브젝트는 임계 구역, 수동 및/또는 자동-리셋 이벤트, 세마포어, 판독기/기입기 로크, 및/또는 태스크 모니터를 포함하는 컴퓨팅 장치.
  60. 인핸스드 런타임 호스팅을 위한 소프트웨어 아키텍처에 있어서,
    어플리케이션; 및
    런타임
    을 포함하고, 상기 어플리케이션은 런타임을 호스트하도록 구성되어 있으며;
    상기 런타임은 런타임 어플리케이션 프로그램 인터페이스(RI)를 노출하고,상기 RI는 어플리케이션이 런타임에 대한 호스트 추상화 인터페이스(HAI)를 나타낼 수 있게 하며, 상기 HAI는 어플리케이션 추상화 실행 환경 기능을 식별하고;
    상기 런타임은 또한, 프로세스 실행 중의 액션 및/또는 이벤트를, HAI의 하나 이상의 부분들을 통해 어플리케이션 추상화 실행 환경 기능의 구현을 위한 어플리케이션으로 다시 향하게 하도록 구성되는 소프트웨어 아키텍처.
KR1020040022635A 2003-04-02 2004-04-01 인핸스드 런타임 호스팅 KR100898315B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/405,560 US7406699B2 (en) 2003-04-02 2003-04-02 Enhanced runtime hosting
US10/405,560 2003-04-02

Publications (2)

Publication Number Publication Date
KR20040086214A true KR20040086214A (ko) 2004-10-08
KR100898315B1 KR100898315B1 (ko) 2009-05-20

Family

ID=32850618

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040022635A KR100898315B1 (ko) 2003-04-02 2004-04-01 인핸스드 런타임 호스팅

Country Status (5)

Country Link
US (2) US7406699B2 (ko)
EP (1) EP1465063A3 (ko)
JP (1) JP4514105B2 (ko)
KR (1) KR100898315B1 (ko)
CN (1) CN100410872C (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008005188A2 (en) * 2006-06-22 2008-01-10 Hostway Corporation Message control system in a shared hosting environment
KR20160086059A (ko) * 2015-01-09 2016-07-19 에스케이하이닉스 주식회사 데이터 저장 장치

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4662657B2 (ja) 2000-07-10 2011-03-30 マイクロソフト コーポレーション 統一データ型システムおよび方法
US7730473B2 (en) * 2004-06-30 2010-06-01 Intel Corporation Relieving data marshalling overhead
US7814308B2 (en) * 2004-08-27 2010-10-12 Microsoft Corporation Debugging applications under different permissions
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
US8250131B1 (en) * 2004-12-08 2012-08-21 Cadence Design Systems, Inc. Method and apparatus for managing a distributed computing environment
US8713524B2 (en) * 2005-04-06 2014-04-29 Microsoft Corporation Memory management configuration
US7971198B2 (en) * 2005-06-08 2011-06-28 Unoweb Inc. Method for global resource sharing having logically linked means and integrated functionality for building solutions
US8701095B2 (en) * 2005-07-25 2014-04-15 Microsoft Corporation Add/remove memory pressure per object
US7752242B1 (en) * 2005-09-20 2010-07-06 Symantec Corporation Executing unmanaged content in a managed execution environment
US8028295B2 (en) 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
US7788660B2 (en) * 2005-11-17 2010-08-31 Bea Systems, Inc. Resource adapter classloading
US7882503B2 (en) * 2005-11-17 2011-02-01 Oracle International Corporation Production redeployment
US7908599B2 (en) * 2006-01-19 2011-03-15 International Business Machines Corporation Dynamic granting of permissions in an object-oriented code base
US20070220492A1 (en) * 2006-03-16 2007-09-20 Microsoft Corporation Application verifier infrastructure and checks
US7996837B2 (en) * 2006-05-03 2011-08-09 Oracle International Corporation Recovery mechanism for transactions
US20070294707A1 (en) * 2006-06-15 2007-12-20 Microsoft Corporation Enhancing or replacing host operating system functionality by leveraging guest operating system functionality
US8024727B2 (en) * 2006-06-15 2011-09-20 Microsoft Corporation Enhancing or replacing host operating system functionality by leveraging guest operating system functionality
US8566812B1 (en) * 2006-08-31 2013-10-22 Oracle America, Inc. Using observed object patterns to dynamically tune a virtual machine for responsiveness
US8707337B2 (en) * 2006-10-31 2014-04-22 Motorola Mobility Llc Dispatch API that permits midlets to initiate dispatch calls
JP4979414B2 (ja) 2007-02-28 2012-07-18 インターナショナル・ビジネス・マシーンズ・コーポレーション 複数ロケール混在環境におけるプロビジョニング用の管理サーバ、コンピュータプロブラム、及び方法
US8073882B2 (en) 2007-07-11 2011-12-06 Mats Stefan Persson Method, system and computer-readable media for managing software object handles in a dual threaded environment
US8140597B2 (en) * 2007-08-29 2012-03-20 International Business Machines Corporation Computer system memory management
US20090144752A1 (en) * 2007-11-30 2009-06-04 Microsoft Corporation Unmanaged-to-managed aggregation
KR101528853B1 (ko) * 2007-12-14 2015-07-01 삼성전자주식회사 Api 서비스 방법과 api 매쉬업 생성 방법, 장치 및기록매체
US7904537B2 (en) * 2008-01-11 2011-03-08 Microsoft Corporation Architecture for online communal and connected experiences
FR2927438B1 (fr) * 2008-02-08 2010-03-05 Commissariat Energie Atomique Methode de prechargement dans une hierarchie de memoires des configurations d'un systeme heterogene reconfigurable de traitement de l'information
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US9875141B2 (en) * 2008-10-01 2018-01-23 Microsoft Technology Licensing, Llc Managing pools of dynamic resources
US9300532B2 (en) * 2008-10-24 2016-03-29 Microsoft Technology Licensing, Llc Automating deployment of service applications by exposing hosting environment constraints
US8473924B1 (en) * 2008-12-19 2013-06-25 Symantec Corporation Enabling efficient use of an endpoint
US8775884B2 (en) 2009-03-04 2014-07-08 Alcatel Lucent Method and apparatus for position-based scheduling for JTAG systems
US8719649B2 (en) 2009-03-04 2014-05-06 Alcatel Lucent Method and apparatus for deferred scheduling for JTAG systems
US8677198B2 (en) * 2009-03-04 2014-03-18 Alcatel Lucent Method and apparatus for system testing using multiple processors
US8621301B2 (en) * 2009-03-04 2013-12-31 Alcatel Lucent Method and apparatus for virtual in-circuit emulation
US8429454B2 (en) * 2009-12-16 2013-04-23 Microsoft Corporation Coordination of error reporting among multiple managed runtimes in the same process
US20110289424A1 (en) * 2010-05-21 2011-11-24 Microsoft Corporation Secure application of custom resources in multi-tier systems
US9098317B2 (en) 2011-03-16 2015-08-04 Microsoft Technology Licensing Llc Optional retargeting of library references
US9558040B2 (en) 2011-06-20 2017-01-31 Microsoft Technology Licensing, Llc Memory manager with enhanced application metadata
US8543841B2 (en) * 2011-06-30 2013-09-24 Oracle International Corporation Secure hosted execution architecture
CN103593238A (zh) * 2012-08-16 2014-02-19 腾讯科技(深圳)有限公司 控制应用程序编程接口调用的方法及装置
US8924990B2 (en) * 2013-01-31 2014-12-30 Red Hat, Inc. Providing operation system history
US9183105B2 (en) 2013-02-04 2015-11-10 Alcatel Lucent Systems and methods for dynamic scan scheduling
US9038019B2 (en) * 2013-02-05 2015-05-19 Sap Se Paige control for enterprise mobile applications
US9823909B1 (en) 2014-05-02 2017-11-21 Amazon Technologies, Inc. Program code conversion for cross-platform compatibility
US10158647B2 (en) 2015-08-25 2018-12-18 Oracle International Corporation Permissive access control for modular reflection
SG10201507834SA (en) * 2015-09-21 2017-04-27 Yokogawa Electric Corp Mobile based on collaborative and interactive operations with smart mobile devices
WO2017052624A1 (en) * 2015-09-25 2017-03-30 Intel Corporation Iot service modeling with layered abstraction for reusability of applications and resources
US10394528B2 (en) * 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
US10282184B2 (en) 2016-09-16 2019-05-07 Oracle International Corporation Metadata application constraints within a module system based on modular dependencies
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
AU2019436002A1 (en) 2019-03-21 2021-10-21 Citrix Systems, Inc. Multi-device workspace notifications
US12093414B1 (en) * 2019-12-09 2024-09-17 Amazon Technologies, Inc. Efficient detection of in-memory data accesses and context information
CN111917513B (zh) * 2020-07-29 2022-11-22 上海海洋大学 一种移动端与服务器端数据交互方法
CN113051088B (zh) * 2021-03-31 2022-03-08 广州锦行网络科技有限公司 程序加载方法、装置、设备及计算机可读介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2136154C (en) * 1994-11-18 1999-08-24 Jay William Benayon User control of multiple memory heaps
US5909580A (en) * 1996-02-08 1999-06-01 Inprise Corporation Development system and methods with direct compiler support for detecting invalid use and management of resources and memory at runtime
EP1135727A1 (en) * 1998-11-25 2001-09-26 Sun Microsystems, Inc. A method for enabling comprehensive profiling of garbage-collected memory systems
US6915457B1 (en) * 1999-04-23 2005-07-05 Nortel Networks Limited Apparatus and method for monitoring messages forwarded between applications
US6457142B1 (en) * 1999-10-29 2002-09-24 Lucent Technologies Inc. Method and apparatus for target application program supervision
GB2367642B (en) * 2000-05-27 2004-05-05 Ibm Performance profiling tool
US6834385B2 (en) * 2001-01-04 2004-12-21 International Business Machines Corporation System and method for utilizing dispatch queues in a multiprocessor data processing system
US20030033443A1 (en) * 2001-03-01 2003-02-13 Nikolay Igotti Virtual machine integration application program interface
CA2350735A1 (en) * 2001-03-14 2002-09-14 Ibm Canada Limited-Ibm Canada Limitee A method for providing open access to application profiling data
US6941437B2 (en) * 2001-07-19 2005-09-06 Wind River Systems, Inc. Memory allocation scheme
WO2003042823A1 (en) * 2001-11-14 2003-05-22 Exegesys, Inc. Method and system for software application development and customizable runtime environment
US7243267B2 (en) * 2002-03-01 2007-07-10 Avaya Technology Llc Automatic failure detection and recovery of applications

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008005188A2 (en) * 2006-06-22 2008-01-10 Hostway Corporation Message control system in a shared hosting environment
WO2008005188A3 (en) * 2006-06-22 2008-03-06 Hostway Corp Message control system in a shared hosting environment
KR20160086059A (ko) * 2015-01-09 2016-07-19 에스케이하이닉스 주식회사 데이터 저장 장치

Also Published As

Publication number Publication date
EP1465063A2 (en) 2004-10-06
CN100410872C (zh) 2008-08-13
KR100898315B1 (ko) 2009-05-20
JP2004310776A (ja) 2004-11-04
US20040237064A1 (en) 2004-11-25
US7406699B2 (en) 2008-07-29
US7418718B2 (en) 2008-08-26
CN1534457A (zh) 2004-10-06
US20040199927A1 (en) 2004-10-07
JP4514105B2 (ja) 2010-07-28
EP1465063A3 (en) 2007-08-15

Similar Documents

Publication Publication Date Title
KR100898315B1 (ko) 인핸스드 런타임 호스팅
JP5015665B2 (ja) カーネル間でカーネル・サービスを共用するための方法、装置、およびコンピュータ・プログラム
US9063783B2 (en) Coordinating parallel execution of processes using agents
JP4791461B2 (ja) ランタイムシステムにおけるオブジェクトを共有するためのプログラム、方法、装置
JP4837660B2 (ja) ランタイムシステムにおけるオブジェクトを共有するためのプログラム、方法、装置
US8032899B2 (en) Providing policy-based operating system services in a hypervisor on a computing system
EP1442372B1 (en) Providing isolation through process attachable virtual machines
US8276145B2 (en) Protected mode scheduling of operations
US7203941B2 (en) Associating a native resource with an application
US7698540B2 (en) Dynamic hardware multithreading and partitioned hardware multithreading
US7039911B2 (en) Hybrid threads for multiplexing virtual machine
JP2007538325A (ja) ランタイムシステムの共有プログラム、方法、装置
JPH05216692A (ja) プログラム実行を管理する方法およびシステム
WO2012131507A1 (en) Running a plurality of instances of an application
US20220083364A1 (en) Reconciler sandboxes for secure kubernetes operators
KR20010041297A (ko) 원격 프로세스의 중단과 연속 방법 및 장치
JPH0855035A (ja) マイクロカーネル・データ処理システム用の伝送制御の分離の方法および装置
US8561077B1 (en) Binder for a multi-threaded process to access an un-shareable resource
JPH0855037A (ja) プロセス間通信方法およびプロセス間通信用のシステム
Lu et al. Developing a concurrent service orchestration engine in ccr
JP2021060707A (ja) 同期制御システムおよび同期制御方法
Schubert et al. Modular Operating Systems for Large-Scale, Distributed, and Heterogeneous Environments
CN112540840A (zh) 一种高效的基于Java多线程和反射的任务执行方法
JPH10501083A (ja) 別の環境で走行するプログラムから関数を呼び出す方法およびシステム
Troelsen et al. Multithreaded and Parallel Programming

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20040401

PG1501 Laying open of application
A201 Request for examination
A302 Request for accelerated examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20081002

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20040401

Comment text: Patent Application

PA0302 Request for accelerated examination

Patent event date: 20081002

Patent event code: PA03022R01D

Comment text: Request for Accelerated Examination

Patent event date: 20040401

Patent event code: PA03021R01I

Comment text: Patent Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20081209

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20090408

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20090512

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20090513

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
LAPS Lapse due to unpaid annual fee
PC1903 Unpaid annual fee