KR20150114444A - 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 - Google Patents

실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 Download PDF

Info

Publication number
KR20150114444A
KR20150114444A KR1020150046445A KR20150046445A KR20150114444A KR 20150114444 A KR20150114444 A KR 20150114444A KR 1020150046445 A KR1020150046445 A KR 1020150046445A KR 20150046445 A KR20150046445 A KR 20150046445A KR 20150114444 A KR20150114444 A KR 20150114444A
Authority
KR
South Korea
Prior art keywords
task
stack
level stack
level
state
Prior art date
Application number
KR1020150046445A
Other languages
English (en)
Other versions
KR102338849B1 (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 삼성전자주식회사
Publication of KR20150114444A publication Critical patent/KR20150114444A/ko
Application granted granted Critical
Publication of KR102338849B1 publication Critical patent/KR102338849B1/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
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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

Abstract

실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서 메모리 관리를 제공하는 방법 및 시스템이 제공된다. 상기 방법은, 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하고, 태스크 스케줄러가 스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링한다. 상기 제1 태스크가 선점되었는지를 판단하고, 상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당한다. 상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하고, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단한다. 상기 제1 태스크가 그 자체를 포기하면, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키고, 상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공한다.

Description

실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템{METHOD AND SYSTEM FOR PROVIDING STACK MEMORY MANAGEMENT IN REAL-TIME OPERATING SYSTEMS}
본 개시는 실시간 운영 체제 (RTOS: Real-Time Operating System)에서의 스택(stack) 관리방법 및 이를 지원하는 시스템에 관한 것이다.
내장된 RTOS 기반 시스템은 스택에 각각 관련된 다수의 태스크(task)들을 사용한다. 시스템에 다수의 태스크가 있는 경우, 스택의 메모리 사용량이 상당할 수 있다. 도 1에서는 멀티태스킹 (multi-tasking) 시나리오에서 개별 태스크 스택의 할당 예를 보이고 있다.
신규 태스크가 시스템에 추가/생성될 때, 그 신규 태스크를 위한 메모리가 스택에 할당되므로, 메모리 요구 사항들이 변경될 수 있다. 이는 RAM (Random Access Memory) 요구 사항들이 증가하는 요인이 된다.
하기의 두 경우들은 시스템에서의 가능한 스택 사용량의 예들이다.
a. 최대로 할당된 스택 크기가 항상 특정 태스크에 의해 이용되지는 않을지라도, 그 특정 태스크의 할당된 스택 크기는 가장 높은 스택 한계치로 설정된다.
b. 어떠한 시점에서, 하나의 태스크는 실행 상태일 수 있으나, 일부 다른 태스크들은 대기(즉, 선점) 상태일 수 있으며, 모든 나머지 태스크들은 보류 (즉, 이벤트/메시지 대기) 상태이다.
상기의 경우들에서, 각 태스크의 할당된 스택 메모리는 소정의 시점에서 반드시 이용되지는 않는다. 기존의 RTOS에서, 모든 태스크는 각각 다른 스택 영역을 가질 것으로 예상되므로, 스택 사용을 위한 메모리 최적화는 가능하지 않다. 어떤 운영 체제들이 스택 영역 재사용 개념을 적용할지라도, 스택 재사용을 자원 제한 저비용 머신형 통신 (MTC: Machine-Type Communication) 장치에 적용하기는 어렵다. 어떤 경우에는, 태스크가 소정 기간동안 존재한 경우에 스택 메모리가 재사용될 수 있다. 그러한 태스크는 특정 태스크의 실행 후 삭제될 수 있다. 그러나 전형적인 MTC 장치에서, 태스크들은 시동(boot-up) 시간 동안 생성되어 그 MTC 장치의 실행 기간 내내 존속한다.
MTC 장치들에서 배치되는 것과 같은 저비용 시스템 온 칩 (SoC: System on a Chip)에서, 그러한 칩들의 비용을 떨어뜨리기 위해서는, 메모리 요구 사항들을 감소시킬 필요가 있어, 그 MTC 장치들은 더 낮은 RAM 구성으로 기능을 할 수 있다.
전술한 관점에서, 장치들의 전체적인 비용을 줄이면서도 태스크 스택 사용을 위한 메모리 사용량을 낮추고 태스크 스택 단위로 RAM 감소를 가능하게 하는 RTOS 스케줄러에서의 효과적인 방식이 필요하다.
본 개시는 상술한 문제점들과 단점들을 해결하고 적어도 아래에서 설명되는 장점들을 제공하기 위한 것이다.
본 개시의 일 측면은 RTOS 기반 시스템에서 메모리 관리를 제공하는 방법을 제공한다.
일 실시 예에 따르면, 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서 메모리 관리를 제공하는 방법이 제공된다. 상기 방법은 태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계와, 태스크 스케줄러가 스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하는 단계와, 상기 제1 태스크가 선점되었는지를 판단하는 단계와, 상기 제1 태스크가 선점되지 않았으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계와, 상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계와, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계와, 상기 제1 태스크가 그 자체를 포기하는 경우, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키는 단계 및 상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공하는 단계를 포함한다.
다른 실시 예에 따르면, 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서 메모리 관리를 제공하는 방법이 제공된다. 상기 방법은 태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계와, 태스크 스케줄러가 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하는 단계와, 상기 제1 태스크가 선점되었는지를 판단하는 단계와, 상기 제1 태스크가 선점되지 않았으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계와, 상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계와, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계와, 상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기 중인 경우, 상기 제2 레벨 스택을 스캐닝하는 단계와, 레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하는 단계와, 레지스터들이 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하는 단계 및 상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시키는 단계를 포함한다.
다른 실시 예에 따르면, 명령어들이 내장되고, 컴퓨터 프로세서에서 실행될 때 상기 명령어들이 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서의 메모리 관리를 제공하는 방법을 수행하는, 비일시적 컴퓨터 판독 가능 매체가 제공된다. 상기 방법은 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계와, 스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하는 단계와, 상기 제1 태스크가 선점되었는지를 판단하는 단계와, 상기 제1 태스크가 선점되지 않았으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계와, 활성 태스크를 실행하도록 변경하는 단계와, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계와, 상시 제1 태스크가 그 자체를 포기하고 다른 자원을 대기하는 경우, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키는 단계 및 상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공하는 단계를 포함한다.
다른 실시 예에 따르면, 명령어들이 내장되고, 컴퓨터 프로세서에서 실행될 때 상기 명령어들이 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서의 메모리 관리를 제공하는 방법을 수행하는, 비일시적 컴퓨터 판독 가능 매체가 제공된다. 상기 방법은 태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계와, 태스크 스케줄러가 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하는 단계와, 상기 제1 태스크가 선점되었는지를 판단하는 단계와, 상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계와, 상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계와, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계와, 상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기 중인 경우, 상기 제2 레벨 스택을 스캐닝하는 단계; 레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하는 단계와, 레지스터가 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하는 단계 및 상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시키는 단계를 포함한다.
다른 실시 예에 따르면, 제1 태스크와 제2 태스크를 포함하는 다수의 태스크를 수행하는 컴퓨터 프로세서를 위한 실시간 운영 체제 (RTOS: Real-Time Operating System)을 실행하는 컴퓨터 프로세서 및 메모리가 제공된다. 상기 RTOS는, 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 태스크 발생기 및 태스크 스케줄러를 포함하고, 상기 태스크 스케줄러가, 스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하고, 상기 제1 태스크가 선점되었는지를 판단하고, 상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하고, 활성 태스크를 실행하도록 변경하고, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하고, 상시 제1 태스크가 그 자체를 포기하고 다른 자원을 대기하는 경우, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키고, 상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공한다.
다른 실시 예에 따르면, 제1 태스크와 제2 태스크를 포함하는 다수의 태스크를 수행하는 컴퓨터 프로세서를 위한 실시간 운영 체제 (RTOS: Real-Time Operating System)을 실행하는 컴퓨터 프로세서 및 메모리가 제공된다. 상기 RTOS는, 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 태스크 발생기 및 태스크 스케줄러를 포함하고, 상기 태스크 스케줄러가, 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하고, 상기 제1 태스크가 선점되었는지를 판단하고, 상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하고, 활성 태스크를 실행하도록 변경하고, 상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하고, 상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기 중인 경우, 상기 제2 레벨 스택을 스캐닝하고, 레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하고, 레지스터들이 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하고, 상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시킨다.
본 개시의 상술한 목적들, 특징들 및 장점들과 다른 목적들, 특징들 및 장점들이 첨부된 도면을 참조하여 하기의 설명으로부터 명확해질 것이다.
도 1은 멀티태스킹 (multi-tasking) 시나리오에서 개별 태스크 스택의 할당 예를 보이고 있는 도면;
도 2는 본 개시의 일 실시 예에 따른 태스크들에서의 스택 관리를 위한 2-레벨 방식을 개략적으로 보이고 있는 도면;
도 3은 본 개시의 일 실시 예에 따른 태스크 스택들을 실시간으로 전환하는 과정을 개력적으로 보이고 있는 도면;
도 4는 본 개시의 일 실시 예에 따른 선점(pre-emption)하는 경우의 태스크 스택의 사용을 개략적으로 보이고 있는 도면;
도 5는 본 개시의 일 실시 예에 따른 태스크가 추가적인 자원을 대기하는 경우에 있어 태스크 스택의 사용을 개략적으로 보이고 있는 도면;
도 6은 본 개시의 일 실시 예에 따른 태스크의 상태 천이를 보이고 있는 도면;
도 7은 본 개시의 일 실시 예에 따른 스택 재사용 수법을 위한 스케줄러의 제어 흐름을 보이고 있는 도면;
도 8은 본 개시의 일 실시 예에 따른 스택 재사용 수법을 위한 스케줄러의 제어 흐름을 보이고 있는 도면;
도 9는 본 개시의 일 실시 예에 따른 실시간 운영체제의 다양한 기능적 구성 요소들을 예시한 컴퓨터 환경을 보이고 있는 도면.
이하, 본 개시의 실시 예들을 첨부한 도면을 참조하여 상세히 설명한다. 그러나 본 개시는 설명되는 실시 예들로 한정되지 않는다. 하기의 설명에서, 동일하거나 유사한 참조부호들을 사용하여 첨부한 도면에서 동일하거나 유사한 구성요소들을 나타낸다. 주지의 기능들과 구성들의 상세한 설명은 본 개시의 요지를 흐리지 않도록 생략될 수 있다.
본 개시의 일부 실시 예들은 저비용 모뎀 SoC를 위한 스택 메모리 감소, 재배치 및 재사용을 위한 시스템 및 방법에 관한 것이다. 본 개시의 어떤 실시 예들은 모뎀 SoC가 메모리 소모를 줄이도록 모든 레벨들에서 설계 기법들을 사용할 필요가 있는 MTC 장치들과 같은 내장 RTOS 기반 시스템들에서 메모리 소모를 감소시킨다.
도 2는 본 개시의 일 실시 예에 따른 태스크들의 스택 관리를 위한 2-레벨 방식을 도시하는 개략도이다.
도 2를 참조하면, 스택 관리 구조(framework)는 메모리 사용량을 줄이기 위해 두 레벨의 스택들을 사용한다. 제1 레벨 스택 (first level stack)(202)은 각각의 태스크(T1~TN)(206)와 관련된다. 기존의 시스템들과 달리, 메모리 크기가 거의 최저로 감소될 수 있다. 제1 레벨 스택(202)은 보류 상태 (즉, 동기화 이벤트, 큐(queue), 세마포어(semaphore) 등을 대기하는 상태)일 필요가 있는 콘텍스트 또는 데이터를 보유한다. 보류된 스택이 실행될 예정이 아니므로, 태스크 로컬 데이터는 한정된 제1 레벨 스택(202)에 저장될 수 있다. 따라서, 제1 레벨 스택(202)의 크기는 보류 상태에 있는 경우 각각의 대응하는 태스크의 콘텍스트를 저장하는데 필요한 스택 메모리와 동등할 것이다. 이러한 메모리 요구 사항은 매우 적다 (즉, 레지스터 콘텍스트들을 위한 다소의 워드들 등). 실행 완료를 허용하는 일부 RTOS 구현들에서, 스택 메모리의 크기는 제로에 가깝게 작을 수 있다.
제2 레벨 스택 (second level stack)(204)은 공유 메모리 풀(common stack pool)이며, 이는 각각 크기 (stack size) S를 가지는 N 개의 공유 스택들을 포함한다. 여기서 N 및 S는 각각 시스템 구현에 좌우된다. 제2 레벨 스택(204)에 포함된 스택들의 개수 (N)는 약간의 편차로 시스템에서 측정될 수 있는 가능한 대기 태스크들 (즉, 선점된 태스크들)의 최대 개수에 의해 결정될 수 있다. 대기 태스크들의 개수가 N보다 크면 (불의의 시나리오 등에 의해), 제2 레벨 스택(204)은 더미(heap)로부터 동적으로 생성될 수 있다. 모든 N 스택들을 위한 공유 풀 스택 크기는 시스템에서 가장 큰 스택을 요구하는 특정 시나리오를 실행하도록 특정 태스크에 필요한 스택 크기로 유지된다.
도 3은 본 개시의 일 실시 예에 따른 태스크 스택들을 실시간으로 전환하는 과정을 도시하는 개략도이다.
도 3을 참조하면, 다수의 태스크는 보류 상태에 있으며, 관련된 제1 레벨 스택을 사용했다는 시나리오로 시작된다. 관련된 제1 레벨 스택(306)을 사용하는 보류 상태 (suspended)(304)에 있는 특정 태스크 Tc(302)는 예외 또는 이벤트 (exception/event)(308)로 인해, 실행할 준비가 이루어질 수 있다. 상기 태스크는 스케줄러(330)에 의해 실행될 예정이다. 태스크 Tc(302)가 보류 상태(304)로부터 실행 상태(310)로 이동되기 전에, 제2 레벨 스택(312)은 공유 풀에서의 N 스택들 중에서 제2 레벨 스택으로 선택된다. 특정 태스크 Tc(302)의 스택 포인터는 제2 레벨 스택(312)으로 이동되고, 태스크가 그 자체를 포기할 때까지 스택 포인터는 특정 태스크 Tc(302)의 사용을 위해 예약된다. 태스크 Tc(302)가 그것의 과정을 완료하고 그 자체를 보류 상태(304)에 있도록 포기할 때, 스케줄러(330)는 스택 포인터를 그것의 관련된 제1 레벨 스택(306)으로 반환하고, 동일한 관련된 제1 레벨 스택(306)에서 콘텍스트를 갱신한다. 이용된 제2 레벨 스택(312)은 공유 풀에서 사용 가능하게 된다.
도 4는 본 개시의 일 실시 예에 따른 선점(pre-emption)하는 경우의 태스크 스택의 사용을 도시하는 개략도이다.
도 4를 참조하면, 태스크 Tc(402)는 제2 레벨 스택(406)을 사용하는 실행 상태(404)에 있다는 시나리오로 시작된다. 한편, 태스크 Th(410)는 관련된 제1 레벨 스택(414)을 사용하는 보류 상태(412)에 있다. 예외 조정기가 더 높은 우선순위 태스크 Th(410)를 실행하도록 게시할 때, 태스크 Tc(402)는 예외(420)로 인해 선점된다. 이러한 상황에서, 공유 풀의 제2 레벨 스택(406)은 스택 포인터가 제자리에 있는 실행 태스크 Tc(402)를 위해 예약될 수 있다. 이는 스택이 로컬 변수들을 보유하기 위한 태스크 Tc(402)에 의해 사용될 수 있도록 하며, 그들 중 일부가 동일한 스택 영역에 대한 포인터들일 수 있기 때문이다. 그러므로 스택 포인터는 정적으로 연계된 코드 기반 구현에서 변경될 수 없다. 실행되어야 하는 신규 태스크 Th(410)는 공유 풀로부터 다음의 이용 가능한 제2 레벨 스택(418)을 할당받아야 한다. 이러한 할당을 위해, 현재 그것과 관련된 제1 레벨 스택(414)을 지시하고 있는 태스크 Th(410)의 스택 포인터는 풀로부터 다음의 제2 레벨 스택(418)으로 갱신된다. 그 다음에, 스케줄러(430)는 태스크 Th(410)를 실행 상태(416)로 두고, 이전의 실행 태스크 Tc(402)를 대기 상태(408)로 유지한다. 태스크 Th(410)가 자체적으로 포기할 때, 태스크 Th(410)의 스택 포인터는 제2 레벨 스택(418)로부터 그것의 관련된 제1 레벨 스택(414)으로 복구될 수 있다. 이때 이용된 제2 레벨 스택(418)은 공유 풀에서 이용 가능하게 된다. 태스크 Tc(402)는 제2 레벨 스택(406)을 사용하는 실행 상태(404)에서 재개된다.
본 개시의 일 실시 예에 따르면, 상술한 방법을 이용하여 다수의 선점이 수행될 수 있다. 또한, 선점된 태스크가 그 자체를 포기할 때, 스택 포인터는 그것의 관련된 제1 레벨 스택으로 복구되고, 포기된 태스크에 의해 사용된 제2 레벨 스택은 이용 가능하도록 해제된다.
도 5는 본 개시의 일 실시 예에 따른 태스크가 추가적인 자원을 대기하는 경우의 태스크 스택의 사용을 도시하는 개략도이다.
도 5를 참조하면, 태스크 Tc(502)는 제2 레벨 스택(506)을 사용하는 실행 상태(504)에 있다는 시나리오로 시작된다. 태스크 Tc(502)는 추가로 다른 자원을 대기하고 (정상적인 대기 이외 경우), 프로세서의 사용을 포기해야 한다. 한편, 신규 태스크 Th(512)는 관련된 제1 레벨 스택(514)을 사용하는 보류 상태(510)에 있다. 신규 태스크 Th(512)가 실행되어야 할 때, 태스크 Tc(502)는 추가적인 자원의 사용이 차단된다. 이러한 상황에서, 공유 풀의 제2 레벨 스택(506)은 스택 포인터가 제자리에 있는 실행 태스크 Tc(502)를 위해 예약될 수 있다. 이는 제2 레벨 스택(506)이 로컬 변수들을 보유하기 위한 태스크 Tc(502)에 의해 사용될 수 있으며, 그들 중 일부가 동일한 스택 영역에 대한 포인터들일 수 있기 때문이다. 그러므로 스택 포인터는 정적으로 연계된 코드 기반 구현에서 변경될 수 없다. 실행되어야 하는 신규 태스크 Th는 공유 풀로부터 다음의 이용 가능한 제2 레벨 스택(518)을 할당 받아야 한다. 이러한 할당을 위해, 현재 그것과 관련된 제1 레벨 스택(514)을 지시하고 있는 태스크 Th(512)의 스택 포인터는 풀로부터 다음의 이용 가능한 제2 레벨 스택(518)으로 갱신된다. 그 다음에, 스케줄러(530)는 태스크 Th를 실행 상태(516)로 두고, 이전의 실행 태스크 Tc(502)를 대기 상태(508)로 유지한다. 태스크 Th가 자체적으로 포기할 때, 스케줄러(530)는 태스크 Th의 스택 포인터를 제2 레벨 스택(518)로부터 그것의 관련된 제1 레벨 스택(514)으로 복구하고, 이용된 제2 레벨 스택(518)은 공유 풀에서 이용 가능하게 된다. 추가적인 자원들이 이용 가능하게 될 때 태스크 Tc(502)는 제2 레벨 스택(506)을 사용하는 실행 상태(504)에서 재개된다
본 개시의 일 실시 예에 따르면, 제2 레벨 공유 풀 스택과 관련된 전제 조건들은 아래와 같다.
1. 실행 상태에서 작동하도록 예정된 어떠한 태스크는 이용 가능한 제2 레벨 스택들 중에 어느 하나를 사용할 수 있다. 스택 사용 한계는 시스템 내의 모든 태스크들에서 상이하고, 실행 시나리오들에 대해서 달라진다. 그러므로 모든 N 스택들을 위한 공유 풀 스택(제2 레벨 스택) 크기는 시스템에서 가장 큰 스택을 요구하는 특정 시나리오를 실행하도록 특정 태스크에 필요한 스택 크기로 유지된다.
2. 공유 풀 내의 스택들의 개수 (N)는 약간의 편차로 시스템에서 측정될 수 있는 가능한 대기 태스크들 (즉, 선점된 태스크들)의 최대 개수에 의해 결정될 수 있다. 대기 태스크들의 개수가 N보다 큰 경우 (불의의 시나리오 등에 의해), 스택은 더미로부터 동적으로 생성될 수 있다. 그러나 스택이 더미로부터 동적으로 생성되는 경우는 예외적인 경우이며, 시스템에서의 대기 태스크들의 가능한 개수는 다소의 편차로 측정될 수 있다.
도 6은 본 개시의 일 실시 예에 따른 태스크 상태들을 도시하는 개략도이다.
도 6을 참조하면, 상이한 태스크 상태들 동안에 스케줄러(미도시)에 의해 수행되는 동작들은 다음과 같이 요약될 수 있다. 실행 상태(604)에서, 스택은 제2 레벨 스택(604B)에서 발생한다. 대기 상태(606)에서, 태스크가 선점될 때, 제2 레벨 스택이 선점된 태스크를 위해 예약된다. 보류 상태(602)에서, 태스크는 대기/보류 상태에 있고, 관련된 제1 레벨 스택(602B)을 사용한다. 태스크가 실행 상태(604)에 있으며, 자체적으로 포기할 때, 참조부호 604A로 나타내는 바와 같이, 스택 포인터는 그것의 관련된 제1 레벨 스택으로부터 복구되고, 제2 레벨 스택이 공유 풀에서 이용 가능하게 된다. 태스크가 보류 상태(602)에 있고 참조부호 602A로 나타내는 바와 같이 예정될 때, 스택 포인터는 그것의 관련된 제1 레벨 스택으로부터 제2 레벨 스택(공유 풀로부터의 다음의 이용 가능한 스택)으로 복구된다.
태스크가 실행 상태(604)에 있을 때, 그 실행 상태는 실행 시간을 소진하므로 실행 상태가 중단되고 태스크는 대기 상태로 옮겨진다(604C). 태스크가 대기 상태(606)에 있을 때, 태스크가 대기 상태로 이동함과 동시에 속행(dispatch)이 일어날 수 있고 태스크는 실행 상태로 즉각적인 전환을 하게 된다(606B). 대기 상태(606)는 실행 상태(604)만 될 수 있으며, 이것은 태스크 스케줄러가 현재 실행중인 태스크를 교환(swap out)해야 할 때 일어난다.
도 7은 본 개시의 일 실시 예에 따른 스택 재사용 수법을 위한 스케줄러 제어를 제공하는 방법을 도시하는 흐름도이다.
도 7을 참조하면, 태스크들은 제1 스택 레벨과 제2 스택 레벨을 포함하는 2-레벨 스택 방식으로 생성된다. 제1 스택 레벨은 각 태스크 단위로 제공되고, 태스크의 콘텍스트 프레임을 보유하도록 적응될 수 있다. 제2 스택 레벨은 태스크 스택들의 풀이며, 이러한 태스크 스택들 중의 하나는 실행 상태에서 태스크에 할당될 것이다.
단계 702에서, 실행될 제1 태스크는 스택 포인터를 제1 레벨 스택으로부터 제2 레벨 스택으로 이동시켜서 태스크 스케줄러에 의해 스케줄링될 수 있다. 단계 704에서, 제1 태스크가 이전에 선점되었는지 판단된다. 제1 태스크가 이전에 선점된 경우, 단계 706에서, 제1 태스크를 위한 신규의 제2 레벨 스택이 실행 상태에서 할당되어 태스크 콘텐트를 저장한다. 제1 레벨 스택은 보류 상태에서 제1 태스크와 관련된 콘텍스트 데이터를 보유하도록 구성된다.
단계 708에서 보류 상태에 있는 제1 태스크가 실행되도록 예정될 때, 스택 포인터는 제1 레벨 스택으로부터 제2 레벨 스택으로 이동되고, 그 후 단계 710에서, 제1 태스크가 실행되도록 예정된다.
단계 704에서 제1 태스크가 선점된 것으로 판단된 경우, 제2 레벨 스택이 이전에 제1 태스크에 할당된 것으로 가정하여, 단계 712에서 제1 태스크는 실행되도록 예정된다.
단계 714에서, 스케줄러는 활성 제1 태스크를 변경하고 제2 태스크의 실행을 위해 예정하도록 결정한다. 단계 716에서, 제1 태스크가 제어를 포기하고 있는지를 판단한다. 단계 716에서 제1 태스크가 제어를 포기하고 있다고 판단되는 경우, 단계 718에서 제1 태스크가 추가적인 자원을 대기 중인지 판단한다.
단계 716에서 제1 태스크가 제어를 포기하고 있지 않다고 판단되고 단계 718에서 제1 태스크가 추가적인 자원을 대기 중이라고 판단되는 경우, 단계 720에서 제1 태스크를 위한 제2 레벨 스택이 해제되지 않는다. 단계 718에서 제1 태스크가 추가적인 자원을 대기 중이지 않다고 판단되는 경우, 단계 722에서 스택 포인터는 제2 레벨 스택으로부터 제1 레벨 스택으로 반대로 이동된다. 또한, 단계 724에서, 제1 태스크를 위한 제2 레벨 스택이 해제로 표시된다. 제1 태스크를 위한 제2 레벨 스택이 해제되었는지에 상관없이, 스케줄러는 제2 태스크를 실행하도록 예정한다.
도 8은 본 개시의 일 실시 예에 따른 스택 재사용 수법을 위한 스케줄러 제어를 제공하는 방법을 도시하는 흐름도이다.
도 8을 참조하면, 단계 802에서, 태스크 스케줄러는 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링한다. 단계 804에서, 태스크 콘텐트를 저장하도록, 신규의 제2 레벨 스택이 실행 상태에서 제1 태스크에 할당된다. 제1 레벨 스택은 보류 상태에서 제1 태스크와 관련된 콘텍스트 데이터를 보유하도록 구성된다. 단계 806에서 보류 상태에 있는 제1 태스크가 실행되도록 예정될 때, 스택 포인터는 제1 레벨 스택으로부터 제2 레벨 스택으로 이동되고, 그 후 단계 808에서, 제1 태스크가 실행되도록 예정된다.
단계 810에서, 스케줄러는 활성 제1 태스크를 변경하도록 결정하고, 제2 태스크를 실행하도록 예정한다. 단계 812에서, 제1 태스크가 제어를 포기하고 있는지를 판단한다. 단계 812에서 제1 태스크가 제어를 포기하고 있다고 판단되고 단계 814에서 제1 태스크가 추가적인 자원을 대기 중이지 않다고 판단되는 경우, 단계 818에서 제1 태스크를 위한 제2 레벨 스택은 해제로 표시될 수 있다. 단계 818에서 제1 태스크를 위한 제2 레벨 스택이 해제로 표시되기 전에, 단계 816에서 태스크 콘텍스트 (즉, 제2 레벨 스택 콘텐츠)는 각각의 관련된 제1 레벨 스택으로 복사된다.
단계 812에서 제1 태스크가 제어를 포기하지 않았다고 판단되고 단계 814에서 제1 태스크가 추가적인 자원을 대기 중이라고 판단되는 경우, 단계 820에서 모든 레지스터를 위한 제2 레벨 스택이 스캐닝되고, 제2 레벨 스택 주소 범위에서 어떠한 매칭되는 값들에 대해 콘텍스트 보관 중에 저장되어야 하는 것을 넣어서 기록한다. 단계 822에서, 제2 레벨 스택 주소 범위 내에 어떠한 레지스터가 있는지 판단한다. 단계 822에서 스택 주소 범위 내에 어떠한 레지스터가 있다고 판단되는 경우, 단계 824에서 제2 레벨 스택 사용량이 제1 레벨 스택의 크기보다 작은지 판단한다.
제2 레벨 스택 사용량이 제1 레벨 스택의 크기보다 작은 경우, 단계 816에서 제2 레벨 스택 콘텐츠 (태스크 콘텍스트 포함)는 각각의 관련된 제1 레벨 스택으로 복사된다. 제2 레벨 스택 사용량이 적어도 제1 레벨 스택의 크기와 동일한 경우, 단계 826에서 태스크를 위한 신규의 제1 레벨 스택이 할당되고, 제2 레벨 스택 콘텐츠 (태스크 콘텍스트 포함)가 그 신규의 제1 레벨 스택에 복사되고, 제1 태스크를 위한 제2 레벨 스택이 해제로 표시된다.
단계 822에서, 스택 주소의 범위 내에 어떠한 레지스터가 있는지 판단한다. 단계 822에서 스택 주소의 범위 내에 어떠한 레지스터가 있다고 판단되는 경우, 단계 828에서 레지스터들 1,…. N 각각에 대한 오프셋 주소 및 변환 플래그를 저장한다. 또한, 단계 830에서 하나 이상의 레지스터들이 검사된다. 단계 832에서, 레지스터 콘텐트가 주소 또는 값인지를 판단하고, 중앙처리장치 (CPU: Central Processing Unit) 파이프라인과 실행된 인스트럭션 히스토리로부터 피드백을 받는다. 단계 834에서 레지스터 콘텐트가 주소라고 판단되는 경우, 단계 836에서 스택의 시작으로부터의 주소 오프셋과 레지스터를 위한 이동 요구 플래그 (translation required flag)가 저장된다.
본 명세서에서 설명된 특정 실시 예들은 스택 크기를 상당히 감소시키고, 더미 섹션을 증가시키는데 사용되는 ZI (zero initialized) 영역을 증가시키고, 멀티-스레드 선점형 커널 (multi-threaded preemptive kernel)들을 지원하고, 적은 메모리 관리로 인해 비용을 감소시킨다. ZI 영역은 더미 섹션이나 스택의 섹션이다. 이때 0이 예비의 메모리 안에 저장될 수 있다. 또한, 0은 들어오는 데이터에 대응하는 데이터 값으로 교체될 수 있다.
본 개시의 일 실시 예에 따르면, 태스크 Tc가 스케줄링될 준비가 될 때마다, 모든 레지스터들이 스캔되고, 제2 레벨 스택 영역의 주소들을 보유하는 레지스터들이 CPU 파이프라인에서 명령어들로 분석되고 실제로 데이터의 주소를 보유할 수 있다. 제2 레벨 스택이 스택 주소를 포함하고 있다고 판단되는 경우, 태스크가 장래의 스케줄링에서 신규의 제2 레벨 스택 메모리 영역에 재배치될 때, 스택 주소는 신규의 스택 영역으로 이동될 필요가 있다.
또한, 전체의 제2 레벨 스택은 현재 콜(call) 스택에서 추가적인 레지스터 푸시를 위해 스캔되어야 하며, 이는 제2 레벨 스택도 스택 주소를 포함할 수 있고 이동이 필요하기 때문이다. 그러나 이러한 이동은 CPU에서의 명령어들의 실행 히스토리에 대한 추가적인 정보를 필요로 한다.
그러한 추가적인 정보를 획득하는 방법으로는 그 레지스터에 대해 스택 시작으로부터의 오프셋과 그 레지스터의 이동-요구 플래그를 저장하는 방법이 있다. 또한, 이러한 정보는 스택 상에 동일한 레지스터의 백업으로 중복 기록되어 공간을 절약할 수 있다.
스케줄링 동안에, 저장된 정보는 복호화될 것이며, 레지스터는 신규 주소로 신규의 제2 레벨 스택 영역으로 복구된다.
도 9는 본 개시의 일 실시 예에 따른 실시간 운영체제의 다양한 기능적 구성요소들을 예시한 컴퓨팅 환경을 도시한 블록도이다.
도 9의 블록도를 참조하면, 컴퓨팅 환경은 사용자 인터페이스 계층(902), 애플리케이션 프로그램 계층(904), RTOS 시스템(906) 및 기본 장치 하드웨어(914)를 포함한다.
RTOS 시스템(906)은 태스크 생성기(908), 태스크 스케줄러(910), 및 태스크 동기화기(912)를 포함한다. 태스크 생성기(908)는 두 레벨 스택 방식을 이용하여 복수의 태스크들을 생성하도록 되어 있다. 태스크 스케줄러(910)는 스택 포인터를 제1레벨 스택에서 제2레벨 스택으로 이동하고, 제1 태스크가 선점되는지를 판단한다. 상기 제1 태스크가 선점되지 않는 경우, 제2 상태의 제1 태스크에 제2 레벨 스택을 할당하고, 태스크 스케줄러를 통해 제1 태스크가 제2 상태로부터의 제어를 포기하고 자원을 대기하는 중인지를 판단하여, 실행할 제1 태스크를 스케줄링하도록 되어 있다. 태스크 동기화기(912)는 제1 태스크가 자신을 포기하고, 제2 태스크에 의한 사용을 위해 제2 레벨 스택을 제공하는 경우, 제2 레벨 스택에서 제1 레벨 스택으로 스택 포인터를 다시 이동하도록 되어 있다.
본 명세서는 다양한 상황에서의 "어떤", "하나의" 또는 "일부의" 실시 예(들)에 관한 것일 수 있다. 이러한 어법은 그러한 각각의 참조가 본 개시의 동일한 실시 예(들)에 관한 것이거나 또는 그 특징이 단지 본 개시의 단일한 실시 예에 적용되는 것을 반드시 의미하는 것은 아니다. 또한, 상이한 실시 예들의 각각의 특징들이 조합되어 본 개시의 다른 실시 예들을 제공할 수도 있다.
본 명세서에서 사용된 바와 같이, 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 의미하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하는 것은 아니다. 어떤 구성요소가 다른 구성요소에 "연결" 또는 "결합"된다고 할 때, 그러한 구성요소는 그 다른 구성요소에 직접적으로 연결 또는 결합될 수 있거나, 그 중간에 다른 구성요소들이 개재될 수도 있다. 또한, 본 명세서에서 사용된 바와 같이 "연결" 또는 "결합"된 구성요소들은 실질적으로 연결 또는 결합된 구성요소들을 포함할 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "및/또는"은 해당 열거된 항목들 중 어느 하나 및 하나 이상의 모든 조합들 및 배열들을 포함한다.
달리 정의되지 않는 한, 본 명세서에서 사용된 모든 용어들(기술 및 과학적인 용어들을 포함함)은 본 개시가 속하는 기술 분야에서 통상의 지식을 가진자에 의해 일반적으로 이해되는 바와 같이 일반적으로 이해되는 의미들을 가진다. 또한, 일반적으로 사용되는 사전들에서 정의된 바와 같은 용어들은 관련된 기술 분야에서의 의미와 부합되는 의미가 있는 것으로 해석되어야 하며, 본 명세서에서 명백히 그렇게 정의되지 않는 한 이상적이거나 과도하게 형식적인 의미로 해석되어서는 안 될 것이다.
이상에서 본 개시가 특정 실시 예들을 참조하여 설명되었으나, 첨부된 특허청구범위 및 그 균등물에 의해 정의되는 바와 같이, 본 개시의 더 넓은 사상 및 범위에서 벗어남이 없이 다양한 변형들이 이러한 실시예들에서 이루어질 수 있다.

Claims (19)

  1. 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서 메모리 관리를 제공하는 방법에 있어서,
    태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크들을 생성하는 단계;
    태스크 스케줄러가 스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하는 단계;
    상기 제1 태스크가 선점되었는지를 판단하는 단계;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계;
    상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계;
    상기 제1 태스크가 그 자체를 포기하는 경우, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키는 단계; 및
    상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공하는 단계를 포함하는 메모리 관리 제공방법.
  2. 제1항에 있어서, 상기 제1 태스크를 스케줄링하는 단계는,
    상기 제1 태스크가 선점된 경우, 상기 제2 레벨 스택이 이전에 상기 제1 태스크에 할당되었는지를 판단하는 단계; 및
    상기 제1 태스크를 실행하도록 스케줄링하는 단계를 포함함을 특징으로 하는 메모리 관리 제공방법.
  3. 제1항에 있어서,
    상기 제1 레벨 스택이 제1 상태에서 상기 제1 태스크와 관련된 콘텍스트 데이터를 보유하도록 구성됨을 특징으로 하는 메모리 관리 제공방법.
  4. 제1항에 있어서,
    상기 제2 레벨 스택이 다수의 스택을 포함하되,
    상기 제1 태스크가 제1 상태에서 상기 제2 상태로 이동할 때, 상기 다수의 스택 중의 적어도 하나의 스택이 태스크 콘텐트를 저장하도록 제공됨을 특징으로 하는 메모리 관리 제공방법.
  5. 제1항에 있어서,
    상기 제1 태스크와 관련된 제1 상태가 보류 상태임을 특징으로 하는 메모리 관리 제공방법.
  6. 제1항에 있어서,
    상기 제1 태스크와 관련된 상기 제2 상태가 실행 상태임을 특징으로 하는 메모리 관리 제공방법.
  7. 제1항에 있어서,
    상기 제1 레벨 스택의 크기가 보류 상태에서 상기 제1 태스크의 콘텐트를 저장하는 데 필요한 스택 메모리와 동등함을 특징으로 하는 메모리 관리 제공방법.
  8. 제1항에 있어서,
    상기 제2 레벨 스택의 크기가 상기 RTOS 기반 시스템에서 가장 큰 스택을 요구하는 시나리오를 실행하도록 태스크에 필요한 스택에 에 의해 결정됨을 특징으로 하는 메모리 관리 제공방법.
  9. 제1항에 있어서,
    상기 제2 레벨 스택에서의 스택들의 개수가 선점된 태스크들의 최대 개수에 기반하여 결정됨을 특징으로 하는 메모리 관리 제공방법.
  10. 제1항에 있어서,
    상기 제1 태스크가 하나의 상태로부터 다른 상태로 이동되기 전에 상기 스택 포인터가 상기 제2 레벨 스택으로 이동됨을 특징으로 하는 메모리 관리 제공방법.
  11. 제1항에 있어서,
    실행을 위해 선점된 태스크들의 개수가 미리 정의된 개수보다 크면, 상기 태스크 스케줄러가 상기 제2 레벨 스택에서 적어도 하나의 스택을 생성하는 단계를 더 포함함을 특징으로 하는 메모리 관리 제공방법.
  12. 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서 메모리 관리를 제공하는 방법에 있어서,
    태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계;
    태스크 스케줄러가 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하는 단계;
    상기 제1 태스크가 선점되었는지를 판단하는 단계;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계;
    상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계;
    상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기 중이이면, 상기 제2 레벨 스택을 스캐닝하는 단계;
    레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하는 단계;
    레지스터들이 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하는 단계; 및
    상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시키는 단계를 포함하는 메모리 관리 제공방법.
  13. 제12항에 있어서,
    상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 크면, 신규의 제1 레벨 스택을 상기 제1 태스크에 할당하는 단계;
    상기 태스크 콘텐츠 상기 제2 레벨 스택으로부터 상기 신규의 제1 레벨 스택으로 복사하는 단계; 및
    상기 제1 태스크를 위한 상기 제2 레벨 스택을 해제로 표시하는 단계를 더 포함하는 메모리 관리 제공방법.
  14. 제12항에 있어서,
    상기 제2 레벨 스택의 상기 스택 주소 범위 내의 스택 주소를 가지는 레지스터들이 존재하면, 적어도 하나의 레지스터를 검사하는 단계;
    레지스터 콘텐트가 주소 또는 값인지를 판단하는 단계; 및
    상기 레지스터 콘텐트가 주소이면, 상기 스택의 시작으로부터의 주소 오프셋과 상기 레지스터를 위한 이동 요구 플래그를 저장하는 단계를 더 포함하는 메모리 관리 제공방법.
  15. 명령어들이 내장된 비일시적 컴퓨터 판독 가능 매체에 있어서,
    컴퓨터 프로세서에서 실행될 때 상기 명령어들이 실시간 운영 체제 (RTOS: Real-Time Operating System) 기반 시스템에서의 메모리 관리를 제공하는 방법을 수행하며,
    상기 방법이,
    제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계;
    스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하는 단계;
    상기 제1 태스크가 선점되었는지를 판단하는 단계;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계;
    활성 태스크를 실행하도록 변경하는 단계;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계;
    상시 제1 태스크가 그 자체를 포기하고 다른 자원을 대기하는 중이면, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키는 단계; 및
    상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공하는 단계를 포함하는 비일시적 컴퓨터 판독 가능 매체.
  16. 명령어들이 내장된 비일시적 컴퓨터 판독 가능 매체에 있어서,
    컴퓨터 프로세서에서 실행될 때 상기 명령어들이 실시간 운영 체제(RTOS: Real-Time Operating System) 기반 시스템에서의 메모리 관리를 제공하는 방법을 수행하며,
    상기 방법이,
    태스크 발생기가 제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 단계;
    태스크 스케줄러가 제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하는 단계;
    상기 제1 태스크가 선점되었는지를 판단하는 단계;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하는 단계;
    상기 태스크 스케줄러가 활성 태스크를 실행하도록 변경하는 단계;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하는 단계;
    상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기하는 중이면, 상기 제2 레벨 스택을 스캐닝하는 단계;
    레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하는 단계;
    레지스터가 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하는 단계; 및
    상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시키는 단계를 포함하는 비일시적 컴퓨터 판독 가능 매체.
  17. 제1 태스크와 제2 태스크를 포함하는 다수의 태스크를 수행하는 컴퓨터 프로세서를 위한 실시간 운영 체제 (RTOS: Real-Time Operating System)을 실행하는 컴퓨터 프로세서 및 메모리에 있어서,
    상기 RTOS가,
    제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 태스크 발생기; 및
    태스크 스케줄러를 포함하고,
    상기 태스크 스케줄러가,
    스택 포인터를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 제1 태스크를 실행하도록 스케줄링하고;
    상기 제1 태스크가 선점되었는지를 판단하고;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하고;
    활성 태스크를 실행하도록 변경하고;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하고;
    상시 제1 태스크가 그 자체를 포기하고 다른 자원을 대기하는 중이면, 상기 스택 포인터를 상기 제2 레벨 스택으로부터 상기 제1 레벨 스택으로 반대로 이동시키고;
    상기 제2 레벨 스택을 제2 태스크가 사용하도록 제공하는 컴퓨터 프로세서 및 메모리.
  18. 제1 태스크와 제2 태스크를 포함하는 다수의 태스크를 수행하는 컴퓨터 프로세서를 위한 실시간 운영 체제 (RTOS: Real-Time Operating System)을 실행하는 컴퓨터 프로세서 및 메모리에 있어서,
    상기 RTOS가,
    제1 레벨 스택 및 제2 레벨 스택을 포함하는 2-레벨 스택 방식으로 다수의 태스크를 생성하는 태스크 발생기; 및
    태스크 스케줄러를 포함하고,
    상기 태스크 스케줄러가,
    제1 태스크와 관련된 태스크 콘텐츠를 상기 제1 레벨 스택으로부터 상기 제2 레벨 스택으로 이동시켜서 상기 제1 태스크를 실행하도록 스케줄링하고;
    상기 제1 태스크가 선점되었는지를 판단하고;
    상기 제1 태스크가 선점되지 않으면, 제2 상태에서 상기 제2 레벨 스택을 상기 제1 태스크에 할당하고;
    활성 태스크를 실행하도록 변경하고;
    상기 제1 태스크가 상기 제2 상태로부터 제어를 포기하고 자원을 대기 중인지를 판단하고;
    상기 제1 태스크가 제2 상태부터 그 자체를 포기하고 상기 자원을 대기하는 중이면, 상기 제2 레벨 스택을 스캐닝하고;
    레지스터가 상기 제2 레벨 스택의 스택 주소들의 범위 내에 존재하는지를 판단하고;
    레지스터들이 상기 제2 레벨 스택의 상기 스택 주소들의 범위 내에 존재하지 않으면, 상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 작은지를 판단하고;
    상기 태스크 콘텐츠를 상기 제2 레벨 스택으로부터 대응하는 제1 레벨 스택으로 이동시키는 컴퓨터 프로세서 및 메모리.
  19. 제18항에 있어서,
    상기 태스크 스케줄러가,
    상기 제2 레벨 스택의 사용량이 상기 제1 레벨 스택의 크기보다 크면, 신규의 제1 레벨 스택을 상기 제1 태스크에 할당하고,
    상기 태스크 콘텐츠 상기 제2 레벨 스택으로부터 상기 신규의 제1 레벨 스택으로 복사하고,
    상기 제2 레벨 스택의 상기 스택 주소 범위 내의 스택 주소를 가지는 레지스터들이 존재하면, 적어도 하나의 레지스터를 검사하고,
    레지스터 콘텐트가 주소 또는 값인지를 판단하고,
    상기 레지스터 콘텐트가 주소이면, 상기 스택의 시작으로부터의 주소 오프셋과 상기 레지스터를 위한 이동 요구 플래그를 저장하는 컴퓨터 프로세서 및 메모리.
KR1020150046445A 2014-04-01 2015-04-01 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 KR102338849B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201461973629P 2014-04-01 2014-04-01
US61/973,629 2014-04-01
KR1020150021030 2015-02-11
KR20150021030 2015-02-11

Publications (2)

Publication Number Publication Date
KR20150114444A true KR20150114444A (ko) 2015-10-12
KR102338849B1 KR102338849B1 (ko) 2021-12-14

Family

ID=54190505

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150046445A KR102338849B1 (ko) 2014-04-01 2015-04-01 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템

Country Status (2)

Country Link
US (2) US9529625B2 (ko)
KR (1) KR102338849B1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6771272B2 (ja) * 2015-07-01 2020-10-21 日立オートモティブシステムズ株式会社 車載電子制御装置及びスタック使用方法
KR102079499B1 (ko) * 2015-10-20 2020-02-21 엘에스산전 주식회사 Plc 위치 결정 시스템의 축별 제어주기 독립 할당 방법
US10366013B2 (en) * 2016-01-15 2019-07-30 Futurewei Technologies, Inc. Caching structure for nested preemption
CN111104062B (zh) * 2019-11-22 2023-05-02 中科寒武纪科技股份有限公司 存储管理方法、装置和存储介质
CN111538574B (zh) * 2020-03-27 2024-03-12 北京达佳互联信息技术有限公司 任务堆栈的管理方法、装置、终端及存储介质
CN112783652B (zh) * 2021-01-25 2024-03-12 珠海亿智电子科技有限公司 当前任务的运行状态获取方法、装置、设备及存储介质
CN114116204B (zh) * 2021-11-02 2023-03-31 郑州市中心医院 一种基于传感器的磨牙症监测方法及系统
CN114327917A (zh) * 2022-03-11 2022-04-12 武汉深之度科技有限公司 内存管理方法、计算设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040055003A1 (en) * 2002-09-18 2004-03-18 Anand Sundaram Uniprocessor operating system design facilitating fast context swtiching
WO2006055864A2 (en) * 2004-11-16 2006-05-26 Softwave Wireless, Llc Method and apparatus for implementing task management of computer operations
KR20110052902A (ko) * 2009-11-13 2011-05-19 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템의 메모리 관리 방법
KR20130114023A (ko) * 2013-08-23 2013-10-16 삼성전자주식회사 멀티 프로세서 시스템 온 칩에서의 메모리 관리 방법

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5949973A (en) 1997-07-25 1999-09-07 Memco Software, Ltd. Method of relocating the stack in a computer system for preventing overrate by an exploit program

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040055003A1 (en) * 2002-09-18 2004-03-18 Anand Sundaram Uniprocessor operating system design facilitating fast context swtiching
WO2006055864A2 (en) * 2004-11-16 2006-05-26 Softwave Wireless, Llc Method and apparatus for implementing task management of computer operations
KR20110052902A (ko) * 2009-11-13 2011-05-19 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템의 메모리 관리 방법
KR20130114023A (ko) * 2013-08-23 2013-10-16 삼성전자주식회사 멀티 프로세서 시스템 온 칩에서의 메모리 관리 방법

Also Published As

Publication number Publication date
US10248456B2 (en) 2019-04-02
US20150277977A1 (en) 2015-10-01
US9529625B2 (en) 2016-12-27
US20170090981A1 (en) 2017-03-30
KR102338849B1 (ko) 2021-12-14

Similar Documents

Publication Publication Date Title
KR102338849B1 (ko) 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템
JP5367816B2 (ja) オペレーションの保護モードスケジューリング
EP2652615B1 (en) Graphics compute process scheduling
US8963933B2 (en) Method for urgency-based preemption of a process
CN110431806B (zh) 分布式资源管理中低时延节点本地调度的系统和方法
EP2652614B1 (en) Graphics processing dispatch from user mode
US20170076421A1 (en) Preemptive context switching of processes on an accelerated processing device (apd) based on time quanta
US20070204268A1 (en) Methods and systems for scheduling processes in a multi-core processor environment
EP2652613A1 (en) Accessibility of graphics processing compute resources
KR100791296B1 (ko) 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
RU2494446C2 (ru) Восстановление управления ресурсом обработки, который исполняет внешний контекст исполнения
US9122522B2 (en) Software mechanisms for managing task scheduling on an accelerated processing device (APD)
US20130141447A1 (en) Method and Apparatus for Accommodating Multiple, Concurrent Work Inputs
US10255104B2 (en) System call queue between visible and invisible computing devices
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US8424013B1 (en) Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt
US20130160019A1 (en) Method for Resuming an APD Wavefront in Which a Subset of Elements Have Faulted
CN108089919B (zh) 一种并发处理api请求的方法及系统
US10503557B2 (en) Method of processing OpenCL kernel and computing device therefor
KR100676671B1 (ko) 유저 쓰레드 관리 장치 및 그 방법
US8566829B1 (en) Cooperative multi-level scheduler for virtual engines
US20130155079A1 (en) Saving and Restoring Shader Context State
CN117149391A (zh) 线程管理方法、装置及电子设备

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