KR20070119356A - 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체 - Google Patents

소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체 Download PDF

Info

Publication number
KR20070119356A
KR20070119356A KR1020060053894A KR20060053894A KR20070119356A KR 20070119356 A KR20070119356 A KR 20070119356A KR 1020060053894 A KR1020060053894 A KR 1020060053894A KR 20060053894 A KR20060053894 A KR 20060053894A KR 20070119356 A KR20070119356 A KR 20070119356A
Authority
KR
South Korea
Prior art keywords
symbol
software component
software
address
symbol table
Prior art date
Application number
KR1020060053894A
Other languages
English (en)
Inventor
이종석
조성현
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020060053894A priority Critical patent/KR20070119356A/ko
Priority to US11/641,056 priority patent/US20070294683A1/en
Priority to PCT/KR2007/002308 priority patent/WO2007145428A1/en
Priority to CNA2007800009748A priority patent/CN101346693A/zh
Publication of KR20070119356A publication Critical patent/KR20070119356A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Abstract

본 발명에 따라 소프트웨어를 복수의 바이너리 이미지로 컴포넌트화하는 방법, 컴포넌트화된 소프트웨어의 링크 방법 및 업데이트 방법, 컴포넌트화된 소프트웨어를 기록한 정보저장매체가 개시된다.
본 발명에 따른 컴포넌트화된 소프트웨어를 기록한 정보저장매체는, 적어도 하나의 소프트웨어 컴포넌트와, 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블과, 상기 적어도 하나의 소프트웨어 컴포넌트와 상기 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 포함한다.
이상과 같은 본 발명에 의하면, 소프트웨어를 컴포넌트화시켰을 때 심볼 정보로 인하여 늘어나는 파일 크기 문제를 해결하면서 소프트웨어를 컴포넌트화시킬 수 있으며 효율적인 업데이트가 가능하다.
소프트웨어 컴포넌트화, 소프트웨어 업데이트, 메모리 맵

Description

소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트 방법과, 소프트웨어를 기록한 정보저장매체{Componentization of software}
도 1은 종래의 컴포넌트화된 소프트웨어를 업데이트하는 예,
도 2는 종래에 하나의 바이너리 이미지로 배포된 소프트웨어를 업데이트하는 예,
도 3은 본 발명에 따라 컴포넌트화된 소프트웨어의 일 실시예를 도시한 구성도,
도 4는 도 3의 실시예를 플래시 메모리에 설치한 모습을 예시한 도면,
도 5는 도 4의 소프트웨어가 RAM에 로드된 모습을 예시한 도면,
도 6은 도 5의 컴포넌트 1에서 함수를 호출하는 코드를 예시한 도면,
도 7은 본 발명에 따라 컴포넌트화된 소프트웨어의 다른 실시예를 도시한 구성도,
도 8은 도 7의 실시예를 플래시 메모리에 설치한 모습을 예시한 도면,
도 9는 도 8의 소프트웨어가 RAM에 로드된 모습을 예시한 도면,
도 10은 본 발명에 따른 심볼 테이블의 내용을 예시한 도면,
도 11은 도 10의 심볼 테이블이 업데이트된 후의 내용을 예시한 도면,
도 12는 도 9의 컴포넌트 2에서 함수를 호출하는 코드를 예시한 도면,
도 13은 종래의 방법에 따른 함수 호출의 원리를 설명하기 위한 도면,
도 14는 본 발명에 따른 간접적인 함수 호출의 원리를 설명하기 위한 도면,
도 15는 본 발명에 따른 소프트웨어 컴포넌트화 방법의 일 실시예를 도시한 흐름도,
도 16은 본 발명에 따라 컴포넌트화된 소프트웨어의 컴파일 및 링크 방법의 일 실시예를 도시한 흐름도,
도 17은 본 발명에 따라 컴포넌트화된 소프트웨어의 업데이트 방법의 일 실시예를 도시한 흐름도.
본 발명은 소프트웨어의 컴포넌트화에 대한 것으로, 소프트웨어를 복수의 바이너리 이미지로 컴포넌트화하는 방법, 컴포넌트화된 소프트웨어의 링크 방법 및 업데이트 방법, 컴포넌트화된 소프트웨어를 기록한 정보저장매체에 관한 것이다.
근래의 CE(Consumer Electronics) 기기는 지원 기능이 다양하여 각종 임베디드 소프트웨어가 설치되어 있다. CE 기기의 경우 메모리 용량이 한정적이므로 메모리를 적게 차지하는 소프트웨어가 개발되어야 한다. 또한, 이들 소프트웨어는 오류의 수정이나 기능의 개선을 위해 업데이트가 필요하므로 업그레이드를 고려하여 설계되어야 한다. 따라서 효율적인 업그레이드를 위한 연구가 활발히 진행되고 있는데, 소프트웨어를 복수의 컴포넌트로 나누어 관리하고 변경된 컴포넌트만 업데 이트하는 방식과 소프트웨어를 하나의 바이너리 이미지로 관리하고 변경시 전체를 업데이트하는 방식이 있다.
도 1은 종래의 컴포넌트화된 소프트웨어를 업데이트하는 예를 도시한 것이다.
도 1을 참조하면, 운영체제(110)와 3개의 컴포넌트(120, 130, 140)가 별도로 분리되어 플래시 메모리에 저장된다. 시스템 부팅시 OS 파일(110)을 RAM으로 로드하고 OS가 필요한 컴포넌트들을 RAM으로 로드시키는 방식으로 동작한다. 이들 컴포넌트의 주소가 서로 연결되어 있지 않으므로 각 컴포넌트는 별도의 연결 정보를 헤더 부분(125)에 저장하고 있다. LINUX나 VxWorks 시스템에서는 연결 정보를 ELF 포맷을 사용하여 저장하고 있다. 이러한 연결 정보는 각 컴포넌트가 RAM으로 로드되는 시점에 사용되며 결과적으로 각 컴포넌트는 참조하는 다른 컴포넌트들의 실제 RAM 주소와 링크된다.
이러한 구조의 이점은 각 컴포넌트를 관리하기가 쉽고 서로 독립적이기 때문에 하나의 컴포넌트에 변화가 일어나더라도 다른 컴포넌트들에게 영향을 주지 않는다는 것이다. 또한 소프트웨어 업데이트도 효율적으로 수행할 수 있다. 예를 들어 컴포넌트 3(140)을 업데이트하는 경우, 서버로부터 컴포넌트 3의 새로운 버전(150)을 다운받아 저장하고 기존 버전과 바꾸면 된다. 이 경우, 소프트웨어 업데이트 서버의 부하를 줄일 수 있으며, 전체 소프트웨어 이미지를 업데이트하지 않아도 되므로 효율적인 업데이트가 가능하다.
그러나, 이러한 구조는 컴포넌트화를 위해 파일 크기가 많이 증가한다는 문 제가 있다. 즉, 각 컴포넌트의 주소들이 서로 연결되어 있지 않으므로 각 컴포넌트 파일의 헤더에 연결 정보를 기록해야 필요하고, 이로 인해 파일의 크기가 많게는 3-4배까지 늘어난다. 파일의 크기가 이렇게 크게 증가하는 이유는, 각 컴포넌트가 외부에 export하는 심볼(symbol)들과 외부로부터 import하는 심볼들을 컴포넌트 내의 어디에서 사용하고 있는지에 대한 정보를 헤더에 모두 포함하고 있어야 하기 때문이다. 따라서, 이 구조는 저장 공간에 제한이 없는 시스템에서 널리 활용되고 있으나, 저장 공간이 충분하지 않은 CE 기기에 적용하기는 현실적으로 불가능한 실정이다. 또한, 이러한 구조는 컴파일 및 런타임 링크(runtime linking)시 시간이 많이 소요된다는 문제가 있으므로 CE 기기에 적용하기는 더욱 어렵다.
따라서, 대부분의 CE 기기는 운영체제(OS)를 포함한 모든 소프트웨어들을 하나의 큰 바이너리 이미지(예: EXE, BIN)로 통합하여 플래시 메모리에 저장하여 출시하며, 이렇게 하나의 이미지로 배포될 경우 바이너리 이미지의 크기는 최소화할 수 있지만 소프트웨어의 버전 업그레이드를 위해서는 기존의 바이너리 이미지 전체를 업그레이드해야 한다는 문제가 있다.
도 2는 종래에 하나의 바이너리 이미지로 배포된 소프트웨어를 업데이트하는 예를 도시한 것이다.
도 2를 참조하면, OS와 각 컴포넌트가 통합된 파일(210)이 플래시 메모리에 저장되어 있다. 시스템 부팅시 통합된 파일(210)을 RAM으로 로드하는 방식으로 동작한다. 이러한 구조에서는 미리 각 컴포넌트의 심볼들에 static한 주소를 지정하여 하나의 바이너리 이미지로 저장되어 있기 때문에, 심볼 테이블이나 헤더 정보가 필요하지 않다. 따라서 바이너리 이미지 크기를 최소화할 수 있기 때문에 저장 공간이 충분하지 않은 CE 기기에 보다 적합한 구조이다.
이러한 구조에서는 소프트웨어의 업데이트를 위해 기존의 바이너리 이미지(210) 전체를 보관한 상태에서 서버로부터 새로운 바이너리 이미지(220)를 다운받아 저장한 후 기존 버전의 파일(210)과 교체한다. 그러나, 이러한 구조에서는 컴포넌트의 한 부분만 변경되어도 바이너리 이미지 전체를 업데이트해야 하는 문제가 있다. 이러한 구조에서는 바이너리 이미지의 크기를 줄이기 위해서 심볼 테이블이나 헤더 정보를 포함하지 않으므로 모든 심볼들이 이미 static한 주소로 연결되어 있다. 이렇게 static한 주소를 사용하여 컴포넌트들이 연결되어 있으면 바이너리 이미지가 조금만 바뀌어도 실제 파일에는 많은 변화가 일어난다. 따라서, 해당 파일을 업데이트하기 위해서는 소프트웨어 업데이트 서버로부터 파일 전체를 다운받아야 하고, fail-safe한 업데이트를 위해 기존의 바이너리 이미지(210)를 백업해야 하기 때문에 바이너리 이미지 크기의 2배에 해당하는 플래시 메모리 공간이 필요하다.
본 발명은 상기와 같은 문제를 해결하여, 메모리 공간을 적게 사용하는 효율적인 소프트웨어 컴포넌트화 방법을 제공하는 것을 목적으로 한다.
또한, 데이터 전송량, 플래시 메모리의 사용 및 소요 시간을 최소화할 수 있는, 컴포넌트화된 소프트웨어의 업데이트 방법과 링크 방법을 제공하는 것을 목적으로 한다.
상기와 같은 과제를 해결하기 위한 본 발명의 하나의 특징은, 컴포넌트화된 소프트웨어를 기록한 정보저장매체에 있어서, 적어도 하나의 소프트웨어 컴포넌트와, 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블과, 상기 적어도 하나의 소프트웨어 컴포넌트와 상기 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 포함하는 것이다.
상기 메모리 맵 정보는, 운영체제가 로드될 메모리 주소 정보를 더 포함하는 것이 바람직하다.
상기 정보저장매체는, 상기 적어도 하나의 소프트웨어 컴포넌트에 의해 호출되며, 상기 심볼 테이블을 조회하여 입력된 심볼에 대한 접근 정보를 출력하는 심볼 조회 함수를 더 포함하는 것이 바람직하다.
상기 입력된 심볼에 대한 접근 정보는, 상기 입력 심볼에 대한 상기 심볼 테이블 내의 주소, 또는 상기 입력 심볼에 대한 상기 적어도 하나의 소프트웨어 컴포넌트나 운영체제 내의 실제 주소를 포함하는 것이 바람직하다.
상기 적어도 하나의 소프트웨어 컴포넌트는, 운영체제 및 다른 소프트웨어 컴포넌트가 제공하는 심볼의 실제 주소를 획득하기 위해 상기 심볼 테이블을 참조하는 코드를 포함하는 것이 바람직하다.
본 발명의 다른 특징은, 소프트웨어 컴포넌트화 방법에 있어서, 상기 소프트웨어를 분할하여 적어도 하나의 컴포넌트를 생성하는 단계와, 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블을 생성하는 단계와, 운영체제, 상기 적어도 하나의 소프트웨어 컴포넌트 및 상기 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 생성하는 단계를 포함하는 것이다.
본 발명의 또 다른 특징은, 적어도 하나의 소프트웨어 컴포넌트로 구성된 소프트웨어의 링크 방법에 있어서, 상기 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여, 상기 적어도 하나의 소프트웨어 컴포넌트를 링크시키는 단계를 포함하는 것이다.
본 발명의 또 다른 특징은, 각 컴포넌트가 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여 링크된 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블을 포함하는 소프트웨어의 업데이트 방법에 있어서, 상기 적어도 하나의 소프트웨어 컴포넌트 중 업그레이드될 소프트웨어 컴포넌트를 업데이트하는 단계와, 상기 업데이트된 소프트웨어 컴포넌트의 변경 내용을 반영하도록 상기 심볼 테이블을 업데이트하는 단계를 포함하는 것이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 설명한다.
도 3은 본 발명에 따라 컴포넌트화된 소프트웨어의 일 실시예를 도시한 것으로, 각 소프트웨어 컴포넌트(340-1 내지 340-N)에 독립성을 부여하기 위해 하나의 지정된 인터페이스인 심볼 조회 함수(320)를 사용하는 실시예이다.
도 3을 참조하면, 본 발명에 따른 소프트웨어는 운영체제(OS)와 별도로 복수의 소프트웨어 컴포넌트들(340-1 내지 340-N)로 나뉘어져 있다. OS가 이들 소프트웨어 컴포넌트(340-1 내지 340-N) 중 하나 이상의 컴포넌트로 구현되는 구성도 가능하다. 본 발명의 각 컴포넌트(340-1 내지 340-N)는, 종래의 기술과 달리 링크를 위한 헤더 정보를 포함하고 있지 않으며, 메모리 맵 정보(310)를 이용해 이미 링크된 것들이다. 미리 링크되어 배포되기 때문에 별도의 헤더 정보를 필요로 하지 않으며 하나의 바이너리 이미지로 구현되는 경우와 비슷한 저장 공간만을 사용한다.
또한, 본 발명에 따른 소프트웨어는 각 컴포넌트(340-1 내지 340-N)가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블(330)과, 소프트웨어 컴포넌트들(340-1 내지 340-N)과 심볼 테이블(330)이 로드될 메모리(RAM) 주소 정보를 기록한 메모리 맵 정보(310)를 포함한다. 메모리 맵 정보(310)는 OS와 심볼 조회 함수(320)가 로드될 메모리 주소 정보를 더 포함할 수 있다. 메모리 맵 정보(310)는 소프트웨어를 링크할 때와 메모리에 로드할 때 사용되는 정보이다.
또한 전술한 바와 같이, 각 소프트웨어 컴포넌트(340-1 내지 340-N)가 외부에 제공하는 심볼들(함수, 광역 변수 등)을 찾아주는 함수인 심볼 조회 함수(320)가 포함된다. 심볼 조회 함수(320)는 소프트웨어 컴포넌트들(340-1 내지 340-N)에 의해 호출되는 공통 인터페이스로, 심볼 테이블(330)을 조회하여 각 소프트웨어 컴포넌트(340-1 내지 340-N)가 사용하려는 심볼에 대한 주소 등 접근 정보를 출력한다. 각 소프트웨어 컴포넌트의 바이너리 이미지(340-1 내지 340-N)는 심볼 조회 함수(320)가 로드된 주소를 사용하여 이 함수(320)를 호출한다. 심볼 조회 함 수(320)는 입력 심볼에 대한 심볼 테이블(330) 내의 주소나, 입력 심볼에 대한 소프트웨어 컴포넌트 또는 OS 내의 실제 주소를 리턴한다. 이 함수를 호출한 컴포넌트는 리턴된 정보를 이용하여 원하는 심볼을 사용한다.
도 4는 도 3의 실시예를 플래시 메모리에 설치한 모습을 예시한 것으로, 미리 링크된 3개의 소프트웨어 컴포넌트(440, 450, 460)로 구성된 예이다. 메모리 맵 정보(410), 심볼 조회 함수(420) 및 심볼 테이블(430)이 더 포함되며, 이들 정보는 도시된 바와 같이 OS(400)와 별도의 공간에 저장될 수도 있으나 OS(400) 내에 포함되도록 구현될 수도 있다.
도 5는 도 4의 소프트웨어가 RAM에 로드된 모습을 예시한 것으로, 메모리 맵 정보(410)에 따라 각 구성 요소가 지정된 메모리 공간에 로드된 결과를 도시한 것이다.
각 소프트웨어 컴포넌트(440, 450, 460)는 이미 메모리 맵 정보(410)에 지정된 주소를 base로 하여 매핑(mapping)되어 링크된 상태이기 때문에, base 주소가 틀린 메모리 영역에 로드되면 오류가 발생한다. 도 5에 도시된 예에서는, 메모리 맵 정보(410)에 따라, 심볼 조회 함수(420) 및 심볼 테이블(430)이 주소 0에서부터, OS(400)는 주소 100부터, 컴포넌트 1(440)은 주소 300부터, 컴포넌트 2(450)은 주소 400부터, 컴포넌트 3(460)은 주소 500부터 로드되어 있음을 알 수 있다.
본 발명에 따라 컴포넌트화된 소프트웨어는 동적 링크(dynamic link)되는 것이 아니라 메모리에 로드되기 전에 이미 링크된 상태이기 때문에, 다른 컴포넌트의 함수 주소를 직접 참조하게 될 경우 해당 컴포넌트가 수정되어 함수 주소가 바뀌면 참조하는 컴포넌트도 수정되어야 한다. 따라서, 이 실시예에서는 각 소프트웨어 컴포넌트(440, 450, 460)가 하나의 지정된 인터페이스인 심볼 조회 함수(420)를 통해 통신하도록 함으로써, 각 컴포넌트가 독립적으로 관리될 수 있게 한다. 각 컴포넌트(440, 450, 460)는 지정된 인터페이스(420)를 통해 다른 컴포넌트의 함수 주소를 받아 와 사용하므로, 참조 되는 함수의 주소가 바뀌어도 참조하는 컴포넌트에는 영향이 미치지 않는다.
도 6은 도 5의 컴포넌트 1(440)에서 함수를 호출하는 코드를 예시한 것이다.
종래 기술에 의하면, malloc이라는 함수를 호출하기 위해 "malloc(100)"과 같이 함수를 직접 호출한다. 그러나 본 발명의 일 실시예에 따르면, malloc이라는 함수를 호출하기 위해, 먼저 심볼 조회 함수인 QuerySymbol을 호출함으로써 malloc에 대한 함수 포인터를 받아 온 후(610), 리턴되는 함수 포인터를 사용하여 malloc을 호출한다(620).
이러한 방식에 의해 컴포넌트 간 독립성이 생기는 이유는 아래에 도시된 어셈블리 언어로 표현된 내용에 의해 확인할 수 있다. 참조 번호 630 및 640은 상단의 프로그램에서 각각 610 및 620의 함수 호출에 대응하는 어셈블리 코드이다. 어셈블리의 call 명령어는 함수를 호출하는 명령어로, 관련 주소에 저장된 함수를 호출한다. 관련 주소로부터 해당 함수가 실행되기 위해 필요한 명령어 루틴들이 존재한다. 도 6을 참조하면, 첫번째 call 명령어(630)는 절대값 주소인 0x0을 사용하여 QuerySymbol을 호출하는 것이고, 두번째 call 명령어(640)는 계산된 주소인 [RegX]를 사용하여 다른 컴포넌트의 함수인 malloc을 호출하는 것이다. 만일 심볼 조회 함수인 QuerySymbol의 주소만 static으로 지정된다면, 첫번째 call 명령어(630)가 변하지 않기 때문에 참조하는 컴포넌트의 수정이 필요없다. [RegX]는 심볼 테이블 내의 malloc 주소를 포함하고 있음을 나타내기 위하여 "[]"로 표시한 것이다. 그러나, 실시예에 따라서는 두번째 call 명령어(640)에서 malloc의 실제 주소를 참조하도록 구현될 수 있다. 또한, 이 예에서는 OS가 제공하는 malloc 함수를 예로 들어 설명하였지만, 다른 컴포넌트의 함수를 사용하는 경우도 동일한 원리에 의하여 심볼 조회 함수를 통해 원하는 함수의 접근 정보를 얻은 후 해당 함수를 사용할 수 있다.
도 7은 본 발명에 따라 컴포넌트화된 소프트웨어의 다른 실시예를 도시한 것으로, 심볼 조회 함수를 사용하지 않고 링커(linker)를 수정함으로써, 소프트웨어 컴포넌트들(730-1 내지 730-N)의 바이너리 이미지가 운영체제 및 다른 소프트웨어 컴포넌트가 제공하는 심볼의 실제 주소를 획득하기 위해 심볼 테이블(720)을 참조하는 코드를 포함하도록 링크시키는 실시예이다. 전술한 실시예에서는 프로그램 작성시 하나의 외부 함수를 호출하기 위해 심볼 조회 함수를 호출하는 명령어와 실제로 사용하고자 하는 함수를 호출하는 명령어를 둘 다 포함시켜야 하나, 도 7의 실시예에서는 그럴 필요가 없다.
도 7을 참조하면, 이 실시예에서는 심볼 조회 함수가 포함되지 않으며, 메모리 맵 정보(710), 심볼 테이블(720) 및 하나 이상의 소프트웨어 컴포넌트들(730-1 내지 730-N)으로 구성된다. 도 3의 실시예에서와 마찬가지로, OS가 이들 소프트웨어 컴포넌트(730-1 내지 730-N) 중 하나 이상의 컴포넌트로 구현되는 구성도 가능 하다.
메모리 맵 정보(710)는 심볼 테이블(720), OS 및 각 컴포넌트(730-1 내지 730-N)가 로드될 메모리(RAM) 상의 주소 정보를 포함하며, OS 및 컴포넌트들(730-1 내지 730-N)을 링크할 때와 메모리에 로드할 때 사용되는 정보이다. 각 컴포넌트들이 링크되는 시점에, 현재 실행되는 명령어의 주소와 심볼 테이블의 심볼 주소 정보를 기준으로 실제 주소들이 지정된다. 따라서 현재 실행되는 명령어의 주소와 심볼 주소 정보는 각 컴포넌트 내의 각 명령어가 실행되기 위해서 중요한 정보이다. 메모리 맵 정보(710)는 각 컴포넌트의 base 주소를 지정하기 위한 정보이다.
심볼 테이블(720)은 각 컴포넌트(730-1 내지 730-N)가 사용하는 심볼들의 주소 정보를 저장하는 테이블이다. 각 컴포넌트(730-1 내지 730-N)가 사용하는 함수와 변수는 심볼 테이블(720)에 지정된 주소를 사용하여 이들을 사용하는 컴포넌트와 링크된다. 예를 들어, printf라는 함수를 사용하는 경우 종래의 링크 방법에 의하면 printf라는 함수가 시작되는 주소와 이 함수를 사용하는 컴포넌트가 직접 링크된다. 그러나, 본 발명의 일 실시예에 따르면 printf의 주소가 적힌 심볼 테이블 내의 주소와 링크된다. 따라서, 각 컴포넌트(730-1 내지 730-N)가 업데이트되는 경우 플래시 메모리에 저장된 심볼 테이블도 같이 업데이트될 필요가 있다. 만일 동적 로딩(dynamic)을 지원하고 싶으면 메모리(RAM)에 저장된 심볼 테이블을 업데이트해야 한다.
도 8은 도 7의 실시예를 플래시 메모리에 설치한 모습을 예시한 것으로, 미리 링크된 3개의 소프트웨어 컴포넌트(830, 840, 850)로 구성된 예이다. 메모리 맵 정보(810) 및 심볼 테이블(820)이 더 포함되며, 이들 정보는 도시된 바와 같이 OS(800)와 별도의 공간에 저장될 수도 있으나 OS(800) 내에 포함되도록 구현될 수도 있다.
도 9는 도 8의 소프트웨어가 RAM에 로드된 모습을 예시한 도면으로, 메모리 맵 정보(810)에 따라 각 구성 요소가 지정된 메모리 공간에 로드된 결과를 도시한 것이다.
도 9를 참조하면, 심볼 테이블(830)이 주소 0에서부터, OS(800)는 주소 300부터, 컴포넌트 1(830)은 주소 600부터, 컴포넌트 2(840)는 주소 1000부터, 컴포넌트 3(850)은 주소 1500부터 로드되어 있음을 알 수 있다.
도 10은 본 발명에 따른 심볼 테이블의 내용을 예시한 것이다.
도 10을 참조하면, 심볼 테이블(1010)은 각 심볼의 주소 값(Value)을 포함한다. 예컨대, 함수 printf는 주소 0x0640에서 시작되며(1012), 함수 strlen은 주소 0x0BB0에서 시작됨(1014)을 기록하고 있다. 심볼의 명칭(Name)은 참조를 위해 표기한 것이며 실제로는 심볼 테이블에 저장할 필요가 없다. 본 발명에서는 동적 링크 방법을 사용하지 않으며 링크 시점에 이미 관련 주소와 링크되기 때문이다. 아래 부분(1020)은 심볼 테이블(1010)을 바이너리 포맷으로 표현한 것이다. 각 심볼당 심볼의 주소를 위한 4 byte만이 사용되고 있음을 알 수 있다.
도 11은 도 10의 심볼 테이블이 업데이트된 후의 내용을 예시한 것이다.
도 11을 참조하면, 함수 printf의 시작 주소가 0x700으로 변경되었으며(1112), 함수 strlen의 시작 주소가 0x980으로 변경되었음을 알 수 있다. 이는 이들 함수를 제공하는 OS가 업데이트되었기 때문이다. 도 10에서와 마찬가지로 아래 부분(1120)은 심볼 테이블(1110)을 바이너리 포맷으로 표현한 것이다.
도 12는 도 9의 컴포넌트 2에서 함수를 호출하는 코드를 예시한 것이다.
도 12의 어셈블리 예제를 참조하면, 이 실시예에서는 도 6의 실시예와 달리 심볼 조회 함수를 호출하는 명령어가 필요하지 않음을 알 수 있다. printf를 호출하는 명령어는 printf의 시작 주소가 적혀 있는 심볼 테이블 내의 주소인 0x0000을 참조하는 어셈블리 명령어(1212)로, strlen을 호출하는 명령어는 strlen의 시작 주소가 적혀 있는 심볼 테이블 내의 주소인 0x0008을 참조하는 어셈블리 명령어(1214)로 컴파일 및 링크되어 있다. 이들 call 명령어는 심볼 테이블을 통하여 해당 함수가 저장되어 있는 주소로 분기하는 방법으로 작동한다. 즉, 간접 주소 지정(indirect addressing) 방식을 사용하여 필요한 함수의 주소를 심볼 테이블에 적어 놓고 심볼 테이블의 값을 사용하여 해당 함수로 가는 방식이다. 이 경우 심볼 테이블의 위치(주소)만 바뀌지 않으면 심볼을 사용하는 컴포넌트에는 영향을 주지 않고 상기 심볼을 포함하는 컴포넌트와 심볼 테이블만 업데이트해도 심볼 링크가 정상적으로 이루어진다.
도 11과 같이 printf 및 strlen 등의 함수를 제공하는 OS가 업데이트되어 심볼 테이블의 해당 주소값들(Value)이 변경되는 경우라도, printf와 strlen을 사용하는 도 12의 컴포넌트 2는 업데이트할 필요가 없다. 심볼 테이블의 주소(Addr.)는 변경되지 않기 때문에 심볼 테이블 내의 주소 0x0000에 기록된 정보(1112) 및 0x0008에 기록된 정보(1114)를 사용하여 간접적으로 함수를 호출하는 본 발명에서 는 심볼을 사용하는 컴포넌트들을 업데이트할 필요가 없는 것이다. 이를 위해서 심볼 테이블의 주소(Addr.)는 변경되지 않아야 하며, 새로운 심볼이 추가되는 경우는 테이블의 맨 끝에 덧붙여 저장해야 한다. 또한 전술한 바와 같이 심볼 테이블은 메모리 맵 정보에 지정된 주소로 항상 로드되어야 한다.
도 13은 종래의 방법에 따른 함수 호출의 원리를 설명하기 위한 도면이다.
도 13을 참조하면, 기존의 call 명령어(1302)는 printf가 있는 주소(1304)로 직접 분기하였다.
도 14는 본 발명에 따른 간접적인 함수 호출의 원리를 설명하기 위한 도면이다.
본 발명에서는 해당 함수의 주소가 기록되어 있는 심볼 테이블의 주소를 사용한다. 즉, 하나의 depth가 더해지는 것이다. 도 14를 참조하면, 컴포넌트 1에서 printf를 호출하는 경우, 주소 0x700의 심볼 테이블 항목을 참조하는 명령어(1402)로 변경되어 링크되어 있음을 알 수 있다. 심볼 테이블 내의 주소 0x700에는 0x04ba18이라는 OS 내의 주소가 적힌 항목(1406)이 존재하므로, "call [0x700]"은 결국 0x04ba18에서 시작되는 printf 함수(1408)를 호출하게 된다.
전술한 여러 예에서는 OS가 제공하는 함수들에 대해 설명하였지만 그 외의 컴포넌트들이 제공하는 함수를 사용하는 경우도 마찬가지 원리로 동작함은 자명하다.
도 15는 본 발명에 따른 소프트웨어 컴포넌트화 방법의 일 실시예를 도시한 흐름도이다.
도 15를 참조하면, 먼저 소프트웨어를 분할함으로써 적어도 하나의 컴포넌트가 생성된다(1502). 생성된 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블이 생성되며(1504), OS, 소프트웨어 컴포넌트들 및 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보가 생성된다(1506).
또한 실시예에 따라서는, 소프트웨어 컴포넌트들에 의해 호출되며, 심볼 테이블을 조회하여 입력된 심볼에 대한 접근 정보를 출력하는 심볼 조회 함수를 생성하는 단계가 더 포함될 수 있다. 이때 심볼에 대한 접근 정보는, 입력 심볼에 대한 심볼 테이블 내의 주소, 또는 입력 심볼에 대한 소프트웨어 컴포넌트나 OS 내의 실제 주소를 포함할 수 있다. 다른 실시예에 따르면, 상기 소프트웨어 컴포넌트들은, OS 및 다른 소프트웨어 컴포넌트가 제공하는 심볼의 실제 주소를 획득하기 위해 심볼 테이블을 참조하는 코드를 포함하도록 링크된 것일 수 있다.
도 16은 본 발명에 따라 컴포넌트화된 소프트웨어의 컴파일 및 링크 방법의 일 실시예를 도시한 흐름도이다.
도 16을 참조하면, 입력된 소스 코드에 대한 컴파일 후(1602, 1604), 메모리 맵 정보 및 심볼 테이블을 참조하여, 소스 코드 내의 외부 심볼 참조 코드를, 심볼 테이블을 참조하여 심볼의 실제 주소를 획득하는 간접 주소 방식의 코드로 변경하는 링크 과정이 수행된다(1606).
도 17은 본 발명에 따라 컴포넌트화된 소프트웨어의 업데이트 방법의 일 실시예를 도시한 흐름도이다. 본 발명에 따라 컴포넌트화된 소프트웨어는 각 컴포넌 트가 독립적으로 업데이트될 수 있다. 따라서 전체 소프트웨어 이미지를 업데이트할 필요 없이 변경된 컴포넌트와 심볼 테이블만을 업데이트하면 된다.
도 17을 참조하면, 소프트웨어 컴포넌트들을 모두 업데이트할 필요 없이 변경되어 업그레이드되어야 하는 컴포넌트만 업데이트하면 된다(1702). 또한, 업데이트된 소프트웨어 컴포넌트의 변경 내용을 반영하도록 심볼 테이블이 업데이트된다(1704). 각 컴포넌트가 로드될 메모리 주소가 변경된 경우는 메모리 맵 정보도 업데이트되어야 한다(1706).
본 발명에서와 같이 간접적인 방식으로 모든 외부 함수를 호출하는 경우 성능상의 문제를 고려하지 않을 수 없다. 자주 사용하는 함수일수록 더 큰 문제를 일으킬 수가 있다. 외부 컴포넌트의 함수들은 자주 호출되지 않을 수 있지만 OS가 제공하는 함수들은 많이 호출되기 때문에 성능에 영향을 줄 수도 있다. 이러한 문제를 예방하기 위해 OS가 제공하는 함수들은 간접적인 방식을 사용하지 않고 직접 호출하는 방식을 사용하도록 구현할 수도 있다. 직접 호출 방식을 사용하면 컴포넌트 간에 연관성이 생기므로 OS가 제공하는 함수들은 수정될 수 없으며 메모리 맵 정보에 설정된 OS의 base 주소는 변경될 수 없다.
그러나, 실험에 의하면 본 발명의 간접 호출 방식이 소프트웨어의 성능을 크게 저하시키지 않음이 증명되었다. 외부 함수 호출이 1303 개인 소프트웨어를 하나의 바이너리 이미지로 만들어 VxWorks에서 실행하였을 때 이미지의 크기는 974KB, 평균 Tick 카운트는 1594(26.57sec)였다. 이에 비해, 이 소프트웨어를 본 발명에 따라 컴포넌트화하여 동일 플랫폼인 VxWorks에서 테스트한 결과, 바이너리 이미지의 크기는 978KB, 평균 Tick 카운트가 1614(26.9sec)였다. 따라서, 본 발명에 따르면 하나의 바이너리 이미지로 소프트웨어를 생성하는 경우와 유사한 크기의 메모리만이 필요하며 실행 속도 또한 거의 유사하므로, 하나의 바이너리 이미지로 소프트웨어를 제공할 때의 장점과 컴포넌트화하여 제공할 때의 장점 모두를 취할 수 있음을 알 수 있다.
상술한 바와 같은 본 발명에 따른 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
이상에서 설명한 바와 같은 본 발명의 구성에 의하면, 종래에 소프트웨어를 컴포넌트화시켰을 때 심볼 정보로 인하여 늘어나는 파일 크기 문제를 해결하면서 소프트웨어를 컴포넌트화시킬 수 있다.
또한, 하나의 바이너리 이미지를 여러 개로 나누어 제공하므로, 소프트웨어 업그레이드시 변경된 컴포넌트만 업데이트할 수 있어 서버에서 다운받는 전송량의 크기를 줄일 수 있고 fail-safe한 업데이트를 위해 백업해야 할 파일 크기도 크게 줄일 수 있으며 업데이트 속도도 크게 개선할 수 있다. 결과적으로 효율적인 업데이트가 가능하다.

Claims (15)

  1. 컴포넌트화된 소프트웨어를 기록한 정보저장매체에 있어서,
    적어도 하나의 소프트웨어 컴포넌트와,
    상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블과,
    상기 적어도 하나의 소프트웨어 컴포넌트와 상기 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 포함하는 것을 특징으로 하는 정보저장매체.
  2. 제1항에 있어서,
    상기 메모리 맵 정보는, 운영체제가 로드될 메모리 주소 정보를 더 포함하는 것을 특징으로 하는 정보저장매체.
  3. 제1항에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트에 의해 호출되며, 상기 심볼 테이블을 조회하여 입력된 심볼에 대한 접근 정보를 출력하는 심볼 조회 함수를 더 포함하는 것을 특징으로 하는 정보저장매체.
  4. 제3항에 있어서,
    상기 입력된 심볼에 대한 접근 정보는, 상기 입력 심볼에 대한 상기 심볼 테이블 내의 주소, 또는 상기 입력 심볼에 대한 상기 적어도 하나의 소프트웨어 컴포넌트나 운영체제 내의 실제 주소를 포함하는 것을 특징으로 하는 정보저장매체.
  5. 제1항에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트는, 운영체제 및 다른 소프트웨어 컴포넌트가 제공하는 심볼의 실제 주소를 획득하기 위해 상기 심볼 테이블을 참조하는 코드를 포함하는 것을 특징으로 하는 정보저장매체.
  6. 소프트웨어 컴포넌트화 방법에 있어서,
    상기 소프트웨어를 분할하여 적어도 하나의 컴포넌트를 생성하는 단계와,
    상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블을 생성하는 단계와,
    운영체제, 상기 적어도 하나의 소프트웨어 컴포넌트 및 상기 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 생성하는 단계를 포함하는 것을 특징으로 하는 컴포넌트화 방법.
  7. 제6항에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트에 의해 호출되며, 상기 심볼 테이블을 조회하여 입력된 심볼에 대한 접근 정보를 출력하는 심볼 조회 함수를 생성하 는 단계를 더 포함하는 것을 특징으로 하는 컴포넌트화 방법.
  8. 제7항에 있어서,
    상기 입력된 심볼에 대한 접근 정보는, 상기 입력 심볼에 대한 상기 심볼 테이블 내의 주소, 또는 상기 입력 심볼에 대한 상기 적어도 하나의 소프트웨어 컴포넌트나 상기 운영체제 내의 실제 주소를 포함하는 것을 특징으로 하는 컴포넌트화 방법.
  9. 제6항에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트는, 상기 운영체제 및 다른 소프트웨어 컴포넌트가 제공하는 심볼의 실제 주소를 획득하기 위해 상기 심볼 테이블을 참조하는 코드를 포함하는 것을 특징으로 하는 컴포넌트화 방법.
  10. 적어도 하나의 소프트웨어 컴포넌트로 구성된 소프트웨어의 링크 방법에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여, 상기 적어도 하나의 소프트웨어 컴포넌트를 링크시키는 단계를 포함하는 것을 특징으로 하는 링크 방법.
  11. 제10항에 있어서,
    상기 링크시키는 단계는, 상기 적어도 하나의 소프트웨어 컴포넌트 내의 심볼 참조 코드를, 상기 심볼 테이블을 참조하여 상기 심볼의 실제 주소를 획득하는 코드로 변경하는 것을 특징으로 하는 링크 방법.
  12. 적어도 하나의 소프트웨어 컴포넌트로 구성된 소프트웨어의 링크 방법을 수행하는 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체에 있어서, 상기 방법은,
    상기 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블이 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여, 상기 적어도 하나의 소프트웨어 컴포넌트를 링크시키는 단계를 포함하고,
    상기 링크시키는 단계는, 상기 적어도 하나의 소프트웨어 컴포넌트 내의 심볼 참조 코드를, 상기 심볼 테이블을 참조하여 상기 심볼의 실제 주소를 획득하는 코드로 변경하는 것을 특징으로 하는 기록 매체.
  13. 각 컴포넌트가 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여 링크된 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블을 포함하는 소프트웨어의 업데이트 방법에 있어서,
    상기 적어도 하나의 소프트웨어 컴포넌트 중 업그레이드될 소프트웨어 컴포 넌트를 업데이트하는 단계와,
    상기 업데이트된 소프트웨어 컴포넌트의 변경 내용을 반영하도록 상기 심볼 테이블을 업데이트하는 단계를 포함하는 것을 특징으로 하는 업데이트 방법.
  14. 제13항에 있어서,
    상기 각 컴포넌트가 로드될 메모리 주소가 변경된 경우는 상기 메모리 맵 정보를 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 업데이트 방법.
  15. 각 컴포넌트가 로드될 메모리 주소 정보를 기록한 메모리 맵 정보를 참조하여 링크된 적어도 하나의 소프트웨어 컴포넌트와 상기 적어도 하나의 소프트웨어 컴포넌트가 사용하는 심볼들에 대한 주소 정보를 기록한 심볼 테이블을 포함하는 소프트웨어의 업데이트 방법을 수행하는 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체에 있어서, 상기 업데이트 방법은,
    상기 적어도 하나의 소프트웨어 컴포넌트 중 업그레이드될 소프트웨어 컴포넌트를 업데이트하는 단계와,
    상기 업데이트된 소프트웨어 컴포넌트의 변경 내용을 반영하도록 상기 심볼 테이블을 업데이트하는 단계와,
    상기 각 컴포넌트가 로드될 메모리 주소가 변경된 경우, 상기 메모리 맵 정보를 업데이트하는 단계를 포함하는 것을 특징으로 하는 기록 매체.
KR1020060053894A 2006-06-15 2006-06-15 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체 KR20070119356A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020060053894A KR20070119356A (ko) 2006-06-15 2006-06-15 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체
US11/641,056 US20070294683A1 (en) 2006-06-15 2006-12-19 Methods of generating, linking and updating component-based software and information storage medium having such software recorded thereon
PCT/KR2007/002308 WO2007145428A1 (en) 2006-06-15 2007-05-10 Methods of generating, linking, and updating component-based software and information storage medium having such software recorded thereon
CNA2007800009748A CN101346693A (zh) 2006-06-15 2007-05-10 产生、链接和更新基于组件的软件的方法和其上记录有这种软件的信息存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060053894A KR20070119356A (ko) 2006-06-15 2006-06-15 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체

Publications (1)

Publication Number Publication Date
KR20070119356A true KR20070119356A (ko) 2007-12-20

Family

ID=38831912

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060053894A KR20070119356A (ko) 2006-06-15 2006-06-15 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체

Country Status (4)

Country Link
US (1) US20070294683A1 (ko)
KR (1) KR20070119356A (ko)
CN (1) CN101346693A (ko)
WO (1) WO2007145428A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080288919A1 (en) * 2007-05-14 2008-11-20 Microsoft Corporation Encoding of Symbol Table in an Executable
US8175099B2 (en) 2007-05-14 2012-05-08 Microsoft Corporation Embedded system development platform
US20090228875A1 (en) * 2008-03-04 2009-09-10 Devries Alex Method and System for Reducing Disk Allocation by Profiling Symbol Usage
US8108645B2 (en) * 2008-06-26 2012-01-31 Hewlett-Packard Development Company, L.P. Optimized memory allocation via feature extraction
US8468516B1 (en) * 2008-12-19 2013-06-18 Juniper Networks, Inc. Creating hot patches for embedded systems
WO2011130869A1 (en) * 2010-04-19 2011-10-27 Hewlett-Packard Development Company, L.P. Object linking based on determined linker order
CN101882094A (zh) * 2010-06-10 2010-11-10 中兴通讯股份有限公司 嵌入式系统制作补丁的方法和系统
GB2527060B (en) * 2014-06-10 2021-09-01 Arm Ip Ltd Method and device for updating software executed from non-volatile memory
US10108404B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Compiling optimized entry points for local-use-only function pointers
CN114840400A (zh) * 2022-04-14 2022-08-02 北京字节跳动网络技术有限公司 异常组件的识别方法、装置、设备、存储介质及程序产品

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in source-code development system
US5613120A (en) * 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US5790856A (en) * 1995-05-08 1998-08-04 Apple Computer, Inc. Methods, apparatus, and data structures for data driven computer patches and static analysis of same
US5938766A (en) * 1997-03-21 1999-08-17 Apple Computer, Inc. System for extending functionality of a digital ROM using RAM/ROM jump tables and patch manager for updating the tables
US6349408B1 (en) * 1998-03-23 2002-02-19 Sun Microsystems, Inc. Techniques for implementing a framework for extensible applications
US20030074656A1 (en) * 2001-09-14 2003-04-17 Yoshiaki Irino Program execution apparatus and method, computer program for performing the program execution method, image forming system, and address solution method
US7562346B2 (en) * 2003-09-02 2009-07-14 Microsoft Corporation Software componentization for building a software product
US20060080288A1 (en) * 2004-10-11 2006-04-13 Microsoft Corporation Interaction of static and dynamic data sets
US7721298B2 (en) * 2004-12-03 2010-05-18 Microsoft Corporation Operating system performance

Also Published As

Publication number Publication date
CN101346693A (zh) 2009-01-14
WO2007145428A1 (en) 2007-12-21
US20070294683A1 (en) 2007-12-20

Similar Documents

Publication Publication Date Title
KR20070119356A (ko) 소프트웨어의 컴포넌트화 방법, 링크 방법 및 업데이트방법과, 소프트웨어를 기록한 정보저장매체
US6154878A (en) System and method for on-line replacement of software
US6542167B1 (en) System and method for flexible software linking
US6876996B2 (en) Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
US5790860A (en) Method and apparatus for patching code residing on a read only memory device
US6202205B1 (en) System and method for profile-based, on-the-fly optimization of library code
US5634114A (en) Dynamic link library version negotiation
US6199203B1 (en) Memory management techniques for on-line replaceable software
US5974428A (en) Method and apparatus for class version naming and mapping
US6934943B2 (en) Optimization of control transfers to dynamically loaded modules
US6269442B1 (en) Apparatus and method for on-line replacement of a running program code and data using checkpoints
US20040003388A1 (en) Preparation of a software configuration using an XML type programming language
US20110154378A1 (en) Api namespace virtualization
US20080005728A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
WO1994027220A1 (en) Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
US20080022265A1 (en) Methods, systems, and computer program products for generating and using object modules
CN101430705B (zh) 基于嵌入式数据库的存储方法和装置
US20060150182A1 (en) Metadata-based application model for large applications
US20090307676A1 (en) Dead Functions Elimination in Dynamic Linked Libraries for Code Size Reduction of Operating Systems in Embedded Systems
CN114756296A (zh) 可读写挂载启动方法、装置、存储介质及电子设备
JP5895616B2 (ja) 情報処理装置およびプログラム実行方法
KR100727627B1 (ko) 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템
US20050149270A1 (en) Componentware creating method, apparatus and recording medium
US20070245328A1 (en) Method of calling a method in virtual machine environment and system including a virtual machine processing the method

Legal Events

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