[go: up one dir, main page]

KR20070067207A - Runtime dynamic linking - Google Patents

Runtime dynamic linking Download PDF

Info

Publication number
KR20070067207A
KR20070067207A KR1020077010885A KR20077010885A KR20070067207A KR 20070067207 A KR20070067207 A KR 20070067207A KR 1020077010885 A KR1020077010885 A KR 1020077010885A KR 20077010885 A KR20077010885 A KR 20077010885A KR 20070067207 A KR20070067207 A KR 20070067207A
Authority
KR
South Korea
Prior art keywords
computing
library
computing environment
dynamic
code
Prior art date
Legal status (The legal status 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 status listed.)
Withdrawn
Application number
KR1020077010885A
Other languages
Korean (ko)
Inventor
마지드 앤워
폴 가디너
Original Assignee
픽셀 (리서치) 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/964,232 external-priority patent/US7533376B2/en
Priority claimed from US10/964,315 external-priority patent/US20060080681A1/en
Priority claimed from US10/964,231 external-priority patent/US7444625B2/en
Priority claimed from US10/965,361 external-priority patent/US20060080680A1/en
Priority claimed from US10/964,272 external-priority patent/US20060080683A1/en
Priority claimed from US11/039,270 external-priority patent/US20060080682A1/en
Application filed by 픽셀 (리서치) 리미티드 filed Critical 픽셀 (리서치) 리미티드
Publication of KR20070067207A publication Critical patent/KR20070067207A/en
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Bioethics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

재형성 또는 재로딩을 요구함이 없이 선택된 하드웨어 아키텍쳐를 갖는 상이한 컴퓨팅 환경들에서 동작가능한 플랫폼 독립적인 이진 객체(PIBO)가 제공된다. 상기 PIBO는 상호동작하는 컴퓨팅 애플리케이션과 함께 컴파일 및 형성되는, 예시적인 링커/로더에 의해 상호동작하는 컴퓨팅 애플리케이션에 로딩 및 링크될 수 있다. 또한, 상기 PIBO는 이에 제한됨이 없이, 원시적인 설비를 제공하지 않는 플랫폼들상에 공유 객체들을 동적으로 링크하기 위한 메커니즘으로서; 특정 코드내에서 플랫폼 제약들의 위반으로 인해 호환불가능하게 되는 플랫폼들상에서 미리 기록된 코드 컴포넌트들을 사용함에 있어서; 코드에 고유한 실행을 반복하고 다중 실행 인스턴스들의 제약들을 회피하는 비 객체-지향 코드를 로딩하기 위한 메커니즘으로서; 및 폐쇄된 플랫폼에 기능성을 부가하는 이진 객체의 사용을 허용하는 메커니즘을 포함하는, 다양한 범주들에서 사용될 수 있다.A platform independent binary object (PIBO) is provided that is operable in different computing environments with a selected hardware architecture without requiring reformulation or reloading. The PIBO can be loaded and linked to an interactive computing application by an example linker / loader, compiled and formed with the interactive computing application. In addition, the PIBO is not limited to, as a mechanism for dynamically linking shared objects on platforms that do not provide primitive facilities; In using pre-recorded code components on platforms which become incompatible due to violation of platform constraints within a particular code; A mechanism for loading non-object-oriented code that repeats execution specific to the code and avoids the constraints of multiple execution instances; And mechanisms that allow the use of binary objects to add functionality to a closed platform.

Description

런타임 동적 링킹{RUN TIME DYNAMIC LINKING}Runtime dynamic linking {RUN TIME DYNAMIC LINKING}

본 발명은 이진 객체의 생성(creation)과 동작(operation)에 관한 것이며, 구체적으로는 무엇보다도 다양한 비-원시(non-native) 컴퓨팅 환경 동작들을 가능하게 하는 상이한(disparate) 컴퓨팅 환경에서 동작가능한 플랫폼 독립 이진 객체(PIBO)의 생성, 동작 및 배포(distribution)에 관한 것이다.The present invention relates to the creation and operation of binary objects, specifically a platform operable in a disparate computing environment that enables, among other things, a variety of non-native computing environment operations. It relates to the creation, operation and distribution of independent binary objects (PIBOs).

컴퓨팅 환경은, 하나 이상의 동작을 수행하기 위해 컴퓨팅 환경의 하드웨어 요소들에 대한 하나 이상의 명령을 포함하는, 컴퓨터 코드를 실행할 수 있다. 전형적으로 컴퓨터 코드는 실행을 위해 컴퓨팅 환경에 로드된다. 물리적인 로딩 전에, 상기 컴퓨터 코드는 컴파일될 수 있으며, 이는 특정 컴퓨팅 환경 (즉, 컴퓨팅 환경의 운영체제(operating system) 및/또는 컴퓨팅 환경의 플랫폼)에서 동작한다. 상기 컴퓨터 코드는 하나 이상의 동작을 실행하기 위해 컴퓨팅 환경에 의해 상기 컴퓨터 환경에 상주하는 다른 컴퓨터 코드와 링크될 수 있다. 일정 컴퓨터 코드를 핸들링하는 컴퓨터 환경에 따라서, 이진 객체는 상기 컴퓨팅 환경 및/또는 다른 협력(cooperating) 컴퓨터 코드에 의한 사용을 위해 생성될 수 있다. 상기 이진 객체는 하나 이상의 협력 컴퓨팅 프로그램 (컴퓨팅 프로그램)이 요구하는 정보, 함수, 및/또는 동작들을 포함할 수 있다.The computing environment may execute computer code, including one or more instructions for hardware elements of the computing environment, to perform one or more operations. Typically computer code is loaded into a computing environment for execution. Prior to physical loading, the computer code may be compiled, which operates in a particular computing environment (ie, operating system and / or platform of the computing environment). The computer code may be linked with other computer code residing in the computer environment by a computing environment to perform one or more operations. Depending on the computer environment that handles certain computer code, binary objects may be created for use by the computing environment and / or other cooperating computer code. The binary object may include information, functions, and / or operations required by one or more cooperative computing programs (computing programs).

차례로, 하나 이상의 함수들은 컴퓨팅 어플리케이션, 다른 라이브러리, 또는 하나 이상의 동작을 수행하기 위한 컴퓨팅 환경에 의해 사용되기 위해, 하나 이상의 라이브러리에 통합될 수 있다. 관행적으로, 라이브러리는 설계되고 구현되어, 특정 하드웨어 구조(architecture)를 갖는 단일 컴퓨팅 환경에 의해 사용될 수 있다. 상기 라이브러리는 정적 기반(static basis) 또는 동적 기반(dynamic basis)의 일정 컴퓨팅 환경에 의해 사용될 수 있다. 정적 경우에, 일정 컴퓨팅 어플리케이션의 라이브러리와 다른 요소들은 메모리 안으로 로드되어 실행될 수 있는 단일 파일로 결합된다. 이와 비교적으로, 동적 동작(즉, 요소들의 동적 링킹)의 경우에는, 함수들과 요소들(즉, 객체 및 라이브러리)은 컴퓨팅 어플리케이션이 실행될 때 이용가능하게 된다. 동적으로 링크된 요소들은, 이들의 설계와 동작의 면에서, 컴퓨팅 어플리케이션의 주요부와 연결되지 않았으므로, 동적 요소들은 컴퓨팅 환경에서 동작하는 몇몇의 컴퓨팅 어플리케이션에 의해 공유될 수 있다. In turn, one or more functions may be integrated into one or more libraries for use by a computing application, another library, or a computing environment for performing one or more operations. Conventionally, libraries are designed and implemented so that they can be used by a single computing environment with a specific hardware architecture. The library may be used by a constant computing environment on a static basis or on a dynamic basis. In the static case, libraries of certain computing applications and other elements are combined into a single file that can be loaded into memory and executed. In contrast, in the case of dynamic operations (ie, dynamic linking of elements), functions and elements (ie, objects and libraries) become available when the computing application is executed. Dynamically linked elements, in terms of their design and operation, are not connected to the core of computing applications, so the dynamic elements can be shared by several computing applications operating in a computing environment.

그러나 상이한 컴퓨팅 환경에서 동작하기 위한 컴퓨터 코드를 생성하고 실행할 때, 현재의 관행(practice)들은 적절치 못할 수 있다. 현재의 관행들은 일반적으로 특정 컴퓨팅 하드웨어 구조를 가지는 특정 컴퓨팅 환경용 (가령, 소프트웨어 개발 키트(SDK)를 통해) 컴퓨터 코드의 생성 및 실행을 요구하기 때문에, 다수의 상이한 컴퓨팅 환경에서 동작하기 위한 단일 이진 객체를 생성하기는 어려울 수 있다. 특정 컴퓨팅 환경용 코드를 생성할 때, 상기 컴퓨터 코드는 컴퓨팅 환경에 이를 로딩하기 전에 컴파일될 수 있고, 상기 컴퓨터 코드를 실행할 때 상기 컴퓨팅 환경에 링크될 수 있다. 이러한 제한들 때문에, 컴퓨터 코드는 일반적으로 단일 컴퓨팅 환경(즉, 운영 체제 및/또는 플랫폼)에서 동작하도록 설계되고 생성된다.However, when generating and executing computer code for operating in different computing environments, current practices may not be appropriate. Because current practices generally require the generation and execution of computer code for a particular computing environment (eg, via a software development kit (SDK)) with a particular computing hardware architecture, a single binary for operating in many different computing environments. Creating an object can be difficult. When generating code for a particular computing environment, the computer code may be compiled before loading it into the computing environment and linked to the computing environment when executing the computer code. Because of these limitations, computer code is generally designed and generated to operate in a single computing environment (ie, operating system and / or platform).

부가적으로, 컴퓨팅 환경은 컴퓨터 코드가 지켜야만 하는 생성 방식에 제한과 규칙을 부과할 수 있으며, 컴퓨터 코드는 일정 컴퓨터 환경에서 적절하게 실행될 수 있다. 예를 들면, 플랫폼 및/또는 운영 체제 (즉, 심비안 쿼츠(Symbian Quartz)를 동작시키는 심비안OS)는 특정 플랫폼 및/또는 운영체제 에서 실행될 수 있는 컴퓨터 코드에 다수의 제한- 이들은 기록 가능한 정적 및/또는 전역적(global) 변수를 이용하는 것을 포함하나, 이에 제한되지는 않음 - 을 유지할 수 있다. 다르게 말하면, 상기 플랫폼 및/또는 운영체제는 기록 가능한 정적 또는 전역적 변수들을 가지는 컴퓨터 코드의 동작을 금지할 수 있다.In addition, the computing environment may impose restrictions and rules on the manner in which the computer code must adhere, and the computer code may execute appropriately in certain computer environments. For example, the platform and / or operating system (ie, Symbian OS running Symbian Quartz) have a number of restrictions on the computer code that can be executed on a particular platform and / or operating system—these are recordable static and / or Including but not limited to using global variables. In other words, the platform and / or operating system may prohibit the operation of computer code having recordable static or global variables.

컴퓨터 코드 개발자들 사이에서 보통의 관행은, 동일한 동작을 수행하는, 그러나 각각의 운영체제 및 플랫폼의 상이한 세트를 위해 만들어진(build), 다양한 코드를 개발하는 것을 포함하나, 이에 제한되지는 않는다. 예를 들면 달력(calendaring) 컴퓨팅 어플리케이션은 자바, "C++", 또는 비주얼 베이직과 같은 하나의 고급 프로그래밍 언어를 사용하여 개발될 수 있다. 개발 시간과 자원을 절감하기 위한 노력으로, 핵심(core) 컴퓨팅 어플리케이션 코드는 개발자들에게 다시 사용될 수 있다. 그러나 현재의 관행에서는, 상기 컴퓨팅 어플리케이션이 각각의 상이한 컴퓨팅 환경(가령, 운영체제 및/또는 플랫폼) 세트에서 동작가능하다는 것을 보증하도록 추가적인 요소들(즉, 라이브러리, 함수, 데이터 구조, 등)이 개발되고 맞춤화되는 것이 필요하기 때문에, 상기 재사용의 확대는 제한된다. Common practices among computer code developers include, but are not limited to, developing various code that perform the same operations, but build for a different set of respective operating systems and platforms. For example, a calendar computing application can be developed using one high-level programming language such as Java, "C ++", or Visual Basic. In an effort to save development time and resources, core computing application code can be reused by developers. However, in current practice, additional elements (ie, libraries, functions, data structures, etc.) are developed to ensure that the computing application is operable in each different set of computing environments (eg, operating system and / or platform). Since it needs to be customized, the expansion of the reuse is limited.

전통적인 관행과 접근법은 각각의 상이한 컴퓨팅 환경을 위해 다시 만들거나 (rebuilding) 다시 컴파일할 필요 없이 다수의 상이한 컴퓨팅 환경에서 동작가능할 수 있는 단일 플랫폼 독립 이진 객체를 가질 수 없다는 것을 포함하나, 이에 제한되는 것은 아닌, 다른 한계들을 갖는다. 부가적으로, 현재의 관행과 접근법은 상기 본래 시설(native facility)을 제공하지 않는 플랫폼 상의 동적 링킹 공유 객체용 메커니즘을 제공하지 않는다. 또한 현재의 관행상, 미리-기록된 코드 요소들은, 특정 코드로 정해진 플랫폼 제한 위반으로 인해 호환성이 없을 플랫폼들 상에서도 사용될 수 없다. 게다가 현재의 관행은 비 객체-지향 코드 - 이는 다중 실행 인스턴스의 제한을 회피하고, 상기 코드 내의 고유의 실행을 되풀이 함 - 를 로드하는 메커니즘을 제공하지 않는다. 또한, 현재의 관행과 접근법은 폐쇄 플랫폼 (가령, 추가적인 프로그램의 실행을 제한하는 플랫폼) 상에서 이진 객체의 상기 동적 링킹과 로딩을 허용하는 메커니즘을 제공하지 않는다.Traditional practices and approaches include, but are not limited to, having a single platform independent binary object that can be operable in multiple different computing environments without having to rebuild or recompile for each different computing environment. Other limitations. In addition, current practices and approaches do not provide a mechanism for dynamic linking shared objects on platforms that do not provide such native facilities. Also, in current practice, pre-written code elements cannot be used on platforms that would be incompatible due to platform limitation violations that are specified with specific code. In addition, current practice does not provide a mechanism for loading non-object-oriented code, which avoids the limitation of multiple execution instances and repeats native execution in the code. In addition, current practices and approaches do not provide a mechanism to allow the dynamic linking and loading of binary objects on a closed platform (eg, a platform that limits the execution of additional programs).

본 발명에 기재된 시스템과 방법들은, 리컴파일링(recompiling), 리빌딩(rebuilding), 또는 리로딩(reloading)이 필요없이, 채택된 하드웨어 구조를 갖는 상이한 컴퓨팅 환경에서 동작가능한 플랫폼 독립적인 이진 객체(PIBO)를 제공한다. 예시적인 구현에서, 채택된 구조(가령, 객체 파일 포맷)를 갖는 이진 객체 파일이 제공된다. 상기 이진 객체 파일은 소스 코드를 컴파일하여 생성될 수 있으며, 상기 소스 코드는 생성 당시 플랫폼 의존성을 갖지 않는다. 예시적인 구현에서, 상기 이진 객체 파일은 이진 코드와 소스 파일용 데이터를 포함한다. 부가적으로, 예시적인 링커/로더는 플랫폼 독립 이진 객체를 링크하고 로딩하기 위하여, 그리고 상이한 컴퓨팅 환경에서 협력 컴퓨팅 프로그램과 협력하기 위해, 예시적인 컴퓨팅 어플리케이션의 일부분으로서 동작하는 예시적인 링커/로더가 제공된다. 또한, 상기 예시적인 PIBO에 협력 컴퓨팅 어플리케이션들이 접근할 수 있게 하는 예시적인 인터페이스가 제공될 수 있다.The systems and methods described herein are platform independent binary objects (PIBOs) operable in different computing environments with adopted hardware architectures without the need for recompiling, rebuilding, or reloading. To provide. In an example implementation, a binary object file having an adopted structure (eg, an object file format) is provided. The binary object file may be generated by compiling source code, and the source code does not have platform dependency at the time of generation. In an example implementation, the binary object file includes binary code and data for a source file. Additionally, example linkers / loaders are provided by example linkers / loaders that operate as part of example computing applications to link and load platform independent binary objects and to collaborate with cooperative computing programs in different computing environments. do. In addition, an example interface may be provided that allows cooperative computing applications access to the example PIBO.

예시적인 동작에서, 예시적인 링커/로더는 상기 상이한 컴퓨팅 환경들 중 임의의 하나에 대해, 협력 컴퓨팅 어플리케이션의 메인 소스 코드와 함께 컴파일되어, 상기 상이한 컴퓨팅 환경 (및/또는 플랫폼)의 상기 하나에서 동작가능한 이진 실행파일(executable)을 생성한다. 예시적인 구현에서, 상기 예시적인 링커/로더는 상기 협력 컴퓨팅 어플리케이션이 실행되는 동안 상기 PIBO를 상기 협력 컴퓨팅 어플리케이션에 링크하고 로딩하도록 동작할 수 있다. 예시적인 구현에서, 상기 링커/로더는 상기 PIBO와 상기 협력 컴퓨팅 어플리케이션의 이진 실행파일을 완전하게 동작가능한 프로세스로 바인딩하기 위해 심벌 분석(symbol resolution)과 재배치를 다룰 수 있다.In an example operation, an example linker / loader is compiled with the main source code of a cooperative computing application for any one of the different computing environments, operating in the one of the different computing environments (and / or platforms). Create a possible binary executable. In an example implementation, the example linker / loader may be operable to link and load the PIBO to the cooperative computing application while the cooperative computing application is running. In an example implementation, the linker / loader may handle symbol resolution and relocation to bind the binary executables of the PIBO and the cooperative computing application into a fully operable process.

예시적인 구현에서, 상기 PIBO는 다음을 포함하나, 이에 제한되지는 않는, 다양한 문맥에서 사용될 수 있다; 이러한 원시 설비(native facility)를 제공하지 않는 플랫폼 상에 공유 객체를 동적으로 링크하는 메커니즘; 특정 코드로 정해진 플랫폼 제한 위반으로 인해 호환성이 없을 플랫폼들 상에서 미리-기록된 코드 요소들의 사용; 다중 실행 인스턴스의 제한을 회피하고, 상기 코드 내의 고유의 실행을 되풀이하는 비 객체-지향 코드를 로딩하는 메커니즘; 및 폐쇄 플랫폼 상에서 애드-온(add-on) 기능(functionality)을 제공하기 위해 플랫폼 독립 이진 객체의 사용을 허용하는 메커니즘.In an exemplary implementation, the PIBO can be used in a variety of contexts, including but not limited to: A mechanism for dynamically linking shared objects on platforms that do not provide such native facilities; The use of pre-written code elements on platforms that would be incompatible due to platform limitation violations made to specific code; A mechanism for loading non-object-oriented code that avoids the limitation of multiple execution instances and repeats native execution in the code; And a mechanism that allows the use of platform independent binary objects to provide add-on functionality on a closed platform.

본 발명의 다른 특징들은 아래에서 더 기재된다.Other features of the invention are described further below.

상기 플랫폼 독립 동적 객체 및 이의 사용을 위한 방법들은 본원에 첨부된 도면을 참조로 더 기재된다.The platform independent dynamic object and methods for its use are further described with reference to the accompanying drawings.

도 1은 본원에 기재된 시스템과 방법들을 구현하기 위한 예시적인 컴퓨팅 환경의 블록 다이어그램이다.1 is a block diagram of an exemplary computing environment for implementing the systems and methods described herein.

도 2는 예시적인 데이터 통신 구조의 예시적인 요소들의 협력을 도시하는 블록 다이어그램이다.2 is a block diagram illustrating cooperation of example elements of an example data communication structure.

도 3은 동적 링킹 구조의 블록 다이어그램이다.3 is a block diagram of a dynamic linking structure.

도 4는 상이한 컴퓨팅 플랫폼들을 갖는 제 1 운영체제를 가로질러 동일한 라이브러리를 링킹할 때의 동적 링킹 구조에 대한 블록 다이어그램이다.4 is a block diagram of a dynamic linking structure when linking the same library across a first operating system with different computing platforms.

도 5는 상이한 컴퓨팅 플랫폼들을 갖는 제 2 운영체제를 가로질러 동일한 라이브러리를 링킹할 때의 동적 링킹 구조에 대한 블록 다이어그램이다.5 is a block diagram of a dynamic linking structure when linking the same library across a second operating system with different computing platforms.

도 6은 본원에 기재된 시스템과 방법들에 따라서 다수의 플랫폼을 제공하는 다수의 운영체제에 대한 블록 다이어그램이다.6 is a block diagram of multiple operating systems providing multiple platforms in accordance with the systems and methods described herein.

도 7은 본원에 기재된 시스템과 방법들에 따라서 예시적인 플랫폼 독립 링킹 구조의 예시적인 요소들 간의 상호작용(interaction)을 도시하는 블록 다이어그램이다.7 is a block diagram illustrating interactions between example elements of an example platform independent linking structure in accordance with the systems and methods described herein.

도 8은 본원에 기재된 시스템과 방법들에 따라서 메인 어플리케이션 프로그 램과 동적 라이브러리 간의 상호작용(interaction)을 도시하는 블록 다이어그램이다.8 is a block diagram illustrating the interaction between a main application program and a dynamic library in accordance with the systems and methods described herein.

도 9는 본원에 기재된 시스템과 방법들에 따라서 예시적인 플랫폼 독립 링킹 구조에 의해 실행되는 프로세싱을 도시하는 순서도이다.9 is a flow diagram illustrating processing executed by an exemplary platform independent linking structure in accordance with the systems and methods described herein.

도 10은 동적 링킹을 실행하기 위해 본래 시설을 갖지 않는 컴퓨팅 환경에서 플랫폼 독립 이진 객체를 사용할 때의 실행되는 프로세싱을 도시하는 순서도이다.FIG. 10 is a flow chart illustrating the processing performed when using platform independent binary objects in a computing environment without native facilities to execute dynamic linking.

도 11은 제한된 컴퓨팅 환경에서 플랫폼 독립 이진 객체를 사용할 때의 실행되는 프로세싱을 도시하는 순서도이다.FIG. 11 is a flow chart illustrating processing performed when using platform independent binary objects in a limited computing environment.

도 12는 제한된 컴퓨팅 환경에서 협력 컴퓨팅 어플리케이션의 다양한 인스턴스들을 동작시키기 위해 플랫폼 동작 이진 객체를 사용할 때 실행되는 프로세싱을 도시하는 순서도이다.FIG. 12 is a flowchart illustrating processing performed when using a platform operating binary object to operate various instances of a collaborative computing application in a limited computing environment.

도 13은 추가적인 기능(functionality)을 제공하는 폐쇄 하드웨어 환경에서 동작하는 플랫폼 독립 이진 객체를 사용할 때 실행되는 프로세싱을 도시하는 순서도이다.FIG. 13 is a flow diagram illustrating processing performed when using platform independent binary objects operating in a closed hardware environment that provides additional functionality.

도 14는 본원에 기재된 시스템과 방법의 예시적인 구현에 따라서 제한된 컴퓨팅 환경에 추가적인 기능을 제공하기 위해 런처(launcher) 어플리케이션의 다운로드를 통해 실행되는 프로세싱을 도시하는 순서도이다.14 is a flow chart illustrating processing executed through the download of a launcher application to provide additional functionality to a limited computing environment in accordance with example implementations of the systems and methods described herein.

1. 개관1. Overview

컴퓨터 코드는 컴퓨터 시스템 또는 장치 내부의 중앙 처리 장치(CPU) 또는 다른 컴퓨터 프로세서에서 실행될 수 있다. CPU 구조의 일반적인 예들은 INTEL® x86 계열, ARM® RISC (축소 명령 집합 코드) 구조, SUN® SPARC, 및 MOTOROLA® 68000을 포함할 수 있으나, 이에 제한되지는 않는다. 코드는 "C", "C++", 또는 자바®와 같은 인간이 이해할 수 있는 고급 언어로 작성될 수 있으나, 최후에 상기 코드는 컴퓨터 환경에 의해 예시적인 컴퓨터 프로세서에서 실행될 수 있는 기계어 명령으로 이후에 컴파일되고 어셈블리 언어로 번역된다.Computer code may be executed in a central processing unit (CPU) or other computer processor inside a computer system or device. General examples of CPU architectures may include, but are not limited to, the INTEL® x86 series, ARM® RISC (Reduced Instruction Set Code) architecture, SUN® SPARC, and MOTOROLA® 68000. The code may be written in a human understandable high-level language such as "C", "C ++", or Java®, but eventually the code is a machine language instruction that can then be executed on an exemplary computer processor by a computer environment. Compiled and translated into assembly language.

CPU는 시스템 플랫폼으로 일반적으로 알려진 소프트웨어 환경에 존재할 수 있다. 플랫폼은 큰 폼팩터(form factor) 컴퓨팅 환경 (즉, 데스크톱, 랩톱 PC)용 MICROSOFT® WINDOWS® 및 Linux와 같은 운영체제를 포함할 수 있다. 작은 폼팩터 컴퓨팅 환경 (즉, 모바일 장치 및 통신 장치)에 대해서는 현재 사용되는 Linux, SymbianOS, WindowsCE®, PalmOS, BREW, REX, 및 Itron을 포함하나, 이에 제한되지는 않는, 다양한 운영체제들이 있다.The CPU may reside in a software environment, commonly known as a system platform. The platform may include operating systems such as MICROSOFT® WINDOWS® and Linux for large form factor computing environments (ie, desktop, laptop PCs). For small form factor computing environments (ie, mobile devices and communication devices) there are a variety of operating systems, including but not limited to Linux, SymbianOS, WindowsCE®, PalmOS, BREW, REX, and Itron, which are currently used.

플랫폼은 종종 특정 목적을 위해 운영체제를 확대하는 추가적인 기능을 보유할 수 있다. 예를 들면, WinCE.NET, 스마트 폰 및 포켓PC 플랫폼은 Windows CE 운영체제를 사용하지만, 사용자 인터페이스와 같은 다른 면에 있어서는 다르다. 다시 말하면, 산업용 장비들에서는 WinCE.NET을 목표로 삼을 수 있고, 터치스크린을 갖는 개인 휴대 정보 단말기(PDA)에서는 포켓PC를 목표로 삼을 수 있고, 키패드를 통해 동작되는 이동 전화에서는 스마트 폰을 목표로 삼을 수 있다. 또한 플랫폼은 특정 컴퓨팅 어플리케이션에 맞춰진 확장 기능을 포함할 수 있다. 위의 예시들에서, 포켓PC 플랫폼은 PDA 상의 개인 정보 관리를 위한 다양한 기능을 보유할 수 있 는 반면에, 스마트 폰 플랫폼은 이동 전화에 적당한 통신 기능이 포함될 수 있다.Platforms often have the additional capability of extending the operating system for specific purposes. For example, WinCE.NET, smartphones, and Pocket PC platforms use the Windows CE operating system, but differ in other ways, such as the user interface. In other words, industrial equipment can target WinCE.NET, personal digital assistants (PDAs) with touch screens, and Pocket PCs, and smart phones for mobile phones operated via keypads. Can be aimed at. The platform may also include extensions that are tailored to specific computing applications. In the above examples, the Pocket PC platform may have various functions for managing personal information on the PDA, while the smart phone platform may include appropriate communication functions for the mobile phone.

전통적인 시스템에서, 특정 플랫폼에서 동작할 수 있는 이진 코드를 생성하는 것은, 특정 플랫폼 (및/또는 운영체제)용으로 제공되는 소프트웨어 개발 키트(SDK)와 같은 툴 체인(tool chain)을 통해 상기 코드를 컴파일하고 빌딩(building)하여 완성될 수 있다. 다른 SDK들은 일정 운영체제에서 동작하는 다른 플랫폼용 코드를 개발할 것이 요구 될 수 있다. (즉, 심비안 쿼츠는 심비안 크리스탈과는 다른 SDK를 요구할 수 있다.) 만약 특정 플랫폼용 코드를 개발하는데 부적절한 SDK가 사용된다면, 이진 결과물(resulting binary)은 희망하는 플랫폼에서 동작하지 않을 수 있다.In traditional systems, generating binary code that can run on a particular platform compiles the code through a tool chain, such as a software development kit (SDK) provided for a particular platform (and / or operating system). And building can be completed. Other SDKs may require the development of code for other platforms that run on certain operating systems. (Ie Symbian Quartz may require a different SDK than Symbian Crystal.) If an inappropriate SDK is used to develop code for a particular platform, the resulting binary may not work on the desired platform.

소스 코드 수준에서, 일부 운영체제는 코드가 작성되는 방식에 대해 제한과 규칙을 부과한다. 예를 들면, 심비안OS는 코드가 기록 가능한 정적 또는 전역적 변수들을 사용하지 않고 생성될 것을 요구한다. 위의 제한들의 결과로, 본래 임의의 한 운영체제용으로 만들어진 레거시 코드(legacy code)는 다른 코딩 규칙을 요구하는 다른 운영체제에서는 컴파일되지 않을 수 있다. 그럼에도 불구하고 일반적인 관행은 다음에 다수의 플랫폼용으로 만들어질 수 있는 싱글 소스 코드 프로그램을 작성한다. 구현될 때, 공통 소스 파일은 개발될 수 있다. 공통 소스 파일은 싱글 소스 파일로부터 복합적이고 별개이며 특정 플랫폼용의 이진 출력물을 생성하기 위해, 선택된 플랫폼의 툴 체인을 통해서 개별적으로 처리될 수 있다.At the source code level, some operating systems impose restrictions and rules on how code is written. For example, Symbian OS requires code to be created without using writable static or global variables. As a result of the above limitations, legacy code originally created for any one operating system may not compile on other operating systems that require different coding rules. Nevertheless, the general practice is to write a single source code program that can be made for multiple platforms. When implemented, common source files can be developed. Common source files can be processed separately through the toolchain of the selected platform to produce binary, complex, and separate binary output for a particular platform from a single source file.

2. 동적 링킹 및 로딩2. Dynamic linking and loading

컴퓨터 프로그램은 다수의 요소로 구성될 수 있다. 프로그램이 구동될 때, 요소들은 완결된 기능적인 시스템을 형성하기 위해서 함께 적용될 수 있고, 프로그램을 실행하는 협력 컴퓨팅 환경의 메인 메모리로 로딩될 수 있다. 컴퓨터 프로그램의 요소들을 결합하는 프로세스는 링킹(linking)으로 알려져 있다. 이 경우에, 프로그램 요소들이 메모리로 로딩되고 실행될 수 있는 하나의 싱글 파일로 결합될 때, 프로세스는 "정적 링킹(static linking)"라고 칭해진다. 일반적으로 링커(linker)는, 링커에 대한 입력으로 기능 할 수 있는 요소 객체 파일들을 연결(concatenate)시킬 수 있고, 단일 출력 파일을 만들기 위해 객체 파일들을 상호 링크(link)시킬 수 있는, 툴 체인의 일부분이다. 프로그램이 다수의 서브-프로그램들로 구성될 때, 한 서브-프로그램의 다른 것에 대한 참조(reference)는 변수 및 함수 이름과 같은 심볼들을 통해 이루어질 수 있다. 다른 함수들과 동작들 중에서, 링커는, 협력 컴퓨팅 환경의 메모리 안의 심볼(또는 심볼들)의 위치를 알려주고, 호출 서브-프로그램의 객체 코드를 패치(patch)하는 것을 통해서, 참조를 분석하도록 동작할 수 있으며, 따라서 호출 명령어는 알려진 메모리 위치를 참조한다.A computer program can consist of a number of elements. When the program is run, the elements can be applied together to form a complete functional system and loaded into main memory of the cooperative computing environment executing the program. The process of combining the elements of a computer program is known as linking. In this case, when the program elements are combined into one single file that can be loaded into memory and executed, the process is called "static linking". In general, a linker is a tool chain that can concatenate element object files that can serve as input to the linker, and can link object files to produce a single output file. It is part. When a program consists of multiple sub-programs, a reference to the other of one sub-program can be made through symbols such as variable and function names. Among other functions and operations, the linker may operate to resolve the reference by locating the symbol (or symbols) in memory of the collaborative computing environment and patching the object code of the calling sub-program. Thus, the call instruction refers to a known memory location.

"정적 링킹"에서 프로그램이 다른 요소에 저장된 함수를 호출할 때, 필요한 함수에 대한 코드는 정적 링커에 의해 실행파일(executable)에 통합될 수 있다. 효과적으로 정적 링커는 모든 필요 함수들의 코드를 출력 실행가능 파일로 복사한다. 반대로 "동적 링킹(dynamic linking)"은 프로그램 실행 중에만 이용할 수 있는 함수와 요소들을 만들 수 있다. 동적으로 링크된 요소들은 일반적으로 프로그램의 메인부에 연결되지 않으므로, 이들은 몇몇의 실행되고 있는 프로그램들과 공유될 수 있다. 또한 메인 프로그램은, 실제 코드가 프로그램의 실행파일의 부분이 되지 않고, 동적으로 링크된 요소들이 분리된 파일들로 존재하기 때문에, 정적으로 링크된 대응부분 보다 현저하게 작을 수 있다. "동적 링킹"이 현재 컴퓨팅 환경에서 우세하다. 예를 들면, MICROSOFT® WINDOWS®에서는 동적으로 연결된 요소들은 DLL(동적 링크 라이브러리)로 불리며, Unix/Linux에서는 공유 객체(.so) 파일이라고 불린다.When a program calls a function stored in another element in "static linking", the code for the required function can be integrated into the executable by the static linker. Effectively, the static linker copies the code of all necessary functions into the output executable file. In contrast, "dynamic linking" can create functions and elements that are only available during program execution. Dynamically linked elements are generally not connected to the main part of the program, so they can be shared with some running programs. Also, the main program can be significantly smaller than the statically linked counterpart, since the actual code is not part of the program's executable, and the dynamically linked elements are in separate files. "Dynamic linking" prevails in the current computing environment. In MICROSOFT® WINDOWS®, for example, dynamically linked elements are called DLLs (dynamic link libraries), and in Unix / Linux they are called shared object (.so) files.

프로그램이 동적으로 링크된 라이브러리에서 기능을 호출하는 인스턴스에서, 컴파일러(compiler) 및 링커(linker)는 구동 시간에 협력 컴퓨팅 환경이 라이브러리를 로딩하고, 상기 요구되는 기능을 위하여 코드를 발견하도록 할 수 있는 정보를 포함하는 재배치(relocation) 테이블을 생성할 수 있다. 동적으로 링크된 라이브러리에서, 기호들은 상기 라이브러리를 사용하는 프로그램이 구동을 시작할 때까지("로딩-타임 동적 링킹"으로 공지된), 또는 상기 프로그램이 제1 호출을 할 때까지("구동-시간 동적 링킹") 실제 어드레스로 바인딩되지(bound) 않는다.In instances where a program calls a function in a dynamically linked library, a compiler and linker can cause the cooperative computing environment to load the library and find code for the required function at run time. A relocation table including information may be generated. In a dynamically linked library, the symbols remain until the program using the library starts running (known as "loading-time dynamic linking"), or until the program makes a first call ("drive-time"). Dynamic linking ") is not bound to a real address.

동적 실행은 동적 링커/로더의 제어하에 실행될 수 있다. 이러한 애플리케이션들은 구동가능한 공정을 생성하기 위해 동적 링커에 의해 위치되고 바인딩될 수 있는 동적 라이브러리(또는 공유 객체) 형태의 의존성을 가진다. 공유 객체는 또한 동적 링커에 의해 처리되는 또 다른 공유 객체들에 의존성을 가질 수 있다. 종래의 접근법으로, 혼합된 실행가능하며 공유된 객체들이 완전한 프로그램으로서 구동하도록 하는 코드 재배치, 기호 해상도 및 바인딩을 처리하는 동적 링킹 및 로딩을 위한 루틴들은 일반적으로 컴퓨팅 환경의 운영 체제의 일부분이다.Dynamic execution can be executed under the control of a dynamic linker / loader. These applications have dependencies in the form of dynamic libraries (or shared objects) that can be located and bound by the dynamic linker to create a driveable process. Shared objects can also have dependencies on other shared objects that are handled by the dynamic linker. In a conventional approach, routines for dynamic linking and loading that handle code relocation, symbol resolution, and binding that allow mixed executable and shared objects to run as complete programs are generally part of the operating system of the computing environment.

실제로, 동적 라이브러리들은 로딩 시간에 링크될 수 있다. 동적 라이브러 리가 생성될 때, 작은 스터브 파일(stub file) 또는 임포트 라이브러리(import library)가 생성되고, 이는 동적 라이브러리를 로딩하고 그것을 익스포트(export)하는 기능을 위치시키기 위하여 사용될 수 있는 정보(기호 및 재배치 테이블과 같은)를 컴퓨팅 환경에 제공한다. 상기 임포트 라이브러리(또는 스터브 파일)는 주요 실행가능 프로그램이 생성될 때 링크될 수 있어, 상기 공유 객체의 실제 이진 코드가 분리된 채로 남아있음에도 불구하고, 상기 공유 객체 라이브러리 내의 모든 기능 기억장소들은 실행가능 프로그램으로 공지된다. 프로그램이 실행을 시작하기 위해 메모리에 로딩될 때, 동적 라이브러리 또한 로딩되고, 익스포트된 라이브러리 함수들은 스터브 파일에 제공된 링크된 정보의 결과로서 메인 프로그램에 의해 호출될 수 있다. In fact, dynamic libraries can be linked at load time. When a dynamic library is created, a small stub file or import library is created, which can be used to locate information (symbols and symbols) that can be used to load the dynamic library and to export it. Such as relocation tables) to the computing environment. The import library (or stub file) can be linked when the main executable program is created so that all functional storage in the shared object library is executable, even though the actual binary code of the shared object remains segregated. Known as the program. When the program is loaded into memory to begin execution, the dynamic library is also loaded and the exported library functions can be called by the main program as a result of the linked information provided in the stub file.

런타임 동적 링크에서, 호출 프로그램은 런타임에서 라이브러리를 로딩시키도록 특별한 기능을 사용한다. 예를 들어, 윈도우 운영 체제에서, 이것은 LoadLibrary 함수이고; 리눅스에서 이와 동일한 함수는 dlopen이라 불린다. 이러한 방법에서, 동적 라이브러리의 로딩은 호출 프로그램이 로딩될 때 자동적이지 않고, 프로그램이 런타임에서 이러한 특정 호출을 형성할 때까지 연기된다. 함수는 로딩될 라이브러리 객체에 대한 경로 네임을 포함하고, 성공적이라면 로딩된 라이브러리로 처리를 복귀시킨다. 그 다음, 호출 프로그램은 동적 라이브러리에 의해 익스포트된 명명된 심볼의 어드레스를 획득하기 위해 제 2 함수(윈도우에서 GetProcAddress, 및 리눅스에서 dlsym이라 불림)에서 처리를 통과시킬 수 있다. 심볼의 어드레스(일반적으로 호출 프로시저)가 공지되면, 심볼은 호출 프로그램에 의해 사용하기 위해 호출될 수 있다. 이러한 방법은 임포트 라이브러리 또는 스터브 파일에 대한 필요성을 제거한다.In runtime dynamic linking, the calling program uses a special feature to load the library at runtime. For example, on Windows operating systems, this is the LoadLibrary function; In Linux, this same function is called dlopen. In this way, the loading of the dynamic library is not automatic when the calling program is loaded and is deferred until the program forms this particular call at runtime. The function contains the pathname to the library object to be loaded and, if successful, returns processing to the loaded library. The calling program can then pass the process in a second function (called GetProcAddress in Windows, and dlsym in Linux) to obtain the address of the named symbol exported by the dynamic library. If the address of the symbol (generally the calling procedure) is known, the symbol can be called for use by the calling program. This approach eliminates the need for import libraries or stub files.

2(a) 예시적인 컴퓨팅 환경2 (a) Example Computing Environment

도 1은 본 명세서에 개시된 시스템 및 방법들에 따른 예시적인 컴퓨팅 시스템(100)을 도시한다. 컴퓨팅 시스템(100)은 다양한 컴퓨팅 프로그램들(180)을 실행할 수 있다. 예시적인 컴퓨팅 시스템(100)은 주로 소프트웨어 형태일 수 있는 컴퓨터 판독가능한 명령어들에 의해 제어되고, 또한 이러한 소프트웨어들이 어디에서 어떻게 저장되고 액세스되는지에 대한 명령어들을 제공한다. 이러한 소프트웨어는 데이터 처리 시스템(100)이 작업을 수행하도록 하기 위하여 중앙 처리 장치(CPU)(110)내에서 실행될 수 있다. 많은 공지된 컴퓨터 서버들에 있어서, 워크스테이션 및 개인 컴퓨터 중앙 처리 장치(110)는 마이크로프로세서로 불리우는 마이크로-전자 칩 CPU들에 의해 실행된다. 보조 처리기(115)는 부가적인 기능을 수행하거나 CPU(110)를 보조하는, 메인 CPU(110)와 별개인 선택적 처리기이다. CPU(110)는 상호 연결점(112)을 통해 보조 처리기(115)에 연결될 수 있다. 하나의 일반적인 타입의 보조 처리기는 또한 일반적인 목적의 CPU(110)보다 숫자 계산을 더 빠르고 더 우수하게 수행하도록 설계된, 숫자 또는 계산 보조 처리기로 불리는 부동 소수점 보조 처리기이다.1 illustrates an example computing system 100 in accordance with the systems and methods disclosed herein. The computing system 100 can execute various computing programs 180. Exemplary computing system 100 is primarily controlled by computer readable instructions, which may be in software form, and also provides instructions as to how and where such software is stored and accessed. Such software may be executed within the central processing unit (CPU) 110 to cause the data processing system 100 to perform a task. In many known computer servers, workstation and personal computer central processing unit 110 are executed by micro-electronic chip CPUs called microprocessors. The coprocessor 115 is an optional processor separate from the main CPU 110 that performs additional functions or assists the CPU 110. The CPU 110 may be connected to the coprocessor 115 via an interconnect point 112. One general type of coprocessor is also a floating point coprocessor, called a numeric or computational coprocessor, designed to perform numerical calculations faster and better than general purpose CPU 110.

컴퓨팅 환경이 단일 CPU(110)를 포함하는 것으로 도시되었으나, 이러한 설명은 단지 도식인 것으로서, 컴퓨팅 환경(100)이 다수의 CPU들(110)을 포함할 수 있음을 이해할 수 있다. 부가적으로, 컴퓨팅 환경(100)은 통신 네트워크(160) 또는 몇몇 다른 데이터 통신 수단(미도시)을 통한 원격 CPU들(미도시)의 리소스(resource)를 사용할 수 있다.Although the computing environment is illustrated as including a single CPU 110, this description is merely schematic, and it can be appreciated that the computing environment 100 may include multiple CPUs 110. Additionally, computing environment 100 may use resources of remote CPUs (not shown) via communication network 160 or some other data communication means (not shown).

동작에 있어서, CPU(110)는 명령어들을 인출하고, 디코딩하고, 실행시키며, 정보를 컴퓨터의 메인 데이터-전달 경로, 시스템 버스(105)를 통해 다른 리소스들로, 그리고 다른 리소스들로부터 전달한다. 이러한 시스템 버스는 컴퓨팅 시스템(100)의 컴포넌트들을 연결하고, 데이터 교환을 위한 매체를 한정한다. 시스템 버스(105)는 일반적으로 데이터를 전송하기 위한 데이터 라인들, 어드레스를 전송하기 위한 어드레스 라인들 및 인터럽트들을 전송하고 시스템 버스를 동작시키기 위한 제어 라인들을 포함한다. 이러한 시스템 버스의 일예는 PCI(Peripheral Component Interconnect) 버스이다. 오늘날의 진보된 버스들 중 일부는 확장 카드들, 제어기들 및 CPU(110)에 의해 버스에 대한 액세스를 조절하는 버스 중재(bus arbitration)로 불리는 기능을 제공한다. 이러한 버스들에 부착되고 상기 버스를 접수하기 위하여 중재하는 장치들은 버스 마스터(bus master)로 불린다. 버스 마스터는 버스들의 멀티프로세서 구성이 처리기 및 그것의 지원 칩(support chip)들을 포함하는 버스 마스터 어댑터(adapter)들의 부가에 의해 생성되도록 한다.In operation, CPU 110 retrieves, decodes, and executes instructions and passes information to and from other resources via the computer's main data-delivery path, system bus 105, and other resources. This system bus connects the components of computing system 100 and defines the medium for data exchange. The system bus 105 generally includes data lines for transmitting data, address lines for sending addresses, and control lines for transmitting interrupts and operating the system bus. One example of such a system bus is a Peripheral Component Interconnect (PCI) bus. Some of today's advanced buses provide a function called bus arbitration that regulates access to the bus by expansion cards, controllers and the CPU 110. Devices attached to these busses and arbitrating to receive them are called bus masters. The bus master allows a multiprocessor configuration of buses to be created by the addition of a bus master adapter that includes a processor and its support chips.

시스템 버스(105)에 결합된 메모리 장치들은 랜덤 액세스 메모리(RAM)(125) 및 판독 전용 기억 장치(ROM)(130)를 포함한다. 이러한 메모리들은 정보가 저장되고 검색되도록 하는 회로를 포함한다. ROM들(130)은 일반적으로 수정될 수 없는 저장된 데이터를 포함한다. RAM(125)에 저장된 데이터는 CPU(110) 또는 다른 하드웨어 장치들에 의해 판독되거나 변경될 수 있다. RAM(125) 및/또는 ROM(130)에 대 한 액세스는 메모리 제어부(120)에 의해 제어될 수 있다. 메모리 제어부(120)는 명령어들이 실행될 때, 가상 어드레스를 물리적 어드레스로 변환하는 어드레스 변환 기능을 제공할 수 있다. 메모리 제어부(120)는 또한 시스템 내의 공정들을 분리시키고, 사용자 공정들로부터 시스템 공정들을 분리시키는 메모리 보호 기능을 제공할 수 있다. 따라서, 사용자 모드에서 구동하는 프로그램은 그 자신의 공정 가상 어드레스 공간에 의해 매핑된 메모리에만 액세스할 수 있다. 상이하게 기재된 상기 프로그램은 공정들 사이에 공유된 메모리가 셋업되지 않는 한, 또 다른 공정의 가상 어드레스내에 메모리에 액세스할 수 없다.Memory devices coupled to the system bus 105 include random access memory (RAM) 125 and read only memory (ROM) 130. Such memories include circuitry that allows information to be stored and retrieved. ROMs 130 generally contain stored data that cannot be modified. Data stored in RAM 125 may be read or changed by CPU 110 or other hardware devices. Access to the RAM 125 and / or ROM 130 may be controlled by the memory controller 120. The memory controller 120 may provide an address translation function for converting a virtual address into a physical address when the instructions are executed. The memory controller 120 may also provide a memory protection function that separates processes in the system and separates system processes from user processes. Thus, a program running in user mode can only access memory mapped by its own process virtual address space. The programs described differently cannot access the memory in the virtual address of another process unless the memory shared between the processes is set up.

또한, 컴퓨팅 시스템(100)은 CPU(110)로부터 프린터(140), 키보드(145), 마우스(150) 및 데이터 저장 드라이브(155)와 같은 주변 장치들로 명령어들의 통신을 담당하는 주변 장치 제어부(135)를 포함할 수 있다.In addition, the computing system 100 may include a peripheral device controller that is responsible for communicating commands from the CPU 110 to peripheral devices such as a printer 140, a keyboard 145, a mouse 150, and a data storage drive 155. 135).

디스플레이 제어부(163)에 의해 제어되는 디스플레이(165)는 컴퓨팅 시스템(100)에 의해 생성된 광학 출력(visual output)을 디스플레이하기 위해 사용된다. 이러한 광학 출력은 텍스트, 그래픽, 애니메이션 그래픽 및 비디오를 포함할 수 있다. 디스플레이(165)는 CRT-기반 비디오 디스플레이, LCD-기반 평판 디스플레이, 가스 플라즈마-기반 평판 디스플레이, 터치-패널 또는 다양한 형태의 요소들로 이루어진 다른 디스플레이로 실행될 수 있다. 디스플레이 제어부(163)는 디스플레이(165)로 전송되는 비디오 신호를 생성하도록 요구되는 전자 컴포넌트들을 포함한다.The display 165, controlled by the display control unit 163, is used to display the visual output generated by the computing system 100. Such optical output may include text, graphics, animated graphics, and video. Display 165 may be implemented as a CRT-based video display, LCD-based flat panel display, gas plasma-based flat panel display, touch-panel or other display of various types of elements. The display control unit 163 includes electronic components required to generate a video signal sent to the display 165.

또한, 컴퓨팅 시스템(100)은 외부 통신 네트워크(160)에 컴퓨팅 시스템(100) 을 연결하기 위해 사용될 수 있는 네트워크 어댑터(170)를 포함할 수 있다. 통신 네트워크(160)는 컴퓨터 사용자에게 통신 및 소프트웨어와 정보의 전자적 전달 수단을 제공할 수 있다. 또한, 다수의 컴퓨터들 및 작업 부하의 공유 또는 작업을 수행하는데 드는 협력적인 노력을 수반하는 분배된 공정을 제공할 수 있다. 도시된 네트워크 연결은 예시적이며 컴퓨터들 사이의 통신 링크를 개설하는 또 다른 수단이 사용될 수 있다는 것을 이해해야 한다.The computing system 100 can also include a network adapter 170 that can be used to connect the computing system 100 to an external communication network 160. Communication network 160 may provide computer users with a means of communication and electronic transfer of software and information. In addition, it can provide a distributed process that entails collaborative effort to share or perform tasks with multiple computers and workloads. It is to be understood that the network connections shown are exemplary and other means of establishing a communications link between the computers can be used.

예시적인 컴퓨터 시스템(100)은 본 명세서에 개시된 시스템들 및 방법들이 동작하고 상이한 컴포넌트들 및 구성들을 갖는 컴퓨팅 환경에서 본 명세서에 개시된 시스템들 및 방법들을 제한하지 않는 예에 불과하며, 본 명세서에 개시된 특징적인 개념이 다양한 컴포넌트들 및 구성들을 갖는 다양한 컴퓨팅 환경에 실행될 수 있다는 것을 이해할 수 있을 것이다.Exemplary computer system 100 is merely an example that does not limit the systems and methods disclosed herein in a computing environment in which the systems and methods disclosed herein operate and have different components and configurations, and are disclosed herein. It will be appreciated that the characteristic concepts can be implemented in a variety of computing environments having various components and configurations.

2(b) 예시적인 컴퓨터 네트워크 환경2 (b) Example Computer Network Environment

상기 개시된 컴퓨팅 시스템(100)은 컴퓨터 네트워크의 일부분으로서 배치될 수 있다. 일반적으로, 컴퓨팅 환경에 대한 상기 기재는 네트워크 환경에 배치된 서버 컴퓨터 및 클라이언트 컴퓨터 모두에 적용될 수 있다. 도 2는 통신 네트워크를 통해 클라이언트 컴퓨터와 통신하는 서버(205)를 갖는, 본 명세서에 기재된 장치 및 방법이 사용될 수 있는 예시적인 네트워킹된 컴퓨팅 환경(200)을 도시한다. 도 2에 도시된 바와 같이, 서버(205)는 통신 네트워크(160)(고정-와이어(fixed-wire) 또는 무선 LAN, WAN, 인트라넷, 엑스트라넷, 피어-투-피어 네트워크(peer-to-peer network), 인터넷 또는 다른 통신 네트워크들 중 임의의 것 또는 그 조합 일 수 있는)를 통해 타블렛 개인 컴퓨터(210), 무선 전화기(215), 전화기(220), 개인용 컴퓨터(100) 및 개인 휴대용 정보 단말기(225)와 같은 다수의 클라이언트 컴퓨팅 환경과 상호연결될 수 있다. 또한, 본 명세서에 개시된 장치 및 방법들은 통신 네트워크(160)를 통해 자동적 컴퓨팅 환경(미도시), 가전제품 컴퓨팅 환경(미도시) 및 자동화적으로 만들어진 제어 컴퓨팅 환경(미도시)과 협력할 수 있다. 통신 네트워크(160)가 인터넷인 네트워크 환경에 있어서, 예를 들어, 서버(205)는 데이터를 처리하여, 하이퍼텍스트 전송 프로토콜(HTTP), 파일 전송 프로토콜(FTP), 단순 객체 접근 프로토콜(SOAP) 또는 무선 애플리케이션 프로토콜(WAP)과 같은 다수의 공지된 프로토콜들 중 임의의 것을 통해 클라이언트 컴퓨팅 환경들(100, 210, 215, 220 및 225)로 또는 상기 컴퓨팅 환경으로부터 데이터를 통신하도록 동작가능한 전용 컴퓨팅 환경 서버일 수 있다. 각각의 클라이언트 컴퓨팅 환경(100, 210, 215, 220 및 225)은 서버 컴퓨팅 환경(205)에 대한 액세스를 획득하기 위해 웹 브라우저(미도시), 또는 휴대용 데스크탑 환경(미도시)과 같은 하나 이상의 컴퓨팅 프로그램들(180)을 갖출 수 있다.The disclosed computing system 100 may be deployed as part of a computer network. In general, the above description of a computing environment may apply to both server computers and client computers deployed in a network environment. 2 illustrates an example networked computing environment 200 in which the apparatus and methods described herein may be used having a server 205 in communication with a client computer via a communications network. As shown in FIG. 2, server 205 may include communications network 160 (fixed-wire or wireless LAN, WAN, intranet, extranet, peer-to-peer network). network, the Internet or other communication networks, which can be any or a combination thereof, tablet personal computer 210, cordless phone 215, phone 220, personal computer 100, and personal digital assistant. And may interconnect with multiple client computing environments, such as 225. In addition, the devices and methods disclosed herein may cooperate with an automated computing environment (not shown), an appliance computing environment (not shown), and an automatically created controlled computing environment (not shown) via communication network 160. . In a network environment where the communication network 160 is the Internet, for example, the server 205 processes data to provide hypertext transfer protocol (HTTP), file transfer protocol (FTP), simple object access protocol (SOAP) or A dedicated computing environment server operable to communicate data to or from the client computing environments 100, 210, 215, 220, and 225 via any of a number of known protocols, such as a wireless application protocol (WAP). Can be. Each client computing environment 100, 210, 215, 220, and 225 may be one or more computing devices, such as a web browser (not shown), or a portable desktop environment (not shown), to obtain access to the server computing environment 205. Programs 180 may be provided.

동작에 있어서, 사용자(미도시)는 원하는 데이터 및/또는 컴퓨팅 프로그램들을 획득하기 위하여 클라이언트 컴퓨팅 환경상에 구동중인 컴퓨팅 프로그램과 상호작용할 수 있다. 상기 데이터 및/또는 컴퓨팅 애플리케이션들은 서버 컴퓨팅 환경(205)상에 저장될 수 있고, 예시적인 통신 네트워크(160)상에 클라이언트 컴퓨팅 환경들(100, 210, 215, 220 및 225)을 통해 협력 사용자들 통신할 수 있다. 참여하는 사용자는 특정 데이터에 대한 액세스를 요청하고, 서버 컴퓨팅 환경(205)상의 전부 또는 일부분에 수용된 애플리케이션들을 요청할 수 있다. 이러한 데이터 통신은 클라이언트 컴퓨팅 환경들(100, 210, 215, 220 및 225)과 처리 및 저장을 위한 서버 컴퓨팅 환경들 사이에서 통신할 수 있다. 서버 컴퓨팅 환경(205)은 컴퓨팅 프로그램들, 공정들 및 발생(generation), 인증(authentication), 부호화(encryption) 및 데이터의 통신을 위한 애플릿(applet)들을 호스팅(host)할 수 있고, 이러한 데이터 트랜잭션(transaction)을 실현시키기 위하여 다른 서버 컴퓨팅 환경들(미도시), 제3자 서비스 제공자(미도시), 네트워크 접속 저장부(NAS) 및 저장부 영역 네트워크(SAN)와 협력할 수 있다.In operation, a user (not shown) may interact with a computing program running on a client computing environment to obtain desired data and / or computing programs. The data and / or computing applications may be stored on a server computing environment 205, and cooperating users through client computing environments 100, 210, 215, 220, and 225 on an exemplary communications network 160. Can communicate. Participating users may request access to specific data and request applications accommodated in whole or in part on server computing environment 205. Such data communication may communicate between client computing environments 100, 210, 215, 220, and 225 and server computing environments for processing and storage. Server computing environment 205 may host computing programs, processes and applets for generation, authentication, encryption, and communication of data, and such data transactions. It may cooperate with other server computing environments (not shown), third party service providers (not shown), network attached storage (NAS) and storage area network (SAN) to realize the transaction.

따라서, 본 명세서에 개시된 장치 및 방법은 상기 네트워크에 액세스하고 상호작용하기 위한 클라이언트 컴퓨팅 환경 및 클라이언트 컴퓨팅 환경과 상호작용하기 위한 서버 컴퓨팅 환경을 갖는 컴퓨터 네트워크 환경에 사용될 수 있다. 그러나, 이동성 장치 플랫폼(mobility device platform)을 제공하는 장치 및 방법은 다양한 네트워크-기반 아키텍쳐들로 실행될 수 있으며, 따라서, 도시된 실시예들로 제한되지 않는다.Thus, the apparatus and methods disclosed herein may be used in a computer network environment having a client computing environment for accessing and interacting with the network and a server computing environment for interacting with a client computing environment. However, an apparatus and method for providing a mobility device platform may be implemented with a variety of network-based architectures, and is therefore not limited to the illustrated embodiments.

3. 플랫폼 의존 링킹3. Platform dependent linking

실행가능한 프로그램들은 일반적으로 플랫폼 의존적이다. 상이하게 진술되는 주어진 프로그램은, 개발될 때, 특정 플랫폼상에 실행하도록 의도되어, 컴파일링되고, 링크되며, 특정 플랫폼을 목적으로 만들어져야만 한다. 또한, 이러한 공정으로부터 생산된 결과적인 이진 실행 파일은 일반적으로 상이한 플랫폼상에 구동하지 않을 것이다. 종래의 시스템에 있어서, 각각의 개별적인 운영 체제에 대하여 개별적인 동적 라이브러리들을 만드는 것이 필수적일 수 있다. 다수의 운영 체제가 지원되어야하는 경우, 라이브러리 코드는 다수의 공유 객체들(동적 라이브러리들), 즉, 전용 툴을 사용하여 각각의 운영 체제에 대한 하나의 객체를 만드는 것이다. 상기 코드가 개별적인 플랫폼에 대한 고유한 명시적 기준 아이템들이 아니라면, 그 후, 상기 코드는 해당하는 주어진 운영 체제를 위하여 공유 객체 라이브러리를 생성하고, 상기 운영 체제로부터 유래된 다수의 플랫폼들상에 기능하기에 충분할 수 있다. 대조적으로, 라이브러리 코드가 플랫폼-고유 기능들에 명시적 의존성(explicit dependency)을 갖는다면, 그 후, 공유 객체는 주어진 플랫폼을 위해 명확하게 만들어지고, 일반적으로, 명시적 의존성이 부족한 다른 플랫폼상에 동작하지 않을 것이다.Executable programs are generally platform dependent. Given differently stated programs, when developed, are intended to run on a particular platform, must be compiled, linked, and made for a particular platform. Also, the resulting binary executables produced from this process will generally not run on different platforms. In conventional systems, it may be necessary to create separate dynamic libraries for each individual operating system. If multiple operating systems are to be supported, the library code is to create a single object for each operating system using multiple shared objects (dynamic libraries), ie dedicated tools. If the code is not explicit reference items unique to an individual platform, then the code creates a shared object library for that given operating system and functions on multiple platforms derived from the operating system. May be sufficient. In contrast, if the library code has an explicit dependency on platform-specific functions, then the shared object is made explicitly for a given platform, and generally on another platform that lacks explicit dependencies. Will not work.

운영 체제가 다수의 플랫폼들을 지원하는 실시예에 있어서, 프로그램 컴포넌트들의 세트는 일반적으로, 상기 플랫폼에 고유하게 관련된 실행가능 이진수 및 상기 플랫폼 기반인 운영 체제를 위해 만들어진 선택적인 공유 객체들(동적 라이브러리들)의 세트를 포함할 수 있으나, 이에 제한되지는 않는다.In an embodiment in which the operating system supports multiple platforms, the set of program components generally includes executable binary numbers unique to the platform and optional shared objects created for the platform-based operating system (dynamic libraries). ), But is not limited thereto.

도 3은 "런타임 동적 링킹"을 수행할 때 예시적인 컴퓨팅 환경(300)에 의해 수행되는 공정을 도시한다. 도 3에 도시된 바와 같이, 프로그램 소스 파일(350)은 블럭(350)에서 객체 파일을 생성하기 위해 컴파일링된다. 유사하게, 라이브러리 소스 파일(305)은 블럭(310)에서 동적 라이브러리를 생성하기 위하여 컴파일링된다. 컴파일(compilation)(350)로부터의 객체 파일들은 동적 이진 실행파일을 생성하기 위하여 단계 345에서 정적으로 링크된다. 3 illustrates a process performed by the example computing environment 300 when performing “runtime dynamic linking”. As shown in FIG. 3, program source file 350 is compiled to create an object file at block 350. Similarly, library source file 305 is compiled to generate a dynamic library at block 310. Object files from compilation 350 are statically linked in step 345 to generate a dynamic binary executable.

도 3에 도시된 바와 같이, 이진 실행가능 프로그램은 단계 340에서 실행될 수 있다. 실행 동안, 상기 프로그램은 실행 프로그램에 의해 사용되기 위해 라이브러리를 개방시키기 위해 단계 335에서 명령어 호출을 형성할 수 있다. 응답에서, 호스트 환경에 제공되는 동적 링커(320)는 요청된 라이브러리(315)를 실행 프로그램의 어드레스 공간에 로딩하고, 라이브러리로 처리를 복귀시킨다. 그 다음, 프로그램은 라이브러리(315)에 의해 익스포트된 특정 심볼의 어드레스를 획득하기 위해, 단계 325에서 라이브러리 처리를 특별 함수로 통과시킬 수 있다. 여기서 참조되는 특별 함수는 운영 체제에 의해 전형적으로 제공된다; 예를 들어, 마이크로소프트 윈도우즈의 경우, 특별 함수는 GetProcAddress로 불린다. 어드레스를 획득하면, 라이브러리에 의해 익스포트된 심볼은 그 다음 실행 프로그램에 의해 사용하기 위해 호출되도록 단계 330에서 이용가능하다.As shown in FIG. 3, the binary executable program may be executed in step 340. During execution, the program may form an instruction call in step 335 to open the library for use by the executing program. In response, the dynamic linker 320 provided to the host environment loads the requested library 315 into the address space of the executable program and returns processing to the library. The program may then pass library processing to a special function at step 325 to obtain the address of the particular symbol exported by library 315. Special functions referred to herein are typically provided by the operating system; For example, on Microsoft Windows, the special function is called GetProcAddress. Once the address is obtained, the symbols exported by the library are then available at step 330 to be called for use by the executing program.

도 4 및 도 5는 소스 코드가 어떠한 방식으로 다수의 운영 체제 및 종래의 접근법을 갖는 플랫폼들상에 구동하도록 처리될 수 있는지를 개시한다. 단일 운영 체제 A(485)가 두 개의 플랫폼들 A1(475) 및 A2(480)을 지원하는 도 4를 참조로 하여, 도 4는 라이브러리 소스 파일(405) 및 프로그램 소스 파일(415)을 갖는 예시적인 동적 링킹 아키텍쳐(400)를 도시한다. 라이브러리 소스 파일(405)은 운영 체제 A(485)를 위한 동적 라이브러리(430)를 생성하기 위하여 블럭(410)에서 컴파일링된다. 4 and 5 disclose how the source code can be processed to run on platforms with multiple operating systems and conventional approaches. With reference to FIG. 4 where a single operating system A 485 supports two platforms A1 475 and A2 480, FIG. 4 is an example with a library source file 405 and a program source file 415. Dynamic linking architecture 400 is shown. Library source file 405 is compiled at block 410 to generate dynamic library 430 for operating system A 485.

마찬가지로, 프로그램 소스 파일(415)은 플랫폼 A1(475)에 대한 객체 파일을 생성하기 위하여 블럭(420)에서 컴파일링되고, 플랫폼 A2(480)에 대한 객체 파일을 생성하기 위하여 블럭(425)에서 컴파일링된다. 컴파일(420)로부터 나오는 객체 파일들은 결과적인 동적 실행 객체 파일 A1exec(435)(예를 들어, 플랫폼 A1(475)상에서 실행가능한)을 생성하기 위하여 스터브 파일(450)과 정적으로 링크된다. 또한, 도시된 바와 같이, 컴파일(425)로부터 나오는 객체 파일들은 결과적인 동적 실행 객체 파일 A2exec(440)(플랫폼 A2(480)상에서 실행가능한)을 생성하도록 정적으로 링크된다. 동적 링커(455)는 라이브러리를 개방하도록 실행 프로그램에 대한 호출(445)에 응답하여, 런타임에서 실행가능 프로그램 A1exec(435)에 동적 라이브러리(430)를 링크시키도록 동작된다. 라이브러리(430)는 플랫폼 A1(475)에서 실행되는 링크된 실행파일(465)을 생성하기 위해 운영체제 A(485)의 어드레스 공간으로 로딩된다. 유사하게, 동적 링커(460)는 라이브러리를 개방시키도록 실행 프로그램에 대한 호출(450)에 응답하여 런타임에서 실행가능 프로그램 A2exec(440)에 동적 라이브러리(430)에 링크시키도록 동작한다. 라이브러리(430)는 플랫폼 A2(480)에서 실행되는 링크된 실행파일(470)을 생성하기 위해 운영체제 A(485)의 어드레스 공간으로 로딩된다. 동작시, 링크된 실행파일들(465 또는 470)은 각각 동적 라이브러리(430)로부터 함수들을 호출하거나 데이터를 검색할 수 있다.Similarly, program source file 415 is compiled at block 420 to generate an object file for platform A1 475 and at block 425 to generate an object file for platform A2 480. Ring. The object files resulting from compilation 420 are statically linked with stub file 450 to generate the resulting dynamic executable object file A1exec 435 (eg, executable on platform A1 475). Also, as shown, the object files coming from the compilation 425 are statically linked to produce the resulting dynamic executable object file A2exec 440 (executable on platform A2 480). The dynamic linker 455 is operative to link the dynamic library 430 to the executable program A1exec 435 at runtime in response to a call 445 to the executable program to open the library. The library 430 is loaded into the address space of operating system A 485 to generate a linked executable 465 that runs on platform A1 475. Similarly, the dynamic linker 460 operates to link the dynamic library 430 to the executable program A2exec 440 at runtime in response to a call 450 to the executable program to open the library. The library 430 is loaded into the address space of operating system A 485 to generate a linked executable 470 that runs on platform A2 480. In operation, the linked executables 465 or 470 can call functions or retrieve data from the dynamic library 430, respectively.

도 5를 참조로 하여, 도 5는 라이브러리 소스 파일(505) 및 프로그램 소스 파일(515)을 갖는 예시적인 동적 링킹 아키텍쳐(500)를 도시한다. 라이브러리 소스 파일(505)은 운영 체제 B(585)에 대하여 동적 라이브러리(530)를 생성하기 위하여 블럭(510)에서 컴파일링된다. Referring to FIG. 5, FIG. 5 shows an example dynamic linking architecture 500 with a library source file 505 and a program source file 515. Library source file 505 is compiled at block 510 to generate dynamic library 530 for operating system B 585.

마찬가지로, 프로그램 소스 파일(515)은 플랫폼 B1(575)에 대한 객체 파일을 생성하기 위하여 블럭(520)에서 컴파일링되고, 플랫폼 B2(580)에 대한 객체 파일을 생성하기 위하여 블럭(525)에서 컴파일링된다. 컴파일(520)로부터 나오는 객체 파일들은 결과적인 동적 실행 객체 파일 B1exec(535)(예를 들어, 플랫폼 B1(575)상에서 실행가능한)을 생성하기 위하여 스터브 파일(550)과 정적으로 링크된다. 또한, 도시된 바와 같이, 컴파일(525)로부터 나오는 객체 파일들은 결과적인 동적 실행 객체 파일 B2exec(540)(플랫폼 B2(580)상에서 실행가능한)을 생성하기 위하여 스터브 파일(550)과 정적으로 링크된다. 동적 링커(555)는 라이브러리를 개방시키도록 실행 프로그램에 대한 호출(545)에 응답하여 런타임에서 실행가능 프로그램 B1exec(535)에 동적 라이브러리(530)를 링크시키도록 동작한다. 라이브러리(530)는 플랫폼 B1(575)에서 실행되는 링크된 실행파일(565)를 생성하기 위해 운영체제 B(585)의 어드레스 공간에 로딩된다. 유사하게, 동적 링커(560)는 라이브러리를 개방하도록 실행 프로그램에 대한 호출(550)에 응답하여, 런타임에서 실행가능 프로그램 B2exec(540)에 동적 라이브러리(530)를 링크시키도록 동작한다. 라이브러리(530)는 플랫폼 B2(580)에서 실행되는 링크된 실행파일(570)을 생성하기 위해 운영체제 B(585)의 어드레스 공간에 로딩된다. 동작시, 링크된 실행파일들(565 또는 570)은 각각 동적 라이브러리(530)로부터 함수들을 호출하거나 데이터를 검색할 수 있다.Similarly, program source file 515 is compiled at block 520 to generate an object file for platform B1 575, and at block 525 to generate an object file for platform B2 580. Ring. Object files resulting from compilation 520 are statically linked with stub file 550 to generate the resulting dynamic executable object file B1exec 535 (eg, executable on platform B1 575). Also, as shown, the object files coming from the compilation 525 are statically linked with the stub file 550 to generate the resulting dynamic executable object file B2exec 540 (executable on platform B2 580). . The dynamic linker 555 operates to link the dynamic library 530 to the executable program B1exec 535 at runtime in response to a call 545 to the executable program to open the library. The library 530 is loaded into the address space of operating system B 585 to generate a linked executable 565 that runs on platform B1 575. Similarly, dynamic linker 560 operates to link dynamic library 530 to executable program B2exec 540 at runtime in response to a call 550 to the executable program to open the library. Library 530 is loaded into the address space of operating system B 585 to create a linked executable 570 that runs on platform B2 580. In operation, the linked executables 565 or 570 may respectively call functions or retrieve data from the dynamic library 530.

도 4 및 도 5에 도시된 바와 같이, 애플리케이션 프로그램(415 및 515)을 그리고 라이브러리 파일(405 및 505)을 각각 포함하는 소스 코드의 공통적인 세트가 존재한다. 예시적인 실행에 있어서, 애플리케이션 프로그램은 4개의 개별적인 플 랫폼들, 즉, 공통 운영 체제 A(485)로부터 나오는 플랫폼들 A1(475) 및A2(480) 그리고 운영 체제 B(585)로부터 나오는 플랫폼들 B1(575) 및 B2(580)상에 구동하도록 기록될 수 있다. 애플리케이션(415 및 515)의 소스 코드는 플랫폼 A1(475), 플랫폼 A2(480), 플랫폼 B1(575) 및 플랫폼 B2(580) 등의 플랫폼들 각각에 대하여 특정한 명령어들을 유지시킬 수 있으며, 애플리케이션(415 및 515)의 소스 코드가 컴파일링될 때 플랫폼 의존성이 식별될 수 있는 방식으로 기록될 수 있다.As shown in Figures 4 and 5, there is a common set of source code that includes application programs 415 and 515 and library files 405 and 505, respectively. In an exemplary implementation, the application program may be divided into four separate platforms: platforms A1 475 and A2 480 from common operating system A 485 and platforms B1 from operating system B 585. 575 and B2 580 may be written to drive. The source code of the applications 415 and 515 may maintain specific instructions for each of the platforms, such as platform A1 475, platform A2 480, platform B1 575, and platform B2 580, and the application ( When the source code of 415 and 515 is compiled, it can be recorded in such a way that platform dependencies can be identified.

제공되는 구현예에 있어서, 라이브러리(405 및 505)에 대한 소스 코드는 일반적으로 특정 플랫폼 의존성을 유지시키지 않는다. 예시적인 동작 시에, 라이브러리는 협력 애플리케이션 프로그램에 의해 호출될 수 있고, 동적 라이브러리로서 작동할 수 있다. 도 4에 도시된 바와 같이, 각각의 플랫폼들(475 및 480)은 상기 플랫폼 특정 컴파일러 툴들(예를 들어, 컴파일러 블럭들(420 및 425))을 통해 공통 애플리케이션 소스 파일(415)을 컴파일링함으로써 생성될 수 있는 그 자신의 동적 실행 파일 A1exec(435), A2exec(440)를 요구할 수 있다. 예시적인 실행에 있어서, 협력 동적 라이브러리(430)는 일단 생성되면 각각의 플랫폼 A1(475) 및 플랫폼 A2(480)상에 구동가능한 공정을 생성하기 위하여 실행가능한 A1exec(435) 또는 A2exec(440) 모두에 동적으로 링크될 수 있다.In the provided implementations, the source code for the libraries 405 and 505 generally does not maintain specific platform dependencies. In an example operation, the library can be called by a collaborative application program and can act as a dynamic library. As shown in FIG. 4, each of the platforms 475 and 480 may be configured to compile a common application source file 415 via the platform specific compiler tools (eg, compiler blocks 420 and 425). It may require its own dynamic executable files A1exec 435 and A2exec 440 that can be generated. In an exemplary implementation, the cooperative dynamic library 430, once created, is both executable A1exec 435 or A2exec 440 to generate a process that is runable on each platform A1 475 and platform A2 480. Can be linked dynamically to

도 5는 두 개의 부가적인 실행 파일들 B1exec(535) 및 B2exec(540)이상기 애플리케이션이 플랫폼 B1(575) 및 플랫폼 B2(580)상에서 구동하도록 하기 위하여 컴파일링되는 것을 도시한다. 또한, 실행 파일들, 즉, B1exec(535) 및 B2exec(540)이 운영 체제 B(585)를 위해 만들어지기 때문에, 새로운 동적 라이브러리(530)는 실행가능성 B1exec(535) 및 B2exec(540)과의 링크에 생성된다. 이러한 실행에 있어서, 두 개의 운영 체제들(각각 운영 체제 A(485) 및 운영 체제 B(585))상에 동작하는 4개의 플랫폼들(플랫폼 A1(475), 플랫폼 A2(480), 플랫폼 B1(575) 및 플랫폼 B2(580))에 걸쳐 라이브러리의 동적 링킹을 실현하기 위하여, 4개의 동적 실행 파일들 및 두 개의 동적 라이브러리들이 만들도록 요구된다. 종래의 접근법으로 동등하지 않은 컴퓨팅 환경들상에 동작가능한 이진 객체들의 개발은 리소스 집약적일 수 있다.5 shows two additional executables B1exec 535 and B2exec 540 compiled to allow the application to run on platform B1 575 and platform B2 580. In addition, because the executables, ie, B1exec 535 and B2exec 540, are created for operating system B 585, the new dynamic library 530 is associated with executable B1exec 535 and B2exec 540. Created on the link. In this implementation, four platforms (platform A1 475, platform A2 480, platform B1) operating on two operating systems (operating system A 485 and operating system B 585, respectively) 575) and platform B2 580), four dynamic executables and two dynamic libraries are required to be created to realize dynamic linking of the library. The development of binary objects operable on unequal computing environments with conventional approaches can be resource intensive.

도 6은 예시적 컴퓨팅 환경(600)의 컴포넌트들을 도시한다. 도 6에 도시된 바와 같이, 소스 코드(607) 및 CPU(670) 사이에 층들(605, 610 및 615)의 계층이 존재할 수 있다. 이러한 계층(hierarchy)은 상부 및 하부 층들에서 높은 등급의 공통성(commonality)을 보여 주지만 이들 사이에 확산이 존재한다. 최상위 레벨(605)에서, 소스 코드(607)는 일부 제한된 플랫폼-특정 엘리먼트(620)와 함께 플랫폼을 모두 작동시키는 것이 대체로 일반적이다. 최하위 레벨(615)에서, 상기 코드는 CPU(670)에서 실행된다. 일 실시예에서, CPU(670) 아키텍쳐가 다수의 상이한 컴퓨팅 환경(미도시)에서 공유되는 경우, 낮은 레벨 기계 명령어는 동일한 것으로 기대된다. 그러나 중간층(610)은 각각 다수의 플랫폼 변수(630,635,645,650,660)를 갖는 다수의 동작 시스템(640,655,665)을 유지시킬 수 있으며, 자신의 뚜렷한 특징과 툴 체인(tool chain)으로 인해 개별 이진값을 필요로 할 수 있다. 또한 도시된 것처럼, 상부층(605)은 플랫폼 및 작동 시스템과는 무관한 플랫폼 독립 소스 코드(625)를 포함한다.6 illustrates components of an example computing environment 600. As shown in FIG. 6, there may be a layer of layers 605, 610, and 615 between the source code 607 and the CPU 670. This hierarchy shows a high degree of commonality in the upper and lower layers, but there is a diffusion between them. At the top level 605, source code 607 is generally common to operate both platforms with some limited platform-specific elements 620. At the lowest level 615, the code is executed in the CPU 670. In one embodiment, where the CPU 670 architecture is shared in many different computing environments (not shown), low level machine instructions are expected to be the same. However, the middle layer 610 can maintain multiple operating systems 640, 655, 665 with multiple platform variables 630, 635, 645, 650, 660, respectively, and may require separate binary values due to their distinct features and tool chains. have. As also shown, top layer 605 includes platform independent source code 625 independent of platform and operating system.

일 실시예에서, 도 5를 참조하면, 세 개의 작동 시스템에서 작동하는 다섯 개의 플랫폼이 있다. 특히, 플랫폼A1(630)과 플랫폼A2(635)는 작동 시스템A(640)에서 실행되고, 플랫폼B1(645)과 B2(650)는 작동 시스템B(655)에서 실행되며, 플랫폼C1(660)은 작동 시스템C(665)에서 실행된다. 종래 방법을 이용하면, 각각의 애플리케이션 프로그램(각각의 플랫폼을 위한 것임)과 세 개의 개별 동적 라이브러리(각각의 OS를 위한 것임)를 더한 다섯 개의 상이한 버젼은 컴퓨터 프로그램의 적절한 동작을 보장하도록 생성될 필요가 있다. 여기서 설명한 시스템과 방법은 다섯 개의 플랫폼과 두 개의 작동 시스템에 대해 동작하는 하나의 동적 라이브러리를 제공함으로써 종래 실시의 단점을 개선하는 것을 돕는다. 일 실시예에서, CPU에서 실행되는 OS와 무관하게 특정 CPU 아키텍쳐를 포함하는 모든 시스템에서 주될 수 있는 이진 라이브러리의 단일 세트가 생성될 수 있고, 이로 인해 도 6의 상부층(605)과 하부층(615)에서 공통성의 장점을 갖는다. In one embodiment, referring to FIG. 5, there are five platforms operating in three operating systems. In particular, platform A1 630 and platform A2 635 run on operating system A 640, platform B1 645 and B2 650 run on operating system B 655, and platform C1 660. Is executed in operating system C 665. Using conventional methods, five different versions, plus each application program (for each platform) and three separate dynamic libraries (for each OS), need to be created to ensure proper operation of the computer program. There is. The systems and methods described herein help to ameliorate the shortcomings of conventional implementations by providing one dynamic library that operates on five platforms and two operating systems. In one embodiment, a single set of binary libraries can be created that can be predominant in any system that includes a particular CPU architecture, independent of the OS running on the CPU, thereby resulting in the top layer 605 and bottom layer 615 of FIG. Has the advantage of commonality.

여기서 설명하는 시스템과 방법은 다양한 컴퓨팅 환경에 적용될 수 있다. 일 실시예에서, 설명한 시스템과 방법은 대체로 INTEL® x86 계열의 프로세서를 포함한 데스크탑 PC에 적용될 수 있다. 데스크탑 PC의 일반적인 운영 체제는 MICROSOFT® WINDOWS®와 리눅스이며, 이들은 동적 링킹(linking) 함수을 갖는다. 그러나, 이들 운영 체제는 WINDOWS®와 리눅스가 동일한 CPU에서 실행되더라도 개별 라이브러리들이 WINDOWS®와 리눅스를 위해 제공되도록 이진(binary) 객체용 비호환 포맷을 사용한다. The systems and methods described herein can be applied to a variety of computing environments. In one embodiment, the systems and methods described may be applied to desktop PCs that generally include the INTEL® x86 family of processors. Common operating systems for desktop PCs are MICROSOFT® WINDOWS® and Linux, which have dynamic linking functions. However, these operating systems use an incompatible format for binary objects so that individual libraries are provided for WINDOWS® and Linux even if WINDOWS® and Linux run on the same CPU.

이동용 및 내장 장치의 경우, 확산 문제는 매우 커질 수 있다. 특히, 이동 용 및 내장 장치는 리눅스, WINDOWS® CE, PalmOS®, SymbianoOS®, BREW®, Itron을 포함한 매우 많은 운영 체제를 레버리징하지만(leverage) 반드시 이들로 제한되는 것은 아니다. 그러나 CPU 레벨(615)에서, ARM RISC 아키텍쳐와 같은 선택된 컴퓨터 하드웨어 아키텍쳐에 기반한 상당한 공통성이 존재할 수 있다. 본 실시는 OS 또는 플랫폼 층(예컨대, 610)에 따라 만들어진 생성 라이브러리 대신에 이러한 공통성을 활용하지 않는다. 일 실시예에서, 여기서 설명한 시스템과 방법은 선택된 컴퓨팅 환경 시장(예컨대, 이동 장치 시장)에 적용되어 소프트웨어 플랫폼과 무관한 선택된 하드웨어 아키텍쳐(예컨대, ARM 프로세서를 포함한 장치)에서 작동하는 컴퓨팅 환경에서 실행될 수 있는 단일 소프트웨어 라이브러리에 기여한다. 이러한 방법은 반드시 이에 제한되지 않지만 많은 버전의 플랫폼-특정 라이브러리를 개발하고 유지하는 비용의 감소를 포함한 많은 상업적 이득을 소프트웨어 개발자와 고객 모두에게 제공한다. 더구나, 코드 품질은 다수의 설치에 따른 동일 부품에 의한 축적된 경험을 통해 매우 빠르게 설정될 수 있다. 또한, 라이브러리의 변경은 이러한 방법에 의해 보다 완벽하고 효율적으로 시험될 수 있다. 장치 제작자(예컨대, 셀룰러폰 제작자)는 만약 이러한 라이브러리가 단일 제품 범위에서 실험되는 경우 다양한 제품 범위에 대한 공통 라이브러리를 사용할 수 있다.For mobile and embedded devices, the diffusion problem can be very large. In particular, mobile and embedded devices leverage, but are not necessarily limited to, many operating systems including Linux, WINDOWS® CE, PalmOS®, SymbianoOS®, BREW®, Itron. However, at CPU level 615, there may be significant commonality based on selected computer hardware architecture, such as ARM RISC architecture. This implementation does not utilize this commonality in place of the generation library created according to the OS or platform layer (eg, 610). In one embodiment, the systems and methods described herein may be applied to a selected computing environment market (eg, mobile device market) to run in a computing environment operating on a selected hardware architecture (eg, a device including an ARM processor) independent of the software platform. Contribute to a single software library. This approach is not necessarily limited, but provides many commercial benefits to both software developers and customers, including the reduced cost of developing and maintaining many versions of platform-specific libraries. Moreover, the code quality can be set very quickly through the accumulated experience with the same parts with multiple installations. In addition, changes to the library can be tested more completely and efficiently by this method. Device manufacturers (eg, cellular phone manufacturers) may use common libraries for various product ranges if such libraries are tested in a single product range.

이하의 예시된 구현예와 도면들은 구체적으로는 런타임에서 라이브러리들의 동적 링크에 관한 것이다.The illustrated embodiments and figures below relate specifically to dynamic linking of libraries at runtime.

도 7A는 예시적인 플랫폼 독립 이진 객체 및 링킹 아키텍쳐(700)를 도시한다. 도시된 바와 같이, 플랫폼 독립 이진 객체 및 링킹 아키텍쳐(700)는 메인 애 플리케이션 소스 코드(705)를 포함한 소스 코드, 및 이에 한정되지 않지만 플랫폼 독립 동적 라이브러리(PIDL) 소스(725)를 포함하는 플랫폼 독립 소스 코드 컴포넌트들; 컴파일러(730), PIDL 객체 파일(735), PIDL 동적 로더/링커(720)용 소스 코드를 포함한다.7A shows an example platform independent binary object and linking architecture 700. As shown, platform independent binary object and linking architecture 700 includes source code including main application source code 705, and platform independent including but not limited to platform independent dynamic library (PIDL) source 725. Source code components; Source code for compiler 730, PIDL object file 735, PIDL dynamic loader / linker 720.

예시된 동작에서, PIDL 소스(725)는 PIDL 객체 파일(735)을 생성하는 블록(730)에서 표준 객체 포맷으로 컴파일링된다. 도 7에 도시된 것처럼, 메인 애플리케이션 소스(705), 및 동적 로더/링커용 소스 코드(720) (예, 컴파일 컴포넌트들 소스 코드(745)의 세트)는 단계 770에서 타겟 플랫폼에 대해 컴파일 및 형성된다. 결과적인 동적 라이브러리 실행파일(795)은 메인 애플리케이션 함수(775), 및 동적 PIDL 로더/링커 함수들(785)을 레버리징하여 PIDL 객체 파일(735)로부터 함수를 호출하고 데이터를 검색한다.In the illustrated operation, the PIDL source 725 is compiled into a standard object format at block 730 that generates the PIDL object file 735. As shown in FIG. 7, the main application source 705, and source code 720 for the dynamic loader / linker (eg, a set of compilation components source code 745) are compiled and formed for the target platform in step 770. . The resulting dynamic library executable 795 leverages the main application function 775 and the dynamic PIDL loader / linker functions 785 to call the function from the PIDL object file 735 and retrieve data.

비록 예시적인 플랫폼 독립 이진 객체와 링킹 아키텍쳐(700)는 특정 구성에서 다양한 컴퍼넌트를 갖는 것으로 도시되었고 특정 동작을 수행하는 것으로 설명되었지만 여기서 설명한 본 발명의 개념은 다양한 컴포넌트, 구성 및 작동을 갖는 임의의 플랫폼 독립 이진 객체 및 링킹 아키텍쳐에 적용될 수 있기 때문에 상기 설명은 단순히 예시적일 뿐이다.Although the example platform independent binary object and linking architecture 700 has been shown to have various components in a particular configuration and has been described as performing certain operations, the inventive concepts described herein can be any platform having various components, configurations, and operations. The above description is merely exemplary because it can be applied to independent binary objects and linking architectures.

일 실시예에서, 예시적인 플랫폼 독립 이진 객체 및 링킹 아키텍쳐(700)는 하기 방법에 따라 동작할 수 있다. PIDL 객체 파일(735)은 그 구조가 양호하게 형성된 표준 객체 파일 포맷으로 형성될 수 있다. 동적 로더/링커(720)는 메인 애플리케이션 프로그램(705)에 포함될 수 있도록 기록될 수 있다. 제공된 실시예에서, 만약 타겟 플랫폼이 공지되었다면, 결합된 소스 코드(예컨대, 컴파일링 컴포넌트 소스 코드(745) 세트)는 주어진 플랫폼(미도시)를 위한 이진 실행파일(795)로 컴파일링될 수 있다. 런타임에서, 동적 로더/링커(785)(예컨대, 컴파일된 로더/링커)는 실행 애플리케이션(775)으로부터의 명령어 하에서 라이브러리(735)를 로딩할 수 있고, 처리를 PIDL 파일(735)로 복귀시킬 수 있다. 동적 링커/로더(785)는 또한 PIDL(735)에 의해 익스포트된 심볼들의 어드레스를 획득하도록 함수들을 포함하고, 애플리케이션(775)이 복귀된 심볼 어드레스 포인터들에 의해 그 자신의 사용을 위해 PIDL 심볼들을 호출할 수 있도록 한다.In one embodiment, the example platform independent binary object and linking architecture 700 may operate according to the following method. The PIDL object file 735 may be formed in a standard object file format in which the structure is well formed. The dynamic loader / linker 720 may be written to be included in the main application program 705. In the provided embodiment, if the target platform is known, the combined source code (eg, a set of compiling component source code 745) may be compiled into a binary executable 795 for a given platform (not shown). . At run time, the dynamic loader / linker 785 (eg, the compiled loader / linker) may load the library 735 under instructions from the executing application 775 and return processing to the PIDL file 735. have. Dynamic linker / loader 785 also includes functions to obtain the address of symbols exported by PIDL 735, and application 775 returns the PIDL symbols for its own use by the returned symbol address pointers. To be called.

