KR100745256B1 - 임베디드 시스템에서의 코드 오버레이 방법 - Google Patents

임베디드 시스템에서의 코드 오버레이 방법 Download PDF

Info

Publication number
KR100745256B1
KR100745256B1 KR1020050095217A KR20050095217A KR100745256B1 KR 100745256 B1 KR100745256 B1 KR 100745256B1 KR 1020050095217 A KR1020050095217 A KR 1020050095217A KR 20050095217 A KR20050095217 A KR 20050095217A KR 100745256 B1 KR100745256 B1 KR 100745256B1
Authority
KR
South Korea
Prior art keywords
code
ram
embedded system
application
flash memory
Prior art date
Application number
KR1020050095217A
Other languages
English (en)
Other versions
KR20070040007A (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 KR1020050095217A priority Critical patent/KR100745256B1/ko
Publication of KR20070040007A publication Critical patent/KR20070040007A/ko
Application granted granted Critical
Publication of KR100745256B1 publication Critical patent/KR100745256B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/44505Configuring for program initiating, e.g. using registry, configuration files

Abstract

본 발명은 임베디드 시스템에 있어서, 특히 프로그램 실행시 필요한 코드블록을 플레쉬 메모리에서 램 영역으로 복사한 후 실행시키는 코드 오버레이 방법에 관한 것이다.
본 발명에 따른 임베디드 시스템에서의 코드 오버레이 방법은, 어플리케이션 프로그램의 정형화된 순서에 의해 실행 스케쥴이 생성되는 단계; 상기 어플리케이션 프로그램의 원본 소스를 컴파일하여 목적 파일을 생성하는 단계; 상기 생성된 스케쥴 정보, 각 목적 파일의 크기, 임베디드 시스템의 메모리 정보를 입력받아 임베디드 시스템의 플레쉬 메모리에 저장될 어플리케이션의 이미지 레이아웃을 결정하고, 메인 함수 및 링커 스트립트를 생성하는 단계; 상기 생성된 링커 스트립트를 이용하여 링킹 과정을 수행한 후 실행 가능한 이미지를 생성하고 임베디드 시스템의 플레쉬 메모리에 전달하는 단계를 포함하는 것을 특징으로 한다.
호스트, 임베디드 시스템, 코드 오버레이

Description

임베디드 시스템에서의 코드 오버레이 방법{CODE OVERLAY METHOD IN THE EMBEDDED SYSTEM}
도 1은 본 발명에 따른 호스트 및 임베디드 시스템의 구성을 나타낸 도면.
도 2는 본 발명에 따른 플레쉬 메모리의 구조를 나타낸 구성도.
도 3은 본 발명에 따른 임베디드 시스템에서의 코드 오버레이 방법을 나타낸 흐름도.
도 4는 본 발명에 따른 메모리 레이 아웃을 나타낸 도면.
도 5는 본 발명에 따른 메인 함수 구조의 예를 나타낸 도면.
도 6은 본 발명에 따른 플레쉬 메모리의 레이아웃으로서, 클러스터를 수행한 경우와 수행하지 않는 경우를 나타낸 도면.
도 7은 본 발명에 따른 위치 결정의 예를 나타낸 도면.
<도면의 주요 부분에 대한 부호의 설명>
10...플레쉬 메모리 20...램
30...메인 제어부 40...호스트
41...스케쥴 생성부 42...클러스터링 및 위치결정부
43....링커부
본 발명은 임베디드 시스템에 있어서, 특히 어플리케이션 프로그램 실행시 스케쥴에 따라 필요한 코드블록만을 램 영역으로 복사한 후 실행시키는 코드 오버레이 방법에 관한 것이다.
저 사양의 모바일 폰이나 메모리 카드 컨트롤러 같은 대부분의 임베디드 시스템의 경우, 내부에 낸드(NAND)형 플레쉬 메모리와 에스 램(SRAM)을 구비하고 있다. 상기 플레쉬 메모리에는 부트 스트랩(bootstrap) 코드와 같은 펌 웨어가 저장되어 있고, 시스템이 부팅되면 상기 펌 웨어를 에스 램으로 복사한 후 시작 코드 번지로 점프하여 구동하게 된다.
이때, 에스 램의 크기는 복사되는 전체 프로그램의 크기 보다 커야 되는데, 다양한 기능의 추가로 인해 프로그램의 크기는 점차 늘어나는 반면, 에스 램의 크기는 이미 고정되어 있고, 그 크기를 늘리기 위해서는 추가의 비용이 들어가게 된다.
즉, 대부분의 임베디드 시스템에서 기능 추가 및 개선으로 인해 어플리케이션의 코드 크기는 계속하여 증가하게 된다. 그러나, 램의 크기는 이미 고정되어 있어, 실행될 수 있는 프로그램의 크기는 한계가 있다. 이를 해결하기 위해서는 하드웨어적으로 더 큰 용량의 램으로 교체해야 하는 등 비용문제가 발생된다.
또한 제품이 이미 출시되어 고객이 사용 중이라면 램 교체 등이 거의 불가능 하므로, 제품에 대한 신뢰도가 떨어지는 문제가 있다.
본 발명의 제 1목적은 임베디드 시스템에서 램의 용량에 따른 실행 가능한 프로그램의 크기 제약을 없앨 수 있도록 한 임베디드 시스템에서의 코드 오버레이 방법을 제공함에 있다.
본 발명의 제 2목적은 런 타임이 필요한 코드 블록만을 램 영역에 복사하고, 상기 복사할 때 복사 오버헤드를 줄일 수 있도록 한 임베디드 시스템에서의 코드 오버레이 방법을 제공함에 있다.
상기한 목적 달성을 위한 본 발명에 따른 임베디드 시스템에서의 코드 오버레이 방법은,
응용프로그램에서 시간에 따라 수행되는 루틴들의 순차적 이벤트에 의해 실행 스케쥴이 생성되는 단계;
상기 어플리케이션 프로그램의 원본 소스를 컴파일하여 목적 파일을 생성하는 단계;
상기 생성된 스케쥴 정보, 각 목적 파일의 크기, 임베디드 시스템의 메모리 정보를 입력받아, 클러스터링 및 위치 결정 과정을 수행하며 임베디드 시스템의 플레쉬 메모리에 저장될 어플리케이션의 이미지 레이아웃을 결정하고 메인 함수 및 링커 스트립트를 생성하는 단계;
상기 생성된 링커 스트립트를 이용하여 링킹 과정을 수행한 후 실행 가능한 이미지를 생성하고 임베디드 시스템의 플레쉬 메모리에 전달하는 단계를 포함하는 것을 특징으로 한다.
바람직하게, 상기 임베디드 시스템의 초기 동작으로 부트 스트랩 코드가 실행되면, 플레쉬 어플리케이션의 루트함수에 해당되는 메인 함수가 램으로 복사된 후, 상기 메인 함수가 시스템에 상주하여 상기 실행 스케쥴에 따라 전체 어플리케이션의 코드블록 실행과 로딩을 담당하는 단계를 포함하는 것을 특징으로 한다.
바람직하게, 상기 코드 블록 실행은 런 타임시 필요한 코드블록만을 램 영역에 복사하여 사용하는 오버레이 기법을 이용하는 것을 특징으로 한다.
바람직하게, 상기 클러스터링 및 위치 결정은 실행 스케쥴에 따라 각 코드블록의 위치 및 클러스터에 따른 복사 오버헤드를 줄이기 위해 유전 알고리즘을 적용한 것을 특징으로 한다.
바람직하게, 상기 램의 크기는 어플리케이션의 크기 보다 크지 않는 것을 특징으로 한다.
한편, 본 발명의 다른 실시 예에 따른 임베디드 시스템에서의 코드 오버레이 방법은,
부트 스트랩 코드 및 어플리케이션 프로그램이 저장된 플레쉬 메모리와; 작업공간인 램과; 상기 플레쉬 메모리 및 램을 제어하는 메인 제어부를 포함하는 임베디드 시스템에 있어서,
시스템이 부팅되면 부트스트랩 코드가 실행되어 하드웨어 초기화를 수행하는 단계; 상기 어플리케이션의 메인 함수를 램에 복사하는 단계; 상기 램에 복사된 메인 함수에서 미리 정해진 실행 스케쥴에 따라 전체 어플리케이션에서 필요한 코드블록만을 램 영역에 복사시키고 실행시키는 단계를 포함하는 것을 특징으로 한다.
바람직하게, 상기 메인 함수에는 상기 실행 스케쥴에 따라 서로 호출관계에 있는 코드블록들의 로딩을 위해 클러스터링한 정보를 포함하는 것을 특징으로 한다.
바람직하게, 상기 메인 함수에는 각 코드블록의 실행 스케쥴과 각각의 코드블록 램 주소를 고려하여 인접한 코드블록의 램 주소가 서로 같은 메모리 영역을 사용 여부에 대한 위치 결정 정보를 포함하는 것을 특징으로 한다.
상기와 같이 구성되는 본 발명 실시 예에 따른 임베디드 시스템에서의 코드 오버레이 방법에 대하여 첨부된 도면을 참조하여 설명하면 다음과 같다.
도 1은 본 발명에 따른 임베디드 시스템의 구성도이다.
도 1을 참조하면, 페이지 단위로 이동되는 다운로드받은 이미지를 저장하고 있는 비휘발성 메모리인 플레쉬 메모리(10)와, 작업 공간으로서의 역할을 하는 램(예: SRAM)(20)과, 상기 플레쉬 메모리(10) 및 램(20)에 버스 연결되어 제어하는 메인 제어부(30)와, 상기 메인 제어부(30)를 통해 코드 오버레이로 실행 가능한 이미지를 다운로드시켜 주는 호스트(40)를 포함하는 구성이다.
여기서, 상기 플레쉬 메모리(10)는 예컨대 낸드(NAND) 플레쉬 메모리로 구성되며, 다운로드받은 어플리케이션 프로그램(즉, 이미지)이 저장된다. 또한 상기 플 레쉬 메모리(20)에는 부트스트랩 코드(bootstrap code)와 어플리케이션 다운로드를 관리하는 코드 부분(미도시)이 저장되어 있다.
상기와 같이 구성되는 본 발명 실시 예에 따른 임베디드 시스템에서의 코드 오버레이 장치 및 방법에 대하여 첨부된 도면을 참조하여 설명하면 다음과 같다.
먼저, 도 1을 참조하면, 시스템이 부팅을 시작되면 메인 제어부(30)는 상기 플레쉬 메모리(10)에 저장되어 있는 상기 부트 스트랩 코드를 램(20)에 복사시킨 후 부트 스트랩 코드를 실행시키고 보드 초기화와 같은 하드웨어 초기화 작업을 실행하게 된다.
또한 상기 플레쉬 메모리(20)에 있는 어플리케이션 프로그램 전체(데이터까지 포함)를 램(20)의 저장 영역으로 복사하게 된다. 복사를 마친 후 해당 어플리케이션의 시작 부분으로 점프를 하여 어플리케이션 프로그램을 실행시키게 된다.
이때, 어플리케이션을 전체 복사함에 있어서, 램(20)의 메모리 크기가 제한적이기 때문에, 본 발명에서는 현재 필요한 코드들 또는 앞으로 실행될 코드들만을 복사하여 램 용량이 초과되는 것을 방지하게 된다. 이런 방식으로 코드가 실행이 되면 서로 다른 코드 블록들이 같은 메모리 번지를 사용하게 된다(이하 코드 오버레이 라 함).
이러한 코드 오버레이를 위해 호스트(40)에서는 코드 오버레이로 실행 가능한 이미지를 생성하여 메인 제어부(30)를 통해 플레쉬 메모리(10)에 다운로드시켜 준다.
이를 위해서, 호스트(40)에는 스케쥴 생성부(41), 클러스터링 및 위치 결정 부(42), 링커부(43)를 포함한다. 상기 스케쥴 생성부(41)는 정형화된 순서를 가지는 응용 프로그램을 그 대상으로 하고 있으며, 실제 임베디드 시스템의 응용 프로그램들의 경우 각 이벤트가 시간에 따라 수행하는 루틴들이 순차(Sequential)적으로 정해져 있으므로, 그러한 순차적인 이벤트에 의해 시간 기준으로 스케쥴을 생성하게 된다. 여기서, 상기 루틴은 하나의 펑션(function)이 아니라 펑션들의 모임으로 어떤 특정 목적을 가지고 실행된다. 즉, 이러한 실행 스케쥴은 스케쥴 생성부(41)에 의해 생성된다.
클러스터링 및 위치 결정부(42)는 상기 생성된 스케쥴 정보와 각 코드블록의 크기를 입력으로 받아서, 클러스터링 및 위치 결정을 수행하여, 메인 함수와 파일생성, 링커 스트립트를 생성하여 출력하게 된다.
그리고, 링커부(43)는 상기 생성된 링커 스트립트를 읽어들여 이를 분석한 후 링커 스트립트에 지시한 위치에 따라 링킹 작업을 수행하여, 실행 가능한 최종 이미지를 생성하게 된다. 그리고, 호스트(40)는 상기 링킹 작업을 통해 최종 생성된 이미지를 통신 수단(미도시)으로 연결된 메인 제어부(30)를 통해 플레쉬 메모리(10)에 다운로드시켜 준다.
구체적으로 설명하면, 코드 오버레이를 하기 위해서는 플레쉬 메모리(10)의 물리적 특성에 따라 코드들을 몇 개의 영역으로 나누어 저장하게 된다. 또한 메인 제어부(30)는 램 영역으로 코드를 복사하기 위해 플레쉬 메모리에서 코드를 읽을 때 플레쉬 메모리 내부에서 페이지 단위로 이동을 하게 된다. 여기서, 도 2는 플레쉬 메모리의 구조를 나타낸 도면이다.
상기 플레쉬 메모리의 페이지 크기는 일정한 크기 예컨대, 4K 정도의 크기를 갖는다. 예를 들면, 1K 정도의 코드 영역을 플레쉬 메모리에서 램으로 복사하려고 할 때 플레쉬 메모리 내부에서는 해당되는 1K가 걸쳐져 있는 페이지들을 모두 내부의 버퍼 영역으로 이동시키게 된다. 이는 페이지의 복사 회수가 증가되는 문제가 발생된다.
이를 해결하기 위해, 본 발명은 관련된 코드블록(함수)들을 클러스터링(Clustering)하고, 상기 클러스터링된 코드블록을 상기 페이지 크기 단위의 바운더리(boundary)의 정수배 안에 들어가도록 플레쉬 메모리에 저장시킨다. 즉, 어플리케이션 이미지를 플레쉬 메모리에 저장할 때 이미지의 레이아웃을 플레쉬 메모리의 페이지 단위의 특성을 이용하여 저장함으로써, 복사 오버헤드를 줄일 수 있다.
도 3은 본 발명에 따른 호스트에서 임베디드 시스템을 위한 코드 오버레이 방법을 나타낸 플로우 챠트이다.
도 3을 참조하면, 원본 소스 파일을 프로파일(Profile)하여 함수들이 어떤 순서로 실행되는 지에 따라 스케쥴을 정하게 된다(41). 그리고, 원본 소스 파일(42)을 컴파일(compile)하여(43) 목적 파일(object file)을 만들게 된다(44). 이때 목적 파일을 알 수 있다.
여기서, 원본 소스 파일은 블록별로 나누어져 있으며, 스케쥴이 A->B->C라면 A,B,C라는 코드 블록으로 이루어진다. 상기 A->B->C 스케쥴에 의해 세 개의 원본 소스 파일 A.c, B.c, C.c 필요하게 된다.
그리고, 클러스터링 및 위치 결정 과정을 수행하게 된다(45). 이때 클러스터 링 및 위치 결정을 위해 각 목적 파일의 크기, 실행 스케줄, 그리고 시스템의 메모리 상황(NAND 플레쉬의 페이지 크기, 램의 크기)에 해당되는 파라미터들이 입력된다.
이후, 상기 시스템 메모리 상황 등에 의해 플레쉬 메모리에 저장될 어플리케이션 이미지 레이아웃이 결정되고, 상기 스케쥴과 로딩을 담당하게 될 메인 함수(main())(46) 및 링커 스트립트(47)가 만들어져, 링커부의 입력으로 들어간다. 상기 메인 함수는 스케쥴에 따라 로딩 제어를 수행하며, 링커 스트립트는 로딩을 수행하게 된다.
여기서, 상기 클러스터링과 위치 결정 과정은 다양한 가능성에 대하여 유전 알고리즘을 적용하여 플레쉬 메모리에서 램으로의 복사 오버헤드가 최소가 되는 최적의 레이아웃을 찾게 된다. 마지막 링킹(48) 과정을 마치면서 실행 가능한 이미지가 생성됨으로써(49), 임베디드 시스템의 플레쉬 메모리에 어플리케이션 이미지가 다운로드 된다.
상기 링킹 과정을 수행하는 링커는 응용 프로그램을 실행하기 위한 것으로, 어떠한 과정을 통하여 실행되는지를 링크 스트립트를 참조하게 된다. 예를 들면, 링커는 C언어로 짜여진 원본 소스는 컴파일러에 의해 어셈블리로 바뀌고, 이것은 어셈블러를 거쳐 목적 파일 형태로 변화게 된다. 즉, 이렇게 만들어진 목적파일을 메모리에 넣어 실행파일을 만드는 것이다. 이러한 링킹 과정에서 링커 명령 파일(Linker command file)이 목적 파일을 어떻게 결합하고 프로그램 데이터를 임베디드 시스템 메모리의 어느 곳에 배치할지를 링커에게 명령한다. 그 명령 안에 프로 그래머가 의도한 메모리에 대한 정의와 섹션의 배치가 들어가 DSP 칩을 구동하게 되는 것이다. 즉, 링커는 응용 프로그램을 실행시켜 만든 목적 파일을 실제적으로 DSP 칩 안에서 실행 가능하도록 수행하고 있다.
도 4를 참조하여, 본 발명에서 어플리케이션이 실행될 때의 시스템의 메모리 레이 아웃을 설명하면 다음과 같다.
초기 램(20)에는 데이터가 없는 상태에서 플레쉬 메모리(10)에 어플리케이션 이미지(A,B,C)(11,12,13)가 저장되어 있게 된다. 시스템이 동작 즉, 런 타임시 부트 스트립 코드(미도시)가 먼저 실행된 후 어플리케이션의 루트 함수에 해당되는 메인 함수 부분이 램(20)으로 복사된다.
상기 램(20)에 복사된 메인 함수(21)는 시스템이 꺼지기 전까지 항상 램에 상주하면서 스케쥴 정보에 따라 전체 어플리케이션의 실행과 로딩을 담당한다. 상기 로딩은 실제적으로 링커 스트립트에서 담당하게 된다. 즉, 스케쥴에 따라 플레쉬 메모리(10)에 저장된 필요한 코드블록 A,B,C(11,12,13)이 로딩되어 오버레이 버퍼(Overlay buffer)(22)에 복사되면서 어플리케이션이 실행된다
도 5는 본 발명에 따른 메인 함수의 구조의 예로서, 실행 스케쥴과 로딩에 대해 설명한다. 도 4 및 도 5를 참조하면, 상기 메인 함수(main())는 스케쥴에 의해 "ABABCCC"라는 순서로 코드블록(함수)을 실행시키게 된다. 만약 코드블록 A(11)를 실행해야 하는데, 코드블록 A(11)가 램(20)의 오버레이 버퍼(22)에 없을 경우 플레쉬 메모리(10)에서 램(20)으로 코드블록 A(11)를 복사해 가지고 와서 실행을 시키게 된다. 이때, 플레쉬 메모리(20)에서 램(10)으로 복사할 때 복사에 따른 시 간 지연이 있게 된다. 이는 상기에서 실행되는 메인함수는 임베디드 시스템에 복사된 후 클러스터링 및 위치 결정 과정에 의해 복사 시간 지연을 최소화시킬 수 있다. 즉, 메인 함수에 실행스케쥴뿐만 아니라, 클러스터링 정보 및 위치 결정 정보를 포함시켜 줄 수 있다.
도 6은 본 발명에 따른 클러스터링의 기능에 대해 설명하고 있다. 가)는 클러스터링을 하지 않는 경우로서, 코드블록 A 데이터가 필요한 경우 코드블록 A 데이터가 두 개의 페이지에 걸쳐 있기 때문에 두 개의 페이지(Page 1,2)를 읽어야 하며, 이와는 별도로 코드블록 B 데이터가 필요한 경우 한 번의 페이지(page 3)를 또 읽어야 한다. 그러나 나)는 클러스터링을 수행한 경우로서, 코드블록 A 데이터와 코드블록 B 데이터가 합쳐져서 두 개의 페이지에 들어가기 때문에 코드블록 A 데이터를 읽을 때 코드블록 B 데이터도 자동으로 읽게 된다. 만약 코드블록 A 데이터와 코드블록 B 데이터가 스케쥴상 서로 호출한다면 이는 아주 효율적인 클러스터링이 된다.
이와 같이, 서로 연관이 있는 데이터들을 클러스터링함으로써, 상기 클러스터링되는 데이터의 호출시 복사 시간 및 램 메모리 공간의 활용을 크게 할 수 있다.
도면 7은 본 발명에 따른 위치 결정 예를 설명한 것이다.
도 7을 참조하면, 모든 조건이 다 같고 단지 위치 결정만 다른 두 가지 예를 보여주고 있다. 여기서, 입력조건은 스케쥴이 ABABCCC이며, 램의 크기는 4K, 낸드플레쉬 메모리의 페이지 크기는 2K이고, 코드블록 A,B,C의 크기는 2K이다. 즉, 전 체 어플리케이션의 사이즈는 6K이고 램의 용량은 4K이다.
가)의 경우는 코드블록 A와 코드블록 C에 같은 램 주소가 할당되어 있고, 나)의 경우에는 코드블록 A와 코드블록 B에 같은 램 주소가 할당되어 있다. 같은 주소가 할당되어 있다는 것은 두 개가 서로 같은 메모리 영역을 차지하기 때문에 배타적인 관계가 있다. 코드블록 A가 램에 먼저 상주하고 있었는데 같은 영역을 할당받은 코드블록 C가 램으로 복사된다면 전에 있던 코드블록 A는 무효화(삭제)가 된다. 그러므로 실행 스케쥴에 따라 각 코드블록들의 위치를 잘 결정해 주면 상당한 복사 오버헤드를 줄이는 효과가 있다.
가)의 경우는 복사(로드)가 3번만 일어나는 반면, 나)의 경우는 5번이나 일어나게 된다. 이는 코드블록 A와 B가 서로 호출하는 긴밀한 관계인데 같은 주소를 할당하여 서로 지우기 때문이다.
즉, 가)의 경우는 본 발명의 위치 결정 예로서, 실행 스케쥴 ABABCCC에 의해 load A, load B, hit, hit, hit, load C(A 삭제), hit, hit 순서로 동작하면서, 복사가 3번 발생하게 된다.
그러나, 나)의 경우는 종래 문제점으로서, 실행 스케쥴 ABABCCC에 의해 load A, load B(A 삭제), load A(B 삭제), load B(A 삭제), load C, hit, hit로 동작하면서, 복사가 5번 이루어진다.
이와 같이 최소의 복사 오버헤드가 발생하도록 클러스터링과 위치결정을 수행하게 되는데, 이를 위해 유전 알고리즘을 이용하여 최적의 레이아웃을 찾게 된다. 일반적인 유전 알고리즘은 세대(generation)를 거듭해 가면서 좋은 유전자를 계속 남기고 이것을 계속 교배하여 더 좋은 형질을 얻는 것으로, 최종에는 최적의 해(solution)가 남게 된다. 이에 따라 서로 교차되어 동작하는 코드블록들은 서로 다른 램 위치로 결정하고, 서로 연관된 코드블록들은 같은 램 주소를 할당하지 않게 된다. 또 마지막에 실행될 코드블록은 앞으로 실행되지 않을 램 위치로 결정함으로써, 서로 중복되어 호출되는 문제를 해결하여 최적의 레이아웃을 구현할 수 있다.
여기서, 코드블록 A와 코드블록 B가 같은 램 주소로 할당되면, 두 코드블록은 서로 스케쥴 상에서 연관성이 떨어지는 경우이다. 또한 코드블록 A가 호출된 후 코드블록 B가 호출되는 경우 혹은 반대의 경우가 없으므로, 두 개의 코드블록을 같은 메모리에 할당을 하여도, 서로 교체하는 경우가 발생하지 않으므로 플레쉬 메모리에서 다시 호출할 경우가 발생하지 않게 된다.
예를 들면, 코드블록 ABA의 순서로 스케쥴이 된다면 먼저 코드블록 A를 플레쉬 메모리에서 호출하여 복사하게 되며, 그 다음에 코드블록 B를 복사하게 된다. 만약 같은 주소를 할당받았다면 코드블록 A의 위치에 다시 코드블록 B가 로드되므로 코드블록 A가 없어졌으므로 코드블록 A가 플레쉬 메모리에서 삭제되었으므로 상기 코드블록 A를 다시 호출하게 된다. 이럴 경우 시간이 많이 걸리게 되므로, 코드블록 ABA와 같이 코드블록 A와 B가 서로 연관이 있다면 같은 램 주소를 할당하면 안 된다.
이와 같이, 어플리케이션이 실행됨에 따라 램의 크기 보다 큰 어플리케이션의 실행이 가능하게 된다. 이는 메모리의 크기에 의한 한계 없이 어플리케이션에 기능을 추가할 수 잇다.
한편, 본 발명은 임베디드 시스템에서는 시스템이 부팅되면 부트스트랩 코드가 실행되어 하드웨어 초기화를 수행하고, 상기 어플리케이션의 메인 함수를 램에 복사함으로써, 상기 램에 복사된 메인 함수에서 미리 정해진 실행 스케쥴에 따라 전체 어플리케이션에서 필요한 코드블록만을 램 영역에 복사시키고 실행시켜 주게 된다. 이때, 상기 메인 함수는 함수에 포함된 클러스터링한 정보에 의해 상기 실행 스케쥴에 따라 서로 호출관계에 있는 코드블록들의 로딩하게 되며, 위치 결정 정보에 의해 각 코드블록의 실행 스케쥴과 각각의 코드블록 램 주소를 고려하여 인접한 코드블록의 램 주소가 서로 같은 메모리 영역의 사용 여부에 따라 호출하게 된다.
이제까지 본 발명에 대하여 그 바람직한 실시 예를 중심으로 살펴보았으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 본질적 기술 범위 내에서 상기 본 발명의 상세한 설명과 다른 형태의 실시 예들을 구현할 수 있을 것이다. 여기서 본 발명의 본질적 기술범위는 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
본 발명에 따른 임베디드 시스템에서의 코드 오버레이 방법은, 임베디드 시스템에서 램의 크기가 프로그램보다 작을 경우, 램을 추가로 달거나 교체하는 일 없이 램의 크기 보다 크기가 큰 어플리케이션을 실행시킬 수 있는 효과가 있다.
또한 메모리 크기에 의한 한계 없이 어플리케이션에 기능을 추가할 수 있는 효과가 있다.
또한 시장에 출시된 기존 제품에도 적용이 가능한 효과가 있다.
또한 오버레이로 인해 복사 시간이 줄어들어, 늘어나는 실행시간을 최소화시킬 수 있다.

Claims (8)

  1. 응용프로그램에서 시간에 따라 수행되는 루틴들의 순차적 이벤트에 의해 실행 스케쥴이 생성되는 단계;
    상기 응용 프로그램의 원본 소스 파일을 컴파일하여 목적 파일을 생성하는 단계;
    상기 생성된 스케쥴 정보, 각 목적 파일의 크기, 임베디드 시스템의 메모리 정보를 입력받아, 클러스터링 및 위치 결정 과정을 수행하며 임베디드 시스템의 플레쉬 메모리에 저장될 어플리케이션의 이미지 레이아웃을 결정하고 메인 함수 및 링커 스트립트를 생성하는 단계;
    상기 생성된 링커 스트립트를 이용하여 링킹 과정을 수행한 후 실행 가능한 이미지를 생성하고 임베디드 시스템의 플레쉬 메모리에 전달하는 단계를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  2. 제 1항에 있어서,
    상기 임베디드 시스템의 초기 동작으로 부트 스트랩 코드가 실행되면, 플레쉬 어플리케이션의 루트함수에 해당되는 메인 함수가 램으로 복사된 후, 상기 메인 함수가 시스템에 상주하여 상기 실행 스케쥴에 따라 전체 어플리케이션의 코드블록 실행과 로딩을 담당하는 단계를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  3. 제 2항에 있어서,
    상기 코드 블록 실행은 런 타임시 필요한 코드블록만을 램 영역에 복사하여 사용하는 오버레이 기법을 이용하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  4. 제 1항에 있어서,
    상기 클러스터링 및 위치 결정은 실행 스케쥴에 따라 각 코드블록의 위치 및 클러스터에 따른 복사 오버헤드를 줄이기 위해 유전 알고리즘을 적용한 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  5. 제 2항에 있어서,
    상기 램의 크기는 어플리케이션의 크기 보다 크지 않는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  6. 부트 스트랩 코드 및 어플리케이션 프로그램이 저장된 플레쉬 메모리와; 작업공간인 램과; 상기 플레쉬 메모리 및 램을 제어하는 메인 제어부를 포함하는 임베디드 시스템에 있어서,
    시스템이 부팅되면 상기 부트스트랩 코드가 실행되어 하드웨어 초기화를 수행하는 단계;
    상기 어플리케이션의 메인 함수를 램에 복사하는 단계;
    상기 램에 복사된 메인 함수에서 미리 정해진 실행 스케쥴에 따라 전체 어플리케이션에서 필요한 코드블록만을 램 영역에 복사시키고 실행시키는 단계를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  7. 제 6항에 있어서,
    상기 메인 함수는 상기 실행 스케쥴에 따라 서로 호출관계에 있는 코드블록들의 로딩을 위해 클러스터링한 정보를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
  8. 제 6항에 있어서,
    상기 메인 함수에는 각 코드블록의 실행 스케쥴과 각각의 코드블록 램 주소를 고려하여 인접한 코드블록의 램 주소가 서로 같은 메모리 영역의 사용 여부에 대한 위치 결정 정보를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 코드 오버레이 방법.
