KR101378058B1 - 임베디드 시스템에서의 동적 메모리 관리방법 - Google Patents
임베디드 시스템에서의 동적 메모리 관리방법 Download PDFInfo
- Publication number
- KR101378058B1 KR101378058B1 KR1020120033480A KR20120033480A KR101378058B1 KR 101378058 B1 KR101378058 B1 KR 101378058B1 KR 1020120033480 A KR1020120033480 A KR 1020120033480A KR 20120033480 A KR20120033480 A KR 20120033480A KR 101378058 B1 KR101378058 B1 KR 101378058B1
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- stack
- function
- blocks
- value
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Executing Machine-Instructions (AREA)
Abstract
본 발명은 전체 데이타 메모리를 고정된 큭기의 블록으로 나누어 블록단위로 할당 및 해제를 수행한다. 따라서, 제한된 H/W 로 구성된 임베디드 시스템에서 순수 S/W로만 구성되는 시스템의 신뢰적인 동작 환경을 제공할 수 있으며, 멀티 태스킹 운영체제 환경에서 시스템 실행시 오동작의 주 원인인 스택동작 관련 스택 오버플로우와 태스크간 스택영역 충돌의 방지할 수 있다. 특히 본 발명은 블록단위로 할당 및 해제를 수행하기 때문에 제한된 메모리 공간(스택 메모리)을 효율적으로 사용할 수 있으며, 이로 인하여 가용한 동적 메모리(힙 메모리)의 공간을 확보하여 태스크 수용력을 확대시킬 수 있다.
Description
본 발명은 유비쿼터스 시스템 및 센서 네트워크와 같은 임베디드 시스템에서의 동적 메모리 관리방법에 관한 것이다.
유비쿼터스 서비스가 가능하기 위해서는 시스템의 긴 생명주기, 신뢰적 동작, 작은 H/W 및 저가의 설치비등의 요구사항 만족이 필수이다. 상기 유비쿼터스 서비스가 적용되는 분야는 인체 및 사람이 드나들기 힘든 전쟁터, 맹수 서식지 및 사막까지 다양하며, 이 중 대부분 응용들은 시스템이 오랜 시간동안 신뢰적으로 구동되기를 요구한다.
따라서, 저전력과 신뢰성은 유비쿼터스 시스템을 구성하는 H/W와 S/W의 개발 및 구성시 가장 중요하게 고려되는 요소가 된다. 대부분의 유비쿼터스 시스템에서 H/W 플렛폼은 저전력의 요구사항을 만족시키기 위해 최소한의 기능과 제한된 가용한 자원(메모리, 처리속도)을 가지는 H/W요소들로만 구성된다. 이러한 간단한 H/W 구성은 신뢰성 보장이 H/W적인 지원(Privileged mode, MMU 등)이 없는 환경에서 S/W적으로만 구성될 수밖에 없도록 만든다. 더욱이 제한된 메모리 공간 및 처리 자원을 가지는 환경은 S/W적인 신뢰성 보장 제공을 한층 어려운 과제로 만든다.
이러한 H/W기능이 부재된 임베디드 시스템에서 오동작의 주 원인은 잘못된 메모리 조작에서 발생하는데, 좀 더 세분화하면 프로그램의 논리적인 오류와 스텍 관련 오류에서 기인된다. 그 중에서 스텍 관련 오류는 코드 검사나 흐름도등의 단계에서 문제가 검출될 수 있는 논리적인 오류에 비해 문제 파악 및 수정에 어려운 면을 보인다. 이는 스택 동작이 실제 실행시 내부적으로 이루어져 실행 전 단계에서 문제파악이 어려운 점, 스택 사용량이 시스템 진행 정도에 따라 크게 요동치기 때문에 어느 한순간의 관찰로는 문제를 파악하기 힘든 점, 사용되는 스택양의 출렁임은 개발자의 코딩 스타일의 의존하여 그 움직임을 예측 또는 모델링하기 힘든 점 등이 원인이 된다.
또한, 유비쿼터스 시스템 및 센서 네트워크와 같은 임베디드 시스템에서 제한된 적은 메모리 공간은 스텍간 충돌이나 오버플로우의 가능성을 더 크게 만들어 시스템 오동작 원인에 더 큰 여지를 제공한다.
기존의 소프트웨어적인 신뢰적인 시스템 실행의 환경제공은 크게 두 가지 방법에 기초하여 이루어진다.
첫 번째 방법은 실행 전 소스코드 단계에서 메모리 접근(억세스)에 관련된 모든 명령어에 대해 검사 모듈을 추가하여, 실행시 해당 명령어의 무결성을 검사하는 방법이다. 이 방법은 모든 메모리 구간에 대해 소유자와 접근 허용자를 정하고 해당 정보를 저장하여야 하며 접근시마다 해당 구간에 대해 소유자와 접근자 사이의 관계를 검사하고 허가하는 작업이 따라야 한다. 이는 각 메모리 간에 대해 소유 및 허가에 대한 정보의 유지/저장에 공간적/시간적 오버헤드가 발생하며, 모든 메모리에 대한 읽기, 쓰기 시에 검사 모듈이 추가로 실행되어 시간적 오버헤드가 발생한다. 이러한 큰 오버헤드는 메모리 공간과 처리속도면에서 제약이 있는 하드웨어로 구성되는 임베디드 시스템에 적합하지 않으며, 스택 충돌 및 오버플로우 문제는 여전히 해결하지 못한다.
두 번째 방법은 전체 시스템을 운용하는데 요구되는 최대 스택 메모리량을 실행 전 추정하고, 실행시 데이터 메모리에 일정 부분을 고정으로 할당하여 스텍 메모리로 사용하는 방법이다. 이 방법은 스텍 메모리와 힙 메모리(동적 메모리 구간)간의 충돌은 피할수 있으나 다음과 같은 여러가지 단점을 보인다. 즉, 멀티 태스킹 운영체제를 사용하는 경우 할당 스택구간내에서 서로 다른 태스크에게 속한 스텍 영역간 충돌을 해결하지 못하는 점, 한 개의 고정된 스택구간 할당과 실행시 사용 스택량이 출렁이는 특징 때문에 실행 도중 할당 공간내에 사용되지 못하는 공간(내부 조각)이 상당 시간 유지되는 점, 전체 시스템 구동에 대한 스택 메모리량을 산출하는데 여러 예외 상황들, 예를들면 멀티 태스킹 운영체제 환경에서 필요순간에만 생성되어 일을 처리하고 소멸되는 순간적인 생명주기를 가지는 태스크들과 이로 인한 필요 스텍 메모리의 추가 산출 및 순환콜(recursive call)을 대비한 추가 스텍 메모리 산출등을 같이 고려하여야 하기 때문에 스택 메모리량이 과잉 산출되는 점등이 있었다.
따라서, 본 발명의 목적은 블록단위로 스택 메모리를 관리하여 함수 실행시 시스템 오동작을 방지할 수 있는 임베디드 시스템에서의 동적 메모리 관리방법을 제공하는데 있다.
상기와 같은 목적을 달성하기 위하여 본 발명의 실시예에 따른 임베디드 시스템에서의 동적 메모리 관리방법은, 함수 및 인터럽트 서브루틴별로 스택 박스의 크기를 산출하는 단계; 및 함수가 호출되면 상기 산출된 함수의 스택 박스의 크기에 해당하는 메모리 맵의 비트들을 순차 검색하여 데이타 메모리내의 연속된 블럭들을 상기 함수의 스택박스로 할당하는 단계;를 포함한다.
상기와 같은 목적을 달성하기 위하여 본 발명의 다른 실시예에 따른 임베디드 시스템에서의 동적 메모리 관리방법은, 함수별로 필요한 스택 박스의 크기를 산출하는 단계; 함수가 호출되면 산출된 스택 박스에 해당하는 메모리 맵의 비트들을 순차 검색하여 데이타 메모리내의 연속된 블럭들을 함수의 스택박스로 할당하는 단계; 할당된 스택박스에 관련된 정보를 저장하는 단계; 및 함수 실행이 종료되면 저장 정보를 이용하여 상기 할당된 스택박스에 해당하는 블럭들을 반환하고 함수 호출 시점으로 복귀하는 단계;를 포함한다.
본 발명에 따른 임베디드 시스템에서의 동적 메모리 관리방법은 블록별로 스택 메모리를 할당 및 해제를 수행하기 때문에 제한된 H/W 로 구성된 임베디드 시스템에서 순수 S/W로만 구성되는 시스템의 신뢰적인 동작 환경을 제공할 수 있다.
또한, 본 발명에 따른 임베디드 시스템에서의 동적 메모리 관리방법은 멀티 태스킹 운영체제 환경에서 시스템 실행시 오동작의 주 원인인 스택동작 관련 스택 오버플로우와 태스크간 스택영역 충돌의 방지할 수 있으며, 임베디드 시스템은 인터럽트 사건 기반의 동작이 주가 되기 때문에 스택 메모리 관점에서 안전한 ISR 실행 보장 환경을 제공한다. 특히 제한된 메모리 공간의 효율적 사용을 위한 스택 메모리 관점에서의 효율적인 메모리 사용이 가능하며, 이로 인하여 가용한 동적 메모리(힙 메모리)의 공간을 확보하여 태스크 수용력을 확대시킬 수 있는 효과가 있다.
도 1은 본 발명에 따른 데이타 메모리 관리구조를 나타낸 도면
도 2는 본 발명을 적용할 경우 사용하는 스택양을 나타낸 그래프.
도 2는 본 발명을 적용할 경우 사용하는 스택양을 나타낸 그래프.
이하 첨부된 도면을 참조하여 본 발명에 따른 실시 예를 상세히 설명한다.
일반적으로 스텍 메모리는 데이터 메모리중에서 함수가 실행되기 위해 필요한 메모리 공간이다. 스텍 메모리는 매개변수를 위한 공간, 지역변수를 위한 공간, 함수 반환시 복귀 메모리 주소 저장 공간 및 인터럽트 발생시 문맥정보(Context information)를 저장하기 위한 공간으로 사용되며, POP/PUSH 동작으로 운용된다.
데이터 메모리는 크게 동적 메모리 구간(Heap memory)과 스텍 메모리 구간으로 나누어 진다. 상기 동적 메모리 구간은 실행시 유동적으로 데이터 메모리에서 빈구간을 할당하여 사용하는 구간으로 할당된 구간내에서만 읽기/쓰기가 이루어지므로 논리적 오류를 포함하는 코드가 아닐 시에는 스텍 메모리 구간을 침범할 일이 없다. 하지만, 스텍 메모리는 실행시 시스템의 구조에 따라 유동적으로 증가하고 감소할 수 있기 때문에 메모리 구간을 침범할 수 있으며 이를 스텍 오버플로우라고 한다.
한편 다중쓰레드 기반 스케줄을 사용하는 운영체제에서는 다수의 쓰레드가 시분할로 동시에 실행되기 때문에 각 쓰레드는 자신만의 스텍 메모리 구간을 할당하여 실행된다. 이때, 한 쓰레드가 동작중에 다른 쓰레드의 스텍 메모리 구간을 침범하는 것을 '스텍 충돌'이라 한다.
인터럽트 서비스 루틴(Interrupt service routine): 이하 ISR라 칭함)은 인터럽트 발생시 해당 인터럽트 처리를 위한 루틴으로, 외부 또는 내부 사건 발생으로 인해 임의 시점에 발생할 수 있으며, 하나의 인터럽트 서비스 루틴이 실행되는 동안 다른 인터럽트 발생에 대한 처리는 현재 실행중인 인터럽트 서비스 루틴이 완료된 후 처리된다.
문맥정보(Context information)는 스텍 포인터(SP), 프로그램 카운터(PC), 범용 레지스터(general purpose register)등의 MCU(Micro Controller unit) 레지스터들을 포함하며 현재 실행상황에 대한 정보를 의미한다. 문맥정보는 MCU 제조사마다 상이하다. 상기 문맥정보는 한 태스크 또는 함수가 실행권을 빼았겼을 때 나중에 실행권을 되찾았을 때 재실행을 위해 현재 정보를 저장하기 위한 목적으로 사용된다. 한 태스크 또는 함수가 실행권을 빼앗길 경우는 인터럽트 발생시나 멀티태스킹 기반 운영체제에서 태스크 변환시에 발생한다.
스택박스(Stack Box: 이하 SB로 칭함)는 각 함수 또는 등록한 인터럽트 서비스 루틴(ISR)을 실행하는데 요구되는 최대 스텍 메모리의 크기이다. 스택 사용량은 함수의 실행 진행 상황에 따라 변하기 때문에 최대로 요구될 때의 스택 메모리량이 보장되어야 한다. 스택박스는 해당 함수 또는 ISR에서 필요로 하는 스텍 메모리만 포함하되, 해당 함수 또는 인터럽트 서비스 루틴(ISR)내에서 호출되는 다른 함수에 수반되는 스택박스는 포함하지 않는다. 하나의 함수에 대한 스택박스(SB_f)는 다음 수학식1과 같이 지역변수(local variable), 함수인수(argument), 문맥정보(context information) 및 복귀주소(return address)를 포함한다.
[수학식1]
SBf(x) = sizeof(∑local variables) + sizeof(∑arguments)
+ sizeof(context information) + sizeof(return address)
여기서, sizeof(x)는 x를 저장하기 위해 필요한 공간을 바이트 단위로 나타낸 함수이다.
또한, 하나의 인터럽트 서비스 루틴(ISR)을 위한 스택박스(SB_i)는 다음 수학식2와 같이 계산된다. 하나의 인터럽트 서비스 루틴(ISR) 실행 중에는 글로벌 인터럽트가 비활성되는 것을 가정하며, 함수 인수와 문맥정보를 위한 스택공간은 포함하지 않는다.
[수학식2]
SBi(x) = sizeof(∑local variables) + sizeof(return address)
도 1은 본 발명에 따른 데이타 메모리 관리구조이다.
도 1에 도시된 바와같이, 본 발명은 전체 데이터 메모리(100)를 고정된 크기의 블록으로 나누어 블록단위로 할당 및 해제를 수행한다. 이때 블록의 크기는 개발자가 설정가능하며 2^n 형태를 따른다. 따라서, 블록단위로 구분된 데이타 메모리(100)중에서 상위 구간에는 메모리 맵(10)이 위치하고, 최하위 구간에는 ISR을 위한 스택박스(SB)(30)가 위치한다. 그리고 가운데 구간(20)은 힙 메모리와 스택 메모리를 포함한다.
상기 메모리 맵(10)은 전체 메모리 블록에 대해 현재 사용되고 있는 정보를 메모리 맵형태로 유지하고 저장하기 위해 사용된다. 상기 메모리맵(10)은 비트들로 구성되고, 각 비트는 한 메모리 블록의 기할당 여부의 정보를 반영한다. 따라서, 메모리맵(10)에서 한 메모리 블록에 해당하는 비트가 1이면 해당 블록이 이미 할당되어 사용되고 있음을 의미하며, 0이면 비어있는 블록으로 앞으로 할당 요청하여 사용 가능함을 의미한다. 상기 메모리맵(10)의 저장 공간은 다음 수학식3과 같이 나타낼 수 있다.
[수학식3]
Sizeof(Memorymap) = celling(Sizeof(Data memory)/Sizeof(Block))(Byte)
여기서, celling(x)는 실수 x에 소수점이하에 대해 올림함수를 의미한다.
상기 메모리맵(10)의 최상위 비트는 데이터 메모리(100)의 최상위 주소에 해당하는 블록에 해당하며, 최상위 비트 이후의 비트들는 순차적으로 최상위 블록 이후의 블록들로 매핑된다. 이 때문에 데이터 메모리(100)에서 메모리맵(10)이 차지하고 있는 구간에 해당하는 블록들은 항상 1로 설정된다. 메모리 맵(10)상에서 최상위 비트로부터 n 번째 떨어진 블록의 실제 주소(물리주소)는 다음 수학식4에 도시된 변환식으로 나타낼 수 있다.
[수학식4]
Physicaladdress = BaseAddress + (n+1)× Sizeof(Block)-1
상기 데이터 메모리(100)에서 스택 메모리 동작은 지역변수 선언등으로 일정 공간이 필요할 때 PUSH 명령어가가 사용되며, PUSH는 스택 포인터(SP)값을 감소시켜 공간을 확보한다. 따라서, 해당 블록의 최하위 주소가 스택 메모리에서의 시작주소가 된다.
이하 본 발명의 실시예에 따른 임베디드 시스템에서의 동적 메모리 관리방법을 설명하면 다음과 같다.
본 발명에서 스택박스(SB) 관리 방법은 크게 두 가지로 나누어진다.
첫 번째 단계는 코드 수정이다. 이 단계는 컴파일이 되기전(pre-compile) 및 컴파일 단계에서, 전체 코드를 분석하여 각 구조체의 크기, 각 함수 및 각 인터럽트 서비스 루틴(ISR)의 스택박스(SB) 크기를 산출(추정)하는 단계이다. 즉, 오브젝트 파일 단계에서는 간접으로 어드레스를 참조하는 스택 동작 관련 명령어들의 분석이 불가능하기 때문에 C 코드 단계에서 분석을 수행한다. 산출 후 모든 함수 및 ISR에 대해 실행시 스택박스 할당과 해제를 위한 SB할당모듈과 SB해제모듈을 삽입하게 된다.
두 번째 단계는 실제 실행시 함수 호출/반환과 ISR 진입/진출에 따른 상기 B할당모듈과 SB해제모듈의 동작으로 이루어지며, 그 동작은 아래와 같이 ISR과 함수별로 수행된다.
- ISR에서 SB관리 방법
본 발명은 스택 관점에서 ISR의 안정적인 실행을 보장하기 위해, ISR를 위한 SB는 도 1에 도시된 바와같이 데이터 메모리내에 고정적으로 할당하여 사용한다. 한 구간만을 할당하여 ISR의 SB로 사용되며 해당 할당 구간의 크기는 모든 등록 ISR 중 가장 큰 크기의 SB로 결정된다. 본 발명은 ISR내에서 글로벌 인터럽트 비트가 비활성된다고 가정하기 때문에 한 시점에서 한 ISR만 실행된다. 이와 같은 ISR 루틴 구현은 많은 저전력 저성능 MCU, ATmega series와 MSP430 series를 위한 컴파일러에서 signal등의 키워드로 제공된다. ISR용 SB를 위한 구간은 데이터 메모리(100)의 최하위 블록들에 위치된다. 이때, ISR를 위한 SB의 크기(SBi)는 다음 수학식 5와 같이 나타낼 수 있다.
[수학식5]
ISR를 위한 SB의 크기(SBi)= maxx=1....n(SBi(x))
SB할당모듈은 ISR 시작부분에 삽입되며 종료후에 해당 인터럽트 발생 시점으로 복귀하기 위한 준비작업을 한다. 즉, ISR진입시 SB할당모듈은 스택 포인터(SP)를 저장하고 지정된 ISR용 SB구간의 바닥주소로 SP값을 변경한다. SP값 변경 후에는 ISR 종료 후 복귀 주소와 ISR내 지역변수를 위한 공간을 PUSH한다.
SB해제모듈은 반환 명령 전에 ISR에 삽입되며, 해당 인터럽트 발생 시점 코드로 복귀하기 위한 일련의 작업을 포함한다. 프로그램 카운터(PC)값을 복귀 주소로 치환하고 SP값을 ISR 진입 초기에 저장한 주소로 치환한다.
- 함수에서 SB 관리 방법
본 발명에서 각 함수별로 할당된 스택박스(SB)는 물리적으로 서로 떨어진 구간에 위치하게 되며, 함수 호출 및 반환은 시스템의 투명한 동작을 위해 스택 포인터(SP) 및 스택정보의 조작을 수반한다. 각 함수는 상이한 크기의 SB를 요구하고 호출에 따라 유동적인 할당을 요구하기 때문에 함수 호출은 SB할당을 위한 가용한 메모리 블록의 검색 및 할당 작업을 수반한다. 또한, 함수 반환은 해당 SB에 할당된 메모리 블록들 해제와 메모리 맵에 반영 작업을 포함한다.
함수에서 SB를 관리하기 위하여 SB할당모듈은 함수 도입부와 함수 호출 전에 삽입되며 SB 할당과 현재 스택정보 저장 및 스택 이동을 포함한다.
함수 x 가 호출되면 자신의 SB 할당을 위한 빈 메모리 공간 검색에 우선하여 검색에 필요한 비트열 B(SBf(x))을 생성한다. 상기 비트열 B(SBf(x))은 SBf(x)를 수용하기 위해 필요한 블록 개수(n)의 비트들로 구성되고, 비트열내의 모든 비트는 1로 설정된다. 함수 x의 SB를 위한 비트열 길이 n은 다음 수학식6과 같다.
[수학식6]
비트열의 길이(n) = celling(sizeof(SBf(x))/sizeof(block))(bit)
또한 검색을 위해 검색할 비트맵 BM(n, i)을 생성한다. 상기 BM(n, i)은 메모리 맵(10)의 일부분으로 구성되며, 메모리 맵(10)의 시작 부분인 최상위비트에서 i 비트만큼 떨어진 n개의 연속된 비트들을 의미한다.
검색 방법은 메모리맵(10)의 최하위 비트들인 BM(n, max)부터 B(SBf(x))과 AND 논리연산을 수행한다. 연산에 대한 결과 값 0은 비트맵 중 BM(n, i)에 해당하는 메모리 블록들이 현재 사용되지 않는 상태로 할당 가능한 상태임을 의미하며, 0 외의 결과는 해당 메모리 블록들 중 한 개 이상이 이미 할당되어 사용되고 있음을 의미한다. 0의외의 결과가 나올시 메모리맵 상에서 한 비트만큼 상위 주소쪽으로 시프트한 BM(n, max-1)과 AND 연산을 다시 수행하며, 결과가 0이 나올 때까지 시프팅과 연산은 계속된다. 빈 메모리블록 검색의 복잡도는 블록 개수에 의존하여 O(n)이 된다.
만약 메모리맵(10)의 최상위 비트까지 연산결과가 0이 나오지 않을 경우, 즉, BM(n, 0)때까지 연산이 반복되고 결과가 0이 나오지 않을 시, 현재 데이터 메모리(100)는 포화상태로 해당 SB를 수용하지 못하는 것을 의미한다. 이때, 함수를 실행한 태스크는 메모리 오버플로우를 방지하기 위해 가용한 메모리가 발생할 때까지 대기상태로 놓여진다. 메모리 포화상태로 다수의 태스크가 대기상태에서 가용한 메모리 공간이 발생하면 대기 태스크들은 우선순위에 따라 가용 메모리공간을 스택 메모리로 이용하여 실행을 요구한다.
x번의 반복된 연산 후에 결과가 0이 나와 해당 SB를 위한 메모리 블록 할당에 성공하였을 시, BM(n, max-x+1)에 해당하는 연속된 블럭들은 해당 SB를 위한 구간으로 할당하며 해당하는 메모리맵(10)의 비트들을 1로 설정한다. 그리고 해당 SB의 함수가 종료 되었을 때 복귀할 SP의 값을 저장한다. SP값을 SB에게 할당된 연속된 블록들 중 최하위 블록의 최하위 주소로 치환한 후 SP 변경전에 PUSH된 해당 함수와 관련된 정보(복귀값, ISR내 지역변수)등을 할당 SB에 PUSH한다. 이후 해당 함수가 실행된다.
SB 해제 모듈은 함수 반환 명령 이전과 해당 함수 호출 후 시점에 삽입되며, 종료시 해당 SB 할당에 해당하는 메모리 블록들을 반환하기 위해 할당된 메모리 블록들에 해당하는 메모리맵(10)의 비트들은 0으로 설정한다. 해당 함수 호출 시점 코드로 복귀하기 위해 PC값을 복귀 주소로 치환하고 SP값을 저장한 복귀 주소로 치환한다.
도 2는 본 발명에 따른 임베디드 시스템에서의 동적 메모리 관리방법을 적용할 경우 사용하는 스택양을 나타낸 그래프이다.
도 2에 도시된 바와같이, msp 430기반의 H/W플랫폼에서 플래시의 일정 구간을 정렬하는 프로그램을 구동하였을 경우, 시스템 구동에 필요한 전체 스택 메모리를 산출하여 고정적으로 할당하는 종래의 방법은 시간에 관계없이 스택량(A)이 일정함을 알 수 있다. 하지만, 본 발명은 블록별로 스택 메모리를 동적으로 할당 및 해제하기 때문에 사용되는 스택량(B)은 실제 사용하는 스택량(C)과 거의 유사함을 알 수 있다.
상술한 바와같이 본 발명은 블록별로 스택 메모리를 할당 및 해제를 수행하기 때문에 제한된 H/W 로 구성된 임베디드 시스템에서 순수 S/W로만 구성되는 시스템의 신뢰적인 동작 환경을 제공할 수 있다.
그리고 본 발명은 멀티 태스킹 운영체제 환경에서 시스템 실행시 오동작의 주 원인인 스택동작 관련 스택 오버플로우와 태스크간 스택영역 충돌의 방지할 수 있으며, 임베디드 시스템은 인터럽트 사건 기반의 동작이 주가 되기 때문에 스택 메모리 관점에서 안전한 ISR 실행 보장 환경을 제공한다. 특히 본 발명은 제한된 메모리 공간의 효율적 사용을 위한 스택 메모리 관점에서의 효율적인 메모리 사용이 가능하며, 이로 인하여 가용한 동적 메모리(힙 메모리)의 공간을 확보하여 태스크 수용력을 확대시킬 수 있다.
상기와 같이 설명된 동적 메모리 할당방법은 상기 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
10 : 메모리 맵 20 : ISR용 스택박스
30 : 힙 메모리 및 스택 메모리
100 : 데이타 메모리
30 : 힙 메모리 및 스택 메모리
100 : 데이타 메모리
Claims (14)
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 함수별로 필요한 스택 박스의 크기를 산출하는 단계;
함수가 호출되면 산출된 스택 박스에 해당하는 메모리 맵의 비트들을 순차 검색하여 데이타 메모리내의 연속된 블럭들을 함수의 스택박스로 할당하는 단계;
상기 함수의 스택박스에 할당된 연속된 블록들 중 최하위 블록의 최하위 주소를 스택 포인트값으로 저장하는 단계; 및
함수 실행이 종료되면 상기 할당된 스택박스에 해당하는 블럭들을 반환하고 상기 저장된 스택 포인트값을 이용하여 함수 호출 시점으로 복귀하는 단계;를 포함하며, 상기 스택박스를 할당하는 단계는
상기 산출된 크기의 스택박스를 수용하기 위해 필요한 블록 개수만큼의 비트들로 구성되어 논리값 1로 설정된 비트열을 생성하는 단계;
메모리 맵에서 상기 블록 개수만큼 연속된 비트들로 검색 범위를 지정하는 비트맵을 생성하는 단계;
상기 메모리 맵의 최하위 비트인 비트맵의 값부터 상기 비트열의 값과 AND 논리연산하여 논리 연산값이 0인지 판단하는 단계; 및
논리 연산값이 0이 되어 상기 비트맵에 해당하는 메모리 블록들이 빈 상태인 경우 해당 블럭들을 상기 함수의 스택박스로 할당하는 단계;를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법. - 제8항에 있어서, 상기 스택박스의 크기는
프리-컴파일 단계 및 컴파일 단계에서 산출되며, 인터럽트 스택크기를 포함하는 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법. - 삭제
- 제8항에 있어서, 상기 논리 연산값이 0이 나오지 않아 비트맵에 포함된 메모리 블록들이 모두 빈상태가 아닌 경우 상기 메모리 맵상에서 1비트만큼 상위 주소로 시프트된 비트맵의 값과 상기 비트열의 값을 다시 AND 논리 연산하며, 상기 시프트와 논리연산은 논리 연산값이 0이 나올 때까지 반복되는 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법.
- 제8항에 있어서, 상기 데이타 메모리는
고정된 크기의 복수의 블록으로 구분되어, 상위 구간에는 메모리 맵이 위치하고, 최하위 구간에는 인터럽크 서브루틴을 위한 스택박스가 위치하며, 가운데 구간에는 힙 메모리와 스택 메모리가 위치하는 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법. - 제8항에 있어서, 상기 메모리 맵은
전체 메모리 블록에 대해 현재 사용되고 있는 정보를 비트값 형태로 유지하고 있으며, 상기 메모리맵 각 비트는 한 메모리 블록의 기할당 여부의 정보를 반영하는 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법. - 제12항에 있어서, 상기 인터럽크 서브루틴을 위한 스택박스는
고정적으로 할당되어 운용되며, 크기는 모든 등록 인터럽크 서브루틴중에서 가장 큰 크기의 스택박스인 것을 특징으로 하는 임베디드 시스템에서의 동적 메모리 관리방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120033480A KR101378058B1 (ko) | 2012-03-30 | 2012-03-30 | 임베디드 시스템에서의 동적 메모리 관리방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120033480A KR101378058B1 (ko) | 2012-03-30 | 2012-03-30 | 임베디드 시스템에서의 동적 메모리 관리방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130111027A KR20130111027A (ko) | 2013-10-10 |
KR101378058B1 true KR101378058B1 (ko) | 2014-03-27 |
Family
ID=49632747
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120033480A KR101378058B1 (ko) | 2012-03-30 | 2012-03-30 | 임베디드 시스템에서의 동적 메모리 관리방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101378058B1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101593161B1 (ko) | 2014-10-02 | 2016-02-15 | 한국전자통신연구원 | 메모리 관리 장치 및 방법 |
KR102435347B1 (ko) * | 2017-12-14 | 2022-08-23 | 현대자동차주식회사 | 전자 제어 장치용 메모리 감시 및 사용 표시 방법 및 장치 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980084404A (ko) * | 1997-05-23 | 1998-12-05 | 윤종용 | 메모리 관리방법 |
KR20080054324A (ko) * | 2006-12-12 | 2008-06-17 | 한국전자통신연구원 | 멀티 쓰레드 기반 센서 운영체제 환경에서의 스택 할당방법 |
-
2012
- 2012-03-30 KR KR1020120033480A patent/KR101378058B1/ko active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980084404A (ko) * | 1997-05-23 | 1998-12-05 | 윤종용 | 메모리 관리방법 |
KR20080054324A (ko) * | 2006-12-12 | 2008-06-17 | 한국전자통신연구원 | 멀티 쓰레드 기반 센서 운영체제 환경에서의 스택 할당방법 |
Also Published As
Publication number | Publication date |
---|---|
KR20130111027A (ko) | 2013-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8799880B2 (en) | Parallelization of PLC programs for operation in multi-processor environments | |
US9417935B2 (en) | Many-core process scheduling to maximize cache usage | |
TWI525540B (zh) | 具有橫跨多個處理器之平行資料執行緒的映射處理邏輯 | |
JP4528300B2 (ja) | マルチスレッディングのスレッド管理の方法および装置 | |
US9298438B2 (en) | Profiling application code to identify code portions for FPGA implementation | |
KR102334511B1 (ko) | 작업 의존성 관리 | |
Dong et al. | Analysis techniques for supporting hard real-time sporadic gang task systems | |
JP2020522824A (ja) | タスク並列処理方法、装置、システム、記憶媒体およびコンピュータ機器 | |
US20130346985A1 (en) | Managing use of a field programmable gate array by multiple processes in an operating system | |
JP2012511204A (ja) | リソースを最適化するためのタスク再編成方法 | |
JP2014504768A (ja) | 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置 | |
KR102205899B1 (ko) | 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 | |
CN103279388A (zh) | 用于执行一个或更多个任务的系统和方法 | |
US11645124B2 (en) | Program execution control method and vehicle control device | |
US20110078378A1 (en) | Method for generating program and method for operating system | |
KR101378058B1 (ko) | 임베디드 시스템에서의 동적 메모리 관리방법 | |
JP6427053B2 (ja) | 並列化コンパイル方法、及び並列化コンパイラ | |
CN112783652B (zh) | 当前任务的运行状态获取方法、装置、设备及存储介质 | |
CN103593606B (zh) | 上下文信息管理方法及系统 | |
US20120005460A1 (en) | Instruction execution apparatus, instruction execution method, and instruction execution program | |
US20160147559A1 (en) | Modification of context saving functions | |
US9244828B2 (en) | Allocating memory and using the allocated memory in a workgroup in a dispatched data parallel kernel | |
US8943503B2 (en) | Apparatus and method for thread progress tracking using deterministic progress index | |
JP2021039666A (ja) | コア割当装置及びコア割当方法 | |
Lee et al. | MRT-PLRU: A general framework for real-time multitask executions on NAND flash memory |
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: 20200303 Year of fee payment: 7 |