설명한 바와 같이, 동적 라이브러리의 플랫폼 종속은 라이브러리 소스(725) 코드를 공지된 객체 파일 포맷(735)으로 컴파일링함으로써 제일 먼저 달성될 수 있다. 고려된 실시예에서, PIDL 소스(725)는 특정 플랫폼에서 어떠한 종속성을 갖지 않는다. 객체 파일 포맷(미도시)은 반드시 이들에 한정되지는 않지만 통상적으로 코드의 크기와 같은 헤더 정보, 컴파일러 또는 어셈블러에 의해 생성된 객체 코드, 객체 코드의 어드레스들이 링커에 의해 저글링할 때 링커(785)에 의해 사용하기 위한 재배치 정보, 및 이러한 모듈로부터 익스포트(export)될 또는 다른 모듈로부터 임포트(import)될 심볼의 심볼 테이블을 포함하는 여러 타입의 정보를 포함할 수 있다. 일 실시예에서, 플랫폼 독립 이진 객체 및 링킹 아키텍쳐(700)는 반드시 이들에 제한되지 않지만 ELF(실행가능 및 링킹 포맷), MICROSOFT® 휴대용 실행파일(PE) 포맷, 및 기타 객체 포맷(예컨대 본 명세서에서 설명한 시스템 및 방법을 위해 특수하게 설계된 객체 포맷)을 포함하는 여러 객체 파일 포맷을 리버리지할 수 있다. As described, platform dependency of the dynamic library can be achieved first by compiling the library source 725 code into the known object file format 735. In the contemplated embodiment, the PIDL source 725 does not have any dependencies on the particular platform. The object file format (not shown) is not necessarily limited to these, but typically linker 785 when header information such as the size of the code, object code generated by the compiler or assembler, and addresses of the object code are juggled by the linker. Various types of information, including relocation information for use by and a symbol table of symbols to be exported from or imported from another module. In one embodiment, platform independent binary object and linking architecture 700 is not necessarily limited to these, but is not limited to ELF (executable and linking format), MICROSOFT® Portable Executable (PE) format, and other object formats (eg, herein Multiple object file formats, including object formats specifically designed for the described systems and methods, can be reversed.

통상적으로, 상이한 운영 체제와 플랫폼은 상이한 객체 파일 포맷을 사용한다. 이러한 플랫폼을 위한 링커와 로더는 이러한 사전-정의된 포맷의 링크가능한 객체를 수용하는 것으로 기대되고, 다른 포맷을 거부할 것이다. 또한 플랫폼이 동적 링킹을 제공할 때, 동적 링커는 운영 체제의 일부이고 고유한 객체 포맷에 "하드 와이어링" 될 수 있다.Typically, different operating systems and platforms use different object file formats. Linkers and loaders for these platforms are expected to accept linkable objects in this pre-defined format and will reject other formats. Also, when the platform provides dynamic linking, the dynamic linker is part of the operating system and can be "hard wired" into its own object format.

본 명세서에서 설명한 시스템 및 방법은 제너릭 로더/링커(720)를 제공함으로써 이러한 단점을 개선한다. 일 실시예에서, 제너릭 로더/링커(720)는 선택된 객체 파일 포맷(예컨대, ELF, 또는 선택된 다른 객체 포맷)의 객체파일을 처리하도록 기록될 수 있다. 동작시, 제너릭 로더/링커(785)는 심볼, 재배치 정보, 및 PIDL 객체 파일(735) 내의 다른 정보를 위치시키도록 동작한다. 도 7에 도시된 바와 같이, 로더/링커(720)의 전개는 상호동작하는 메인 애플리케이션(705)의 소스 코드와 컴파일링된 소스 코드의 생성을 통해 달성될 수 있다. 이와 관련하여, 링킹 및 로딩 제어는 운영 체제로부터 제거되고 실행중인 실행파일에 포함된다. 동적 로더/링커(785)는 또한 비-PIDL 라이브러리를 처리하도록 동작할 수 있다. 이와 관련하여, 동적 로더/링커(785)는 다이내밀 라이브러리가 PIDL 타입인지 또는 비-PIDL 타입인지를 확인하고, 이에 따라 PIDL 또는 비-PIDL 라이브러리를 처리하도록 설계될 수 있다. 일 실시예에서, 비-PIDL 라이브러리가 처리될 때, 링킹 및 로딩의 제어는 다시 하부 운영 체제로 되돌아갈 수 있다.The systems and methods described herein alleviate this disadvantage by providing a generic loader / linker 720. In one embodiment, generic loader / linker 720 may be written to process object files of a selected object file format (eg, ELF, or another selected object format). In operation, generic loader / linker 785 operates to locate symbols, relocation information, and other information within PIDL object file 735. As shown in FIG. 7, deployment of the loader / linker 720 may be accomplished through the generation of source code and compiled source code of the interacting main application 705. In this regard, linking and loading control are removed from the operating system and included in the executable executable. The dynamic loader / linker 785 may also operate to process non-PIDL libraries. In this regard, the dynamic loader / linker 785 may be designed to determine whether the DieNamil library is a PIDL type or a non-PIDL type, and thus handle the PIDL or non-PIDL library. In one embodiment, when the non-PIDL library is processed, control of linking and loading may revert back to the underlying operating system.

일 실시예에서, PIDL 객체 파일은 재형성 또는 리컴파일링의 필요없이 상이 한 플랫폼에 대해 사용될 수 있다. 이러한 실시예에서, 메인 애플리케이션 프로그램은 선택된 플랫폼을 위한 동적 링커/로더 코드와 함께 컴파일링되고, 링킹의 제어가 플랫폼에 의존하지 않고 대신에 실행파일 내에 배치되기 때문에, 실행시 PIDL의 링킹은 PIDL 객체의 리-컴파일 또는 재-생성의 필요없이 상이한 플랫폼에 대해 달성될 수 있다.In one embodiment, the PIDL object file may be used for different platforms without the need for reconstruction or recompilation. In such an embodiment, the linking of PIDL at runtime is a PIDL object because the main application program is compiled with the dynamic linker / loader code for the selected platform, and the control of linking is not platform dependent and is instead placed in an executable. It can be achieved for different platforms without the need for re-compiling or re-creation.

동적 링커/로더(785)는 PIDL 객체(735)를 개방 및 폐쇄시키는 애플리케이션 프로그램(775)에 의해 사용될 수 있는 함수 호출들(PIDLOpen, PIDLClose, GetPIDLAddress)을 포함한다. PIDL의 개방 및 폐쇄는 실행 애플리케이션의 메모리 공간으로 PIDL 객체를 로딩 및 언로딩하는 단계, 및 심볼 어드레스들의 임의의 필요한 재배치를 수행하는 단계를 포함한다. GetPIDLAddress 함수는 PIDL 심볼의 재배치된 어드레스를 복귀시키고, 애플리케이션(775)이 이러한 어드레스에 대한 포인터를 통해 심볼을 호출할 수 있도록 한다. GetPIDLAddress는 PIDL 객체 파일내의 심볼 테이블에 질의하여 심볼 어드레스를 찾고, 라이브러리에 대해 제로의 베이스 메모리 어드레스를 가정한다. 재배치 이후, 이러한 어드레스는 메모리에 로딩되는 바와 같이, PIDL의 실제적인 넌-제로 베이스 어드레스를 허용하도록 복귀된다. 동적 링커/로더(785)의 함수들의 이러한 조합은 동적 링크가 런타임에서 발생하도록 하고, 로딩 시간 동적 링크에서 요구되는 바와 같이 라이브러리 스터브 파일에 대한 필요성을 제거한다.The dynamic linker / loader 785 includes function calls (PIDLOpen, PIDLClose, GetPIDLAddress) that can be used by the application program 775 to open and close the PIDL object 735. Opening and closing the PIDL includes loading and unloading the PIDL object into the memory space of the executing application, and performing any necessary relocation of symbol addresses. The GetPIDLAddress function returns the relocated address of the PIDL symbol and allows the application 775 to call the symbol through a pointer to this address. GetPIDLAddress queries the symbol table in the PIDL object file to find the symbol address and assumes a zero base memory address for the library. After relocation, this address is returned to allow the actual non-zero base address of the PIDL, as it is loaded into memory. This combination of functions of the dynamic linker / loader 785 allows dynamic linking to occur at runtime and eliminates the need for library stub files as required for load time dynamic linking.

본 발명에서 기술되는 시스템들과 방법들은 메인 애플리케이션이 동적 링커로 컴파일되는 것으로 주어지는 PIDL 객체들로서 배치된 동적 라이브러리들에 대한 메인 애플리케이션 액세스를 런타임에서 허용한다는 것을 고려한다. 도 7A의 구현예는 메인 애플리케이션(775)에 의해 사용하기 위한 익스포트된 PIDL 심볼들을 제공한다. 또한, 양방향 의존성을 생성하기 위해, PIDL이 애플리케이션(775)에 포함되는 심볼들을 임포트하는 것이 바람직할 수 있다. 본 발명에 기술되는 시스템들 및 방법들은 PIDL이 메인 애플리케이션의 기능(도 8에 기술되는 바와 같이)에 대한 액세스를 요구할 때의 실시예를 설명한다. 도 8을 참조하면, 함수들 또는 심볼들 A 및 B에 대한 코드는 메인 프로그램(810)에 위치될 수 있고, 함수들 C, D는 동적 라이브러리(820)에 위치될 수 있다. 예시된 실시예에서, 동적 라이브러리(820)가 A 및 B를 호출하기 위해, 또는 메인 프로그램이 라이브러리 함수들 C 또는 D를 사용하기 위해, 모든 함수들의 심볼들 및 위치는 결합된 프로그램에서 분석되어야 한다. 예시된 실시예에서, 이러한 동작은 예시적인 링커(미도시)에 의해 수행될 수 있다.The systems and methods described in the present invention contemplate that the runtime allows main application access to dynamic libraries deployed as PIDL objects that the main application is given to be compiled with the dynamic linker. The implementation of FIG. 7A provides exported PIDL symbols for use by the main application 775. It may also be desirable for PIDL to import the symbols included in application 775 to create a bidirectional dependency. The systems and methods described herein describe an embodiment when PIDL requires access to the functionality of the main application (as described in FIG. 8). Referring to FIG. 8, the code for the functions or symbols A and B may be located in the main program 810, and the functions C and D may be located in the dynamic library 820. In the illustrated embodiment, for the dynamic library 820 to call A and B, or for the main program to use the library functions C or D, the symbols and positions of all the functions must be analyzed in the combined program. . In the illustrated embodiment, this operation may be performed by an example linker (not shown).

종래의 방법들에서, 동적 링커는 일반적으로 운영 체제의 부분이다. 그러한 범주에서, 상이한 운영 체제들은 이들 자신의 링커들 및 객체 포맷들을 사용하기 때문에, 결과들은 플랫폼 의존적인 라이브러리 포맷이다. 주어진 플랫폼내에서 라이브러리(820)는 메인 프로그램(810)에 대한 객체 파일들의 포맷이 공지되기 때문에, 메인 프로그램(810)(예, 함수들 A 및 B에 액세스하기 위해)으로 재호출할 수 있다. 라이브러리는 메인 프로그램(810)으로부터 임포트된 심볼의 어드레스를 찾기 위해 동적 링커에 제공되는 런타임 함수 호출들(예, Windows®의 GetProcAddress)을 사용할 수 있고, 그 다음 라이브러리 자신의 사용을 위해 임포 트된 심볼을 호출한다. 단일 플랫폼상에 모든 객체 파일들이 동일한 공지된 포맷으로 있기 때문에, 상기 런타임 함수 호출들은 라이브러리(820)에 의해 익스포트된 심볼들을 위치시키기 위해, 프로그램(810)에 의해 다른 방향에서 사용되는 것과 동일한 함수 호출들이다.In conventional methods, the dynamic linker is generally part of the operating system. In that category, because different operating systems use their own linkers and object formats, the results are a platform dependent library format. Within a given platform, the library 820 may recall to the main program 810 (eg, to access functions A and B) because the format of the object files for the main program 810 is known. The library can use the runtime function calls provided to the dynamic linker (eg, GetProcAddress in Windows®) to find the address of the imported symbol from the main program 810 and then import the imported symbol for its own use. Call Because all object files are on the same platform in the same known format, the runtime function calls are the same function calls that are used in the other direction by the program 810 to locate the symbols exported by the library 820. admit.

그러나, 이러한 종래의 방법은 본 발명에 개시되는 플랫폼 독립적인 경우에서 실패(break down)한다. 런타임 링킹 함수들(PIDLOpen, PIDLClose, GetPIDLAddress)은 PIDL이 동적 링커/로더(785)에 공지된 규정된 객체 포맷(예, ELF)에서 생성되기 때문에, PIDL에 의해 익스포트된 심볼들을 처리할 때 하나의 방향에서 정확히 동작한다. GetPIDLAddress는 심볼 어드레스들을 복귀시키기 위해 그 심볼 테이블을 검색할 때 이러한 미리 규정된 객체 포맷을 가정한다. 그러나, 동일함 함수 호출들은 동적 이진 실행파일(795)이 특정 타겟 플랫폼에 대해 형성되고 이에 따라 그 객체 포맷이 플랫폼 의존적이기 때문에, PIDL로 임포트된 심볼들을 처리할 수 없고, 링커(785)에 제공되는 GetPIDLAddress 함수에 의해 가정되는 포맷과 상이한 것 같다. 따라서, 도 7A의 예시적인 실시예는 익스포트된 심볼들을 처리하기에 적합하지만, 도 8에 도시된 상황을 처리하기 위해 추가적인 조절이 요구되며, 여기서 심볼들은 또한 라이브러리로 임포트된다.However, this conventional method breaks down in the platform independent case disclosed in the present invention. Runtime linking functions (PIDLOpen, PIDLClose, GetPIDLAddress) are generated when processing symbols exported by PIDL, since PIDL is generated in a defined object format (e.g. ELF) known to dynamic linker / loader 785. It works exactly in the direction. GetPIDLAddress assumes this predefined object format when searching its symbol table to return symbol addresses. However, the same function calls cannot process symbols imported into PIDL and are provided to the linker 785, because the dynamic binary executable 795 is formed for a particular target platform and therefore its object format is platform dependent. Seems to be different from the format assumed by the GetPIDLAddress function. Thus, while the exemplary embodiment of FIG. 7A is suitable for handling exported symbols, additional adjustment is required to handle the situation shown in FIG. 8, where the symbols are also imported into the library.

도 7B는 임포트된 심볼들을 처리하도록 확장되는, 예시적인 플랫폼 독립적인 이진 객체 및 링킹 아키텍쳐(700)를 도시한다. 도시된 바와 같이, 플랫폼 독립적인 이진 객체 및 링킹 아키텍쳐(700)는 메인 애플리케이션 소스 코드(705)를 포함하는 소스 코드, 및 이에 제한되지 않지만 플랫폼 독립적인 동적 라이브러리(PIDL) 소스(725)를 포함하는 플랫폼 독립적인 소스 코드 컴포넌트들; 컴파일러(730), PIDL 객체 파일(735), PIDL 동적 로더/링커(720)에 대한 소스 코드, 규정된 애플리케이션 프로그램 인터페이스(API)(710), 및 API 파서(715)를 포함한다.7B shows an example platform independent binary object and linking architecture 700, which is extended to process imported symbols. As shown, platform independent binary object and linking architecture 700 includes source code including main application source code 705, and platform independent dynamic library (PIDL) source 725, but not limited to this. Platform independent source code components; Compiler 730, PIDL object file 735, source code for PIDL dynamic loader / linker 720, defined application program interface (API) 710, and API parser 715.

예시적인 동작에서, PIDL 소스(725)는 PIDL 객체 파일(735)을 생성하는 블럭(730)에서 표준 객체 포맷으로 컴파일된다. 유사하게, 애플리케이션 프로그램 인터페이스(API) 파서(715)는 PIDL 객체 파일(735)에 의해 상호동작하는 메인 애플리케이션(705) 액세스를 허용하도록 PIDL_getSymbol 함수를 생성하기 위해 API(710)상에서 동작할 수 있다. 도 7B에 도시된 것처럼, 메인 애플리케이션 소스(705), 동적 로더/링커(720)를 위한 소스 코드, 및 실행되고 있는 경우, PIDL_getSymbol 소스 함수(755)(예, 컴파일링 컴포넌트 소스 코드(745)의 세트)는 단계 770에서 타겟 플랫폼에 대해 컴파일 및 형성된다. 결과적인 동적 이진 실행파일(795)은 메인 애플리케이션 함수(775), PIDL_getSymbol 함수(780), 및 동적 PIDL 로더/링커 함수들(785)이 PIDL 객체 파일(735)로부터 함수들을 호출하고 데이터를 검색하도록 레버리징한다.In an exemplary operation, the PIDL source 725 is compiled into a standard object format at block 730 that generates the PIDL object file 735. Similarly, application program interface (API) parser 715 may operate on API 710 to generate a PIDL_getSymbol function to allow access to main application 705 interacting with PIDL object file 735. As shown in FIG. 7B, the source code for the main application source 705, the dynamic loader / linker 720, and, if executed, the PIDL_getSymbol source function 755 (eg, the compiling component source code 745). Set) is compiled and formed for the target platform at step 770. The resulting dynamic binary executable 795 allows the main application function 775, PIDL_getSymbol function 780, and dynamic PIDL loader / linker functions 785 to call functions and retrieve data from the PIDL object file 735. Leveraging.

이와 관련하여, 메인 애플리케이션에 의해 PIDL 라이브러리로 노출된 함수의 API(도 7B의 710)(애플리케이션 프로그래밍 인터페이스)는 (PIDL이 노출된 함수을 사용할 수 있도록) 먼저 특정화되고 공개된다. 다음에 API(도 7의 710)는 (도 7B에 개시된 것처럼) 메인 애플리케이션의 일부로서 컴파일링될 수 있는 소스 코드 함수 PIDL_getSymbol(도 7B의 755)를 생성하도록 파싱될 수 있다. 더욱이, 소스 코드(755)는 플랫폼 의존성들을 갖지 않는다. 런타임에서, PIDL 라이브러리(735) 는 임포트될 심볼의 명칭을 가진 PIDL_getSymbol 함수를 호출함으로써, 애플리케이션 인터페이스 API(710)에 규정되는 심볼들을 임포트할 수 있다. PIDL_getSymbol 함수는 요청된 심볼의 어드레스를 복귀시키고, 그 다음 복귀된 어드레스를 통해 PIDL 라이브러리에 의해 호출될 수 있다.In this regard, the API of the function exposed by the main application to the PIDL library (710 in FIG. 7B) (application programming interface) is first specified and published (so that the PIDL can use the exposed function). The API (710 of FIG. 7) can then be parsed to generate a source code function PIDL_getSymbol (755 of FIG. 7B) that can be compiled as part of the main application (as disclosed in FIG. 7B). Moreover, source code 755 does not have platform dependencies. At run time, the PIDL library 735 can import the symbols defined in the application interface API 710 by calling the PIDL_getSymbol function with the name of the symbol to be imported. The PIDL_getSymbol function returns the address of the requested symbol and can then be called by the PIDL library through the returned address.

PIDL_getSymbol을 소스 코드로서 컴파일함으로써, PIDL 라이브러리는 소스(745)가 상이한 플랫폼들에 대해 컴파일될 때에도 임포트된 심볼 어드레스들에 대한 액세스를 보장한다. 소스 코드는 컴파일(770)에 의해 생성되는 객체 포맷과 관계없이, 요청된 심볼의 실제 어드레스를 찾고 복귀시킬 수 있다. 동작시, 메인 프로그램은 동적 라이브러리에 존재하는 명명된 함수들을 호출할 수 있고(GetPIDLAddress를 이용하여), 동적 라이브러리는 메인 프로그램의 함수들을 호출할 수도 있다(PIDL_getSymbol을 호출함으로써). 정확히 동작하기 위한 결합을 위해, 함수 호출들은 로더가 컴퓨팅 환경의 메모리에 모든 객체 코드 컴포넌트들을 배치하면 적절한 어드레스들로 분석 및 배치될 수 있다.By compiling PIDL_getSymbol as source code, the PIDL library ensures access to imported symbol addresses even when source 745 is compiled for different platforms. The source code can find and return the actual address of the requested symbol, regardless of the object format generated by compile 770. In operation, the main program may call named functions that exist in the dynamic library (using GetPIDLAddress), and the dynamic library may call the functions of the main program (by calling PIDL_getSymbol). For coupling to work correctly, function calls can be resolved and placed at appropriate addresses once the loader has placed all object code components in memory of the computing environment.

소스 함수 PIDL_getSymbol을 생성하기 위한 대안적인 실시예는 도 7C에 도시된다. 도시된 바와 같이, 플랫폼 독립적인 이진 객체 및 링킹 아키텍쳐(700)는 메인 애플리케이션 소스 코드(705)를 포함하는 소스 코드, 및 이에 제한되지 않지만 플랫폼 독립적인 동적 라이브러리(PIDL) 소스(725)를 포함하는 플랫폼 독립적인 소스 코드 컴포넌트들; 컴파일러(730), PIDL 객체 파일(735), PIDL 동적 로더/링커(720)에 대한 소스 코드, 및 객체 파서(740)를 포함한다. An alternative embodiment for generating the source function PIDL_getSymbol is shown in FIG. 7C. As shown, platform independent binary object and linking architecture 700 includes source code including main application source code 705, and platform independent dynamic library (PIDL) source 725, but not limited to this. Platform independent source code components; Compiler 730, PIDL object file 735, source code for PIDL dynamic loader / linker 720, and object parser 740.

예시적인 동작에서, PIDL 소스(725)는 PIDL 객체 파일(735)을 생성하는 블럭 (730)에서 표준 객체 포맷으로 컴파일된다. 유사하게, 객체 파서(740)는 PIDL 객체 파일(735)에 의한 상호동작하는 메인 애플리케이션(705) 액세스를 허용하도록 PIDL_getSymbol 함수를 생성하기 위해 객체 파일(735)상에서 동작할 수 있다. 도 7C에 도시된 것처럼, 메인 애플리케이션 소스(705), 동적 로더/링커(720)를 위한 소스 코드, 및 실행되고 있는 경우, PIDL_getSymbol 소스 함수(755)(예, 컴파일링 컴포넌트 소스 코드(755)의 세트)는 단계 770에서 타겟 플랫폼에 대해 컴파일 및 형성된다. 결과적인 동적 이진 실행파일(795)은 메인 애플리케이션 함수(775), PIDL_getSymbol 함수(780), 및 동적 PIDL 로더/링커 함수들(785)이 PIDL 객체 파일(735)로부터 함수들을 호출하고 데이터를 검색하도록 레버리징한다.In an exemplary operation, the PIDL source 725 is compiled into a standard object format at block 730 that generates the PIDL object file 735. Similarly, object parser 740 may operate on object file 735 to generate a PIDL_getSymbol function to allow interactive main application 705 access by PIDL object file 735. As shown in FIG. 7C, the source code for the main application source 705, the dynamic loader / linker 720, and, if executed, the PIDL_getSymbol source function 755 (eg, the compilation component source code 755). Set) is compiled and formed for the target platform at step 770. The resulting dynamic binary executable 795 allows the main application function 775, PIDL_getSymbol function 780, and dynamic PIDL loader / linker functions 785 to call functions and retrieve data from the PIDL object file 735. Leveraging.

객체 파일 포맷(미도시)은 전형적으로 이에 제한됨이 없이, 코드의 크기와 같은 헤더 정보, 컴파일러 또는 어셈블러에 의해 생성되는 객체 코드, 객체 코드의 어드레스들이 링커에 의해 정글링(juggled)될 때 링커(785)에 의한 사용을 위한 재배치 정보, 및 이러한 모듈로부터 익스포트되거나 다른 모듈들로부터 임포트되는 심볼들의 심볼 테이블들을 포함하는 정보의 몇가지 타입들을 포함할 수 있다. The object file format (not shown) is typically not limited thereto, but linker (such as the size of the code, the object code generated by the compiler or assembler, and the address of the object code when the addresses are jungled by the linker) Relocation information for use by 785, and some types of information including symbol tables of symbols exported from or imported from other modules.

예측된 객체 포맷의 정보를 가진 파서(740)는 객체에 의해 임포트되는 그러한 심볼들을 식별하기 위해 객체를 파싱할 수 있고, 각각의 임포트된 심볼의 어드레스를 획득하기 위해 파싱된 결과들을 기반으로 소스 코드 함수들(755)을 생성한다. 객체 파서(740)는 심볼 명칭들과 특성들을 추출하기 위해 PIDL 객체 파일(735)을 통해 파싱하고, 파서의 출력으로서 소스 파일(755)을 생성한다(예, 이에 제한됨이 없이, "C" 언어 또는 그 등가물을 포함하는 상위 레벨 언어로). 이러한 소스 PIDL_getSymbol(755)은 도 7B의 동일한 명칭으로 소스와 동일한 기능을 수행한다. 구현 방법들의 차이는 도 7B에서, API(710)의 파싱은 PIDL(735)에 의해 사용되는지 여부와 무관하게, 메인 애플리케이션 API의 모든 심볼들을 노출시킬 것이다. 도 7C에서, 객체 파일(735)을 파싱하는 결과는 라이브러리(735)로 임포트되는데 실제로 요구되는 심볼들만을 노출시키는 것이다.The parser 740 with the information of the predicted object format can parse the object to identify those symbols imported by the object, and source code based on the parsed results to obtain the address of each imported symbol. Create functions 755. The object parser 740 parses through the PIDL object file 735 to extract symbol names and properties and generates a source file 755 as the output of the parser (eg, without limitation, the "C" language). Or in a higher level language containing the equivalent). The source PIDL_getSymbol 755 performs the same function as the source under the same name of FIG. 7B. The difference between the implementation methods is that in FIG. 7B, the parsing of the API 710 will expose all symbols of the main application API, regardless of whether it is used by the PIDL 735. In FIG. 7C, the result of parsing the object file 735 is to expose only the symbols that are actually required to be imported into the library 735.

예시적인 구현예의 예시적인 동작에서, 메인 프로그램이 실행을 시작할 때, 플랫폼 로더에 의해 메모리에 배치될 수 있다. 실행 동안, 메인 프로그램은 그 자체의 외부에 있는 라이브러리를 로딩하기 위해 호출할지 여부를 결정한다. 이러한 호출은 PIDL 링커를 불러내며(invoke), 이는 먼저 호출된 함수를 갖는 라이브러리의 명칭과 경로를 결정한다. 만약 라이브러리가 (PIDL이 아닌) WINDOWS® DLL과 유사한 정규 플랫폼 특정 동적 라이브러리인 경우, 링커는 하나가 존재할 때 정규 플랫폼 라이브러리 로더에 대한 제어를 통과한다. 그러나, 그 대신에, 라이브러리 객체가 PIDL이면, 실행 프로그램의 메모리 공간에 로딩된다.In an example operation of an example implementation, when the main program starts execution, it can be placed in memory by the platform loader. During execution, the main program decides whether to call to load a library external to itself. This call invokes the PIDL linker, which first determines the name and path of the library with the called function. If the library is a regular platform-specific dynamic library similar to a WINDOWS® DLL (rather than a PIDL), the linker passes control to the regular platform library loader when one exists. However, if the library object is PIDL instead, it is loaded into the memory space of the executable program.

"OpenPIDL" 함수 호출에 응답하여, 링커/로더는 PIDL 객체를 나타내기 위해 프로그래밍된 구조를 생성할 수 있다. 그 다음, 코드 크기를 찾기 위해 객체에 질의할 수 있고(예, 용이하게 이용가능한 객체 파일 포맷내에서 필드에 규정되는), 적절한 크기의 메모리의 고정된 블럭을 할당할 수 있으며, PIDL 파일을 할당된 메모리에 로딩할 수 있다.In response to the "OpenPIDL" function call, the linker / loader can create a structure that is programmed to represent the PIDL object. You can then query the object to find the code size (e.g., specify the fields in the readily available object file format), allocate a fixed block of memory of the appropriate size, and allocate a PIDL file. Can be loaded into memory.

다음에 링커는 메모리의 심볼 어드레스를 재배치하도록 동작한다. PIDL 내의 내부 심볼은 재배치된다. 동작시, 이진 파일은 객체 코드 내의 심볼의 어드레 스를 포함하지만, 대체로 라이브러리 코드를 위한 제로의 베이스 시작 어드레스가 존재한다는 가정하에 동작한다. 그러나, PIDL이 상이한 어드레스에서 로딩되고, 이는 PIDL이 메모리 안으로 로딩된 이후에 확인될 수 있다. 링커에 의한 재배치는 심볼 어드레스의 조절을 포함하여 메모리 블록의 실제 시작 어드레스를 고려하게 한다.The linker then operates to relocate the symbol address in memory. Internal symbols in the PIDL are relocated. In operation, the binary file contains the address of the symbol in the object code, but generally operates on the assumption that there is a zero base start address for the library code. However, the PIDL is loaded at a different address, which can be verified after the PIDL is loaded into memory. Relocation by the linker involves adjusting the symbol address to take into account the actual starting address of the memory block.

내부 PIDL 심볼을 재배치 한 후에, 링커는 메인 애플리케이션에 포함된 함수와 같은 것의 외부에 있는 PIDL에 의해 호출된 모든 심볼을 액세스한다. 이러한 심볼을 위해, 링커는 인수(argument)로서 재배치될 외부 심볼의 명칭을 이용하여 PIDL_getSymbol 함수를 호출할 수 있다. 이러한 함수는 애플리케이션 API에 의해 노출된 모든 심볼의 리스트를 포함하기 때문에, 명칭을 매칭시키고 지정된 심볼의 실제 어드레스를 복귀할 수 있다. 이러한 임포트된 심볼들에 대한 PIDL에 의한 후속적인 호출들은 PIDL을 개방하는 프로세스 동안 이러한 방식으로 패치된 실제 심볼 어드레스를 사용한다.After relocating the internal PIDL symbols, the linker accesses all symbols called by PIDL that are outside of the same function included in the main application. For such a symbol, the linker can call the PIDL_getSymbol function using the name of the external symbol to be relocated as an argument. Since this function contains a list of all the symbols exposed by the application API, it can match the name and return the actual address of the specified symbol. Subsequent calls by PIDL to these imported symbols use the actual symbol addresses that were patched in this manner during the process of opening the PIDL.

이러한 스테이지에서, PIDL은 익스포트 또는 임포트되는 내부 및 외부 심볼의 올바른 어드레스를 유지한다. 재배치가 완료된 후에, PIDL에 의해 익스포트된 심볼의 재배치된 어드레스는 다시 링커로 통과할 수 있다. 메인 프로그램은 호출이 PIDL 외부로부터 PIDL 심볼 중 하나로 이루어질 때 올바른 심볼 어드레스가 사용되도록 재배치된 심볼로 액세스된다.At this stage, the PIDL maintains the correct address of the internal and external symbols being exported or imported. After relocation is complete, the relocated address of the symbol exported by PIDL can pass back to the linker. The main program is accessed with the symbols relocated so that the correct symbol address is used when the call is made to one of the PIDL symbols from outside PIDL.

본 명세서에서 개시한 시스템과 방법은 단일 애플리케이션에 링크된 여러 라이브러리들(예컨대, PIDL)과 함께 사용될 수 있다. 이러한 라이브러리들은 제 2 라이브러리에 의해 익스포트된 심볼들과 함수들을 액세스하도록 제 1 라이브러리로부터의 OpenPIDL 및 GetPIDLAddress 호출들을 이용하여, 런타임에서 서로로부터 호출들을 형성할 수 있다. 메인 애플리케이션으로부터 심볼들을 임포트하는 링킹 메커니즘이 동일하게 적용될 수 있다. 각각의 동적 라이브러리는 표준 객체 포맷으로 저장되고, PIDL_getSymbol 스터브는 PIDL에 의해 임포트된 심볼들에 대한 참조들을 포함하는 소스 포맷으로 생성된다. 이것은 메인 애플리케이션의 노출된 API를 파싱함으로써, 또는 도 7C에서와 같이 각각의 라이브러리 객체들을 파싱함으로써 및 단일 PIDL_getSymbol 함수로의 각각의 파싱 동작으로부터 결과적인 소스 코드를 병합(collating)함으로써, 도 7B에서와 같이 생성될 수 있다. 메인 프로그램은 사용하는 PIDL 라이브러리들에 대한 병합된 PIDL_getSymbol 코드로 컴파일된다. 동적 로더/링커는 호출되는 런타임에서 각각의 라이브러리를 로딩 및 재배치하고, 메인 프로그램과 함께 PIDL 라이브러리들간에 심볼 포인터들을 복귀시키는 정보가 동적 로더/링커(예, 도 7A-C의 785) 및 프로그램으로 컴파일되는 PIDL_getSymbol 코드(예, 도 7B-C의 755)에 의해 처리된다.The systems and methods disclosed herein can be used with several libraries (eg, PIDL) linked to a single application. Such libraries can form calls from each other at runtime using OpenPIDL and GetPIDLAddress calls from the first library to access symbols and functions exported by the second library. The same linking mechanism for importing symbols from the main application can be applied. Each dynamic library is stored in a standard object format, and the PIDL_getSymbol stub is generated in a source format that contains references to the symbols imported by PIDL. This is done by parsing the exposed API of the main application, or by parsing individual library objects as in FIG. 7C and by collating the resulting source code from each parsing operation into a single PIDL_getSymbol function. Can be generated together. The main program is compiled with the merged PIDL_getSymbol code for your PIDL libraries. The dynamic loader / linker loads and rearranges each library at runtime when it is called, and the information that returns symbol pointers between the PIDL libraries along with the main program is passed to the dynamic loader / linker (eg, 785 of FIGS. 7A-C) and the program. Processed by the compiled PIDL_getSymbol code (eg, 755 of FIGS. 7B-C).

4. 플랫폼 독립 동적 라이브러리(Platform Independent Dynamic Library)4. Platform Independent Dynamic Library

도 9는 하나 이상의 PIDL의 런타임 링킹(linking)을 수행할 경우 예시적인 컴퓨팅 환경에 의해 수행되는 프로세싱을 나타낸다. 도시된 바와 같이, 프로세싱은 동적 이진 실행파일(dynaimic binary executable)이 컴파일되어 구현되는(built)(도 7에 도시된 것처럼, 예시적인 동적 이진 실행파일은, 제한되지 않지만, 컴파일된 메인(main) 애플리케이션 소스 코드, PIDL 로더/링커(loader/linker)에 대한 소스 코드, 및 PIDL 스터브(stub) 소스 코드를 포함할 수 있다) 블록(900)에서 시작된다. 동적 실행파일(excutable)이 예시적인 컴퓨팅 환경에서 작동하는 블록(910)으로 프로세싱이 진행된다. 다음, 협력(coorporating) 컴퓨터 프로그램이 라이브러리를 개방하도록 PIDLOpen을 호출하는지를 결정하는 블록(915)으로 프로세싱이 진행된다. 로더는 블록(920)에서 PIDLOpen 호출에 특정된 경로를 검색한 다음, 검색이 성공적인지 여부를 결정하기 위해 블럭(925)에서 검사가 수행된다. 만약 성공적이지 않으면, PIDLOpen 호출은 블럭(930)에서 널(Null) 인수(argument)를 복귀시키고 프로세싱이 종료된다.9 illustrates processing performed by an example computing environment when performing runtime linking of one or more PIDLs. As shown, the processing can be performed by building a dynamic binary executable (as shown in FIG. 7, an exemplary dynamic binary executable is not limited, but is compiled main). Application source code, source code for a PIDL loader / linker, and PIDL stub source code). Processing proceeds to block 910 where dynamic executables operate in an exemplary computing environment. Processing then proceeds to block 915 which determines whether a coorporating computer program calls PIDLOpen to open the library. The loader retrieves the path specified in the PIDLOpen call at block 920 and then a check is performed at block 925 to determine whether the search is successful. If not successful, the PIDLOpen call returns a null argument at block 930 and processing ends.

그러나 블록(920)에서, PIDL 객체가 특정 경로에서 발견되면, 프로세싱은 블럭(935)으로 진행하고, 여기서 PIDL 객체에 대한 프로그래밍 구조가 생성되어 PIDL 객체의 정보가 미리 결정된 파일 포맷과 함께 조사(interrogated)될 수 있다. 그 다음, PIDL 객체의 크기는 블럭(940)에서 결정되고, 이로부터 프로세싱은 블럭(945)로 진행하며, 여기서 메모리 블록이 할당되며, PIDL 객체 파일은 할당된 블록에 로딩될 수 있다. 그 다음, PIDL의 내부 심볼들(internal symbol)은 심볼 테이블들(symbol tables) 및 객체 파일로부터 추출된 로딩 어드레스들(load addresses)을 사용하여 블록(950)에서 재배치된다. PIDL이 심볼들을 임포트하는지 여부를 결정하기 위해 블럭(955)에서 검사가 수행된다. 만약 임포트하지 않으면, 프로세싱은 블럭(965)으로 진행한다. 그러나, 임프트된 심볼들이 사용되면, 동적 링커는 임포트된 심볼들의 실제 어드레스들을 분석하기 위해 블럭(960)에서 PIDL_getSymbol 함수를 호출한다. 프로세싱은 호출 프로그램에 대해 PIDL을 식별 하는 처리를 제공하기 위해 블럭(965)으로 진행한다. PIDLOpen 프로시저는 메모리의 PIDL을 로딩하고 심볼 어드레스들을 분석하며 처리를 복귀시킨 후 블럭(970)에서 종료된다.However, at block 920, if a PIDL object is found at a particular path, processing proceeds to block 935, where a programming structure for the PIDL object is generated so that the information of the PIDL object is interrogated with a predetermined file format. Can be The size of the PIDL object is then determined at block 940, from which processing proceeds to block 945, where a block of memory is allocated, and the PIDL object file can be loaded into the allocated block. The internal symbols of the PIDL are then relocated at block 950 using the load addresses extracted from the symbol tables and the object file. A check is performed at block 955 to determine whether the PIDL imports the symbols. If not, processing proceeds to block 965. However, if the imported symbols are used, the dynamic linker calls the PIDL_getSymbol function at block 960 to resolve the actual addresses of the imported symbols. Processing proceeds to block 965 to provide processing to identify the PIDL for the calling program. The PIDLOpen procedure ends at block 970 after loading the PIDL in memory, analyzing the symbol addresses, and returning to processing.

호출 프로그램은 GetPIDLAddress 함수를 호출함으로써 블럭(975)에서 익스포트된 PIDL 심볼들 중 하나에 액세스할 수 있다. 이러한 함수는 동적 링커/로더(예, 도 7의 785)에 제공되고, PIDL에 의해 익스포트된 심볼의 어드레스를 획득하도록 블럭(980)에서 동작하고 이를 호출 프로그램으로 복귀시킨다. 이로부터, 호출 프로그램은 블럭(980)에서 복귀된 어드레스에 대한 포인터를 이용하여, 블럭(985)에서 그 자신의 사용을 위해 PIDL 심볼을 호출할 수 있다.The calling program can access one of the PIDL symbols exported at block 975 by calling the GetPIDLAddress function. This function is provided to a dynamic linker / loader (eg, 785 of FIG. 7) and operates at block 980 to obtain the address of the symbol exported by PIDL and returns it to the calling program. From this, the calling program can use the pointer to the address returned at block 980 to call the PIDL symbol for its own use at block 985.

5. 제한된 환경에서 동적 링킹을 위한 메커니즘(Mechanism For Dynamic Linking In Constrained Environment)5. Mechanism For Dynamic Linking In Constrained Environment

일부 운영 체제들(operating system)은 동적 링킹 능력을 제공하지 못한다. 라이브러리들이 이들 시스템에 사용될 때, 라이브러리들은 정적으로 링킹된다 - 즉, 라이브러리들은 링킹 시기에 실행파일 이진값들에 제한될 수 있다. 실행파일(executable)은 추가의 링킹 없이 실행을 준비할 수 있고, 또한 링킹이 완료된 이후 변하지 않기 때문에 정적일 수 있다. 일반적으로 정적으로 링크된 라이브러리는 제한되는 하부 프로그램들과의 충돌없이(예를 들어, 차단 또는 중단) 변하지 않을 수 있다. 또한, 라이브러리의 데이터 및 루틴들의 어드레스는 프로그램으로 제한되기 때문에, 이러한 어드레스의 변화는 바운드(bound) 프로그램이 불량이되게 할 수 있다.Some operating systems do not provide dynamic linking capabilities. When libraries are used in these systems, libraries are statically linked-that is, libraries can be limited to executable binary values at linking time. The executable can prepare for execution without further linking, and can also be static because it does not change after the linking is complete. In general, a statically linked library may not change without conflict (eg, blocked or interrupted) with restricted subprograms. In addition, since the address of the library's data and routines is limited to programs, this change in address can cause a bound program to become bad.

본 명세서에 개시되는 시스템들 및 방법들은 자연스럽게 동적 실행(execution)을 지지하지 않는 운영 체제에 동적 실행을 제공함으로써 현재 방식의 단점을 개선한다. 도시된 구현예에서, 동적 링킹은 런타임 또는 로드 타임 때까지 링킹을 중단시키는 능력, 또는 정적으로 링킹되지 않은 라이브러리들을 사용하기 위한 실행파일 프로그램에 대한 능력을 고려할 수 있다. 부가적으로, 본 명세서에 개시된 시스템들 및 방법들은 주어진 운영 체제에 의해 자연스럽게 지지되지 않는 이진 객체 포맷들의 링킹을 허용한다.The systems and methods disclosed herein alleviate the drawbacks of the current approach by providing dynamic execution to an operating system that does not naturally support dynamic execution. In the illustrated implementation, dynamic linking may take into account the ability to suspend linking until runtime or load time, or the ability for an executable program to use libraries that are not statically linked. In addition, the systems and methods disclosed herein allow for the linking of binary object formats that are not naturally supported by a given operating system.

도시된 구현예에서, 대형(large) 프로그램은 지원 기능을 제공하는 컴포넌트 라이브러리 세트에 부가하여 메인 애플리케이션으로 분할될 수 있다. 종래 방식에 따라, 전체적인 프로그램은 단일 정적 실행파일로서 제공될 수 있다. 이로써 프로그램에 대한 변화가 요구되는 경우, 전체 새로운 실행파일이 구현되고 분포되어 변형된 버전으로 교체될 수 있다. 반대로, 도시된 구현예에서, 컴포넌트들은 이들이 사용되는 애플리케이션과 독립적으로 공급될 수 있다. 이로써, 애플리케이션은 크기가 보다 작아질 수 있고, 새로운 또는 변형된 애플리케이션이 요구될 경우, 애플리케이션 자체 만이 관련된 라이브러리들의 재건을 요구하지 않고도 재건되도록 요구된다.In the illustrated implementation, large programs can be divided into main applications in addition to a set of component libraries that provide support. According to the conventional approach, the entire program can be provided as a single static executable. This allows a whole new executable to be implemented, distributed and replaced with a modified version if changes to the program are required. In contrast, in the illustrated implementation, the components can be supplied independently of the application in which they are used. As such, the application can be smaller in size, and when a new or modified application is required, only the application itself is required to be rebuilt without requiring rebuilding of related libraries.

반대로, 제공되는 구현예에서, 애플리케이션이 변하지 않고 유지되나 컴포넌트들중 하나는 변하는 경우, 새로운 컴포넌트는 다른 컴포넌트로의 변화 없이 초기(earlier) 버전의 위치로 대체될 수 있다. 반대 버전의 기호 이름은 동일하게 제공되며, 새로운 컴포넌트 버전이 런 타임시 오리지널 애플리케이션 프로그램 및 다 른 컴포넌트에 링킹될 수 있다. 도시된 구현예에서, 동적 링킹은 어드레스 재할당을 고려한다. 기호들이 새로운 컴포넌트 버전에서 상이한 어드레스에 있는 경우, 어드레스들은 런 타임시 결정되고 재위치될 수 있다.Conversely, in the implementation provided, if the application remains unchanged but one of the components changes, the new component can be replaced with an earlier version location without changing to another component. The opposite version of the symbolic name is provided identically, and a new component version can be linked to the original application program and other components at runtime. In the illustrated implementation, dynamic linking considers address reallocation. If the symbols are at different addresses in the new component version, the addresses can be determined and repositioned at run time.

도 10은 동적 실행을 지지하지 않는 컴퓨팅 환경에 PIDL이 분포될 때 수행되는 프로세싱을 나타낸다. 도 10에 도시된 것처럼, 동적 라이브러리로서 런타임 배치를 위한 하나 이상의 라이브러리들 및 메인 애플리케이션으로 프로그램이 분할되는 블록(1000)에서 프로세싱이 시작된다. 그 다음, 라이브러리는 블록(1020)에서 공지된 표준 파일 포맷을 가지는 PIDL 객체 파일로 컴파일될 수 있다. 메인 애플리케이션에 대한 소스 코드는 동적 링커 로더에 대한 소스 코드, 및 블럭(1010)에서 PIDL이 애플리케이션으로부터 심볼들을 임포트하는 경우에 PIDL_getSymbol 함수에 대한 선택적인 소스와 함께, 컴파일될 수 있다. 링커/로더 컴포넌트는 공지된 표준 파일 포맷에서 PIDL 객체 파일들을 해석하도록 미리 초기화됨에 따라 함수를 가지며, 이들을 메모리에 로딩할 수 있고, 라이브러리와 협력 애플리케이션 간에 기호들을 결정하고 재배치시키기 위해 필요한 링킹 동작들을 수행할 수 있다. 10 illustrates processing performed when PIDL is distributed in a computing environment that does not support dynamic execution. As shown in FIG. 10, processing begins at block 1000 where a program is divided into a main library and one or more libraries for runtime deployment as a dynamic library. The library may then be compiled into a PIDL object file having a standard file format known at block 1020. The source code for the main application may be compiled, along with the source code for the dynamic linker loader, and an optional source for the PIDL_getSymbol function in the case where PIDL imports symbols from the application at block 1010. The linker / loader component has functions as it is pre-initialized to interpret PIDL object files in known standard file formats, can load them into memory, and perform the necessary linking operations to determine and rearrange symbols between the library and collaborative applications. can do.

앞서 개시된 블록(1000-1020)에서 수행되는 모든 함수들 및/또는 동작들은, 프로그램이 분포되고 실행되기 이전인, 구현 시간(build-time)에 수행될 수 있다. 자연스럽게 동적 링킹을 지지하지 않는 제한된 환경에서, 구현 실행(built executable)과 외부 라이브러리들 간의 순차적인 협력(co-operation) 또는 상호작용은 일반적으로 달성될 수 없다. 반대로, 도시된 구현예는 런타임시 동적 동작을 제공하기 위해 추가의 블록들(1040-1080)을 제공한다. 구현 실행파일은 블록 (1040)에서 실행이 시작되도록 지시할 수 있으며, 블록(1050)에서 원시(native) 운영 체제의 제어하에 정규적으로 메모리에 로딩될 수 있다. All functions and / or operations performed at blocks 1000-1020 disclosed above may be performed at build-time, before the program is distributed and executed. In limited environments that do not naturally support dynamic linking, sequential co-operation or interaction between built executables and external libraries cannot generally be achieved. In contrast, the illustrated implementation provides additional blocks 1040-1080 to provide dynamic operation at runtime. The implementation executable may direct execution to begin at block 1040, and may be loaded into memory regularly at block 1050 under the control of the native operating system.

실행 프로그램은 PIDL 라이브러리 객체를 개방시키도록 블럭(1060)에서 PIDLOpen을 호출할 수 있다. PIDL 파일은 블럭(1080)에서 호스트 환경에 제공된다. 프로세싱은 블럭(1070)으로 진행하고, 여기서 블럭(1010)에서 프로그램으로 이전에 컴파일된 링커/로더는 PIDL을 로딩하며, 실행 애플리케이션의 메모리 공간에 PIDL 객체를 바인딩하도록 심볼 분석을 수행한다. PIDL에 의해 익스포트된 심볼들은 이전에 기술된 것처럼, 동적 링커/로더에 제공되는 getPIDLAddress 함수에 의해 메인 애플리케이션에 의해 블럭(1090)에서 호출될 수 있다. The executable program may call PIDLOpen at block 1060 to open the PIDL library object. The PIDL file is provided to the host environment at block 1080. Processing proceeds to block 1070 where the linker / loader previously compiled into the program at block 1010 loads the PIDL and performs symbol analysis to bind the PIDL object to the memory space of the executing application. Symbols exported by PIDL may be called at block 1090 by the main application by the getPIDLAddress function provided to the dynamic linker / loader, as described previously.

제한된 환경에서의 동적 링킹 동작이 라이브러리들이 플랫폼 독립(platform independent)인 방식으로 동작하도록 도시되었지만, 이러한 설명은 단지 예시적인 것으로 본 명세서에 개시되는 본 발명의 개념은 플랫폼 종속(platform dependence)을 갖는 라이브러리에 적용될 수 있다.Although dynamic linking operation in a limited environment has been shown to operate in a way that the libraries are platform independent, this description is merely illustrative and the inventive concept disclosed herein is a library with platform dependence. Can be applied to

6. 코드 컴포넌트들 메커니즘(Code Components Mechanism)6. Code Components Mechanism

(예를 들어, 팜OS, 심비안OS와 같은) 모바일 컴퓨터에 사용되는 소정의 운영 체제(OS)은 글로벌 변수 및 정적 기록가능 변수의 사용에 따른 제한을 따른다. 이러한 제한(constraint)은 운영 체제이 글로벌 변수의 어드레스 관리 및 완전한 핸들링 코드 재배치가 방지되도록 제공될 수 있다. 정적 변수는 글로벌 변수로서 메모리의 동일한 세그먼트에 유지되기 때문에, 기록 정적 변수가 운영 체제에 의해 방해될 수 있다. 컴퓨터 프로그램 코드가 상기 운영 체제으로 기록될 때, 상기 제 한을 따르고 호환가능한 코드를 생성할 수 있다. 그러나 라이브러리와 같은 코드 조각(piece)은 이러한 제한없이 상이한 플랫폼에 대해 기록될 수 있고, 상기 코드는 제한된 운영 체제 상에서 구현되거나 심지어 컴파일되는 범위로의 룰 위반을 포함할 수 있다. 이는 써드 파티(third party) 라이브러리를 사용하고 소정의 운영 체제들 상에 코드를 예비-기록하기 위한 능력을 제한하여, 이들의 탄력성을 감소시킨다. 이는 운영 체제 제한을 따르도록 현재 코드를 변형하는데 또는 소정의 경우 스크래치로부터 이를 전체 다시 기록하는데 시간이 소모되기 때문에 덜 생산적인 방안이다.Certain operating systems (OSs) used in mobile computers (eg, Palm OS, Symbian OS) follow restrictions on the use of global and static recordable variables. Such constraints can be provided so that the operating system can prevent address management and complete handling code relocation of global variables. Since static variables are kept in the same segment of memory as global variables, write static variables can be disturbed by the operating system. When computer program code is written to the operating system, it is possible to generate code that complies with the limitations and that is compatible. However, code pieces such as libraries can be written for different platforms without such limitations, and the code can contain rule violations to the extent that they are implemented or even compiled on a limited operating system. This reduces the flexibility of using third party libraries and limits the ability to pre-write code on certain operating systems. This is a less productive approach because it takes time to modify the current code to conform to operating system limitations or in some cases to rewrite it entirely from scratch.

본 명세서에 개시되는 시스템 및 방법들은 운영 체제 제한이 방지되도록 허용한다. 도시된 구현예에서, 소스 코드가 운영 체제의 제한을 위반하는 라이브러리는 컴파일되고 PIDL 포맷으로 구현될 수 있다. PIDL 라이브러리는 애플리케이션 프로그램과 조합되며 제한된 운영 체제 상에서 동작한다. 본 명세서에 개시되는 시스템 및 방법에 따른 신규한 동적 로딩 및 링킹 메커니즘은 PIDL에 대한 메모리 블록을 할당한다. 또한, 본 구현예에서, 글로벌 변수는 PIDL의 메모리 영역 너머의 글로벌로서 처리되지 않는다.The systems and methods disclosed herein allow operating system limitations to be avoided. In the illustrated embodiment, libraries whose source code violates operating system limitations may be compiled and implemented in PIDL format. The PIDL library is combined with an application program and runs on a limited operating system. The novel dynamic loading and linking mechanism in accordance with the systems and methods disclosed herein allocates memory blocks for PIDL. Also, in this embodiment, global variables are not treated as global beyond the memory region of the PIDL.

이로써, 본 구현예에서 라이브러리 내에 정의된 글로벌 변수는 본 메모리 블록 내에서 제한될 수 있으며 글로벌 변수처럼 운영 체제에 나타나지 않는다. 정적 변수들은 할당된 메모리 블록으로 제한될 수 있으며 운영 체제 중재를 따르지 않는다. 이로써 글로벌 및 정적 변수들을 재배치하기 위해 운영 체제의 비활성(inability)이 우회될 수 있다(side-stepping). 본 구현예에서, PIDL 로더/링커는 이들의 기능을 제공하기 위해 라이브러리 변수의 재배치를 수행할 수 있다.As such, global variables defined within a library in this embodiment may be restricted within this memory block and do not appear in the operating system like global variables. Static variables can be limited to allocated blocks of memory and do not follow operating system arbitration. This allows side-stepping of the operating system's inability to relocate global and static variables. In this implementation, the PIDL loader / linker may perform relocation of library variables to provide their functionality.

도 11은 PIDL이 컴퓨팅 환경의 하나 이상의 제한들을 우회(side-step)하도록, PIDL을 처리하기 위해 제한된 컴퓨팅 환경에 의해 수행되는 프로세싱을 나타낸다. 도 11에 도시된 것처럼, 코드가 운영 체제에 의해 부과된 하나 이상의 제한들을 위반하는 라이브러리로부터 PIDL가 생성되는 블록(1100)에서 프로세싱이 시작된다. 블록(1110)에서, 라이브러리와 함께 상호 동작하는 컴퓨팅 애플리케이션은 동적 링커 로더, 및 PIDL이 애플리케이션으로부터 심볼들을 임포트하는 경우에 PIDL_getSymbol 함수에 대한 선택적인 소스 코드와 함께 컴파일 및 형성될 수 있다. 11 illustrates processing performed by a restricted computing environment to process PIDL such that PIDL side-steps one or more limitations of the computing environment. As shown in FIG. 11, processing begins at block 1100 where a PIDL is generated from a library whose code violates one or more restrictions imposed by the operating system. At block 1110, the computing application that interacts with the library may be compiled and formed with a dynamic linker loader, and optional source code for the PIDL_getSymbol function when PIDL imports symbols from the application.

도시된 구현예에서, 애플리케이션 프로그램을 실행하는 명령어는 블록(1120)에서 수신될 수 있다. 실행파일은 블록(1130)에서 호스트 컴퓨팅 환경에 의해 정규적으로 로딩될 수 있다. 실행 프로그램은 PIDL 라이브러리 객체를 개방시키도록 블럭(1140)에서 PIDLOpen을 호출할 수 있다. PIDL은 블럭(1180)에서 컴퓨팅 환경에 의한 사용을 위해 제공될 수 있다. PIDLOpen 호출에 응답하여, 동적 링커/로더(블럭(1110)에서 프로그램으로 구현됨)는 블록(1150)에서 메모리 블록을 할당할 수 있으며, 할당된 블록에 PIDL를 로딩할 수 있다. 블록(1176)에 도시된 것처럼, 라이브러리에 정의된 글로벌 및 기록 정적 변수들은 할당된 메모리 블록으로 제한된 범주를 가지며, 상기 메모리 블록 넘어서부터 네임(name)에 의해 액세스될 수 없다. 이는 이들이 할당된 메모리 블록내에도 존재할 수 있기 때문에 라이브러리 함수 모두를 이용할 수 있어, 라이브러리는 종래의 동작 환경하에 부과된 제한들을 위반하더라도 컴퓨팅 환경에서 정확히 작동할 수 있다. PIDL에 의해 익스포트된 심볼들은 이전에 기술된 것처럼, 동적 링커/로더에 제공되는 getPIDLAddress 함수에 의해 블럭(1170)에서 메인 애플리케이션에 의해 호출될 수 있다.In the implementation shown, instructions for executing an application program may be received at block 1120. The executable file can be regularly loaded by the host computing environment at block 1130. The executable program may call PIDLOpen at block 1140 to open the PIDL library object. The PIDL may be provided for use by the computing environment at block 1180. In response to the PIDLOpen call, the dynamic linker / loader (implemented programmatically in block 1110) may allocate a block of memory at block 1150 and load the PIDL into the allocated block. As shown in block 1176, global and write static variables defined in the library have a category limited to allocated memory blocks and cannot be accessed by name from beyond the memory block. It can utilize all of the library functions because they can also exist in the allocated memory block, so that the library can operate correctly in a computing environment even if it violates the restrictions imposed under conventional operating environments. Symbols exported by PIDL may be called by the main application at block 1170 by the getPIDLAddress function provided to the dynamic linker / loader, as described previously.

라이브러리들이 플랫폼 독립인 방식으로 코드 컴포넌트 피쳐(feature)가 동작하도록 도시되었지만, 상기 설명은 단지 예시적인 것으로 본 명세서에 개시된 본 발명의 개념은 플랫폼 종속을 가지는 라이브러리에 적용될 수 있다.Although libraries are shown to operate code component features in a platform independent manner, the above description is illustrative only and the inventive concepts disclosed herein may be applied to libraries having platform dependencies.

7. 코드 로딩 메커니즘(Code Loading Mechanism)7. Code Loading Mechanism

종래의 소프트웨어 개선에 따라, 객체 지향 방안이 채택될 수 있다. 특정한 업무(task)를 수행하기 위해 함수를 호출하기 보다는, 객체가 생성되고 객체의 방법이 원하는 업무를 수행하도록 호출될 수 있다. 이러한 방안은 몇 개의 객체가 생성될 수 있어 바람직할 수 있으며, 몇 가지 업무들이 동시적으로 달성될 수 있다. 연산 업무의 다중 인스턴스를 실행하는데 있어 바람직한 다양한 상황이 제공된다. 예를 들어, 문서(document) 내에 무비 클립(movie clip)을 상연하고 표현하기 위해 라이브러리가 존재하게 된다. 문서가 2개의 무비 클립을 포함할 때, 공통 코드 객체의 2개의 인스턴스를 작동시킴으로써, 무비 클립들이 동시에 상연되는 것이 보편적이다. 객체 지향 방안이 없을 경우, 개발자는 객체가 업무를 연속적으로 수행하는 상황을 직면하게 될 수 있으나, 몇 개의 동일한 객체들을 동시적으로 실행하게 허용하는 것에는 어려움이 있다. In accordance with conventional software improvements, object-oriented approaches may be adopted. Rather than calling a function to perform a particular task, an object may be created and the method of the object may be called to perform the desired task. This approach may be desirable because several objects may be created, and several tasks may be accomplished simultaneously. There are a variety of situations that are desirable for running multiple instances of a computing task. For example, libraries exist to present and represent movie clips within a document. When a document contains two movie clips, it is common for movie clips to be staged simultaneously by actuating two instances of a common code object. In the absence of an object-oriented approach, a developer may be faced with a situation in which an object performs tasks continuously, but it is difficult to allow several identical objects to run concurrently.

개발자(developer)는 객체 지향 스타일로 기록되도록 선택할 수 있지만, 이러한 선택은 써드 파티 코드를 통합할 때 무효처리될 수 있다. 특히 라이브러리로 서 배치된 코드에 적용시, 라이브러리는 데이터를 조정하며 상기 데이터에는 액세스 기능이 포함된다. 도시된 실시예에서, 비 객체-지향 코드는 글로벌 변수, 및 정적 변수의 1회 초기화(one time initialization)를 이용할 수 있다. 이와 관련하여, 컴퓨팅 환경에서, 컴퓨팅 환경이 동일한 프로세스 내의 라이브러리 객체의 1번 이상의 호출(invocation)을 실행하는 것이 방지되며, 이는 단일의 프로세스가 모듈 또는 라이브러리에 의해 사용되는 한 세트의 데이터만을 유지할 수 있기 때문이다. 특히, 동일한 객체의 2번의 호출은 명명된(named) 글로벌 변수들의 사용을 공유함으로써 서로 격렬히 상호작용할 수 있다. 선택적으로, 라이브러리는 1회 실행될 수 있는 방식으로 기록될 수 있으나, 실행이 완료될 때는, 2번째 실행을 위한 시도가 실패되며, 이는 정적으로 초기화된 변수가 필수 초기값을 더이상 가지지 않기 때문이다. 이는 정적 변수가 컴파일러(compiler)에 의해 런타임시에는 그렇지 않지만 구현시기(build time)에 초기화되기 때문이며, 초기화된 변수가 실행 동안 변할 경우, 순차적 실행은 변경된 값을 유지하여 적절한 동작을 위해 필요한 초기화된 값과 상이한 값으로 개시된다.Developers can choose to be written in an object-oriented style, but this choice can be overridden when integrating third-party code. In particular, when applied to code placed as a library, the library manipulates the data and the data includes an access function. In the illustrated embodiment, non-object-oriented code may use one time initialization of global variables and static variables. In this regard, in a computing environment, the computing environment is prevented from executing more than one invocation of a library object in the same process, which can only maintain a set of data used by a single process or module or library. Because there is. In particular, two calls of the same object can interact violently with each other by sharing the use of named global variables. Optionally, the library can be written in such a way that it can be executed once, but when execution is complete, the attempt for the second execution will fail because the statically initialized variable no longer has the required initial value. This is because static variables are initialized at build time by the compiler, but not at run time, and if initialized variables change during execution, sequential execution maintains the changed values and is initialized as necessary for proper operation. Start with a value different from the value.

본 명세서에 개시된 시스템 및 방법은 앞서 개시된 PIDL 로딩 메커니즘을 제공함으로써 상기 문제점들을 해결하는 것을 목적으로 한다. 프로세스 내에서 단일의 데이터 세트를 사용하는 제한이, 제한된 메모리 블록 내에서 데이터의 자체 '사적(private)' 복제를 이용하기 위해 PIDL의 다중 인스턴스(multiple instance)를 허용함으로써 제거되어, 종래의 방식에서의 기능불량을 야기하는 상호작용 및 충돌이 회피된다. 상기 방법은 동일한 프로세스에서도 다중 인스턴스 및 반복 실행을 허용한다. 다중 프로세스를 허용하지 않는 환경에서의 다중의 동시적 실행 가능성이 개시되었다. 도시된 구현예에서, PIDL은 동적하게 할당된 버퍼 내에서 어드레스로서 글로벌 변수를 처리한다. 싱글 PIDL은 다수번 로딩될 수 있고, 각각의 사본(copy)은 글로벌 변수들의 자체 개별적이고 독립적인 사본들을 가질 수 있어, 문제성 상호작용이 방지된다. 유사하게, 라이브러리가 실행되는 각각의 시기에, 사본이 파일로부터 로딩되어 정적 변수의 정확히 초기화된 값을 포함하게 된다.The system and method disclosed herein aim to solve the above problems by providing the PIDL loading mechanism disclosed above. The limitation of using a single data set within a process is removed by allowing multiple instances of PIDL to take advantage of its own 'private' copying of data within a limited memory block, Interactions and collisions that cause malfunctions of are avoided. The method allows for multiple instances and repeated executions in the same process. Disclosed is the possibility of multiple concurrent executions in an environment that does not allow multiple processes. In the illustrated embodiment, the PIDL treats the global variable as an address in a dynamically allocated buffer. A single PIDL can be loaded multiple times and each copy can have its own individual and independent copies of global variables, thus preventing problematic interactions. Similarly, each time the library is run, a copy is loaded from the file to contain the correctly initialized values of the static variables.

도 12는 예시적인 컴퓨팅 환경에 의해 수행되는 프로세싱을 나타내며, 도시된 구현예에서, PIDL을 처리할 때 PIDL은 제한된 코드 컴포넌트의 문제성 상호작용을 방지하도록 이용될 수 있다. 코드가 반복 수행을 방지하는 하나 이상의 제한들을 위반하는 라이브러리로부터 PIDL가 생성될 수 있는 블록(1200)에서 프로세싱이 시작된다. 블럭(1210)에서, 라이브러리와 상호 동작하는 컴퓨팅 애플리케이션은 동적 링커 로더 및 선택적인 PIDL_getSymbol 소스 함수와 함께 컴파일 및 형성될 수 있다.12 illustrates processing performed by an example computing environment, and in the illustrated implementation, PIDL may be used to prevent problematic interaction of restricted code components when processing PIDL. Processing begins at block 1200 where a PIDL can be generated from a library that violates one or more restrictions that prevent code from repeating. At block 1210, a computing application that interacts with the library may be compiled and formed with a dynamic linker loader and an optional PIDL_getSymbol source function.

예시적인 구현예에서, 애플리케이션 프로그램을 실행하는 명령어가 블록(1220)에서 수신될 수 있다. 실행파일(executable)은 블록(1230)에서 호스트 컴퓨팅 환경에 의해 로딩될 수 있다. 실행 프로그램은 PIDL 라이브러리 객체를 개방시키도록 블럭(1240)에서 PIDLOpen을 호출할 수 있다. PIDL은 블럭(1280)에서 컴퓨팅 환경에 의해 사용되기 위해 제공될 수 있다. PIDLOpen 호출에 응답하여, 동적 링커/로더(블록(1110)에서 프로그램으로 구현됨)는 PIDL 객체를 로딩하고 블럭(1250)에서 상호동작하는 애플리케이션으로 객체 처리를 복귀시킨다. 그 다음, PIDL의 새로운 인스턴스가 컴퓨팅 환경에 로딩되었는지를 검출하는 검사가 블록(1260)에서 수행될 수 있다. 블록(1260)에서의 검사가 PIDL의 새로운 인스턴스가 로딩되었다고 나타내면, PIDL의 새로운 인스턴스가 개별(distinct) 메모리 블록에 로딩되고 컴퓨터 프로그램에 링킹되는 블록(1270)으로 프로세싱이 진행될 수 있다. 블럭(1270)에서 나타낸 것처럼, PIDL의 각각의 개별 인스턴스가 개별 처리에 의해 식별되고, 각각이 개별적으로 및 독립적으로 액세스되도록 허용한다. 그러나 블록(1260)에서 PIDL의 새로운 인스턴스가 로딩되지 않았다고 검출되면, 프로세싱은 블록(1260)의 입력으로 복귀되어 그곳에서부터 프로세싱이 진행된다.In an example implementation, instructions for executing an application program may be received at block 1220. The executable may be loaded by the host computing environment at block 1230. The executable program may call PIDLOpen at block 1240 to open the PIDL library object. The PIDL may be provided for use by the computing environment at block 1280. In response to the PIDLOpen call, the dynamic linker / loader (implemented programmatically at block 1110) loads the PIDL object and returns object processing to the interacting application at block 1250. A check can then be performed at block 1260 to detect whether a new instance of PIDL has been loaded into the computing environment. If the check at block 1260 indicates that a new instance of PIDL has been loaded, processing may proceed to block 1270 where the new instance of PIDL is loaded into a separate memory block and linked to a computer program. As shown at block 1270, each individual instance of the PIDL is identified by a separate process, allowing each to be accessed individually and independently. However, if at block 1260 it is detected that a new instance of PIDL has not been loaded, processing returns to the input of block 1260 and processing from there.

라이브러리들이 플랫폼 독립인 방식으로 코드 로딩 특성이 동작하는 것으로 도시되었지만, 이러한 설명은 단지 예시적인 것으로 본 발명에 개시되는 본 발명의 개념은 플랫폼 종속을 가지는 라이브러리에도 적용될 수 있다.While the libraries are shown to operate with the code loading feature in a platform independent manner, this description is illustrative only and the inventive concept disclosed herein may also be applied to libraries having platform dependencies.

8. 폐쇄 또는 제한 플랫폼에 대한 연장가능한 런 타임 환경(Extensible Run Time Environment for Closed or Constrained Platforms)8. Extensible Run Time Environment for Closed or Constrained Platforms

일부 컴퓨팅 장치들은 폐쇄 컴퓨팅 환경에서 동작하여, 상기 장치들은 장치 제조자 또는 공급자로부터 상기 장치가 탑재될 때 제공되는 장치들의 프로그램 만을 실행시킬 수 있다. 이러한 장치(예를 들어, 모바일 무선 장치)는 상주 프로그램을 호스트하는 운영 체제에 포함될 수 있으나, 애플리케이션이 호스트 운영 체제에 대해 생성되더라도 다른 애플리케이션들은 제한없이 부가될 수 없다. 이러한 폐쇄 플랫폼의 예는 음성 이외에 (카메라 기능과 같은) 고정된 특성 세트가 제공되는 특성화폰(Feature Phone)으로 공지된 모바일 핸드셋의 큰 카테고리이이나, 이들 특성은 고정되며 사용자에 의해 확대될 수 없다. 상기 장치는 기능을 부가하기 위한 컴퓨팅 플랫폼의 비활성 또는 제한으로 인해 후속-시장(after-market) 애플리케이션에 종결된다(closed).Some computing devices operate in a closed computing environment such that the devices can only execute a program of devices provided when the device is mounted from a device manufacturer or supplier. Such a device (eg, mobile wireless device) may be included in the operating system hosting the resident program, but other applications may not be added without limitation even if the application is created for the host operating system. An example of such a closed platform is a large category of mobile handsets known as feature phones in which a fixed set of features (such as camera functionality) is provided in addition to voice, but these features are fixed and cannot be extended by the user. The device is closed to after-market applications due to inactivity or limitation of the computing platform to add functionality.

반대로, 개방형 컴퓨팅 플랫폼은 운영 체제에 대해 기록된 애플리케이션들이 일상 생활에서 실행되고 부가되도록 허용한다. MICROSOFT

Figure 112007035348161-PCT00001
WINDOWS
Figure 112007035348161-PCT00002
플랫폼은 퍼스널 컴퓨터에 대한 개방형 플랫폼의 일례로 간주될 수 있다. 모바일 핸드셋의 분야에서, 개방형 플랫폼의 등가 카테고리는 장치에서 실행하는데 있어 제한 없이 애플리케이션들을 부가하기 위한 환경을 제공하는 스마트폰으로 공지된다. 스파트폰 플랫폼의 예로는 마이크로소프트
Figure 112007035348161-PCT00003
스마트폰, 심비안 UIQ 및 리룩스를 포함한다.In contrast, open computing platforms allow applications written for an operating system to be executed and added to everyday life. MICROSOFT
Figure 112007035348161-PCT00001
WINDOWS
Figure 112007035348161-PCT00002
The platform can be considered an example of an open platform for personal computers. In the field of mobile handsets, the equivalent category of open platforms is known as smartphones that provide an environment for adding applications without limitation in running on a device. An example of a spatphone platform is Microsoft
Figure 112007035348161-PCT00003
Smartphones, Symbian UIQ and Relux.

런타임 환경(Run Time Environment, RTE)이 장착된 특성화폰은 모바일 헤드셋의 제 3 카테로리로 존재한다. 이러한 런타임 환경의 예로는 자바 J2ME(자바 2 마이크로 에디션) 및 BREW(무선용 이진 런타임 환경) 환경들을 포함한다. RTE는 핸드셋이 RTE에 대해 생성된 애플리케이션 형태의 새로운 기능- J2ME의 경우 자바 애플릿(Java applet), 및 Brew 환경일 경우 Brew 입증 애플리케이션 -을 부가하도록 허용한다. 이들 애플리케이션은 개방형 플랫폼에서 작동하는 것과는 상이하며, 이는 애플리케이션들이 스마트폰에서처럼 원시(native) OS에 대해서가 아니라 RTE에 대해 구현된다(예를 들어, 소정의 인스턴스에서 적절한 동작을 위해 RTE에 의해 입증된다). 이러한 RTE-이네이블 특성화폰이 스마트폰에 비해 일부 기술적 원인으로 인한 제한점들을 갖지며 다른 제한들도 상업적으로 유발될 수 있다.Characterized phones equipped with a Run Time Environment (RTE) exist as a third category of mobile headsets. Examples of such runtime environments include Java J2ME (Java 2 Micro Edition) and BREW (Wireless Binary Runtime Environment) environments. The RTE allows the handset to add new features in the form of applications created for the RTE-Java applets for J2ME, and Brew-proven applications in the Brew environment. These applications are different from those running on open platforms, where the applications are implemented for the RTE rather than for the native OS as in a smartphone (eg, as evidenced by the RTE for proper operation in a given instance). ). These RTE-enabled specialty phones have limitations due to some technical causes compared to smartphones, and other restrictions can also be caused commercially.

예를 들어, 하드웨어 장치 제조자, 네트워크 운용자, 또는 RTE 벤더(vendor)는 이들의 특정 하드웨어 장치에 대한 애플리케이션 및/또는 애플리케이션에 대한 업데이트를 제공하기 위하여 애플리케이션 제공자들과 독점 또는 반독점적인 합의를 할 수 있다. 일반적으로, RTE상에서 실행되는 애플리케이션들은 전체 장치 기능과 인터페이싱하도록 이들의 능력이 제한된다. 예를 들어, 네트워크 스택의 제어 또는 장치상에 있는 저장 주변장치의 제어를 가능하게 하는 API(application programming interface)는 RTE로부터 액세스할 수 없을 수도 있다. 이는 때로는 본래의 입력 환경내에서 그 자신의 "샌드박스(sandbox)"안에서 동작하는 RTE라고 기술된다. 비교하면, 개방 플랫폼(가령, 스마트폰)에서는 각각의 실행파일(executable)은 그 자신의 프로세스내에서 실행될 수 있고, 일반적으로, 이러한 개방 플랫폼들의 운영 체제는 장치 기능 모두를 각각의 실행중인 프로세스에 노출시킬 수 있다. 또한, 일부 환경(브루(Brew)는 일예임)은 네트워크를 통해서만 RTE 애플리케이션이 부가될 수 있도록 하고, 애플리케이션이 저장 카드를 이용해서 디바이스에 로드되는 것을 방지한다. 이는 네트워크를 통해 로딩하는 데 큰 대역폭과 시간을 요하는 대용량 게임과 같은 대용량 애플리케이션을 로딩할 때 문제가 될 수 있다.For example, a hardware device manufacturer, network operator, or RTE vendor may have an exclusive or antitrust agreement with application providers to provide an application and / or an update to an application for their particular hardware device. . In general, applications running on an RTE are limited in their ability to interface with full device functionality. For example, an application programming interface (API) that enables control of the network stack or control of storage peripherals on the device may not be accessible from the RTE. This is sometimes described as an RTE that operates in its own "sandbox" within the original input environment. In comparison, on an open platform (eg, a smartphone), each executable can be run in its own process, and in general, the operating systems of these open platforms are capable of transferring all of the device functionality to each running process. May be exposed. In addition, some environments (Brew is one example) allow RTE applications to be added only over the network and prevent applications from being loaded into the device using a storage card. This can be a problem when loading large applications, such as large games that require large bandwidth and time to load over the network.

본원에 기재된 시스템 및 방법은 폐쇄형 플랫폼에 기능을 추가하는 수단을 제공함으로써 기존 실무상의 결점을 개선한다. 설명된 구현예에 있어서, 부가된 기능은 PIDL로 하드웨어 장치에 제공된다. 폐쇄형 플랫폼은, PIDL과 상호 협동하는 애플리케이션과 함께, 전술된 동적 링커(linker)/로더(loader) 및 PIDL 스터브 (stub) 파일을 포함하는 "런처(launcher)" 프로그램을 포함하도록 생성될 수 있다. 런처 프로그램은 폐쇄형 장치내에 호스트 운영 체제용으로 작성되고 이 시스템상에서 실행될 수 있으며, 쉽핑(shipping)시에 장치내에 상주할 수 있다. 런처 애플리케이션 플러스 PIDL 라이브러리의 조합은, 비록 새로운 기능이 다음과 같이 장치가 쉽핑될 때 존재하지 않더라도 이러한 기능이 폐쇄형 장치에서 동작할 수 있게 해주는 역할을 한다. 런타임에서, PIDL은 장치에 이용할 수 있도록 형성될 수 있고 런처 애플리케이션이 시작된다. 런처 애플리케이션내의 동적 링커/로더는, 스터브 파일로부터의 정보를 이용하여, PIDL을 하드웨어 장치에 상주하며 상기 장치의 OS상에서 실행되고 있는 협동 런처 프로그램(cooperating launcher program)에 로드, 링크, 및 바인딩(binding)하도록 기능할 수 있다. 후속적으로, 동적 링커/로더에 제공되는 GetPIDLAddress 함수에 의해, PIDL의 모든 기능은 장치내의 실행중인 프로그램에 노출될 수 있으므로, 폐쇄형 장치상에서 이용가능한 새로운 기능을 만들게 되는 원하는 결과를 얻는다. 이러한 관점에서, PIDL은 부여된 하드웨어 장치들의 제약을 회피하여, (전술한 것처럼) 동적 실행을 행하도록 작동한다.The systems and methods described herein ameliorate existing practical shortcomings by providing a means to add functionality to a closed platform. In the described embodiment, the added functionality is provided to the hardware device in PIDL. The closed platform may be created to include a "launcher" program that includes the above-described dynamic linker / loader and PIDL stub files, along with applications that cooperate with PIDL. . The launcher program may be written for a host operating system in a closed device and executed on the system, and may reside in the device at the time of shipping. The combination of the Launcher Application Plus PIDL library allows these features to work on closed devices, even though new features do not exist when the device is shipped as follows. At run time, the PIDL can be made available to the device and the launcher application started. The dynamic linker / loader in the launcher application uses information from the stub file to load, link, and bind PIDL to a cooperating launcher program that resides on the hardware device and is running on the OS of the device. Function). Subsequently, with the GetPIDLAddress function provided to the dynamic linker / loader, all of the functionality of PIDL can be exposed to the running program in the device, thus obtaining the desired result which makes the new function available on the closed device. In this regard, PIDL operates to do dynamic execution (as described above), avoiding the constraints of given hardware devices.

"런처 애플리케이션"은 그 자체로 한 쌍의 기능을 제공할 수 있고 그 동작에 대하여 PIDL의 존재에 의존하지 않음이 이해될 것이다. 유사하게, 동일한 런처 애플리케이션은 매우 많은 서로 다른 유형의 새로운 기능을 가능하게 할 수 있고, 이들 각각은 그 스터브가 런처 애플리케이션과 일치하는 개별 PIDL 라이브러리에 제공된다. 이러한 설명된 구현예를 이용하여, 변경된 기능이 동적으로 부가된 일 유형의 런타임 환경을 시뮬레이션할 수 있다.It will be appreciated that a "launcher application" may itself provide a pair of functionality and does not depend on the presence of a PIDL for its operation. Similarly, the same launcher application can enable so many different types of new features, each of which is provided in a separate PIDL library whose stubs match the launcher application. Using this described implementation, one type of runtime environment can be simulated with dynamically added modified functionality.

예시적인 방식으로, 런처 애플리케이션은 소프트웨어 게임콘솔 및 하나 이상의 게임들을 포함할 수 있다. 추가적인 게임들이 각각의 서로 다른 게임에 대해 하나의 PIDL씩 PIDL 라이브러리의 형태로 부가될 수 있고, 각 게임은 PIDL이 장치에 다운로드될 때 런처 애플리케이션을 통해 플레이할 수 있다. 대안으로, 런처 애플리케이션은 SMS와 같은 기본적인 메시징 기능들을 제공할 수 있다. 추가적인 기능, 가령 이메일 또는 멀티미디어 메시징; 비디오 및 오디오 플레이어; 브라우징 기능; 파일 뷰어; 포토 앨범; PIM(personal information management); 및 기타 유형의 기능이 런처와 상호 동작하는 PIDL 라이브러리로써 장치에 배치될 수 있다.In an exemplary manner, the launcher application may include a software game console and one or more games. Additional games can be added in the form of a PIDL library, one PIDL for each different game, and each game can be played through the launcher application when the PIDL is downloaded to the device. Alternatively, the launcher application may provide basic messaging functions such as SMS. Additional functions such as email or multimedia messaging; Video and audio players; Browsing function; File viewer; Photo albums; Personal information management (PIM); And other types of functions can be deployed in the device as a PIDL library that interacts with the launcher.

다른 예시적인 구현예에서, 폐쇄형 장치는 하나 이상의 "런처" 애플리케이션들로 쉽핑(shipping)될 수 있고, 이들 애플리케이션 각각은 특정 쌍의 PIDL 라이브러리들을 인식하도록 제작된다. 이러한 방식으로, 애드-온(add-on) 기능의 범위는 현저한 방식으로 확장되고 조직될 수 있다.In another example implementation, a closed device can be shipped with one or more "launcher" applications, each of which is designed to recognize a particular pair of PIDL libraries. In this way, the scope of add-on functionality can be extended and organized in a remarkable manner.

본원에 기재된 방법 및 시스템은 원래 폐쇄형 플랫폼인 플랫폼상에서 이용될 때 현존하는 프랙티스를 극복한다. 애프터 마켓(after-market) 솔루션을 제공할 가능성은, 장치 사용자에 대하여 보다 큰 기능을 제공할 수 있고, 장치 또는 네트워크 제공자에 대하여 증가된 수익 기회를 제공할 수 있다. 본 방법은 기능을 실행파일(executable)(가령, PIDL 라이브러리들은 실행가능한 프로그램이 아닌, 데이터로써 존재할 수 있다)로 부가하는 것을 포함하지 않기 때문에, 플랫폼이 장치 운영 체제에 대하여 실행파일로 생성된 통상의 애플리케이션에 대해 폐쇄된 채로 유지된 이후에 플랫폼의 "폐쇄성(closed-ness)"이 제어될 수 있다. 장치 제공자는 미리 제공될 부가적인 기능의 범위를 결정할 수 있는데, 이는 PIDL 스터브가 런처에 컴파일되는 유일한 이러한 기능들은 동작가능할 것이기 때문이다. 귀결되는 것은 동적 안전성 및 상업적 제어의 집합일 수 있다.The methods and systems described herein overcome existing practices when used on platforms that are originally closed platforms. The possibility of providing an after-market solution can provide greater functionality for device users and provide increased revenue opportunities for device or network providers. Since the method does not involve adding functionality as an executable (eg, PIDL libraries can be present as data, rather than executable programs), the platform typically creates an executable for the device operating system. The "closed-ness" of the platform can be controlled after being kept closed for the application of. The device provider can determine the range of additional functions to be provided in advance, since only those functions for which the PIDL stub is compiled into the launcher will be operable. What may result is a set of dynamic safety and commercial controls.

예시적인 구현예에서, PIDL은 무선 또는 유선 네트워크를 통한 다운로드 방식, 테서드 피시(tethered pc)로부터의 데이터 전달 방식, 및 장치에 삽입된 저장 카드에 의한 방식을 포함하는 여러 방식으로 장치에 제공될 수 있다. 함수를 실행가능한 애플리케이션이 아닌 PIDL 객체로써 로딩하는 것의 또 다른 독특한 특징은 PIDL이 디지털 저작권 관리(DRM) 기법에 의해 보호될 수 있다는 것이다. 데이터 파일로써의 PIDL은 실행가능한 프로그램과는 달리 DRM 기법에 적응될 수 있다. 이와 같은 훌륭하게 설정된 안전 설계는 상업적 거래시에 기능을 부가할 때 운영자 및 사용자 모두에게 유연성과 신뢰를 준다.In an example implementation, the PIDL may be provided to the device in a number of ways, including by way of download over a wireless or wired network, by way of data transfer from a tethered pc, and by a storage card inserted into the device. Can be. Another unique feature of loading functions as PIDL objects rather than executable applications is that PIDL can be protected by digital rights management (DRM) techniques. PIDL as a data file can be adapted to the DRM technique, unlike executable programs. This well-established safety design gives both operators and users flexibility and confidence when adding functionality to commercial transactions.

전술한 것과 같이 PIDL 객체의 플랫폼과는 독립된 특성 및 링크 설계와 결합될 때, 장치 제조자 또는 네트워크 제공자는, 이러한 장치들이 서로 다른 호스트 플랫폼이나 운영 체제을 사용할 때조차, 장치의 전체 범위에 걸쳐 하나의 PIDL 객체로 애드-온 기능을 제공할 수 있다. 애플리케이션이나 라이브러리를 각각의 서로 다른 플랫폼에 대해 맞춤화할 필요를 회피하고 모든 플랫폼들에 대해 동일하게 작동하는 플랫폼에 독립된 동적 라이브러리(PIDL)를 간단히 제공함으로써, 운영자는 규모의 경제 및 효율성을 실현하도록 위치될 수 있다.When combined with platform-independent characteristics and link design of PIDL objects, as described above, a device manufacturer or network provider may use a single PIDL across the full range of devices, even when these devices use different host platforms or operating systems. You can provide add-on functionality to objects. By avoiding the need to customize an application or library for each different platform and simply providing a platform-independent dynamic library (PIDL) that works the same for all platforms, operators are positioned to realize economies of scale and efficiency. Can be.

상기에서 폐쇄형 플랫폼(가령 기능폰; feature phone)을 참조하여 기재된 동일한 방법 및 시스템이, 런타임 환경을 지원하는 플랫폼(가령, 자바 또는 브루 (Brew))에도 사용될 수 있다. 이러한 배열은 장치가 기능을 부가하는 두 가지 방식을 제공한다 - 이는 소비하기 위한 애플릿 또는 인증된 애플리케이션을 RTE에 의해 다운로드하는 종래의 방식과, 장치에 상주하는 런쳐 애플리케이션의 제어하에서 PIDL 라이브러리로써 함수를 로딩하는 대안의 구현예이다.The same methods and systems described above with reference to closed platforms (eg, feature phones) can be used for platforms that support runtime environments (eg, Java or Brew). This arrangement provides two ways for the device to add functionality-the traditional way of downloading an applet or authenticated application for consumption by the RTE, and the function as a PIDL library under the control of the launcher application residing on the device. An alternative implementation of loading.

각자를 비교하면, PIDL 기반의 설계는 종래의 런타임 환경에서는 제공되지 않을 수 있는 부가된 특징들을 제공할 수 있다. 달리 말하면, 여러 함수들이, 이들이 하나의 런처 애플리케이션내에 개별 PIDL로써 배치될 때, 동시에 실행될 수 있다. 이러한 관점에서, PIDL 구현을 이용하여, PIDL 함수들은 공통의 런처 프로세스하에서 실행될 수 있고, 이처럼 동시에 이용될 수 있다. 부가적으로, PIDL 로딩 접근법을 이용하면, 어떤 런타임 환경(가령, 브루)하에서는 허용되지 않는 저장 카드로부터 로딩하는 것을 포함하는, 기능을 장치로 로딩하는 수단에서의 보다 큰 유연성이 존재할 수 있다. DRM의 관점에서, 실행가능 애플리케이션 또는 애플릿을 런타임 환경에 배치할 때 가능하지 않을 수 있는 기법인 DRM은 PIDL 데이터 라이브러리를 배치할 때 실현될 수 있다. 또한, 원한다면, 장치 또는 네트워크 제공자는 부가될 수 있는 기능을 장치에 쉽핑하는 런처 애플리케이션에 의해 인식되는 기능만으로 제한할 수도 있다.In comparison, PIDL-based designs can provide added features that may not be provided in conventional runtime environments. In other words, several functions can be executed simultaneously when they are deployed as separate PIDLs in one launcher application. In this regard, using a PIDL implementation, PIDL functions can be executed under a common launcher process, and thus used simultaneously. Additionally, using the PIDL loading approach, there may be greater flexibility in the means of loading functionality into the device, including loading from storage cards that are not allowed under certain runtime environments (eg, brews). In terms of DRM, DRM, a technique that may not be possible when deploying an executable application or applet to a runtime environment, can be realized when deploying a PIDL data library. Also, if desired, the device or network provider may limit the functions that may be added to only those functions recognized by the launcher application that ships to the device.

제조시에 런처가 포함되는 엄격히 폐쇄된 환경과는 달리, 런타임 환경(RTE)을 구비한 장치는 런처 애플리케이션을 애프터 마켓 절차로써 다운로드하는 능력을 이용할 수 있다. 이러한 방식으로 배치될 때, 전술한 동적 라이브러리(DL) 기반의 설계는 RTE와 함께 존재할 수 있지만, RTE 그 자체로는 제공할 수 없는 전술한 이 점을 제공한다. 특히, DL 라이브러리는 RTE를 통해 액세스할 수 없는 APIs(가령 저장 카드)와 장치 기능에 액세스할 수 있다. 따라서, 이러한 설계를 이용하여, 런처 애플리케이션은 예시적인 통신 네트워크를 통하여 장치 RTE에 다운로드될 수 있고, 런처는 저장 카드와 같은 다른 수단에 의해 부가될 추가적인 기능을 허용하도록 프록시로 작용한다. 유사하게, RTE는 종종 애플리케이션들이 RTE하에서 실행되도록 최대 크기를 부여할 수 있다. 이 최대 크기는, 그 자체는 작고 선택된 크기 제한 내에 있으나, 그 제한을 초과하는 함수 코드를 DL 라이브러리들에 부가하는 런처 애플리케이션을 다운로드함으로써, 보다 큰 프로그램이 장치에 배치될 수 있도록 우회될 수 있다. DL 라이브러리들은 RTE 애플리케이션으로서가 아닌, 이진 데이터 객체로서 로드되기 때문에, RTE 크기 제한은 이들에 적용되지 않는다.Unlike a strictly closed environment where the launcher is included in manufacturing, a device with a runtime environment (RTE) can take advantage of the ability to download the launcher application as an aftermarket procedure. When deployed in this manner, the above-described dynamic library (DL) based design may exist with the RTE, but provides the aforementioned advantages that the RTE itself cannot provide. In particular, the DL library can access APIs (such as storage cards) and device functions that are not accessible through the RTE. Thus, using this design, the launcher application can be downloaded to the device RTE via the example communication network, and the launcher acts as a proxy to allow additional functionality to be added by other means such as a storage card. Similarly, an RTE can often give the maximum size for applications to run under the RTE. This maximum size can be bypassed so that a larger program can be placed on the device by downloading a launcher application that itself is small and within the selected size limit, but which adds function code beyond that limit to the DL libraries. Because DL libraries are loaded as binary data objects, not as RTE applications, the RTE size limit does not apply to them.

도 13은 폐쇄형 컴퓨팅 환경에서 동적 실행을 실현하도록 PIDL을 다룰 때 예시적인 컴퓨팅 환경에 의해 수행되는 처리를 도시한다. (동일한 처리는 폐쇄되어 있으나 종래의 런타임 환경을과 함께 제공되는 환경 및 개방된 컴퓨팅 환경에서 수행될 수도 있다). 도 13에 도시된 것처럼, 처리는 블록 1300에서 시작하며, 여기서 함수는 분할되어, 쉽핑될 때 장치상에 상주하는 예시적인 런처 애플리케이션내에 제공되며, 애드-온 함수로써 제공될 수 있다. 13 illustrates the processing performed by an exemplary computing environment when dealing with PIDL to realize dynamic execution in a closed computing environment. (The same processing is closed but may be performed in an environment that is provided with a conventional runtime environment and in an open computing environment). As shown in FIG. 13, processing begins at block 1300, where the function is partitioned, provided in an example launcher application that resides on the device when it is being shipped, and can be provided as an add-on function.

예시적인 구현예에서 그리고 도 13에 도시된 것처럼, 애드-온 함수를 포함하는 PIDL 라이브러리 객체가 블록 1320에서 생성되며, 스터브 파일은 블록 1330에서 소스 코드로써 생성된다. 런처 애플리케이션은 스터브 파일(1330) 및 동적 링커/로더와 더불어 블록 1310에서 컴파일되고, 블록 1300으로부터 쉽핑된 대로의(as- shipped) 함수를 포함한다. 블록 1340에서 지시된 것처럼, 런처 애플리케이션은 장치가 사용을 위해 쉽핑되는 때에 장치상에 포함될 수 있다.In an example implementation and as shown in FIG. 13, a PIDL library object containing an add-on function is generated at block 1320, and a stub file is generated as source code at block 1330. The launcher application is compiled at block 1310 with a stub file 1330 and a dynamic linker / loader, and includes as-shipped functions from block 1300. As indicated at block 1340, the launcher application may be included on the device when the device is shipped for use.

장치의 쉽핑 이후에, 애드-온 함수를 사용하기 위한 인증이 블록 1350에서 제공될 수 있다. 이해될 수 있는 것처럼, 이 인증은 상업적 거래에 포함될 수 있거나, 장치를 배치하는 환경에 따라서 다른 영역에 포함될 수 있다. 인증 후에, PIDL 라이브러리는, 장치 메모리로의 다운로드, 네트워크 전송, 또는 장치에 부착된 저장 장치 또는 카드로부터의 제공을 포함하나 이에 제한되지는 않는 적절한 수단에 의해, 블록 1360에서 장치에 이용할 수 있도록 제조될 수 있다. 장치상에 제공되는 런처 애플리케이션은 그 후 블록 1370에서 실행될 수 있다. 실행 동안, 런처는 블럭(1375)에서 PIDL 라이브러리를 개방시키도록 PIDLOpen을 호출할 수 있다. 이로부터 PIDL 객체가 장치에 이용가능한 지 여부를 결정하기 위하여 검사가 블록 1380에서 수행된다. 이 검사는 블록 1310에서 컴파일된 PIDL 스터브 파일로부터의 정보를 이용하여, 런처 애플리케이션 내의 동적 링커/로더에 의해 수행될 수 있다. 만약 블록 1375에서의 검사에서 PIDL이 장치에 이용가능하지 않음을 지시한다면, 처리는 블록 1385로 진행하여 런처 애플리케이션은 실행을 계속하나 쉽핑된 장치의 기능과 동일한 기능의 범위내에서 실행된다(즉, PIDL에 포함된 추가 기능을 배제).After shipping of the device, authentication to use the add-on function may be provided at block 1350. As can be appreciated, this authentication can be included in commercial transactions or in other areas depending on the environment in which the device is deployed. After authentication, the PIDL library is made available to the device at block 1360 by any suitable means, including but not limited to downloading to the device memory, network transfer, or providing from a storage device or card attached to the device. Can be. The launcher application provided on the device may then be executed at block 1370. During execution, the launcher may call PIDLOpen to open the PIDL library at block 1375. From this, a check is performed at block 1380 to determine whether a PIDL object is available to the device. This check can be performed by the dynamic linker / loader in the launcher application using the information from the PIDL stub file compiled in block 1310. If the inspection at block 1375 indicates that PIDL is not available to the device, processing proceeds to block 1385 where the launcher application continues to run but executes within the same range of functionality as that of the shipped device. Excludes additional functionality included in PIDL).

그러나, 만약 블록 1380에서, 검사가 PIDL 라이브러리가 장치에 이용가능하다고 지시하면, 처리는 블록 1390으로 진행하여 PIDL이 런처 애플리케이션에 로드, 링크, 및 바인드된다. 이러한 단계에 의해, 런처 애플리케이션으로부터 액세스가능한 기능의 범위는 PIDL에 제공되는 함수를 포함하도록 블록 1395에 도시된 것처 럼 확장된다. 이러한 익스포트된 함수들은 이전에 기술된 GetPIDLAddress 메커니즘에 의해 액세스될 수 있고 블럭(1310)에서 컴파일되는 동적 링커/로더에 제공될 수 있다.However, if at block 1380 the check indicates that the PIDL library is available to the device, processing proceeds to block 1390 where the PIDL is loaded, linked, and bound to the launcher application. By this step, the range of functions accessible from the launcher application is extended as shown in block 1395 to include the functions provided in the PIDL. These exported functions can be accessed by the previously described GetPIDLAddress mechanism and provided to a dynamic linker / loader that is compiled in block 1310.

도 14는 런처 애플리케이션의 다운로드를 통해 부가적인 기능을 제공할 때 수행되는 처리를 도시한다. 이러한 처리는, 개방 환경에 다운로드하는 경우나 장치상의 기존 RTE와 결합하여 동작시키기 위하여 런처 애플리케이션을 다운로드하는 경우처럼, 예시적인 컴퓨팅 장치가 쉽핑된 후에 발생할 수 있다. 이러한 처리는 다운로드 동작에 폐쇄된 채로 유지되거나 (가령, 런처와는 별개인) 다른 컴퓨팅 애플리케이션의 부가에 폐쇄된 채로 유지되는 폐쇄 환경에 애플리케이션을 다운로드하는 특이한 발생으로써 생길수도 있다. 런처는 기술적 또는 상업적 제어의 이용을 통해 (가령 다운로드하기 위하여) 이러한 방식으로 동작할 수 있다.14 shows the processing performed when providing additional functionality through the download of a launcher application. Such processing may occur after the example computing device is shipped, such as when downloading to an open environment or downloading a launcher application to operate in conjunction with an existing RTE on the device. Such processing may result from the unusual occurrence of downloading an application to a closed environment that remains closed to the download operation (eg, separate from the launcher) and remains closed to the addition of another computing application. The launcher can operate in this manner (eg for download) through the use of technical or commercial controls.

도시된 것처럼, 처리는 블록 1400에서 시작하여 프로그램은 런처 애플리케이션과 애드-온 기능으로 분할된다. 이로부터 처리는 블록 1415 또는 1405로 분기할 수 있다. 블록 1405에서 애드-온 기능에 대한 동적 라이브러리(DL) 객체가 생성된다. 블록 1415에서, 런처 애플리케이션, 링커/로더, 및 PIDL이 런처로부터 심볼들을 임포트하는 경우에서 PIDL_getSymbol에 대한 선택적인 소스가 컴파일되고 형성(building)된다. 블록 1405에서, 처리는 다시 나누어진다. 블록 1405에서, 처리는 블록 1445로 진행할 수 있고, 여기서 DL이 협력 장치(가령 휴대 전화기)에 제공된다. 블록 1445에서, 처리는 이하에서 논의되는 블록 1460으로 진행한다.As shown, processing begins at block 1400 and the program is divided into a launcher application and an add-on function. From this, the process may branch to block 1415 or 1405. In block 1405 a dynamic library (DL) object for the add-on functionality is created. In block 1415, an optional source for PIDL_getSymbol is compiled and built in when the launcher application, linker / loader, and PIDL import symbols from the launcher. At block 1405, the processing is divided again. At block 1405, processing may proceed to block 1445, where a DL is provided to a cooperating device (eg, a mobile phone). At block 1445, processing proceeds to block 1460, discussed below.

블록 1415에서, 처리는 블록 1420으로 진행하며 여기서 런처 애플리케이션이 장치에 다운로드된다. 그 후 블록 1425에서 다운로드된 런처 애플리케이션이 다운로드가 수행된 장치에서 작동하도록 인증되었는지를 결정하기 위한 검사가 수행된다. 만약 블록 1425에서의 검사가 런처 애플리케이션이 인증되지 않았음을 지시한다면, 처리는 블록 1440에서 종결된다. 그러나, 만약 블록 1425에서 런처 애플리케이션이 장치에서 작동하도록 인증되었음이 결정된다면, 처리는 블록 1430으로 진행하며 여기서 런처 애플리케이션이 실행된다. 실행 동안, 런처는 블럭(1435)에서 PIDL 라이브러리를 개방시키도록 PIDLOpen을 호출할 수 있다. 그 후 블록 1450에서는 전술한 블록 1445를 경유하여 DL이 장치에 이용할 수 있는지를 결정하는 검사가 수행된다. 만약 블록 1450에서의 검사가 DL이 장치에 이용할 수 없다고 판정하면, 런처 애플리케이션의 범위는 쉽핑된 대로 남아 있고 DL에 의해 제공되는 부가적인 기능으로 확장되지 않는다. 그러나, 만약 블록 1450에서, 검사가 DL이 장치에 이용할 수 있다고 판정하면, 처리는 블록 1460으로 진행하며, 링커/로더는 실행중인 애플리케이션과 함께 DL을 로딩하고 바인딩한다. 처리는 블록 1465로 진행하고 이로부터 계속된다. 런처 애플리케이션의 범위는 그 후 블록 1415에서 DL 기능을 포함하도록 확장된다.At block 1415, processing proceeds to block 1420 where the launcher application is downloaded to the device. A check is then performed to determine if the launcher application downloaded at block 1425 is authorized to operate on the device from which the download was performed. If the check at block 1425 indicates that the launcher application is not authenticated, then processing ends at block 1440. However, if at block 1425 it is determined that the launcher application is authorized to operate on the device, processing proceeds to block 1430 where the launcher application is executed. During execution, the launcher may call PIDLOpen to open the PIDL library at block 1435. A block 1450 is then checked to determine if the DL is available to the device via block 1445 described above. If the inspection at block 1450 determines that the DL is not available to the device, the scope of the launcher application remains as it is shipped and does not extend to the additional functionality provided by the DL. However, if at block 1450, the check determines that the DL is available to the device, processing proceeds to block 1460, where the linker / loader loads and binds the DL with the running application. Processing proceeds to block 1465 and continues therefrom. The scope of the launcher application is then extended to include the DL function at block 1415.

도 14에 기재된 처리는 하나의 런처 애플리케이션을 다운로드하거나 다수의 런처들을 다운로드하기 위하여 적용될 수 있음이 이해될 것이다. 이러한 런처들은 런처 애플리케이션이 빌딩될 때 포함될 수 있는 라이브러리 스터브 파일들에 따라 선택된 기능을 부가하도록 동작할 수 있다.It will be appreciated that the process described in FIG. 14 can be applied to download one launcher application or to download multiple launcher. Such launcher may operate to add a selected function according to library stub files that may be included when the launcher application is built.

종합하면, 본원에 기재된 장치 및 방법은 다양한 플랫폼을 동작시키는 개별 컴퓨팅 환경에 대해 동작할 수 있는 플랫폼에 독립적인 이진 객체를 제공한다. 그러나, 본 발명은 다양한 수정 및 대안의 구성이 가능하다는 것이 이해될 것이다. 본원에 기재된 구체적인 구성으로 본원을 제한하려는 것이 아니다. 이와는 달리, 본 발명은 본 발명의 범위 및 사상에 해당하는 모든 수정, 대안의 구성, 및 균등물을 커버하려는 것이다.Collectively, the devices and methods described herein provide platform-independent binary objects that can operate with respect to individual computing environments running various platforms. However, it will be understood that the present invention is capable of various modifications and alternative configurations. It is not intended to be exhaustive or to limit the invention to the specific constructions described herein. On the contrary, the invention is intended to cover all modifications, alternative constructions, and equivalents falling within the scope and spirit of the invention.

또한 본 발명은 다양한 컴퓨터 환경(유선 및 무선컴퓨터 환경 모두를 포함), 부분적인 컴퓨팅 환경, 및 실생활 환경에서 구현될 수 있음에 주의하여야 한다. 본원에 기재된 다양한 기법은 하드웨어 또는 소프트웨어, 또는 이들의 조합으로 구현될 수 있다. 바람직하게는, 본 기술들은 프로세서, 프로세서에 의해 판독가능한 저장매체(휘발성 및 비휘발성 메모리 및/또는 저장요소를 포함), 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램가능한 컴퓨터를 유지하는 컴퓨팅 환경에서 구현된다. 다양한 명령어 집합과 상호 협동하는 컴퓨팅 하드웨어 로직은 데이터에 적용되어 전술한 기능을 수행하고 출력 정보를 생성한다. 출력 정보는 하나 이상의 출력 장치에 적용된다. 예시적인 컴퓨팅 하드웨어에 의해 사용되는 프로그램들은, 컴퓨터 시스템과 통신하기 위하여 고수준 절차 또는 객체지향 프로그래밍 언어를 포함하는 다양한 프로그래밍 언어로 구현되는 것이 바람직하다. 본원에 도식적으로 기재된 장치 및 방법은 원한다면 어셈블리 또는 기계어로 구현될 수 있다. 어떠한 경우든, 언어는 컴파일되거나 번역되는 언어이다. 각각의 이러한 컴퓨터 프로그램은, 저장 매체 또는 장치가 컴퓨터에 의해 판독되어 상기 기재된 절차들을 수행할 때 컴퓨터를 구성하고 동작시키는 범용 또는 특수용 도 프로그램가능 컴퓨터에 의해 판독되는 저장 매체 또는 장치(가령, ROM 또는 자기 디스크)에 저장되는 것이 바람직하다. 장치는 또한 컴퓨터 프로그램으로 구성되는 컴퓨터 판독가능 저장 매체로써 구현되도록 고려될 수도 있고, 여기서 저장 매체가 이와 같이 구성됨으로써 컴퓨터가 구체적이고 미리 정의된 방식으로 동작한다.It should also be noted that the present invention may be implemented in a variety of computer environments (including both wired and wireless computer environments), partial computing environments, and real-life environments. The various techniques described herein may be implemented in hardware or software, or a combination thereof. Preferably, the techniques provide a programmable computer comprising a processor, a storage medium readable by the processor (including volatile and nonvolatile memory and / or storage elements), at least one input device, and at least one output device. It is implemented in a computing environment. Computing hardware logic that cooperates with the various instruction sets is applied to the data to perform the functions described above and generate output information. The output information applies to one or more output devices. Programs used by the exemplary computing hardware are preferably implemented in a variety of programming languages, including high-level procedural or object-oriented programming languages, for communicating with a computer system. The apparatus and methods diagrammatically described herein may be implemented in assembly or machine language, if desired. In any case, the language is the language that is compiled or translated. Each such computer program is a storage medium or device (eg, a ROM or a computer) that is read by a general purpose or special purpose programmable computer that configures and operates a computer when the storage medium or device is read by a computer to perform the procedures described above. Magnetic disk). The apparatus may also be considered to be embodied as a computer readable storage medium comprised of a computer program, where the storage medium is so configured that the computer operates in a specific and predefined manner.

비록 예시적인 본원 발명의 구현이 위에서 상세히 기재되었지만, 당업자라면 많은 부가적인 수정이 본 발명의 신규한 교시 및 이점을 물질적으로 이탈함이 없이 예시적인 실시예에 대해 가능함을 쉽게 이해할 것이다. 따라서, 이러한 그리고 모든 그러한 수정들은 본 발명의 범위 내에 포함될 것을 의도하는 것이다. 본 발명은 다음의 전형적인 청구범위에 의해 더욱 잘 정의된다.Although exemplary implementations of the invention have been described in detail above, those skilled in the art will readily appreciate that many additional modifications are possible to the exemplary embodiments without materially departing from the novel teachings and advantages of the invention. Accordingly, these and all such modifications are intended to be included within the scope of this invention. The invention is better defined by the following typical claims.

Claims (77)

컴퓨팅 환경내에서 동작하는 소프트웨어 플랫폼상에 이진(binary) 객체 파일을 동적으로 로딩 및 링크하기 위한 시스템으로서,A system for dynamically loading and linking binary object files on a software platform operating within a computing environment, 동적 라이브러리(DL); 및Dynamic library (DL); And 상기 소프트웨어 플랫폼에서 실행되는 이진 실행가능한 프로그램으로 컴파일 및 형성되는(built) 동적 링커(linker)/로더(loader) - 상기 동적 링커/로더는 상기 DL을 개방시키는 제 1 함수(function) 및 상기 DL에 의해 익스포트된(exported) 심볼의 메모리의 어드레스를 복귀(return)시키는 제 2 함수를 포함하고, 이에 따라 상기 컴퓨팅 애플리케이션이 런타임(run time)에서 상기 DL에 대한 액세스를 갖도록 하고 상기 DL과 상호동작하도록 허용함 -A dynamic linker / loader that is compiled and built into a binary executable program running on the software platform, the dynamic linker / loader having a first function to open the DL and the DL And a second function to return an address of a memory of a symbol exported by it, thereby causing the computing application to have access to the DL and to interact with the DL at run time. Allowed- 를 포함하는 동적 로딩 및 링크 시스템.Dynamic loading and linking system comprising a. 제 1 항에 있어서,The method of claim 1, 상기 DL은 선택된 구조를 갖는 이진 객체 파일을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And the DL comprises a binary object file having a selected structure. 제 2 항에 있어서,The method of claim 2, 상기 DL 선택된 구조는 실행가능한 링크 포맷(ELF) 및 포터블 실행가능한(PE) 포맷 중 임의의 것을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스 템.Wherein the DL selected structure comprises any of an executable link format (ELF) and a portable executable (PE) format. 제 2 항에 있어서,The method of claim 2, 상기 동적 링커/로더는 상기 DL을 개방시키는 제 1 함수를 실행하기 위한 상기 상호동작하는 컴퓨팅내의 명령어에 응답하여, 런타임에서 상기 DL을 상기 소프트웨어 플랫폼에 로딩하도록 상기 DL에서 동작되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader is operated on the DL to load the DL into the software platform at runtime in response to an instruction in the interoperable computing to execute a first function of opening the DL. Loading and linking system. 제 4 항에 있어서,The method of claim 4, wherein 상기 동적 링커/로더는 상기 DL 객체 파일의 크기를 결정하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader determines the size of the DL object file. 제 5 항에 있어서,The method of claim 5, 상기 동적 링커/로더는 상기 소프트웨어 플랫폼상에서 상기 DL 객체를 로딩하도록 메모리를 할당하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader allocates memory to load the DL object on the software platform. 제 4 항에 있어서,The method of claim 4, wherein 상기 동적 링커/로더는 런타임에서 상기 DL을 상기 상호동작하는 컴퓨팅 애플리케이션에 링크시키도록 상기 DL에서 동작되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader is operated in the DL to link the DL to the interoperable computing application at runtime. 제 4 항에 있어서,The method of claim 4, wherein 상기 제 1 함수에 의해 개방되는, 상기 DL로부터 익스포트된 심볼의 어드레스는 상기 제 2 함수를 실행하는 상기 상호동작하는 컴퓨팅 애플리케이션내의 명령어에 응답하여 복귀(return)되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The address of a symbol exported from the DL, opened by the first function, is returned in response to an instruction in the interacting computing application executing the second function. . 제 2 항에 있어서,The method of claim 2, 단일 이진 객체 파일은 상기 이진 객체 파일의 재형성 또는 재컴파일링을 요구함이 없이, 규정된 프로세서 아키텍쳐에서 실행되는 운영 체제들과 다수의 소프트웨어 플랫폼들에 대해 동적으로 로딩 및 링크되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.A single binary object file is dynamically loaded and linked for multiple software platforms and operating systems running on a defined processor architecture, without requiring reconstruction or recompilation of the binary object file. Loading and linking system. 제 9 항에 있어서,The method of claim 9, 상기 DL과 상호동작되는 컴퓨팅 애플리케이션을 위한 소스 코드, 및 상기 동적 링커/로더를 위한 소스 코드는 상기 다수의 소프트웨어 플랫폼들 중 선택된 소프트웨어 플랫폼에 대한 이진 실행가능한 프로그램으로 컴파일 및 링크되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Source code for a computing application that interacts with the DL, and source code for the dynamic linker / loader is compiled and linked into a binary executable program for a selected one of the plurality of software platforms. Loading and linking system. 제 4 항 또는 제 7 항에 있어서,The method according to claim 4 or 7, 상기 DL은 상기 DL의 이진 포맷을 원시적으로(natively) 지원하지 않는 운영 체제에서 동작되는, 컴퓨팅 환경의 컴퓨팅 애플리케이션으로 동적으로 로딩 및 링크되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the DL is dynamically loaded and linked into a computing application of a computing environment operating in an operating system that does not natively support the binary format of the DL. 제 1 항에 있어서,The method of claim 1, 상기 DL은 이진 객체들의 동적 링크를 수행하기 위해 원시(native) 동적 링크 메커니즘을 갖지 않는 운영 체제에서 동작되는, 제한된 컴퓨팅 환경에서 컴퓨팅 애플리케이션에 동적으로 로딩 및 링크되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The DL is a dynamic loading and linking system that is dynamically loaded and linked to a computing application in a limited computing environment, operating in an operating system that does not have a native dynamic linking mechanism to perform dynamic linking of binary objects. . 제 2 항에 있어서,The method of claim 2, 상기 상호동작하는 컴퓨팅 애플리케이션에 대한 상기 DL 액세스를 제공하는 인터페이스 모듈을 더 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And an interface module for providing the DL access to the interoperable computing application. 제 13 항에 있어서,The method of claim 13, 상기 인터페이스 모듈은 상기 DL이 상기 상호동작하는 컴퓨팅 애플리케이션의 선택된 함수들을 호출할 수 있도록 하는 소스 코드를 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The interface module includes source code for enabling the DL to invoke selected functions of the interacting computing application. 제 14 항에 있어서,The method of claim 14, 상기 인터페이스 모듈의 소스 코드는 상기 상호동작하는 컴퓨팅 애플리케이 션의 애플리케이션 프로그래밍 인터페이스를 파싱(parsing)함으로써 생성되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Source code of the interface module is generated by parsing an application programming interface of the interacting computing application. 제 14 항에 있어서,The method of claim 14, 상기 인터페이스 모듈의 소스 코드는 상기 DL에 의해 임포트된(imported) 심볼들을 식별하기 위해 상기 DL 이진 객체 파일을 파싱함으로써 생성되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The source code of the interface module is generated by parsing the DL binary object file to identify symbols imported by the DL. 제 14 항에 있어서,The method of claim 14, 상기 인터페이스 모듈의 소스 코드, 상기 상호동작하는 컴퓨팅 애플리케이션의 소스 코드, 및 상기 동적 링커/로더의 소스 코드는 상기 소프트웨어 플랫폼에 대해 컴파일되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Source code of the interface module, source code of the interactive computing application, and source code of the dynamic linker / loader are compiled for the software platform. 제 7 항에 있어서,The method of claim 7, wherein 상기 동적 링커/로더는 상기 상호동작하는 컴퓨팅 애플리케이션과 상기 DL을 상기 소프트웨어 플랫폼상의 실행가능한 프로세스로 바인딩하도록 심볼 분석(resolution) 및 재배치(relocation)를 처리하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader processes symbol resolution and relocation to bind the interoperable computing application and the DL to an executable process on the software platform. 제 18 항에 있어서,The method of claim 18, 상기 실행가능한 프로세스는 다수의 동적 라이브러리들과 상호동작하고 다수의 동적 라이브러리들에 바인딩된 컴퓨팅 애플리케이션을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And said executable process includes a computing application that interacts with and is bound to a plurality of dynamic libraries. 제 18 항에 있어서,The method of claim 18, 상기 동적 링커/로더는 상기 상호동작하는 컴퓨팅 애플리케이션에 파일들을 링크할 때 DL 파일들 및 넌(non)-DL 파일들을 구별시키는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the dynamic linker / loader distinguishes between DL files and non-DL files when linking files to the interactive computing application. 제 20 항에 있어서,The method of claim 20, 상기 실행가능한 프로세스는 상기 상호동작하는 컴퓨팅 애플리케이션을 상기 DL 및 상기 소프트웨어 플랫폼에 원시적인 동적 링크된 라이브러리에 링크시키는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The executable process links the interoperable computing application to a dynamic linked library that is native to the DL and the software platform. 제 1 항에 있어서,The method of claim 1, 라이브러리 소스 코드는 이진 코드 및/또는 데이터를 포함하는 상기 DL을 생성하도록 컴파일되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Library source code is compiled to generate the DL comprising binary code and / or data. 제 22 항에 있어서,The method of claim 22, 상기 DL은 상기 소프트웨어 플랫폼에서 실행되는 이진 실행가능한 프로그램 에 동적으로 로딩 및 링크되고, 상기 라이브러리 소스 코드는 상기 소프트웨어 플랫폼의 프로그래밍 제한을 위반하는 코드를 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The DL is dynamically loaded and linked to a binary executable program executing on the software platform, and the library source code includes code that violates programming limitations of the software platform. 제 23 항에 있어서,The method of claim 23, 상기 프로그래밍 제한은 글로벌 변수들의 사용상의 제한, 또는 기록가능한 정적 변수들의 사용상의 제한, 또는 포인터 변수들의 정적 초기화의 제한을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The programming restriction comprises a limitation on the use of global variables, or a limitation on the use of writable static variables, or a limitation of static initialization of pointer variables. 제 24 항에 있어서,The method of claim 24, 상기 동적 링커/로더는 상기 DL이 링크되는 상기 프로그램의 실행 동안 상기 소프트웨어 플랫폼상에 상기 DL 객체를 로딩하도록 메모리 블럭을 할당하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader allocates a block of memory to load the DL object on the software platform during execution of the program to which the DL is linked. 제 25 항에 있어서,The method of claim 25, 상기 동적 링커/로더는 상기 라이브러리에 규정된 글로벌 또는 기록가능한 정적 변수들의 범위(scope)를 상기 DL에 의해 점유된 상기 메모리 블럭에 한정하도록 동작되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader is operative to limit the scope of global or writable static variables defined in the library to the memory block occupied by the DL. 제 17 항에 있어서,The method of claim 17, 상기 라이브러리 소스 코드는 다중 실행 인스턴스들을 제한하거나 상기 코드의 실행을 반복하는 방식으로 데이터에 대한 액세스 기능들을 제공하고 데이터를 처리하는 코드를 포함하고,The library source code includes code for providing access to data and processing data in a manner that limits multiple execution instances or repeats execution of the code, 상기 동적 링커/로더는 상기 라이브러리의 인스턴스를 동적으로 할당된 메모리 블럭에 로딩하며, 상기 라이브러리 코드에 규정된 데이터 변수들의 범위는 상기 메모리 블럭에 한정되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic linker / loader loads an instance of the library into a dynamically allocated memory block, and the range of data variables defined in the library code is limited to the memory block. 제 27 항에 있어서,The method of claim 27, 동일한 라이브러리의 다중 비-충돌(non-conflicting) 인스턴스들이 상기 컴퓨팅 환경에서 실행가능한 것을 특징으로 하는 동적 로딩 및 링크 시스템.Dynamic loading and linking system, characterized in that multiple non-conflicting instances of the same library are executable in the computing environment. 제 27 항에 있어서,The method of claim 27, 상기 DL에 의해 사용되는 데이터는 상기 코드내에 규정된 정적 변수 또는 글로벌 변수에 의해 참조되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Data used by the DL is referenced by static or global variables defined within the code. 제 27 항에 있어서,The method of claim 27, 상기 동적 로딩 및 링크 시스템은 단일 컴퓨팅 환경 프로세스내에서 다중 실행 인스턴스들을 허용하도록 비-객체-지향 코드를 로딩하기 위한 것을 특징으로 하는 동적 로딩 및 링크 시스템.The dynamic loading and linking system is for loading non-object-oriented code to allow multiple execution instances within a single computing environment process. 제 30 항에 있어서,The method of claim 30, 라이브러리 데이터의 다중 세트들은 각각의 상기 라이브러리 데이터 세트들 사이에서 충돌이 경감 및/또는 제거되도록 단일 컴퓨팅 환경 프로세스내에서 동시적으로 동작할 수 있는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And multiple sets of library data can operate simultaneously within a single computing environment process such that conflicts between each of said library data sets are alleviated and / or eliminated. 제 27 항에 있어서,The method of claim 27, 상기 동적 로딩 및 링크 시스템은 단일 컴퓨팅 환경 프로세스내에서 상기 코드의 반복적인 실행을 허용하도록 비-객체-지향 코드를 로딩하기 위한 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the dynamic loading and linking system is for loading non-object-oriented code to allow repeated execution of the code within a single computing environment process. 제 27 항에 있어서,The method of claim 27, 상기 동적 로딩 및 링크 시스템은 다중 프로세스들을 지원하지 않는 컴퓨팅 환경에서 상기 코드의 반복적인 실행과 다중 실행 인스턴스들을 허용하는 코드를 로딩하기 위한 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the dynamic loading and linking system is for loading code allowing repetitive execution and multiple execution instances of the code in a computing environment that does not support multiple processes. 제 2 항에 있어서,The method of claim 2, 상기 컴퓨팅 환경은 비-상주(non-resident) 실행가능한 프로그램들의 컴퓨팅 환경으로의 배치에 제한을 받고, 상기 상호동작하는 컴퓨팅 애플리케이션은 상기 DL을 상기 실행 런처(launcher) 애플리케이션에 동적으로 링크시킴으로써 제한된 컴퓨팅 환경에 이용가능한 기능성을 확장하도록 동작가능한 런처 애플리케이션을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The computing environment is limited to the placement of non-resident executable programs into the computing environment, and the interactive computing application is limited to computing by dynamically linking the DL to the launcher application. And a launcher application operable to extend the functionality available to the environment. 제 34 항에 있어서,The method of claim 34, wherein 상기 제한된 컴퓨팅 환경은 상기 컴퓨팅 환경에 원시적인 실행가능한 프로그램들의 부가를 허용하지 않는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The limited computing environment does not allow the addition of primitive executable programs to the computing environment. 제 34 항에 있어서,The method of claim 34, wherein 상기 컴퓨팅 환경은 상기 컴퓨팅 환경에서 실행할 수 있는 프로그램들의 최대 크기에 제한을 두는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein said computing environment places a limit on the maximum size of programs that can execute in said computing environment. 제 34 항에 있어서,The method of claim 34, wherein 상기 컴퓨팅 환경은 런타임(run time) 환경(RTE)을 지원하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And said computing environment supports a run time environment (RTE). 제 37 항에 있어서,The method of claim 37, 상기 RTE내에서 실행되는 프로그램들은 상기 원시 컴퓨팅 환경에 이용가능한 하나 이상의 함수들에 대한 제한된 액세스를 갖는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Programs executing within the RTE have limited access to one or more functions available to the native computing environment. 제 37 항에 있어서,The method of claim 37, 상기 RTE는 상기 RTE에 의해 인증되는 프로그램들만을 실행하도록 동작을 제한하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The RTE restricts operation to execute only programs that are authenticated by the RTE. 제 37 항에 있어서,The method of claim 37, 상기 RTE는 자바 2 모바일 에디션(J2ME) RTE 및 무선용 이진 런타임 환경(BREW) RTE 중 임의의 것을 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.The RTE comprises any of a Java 2 Mobile Edition (J2ME) RTE and a Wireless Binary Runtime Environment (BREW) RTE. 제 34 항에 있어서,The method of claim 34, wherein 상기 런처 모듈은 상기 컴퓨팅 환경에서 원시 컴퓨팅 애플리케이션으로서 동작하도록 기록되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the launcher module is written to operate as a native computing application in the computing environment. 제 37 항에 있어서,The method of claim 37, 상기 런처는 상기 컴퓨팅 환경의 런타임 환경내에서 컴퓨팅 애플리케이션으로서 동작하도록 기록되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And wherein the launcher is written to operate as a computing application within the runtime environment of the computing environment. 제 41 항에 있어서,42. The method of claim 41 wherein 적어도 2개의 런처 모듈들을 더 포함하는 것을 특징으로 하는 동적 로딩 및 링크 시스템.And at least two launcher modules. 제 34 항에 있어서,The method of claim 34, wherein 상기 DL은 플래쉬 메모리 유닛, 고정된 메모리 유닛, 및 마이크로-드라이브 중 임의의 것을 포함하는 상기 컴퓨팅 환경으로부터 물리적으로 분리된 저장 매체에 저장되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Wherein the DL is stored in a storage medium physically separate from the computing environment including any of a flash memory unit, a fixed memory unit, and a micro-drive. 제 34 항에 있어서,The method of claim 34, wherein 상기 런처 애플리케이션을 포함하는 이진 실행가능한 프로그램은 플래쉬 메모리 유닛, 고정된 메모리 매체 유닛, 및 마이크로-드라이브 중 임의의 것을 포함하는 상기 컴퓨팅 환경으로부터 물리적으로 분리된 저장 매체에 저장되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.A binary executable program comprising the launcher application is stored in a storage medium physically separate from the computing environment including any of a flash memory unit, a fixed memory medium unit, and a micro-drive And link system. 제 34 항에 있어서,The method of claim 34, wherein 상기 DL은 상기 제한된 컴퓨팅 환경으로 컨텐츠의 안전한 배포를 촉진시키기 위해 디지털 권한 관리 방법(scheme)에 사용되는 것을 특징으로 하는 동적 로딩 및 링크 시스템.Wherein the DL is used in a digital rights management scheme to facilitate secure distribution of content to the limited computing environment. 컴퓨팅 환경내에서 동작하는 소프트웨어 플랫폼에 이진 객체를 통합시키는 방법으로서,A method of integrating binary objects into a software platform operating within a computing environment, 라이브러리 소스 코드를 제공하는 단계;Providing library source code; 선택된 포맷을 갖는 객체 파일을 포함하는 코드 라이브러리(CL)를 생성하도 록 상기 라이브러리 소스 코드를 컴파일하는 단계;Compiling the library source code to generate a code library (CL) that includes an object file having a selected format; 상기 소프트웨어 플랫폼상에서 실행되는 이진 실행가능한 프로그램을 생성하기 위해 상기 라이브러리와 상호동작하는 컴퓨팅 애플리케이션의 소스 코드와 함께 동적 링커/로더의 소스 코드를 컴파일 및 형성하는 단계; 및Compiling and forming source code of a dynamic linker / loader with source code of a computing application that interacts with the library to produce a binary executable program that runs on the software platform; And 상기 상호동작하는 컴퓨팅 애플리케이션내에서부터 상기 코드 라이브러리를 개방시키는 단계Opening the code library from within the interactive computing application. 를 포함하는 이진 객체 통합 방법.Binary object integration method comprising a. 제 47 항에 있어서,The method of claim 47, ELF 파일 포맷 또는 PE 파일 포맷을 포함하는 객체 파일 포맷을 선택하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And selecting an object file format including an ELF file format or a PE file format. 제 47 항에 있어서,The method of claim 47, 런타임에 상기 CL을 컴퓨팅 환경 메모리에 동적으로 로딩하도록 상기 동적 링커/로더에 의해 메모리 블럭을 할당하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.Allocating a block of memory by the dynamic linker / loader to dynamically load the CL into computing environment memory at runtime. 제 48 항에 있어서,49. The method of claim 48 wherein 상기 CL을 개방시키는 제 1 함수 및 상기 CL에 의해 익스포트된 심볼의 메모리의 어드레스를 복귀시키는 제 2 함수를 상기 동적 링커/로더내에 제공하는 단계 를 더 포함하고, 이에 따라 상기 컴퓨팅 애플리케이션이 런타임에 상기 CL과 상호동작하도록 하고 상기 CL에 대한 액세스를 갖도록 허용하는 것을 특징으로 하는 이진 객체 통합 방법.Providing in the dynamic linker / loader a first function to open the CL and a second function to return an address of a memory of a symbol exported by the CL, such that the computing application causes the Interoperating with a CL and allowing access to the CL. 제 50 항에 있어서,51. The method of claim 50, 상기 제 2 함수를 실행하는 상기 상호동작하는 컴퓨팅 애플리케이션내의 명령어에 응답하여, 상기 제 1 함수에 의해 개방되는, 상기 CL로부터 익스포트된 심볼의 어드레스를 복귀시키는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And in response to an instruction in the interacting computing application executing the second function, returning an address of an exported symbol from the CL that is opened by the first function. Integration method. 제 47 항에 있어서,The method of claim 47, 상기 상호동작하는 컴퓨팅 애플리케이션의 선택된 함수들을 호출하도록 상기 CL 액세스를 제공하는 소스 코드로서 인터페이스 모듈을 제공하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.Providing an interface module as source code for providing said CL access to invoke selected functions of said cooperating computing application. 제 52 항에 있어서,The method of claim 52, wherein 상기 인터페이스 모듈의 소스 코드, 상기 상호동작하는 컴퓨팅 애플리케이션의 소스 코드, 및 상기 동적 링커/로더의 소스 코드를 상기 소프트웨어 플랫폼에서 실행되는 이진 실행가능한 프로그램으로 컴파일하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And compiling the source code of the interface module, the source code of the interoperable computing application, and the source code of the dynamic linker / loader into a binary executable program running on the software platform. How to integrate objects. 제 47 항에 있어서,The method of claim 47, 상기 이진 객체 파일의 재컴파일링 또는 재형성을 요구함이 없이 규정된 프로세서 아키텍쳐에서 실행되는 운영 체제들 및 다수의 소프트웨어 플랫폼들에 대해 단일 이진 객체 파일을 통합시키는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.Incorporating a single binary object file for multiple software platforms and operating systems running on a defined processor architecture without requiring recompiling or reforming the binary object file. How to integrate objects. 제 54 항에 있어서,The method of claim 54, wherein 상기 CL과 상호동작하는 컴퓨팅 애플리케이션을 위한 소스 코드, 및 상기 동적 링커/로더를 위한 소스 코드를 상기 다수의 소프트웨어 플랫폼들 중 선택된 소프트웨어 플랫폼을 위한 이진 실행가능한 프로그램으로 컴파일 및 링크시키는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.Compiling and linking source code for a computing application that interacts with the CL, and source code for the dynamic linker / loader into a binary executable program for a selected one of the plurality of software platforms. Binary object integration method, characterized in that. 제 47 항에 있어서,The method of claim 47, 상기 컴퓨팅 환경은 상기 선택된 객체 포맷을 원시적으로 지원하지 않는 것을 특징으로 하는 이진 객체 통합 방법.And the computing environment does not natively support the selected object format. 제 47 항에 있어서,The method of claim 47, 이진 객체들의 동적 링크를 수행하는 원시적인 동적 링크 메커니즘을 갖지 않는 운영 체제에서 동작하는, 제한된 컴퓨팅 환경의 컴퓨팅 애플리케이션에 상기 CL을 로딩 및 링크시키는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And loading and linking the CL to a computing application in a limited computing environment operating in an operating system that does not have a primitive dynamic link mechanism to perform dynamic linking of binary objects. 제 49 항에 있어서,The method of claim 49, 상기 라이브러리 소스 코드는 상기 소프트웨어 플랫폼의 프로그래밍 제한(programming restrction)을 위반하는 코드를 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And wherein the library source code includes code that violates a programming restrction of the software platform. 제 58 항에 있어서,The method of claim 58, 상기 프로그래밍 제한은 글로벌 변수들의 사용상의 제한, 기록가능한 정적 변수들의 사용상의 제한, 및 포인터 변수들의 정적 초기화의 제한 중 임의의 것을 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And said programming restriction comprises any of a limitation on the use of global variables, a limitation on the use of writable static variables, and a limitation of static initialization of pointer variables. 제 59 항에 있어서,The method of claim 59, 상기 라이브러리에 규정된 글로벌 또는 기록가능한 정적 변수들의 범위를 상기 CL에 의해 점유된 상기 메모리 블럭으로 한정하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.Defining a range of global or writable static variables defined in said library to said memory block occupied by said CL. 제 47 항에 있어서,The method of claim 47, 상기 라이브러리 소스 코드는 다중 실행 인스턴스들을 제한하거나 상기 코드 의 실행을 반복하는 방식으로 데이터에 대한 액세스 기능들을 제공하고 데이터를 처리하는 코드를 포함하고,The library source code includes code for providing access to data and processing data in a manner that limits multiple execution instances or repeats execution of the code, 상기 방법은 상기 동적 링커/로더에 의해 동적으로 할당된 메모리 블럭으로 상기 라이브러리의 인스턴스를 로딩하는 단계를 더 포함하며, 상기 라이브러리 코드에 규정된 데이터 변수들의 범위는 상기 메모리 블럭으로 한정되는 것을 특징으로 하는 이진 객체 통합 방법.The method further comprises loading an instance of the library into a memory block dynamically allocated by the dynamic linker / loader, wherein the range of data variables defined in the library code is limited to the memory block. Binary object integration method. 제 61 항에 있어서,62. The method of claim 61, 단일 컴퓨팅 환경 프로세스내에서 실행되는 동일한 라이브러리의 다중-비-충돌 인스턴스들을 로딩하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And loading multiple non-conflicting instances of the same library running within a single computing environment process. 제 62 항에 있어서,63. The method of claim 62, 라이브러리 데이터의 다중 세트들은 각각의 상기 라이브러리 데이터 세트들 사이에서 충돌이 경감 및/또는 제거되도록 단일 컴퓨팅 환경 프로세스내에서 동시적으로 동작될 수 있는 것을 특징으로 하는 이진 객체 통합 방법.And multiple sets of library data can be operated concurrently within a single computing environment process such that conflicts between each of said library data sets are alleviated and / or eliminated. 제 61 항에 있어서,62. The method of claim 61, 단일 컴퓨팅 환경 프로세스내에서 상기 코드의 실행을 반복하도록 비-객체-지향 코드를 로딩하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방 법.And loading non-object-oriented code to repeat the execution of the code within a single computing environment process. 제 62 항 또는 제 64 항에 있어서,65. The method of claim 62 or 64 wherein 상기 컴퓨팅 환경은 다중 프로세스들을 지원하지 않는 것을 특징으로 하는 이진 객체 통합 방법.And said computing environment does not support multiple processes. 제 47 항에 있어서,The method of claim 47, 상기 컴퓨팅 환경은 비-상주 실행가능한 프로그램들의 컴퓨팅 환경으로의 배치상에 제한을 받고,The computing environment is limited in the placement of non-resident executable programs into the computing environment, 상기 방법은 상기 상호동작하는 컴퓨팅 애플리케이션내에 포함된 실행 런처 애플리케이션에 상기 CL을 동적으로 링크시킴으로써 상기 제한된 컴퓨팅 환경에 이용가능한 기능성을 확장하는 단계를 더 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And the method further comprises extending functionality available to the restricted computing environment by dynamically linking the CL to an execution launcher application included in the interactive computing application. 제 66 항에 있어서,The method of claim 66, wherein 상기 컴퓨팅 환경은 하기의 것들 중 임의의 하나 또는 그 이상을 포함하는 하나 이상의 제한들을 받고, 하기의 것들은,The computing environment is subject to one or more limitations, including any one or more of the following, 상기 컴퓨팅 환경은 원시 실행가능한 프로그램들의 부가에 근접하고,The computing environment is close to the addition of native executable programs, 상기 컴퓨팅 환경은 프로그램 크기 제한값내에 속하는 프로그램들로 실행을 제한하며,The computing environment limits execution to programs that fall within program size limits, 상기 컴퓨팅 환경은 런타임 환경(RTE)내에서 실행되는 프로그램들이 상기 원시 컴퓨팅 환경에 이용가능한 하나 이상의 함수들에 대한 제한된 액세스를 갖는 런타임 환경(RTE)을 갖고,The computing environment has a runtime environment (RTE) in which programs executing within the runtime environment (RTE) have limited access to one or more functions available to the native computing environment, 상기 컴퓨팅 환경은 상기 RTE에 대해 인증된 프로그램들만을 실행하도록 동작을 제한하는 RTE를 가지며,The computing environment has an RTE that restricts its operation to run only programs that are authorized for the RTE, 상기 컴퓨팅 환경은 동적 링크를 허용하지 않는 것을 포함하는 것을 특징으로 하는 이진 객체 통합 방법.And said computing environment comprises not allowing dynamic linking. 규정된 프로세서 아키텍쳐에서 동작되는 상이한 컴퓨팅 소프트웨어 환경들에 대해 사용하기 위해 컴퓨팅 라이브러리를 배포하는 방법으로서,A method of distributing a computing library for use with different computing software environments operating on a defined processor architecture, the method comprising: 선택된 구조를 갖는 이진 객체 파일로서 동적 라이브러리(DL)를 생성하는 단계;Generating a dynamic library (DL) as a binary object file having a selected structure; 상기 컴퓨팅 환경들 중 적어도 하나에서 동작가능한 상호동작하는 컴퓨팅 애플리케이션의 소스 코드와 함께, 동적 링커의 소스 코드를 컴파일함으로써 이진 실행가능한 프로그램을 형성(building)하는 단계; Building a binary executable program by compiling source code of a dynamic linker, with source code of an interactive computing application operable in at least one of the computing environments; 통신 네트워크 및 저장 매체 중 임의의 것을 포함하는 입력 소스로부터 상기 DL을 상기 상이한 컴퓨팅 환경들로 통신하는 단계; 및Communicating the DL to the different computing environments from an input source including any of a communication network and a storage medium; And 상기 DL을 상기 이진 실행가능한 프로그램에 동적으로 링크시키는 단계Dynamically linking the DL to the binary executable program 를 포함하는 컴퓨팅 라이브러리의 배포 방법.Distribution method of a computing library comprising a. 제 68 항에 있어서,The method of claim 68, wherein 적어도 하나의 DL과 상호동작하는 상기 컴퓨팅 애플리케이션의 새로운 버전과 통신하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.Communicating with a new version of the computing application that interacts with at least one DL. 제 68 항에 있어서,The method of claim 68, wherein 상기 컴퓨팅 애플리케이션과 상호동작하는 상기 DL의 새로운 버전과 통신하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.Communicating with a new version of the DL to interact with the computing application. 제 68 항에 있어서,The method of claim 68, wherein 컴퓨팅 환경에 사용하기 위해 컴퓨팅 라이브러리를 배포하고, 상기 컴퓨팅 환경은 하기의 것들 중 임의의 하나 또는 그 이상을 포함하는 하나 이상의 제한들을 받으며, 하기의 것들은,Distribute a computing library for use in a computing environment, the computing environment being subject to one or more limitations including any one or more of the following, 상기 컴퓨팅 환경은 원시 실행가능한 프로그램들의 부가에 근접하고,The computing environment is close to the addition of native executable programs, 상기 컴퓨팅 환경은 프로그램 크기 제한값내에 속하는 프로그램들로 실행을 제한하며,The computing environment limits execution to programs that fall within program size limits, 상기 컴퓨팅 환경은 런타임 환경(RTE)내에서 실행되는 프로그램들이 상기 원시 컴퓨팅 환경에 이용가능한 하나 이상의 함수들에 대한 제한된 액세스를 갖는 런타임 환경(RTE)을 갖고,The computing environment has a runtime environment (RTE) in which programs executing within the runtime environment (RTE) have limited access to one or more functions available to the native computing environment, 상기 컴퓨팅 환경은 상기 RTE에 대해 인증된 프로그램들만을 실행하도록 동 작을 제한하는 RTE를 가지며,The computing environment has an RTE that restricts its operation to run only programs that are authorized for the RTE, 상기 컴퓨팅 환경은 동적 링크를 허용하지 않는 것을 포함하는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.And said computing environment comprises not allowing dynamic linking. 제 71 항에 있어서,The method of claim 71 wherein 통신 네트워크 및 저장 매체 중 임의의 것을 포함하는 입력 소스로부터 런처 프로그램에 의해 컴퓨팅 장치에 이용가능한 동적 라이브러리들로의 액세스를 허용하기 위한 프록시로서 동작가능한, 상기 컴퓨팅 장치에 상호동작하는 런처 애플리케이션을 다운로딩하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.Downloading a launcher application that interacts with the computing device operable as a proxy to allow access to dynamic libraries available to the computing device by the launcher program from an input source including any of a communication network and a storage medium. The method of claim 1, further comprising the step of distributing the computing library. 제 72 항에 있어서,The method of claim 72, 동적 라이브러리가 상기 컴퓨팅 장치에 이용가능할 때, 상호동작하는 동적 라이브러리의 부가적인 함수들을 포함하도록 상기 런처 애플리케이션의 범위를 확장하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.Expanding the scope of the launcher application to include additional functions of the interacting dynamic library when a dynamic library is available to the computing device. 제 68 항에 있어서,The method of claim 68, wherein 상기 상호동작하는 컴퓨팅 애플리케이션은 상기 컴퓨팅 장치를 최종 사용자에게 판매하기 위한 탑재(shipment) 이전에, 컴퓨팅 장치의 상기 컴퓨팅 환경에 배치되는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.And wherein the interactive computing application is placed in the computing environment of a computing device prior to a shipment for selling the computing device to an end user. 제 68 항에 있어서,The method of claim 68, wherein 상기 상호동작하는 컴퓨팅 애플리케이션은 상기 컴퓨팅 장치를 최종 사용자에게 판매하기 위한 탑재 이후에, 컴퓨팅 장치의 상기 컴퓨팅 환경에 배치되는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.And wherein the interactive computing application is placed in the computing environment of the computing device after mounting for sale of the computing device to an end user. 제 74 항 또는 제 75 항에 있어서,76. The method of claim 74 or 75, 상기 컴퓨팅 장치는 휴대 전화 또는 무선 인에이블되는 핸드셋인 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.And the computing device is a mobile phone or a wireless enabled handset. 제 68 항에 있어서,The method of claim 68, wherein 상기 DL은 상기 컴퓨팅 환경으로의 컨텐츠의 안전한 배포를 촉진시키기 위해 디지털 권한 관리 방법에 사용되는 것을 특징으로 하는 컴퓨팅 라이브러리의 배포 방법.And the DL is used in a digital rights management method to facilitate secure distribution of content to the computing environment.
KR1020077010885A 2004-10-12 2005-09-21 Runtime dynamic linking Withdrawn KR20070067207A (en)

Applications Claiming Priority (12)

Application Number Priority Date Filing Date Title
US10/964,315 2004-10-12
US10/964,232 US7533376B2 (en) 2004-10-12 2004-10-12 Dynamic linking in constrained environment
US10/964,315 US20060080681A1 (en) 2004-10-12 2004-10-12 Mechanism to extend functionality in a restricted computing environment
US10/965,361 2004-10-12
US10/964,231 US7444625B2 (en) 2004-10-12 2004-10-12 Concurrent code loading mechanism
US10/965,361 US20060080680A1 (en) 2004-10-12 2004-10-12 Platform independent dynamic linking
US10/964,272 US20060080683A1 (en) 2004-10-12 2004-10-12 Mechanism to circumvent restrictions of pre-written code components
US10/964,231 2004-10-12
US10/964,272 2004-10-12
US10/964,232 2004-10-12
US11/039,270 2005-01-19
US11/039,270 US20060080682A1 (en) 2004-10-12 2005-01-19 Run time dynamic linking

Publications (1)

Publication Number Publication Date
KR20070067207A true KR20070067207A (en) 2007-06-27

Family

ID=35462607

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077010885A Withdrawn KR20070067207A (en) 2004-10-12 2005-09-21 Runtime dynamic linking

Country Status (4)

Country Link
EP (1) EP1810135A1 (en)
JP (1) JP2008516324A (en)
KR (1) KR20070067207A (en)
WO (1) WO2006040506A1 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100924647B1 (en) * 2008-08-07 2009-11-02 주식회사 케이티 Mobile platform runtime dynamic linking library management method and system
KR20150052068A (en) * 2012-09-05 2015-05-13 마이크로소프트 코포레이션 Generating native code from intermediate language code for an application
KR20160002888A (en) * 2013-05-08 2016-01-08 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 Out-of-band framework libraries within applications

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9069575B2 (en) 2008-03-25 2015-06-30 Qualcomm Incorporated Apparatus and methods for widget-related memory management
US9110685B2 (en) 2008-03-25 2015-08-18 Qualcomm, Incorporated Apparatus and methods for managing widgets in a wireless communication environment
US9269059B2 (en) 2008-03-25 2016-02-23 Qualcomm Incorporated Apparatus and methods for transport optimization for widget content delivery
US9600261B2 (en) 2008-03-25 2017-03-21 Qualcomm Incorporated Apparatus and methods for widget update scheduling
EP2615544A1 (en) * 2011-01-26 2013-07-17 Job and Esther Technologies Ltd. A method for implementation of a software platform
CN104025046B (en) * 2012-01-10 2017-06-20 英特尔公司 Method, device and the computing device for associating are connect with the ISA Bridge recalled to is utilized
DE102017204218A1 (en) * 2017-03-14 2018-09-20 Robert Bosch Gmbh Method and device for securing a device
JP6352486B2 (en) * 2017-04-12 2018-07-04 インテル コーポレイション ISA bridging by callback
CN112363780A (en) * 2020-11-29 2021-02-12 王志平 Method for realizing dynamic link of software
CN113127055B (en) * 2021-05-13 2025-04-11 腾讯数码(深圳)有限公司 Dynamic link library file generation method, application verification method, device and equipment
CN114217880A (en) * 2021-12-23 2022-03-22 湖南小算科技信息有限公司 Method for breaking through android ghost process limitation

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2143488C (en) * 1995-02-27 2000-01-11 Robert Paul Duncan Dynamic link libraries without linker or loader support
US6363436B1 (en) * 1997-01-27 2002-03-26 International Business Machines Corporation Method and system for loading libraries into embedded systems
US20040025165A1 (en) * 2002-08-05 2004-02-05 Giuseppe Desoli Systems and methods for extending operating system functionality for an application

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100924647B1 (en) * 2008-08-07 2009-11-02 주식회사 케이티 Mobile platform runtime dynamic linking library management method and system
KR20150052068A (en) * 2012-09-05 2015-05-13 마이크로소프트 코포레이션 Generating native code from intermediate language code for an application
US10795652B2 (en) 2012-09-05 2020-10-06 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application
KR20160002888A (en) * 2013-05-08 2016-01-08 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 Out-of-band framework libraries within applications

Also Published As

Publication number Publication date
WO2006040506A1 (en) 2006-04-20
JP2008516324A (en) 2008-05-15
EP1810135A1 (en) 2007-07-25

Similar Documents

Publication Publication Date Title
JP5090169B2 (en) Platform independent dynamic linking
US7444625B2 (en) Concurrent code loading mechanism
US7533376B2 (en) Dynamic linking in constrained environment
US20060080680A1 (en) Platform independent dynamic linking
US20060080681A1 (en) Mechanism to extend functionality in a restricted computing environment
US8291375B2 (en) Attribute-based component programming system and methodology for object-oriented languages
EP3134809B1 (en) Manual refinement of specialized classes
US7730472B2 (en) Dynamic linking of modules in a pre-operating system environment
US6834391B2 (en) Method and apparatus for automated native code isolation
KR20070067207A (en) Runtime dynamic linking
EP3207453B1 (en) Api versioning independent of product releases
US20060080683A1 (en) Mechanism to circumvent restrictions of pre-written code components
US20080141219A1 (en) Multiple inheritance facility for java script language
Spear et al. Solving the starting problem: device drivers as self-describing artifacts
Naik et al. Every Stuff You Need for Development of Decentralized App Using Blockchain Technology:(Covers Hardhat, React. js and Ethers. js)
US20150052514A1 (en) Method and computer system of distributing a computer program product
Draschbacher A2P2-an android application patching pipeline based on generic changesets
Vermeir MAUI
US11972237B1 (en) Member invocation declarative interception
Tapadiya NET Programming: A Practical Guide Using C
HK1108954A (en) Run tune dynamic linking
Jecan Java 9 Modularity Revealed
HK1108953A (en) Platform-independent dynamic linking
Daubaris Towards Adaptive WebAssembly Applications: Leveraging Capabilities of the Execution Environment
Palod et al. Analysis of Boot Time Reduction techniques in Linux

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20070514

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
PC1203 Withdrawal of no request for examination
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid