KR100518584B1 - 공유 라이브러리 시스템 및 상기 시스템 구축 방법 - Google Patents

공유 라이브러리 시스템 및 상기 시스템 구축 방법 Download PDF

Info

Publication number
KR100518584B1
KR100518584B1 KR10-2003-0047538A KR20030047538A KR100518584B1 KR 100518584 B1 KR100518584 B1 KR 100518584B1 KR 20030047538 A KR20030047538 A KR 20030047538A KR 100518584 B1 KR100518584 B1 KR 100518584B1
Authority
KR
South Korea
Prior art keywords
library
address
data section
shared
symbol
Prior art date
Application number
KR10-2003-0047538A
Other languages
English (en)
Other versions
KR20050007906A (ko
Inventor
김운기
박종일
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR10-2003-0047538A priority Critical patent/KR100518584B1/ko
Priority to TW093119881A priority patent/TWI243306B/zh
Priority to CNA2004100635824A priority patent/CN1577268A/zh
Priority to JP2004205174A priority patent/JP2005032259A/ja
Priority to US10/889,431 priority patent/US20050010911A1/en
Publication of KR20050007906A publication Critical patent/KR20050007906A/ko
Application granted granted Critical
Publication of KR100518584B1 publication Critical patent/KR100518584B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

공유 라이브러리 시스템 및 상기 시스템 구축 방법이 개시된다. 본 발명에 따른 공유 라이브러리 시스템 및 상기 시스템 구축 방법에 따르면, 런타임 로더 및 컴파일러를 수정하고, 라이브러리 빌더를 통해 기존 공유 라이브러리의 형식을 변경한다. 이에 더불어 데이터 섹션 베이스 레지스터와 데이터 섹션의 GOT 테이블을 이용함으로써 MMU 없이도 공유 라이브러리의 사용이 가능하도록 한다.

Description

공유 라이브러리 시스템 및 상기 시스템 구축 방법{Shared library system and method for constructing the system}
본 발명은 다수의 응용 프로그램이 하나의 라이브러리 인스턴스를 공유하는 공유 라이브러리 시스템에 관한 것으로, 특히, MMU(Memory Management Unit)가 없으면서도 공유 라이브러리의 사용이 가능한 공유 라이브러리 시스템 및 상기 시스템 구축 방법에 관한 것이다.
일반적으로, 라이브러리는 코드 자체와 그 코드에서 사용하는 데이터를 위한 데이터 섹션으로 구성된다. 라이브러리는 여러 응용 프로그램이 하나의 라이브러리 코드를 공유해서 사용하는지의 여부에 따라서 비 공유 라이브러리(static library)와 공유 라이브러리(shared library)로 나눌 수 있다. 이 중, 비 공유 라이브러리(보통 *.a 형태의 파일)는 링킹 단계에서 라이브러리 코드를 응용 프로그램으로 복사해서 사용하는 형태의 라이브러리이다. 반면, 공유 라이브러리(보통 *.so 형태의 파일)는 런타임에 라이브러리 코드 인스턴스가 응용 프로그램들 사이에 공유되어 사용될 수 있도록 제작된 라이브러리이다. 이처럼, 공유 라이브러리를 이용하는 시스템에서는 링킹 단계에서 라이브러리 코드의 복사가 일어나지 않는다. 공유 라이브러리의 목표는 라이브러리의 코드는 공유하면서 데이터 섹션은 각 프로그램마다 독립적으로 제공해주는 것이다. 따라서 공유 라이브러리를 사용하면 램 및 플래쉬 크기를 상당히 줄일 수 있다.
공유 라이브러리는 완전한 링킹(complete linking), 특히 심볼 주소의 바인딩이 일어나는 시기에 따라 정적 연결(statically linked) 공유 라이브러리와 동적 연결(dynamically linked) 공유 라이브러리로 나뉜다. 보통 공유 라이브러리라 함은 동적 연결 공유 라이브러리를 말한다. 동적 연결 공유 라이브러리에서는 실제적인 심볼 주소 바인딩이 런타임에 프로그램을 로딩하면서 일어난다. 때문에, 응용 프로그램이 빌드(build)된 이후에 라이브러리의 구현이 변경되어도 응용 프로그램을 새로 빌드할 필요가 없는 장점이 있다. 그러나, 그 대신 런타임에 심볼을 바인딩하기 위한 오버헤드가 발생한다. 반면, 정적 연결 공유 라이브러리에서는 실제적인 심볼 주소 바인딩이 링킹 타임에 일어난다. 따라서 이 경우 라이브러리가 변경되면 그 라이브러리를 참조하는 모든 응용 프로그램을 다시 컴파일 하여야 하는 불편함이 있지만, 동적 연결 공유 라이브러리에서와 같은 런타임 오버헤드가 매우 적은 장점이 있다.
한편, MMU가 존재하는 시스템에서는 가상 메모리 매핑(Mapping)을 통해서 여러 프로세스가 하나의 페이지를 공유하는 것이 가능하므로, 공유 라이브러리를 비교적 쉽게 이용할 수 있다. 그러나, MMU가 없는 시스템에서는 여러 프로세스가 하나의 페이지를 공유하는 것이 불가능하므로, 공유 라이브러리의 이용이 어렵다. 그러나, uCLinux와 같이 MMU를 이용하지 않는 시스템이 많이 이용되고 있으며, 이처럼 MMU 없는 시스템에서도 메모리의 효율적인 사용을 위한 공유 라이브러리의 지원이 요구된다.
본 발명이 이루고자 하는 제1기술적 과제는 MMU 없이도 정적 연결 공유 라이브러리(statically linked shared library)의 사용이 가능한 MMU 없는 공유 라이브러리 시스템을 제공하는 데 있다.
본 발명이 이루고자 하는 제2기술적 과제는 상기 MMU 없는 공유 라이브러리 시스템 구축 방법을 제공하는 데 있다.
본 발명이 이루고자 하는 제3기술적 과제는 상기 MMU 없는 공유 라이브러리 시스템에서 공유 라이브러리를 사용하는 방법을 제공하는 데 있다.
본 발명이 이루고자 하는 제4기술적 과제는 상기 MMU 없는 공유 라이브러리 시스템에서 공유 라이브러리를 빌드하는 방법을 제공하는 데 있다.
본 발명이 이루고자 하는 제5기술적 과제는 상기 MMU 없는 공유 라이브러리 시스템 구축 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록된 기록 매체를 제공하는 데 있다.
본 발명이 이루고자 하는 제6기술적 과제는 상기 공유 라이브러리 사용 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록된 기록 매체를 제공하는 데 있다.
본 발명이 이루고자 하는 제7기술적 과제는 상기 공유 라이브러리 빌드 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록한 기록 매체를 제공하는 데 있다.
상기 제1과제를 이루기 위해, 본 발명에 따른 MMU 없는 공유 라이브러리 시스템은 응용 프로그램의 데이터 섹션 시작 주소 또는 공유 라이브러리에서 응용 프로그램을 위해 할당한 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터, 소스 코드 형태의 프로그램 및 라이브러리들을 PIC(Position Independent Code) 옵션으로 컴파일하고, 라이브러리들 각각이 프로그램에 할당한 데이터 섹션의 시작 주소가 데이터 섹션 베이스 레지스터에 설정되도록 라이브러리들 각각에 포함되는 함수들을 정의하는 컴파일러, 컴파일된 라이브러리들을 이용하여 각 라이브러리들마다, 여러 응용 프로그램들에게 공유되는 코드 및 데이터를 심볼로서 포함하는 공유 라이브러리 및 프로그램과의 심볼 주소 바인딩을 위해 심볼들의 주소 정보를 갖는 주소 라이브러리를 생성하는 공유 라이브러리 빌더, 컴파일된 프로그램의 코드, 데이터 및 공유 라이브러리들에서 응용 프로그램을 위해 할당된 데이터 섹션 시작 주소가 정의된 데이터 섹션 테이블을 링커 스크립트에 따라 배치하여 컴파일된 프로그램을 실행파일 형태의 응용 프로그램으로 만드는 응용 프로그램 빌더 및 응용 프로그램 및 공유 라이브러리들을 메모리에 적재하며, 공유 라이브러리들을 메모리에 적재할 때, 심볼의 주소 정보에 포함된 심볼의 재배치 타입에 따라 필요한 주소 재배치를 수행한 결과에 따라 심볼의 최종 주소를 결정하는 런타임 로더를 포함하며, 데이터 섹션은 전역 데이터에 대한 포인터 테이블인 GOT(Global Offset Table)과 전역 데이터를 포함하는 데이터 영역을 포함하며 데이터 섹션 시작 주소는 GOT 시작 주소이며, 응용 프로그램은 GOT를 이용하여 전역 데이터를 참조하는 것이 바람직하다.
상기 제2과제를 이루기 위해, 응용 프로그램이 참조하는 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터를 구비하는 본 발명에 따른 MMU 없는 공유 라이브러리 시스템 구축 방법은 공유할 라이브러리를 PIC 옵션으로 컴파일하고, 컴파일 시 공유할 라이브러리의 각 함수에, 실행할 프로그램을 위해 할당된 데이터 섹션의 시작 주소가 데이터 섹션 베이스 레지스터에 설정되는 것을 정의하는 (a)단계, 컴파일된 라이브러리들을 이용하여 각 라이브러리들마다 실제 코드와 데이터가 존재하는 공유 라이브러리와 응용 프로그램과의 심볼 주소 바인딩을 위해 심볼들의 주소 정보만을 가지는 주소 라이브러리를 생성하는 (b)단계, PIC 옵션을 주어 프로그램을 컴파일하는 (c)단계, 컴파일된 프로그램의 코드, 데이터 섹션 및 공유 라이브러리들에서 응용 프로그램을 위해 할당된 데이터 섹션 시작 주소를 나타내는 데이터 섹션 테이블을 링커 스크립트에 따라 배치하여 실행파일 형태의 응용 프로그램으로 만드는 (d)단계 및 응용 프로그램 수행을 위해 빌드된 공유 라이브러리들을 메모리에 적재하는 (e)단계를 포함하는 것이 바람직하다.
상기 제3과제를 이루기 위해, 응용 프로그램이 참조하는 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터를 구비하는 MMU 없는 공유 라이브러리 시스템에서 응용 프로그램이 메모리에 적재된 공유 라이브러리를 이용하는 방법은 응용 프로그램이 공유 라이브러리의 함수를 호출하면 공유 라이브러리에서 응용 프로그램을 위해 할당된 데이터 섹션의 시작 주소를 데이터 섹션베이스 레지스터에 설정하는 (a)단계 및 응용 프로그램은 데이터 섹션 베이스 레지스터에 설정된 주소에 접근하여 호출한 함수를 수행하는 (b)단계를 포함하는 것이 바람직하다.
상기 제4과제를 이루기 위해, MMU 없는 공유 라이브러리 시스템에서 본 발명에 따른 공유 라이브러리의 빌드 방법은 PIC 옵션으로 공유할 라이브러리를 컴파일하는 (a)단계, 공유할 라이브러리에 고유의 번호를 ID로 할당하여 라이브러리 명을 재설정하는 (b)단계, 컴파일된 라이브러리로부터 포함된 여러 개의 오브젝트 파일들을 하나의 오브젝트 파일로 재배치하는 (c)단계, 타겟 시스템에 맞게 (c)단계의 오브젝트 파일의 포맷을 변환하고, 포맷 변환된 오브젝트 파일을 공유할 코드와 데이터가 존재하는 공유 라이브러리로서 생성하는 (d)단계 및 컴파일된 라이브러리 및 공유 라이브러리로부터 심볼들의 위치 정보 및 주소 정보를 각각 추출하여, 오브젝트별로 심볼의 주소가 정의된 주소 라이브러리를 생성하는 (e)단계를 포함하는 것이 바람직하다.
이하, 본 발명에 따른 공유 라이브러리 시스템 및 시스템 구축 방법을 첨부한 도면들을 참조하여 다음과 같이 설명된다.
먼저, 본 발명의 공유 라이브러리 시스템은 정적 연결 공유 라이브러리(statically linked shared library)를 사용하는 것으로 한다. 그 이유는 내장형 시스템에서는 응용 프로그램을 새로 빌드하는 불편함이 존재하더라도 런타임의 오버헤드를 줄이는 것이 더 중요하기 때문이다.
도 1은 본 발명에 따른 MMU 없는 공유 라이브러리 시스템의 일실시예를 개략적으로 나타내는 블록도이다. 도 1을 참조하여, 본 발명에 따른 공유 라이브러리 시스템은 컴파일러(100), 라이브러리 빌더(120), 런타임 로더(140) 및 데이터 섹션 베이스 레지스터(160)를 포함하여 구성되며, 설명의 편의를 위해 메인 메모리(180)를 함께 도시된다.
도 1을 참조하여, 컴파일러(100)는 소정의 옵션 즉, PIC(Position Independent Code) 옵션으로 실행할 프로그램(102) 및 공유할 라이브러리들(104)을 컴파일하여 컴파일된 프로그램(106) 및 컴파일된 라이브러리들(108)을 만든다. 실제로 프로그램(102) 및 라이브러리들(104)의 소스코드를 컴파일할 때, -fpic 옵션을 주면 쉽게 PIC 코드를 생성할 수 있다. 이처럼, 컴파일러(100)는 PIC 옵션으로 실행할 프로그램(102) 및 라이브러리들(104)을 컴파일함으로써 MMU가 없는 공유 라이브러리 시스템에서 라이브러리가 적재될 메모리의 주소를 고정할 수 없게 되는 문제를 해결할 수 있다. 즉, PIC는 모든 함수의 호출이 PC에 연계된(Pointer Counter-relative) 브랜치(branch)나 점프(jump)로 이루어지기 때문에 코드가 메모리에 적재된 위치에 상관없이 실행 될 수 있어서 라이브러리가 적재될 주소를 고정할 필요가 없다. 또한, 컴파일러(100)는 라이브러리들(104)을 컴파일할 때, 라이브러리의 각 함수의 프롤로그(prologue)에서, 프로그램(102)을 위해 할당된 데이터 섹션의 시작 어드레스가 데이터 섹션 베이스 레지스터(160)에 세팅되도록 컴파일한다. 그리고, 컴파일러(100)는 각 공유 라이브러리에 고유의 번호를 ID로 할당하고, 각 라이브러리의 이름을 libID.so로 설정하여 컴파일한다. 예컨대, 공유 라이브러리가 3개인 경우 각 라이브러리의 이름은 lib1.so, lib2.so, lib3.so로 각각 설정된다.
공유 라이브러리 빌더(120)는 컴파일러(100)에 의해 컴파일된 라이브러리들(108)을 이용하여 각 공유 라이브러리들마다 공유 라이브러리(124a) 및 주소 라이브러리(124b)를 생성한다. 여기서, 공유 라이브러리(124a)는 실제 코드와 데이터 섹션이 존재하는 라이브러리로써, 런타임 로더(140)에 의해 메인 메모리(180)에 적재되어 여러 응용 프로그램들에게 공유되는 라이브러리이다. 여기서, 데이터 섹션에는 전역 데이터에 대한 포인터 테이블인 GOT(Global Offset Table)와 데이터 영역을 포함하며, GOT는 데이터 영역 직전에 위치한다. 이 때, 공유 라이브러리(124a)는 여러 개의 오브젝트 파일들로 이루어진 컴파일된 공유 라이브러리가 하나의 오브젝트 파일로 재배치된 것이다. 주소 라이브러리(124b)는 실제 코드와 데이터가 없이 심볼들의 주소 정보만을 가지고 있으며, 응용 프로그램과의 심볼 주소 바인딩을 위하여 존재하는 라이브러리이다. 여기서, 심볼은 오브젝트에 포함된 함수 이름 및 전역 변수의 이름을 포함한다. 주소 라이브러리(124b)는 메인 메모리(180)에 적재되는 것이 아니라, 응용 프로그램을 빌드할 때에만 사용된다. 이 때, 심볼 주소에는 런타임 로더(140)가 공유 라이브러리(124a)를 메인 메모리(180)에 적재시 필요한 정보 예컨대, 어떤 심볼들이 응용 프로그램 오브젝트 내의 심볼인가 또는 공유 라이브러리 내의 심볼인가 그리고, 메인 메모리(180)에 적재시 주소 재배치 등에 대한 정보를 포함하고 있어야 한다.
응용 프로그램 빌더(130)는 링커 스크립트에 따라 응용 프로그램의 코드, 데이터 및 데이터 섹션 테이블을 배치하여 컴파일된 응용 프로그램을 실행파일 형태의 응용 프로그램(106)으로 만든다. 여기서, 데이터 섹션 테이블은 공유 라이브러리(124a)들이 실행할 프로그램(102)을 위해 각각 할당한 데이터 섹션의 시작 주소들을 나타내는 테이블이다. 본 발명에서 링커 스크립트는 각 라이브러리의 데이터 섹션 시작 주소를 나타내는 데이터 섹션 테이블이 데이터 섹션의 직전에 위치하도록 정의된다. 본 발명에 따른 링커 스크립트에 대해서는 도 6을 참조하여 상세히 설명될 것이다.
런타임 로더(140)는 응용 프로그램(106) 및 공유 라이브러리(124a)들을 메인 메모리(180)에 적재한다. 런타임 로더(140)가 공유 라이브러리(124a)들을 메인 메모리(180)에 적재할 때, 심볼 주소 정보에 포함된 심볼의 재배치 타입에 따라 필요한 주소 재배치를 수행한 후, 최종적으로 심볼의 주소를 결정한다. 도 4를 참조하여, 심볼의 주소 재배치에 대한 상세한 설명이 이루어질 것이다.
데이터 섹션 베이스 레지스터(160)는 컴파일된 응용 프로그램(106)의 데이터 섹션 시작 주소 또는 메인 메모리(180)에 적재된 공유 라이브러리들의 데이터 섹션 시작 주소가 설정된다. 전술된 바와 같이, 데이터 섹션은 전역 데이터 영역 직전에 GOT가 위치하는 형태이며 따라서, 데이터 섹션의 시작 주소는 GOT의 시작 주소이다. 데이터 섹션 베이스 레지스터(160)로 ARM의 sl 레지스터(stack limit register)를 이용할 수 있다. 응용 프로그램이 라이브러리를 참조하지 않고 자신의 데이터 섹션을 참조하여 프로그램 실행 중이면, 데이터 섹션 베이스 레지스터(160)에는 응용 프로그램(106)의 데이터 섹션 시작 주소가 설정된다. 그러다, 응용 프로그램이 공유 라이브러리(124a)에 정의된 함수를 호출하면, 호출된 함수의 프롤로그 정의에 따라, 공유 라이브러리(124a)가 응용 프로그램(106)을 위해 할당한 데이터 섹션의 시작 주소가 데이터 섹션 베이스 레지스터(160)에 설정된다. 이처럼, 데이터 섹션 베이스 레지스터(160)를 이용함으로써, MMU 없이도 공유 라이브러리(124a)는 각 응용 프로그램마다 독립적인 데이터 섹션을 보장해 줄 수 있다. 즉, MMU가 없는 시스템에서 PIC를 이용하면 공유 라이브러리의 코드 공유는 가능하지만, 각 응용 프로그램에게 독립적인 데이터 섹션을 제공해 주는 것은 여전히 불가능하다. PIC 코드에서는 모든 정적 데이터(static data)들은 PC에 연계되어 접근하기 때문에 코드와 데이터 섹션의 상대적인 오프셋이 일정해야 하며 따라서, 여러 응용 프로그램을 위해서 할당된 각 데이터 섹션들과 라이브러리 코드의 오프셋이 일정하도록 만들어야 한다. 한편, 본 발명에 따른 공유 라이브러리 시스템에서는, 응용 프로그램이 공유 라이브러리의 함수를 수행시키기 전, 데이터 섹션 베이스 레지스터(160)에 응용 프로그램이 참조할 데이터 섹션 주소가 로드되도록 컴파일한다. 따라서, 여러 응용 프로그램을 위해서 할당된 각 데이터 섹션들과 라이브러리 코드의 오프셋이 일정해야 한다는 제약 없이, 여러 응용 프로그램에 독립적인 데이터 섹션을 제공해 줄 수 있다. 즉, 응용 프로그램이 자신을 위해 할당된 데이터 섹션에 접근할 때, 데이터 섹션 베이스 레지스터(160)의 값을 기준으로 접근하게 만듦으로 각 응용 프로그램마다 독립적인 데이터 섹션을 보장해 줄 수 있다.
한편, 데이터 섹션 베이스 레지스터를 이용함으로써 정적 데이터들을 응용 프로그램별로 독립적으로 제공해 주는 것은 가능하나, 전역 데이터(global data)들을 코드 재배치 없이 접근하는 것이 어렵다. 여기서, 전역 데이터는 응용 프로그램과 라이브러리 사이, 또는 라이브러리들 사이에 공유되어 사용되는 데이터를 말한다. 정적 연결 공유 라이브러리에서는 전역 데이터의 주소가 로딩 단계에서 결정되므로 프로그램을 로드할 때 전역 데이터 참조를 재배치해야 한다. 이를 위해, 전역 변수에 대한 포인터 테이블인 GOT를 이용한다. 즉, 데이터 섹션에 할당된 포인터를 이용하여 간접적으로 전역 데이터를 참조하도록 코드를 생성하고, 로드할 때 전역 변수의 데이터가 최종적으로 결정되면 그에 따라 GOT의 해당 항목을 재배치하도록 한다. GOT는 전술된 바와 같이 데이터 섹션에 존재하므로 코드 영역의 재배치와는 무관하게 이루어질 수 있다.
도 2는 도 1에 도시된 MMU 없는 공유 라이브러리 시스템 구축 과정 및 공유 라이브러리의 이용 방법의 일예를 나타내는 흐름도이다.
도 1 및 도 2를 참조하여, 컴파일러(100)는 공유할 라이브러리들(104)을 컴파일한다(제200단계). 이 때, 컴파일러(100)는 PIC 옵션으로 공유할 라이브러리들(104)을 컴파일하며, 각 라이브러리에 고유의 번호를 ID로 할당하여 각 라이브러리의 이름을 libID.so로 설정한다. 이처럼, 각 라이브러에 할당된 고유의 번호는 응용 프로그램의 데이터 섹션 테이블에서 각 라이브러리가 자신을 위해 할당한 데이터 섹션의 시작 주소를 찾는 데 이용된다. 이에 대해서는 도 6을 참조하여 상세히 설명될 것이다. 또한, 컴파일러(100)는 공유 라이브러리의 각 함수의 프롤로그에서 응용 프로그램을 위해 할당된 데이터 섹션의 시작 주소가 데이터 섹션 베이스 레지스터(160)에 설정되도록 컴파일한다.
제200단계 후에, 라이브러리 빌더(120)는 컴파일된 라이브러리들(108)을 이용하여 각 라이브러리들마다 실제 코드와 데이터가 존재하는 공유 라이브러리(124a)와 응용 프로그램과의 심볼 주소 바인딩을 위한 심볼들의 주소 정보만을 가지는 주소 라이브러리(124b)를 생성한다(제205단계).
제205단계 후에, 컴파일러(100)는 응용 프로그램(102)을 컴파일한다(제210단계). 컴파일러(100)는 응용 프로그램(102)을 공유 라이브러리들(104)과 마찬가지로 PIC 옵션을 주어 컴파일한다.
제210단계 후에, 응용 프로그램 빌더(130)는 링커 스크립트에 따라 응용 프로그램의 코드, 데이터 및 데이터 섹션 테이블을 배치하여 컴파일된 프로그램을 실행파일 형태의 응용 프로그램(106)으로 만든다(제215단계).
제215단계 후에, 런타임 로더(140)는 빌드된 공유라이브러리(124a)들 및 빌드된 응용 프로그램(106)을 메인 메모리(180)에 적재한다(제220단계). 런타임 로더(140)가 공유 라이브러리(124a)들을 메인 메모리(180)에 적재할 때는, 주소 라이브러리(124b)의 심볼 주소에 포함된 심볼의 재배치 타입에 따라 필요한 주소 재배치를 수행한 후, 최종적으로 심볼의 주소를 결정한다.
제215단계 후에, 응용 프로그램(106)을 수행한다(제225단계). 응용 프로그램이 자신의 데이터 섹션을 참조하여 프로그램을 수행 중이면, 데이터 섹션 베이스 레지스터(160)는 응용 프로그램(106)의 데이터 섹션 시작 주소 즉, GOT 시작 주소로 설정되어 있다. 그러던 중, 응용 프로그램(106)이 공유 라이브러리(124a)의 함수를 호출하면(제230단계), 공유 라이브러리 함수의 프롤로그 정의에 따라 데이터 섹션베이스 레지스터(160)에는 공유 라이브러리(124a)에서 응용 프로그램(106)을 위해 할당한 데이터 섹션의 시작 주소가 설정된다(제235단계). 응용 프로그램(106)은 데이터 섹션 베이스 레지스터(160)에 설정된 주소에 의해 자신을 위해 할당된 데이터 섹션으로의 접근이 가능하다. 응용 프로그램(106)은 데이터 섹션에 포함되는 전역 데이터에 대한 포인터 테이블인 GOT를 이용 간접적으로 전역 데이터를 참조하며 공유 라이브러리(124a)에서 호출한 함수를 수행한다(제240단계). 제235 및 제240단계에서 수행되는 동작의 보다 상세한 설명은 도 7을 참조하여 설명된다.
이상에서 설명된 바와 같이, 본 발명에서는 MMU 없이 공유 라이브러리를 이용하기 위해, 런타임 로더 및 컴파일러를 수정하고, 라이브러리 빌더를 통해 기존 공유 라이브러리의 형식을 변경한다. 이에 더불어 데이터 섹션 베이스 레지스터와 데이터 섹션의 GOT 테이블을 이용함으로써 MMU 없이도 공유 라이브러리의 사용이 가능하도록 한다. 즉, MMU를 사용하지 않는 시스템의 경우, 라이브러리가 적재될 주소를 고정할 수 없고, 응용 프로그램에 독립적인 데이터 섹션을 할당할 수 없고, 전역 데이터를 코드 재배치 없이 접근하는 것이 불가능하다는 이유로 공유 라이브러리를 사용하는 것이 어려웠다. 그러나, 본 발명에 따른 공유 라이브러리 시스템은 모든 함수의 호출이 PC 연계된 브랜치 또는 점프로 이루어지도록 PIC를 적용하여 컴파일함으로써 라이브러리가 적재될 주소를 고정하지 않아도 된다. 또한, 응용 프로그램이 라이브러리 코드를 수행시키기 전, 데이터 섹션 베이스 레지스터에 응용 프로그램이 참조할 데이터 섹션의 시작 주소가 로드되게 컴파일함으로써, 각 응용 프로그램마다 독립적인 데이터 섹션을 보장해 줄 수 있다. 또한, 데이터 섹션에 할당된 포인터를 이용하여 간접적으로 전역 데이터를 참조하도록 코드를 생성하고, 로드할 때 전역 변수의 데이터가 최종적으로 결정되면 GOT의 해당 항목을 재배치한다. 응용 프로그램은 데이터 섹션의 GOT를 이용하여 전역 데이터를 접근하므로 코드 재배치 없는 접근이 가능하다. 결국, 본 발명에 따른 공유 라이브러리 시스템은 MMU를 사용하지 않는 시스템에서 공유 라이브러리를 사용하기 어려운 3가지 원인을 해결하여 MMU 없이도 공유 라이브러리를 사용할 수 있다.
도 3은 라이브러리 빌더(120)에 의해 공유 라이브러리가 빌드되는 과정을 나타내는 도면이다.
도 1 및 도 3을 참조하여, libc_temp.a는 컴파일러(100)에 의해 컴파일된 공유 라이브러리이며, C 라이브러리에 포함되는 오브젝트들의 아카이브를 나타낸다. 이 아카이브 안의 오브젝트 파일들은 컴파일러(100)에 의해 모든 오브젝트의 프롤로그에 응용 프로그램(106)이 참조하는 데이터 섹션의 시작 주소를 데이터 섹션 베이스 레지스터에 설정하는 코드가 포함되도록 컴파일된 상태이다.
링커(300)는 libc.temp.a 라이브러리에 포함된 여러 개의 오브젝트 파일들을 하나의 오브젝트 파일로 재배치한 라이브러리 lib1.so.gdb를 생성한다. 이 때, lib.so.gdb의 파일 포맷은 ELF이며, 포맷 변환 유틸리티(310)에 의해 ELF 파일 포맷은 타겟 시스템에 맞게 적절히 재배치되어야 한다. 예컨대, 타겟 시스템이 uCLinux라면 포맷 변환 유틸리티(310)는 ELF 포맷 파일 lib.so.gdb를 FLAT 포맷 파일 lib1.so로 변환한다. 이처럼, 타겟 시스템에 맞게 파일 포맷이 변환된 라이브러리를 공유 라이브러리로 한다. 전술된 바와 같이, 공유 라이브러리는 실제 코드와 데이터가 존재하는 라이브러리로써, 런타임 로더(140)에 의해 메인 메모리(180)에 적재되어 여러 응용 프로그램들에게 공유되는 라이브러리이다.
한편, 본 발명은 정적 연결 공유 라이브러리 시스템이므로, 응용 프로그램(106)과 정적으로 링킹될 대상이 필요하다. 이를 위해, 젠심(gensym) 유틸리티(230)는 실제 코드와 데이터는 없고, 응용 프로그램과의 심볼 주소 바인딩을 위해 심볼들의 주소 정보만을 가지는 파일 libc.a를 생성한다. 여기서, libc.a는 라이브러리 코드를 제외한 엑스퍼트(export) 심볼들만 정의한 심볼 주소 라이브러리이다. 이 때, 중요한 점은 각 심볼들은 적절히 여러 오브젝트(*.o)에 나누어서 정의되어야 한다. 만약 모든 심볼들이 하나의 오브젝트 안에서 정의되면 라이브러리 내의 모든 심볼들이 한 모듈에 포함되어 링크의 단위가 전체 심볼들이 되기 때문에 원치 않는 중복 선언 오류가 생길 수 있다. 따라서, 젠심 유틸리티(320)는 이들 심볼들을 여러 오브젝트 모듈로 나누어 정의하기 위해 하나의 오브젝트 파일로 재배치되기 이전의 아카이브 libc_temp.a로부터 필요한 정보 즉, 심볼이 어느 오브젝트 파일에 속해 있는가를 추출한다. 즉, 젠심 유틸리티(320)는 C 라이브러리에서 심볼의 주소는 lib1.so.gdb로부터 얻지만 심볼이 정의되어야 하는 오브젝트 모듈에 관한 정보는 재배치되기 이전의 아카이브인 libc_temp.a로부터 얻어, 전역 심볼들을 libc.a에서와 같이 여러 오브젝트 모듈로 나누어 정의한다. 여기서, 심볼의 주소는 그 심볼들의 lib1.so.gdb 내에서의 오프셋을 나타낸다. 결국, 심볼 주소 라이브러리 libc.a의 내용은 C 라이브러리가 엑스퍼트하는 심볼 이름과 그 심볼들의 lib1.so.gdb 내에서의 오프셋이다. libc.a는 이외의 어떠한 코드도 포함하지 않는다. 따라서, C 라이브러리를 참조하는 응용 프로그램은 libc.a가 링크될 때 정의된 심볼의 오프셋만을 참조하여 라이브러리 lib1.so와 링킹된다. 즉, 코드의 복사는 일어나지 않고 심볼의 주소 즉, 심볼의 오프셋만 바인딩된다. 한편, libc.a에 정의된 심볼 주소는 런타임 라이브러리가 메인 메모리(180)의 어느 주소에 적재되느냐에 따라 런타임 로더에 의해 재배치되어야 한다. 이를 위해, 어떤 심볼들이 응용프로그램 오브젝트 내의 심볼인가 또는 공유 라이브러리 내의 심볼인가 등에 관한 심볼 정보가 심볼 주소에 포함되도록 심볼 주소는 포맷되어야 한다.
도 4는 도 3의 젠심 유틸리티(230)에 의해 정의되는 심볼 주소 포맷의 일예를 나타내는 도면이다.
도 4를 참조하여, 심볼 주소는 32비트(4Byte)로 표현되며 그 중 하위 24비트가 심볼의 실제 주소를 나타낸다. 이러한 경우, 응용 프로그램뿐만 아니라 라이브러리의 전체 크기는 16MB(=224 MB)를 초과할 수 없다. 만약, 라이브러리의 크기가 이러한 제한을 초과하는 경우, 라이브러리를 분할하여야 한다. 24번째 비트에서 29번째 비트까지의 6비트는 심볼이 정의되어 있는 라이브러리의 고유 번호 즉, ID를 나타낸다. 전술된 바와 같이, 이는 컴파일 과정에서 각 라이브러리에 주어진다. 이 경우, 동시에 사용할 수 있는 라이브러리의 개수는 64(=26)개까지이다. 그리고, 상위 2비트는 재배치 타입(relocation type)을 나타내는 비트들로, 재배치 타입은 크게 3가지 종류로 구분된다. 먼저, 제1재배치 타입은 상위 2비트가 00인 경우로, 심볼의 주소가 로딩 시에 수정될 필요가 있는 절대 주소 값임을 나타내며, 주로 데이터 섹션에서 많이 나타난다. 제2재배치 타입은 상위 2비트가 01인 경우로, 심볼의 주소가 GOT 테이블의 위치, 즉 테이터 섹션의 시작주소로 대치되어야 함을 나타낸다. 제3재배치 타입은 상위 2비트가 11인 경우로, 심볼의 주소가 브랜치 명령어의 목적지 주소임을 나타내며, 이는 로딩 시에 결정되는 동적 라이브러리에 대한 함수 호출의 참조 주소를 수정해주기 위한 것이다. 다시 말해, 제1재배치 타입은 간단히 해당하는 부분에서 결정된 메인 메모리의 절대 주소로 재배치하면 된다. 그러나, 제1재배치 타입이 아닌 경우에는 별도의 작업이 필요하다. 즉, 제2재배치 타입의 경우, 할당된 데이터 섹션의 시작 주소 즉, GOT의 시작 주소로 재배치해야, 제3재배치 타입의 경우, 시스템의 브랜치 명령에 맞는 포맷으로 코드의 직접적인 수정이 필요하다. 예컨대, ARM에서는 모든 브랜치 명령어의 상위 8비트가 브랜치 타입을 결정하고 나머지 하위의 24비트가 브랜치 오프셋을 나타내므로, 이러한 재배치 정보를 바탕으로 해당 시스템에 맞게 수정해 줄 수 있다.
한편, 이상에서 설명된 심볼 주소 포맷은 uCLinux 시스템을 위한 FLAT 바이너리의 재배치 테이블(relocation table)의 엔트리들에도 동일하게 적용된다. FLAT 바이너리 재배치 테이블은 도 5에 도시된 바와 같이 데이터 섹션의 바로 다음에 위치하며, FLAT 바이너리의 재배치 테이블의 각 엔트리는 로더에 의해서 재배치될 필요가 있는 코드나 데이터를 가리키고 있다.
한편, 런타임 로더(140)가 일반적으로 수행하는 일은 첫째, 응용프로그램이 참조하는 라이브러리를 메인 메모리(180)로 적재하고, 둘째, 라이브러리에 포함되는 심볼들의 주소를 재배치하고, 셋째, 라이브러리 코드의 공유를 보장하는 것이다. 즉, 여러 응용 프로그램이 동시에 한 라이브러리를 사용할 경우 라이브러리 코드는 오직 하나의 인스턴스만이 메모리에 적재되도록 한다. 런타임 로더(140)가 이러한 역할들을 수행하기 위한 핵심은 GOT 테이블과 재배치 테이블 내에 있는 엔트리들 중 라이브러리로의 참조를 검출해내는 일이다. 이는 도 4에 도시된 심볼과 재배치 엔트리의 주소 포맷으로부터 쉽게 얻을 수 있다. 예컨대, 응용 프로그램은 ID를 0으로 할당하고 공유 라이브러리들은 1부터 시작되는 소정의 일련 번호를 할당하여 구분할 경우, 주소값의 24~29번째 비트 즉, 라이브러의 ID를 나타내는 비트가 모두 0이 아니라면 라이브러리로의 참조임을 쉽게 알 수 있다. 한편, 아직 메인 메모리(180)로 적재되지 않은 라이브러리의 참조가 검출되면 런타임 로더(140)는 해당하는 라이브러리를 메인 메모리(180)에 적재하고 필요한 재배치를 수행한 후, 최종적으로 이들 적재 정보를 바탕으로 심볼들의 주소를 결정하면 된다.
도 6은 컴파일된 응용 프로그램(106)의 링커 스크립트를 보다 자세히 나타낸 도면이다. 도 6을 참조하여, 텍스트(106a)는 함수 코드가 정의된 영역이며, 데이터 섹션 테이블(106b)은 응용 프로그램(106)이 참조하는 공유 라이브러리들 각각에 할당된 데이터 섹션의 시작 주소를 나타내는 테이블이다. 데이터 섹션(106c)에서 GOT(Global Offset Table, 107a)는 전역 변수에 대한 포인터 테이블이며, 제1데이터(107b)는 전역 변수의 데이터가 정의된 영역이며, 제2데이터(107c)는 로컬 변수의 데이터가 정의된 영역이다. 도 6에는 응용 프로그램이 참조하는 공유 라이브러리가 3개인 경우의 데이터 섹션 테이블(106b)을 나타낸다. 도시된 바와 같이, 데이터 섹션 테이블(106b)은 데이터 섹션(106c)의 직전에 위치하며, 각 라이브러리의 이름은 컴파일시 libID.so 형태로 변환된다. 각 공유 라이브러리들은 1, 2, 3, ..의 ID가 주어지며 응용 프로그램 자신도 0의 ID가 할당되며, 이들 ID는 응용 프로그램을 위해 할당된 데이터 섹션의 위치를 알아내는 데 이용된다. 주소의 크기가 4Byte라면, 각 라이브러리가 응용 프로그램을 위해 할당한 데이터 섹션의 주소는 (-4*ID-4)의 주소에서 얻을 수 있다. 예를 들어, ID가 1인 라이브러리의 데이터 섹션은 현재 데이터 섹션 베이스 레지스터(160)가 가리키는 주소에서 8Byte를 뺀 곳에서 얻을 수 있다. 여기서, 현재 데이터 섹션 베이스 레지스터(160)는 응용 프로그램 자신의 데이터 섹션을 가리키며, 설명의 편의를 위해 현재의 데이터 섹션 베이스 레지스터 값을 sl로 한다. 구체적으로, 응용 프로그램(106)의 데이터 섹션 시작 주소 정보 'ptr to app data'는 sl-4의 주소에서 얻을 수 있고, ID가 1인 라이브러리의 데이터 섹션 주소 'ptr to lib1.so data'는 sl-8의 주소에서 얻을 수 있다. 마찬가지로, ID가 2인 라이브러리의 데이터 섹션 주소 'ptr to lib2.so data'는 sl-12의 주소에서, ID가 3인 라이브러리의 데이터 섹션 주소 'ptr to lib3.so data'은 sl-16의 주소에서 각각 얻을 수 있다. 한편, 라이브러리 검색의 편의상 /lib 디렉토리에 libID.so 형태의 라이브러리 이름이 존재하여야 한다. 예컨대, libc에 고유번호 1을 할당하였다면 /lib 디렉토리에 lib1.so라는 이름으로 C 공유 라이브러리 오브젝트 코드가 존재하여야 한다.
도 7은 응용 프로그램이 프로그램 수행 중 공유 라이브러리에 정의된 함수를 호출하는 과정을 설명하기 위한 도면이다.
도 6 및 도 7을 참조하여, 공유 라이브러리 X는 각 응용 프로그램별 데이터 섹션을 가진다. 공유 라이브러리 X에는 응용 프로그램 1 내지 응용 프로그램 Y 각각을 위한 데이터 섹션들(500~510)이 할당되어 있다. 즉, func1과 같은 함수 코드는 각 응용 프로그램이 공유하며, 전역 데이터는 각 응용 프로그램별로 할당된다. 응용 프로그램 1이 자신의 데이터 섹션을 참조하여 프로그램을 수행 중이면, 데이터 섹션 베이스 레지스터(160)는 응용 프로그램의 데이터 섹션의 시작 어드레스 즉, GOT 시작 어드레스가 설정되어 있다. 그러다, 응용 프로그램 1이 라이브러리 X에 정의된 함수 func1을 호출(call)하면, func1의 프롤로그(520)의 'push sl' 명령에 따라 데이터 섹션 베이스 레지스터(160)에 현재 설정된 데이터는 다른 저장공간에 저장되고, 'set sl ...' 명령에 따라 응용 프로그램은 자신의 데이터 섹션 테이블(106)을 참조하여 공유 라이브러리 X에서 응용 프로그램 1을 위해 할당된 데이터 섹션(500)의 시작 주소를 얻어 데이터 섹션 레지스터(160)에 설정한다. 또한, func1의 수행이 완료되면 'pool sl' 명령에 따라 상기 다른 저장공간에 저장된 데이터가 다시 데이터 섹션 베이스 레지스터(160)에 설정되도록 한다.
이상에서 설명된 바와 같이, 프로그램 실행 시 공유라이브러리의 참조가 가능하도록 런타임 로더 및 컴파일러를 수정하였으며, 라이브러리 빌더를 통해 기존 공유 라이브러리의 형식을 변경하였다. 이러한 과정을 통해 공유 라이브러리의 사용이 가능토록 하여 시스템의 메모리 사용량을 줄일 수 있으며, 결과적으로 시스템의 생산 원가를 감소시킬 수 있다.
본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플라피디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
이상 도면과 명세서에서 최적 실시예들이 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
상술한 바와 같이, 본 발명에 따른 MMU 없는 공유 라이브러리 시스템 및 상기 시스템 구축 방법에 따르면, 컴파일러, 런타임 로더 및 라이브러리 빌더의 수정을 통해 MMU와 같은 하드웨어의 지원이 없이도 공유 라이브러리를 사용이 가능하며, 이를 통해 메모리의 사용량을 줄임으로써 시스템의 생산 원가를 감소시킬 수 있다.
도 1은 본 발명에 따른 MMU 없는 공유 라이브러리 시스템의 일실시예를 개략적으로 나타내는 블록도이다.
도 2는 도 1에 도시된 MMU 없는 공유 라이브러리 시스템 구축 과정 및 공유 라이브러리의 이용 방법의 일예를 나타내는 흐름도이다.
도 3은 라이브러리 빌더(120)에 의해 공유 라이브러리가 빌드되는 과정을 나타내는 도면이다.
도 4는 도 3의 젠심 유틸리티(230)에 의해 정의되는 심볼 주소 포맷의 일예를 나타내는 도면이다.
도 5는 FLAT 바이너리 재배치 테이블을 포함하는 링커 스크립트를 나타내는 도면이다.
도 6은 컴파일된 응용 프로그램(106)의 링커 스크립트를 보다 자세히 나타낸 도면이다.
도 7은 응용 프로그램이 프로그램 수행 중 공유 라이브러리에 정의된 함수를 호출하는 과정을 설명하기 위한 도면이다.

Claims (28)

  1. 응용 프로그램의 데이터 섹션 시작 주소 또는 공유 라이브러리에서 상기 응용 프로그램을 위해 할당한 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터;
    소스 코드 형태의 프로그램 및 라이브러리들을 PIC(Position Independent Code) 옵션으로 컴파일하고, 상기 라이브러리들 각각이 상기 프로그램에 할당한 데이터 섹션의 시작 주소가 상기 데이터 섹션 베이스 레지스터에 설정되도록 상기 라이브러리들 각각에 포함되는 함수들을 정의하는 컴파일러;
    상기 컴파일된 라이브러리들을 이용하여 각 라이브러리들마다, 여러 응용 프로그램들에게 공유되는 코드 및 데이터를 심볼로서 포함하는 공유 라이브러리 및 상기 프로그램과의 심볼 주소 바인딩을 위해 심볼들의 주소 정보를 갖는 주소 라이브러리를 생성하는 공유 라이브러리 빌더;
    컴파일된 프로그램의 코드, 데이터 및 상기 공유 라이브러리들에서 상기 응용 프로그램을 위해 할당된 데이터 섹션 시작 주소가 정의된 데이터 섹션 테이블을 링커 스크립트에 따라 배치하여 상기 컴파일된 프로그램을 실행파일 형태의 상기 응용 프로그램으로 만드는 응용 프로그램 빌더; 및
    상기 응용 프로그램 및 상기 공유 라이브러리들을 메모리에 적재하며, 상기 공유 라이브러리들을 상기 메모리에 적재할 때, 상기 심볼의 주소 정보에 포함된 심볼의 재배치 타입에 따라 필요한 주소 재배치를 수행한 결과에 따라 심볼의 최종 주소를 결정하는 런타임 로더를 포함하며,
    상기 데이터 섹션은 전역 데이터에 대한 포인터 테이블인 GOT(Global Offset Table)과 전역 데이터를 포함하는 데이터 영역을 포함하며 상기 데이터 섹션 시작 주소는 상기 GOT 시작 주소이며, 상기 응용 프로그램은 상기 GOT를 이용하여 전역 데이터를 참조하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  2. 제1항에 있어서,
    상기 컴파일러는 상기 라이브러리들에 1부터 시작되는 일련의 번호를 ID로 각각 부여하고, 부여된 ID를 기반으로 라이브러리 명을 재설정하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  3. 제2항에 있어서,
    상기 재설정된 라이브러리 명은 라이브러리 검색의 편의를 위해 소정의 디렉토리에 상기 재설정된 라이브러리 명이 존재하는 것을 특징으로 하는 MMU 없는 라이브러리 시스템.
  4. 제2항에 있어서, 상기 링커 스크립트는
    상기 데이터 섹션 테이블이 상기 데이터 섹션의 직전에 위치하도록 정의되며,
    주소의 크기가 nByte일 경우, 응용 프로그램은 ID가 m인 공유 라이브러리의 데이터 섹션 시작 주소를 (sl-n*m-n)의 위치에서 얻는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
    (여기서, sl은 상기 응용 프로그램 자신의 데이터 섹션 시작 주소임)
  5. 제1항에 있어서, 상기 라이브러리 빌더는
    컴파일된 라이브러리에 포함된 여러 개의 오브젝트 파일들을 하나의 오브젝트 파일로 재배치하는 링커;
    타겟 시스템에 맞게 오브젝트 파일의 포맷을 변환하고, 포맷 변환된 오브젝트 파일을 상기 공유 라이브러리로서 생성하는 포맷 변환 유틸리티; 및
    상기 컴파일된 라이브러리로부터 심볼들이 어떤 오브젝트에 속해있는가를 나타내는 위치 정보 및 상기 심볼들이 상기 공유 라이브러리 내에서의 오프셋을 심볼 주소 정보로서 추출하고, 상기 위치 정보를 이용하여 상기 심볼들 각각이 위치한 오브젝트 내에서 심볼의 주소가 정의된 상기 주소 라이브러리를 생성하는 젠심 유틸리티를 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  6. 제5항에 있어서,
    상기 주소 라이브러리는 라이브러리 코드를 제외한 엑스퍼트 심볼들의 주소 정보만 정의한 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  7. 제1항에 있어서, 상기 심볼 주소의 포맷은
    상기 심볼 주소를 나타내는 p비트의 제1영역;
    심볼이 정의된 라이브러리의 ID를 나타내는 q비트의 제2영역; 및
    상기 메인 메모리에 적재 시, 주소의 재배치 타입을 나타내는 r비트의 제3영역을 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  8. 제7항에 있어서,
    상기 응용 프로그램 또는 상기 라이브러리의 크기가 2m 비트를 초과하지 않으며, 상기 라이브러리의 크기가 2m 비트를 초과하면 상기 라이브러리의 크기가 2m 비트를 초과하지 않도록 분할하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  9. 제7항에 있어서, 상기 주소 재배치 타입은
    상기 심볼의 주소가 상기 메인 메모리에 로딩 시, 메인 메모리의 절대 주소로 재배치되어야 함을 나타내는 제1재배치 타입;
    상기 심볼의 주소가 상기 테이터 섹션의 시작 주소인 GOT 시작 주소로 대치되어야 함을 나타내는 제2재배치 타입; 및
    상기 심볼의 주소가 브랜치 명령어의 목적지 주소임을 나타내며, 타겟 시스템의 브랜치 명령에 맞는 포맷으로 수정해야 하는 제3재배치 타입을 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  10. 제7항에 있어서,
    상기 타겟 시스템이 uCLinux인 경우, FLAT 바이너리의 재배치 테이블의 엔트리들이 상기 심볼 주소 포맷과 동일한 주소 포맷을 갖는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템.
  11. 응용 프로그램이 참조하는 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터를 구비하는 MMU 없는 공유 라이브러리 시스템 구축 방법에 있어서,
    (a)공유할 라이브러리를 PIC 옵션으로 컴파일하고, 컴파일 시 상기 공유할 라이브러리의 각 함수에, 실행할 프로그램을 위해 할당된 데이터 섹션의 시작 주소가 상기 데이터 섹션 베이스 레지스터에 설정되는 것을 정의하는 단계;
    (b)컴파일된 라이브러리들을 이용하여 각 라이브러리들마다 실제 코드와 데이터가 존재하는 공유 라이브러리와 응용 프로그램과의 심볼 주소 바인딩을 위해 심볼들의 주소 정보만을 가지는 주소 라이브러리를 생성하는 단계;
    (c)PIC 옵션을 주어 프로그램을 컴파일하는 단계;
    (d)컴파일된 프로그램의 코드, 데이터 섹션 및 상기 공유 라이브러리들에서 상기 응용 프로그램을 위해 할당된 데이터 섹션 시작 주소를 나타내는 데이터 섹션 테이블을 링커 스크립트에 따라 배치하여 실행파일 형태의 응용 프로그램으로 만드는 단계; 및
    (e)상기 응용 프로그램 수행을 위해 상기 빌드된 공유 라이브러리들을 메모리에 적재하는 단계를 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  12. 제11항에 있어서,
    상기 컴파일러는 상기 라이브러리들에 각각에 1부터 시작되는 일련의 번호를 ID로 각각 부여하고, 부여된 ID를 기반으로 라이브러리 명을 재설정하는 단계를 더 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  13. 제12항에 있어서, 상기 링커 스크립트는
    상기 데이터 섹션 테이블이 상기 데이터 섹션의 직전에 위치하도록 정의되며,
    주소의 크기가 nByte일 경우, 응용 프로그램은 ID가 m인 공유 라이브러리의 데이터 섹션 시작 주소를 (sl-n*m-n)의 위치에서 얻는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
    (여기서, sl은 상기 응용 프로그램 자신의 데이터 섹션 시작 주소임)
  14. 제11항에 있어서,
    상기 데이터 섹션은 전역 데이터에 대한 포인터 테이블인 GOT(Global Offset Table)과 전역 데이터를 포함하는 데이터 영역을 포함하며 상기 데이터 섹션 시작 주소는 상기 GOT 시작 주소이며, 상기 응용 프로그램은 상기 GOT를 이용하여 전역 데이터를 참조하는 것을 특징으로 하는것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  15. 제11항에 있어서, 상기 심볼 주소의 포맷은
    상기 심볼 주소를 나타내는 m비트의 제1영역;
    심볼이 정의된 라이브러리의 ID를 나타내는 n비트의 제2영역; 및
    메모리에 적재 시, 주소의 재배치 타입을 나타내는 p비트의 제3영역을 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  16. 제15항에 있어서,
    상기 응용 프로그램 또는 상기 라이브러리의 크기가 2m 비트를 초과하지 않으며, 상기 라이브러리의 크기가 2m 비트를 초과하면 상기 라이브러리의 크기가 2m 비트를 초과하지 않도록 분할하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  17. 제15항에 있어서, 상기 주소 재배치 타입은
    상기 심볼의 주소가 상기 메인 메모리에 로딩 시, 메인 메모리의 절대 주소로 재배치되어야 함을 나타내는 제1재배치 타입;
    상기 심볼의 주소가 상기 테이터 섹션의 시작 주소인 GOT 시작 주소로 대치되어야 함을 나타내는 제2재배치 타입; 및
    상기 심볼의 주소가 브랜치 명령어의 목적지 주소임을 나타내며, 타겟 시스템의 브랜치 명령에 맞는 포맷으로 수정해야 하는 제3재배치 타입을 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  18. 제15항에 있어서,
    상기 타겟 시스템이 uCLinux인 경우, FLAT 바이너리의 재배치 테이블의 엔트리들이 상기 심볼 주소 포맷과 동일한 주소 포맷을 갖는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  19. 제15항에 있어서,
    상기 공유 라이브러리들이 상기 메모리에 적재될 때, 상기 심볼의 재배치 타입에 따라 필요한 주소 재배치를 수행한 결과에 따라 심볼의 최종 주소를 결정하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템 구축 방법.
  20. 제11항의 MMU 없는 공유 라이브러리 시스템 구축 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록한 기록 매체.
  21. 응용 프로그램이 참조하는 데이터 섹션의 시작 주소가 설정되는 데이터 섹션 베이스 레지스터를 구비하는 MMU 없는 공유 라이브러리 시스템에서 응용 프로그램이 메모리에 적재된 공유 라이브러리를 이용하는 방법에 있어서,
    (a)상기 응용 프로그램이 상기 공유 라이브러리의 함수를 호출하면 상기 공유 라이브러리에서 응용 프로그램을 위해 할당된 데이터 섹션의 시작 주소를 상기 데이터 섹션베이스 레지스터에 설정하는 단계; 및
    (b)상기 응용 프로그램은 상기 데이터 섹션 베이스 레지스터에 설정된 주소에 접근하여 호출한 함수를 수행하는 단계를 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템에서 공유 라이브러리 사용 방법.
  22. 제21항에 있어서, 상기 (a)단계는
    (a1)상기 응용 프로그램이 상기 공유 라이브러리의 함수를 호출하면 상기 데이터 섹션 베이스 레지스터에 설정되어 있는 데이터 섹션 주소를 다른 저장 공간에 저장하는 단계;
    (a2)상기 응용 프로그램의 데이터 섹션 테이블을 참조하여 상기 공유 라이브러리가 응용 프로그램을 위해 할당한 데이터 섹션의 시작 주소를 상기 데이터 섹션 베이스 레지스터에 설정하는 단계;
    (a3)응용 프로그램은 상기 데이터 섹션 베이스 레지스터에 설정된 주소를 참조한 GOT 접근을 통해 전역 데이터를 참조하여 호출한 함수를 수행하는 단계; 및
    (a4)호출한 함수 수행이 완료되면, 상기 (e1)단계에서 다른 저장 공간에 저장된 데이터 섹션 주소를 상기 데이터 섹션 베이스 레지스터에 다시 설정하는 단계를 포함하는 것을 특징으로 하는 MMU 없는 공유 라이브러리 시스템에서 공유 라이브러리 사용 방법.
  23. 제21항의 공유 라이브러리 사용 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록한 기록 매체.
  24. MMU 없는 공유 라이브러리 시스템에서 공유 라이브러리의 빌드 방법에 있어서,
    (a)PIC 옵션으로 공유할 라이브러리를 컴파일하는 단계;
    (b)공유할 라이브러리에 고유의 번호를 ID로 할당하여 라이브러리 명을 재설정하는 단계;
    (c)컴파일된 라이브러리로부터 포함된 여러 개의 오브젝트 파일들을 하나의 오브젝트 파일로 재배치하는 단계;
    (d)타겟 시스템에 맞게 (c)단계의 오브젝트 파일의 포맷을 변환하고, 포맷 변환된 오브젝트 파일을 공유할 코드와 데이터가 존재하는 공유 라이브러리로서 생성하는 단계; 및
    (e)컴파일된 라이브러리 및 상기 공유 라이브러리로부터 심볼들의 위치 정보 및 주소 정보를 각각 추출하여, 오브젝트별로 심볼의 주소가 정의된 주소 라이브러리를 생성하는 단계를 포함하는 것을 특징으로 하는 공유 라이브러리의 빌드 방법.
  25. 제24항에 있어서,
    상기 주소 라이브러리는 라이브러리 코드를 제외한 엑스퍼트 심볼들의 주소 정보만 정의한 것을 특징으로 하는 공유 라이브러리의 빌드 방법.
  26. 제24항에 있어서,
    컴파일 시, 공유할 라이브러리의 각 함수에는, 응용 프로그램을 위해 할당되는 데이터 섹션의 시작 주소를 소정의 레지스터에 설정하록 정의하는 단계를 더 포함하는 것을 특징으로 하는 공유 라이브러리의 빌드 방법.
  27. 제24항에 있어서, 상기 (e)단계는
    (e1)컴파일된 라이브러리로부터 심볼들이 어떤 오브젝트에 속해있는가를 나타내는 위치 정보를 추출하는 단계;
    (e2)심볼들이 상기 공유 라이브러리 내에서의 오프셋을 심볼 주소 정보로서 추출하는 단계; 및
    (e3)상기 위치 정보를 이용하여 상기 심볼들 각각이 위치한 오브젝트 내에서 상기 심볼 주소가 정의된 주소 라이브러리를 생성하는 단계를 포함하는 것을 특징으로 하는 공유 라이브러리의 빌드 방법.
  28. 제24항의 공유 라이브러리 빌드 방법을 컴퓨터에서 실행 가능한 프로그램 코드로 기록한 기록 매체.
KR10-2003-0047538A 2003-07-12 2003-07-12 공유 라이브러리 시스템 및 상기 시스템 구축 방법 KR100518584B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR10-2003-0047538A KR100518584B1 (ko) 2003-07-12 2003-07-12 공유 라이브러리 시스템 및 상기 시스템 구축 방법
TW093119881A TWI243306B (en) 2003-07-12 2004-07-01 Shared library system and method of building the system
CNA2004100635824A CN1577268A (zh) 2003-07-12 2004-07-12 共享库系统及构建该系统的方法
JP2004205174A JP2005032259A (ja) 2003-07-12 2004-07-12 共有ライブラリーシステム及び前記システム構築方法
US10/889,431 US20050010911A1 (en) 2003-07-12 2004-07-12 Shared library system and method of building the system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2003-0047538A KR100518584B1 (ko) 2003-07-12 2003-07-12 공유 라이브러리 시스템 및 상기 시스템 구축 방법

Publications (2)

Publication Number Publication Date
KR20050007906A KR20050007906A (ko) 2005-01-21
KR100518584B1 true KR100518584B1 (ko) 2005-10-04

Family

ID=33563008

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-0047538A KR100518584B1 (ko) 2003-07-12 2003-07-12 공유 라이브러리 시스템 및 상기 시스템 구축 방법

Country Status (5)

Country Link
US (1) US20050010911A1 (ko)
JP (1) JP2005032259A (ko)
KR (1) KR100518584B1 (ko)
CN (1) CN1577268A (ko)
TW (1) TWI243306B (ko)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100722233B1 (ko) * 2005-10-12 2007-05-29 인포뱅크 주식회사 임베디드 시스템을 위한 분리된 실행 파일의 링크 방법 및장치
KR100799599B1 (ko) * 2006-05-03 2008-01-31 연세대학교 산학협력단 기억 관리 장치가 없는 마이크로 컨트롤러를 포함하는 임베디드 하드웨어의 운영 시스템 및 방법
US8020146B2 (en) * 2006-07-24 2011-09-13 International Business Machines Corporation Applying deferred refactoring and API changes in an IDE
CN100426243C (zh) * 2006-09-15 2008-10-15 华为技术有限公司 一种数据结构传输方法
CN101187899B (zh) * 2006-11-17 2010-05-12 中兴通讯股份有限公司 嵌入式系统存储空间的优化方法
KR100860963B1 (ko) * 2007-03-08 2008-09-30 삼성전자주식회사 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법
KR100884926B1 (ko) * 2007-06-15 2009-02-20 한국과학기술원 가상 메모리가 없는 임베디드 시스템에서의 기존 공유라이브러리 사용방법
US8453128B2 (en) * 2007-09-28 2013-05-28 Oracle America, Inc. Method and system for implementing a just-in-time compiler
KR100985071B1 (ko) * 2008-02-01 2010-10-05 주식회사 안철수연구소 스크립트 언어를 사용한 취약점 공격 코드의 실시간 탐지및 차단 방법, 및 그 장치
US9015727B2 (en) 2008-04-02 2015-04-21 Qualcomm Incorporated Sharing operating system sub-processes across tasks
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8776030B2 (en) * 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
CN101441566B (zh) * 2008-11-18 2012-04-25 腾讯科技(深圳)有限公司 一种在嵌入式平台上动态链接程序的方法
US20110113409A1 (en) * 2009-11-10 2011-05-12 Rodrick Evans Symbol capabilities support within elf
US8510788B2 (en) * 2009-11-12 2013-08-13 Echostar Technologies L.L.C. Build profile for a set-top box
KR20110095050A (ko) * 2010-02-18 2011-08-24 삼성전자주식회사 공유 라이브러리 디버깅 장치
US8724037B1 (en) 2010-06-04 2014-05-13 Kurt William Massey Mounting system
US10281080B1 (en) 2010-06-04 2019-05-07 Kurt William Massey Adjustable mounting systems for televisions
CN102393845B (zh) * 2011-06-30 2013-06-05 北京新媒传信科技有限公司 一种共享库管理方法和系统
US9110751B2 (en) * 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code
JP5976917B2 (ja) 2012-03-22 2016-08-24 インテル コーポレイション ネスト構造化されたエミュレーションおよび動的リンキング環境
EP2924522B1 (de) * 2014-03-28 2016-05-25 dSPACE digital signal processing and control engineering GmbH Verfahren zur Beeinflussung eines Steuerprogramms
JP6409514B2 (ja) * 2014-11-10 2018-10-24 日本電気株式会社 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム
US11329683B1 (en) 2015-06-05 2022-05-10 Life365, Inc. Device configured for functional diagnosis and updates
US10560135B1 (en) 2015-06-05 2020-02-11 Life365, Inc. Health, wellness and activity monitor
US9974492B1 (en) 2015-06-05 2018-05-22 Life365, Inc. Health monitoring and communications device
US10185513B1 (en) * 2015-06-05 2019-01-22 Life365, Inc. Device configured for dynamic software change
US10388411B1 (en) 2015-09-02 2019-08-20 Life365, Inc. Device configured for functional diagnosis and updates
CN105426223B (zh) * 2015-12-25 2019-01-04 百度在线网络技术(北京)有限公司 应用加载方法和装置
JP2017126293A (ja) 2016-01-15 2017-07-20 キヤノン株式会社 情報処理装置及びリソース管理方法
US10853057B1 (en) * 2017-03-29 2020-12-01 Amazon Technologies, Inc. Software library versioning with caching
US10738941B2 (en) 2017-09-04 2020-08-11 Manehu Product Alliance, Llc Display mount assembly
US10795659B1 (en) * 2017-11-02 2020-10-06 Virtuozzo International Gmbh System and method for live patching processes in user space
US10859201B2 (en) 2018-04-10 2020-12-08 Manehu Product Alliance, Llc Display mount assembly
CN109189469B (zh) * 2018-06-22 2020-08-28 北京大学 基于反射的安卓应用微服务化方法及系统
WO2020045269A1 (ja) * 2018-08-28 2020-03-05 tonoi株式会社 システム、情報処理方法、及びプログラム
CN111736913B (zh) * 2019-03-25 2021-11-19 华为技术有限公司 类加载方法和装置
US11033107B2 (en) 2019-07-16 2021-06-15 Francis Douglas Warren Tilting mounting apparatus
WO2021127552A1 (en) 2019-12-19 2021-06-24 Manehu Product Alliance, Llc, D/B/A Adjustable display mounting system
CN116697240A (zh) 2020-02-10 2023-09-05 显示器产品联盟Dba曼特尔蒙特有限责任公司 多方向显示器安装件
CN111324396B (zh) * 2020-03-19 2023-09-15 深圳市迅雷网络技术有限公司 一种区块链智能合约执行方法、装置及设备
CN114327467A (zh) * 2020-09-29 2022-04-12 武汉斗鱼网络科技有限公司 一种获取系统函数信息的方法以及相关设备
US11347523B2 (en) 2020-11-05 2022-05-31 International Business Machines Corporation Updated shared library reloading without stopping the execution of an application
WO2024036517A1 (zh) * 2022-08-17 2024-02-22 芯原微电子(上海)股份有限公司 一种交叉链接方法、装置,电子设备及存储介质
CN116594971B (zh) * 2023-07-17 2023-09-29 山东天意装配式建筑装备研究院有限公司 基于bim的装配式建筑数据优化存储方法
CN117707652B (zh) * 2023-12-14 2024-06-11 北京中电华大电子设计有限责任公司 数据编译、参数传递方法及装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5291601A (en) * 1989-06-01 1994-03-01 Hewlett-Packard Company Shared libraries implemented with linking program loader
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
US6260075B1 (en) * 1995-06-19 2001-07-10 International Business Machines Corporation System and method for providing shared global offset table for common shared library in a computer system
US5774722A (en) * 1995-12-14 1998-06-30 International Business Machines Corporation Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems
US5845118A (en) * 1995-12-14 1998-12-01 International Business Machines Corporation Method for generating shared library executable code with lazy global offset table address calculation
US5797014A (en) * 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
US5778212A (en) * 1996-06-03 1998-07-07 Silicon Graphics, Inc. Interprocedural analysis user interface
US6421827B1 (en) * 1997-12-17 2002-07-16 International Business Machines Corporation System and method for detecting and reordering loading patterns
US6314501B1 (en) * 1998-07-23 2001-11-06 Unisys Corporation Computer system and method for operating multiple operating systems in different partitions of the computer system and for allowing the different partitions to communicate with one another through shared memory
US6434742B1 (en) * 1999-05-10 2002-08-13 Lucent Technologies Inc. Symbol for automatically renaming symbols in files during the compiling of the files
US6708330B1 (en) * 2000-06-13 2004-03-16 Cisco Technology, Inc. Performance improvement of critical code execution

Also Published As

Publication number Publication date
JP2005032259A (ja) 2005-02-03
US20050010911A1 (en) 2005-01-13
CN1577268A (zh) 2005-02-09
KR20050007906A (ko) 2005-01-21
TW200511007A (en) 2005-03-16
TWI243306B (en) 2005-11-11

Similar Documents

Publication Publication Date Title
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US11175896B2 (en) Handling value types
EP2487585B1 (en) Method and device for dynamically loading relocatable file
US6460178B1 (en) Shared library optimization for heterogeneous programs
US5481713A (en) Method and apparatus for patching code residing on a read only memory device
US5546586A (en) Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code
US20080005719A1 (en) Methods, systems, and computer program products for providing a program execution environment
US6219830B1 (en) Relocatable object code format and method for loading same into a computer system
US7412710B2 (en) System, method, and medium for efficiently obtaining the addresses of thread-local variables
US20080022265A1 (en) Methods, systems, and computer program products for generating and using object modules
JPH01166141A (ja) デバッグ情報提供方法
US20080005728A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
JPH11161502A (ja) スタティックオーバーロードのない基本型の値に関する効率的演算方法および装置
US5960197A (en) Compiler dispatch function for object-oriented C
US5553286A (en) System and method for preparing a computer program for execution
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
CN111399990A (zh) 解释执行智能合约指令的方法及装置
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
US5889995A (en) Using constant selectors for method identification
US6959430B2 (en) Specialized heaps for creation of objects in object-oriented environments
US7181724B2 (en) Representation of Java® data types in virtual machines
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
US20050222979A1 (en) Querying method information
US11513954B2 (en) Consolidated and concurrent remapping and identification for colorless roots
US11875193B2 (en) Tracking frame states of call stack frames including colorless roots

Legal Events

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

Payment date: 20120831

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130902

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140901

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20150831

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee