KR102391312B1 - 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법 - Google Patents

세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법 Download PDF

Info

Publication number
KR102391312B1
KR102391312B1 KR1020200097377A KR20200097377A KR102391312B1 KR 102391312 B1 KR102391312 B1 KR 102391312B1 KR 1020200097377 A KR1020200097377 A KR 1020200097377A KR 20200097377 A KR20200097377 A KR 20200097377A KR 102391312 B1 KR102391312 B1 KR 102391312B1
Authority
KR
South Korea
Prior art keywords
segment
function
area
code
unit
Prior art date
Application number
KR1020200097377A
Other languages
English (en)
Other versions
KR20220017184A (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 KR1020200097377A priority Critical patent/KR102391312B1/ko
Publication of KR20220017184A publication Critical patent/KR20220017184A/ko
Application granted granted Critical
Publication of KR102391312B1 publication Critical patent/KR102391312B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • 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/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • 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
    • 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/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading

Abstract

본 발명은 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법에 관한 것으로, 더욱 상세하게는 플래시 메모리에 저장된 펌웨어를 업데이트할 때, 업데이트 함수의 크기가 미리 할당된 세그먼트를 초과시, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법에 관한 것이다.

Description

세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법{CODE INSERTION MODULE AND METHOD FOR DIVIDING STORAGE OF FIRMWARE SEGMENT}
본 발명은 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법에 관한 것으로, 더욱 상세하게는 플래시 메모리에 저장된 펌웨어를 업데이트할 때, 업데이트 함수의 크기가 미리 할당된 세그먼트를 초과시, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법에 관한 것이다.
일반적으로 세그먼트(segment)는 프로그램 실행시에 메모리상에 적재되는 프로그램의 분할 가능한 기본 단위를 의미하는 것으로, 프로그램을 한 번에 저장할 수 없거나 필요한 경우 이를 구성하는 몇 개의 세그먼트로 분할한다.
한편, 최근의 사물 인터넷 기반 디바이스와 같은 다양한 기술분야에서도 펌웨어(firmware) 개발에 드는 비용과 인력을 줄이기 위해 펌웨어의 일부만 업데이트하는 세그먼테이션(segmentation) 기술이 적용되고 있다.
그런데, 업데이트로 인해 함수의 크기가 계속해서 증가한다면 펌웨어 내의 세그먼트 재배치 또는 각 세그머트에 할당되는 함수 코드의 사이즈를 줄이기 위해 추가적인 노력과 비용이 소모된다.
또한, 종래의 펌웨어 작성 방식은 개발자가 함수를 직접 보고 각각의 세그먼트에 배치해야 하며, 펌웨어 중 필요한 일부분만을 효율적으로 업데이트하기 위해서는 그에 대응하여 세그머트의 크기 역시 작아져야 한다.
따라서, 업데이트에 의해 함수의 크기가 세그먼트의 크기를 초과하는 상황이 발생하면, 개발자는 펌웨어를 이루는 세그먼트들을 모두 재배치하거나 함수의 크기를 더욱 줄이기 위해 시간과 인력 비용을 투입해야 하는 문제가 발생한다.
대한민국 등록특허 제10-1350059호 대한민국 등록특허 제10-0927446호
본 발명은 전술한 바와 같은 문제점을 해결하기 위한 것으로, 플래시 메모리에 저장된 펌웨어를 업데이트함에 따라 함수의 크기가 미리 할당된 세그먼트를 초과하는 경우, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법을 제공하고자 한다.
이를 위해, 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 모듈은 플래시 메모리 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시하는 메모리 영역 감시부와; 상기 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석하는 업데이트 함수 분석부와; 상기 업데이트 함수의 크기와 상기 업데이트 함수가 할당된 세그먼트의 크기를 비교하는 세그먼트 크기 비교부와; 상기 업데이트 함수의 크기가 상기 세그먼트보다 크면 상기 업데이트 함수 중 상기 세그먼트를 초과하는 함수 코드 부분을 상기 가용 영역에 지정하는 세그먼트 재할당부와; 상기 함수 코드 부분이 지정된 가용 영역으로 이동하는 프롤로그 어셈블리 코드를 상기 세그먼트에 삽입하는 프롤로그 삽입부; 및 상기 함수 코드 부분이 실행된 후 상기 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 상기 가용 영역에 삽입하는 에필로그 삽입부;를 포함하는 것을 특징으로 한다.
이때, 상기 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역은 동일한 칩셋으로 구성된 플래시 메모리 내에서 제공되는 것이 바람직하다.
또한, 상기 메모리 영역 감시부는 상기 함수가 할당된 각각의 세그먼트마다 시작 영역과 끝 영역을 감시하는 것이 바람직하다.
또한, 상기 프롤로그 삽입부는 상기 프롤로그 어셈블리 코드를 상기 세그먼트의 끝 영역에 삽입하는 것이 바람직하다.
또한, 상기 프롤로그 어셈블리 코드는 상기 세그먼트 영역에서 가용 영역으로 이동시키는 'PUSH' 어셈블리 코드를 포함하는 것이 바람직하다.
또한, 상기 프롤로그 어셈블리 코드는 어드레스가 상기 세그먼트와 연속하지 않는 가용 영역으로 점프시키는 'JUMP' 어셈블리 코드를 더 포함하는 것이 바람직하다.
또한, 상기 에필로그 삽입부는 상기 에필로그 어셈블리 코드를 상기 가용 영역 중 초과 함수가 할당된 영역의 끝 영역에 삽입하는 것이 바람직하다.
또한, 상기 에필로그 어셈블리 코드는 상기 가용 영역에서 상기 세그먼트의 끝 영역으로 이동시키는 'POP' 어셈블리 코드를 포함하는 것이 바람직하다.
또한, 상기 에필로그 삽입부는 상기 가용 영역 중 초과 함수가 할당된 영역의 시작 영역에 삽입되며, 상기 초과 함수를 실행시키는 'RUN FUNCTION' 어셈블리 코드를 생성하는 것이 바람직하다.
한편, 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 방법은 메모리 영역 감시부에서 플래시 메모리 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시하는 메모리 감시단계와; 업데이트 함수 분석부에서 상기 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석하는 함수 분석단계와; 세그먼트 크기 비교부에서 상기 업데이트 함수의 크기와 상기 업데이트 함수가 할당된 세그먼트의 크기를 비교하는 저장영역 비교단계와; 세그먼트 재할당부에서 상기 업데이트 함수의 크기가 상기 세그먼트보다 크면 상기 업데이트 함수 중 상기 세그먼트를 초과하는 함수 코드 부분을 상기 가용 영역에 지정하는 분리영역 지정단계와; 프롤로그 삽입부에서 상기 함수 코드 부분이 지정된 가용 영역으로 이동하는 프롤로그 어셈블리 코드를 상기 세그먼트에 삽입하는 프롤로그 코드 삽입단계; 및 에필로그 삽입부에서 상기 함수 코드 부분이 실행된 후 상기 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 상기 가용 영역에 삽입하는 에필로그 코드 삽입단계;를 포함하는 것을 특징으로 한다.
이상과 같은 본 발명은 플래시 메모리에 저장된 펌웨어를 업데이트함에 따라 함수의 크기가 미리 할당된 세그먼트를 초과하는 경우, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴한다.
따라서, 세그먼트의 재분배나 사이즈 감소를 위한 노력 없이도 가용 영역을 이용하여 자동으로 함수의 업데이트를 가능하게 함으로써 펌웨어의 작성에 따른 비용을 절감하고, 효율적으로 디바이스를 유지 관리할 수 있게 한다.
도 1은 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 모듈을 나타낸 구성도이다.
도 2는 본 발명에 따른 세그먼트의 분리 저장 상태를 나타낸 개념도이다.
도 3은 본 발명에 따른 세그먼트의 분리 저장 순서를 나타낸 개념도이다.
도 4는 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 방법을 나타낸 흐름도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 따른 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법에 대해 상세히 설명한다.
도 1과 같이, 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 모듈은 메모리 영역 감시부(110), 업데이트 함수 분석부(120), 세그먼트 크기 비교부(130), 세그먼트 재할당부(140), 프롤로그 삽입부(150) 및 에필로그 삽입부(160)를 포함한다.
이러한 본 발명은 실시예로 펌웨어(firmware)를 작성 또는 업데이트할 때 함수의 크기가 세그먼트 바운더리(segment boundary) 보다 커진다면 그 초과하는 부분을 디바이스 컨트롤러(MCU, 10)의 제어하에 플래시 메모리(11)내 별도의 가용 영역에 저장한다.
이때, 본 발명은 어셈블리 코드 레벨에서 세그먼트의 끝 영역에 그 초과하는 함수가 저장된 영역으로 이동 혹은 점프할 수 있는 프롤로그(prologue) 어셈블리 코드를 삽입한다. 또한, 가용 영역에 저장된 함수 수행이 모두 끝나면 다시 원래의 세그먼트 위치로 되돌아오도록 에필로그(epilogue) 어셈블리 코드를 삽입한다.
따라서, 디바이스의 플래시 메모리(11)에 저장된 펌웨어를 업데이트함에 따라 함수의 크기가 미리 할당된 세그먼트를 초과하는 경우, 그 초과하는 함수 코드 부분을 메모리의 가용 영역(쓰기가 허용되는 메모리 영역)에 배치하고 해당 영역으로 점프 및 리턴할 수 있게 한다.
이를 위해, 상기 메모리 영역 감시부(110)는 플래시 메모리(11) 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시한다. 감시 대상은 각 영역의 메모리 크기(용량) 이외에 이들이 할당된 어드레스(adress)를 포함할 수 있다.
플래시 메모리(11)는 대표적으로 사물 인터넷에 적용되는 IoT 디바이스에 탑재된 것을 포함하여 그 외 다양한 기기에 탑재된 것일 수 있으며, 세그먼트 영역 및 가용 영역은 단일 기능 칩셋의 플래시 메모리(11) 내에 할당된 것이 바람직하다.
다만, 메모리 영역 감시부(110)는 함수가 할당된 각각의 세그먼트마다 시작 영역과 끝 영역을 감시하는 것이 바람직하다. 이를 통해 시작 영역부터 세그먼트에 할당된 함수를 실행 후 끝 영역에서 나머지 함수 코드를 실행하는 가용 영역으로 이동할 수 있게 한다.
업데이트 함수 분석부(120)는 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석한다. 상기 함수 크기는 그 함수에 의해 호출되는 함수 코드에 따라 결정되며, 코드는 어셈블리 코드를 포함한다.
펌웨어는 디바이스의 구동을 위한 프로그램으로서 다수의 세그먼트(segment)들로 구성된다. 또한, 함수는 세그먼트에 포함되어 플래시 메모리(11) 상에 적재되는 기본 단위나 기능별 단위를 나타낸다. 이러한 세그먼트는 보통 그 크기가 서로 다르며 그에 대응하여 할당된 메모리의 크기도 다르다.
따라서, 펌웨어를 채택한 디바이스에서 유연한 설계 효율을 위해 펌웨어의 일부만 업데이트하는 세그먼테이션(segmentation) 기술을 적용시 업데이트되는 함수의 크기를 분석하여 세그먼트 바운더리 이내에 포함되는지 판단한다.
세그먼트 크기 비교부(130)는 업데이트될 함수의 크기와 그 함수가 할당된 세그먼트의 크기를 비교한다. 비교를 통해 업데이트 함수의 크기가 작은 경우에는 종전과 동일하게 이미 할당된 세그먼트 내에서 업데이트를 한다.
반면, 업데이트 함수의 크기가 큰 경우에는 아래에서 다시 상세히 설명하는 바와 같이 세그먼트 영역에서 가용 영역으로 이동하여 나머지 함수 코드를 삽입하고 거기서 함수를 실행한다.
도 2와 같이 세그먼트 재할당부(140)는 세그먼트 크기 비교부(130)를 통해 비교한 결과, 업데이트 함수의 크기가 세그먼트보다 크면 업데이트 함수 중 세그먼트를 초과하는 함수 코드 부분을 가용 영역에 지정한다.
세그먼트를 초과하는 함수 코드는 업데이트 함수의 일부분에 해당하는 것으로, 가용 영역의 지정은 함수 코드가 저장되는데 필요한 메모리 용량(가용 영역 용량)을 포함한다.
나아가, 세그먼트 재할당부(140)에서 가용 영역을 지정시 그 가용 영역 내 시작과 끝 어드레스를 포함하여 범위를 지정할 수 있다. 또한 용량이 허용되는 한 하나의 가용 영역내에 여러 세그먼트의 함수 코드를 각각 삽입할 수 있다.
프롤로그 삽입부(150)는 세그먼트를 초과하는 함수 코드 부분이 가용 영역으로 이동되게 하는 프롤로그 어셈블리 코드(prologue assembly code)를 세그먼트에 삽입한다. 따라서, 프롤로그 어셈블리 코드의 실행에 의해 세그먼트 영역에서 실행(업데이트)을 마친 프로그램이 가용 영역으로 이동된 후 추가로 실행(업데이트)된다.
도 3과 같이 프롤로그 삽입부(150)는 프롤로그 어셈블리 코드를 세그먼트의 끝 영역에 삽입하는 것이 바람직하다. 해당 함수에 대해 할당된 세그먼트는 시작 영역부터 끝 영역에 해당하는 메모리 용량을 제공하므로, 그 중 끝 영역에 프롤로그 어셈블리 코드를 삽입한다. 이를 통해 세그먼트에 대해 먼저 수행을 모두 마친 후 가용 영역으로 이동할 수 있게 된다.
세그먼트 영역에서 가용 영역으로 이동시키는 어셈블리 코드로는 'PUSH'가 있다. 즉, 프롤로그 어셈블리 코드는 'PUSH'이며, 'PUSH'는 인자 전달을 위해 스택을 이용시 임시로 기억 장치인 가용 영역에 저장되게 한다.
또한, 프롤로그 어셈블리 코드는 어드레스가 세그먼트와 연속하지 않는 가용 영역으로 점프시키는 'JUMP' 어셈블리 코드를 더 포함한다. 이에 따라 프롤로그 어셈블리 코드는 'PUSH'와 'JUMP'를 포함하며, 세그먼트와 인접하지 않는 여러 가용 영역으로도 자유롭게 이동할 수 있게 된다.
에필로그 삽입부(160)는 가용 영역에서의 잔여 업데이트 함수 코드 부분이 실행(수행)된 후 다시 해당 함수의 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 해당 가용 영역에 삽입한다.
이때, 에필로그 삽입부(160)는 가용 영역에 기록(업데이트)하는 에필로그 어셈블리 코드를 해당 가용 영역 중 초과 함수가 할당된 영역의 끝 영역에 삽입하는 것이 바람직하다. 이를 통해 가용 영역에서 필요한 부분까지 사용하여 업데이트 수행을 마친 후 다시 세그먼트로 되돌아가게 된다.
에필로그 어셈블리 코드는 상기한 'PUSH'에 대응하여 가용 영역에서 다시 세그먼트의 끝 영역으로 이동시키는 'POP' 어셈블리 코드를 포함한다. 또한, 가용 영역 중 초과 함수가 할당된 영역의 시작 영역에 삽입되며, 초과 함수를 실행시키는 'RUN FUNCTION' 어셈블리 코드를 생성하여 이 역시 기록한다.
이에 따라 실시예로 도시한 바와 같이 에필로그 어셈블리 코드는 'RUN FUNCTION'과 'POP'을 순차로 수행하며, 이들에 의해 실행 후 복귀가 이루어지는 어셈블리가 구현된다.
이상과 같이 본 발명은 플래시 메모리(11)에 저장된 펌웨어를 업데이트함에 따라 함수의 크기가 미리 할당된 세그먼트를 초과하는 경우, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴한다.
따라서, 세그먼트의 재분배나 사이즈 감소를 위한 노력 없이도 가용 영역을 이용하여 함수의 업데이트를 가능하게 함으로써 펌웨어의 작성에 따른 비용을 절감하고, 효율적으로 디바이스를 유지 관리할 수 있게 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 따른 세그먼트의 분리 저장을 위한 코드 삽입 방법에 대해 설명한다. 다만, 본 발명의 코드 삽입 방법은 위에서 설명한 코드 삽입 장치에서 구현되는 것을 예를 들어 설명하므로 가급적 중복적인 설명은 생략한다.
도 4와 같이, 본 발명에 따른 세그먼트의 분리 저장을 위한 코드 삽입 방법은 메모리 감시단계(S110), 함수 분석단계(S120), 저장영역 비교단계(S130), 분리영역 지정단계(S140), 프롤로그 코드 삽입단계(S150) 및 에필로그 코드 삽입단계(S160)를 포함한다.
여기서, 상기 메모리 감시단계(S110)는 메모리 영역 감시부(110)에서 플래시 메모리(11) 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시한다. 감시 대상은 각 영역의 메모리 크기(용량) 이외에 이들이 할당된 어드레스를 포함한다.
플래시 메모리(11)는 대표적으로 사물 인터넷에 적용되는 IoT 디바이스에 탑재된 것을 포함하여 그 외 다양한 기기에 탑재된 것일 수 있으며, 바람직하게 세그먼트 영역 및 가용 영역은 단일 기능 칩셋의 플래시 메모리(11) 내에 할당된다.
다만, 메모리 영역 감시부(110)는 함수가 할당된 각각의 세그먼트마다 시작 영역과 끝 영역을 감시하는 것이 바람직하다. 이를 통해 시작 영역부터 세그먼트에 할당된 함수를 실행 후 끝 영역에서 나머지 함수 코드를 실행하는 가용 영역으로 이동할 수 있게 한다.
다음, 함수 분석단계(S120)는 업데이트 함수 분석부(120)에서 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석한다. 분석되는 함수의 크기는 그 함수에 의해 호출되는 함수 코드에 따라 결정되며, 코드는 어셈블리 코드를 포함한다.
실시예로 펌웨어를 채택한 디바이스에서 유연한 설계 효율을 위해 펌웨어의 일부만 업데이트하는 세그먼테이션(segmentation) 기술을 적용시 업데이트되는 함수의 크기를 분석하여 세그먼트 바운더리 이내에 포함되는지 판단한다.
저장영역 비교단계(S130)는 세그먼트 크기 비교부(130)에서 상기 업데이트 함수의 크기와 상기 업데이트 함수가 할당된 세그먼트의 크기를 비교한다.
비교를 통해 업데이트 함수의 크기가 작은 경우에는 종전과 동일하게 이미 할당된 세그먼트 내에서 업데이트를 한다.
반면, 업데이트 함수의 크기가 큰 경우에는 아래에서 다시 상세히 설명하는 바와 같이 세그먼트 영역에서 가용 영역으로 이동하여 나머지 함수 코드를 삽입하고 거기서 함수를 실행한다.
다음, 분리영역 지정단계(S140)는 세그먼트 재할당부(140)에서 업데이트 함수의 크기가 세그먼트보다 크면 업데이트 함수 중 세그먼트를 초과하는 함수 코드 부분을 가용 영역에 지정한다.
세그먼트 재할당부(140)는 세그먼트 크기 비교부(130)를 통해 비교한 결과, 업데이트 함수의 크기가 세그먼트보다 크면 업데이트 함수 중 세그먼트를 초과하는 함수 코드 부분을 가용 영역에 지정한다.
세그먼트를 초과하는 함수 코드는 업데이트 함수의 일부분에 해당하는 것으로, 가용 영역의 지정은 함수 코드가 저장되는데 필요한 메모리 용량(가용 영역 용량)을 포함한다.
나아가, 세그먼트 재할당부(140)에서 가용 영역을 지정시 그 가용 영역 내 시작과 끝 어드레스를 포함하여 범위를 지정할 수 있다. 또한 용량이 허용되는 한 하나의 가용 영역내에 여러 세그먼트의 함수 코드를 각각 삽입할 수 있다.
다음, 프롤로그 코드 삽입단계(S150)는 프롤로그 삽입부(150)에서 함수 코드 부분이 지정된 가용 영역으로 이동하는 프롤로그 어셈블리 코드를 세그먼트에 삽입한다. 따라서, 프롤로그 어셈블리 코드의 실행에 의해 세그먼트 영역에서 실행(업데이트)을 마친 프로그램이 가용 영역으로 이동된 후 추가로 실행(업데이트)된다.
이러한 프롤로그 삽입부(150)는 프롤로그 어셈블리 코드를 세그먼트의 끝 영역에 삽입하는 것이 바람직하다. 해당 함수에 대해 할당된 세그먼트는 시작 영역부터 끝 영역에 해당하는 메모리 용량을 제공하므로, 그 중 끝 영역에 프롤로그 어셈블리 코드를 삽입한다. 이를 통해 세그먼트에 대해 먼저 수행을 모두 마친 후 가용 영역으로 이동할 수 있게 된다.
세그먼트 영역에서 가용 영역으로 이동시키는 어셈블리 코드로는 'PUSH'가 있다. 또한, 프롤로그 어셈블리 코드는 어드레스가 세그먼트와 연속하지 않는 가용 영역으로 점프시키는 'JUMP' 어셈블리 코드를 더 포함한다. 이에 따라 프롤로그 어셈블리 코드는 'PUSH'와 'JUMP'를 포함하며, 세그먼트와 인접하지 않는 여러 가용 영역으로도 자유롭게 이동할 수 있게 된다.
에필로그 코드 삽입단계(S160)는 에필로그 삽입부(160)에서 함수 코드 부분이 실행된 후 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 가용 영역에 삽입한다.
이때, 에필로그 삽입부(160)는 가용 영역에 기록(업데이트)하는 에필로그 어셈블리 코드를 해당 가용 영역 중 초과 함수가 할당된 영역의 끝 영역에 삽입한다. 이를 통해 가용 영역에서 필요한 부분까지 사용하여 업데이트 수행을 마친 후 다시 세그먼트로 되돌아가게 된다.
에필로그 어셈블리 코드는 가용 영역에서 다시 세그먼트의 끝 영역으로 이동시키는 'POP' 어셈블리 코드를 포함한다. 또한, 가용 영역 중 초과 함수가 할당된 영역의 시작 영역에 삽입되며, 초과 함수를 실행시키는 'RUN FUNCTION' 어셈블리 코드를 생성하여 이 역시 기록한다.
이에 따라 에필로그 어셈블리 코드는 'RUN FUNCTION'과 'POP'을 순차로 수행하며, 이들에 의해 실행 후 복귀가 이루어지는 어셈블리가 구현된다.
이를 통해 본 발명은 플래시 메모리(11)에 저장된 펌웨어를 업데이트함에 따라 함수의 크기가 미리 할당된 세그먼트를 초과하는 경우, 그 초과하는 함수 코드 부분을 별도의 가용 영역에 배치하고 해당 영역으로 점프 및 리턴한다.
따라서, 세그먼트의 재분배나 사이즈 감소를 위한 노력 없이도 가용 영역을 이용하여 함수의 업데이트를 가능하게 함으로써 펌웨어의 작성에 따른 비용을 절감하고, 효율적으로 디바이스를 유지 관리할 수 있게 한다.
이상, 본 발명의 특정 실시예에 대하여 상술하였다. 그러나, 본 발명의 사상 및 범위는 이러한 특정 실시예에 한정되는 것이 아니라, 본 발명의 요지를 변경하지 않는 범위 내에서 다양하게 수정 및 변형 가능하다는 것을 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 이해할 것이다.
따라서, 이상에서 기술한 실시예들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이므로, 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 하며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
110: 메모리 영역 감시부
120: 업데이트 함수 분석부
130: 세그먼트 크기 비교부
140: 세그먼트 재할당부
150: 프롤로그 삽입부
160: 에필로그 삽입부

Claims (10)

  1. 플래시 메모리(11) 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시하는 메모리 영역 감시부(110)와;
    상기 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석하는 업데이트 함수 분석부(120)와;
    상기 업데이트 함수의 크기와 상기 업데이트 함수가 할당된 세그먼트의 크기를 비교하는 세그먼트 크기 비교부(130)와;
    상기 업데이트 함수의 크기가 상기 세그먼트보다 크면 상기 업데이트 함수 중 상기 세그먼트를 초과하는 함수 코드 부분을 상기 가용 영역에 지정하는 세그먼트 재할당부(140)와;
    상기 함수 코드 부분이 지정된 가용 영역으로 이동하는 프롤로그 어셈블리 코드를 상기 세그먼트에 삽입하는 프롤로그 삽입부(150); 및
    상기 함수 코드 부분이 실행된 후 상기 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 상기 가용 영역에 삽입하는 에필로그 삽입부(160);를 포함하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  2. 제1항에 있어서,
    상기 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역은 동일한 칩셋으로 구성된 플래시 메모리(11) 내에서 제공되는 것을 특징으로 하는 세그머트의 분리 저장을 위한 코드 삽입 모듈.
  3. 제1항에 있어서,
    상기 메모리 영역 감시부(110)는,
    상기 함수가 할당된 각각의 세그먼트마다 시작 영역과 끝 영역을 감시하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  4. 제3항에 있어서,
    상기 프롤로그 삽입부(150)는,
    상기 프롤로그 어셈블리 코드를 상기 세그먼트의 끝 영역에 삽입하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  5. 제4항에 있어서,
    상기 프롤로그 어셈블리 코드는,
    상기 세그먼트 영역에서 가용 영역으로 이동시키는 'PUSH' 어셈블리 코드를 포함하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  6. 제5항에 있어서,
    상기 프롤로그 어셈블리 코드는,
    어드레스가 상기 세그먼트와 연속하지 않는 가용 영역으로 점프시키는 'JUMP' 어셈블리 코드를 더 포함하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  7. 제3항에 있어서,
    상기 에필로그 삽입부(160)는,
    상기 에필로그 어셈블리 코드를 상기 가용 영역 중 초과 함수가 할당된 영역의 끝 영역에 삽입하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  8. 제7항에 있어서,
    상기 에필로그 어셈블리 코드는,
    상기 가용 영역에서 상기 세그먼트의 끝 영역으로 이동시키는 'POP' 어셈블리 코드를 포함하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  9. 제3항에 있어서,
    상기 에필로그 삽입부(160)는,
    상기 가용 영역 중 초과 함수가 할당된 영역의 시작 영역에 삽입되며, 상기 초과 함수를 실행시키는 'RUN FUNCTION' 어셈블리 코드를 생성하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 모듈.
  10. 메모리 영역 감시부(110)에서 플래시 메모리(11) 내의 펌웨어 세그먼트 영역 및 쓰기가 가능한 가용 영역을 감시하는 메모리 감시단계(S110)와;
    업데이트 함수 분석부(120)에서 상기 펌웨어를 구성하는 다수의 함수들 중 업데이트 대상이 되는 업데이트 함수의 크기를 분석하는 함수 분석단계(S120)와;
    세그먼트 크기 비교부(130)에서 상기 업데이트 함수의 크기와 상기 업데이트 함수가 할당된 세그먼트의 크기를 비교하는 저장영역 비교단계(S130)와;
    세그먼트 재할당부(140)에서 상기 업데이트 함수의 크기가 상기 세그먼트보다 크면 상기 업데이트 함수 중 상기 세그먼트를 초과하는 함수 코드 부분을 상기 가용 영역에 지정하는 분리영역 지정단계(S140)와;
    프롤로그 삽입부(150)에서 상기 함수 코드 부분이 지정된 가용 영역으로 이동하는 프롤로그 어셈블리 코드를 상기 세그먼트에 삽입하는 프롤로그 코드 삽입단계(S150); 및
    에필로그 삽입부(160)에서 상기 함수 코드 부분이 실행된 후 상기 세그먼트로 되돌아가는 에필로그 어셈블리 코드를 상기 가용 영역에 삽입하는 에필로그 코드 삽입단계(S160);를 포함하는 것을 특징으로 하는 세그먼트의 분리 저장을 위한 코드 삽입 방법.
KR1020200097377A 2020-08-04 2020-08-04 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법 KR102391312B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200097377A KR102391312B1 (ko) 2020-08-04 2020-08-04 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200097377A KR102391312B1 (ko) 2020-08-04 2020-08-04 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법

Publications (2)

Publication Number Publication Date
KR20220017184A KR20220017184A (ko) 2022-02-11
KR102391312B1 true KR102391312B1 (ko) 2022-04-28

Family

ID=80266400

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200097377A KR102391312B1 (ko) 2020-08-04 2020-08-04 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법

Country Status (1)

Country Link
KR (1) KR102391312B1 (ko)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2012230A1 (en) * 2007-07-05 2009-01-07 Samsung Electronics Co., Ltd. Partitioning compression-based firmware over the air
KR100927446B1 (ko) 2007-11-28 2009-11-19 웹싱크 주식회사 이동통신단말기의 트랜잭션 단위 펌웨어 업그레이드 방법및 이를 이용한 펌웨어 업그레이드 시스템
KR101350059B1 (ko) 2011-11-25 2014-01-14 엘에스산전 주식회사 전력량계 펌웨어 업그레이드 장치 및 방법
WO2014151691A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. Method and apparatus for guest return address stack emulation supporting speculation
KR20160144577A (ko) * 2015-06-08 2016-12-19 삼성전자주식회사 불휘발성 메모리 모듈 및 그것의 포함하는 사용자 장치
KR102507743B1 (ko) * 2016-02-04 2023-03-09 삼성전자주식회사 메모리 관리 방법 및 그 전자 장치

Also Published As

Publication number Publication date
KR20220017184A (ko) 2022-02-11

Similar Documents

Publication Publication Date Title
US6223339B1 (en) System, method, and product for memory management in a dynamic translator
US7363484B2 (en) Apparatus and method for selectively mapping proper boot image to processors of heterogeneous computer systems
US5860082A (en) Method and apparatus for allocating storage in a flash memory
US8266603B2 (en) Technique for allocating register to variable for compiling
CN107729240B (zh) 嵌入式软件堆栈溢出检测方法和装置
CN110096300B (zh) 一种fpga程序文件备份管理系统、运行方法及升级方法
US20080320211A1 (en) Nonvolatile memory control device, nonvolatile memory control method, and storage device
US20080005722A1 (en) Compiling device, compiling method and recording medium
KR20010070416A (ko) 컴퓨터
CN1811723A (zh) 存储器转储程序引导方法及机构、和计算机可读存储介质
US20140181378A1 (en) Control device, control method, and program
US20040044997A1 (en) Method and apparatus for downloading executable code in a non-disruptive manner
US20080320213A1 (en) Control device of nonvolatile memory and control method thereof, and storage device
EP0575127A2 (en) A method of providing a resident program part of a terminate and stay resident program
US8954945B2 (en) Profile-based global live-range splitting
US7003656B2 (en) Automatic selection of firmware for a computer that allows a plurality of process types
KR102391312B1 (ko) 세그먼트의 분리 저장을 위한 코드 삽입 모듈 및 방법
US20080320212A1 (en) Control device and control method of nonvolatile memory and storage device
US20040015850A1 (en) Specialized heaps for creation of objects in object-oriented environments
US20030051114A1 (en) Executing large device firmware programs
KR20080066381A (ko) 소프트웨어의 업그레이드 방법
CN108255526B (zh) 一种系统启动及运行的方法、装置
WO2021219211A1 (en) Memory allocation in a neural network
US7487336B2 (en) Method for register allocation during instruction scheduling
US7584231B1 (en) Methods for determining a safe end of scan for generational garbage collection

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right