KR1020050095217A 2005-10-11 2005-10-11 임베디드 시스템에서의 코드 오버레이 방법 KR100745256B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050095217A KR100745256B1 (ko) 2005-10-11 2005-10-11 임베디드 시스템에서의 코드 오버레이 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050095217A KR100745256B1 (ko) 2005-10-11 2005-10-11 임베디드 시스템에서의 코드 오버레이 방법

Publications (2)

Publication Number Publication Date
KR20070040007A KR20070040007A (ko) 2007-04-16
KR100745256B1 true KR100745256B1 (ko) 2007-08-01

Family

ID=38175859

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050095217A KR100745256B1 (ko) 2005-10-11 2005-10-11 임베디드 시스템에서의 코드 오버레이 방법

Country Status (1)

Country Link
KR (1) KR100745256B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101636521B1 (ko) 2010-03-26 2016-07-06 삼성전자주식회사 코드 오버레이 생성 장치 및 방법
CN103927187B (zh) * 2014-05-09 2017-03-22 金祺创(北京)技术有限公司 嵌入式系统程序执行方法
KR20210012123A (ko) 2019-07-24 2021-02-03 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000002446A (ko) * 1998-06-19 2000-01-15 윤종용 주기억장치와 보조기억장치사이의 스와핑 장치및 방법, 그 장치를 채용한 웹비디오 폰
JP2001101071A (ja) 1999-09-29 2001-04-13 Victor Co Of Japan Ltd フラッシュ型メモリを用いたデータ記憶装置及びフラッシュ型メモリのデータ管理方法
KR20030075356A (ko) * 2002-03-18 2003-09-26 삼성전기주식회사 고 용량 플래시 메모리 카드 시스템에서의 데이터 운영 방법
KR20050059562A (ko) * 2003-12-15 2005-06-21 엘지전자 주식회사 임베디드 시스템의 메모리 구조 및 동작 방법
KR20060028831A (ko) * 2004-09-30 2006-04-04 주식회사 팬택 이동통신 단말기에서의 데이터 저장 및 리딩 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000002446A (ko) * 1998-06-19 2000-01-15 윤종용 주기억장치와 보조기억장치사이의 스와핑 장치및 방법, 그 장치를 채용한 웹비디오 폰
JP2001101071A (ja) 1999-09-29 2001-04-13 Victor Co Of Japan Ltd フラッシュ型メモリを用いたデータ記憶装置及びフラッシュ型メモリのデータ管理方法
KR20030075356A (ko) * 2002-03-18 2003-09-26 삼성전기주식회사 고 용량 플래시 메모리 카드 시스템에서의 데이터 운영 방법
KR20050059562A (ko) * 2003-12-15 2005-06-21 엘지전자 주식회사 임베디드 시스템의 메모리 구조 및 동작 방법
KR20060028831A (ko) * 2004-09-30 2006-04-04 주식회사 팬택 이동통신 단말기에서의 데이터 저장 및 리딩 방법

Also Published As

Publication number Publication date
KR20070040007A (ko) 2007-04-16

Similar Documents

Publication Publication Date Title
JP4903686B2 (ja) フラッシュメモリのプログラミング
JP4006337B2 (ja) 共有ライブラリを使用して実行可能ファイルの実行を修正する方法
KR101213275B1 (ko) 무선 장치에서 사용할모놀리식(monolithic)이미지를 제공하기 위한시스템 및 방법
US6665735B1 (en) Method of changing a dynamic link library function efficiently and a computer system for executing the same
EP1728155A2 (en) Method and system for performing link-time code optimization without additional code analysis
CN102486733B (zh) 引导程序的升级方法和装置
CN103927187A (zh) 嵌入式系统程序执行方法
WO2004021113A2 (en) Method and apparatus for downloading executable code in a non-disruptive manner
US20040083467A1 (en) System and method for executing intermediate code
US6185578B1 (en) Program creation apparatus, program creation method, and recording medium containing a software program for implementing the method
KR100745256B1 (ko) 임베디드 시스템에서의 코드 오버레이 방법
CN101334737A (zh) 一种嵌入式设备的启动或复位方法
US8510529B2 (en) Method for generating program and method for operating system
CN111133419B (zh) 用于独立定义的操作的堆栈安全
CN115495158A (zh) 微内核操作系统中系统服务动态构建方法
US8893127B2 (en) Method and system for loading application to a local memory of a co-processor system by using position independent loader
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
JP2000010791A (ja) グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置
CN112860287A (zh) 系统程序升级方法、装置、计算机设备及存储介质
US8108645B2 (en) Optimized memory allocation via feature extraction
JP5402595B2 (ja) ネイティブ型icカード、icカードos、及び方法
CN111190658A (zh) 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统
KR20070081868A (ko) 이동통신시스템에서 효율적으로 소프트웨어를 업데이트하는방법
US20220108003A1 (en) Apparatus and method for kernel runtime randomization
KR101548960B1 (ko) 가상 플랫폼을 이용한 프로그램 작성과 디버깅 방법 및 장치

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: 20130624

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140624

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150624

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160624

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee