KR100870175B1 - 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법 - Google Patents

에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법 Download PDF

Info

Publication number
KR100870175B1
KR100870175B1 KR1020020008440A KR20020008440A KR100870175B1 KR 100870175 B1 KR100870175 B1 KR 100870175B1 KR 1020020008440 A KR1020020008440 A KR 1020020008440A KR 20020008440 A KR20020008440 A KR 20020008440A KR 100870175 B1 KR100870175 B1 KR 100870175B1
Authority
KR
South Korea
Prior art keywords
mode
user program
interrupt
register
registers
Prior art date
Application number
KR1020020008440A
Other languages
English (en)
Other versions
KR20030068809A (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 KR1020020008440A priority Critical patent/KR100870175B1/ko
Publication of KR20030068809A publication Critical patent/KR20030068809A/ko
Application granted granted Critical
Publication of KR100870175B1 publication Critical patent/KR100870175B1/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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/268Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명은 기억관리장치(MMU)가 없는 임베디드 시스템(embedded system)용 ARM7 계열 마이크로 컨트롤러(micro controller)에 적용되는 콘텍스트 스위치 방법에 관한 것이다.
이러한 콘텍스트 스위치 방법은, 사용자 프로그램 수행 중 타이머 인터럽트가 발생하면 인터럽트 매스킹 비트(interrupt masking bit)와 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정 상태로 진입하는 제 1 단계와; 타이머 인터럽트 모드 핸들러가 실행되면 타이머 인터럽트용 전용 스택공간에 현 인터럽트 모드에서 저장 가능한 사용자 프로그램 모드의 레지스터들을 저장하는 제 2 단계; 상기 사용자 프로그램 모드로 진입하고 상기 타이머 인터럽트용 전용 스택공간에 상기 사용자 프로그램 모드의 나머지 레지스터들을 저장하는 제 3 단계; 소프트웨어 인터럽트를 이용하여 상기 인터럽트 모드로 진입한 후 OS 루틴으로 점프하는 제 4 단계; OS 루틴의 처리가 종료하고, 복원할 사용자 프로그램의 레지스터들이 저장된 공간에 대한 정보가 입력되면, 상기 저장 공간에서 CPSR을 복원하여 사용자 프로그램 모드로 진입하는 제 5 단계; 상기 제 5 단계의 저장 공간에서 SPSR을 복원하는 제 6 단계; 상기 제 5 단계의 저장 공간에 대한 정보가 저장된 특정 범용 레지스터를 메모리에 임시 저장하고, 상기 특정 범용 레지스터를 이용하여 상기 특정 범용 레지스터와 프로그램 카운터(PC)를 제외한 나머지 레지스터들을 복원하는 제 7 단계; 상기 제 7 단계의 특정 범용 레지스터를 이용하여 프로그램 카운 터(PC)를 사용자 프로그램 스택에 저장하는 제 8 단계; 상기 제 7 단계에서 메모리에 임시 저장된 원래의 특정 범용 레지스터값을 이용하여 상기 특정 범용 레지스터를 복원하는 제 9 단계; 및 상기 제 8 단계의 사용자 프로그램 스택에 저장된 프로그램 카운터를 복원하면서 복원 대상 사용자 프로그램으로 점프하는 제 10 단계를 포함한 다.

Description

에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치 방법 { Method of context switch on ARM7 series }
도 1은 본 발명이 적용되는 마이크로 컨트롤러의 개략적인 구성도,
도 2는 본 발명의 한 실시예에 따른 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 저장 방법을 도시한 동작 흐름도,
도 3은 본 발명의 한 실시예에 따른 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 복원 방법을 도시한 동작 흐름도이다.
※ 도면의 주요 부분에 대한 부호의 설명 ※
10 : 마이크로 컨트롤러 20 : 메모리
본 발명은 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치(context switch) 방법에 관한 것으로서, 보다 상세하게 설명하면 기억관리장치(MMU : memory management unit)가 없는 임베디드 시스템(embedded system)용 마이크로 컨트롤러(micro controller)에 적용되는 콘텍스트 저장 및 복원하는 방법에 관한 것이다.
ARM7TDMI는 기억관리장치(MMU)가 없는 임베디드 시스템(embedded system)용 마이크로 컨트롤러(micro controller)이다. ARM7TDMI 기반의 임베디드 시스템에서 동작하는 소프트웨어(또는 Firmware)를 개발하는 데 있어서, 멀티-쓰레드(multi-thread) 환경은 중요한 역할을 한다. 멀티-쓰레드는 하나의 프로그램이 여러 개의 실행 단위로 나뉘어져 동시에 수행되는 것을 말하는데, 이는 임베디드 시스템이 어떠한 태스크를 계속 하면서 동시에 다른 곳으로부터 전해지는 메시지를 기다리는 것과 같은 유형의 작업에 주효하게 쓰일 수 있다. 그런데, 이러한 ARM7TDMI는 단일-쓰레드(single-thread)에 최적화되도록 설계되었기 때문에 멀티-쓰레드를 완벽하게 구현하는 데에는 구조적으로 많은 문제가 발생하게 된다.
현재 임베디드 시스템의 운영체계(OS : operating system)로 가장 주목받고 있는 것은 리눅스(LINUX)이지만, 일반적인 리눅스는 MMU가 없는 마이크로 컨트롤러에서는 동작하지 않기 때문에, ARM7TDMI와 같이 MMU가 없는 마이크로 컨트롤러의 임베디드 OS로는 리눅스 계열의 uClinux가 주로 이용된다. 이러한 uClinux 또한, 제한적인 멀티-태스킹(multi-tasking)만을 구현할 수 있을 뿐이다.
상술한 바와 같이, ARM7TDMI는 단일-쓰레드에 최적화되어 있으며, 축소 명령 집합 컴퓨터(RISC : reduced instruction set computer)이기 때문에, 작은 동작(operation)에도 많은 레지스터가 필요해서 모든 레지스터들을 저장/복원해야 하는 콘텍스트 스위치를 구현하는 데 어려움이 따른다. 특히, ARM7TDMI가 지원하는 뱅킹(banking) 구조는 콘텍스트 스위치를 더욱 더욱 어렵게 하는데, 뱅킹이란 특정 예외 상태(exception)가 발생했을 그에 해당하는 특정 모드로 진입하면서 일부 레지스터들이 모드 전용으로 대체되는 구조를 말한다. 즉, 이러한 뱅킹 구조에서는 콘텍스트 스위치를 구현하는데, 상대적으로 더 많은 주의가 요구된다.
그러나, 현재까지는 ARM7TDMI 또는 이와 유사한 기종의 마이크로 컨트롤러에 적용되어 멀티-쓰레드 환경을 구축하기 위한 콘텍스트 스위치 방법은 제안된 바가 없다.
상기한 종래 기술의 문제점을 해결하기 위한 본 발명의 목적은, ARM7TDMI 또는 이와 유사한 기종의 마이크로 컨트롤러에 적용되어 멀티-쓰레드 환경을 지원하기 위한 콘텍스트 스위치 방법을 제공하는 데 있다.
상기한 목적을 달성하기 위한 본 발명에 따른 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 저장 방법은, 인터럽트가 발생하면 동작 모드가 사용자 프로그램 모드에서 인터럽트 모드로 바뀌고 레지스터 뱅킹이 일어나며 상기 뱅킹(Banking)되는 레지스터(Register) 중에 스택 포인터가 포함되고, 시스템이 초기화될 때 모드별로 스택 포인터도 초기화되며 인터럽트가 발생할 때 바뀐 인터럽트 모드의 고유한 스택 포인터가 복원되는 ARM7 계열 마이크로 컨트롤러에서,
사용자 프로그램 수행 중 타이머 인터럽트가 발생하면 인터럽트 마스킹 비트(interrupt masking bit)와 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정 상태로 진입하는 제 1 단계와;
타이머 인터럽트 모드 핸들러가 실행되면 타이머 인터럽트용 전용 스택공간에 현 인터럽트 모드에서 저장 가능한 사용자 프로그램 모드의 레지스터들을 저장하는 제 2 단계;
상기 사용자 프로그램 모드로 진입하고 상기 타이머 인터럽트용 전용 스택공간에 상기 사용자 프로그램 모드의 나머지 레지스터들을 저장하는 제 3 단계; 및
소프트웨어 인터럽트를 이용하여 상기 인터럽트 모드로 진입한 후 OS 루틴으로 점프하는 제 4 단계를 포함한 것을 특징으로 한다.
또한, 본 발명에 따른 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 복원 방법은, 인터럽트가 발생하면 동작 모드가 사용자 프로그램 모드에서 인터럽트 모드로 바뀌고 레지스터 뱅킹이 일어나며 상기 뱅킹(Banking)되는 레지스터(Register) 중에 스택 포인터가 포함되고, 시스템이 초기화될 때 모드별로 스택 포인터도 초기화되며 인터럽트가 발생할 때 바뀐 인터럽트 모드의 고유한 스택 포인터가 복원되며, 모드를 지정하는 레지스터(CPSR)와 이전 상태의 모드를 백업하는 레지스터(SPSR)와 프로그램 카운터(PC)와 스택 포인터(SP)와 이전 상태의 프로그램 카운터를 백업하는 레지스터(LR) 및 여러 개의 범용 레지스터를 포함하고, RISC 구조로 분류되는 ARM7 계열 마이크로 컨트롤러에서,
OS 루틴의 처리가 종료하고, 복원할 사용자 프로그램의 레지스터들이 저장된 공간에 대한 정보가 입력되면, 상기 저장 공간에서 CPSR을 복원하여 사용자 프로그램 모드로 진입하는 제 1 단계와;
상기 저장 공간에서 SPSR을 복원하는 제 2 단계;
상기 저장 공간에 대한 정보가 저장된 특정 범용 레지스터를 메모리에 임시 저장하고, 상기 특정 범용 레지스터를 이용하여 상기 특정 범용 레지스터와 프로그램 카운터(PC)를 제외한 나머지 레지스터들을 복원하는 제 3 단계;
상기 특정 범용 레지스터를 이용하여 프로그램 카운터(PC)를 사용자 프로그램 스택에 저장하는 제 4 단계;
상기 메모리에 임시 저장된 원래의 특정 범용 레지스터값을 이용하여 상기 특정 범용 레지스터를 복원하는 제 5 단계; 및
상기 사용자 프로그램 스택에 저장된 프로그램 카운터를 복원하면서 복원 대상 사용자 프로그램으로 점프하는 제 6 단계를 포함한 것을 특징으로 한다.
또한, 본 발명에 따른 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치 방법은, 인터럽트가 발생하면 동작 모드가 사용자 프로그램 모드에서 인터럽트 모드로 바뀌고 레지스터 뱅킹이 일어나며 상기 뱅킹(Banking)되는 레지스터(Register) 중에 스택 포인터가 포함되고, 시스템이 초기화될 때 모드별로 스택 포인터도 초기화되며 인터럽트가 발생할 때 바뀐 인터럽트 모드의 고유한 스택 포인터가 복원되며, 모드를 지정하는 레지스터(CPSR)와 이전 상태의 모드를 백업하는 레지스터(SPSR)와 프로그램 카운터(PC)와 스택 포인터(SP)와 이전 상태의 프로그램 카운터를 백업하는 레지스터(LR) 및 여러 개의 범용 레지스터를 포함하고, RISC 구조로 분류되는 ARM7 계열 마이크로 컨트롤러에서,
사용자 프로그램 수행 중 타이머 인터럽트가 발생하면 인터럽트 마스킹 비트(interrupt masking bit)와 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정 상태로 진입하는 제 1 단계와;
타이머 인터럽트 모드 핸들러가 실행되면 타이머 인터럽트용 전용 스택공간에 현 인터럽트 모드에서 저장 가능한 사용자 프로그램 모드의 레지스터들을 저장하는 제 2 단계;
상기 사용자 프로그램 모드로 진입하고 상기 타이머 인터럽트용 전용 스택공간에 상기 사용자 프로그램 모드의 나머지 레지스터들을 저장하는 제 3 단계;
소프트웨어 인터럽트를 이용하여 상기 인터럽트 모드로 진입한 후 OS 루틴으로 점프하는 제 4 단계;
OS 루틴의 처리가 종료하고, 복원할 사용자 프로그램의 레지스터들이 저장된 공간에 대한 정보가 입력되면, 상기 저장 공간에서 CPSR을 복원하여 사용자 프로그램 모드로 진입하는 제 5 단계;
상기 제 5 단계의 저장 공간에서 SPSR을 복원하는 제 6 단계;
상기 제 5 단계의 저장 공간에 대한 정보가 저장된 특정 범용 레지스터를 메모리에 임시 저장하고, 상기 특정 범용 레지스터를 이용하여 상기 특정 범용 레지스터와 프로그램 카운터(PC)를 제외한 나머지 레지스터들을 복원하는 제 7 단계;
상기 제 7 단계의 특정 범용 레지스터를 이용하여 프로그램 카운터(PC)를 사 용자 프로그램 스택에 저장하는 제 8 단계;
상기 제 7 단계에서 메모리에 임시 저장된 원래의 특정 범용 레지스터값을 이용하여 상기 특정 범용 레지스터를 복원하는 제 9 단계; 및
상기 제 8 단계의 사용자 프로그램 스택에 저장된 프로그램 카운터를 복원하면서 복원 대상 사용자 프로그램으로 점프하는 제 10 단계를 포함한 것을 특징으로 한다.
이하에서는 본 발명의 한 실시예에 따른 "ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치 방법"을 보다 상세하게 설명하면 다음과 같다.
본 발명에 따른 콘텍스트 스위치 방법은 타이머 인터럽트가 발생할 때 콘텍스트를 저장(save)하는 방법과, 커널(kernel) 내부의 다른 쓰레드를 처리 후 저장된 콘텍스트를 복원(restore)하는 방법으로 이루어진다.
본 발명은 ARM7 계열 마이크로 컨트롤러(ARM7TDMI), 및 이와 유사한 마이크로 컨트롤러에 적용할 수 있는데, 본 발명에 따른 콘텍스트 저장 방법이 적용되는 마이크로 컨트롤러는 다음과 같은 특성을 갖는다. 첫째, 인터럽트(Interrupt) 또는 예외 상황(Exception)이 발생하면, 해당 마이크로 컨트롤러(Controller)는 동작 모드가 바뀌고 레지스터 뱅킹(Register banking)이 일어나서 사용자 프로그램의 일부 레지스터(Register)를 해당 모드에서는 접근할 수 없어야 한다. 둘째, 이때 뱅킹(Banking)되는 레지스터(Register) 중에 스택 포인터(Stack pointer)가 포함되 며, 시스템이 초기화 될 때 모드별로 스택 포인터(Stack pointer)도 초기화되고, 따라서 인터럽트 또는 예외 상황이 발생하였을 때 바뀐 동작 모드의 고유한 스택 포인터(Stack pointer)가 복원되면서 미리 지정한 스택 공간을 사용할 수 있어야 한다.
다음, 본 발명에 따른 콘텍스트 복원 방법이 적용되는 마이크로 프로세서의 특성은 다음과 같다. 첫째, 콘텍스트 저장 방법이 적용되는 마이크로 프로세서의 두 가지 특성을 모두 구비하여야 한다. 둘째, 모드를 지정하는 레지스터(CPSR : current program status register), 이전 상태의 모드를 백업하는 레지스터(SPSR : saved program status register), 프로그램 카운터(PC : program counter), 스택 포인터(SP : stack pointer), 이전 상태의 프로그램 카운터를 백업하는 레지스터(LR : link register), 및 여러 개의 범용 레지스터를 포함하여야 한다. 셋째, RISC 구조로 분류되어야 한다.
본 발명에서 사용하는 동작 모드명과, 레지스터 이름, 범용 레지스터의 개수나 크기는 본 발명의 권리 범위를 한정하지 않으며, 범용 레지스터 중 일부는 뱅킹되고 일부는 뱅킹되지 않으면 본 발명을 적용할 수 있다.
본 발명이 적용되는 ARM7TDMI와 같은 마이크로 컨트롤러(10)는 도 1에 도시된 바와 같이 각 모드별로 레지스터 뱅킹 구조를 구비한다. 이 사용자 프로그램 모드(11)의 경우 18개의 레지스터들을 구비한다. 이 중 16개(R0∼R15)는 범용 레지스터이고, 현재 동작 모드를 저장하는 CPSR 레지스터와 이전 동작 모드를 저장하는 SPSR 레지스터를 포함하여 모두 18개의 레지스터들로 이루어진다. 마이크로 컨 트롤러(10)는 외부 메모리(20)의 프로그램 영역으로부터 콘텍스트 저장 프로그램과 콘텍스트 복원 프로그램을 입력받아, 외부 메모리(20)의 데이터 영역에 접근하여 외부 메모리(20)에 레지스터 콘텍스트 값을 저장하거나 외부 메모리(20)로부터 복원할 레지스터 콘텍스트값을 읽어온다.
멀티-쓰레드 환경에서, 타이머 인터럽트(timer interrupt)가 발생하면 사용자 프로그램 모드에서 인터럽트 모드로 모드 전환된다. 이때, 타이머 인터럽트가 발생할 때 전환되는 인터럽트 모드로는 FIQ(fast interrupt request) 모드, 또는 IRQ(interrupt request) 모드가 있으며, 이는 마이크로 컨트롤러의 종류에 따라 다르다. FIQ 모드(12)는 R0∼R7을 제외한 나머지 레지스터(R8∼R15, CPSR, SPSR)를 뱅킹시키고, IRQ 모드(13)는 R0∼R12를 제외한 나머지 레지스터(R13, R14, R15, CPSR, SPSR)를 뱅킹시킨다. 본 발명의 실시예에서는 타이머 인터럽트가 발생하면 FIQ 모드로 모드 전환되는 것을 예로 들어 설명한다. FIQ 모드에서는 사용자 프로그램 모드의 R0∼R7 범용 레지스터로의 접근은 가능하나, R8∼R15 범용 레지스터, CPSR 레지스터, 및 SPSR 레지스터로의 접근은 불가능하다. 즉, 사용자 프로그램 모드의 콘텍스트 중 10개의 레지스터에는 접근할 수 없게 된다.
본 발명에서는 타이머 인터럽트가 발생하여 FIQ 핸들러가 호출되어 FIQ 모드로 모드 전환되면, 도 2에 도시된 바와 같은 사용자 프로그램 모드의 콘텍스트를 저장 방법을 실행하여 사용자 프로그램 모드의 콘텍스트를 저장한다.
일반적인 인터럽트는 인터럽트 핸들러에서 시작해서 해당 인터럽트 핸들러로 다시 되돌아온다. 그러나, 타이머 인터럽트는 FIR 핸들러에서 멀티-쓰레드 대상인 다른 사용자 프로그램으로 스위치되기 때문에 타이머 인터럽트(TI)용 전용 스택(stack)을 사용하고, 타이머 인터럽트 핸들러를 수행할 때마다 스택 포인터(SP)를 타이머 인터럽트용 전용 스택의 위치로 이동시켜야 한다. 본 명세서에서 스택이란 별도의 언급이 없는 한, 타이머 인터럽트용 전용 스택을 의미한다.
먼저, 인터럽트가 발생하면(S201), 발생한 인터럽트가 타이머 인터럽트 발생 여부를 판단하고(S202), 타이머 인터럽트이면 인터럽트 마스킹 비트(interrupt masking bit)와, 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정적인 상태로 들어간다(S203). 인터럽트 마스킹 비트가 세팅되면 인터럽트 발생이 디세이브(disable)되며, 인터럽트 펜딩 비트가 세팅되면 현재 발생된 인터럽트 중 실행되지 않은 인터럽트가 무효화된다. 이러한 조작에 사용되는 범용 레지스터로는 뱅킹된 범용 레지스터(R8∼R12) 중 하나를 사용한다.
타이머 인터럽트가 발생하면 FIR 핸들러가 수행되는데, 이때 마이크로 컨트롤러는 스택 포인터를 타이머 인터럽트용 전용 스택으로 위치 이동시키고(S204), 접근 가능한 레지스터(사용자 프로그램 모드의 R15(PC), CPSR, R0∼R7)를 우선적으로 저장한다(S205). 단계 S205를 수행함에 있어서, 데이터를 미리 정해진 구조에 따라 정해진 위치에 저장하고, 데이터를 꺼낼 때도 미리 정해진 구조에 따라 꺼내는데, 이 정해진 구조를 OS 루틴에서 사용될 구조체의 구조에 맞춰서 스택의 탑 포인터(Top pointer)를 구조체 포인터로 넘길 수 있도록 하고, 단계 S205 수행 중에 필요한 범용 레지스터는 FIQ 모드의 R8∼R12 레지스터 중 하나를 사용한다. 단계 S205의 수행 과정을 상세하게 설명하면, FIQ 모드의 R14(LR)는 사용자 프로그램 모 드의 R15(PC)와 관련있고, FIQ 모드의 SPSR은 사용자 프로그램 모드의 CPSR에 해당하는데, 단계 S205에서는 이러한 특성을 이용한다. 즉, FIQ 모드의 R14(LR)를 스택의 R15 저장 위치에 저장하고, FIQ 모드의 SPSR을 스택의 CPSR 저장 위치에 저장한다. 또한, FIQ 모드에서도 접근 가능한 사용자 프로그램 모드의 범용 레지스터인 R0∼R7을 저장한다.
다음, FIQ 모드의 CPSR 레지스터를 스택에 일시 저장하고, 사용자 프로그램 모드로 진입한다(S206). 이 단계 S206 수행에 사용되는 범용 레지스터는 R0∼R7을 사용한다. 범용 레지스터 R0∼R7의 콘텍스트는 단계 S205에서 스택에 복사되었기 때문에 단계 S206부터는 범용 레지스터 R0∼R7을 사용할 수 있다. 단계 S206은 FIQ 모드의 SPSR의 내용을 CPSR로 복사함으로써, 수행된다.
다음, 사용자 프로그램 모드에서만 접근할 수 있는 나머지 레지스터들의 콘텍스트를 저장한다(S207). 즉, 단계 S207에서는 R14(LR), R13(SP), R8∼R12, SPSR 등 8개의 레지스터들의 콘텍스트를 스택에 저장한다. 스택에 저장하는 위치는 미리 정해진 구조에 따르되, 이 단계 S207을 수행하는데 필요한 레지스터들은 범용 레지스터인 R0∼R7을 사용한다. 예를 들어, 스택에 대한 접근하기 위해 스택포인터 R13(SP)을 사용하지 않고 범용 레지스터인 R0∼R7을 사용한다. 이렇게 함으로써, 사용자 프로그램 모드의 모든 레지스터 콘텍스트가 보존된다.
다음, FIQ 모드로 되돌아간다(S208). 먼저 소프트웨어 인터럽트(SWI : software interrupt)를 사용하여 SVC 모드로 진입한다. 이때, SWI 핸들러는 특정 파라메터를 넘겼을 때 SVC 모드로 진입한 후 리턴하는 내용을 포함한다. 이 상태 에서 스택의 특정 위치에 임시 저장했던 FIQ 모드의 CPSR 레지스터를 복원하여 본래의 상태로 회복시켜 FIQ 모드로 진입한다.
상술한 단계들을 통해 레지스터 콘텍스트 저장 작업이 끝나면 OS 루틴으로 점프한다(S209). 이러기 위해 먼저 현재까지 레지스터 콘텍스트를 저장한 스택의 탑 포인터(Top pointer)를 OS 루틴의 파라메터로 넘겨주는데, 예를 들어 마이크로 컨트롤러(ARM7TDMI)용 C 컴파일러가 R0을 첫 번째 파라메터로 취한다면 스택의 탑 포인터를 R0에 저장한다. 또한, OS 루틴이 움직일 스택 공간을 마련하기 위해 스택 포인터를 조정한다. 즉, 현재까지 레지스터 콘텍스트들을 저장한 스택공간 상단에 스택 포인터를 설정한다. 이 스택 포인터는 앞서 파라메터로 쓰인 탑 포인터-4 지점이 된다. 그리고 난 후에 OS 루틴으로 점프한다.
상기의 단계들을 통해 타이머 인터럽트가 발생한 후 OS 루틴으로 점프하기 전까지 사용자 프로그램 모드의 모든 레지스터 콘텍스트를 저장할 수 있다.
다음, 도 3의 동작 흐름도를 참조하며 콘텍스트 복원 방법을 설명하면 다음과 같다. OS 루틴에서 스케줄링을 비롯한 모든 OS 루틴을 처리한 후 다음에 실행될 쓰레드를 돌려주어야 하고, 이때 콘텍스트 복원이 필요하다. 여기서는 OS 루틴이 어셈블리 루틴을 호출할 때, 앞서 레지스터 콘텍스트를 저장한 메모리 공간의 탑(Top) 위치를 사용자 프로그램 모드의 R0 레지스터에 저장하는 것으로 가정한다.
먼저, 메모리 공간에 저장된 사용자 프로그램 모드의 CPSR을 복원하여 사용자 프로그램 모드로 진입한다. 동시에 SPSR도 함께 복원한다(S301).
다음, 레지스터 R0에 저장된 값(복원할 레지스터 콘텍스트를 저장한 메모리 공간의 탑 위치값)을 별도의 메모리 공간에 복사한다(S302). 다음, R0에 저장된 값을 스택 포인터 삼아서 R1∼R14를 복원하고(S303), R15(PC)는 스택에 임시 저장한다(S304). 이때, R15를 임시 저장하는 공간은 콘텍스트가 복원된 공간(R1∼R14) 중 하나를 이용한다.
다음, 사용자 프로그램 모드의 R0을 복원하는데(S305), 단계 S302에서 별도의 메모리 공간에 복사된 R0에 저장된 값(즉, 복원 레지스터 콘텍스트를 저장한 메모리 공간의 탑 위치값)을 R0에 다시 가져오고, 자기 자신을 주소로 삼아 메모리에 접근하여 R0을 복원한다. 이와 같이 R0이 자기 자신을 주소로 삼는 것은 본 발명에서와 같이 R0에 레지스터 콘텍스트를 저장한 메모리 공간의 탑 위치값을 저장한 경우에만 적용할 수 있으며, R0에 탑 위치값이 저장되지 않은 경우에는 R0값에 특정 상수값을 더하여 사용자 프로그램 모드의 R0이 저장된 위치를 가리키도록 할 수 있다.
다음, R15(PC)를 복원하는데 R15(PC)가 복원되면 사용자 프로그램 모드로 점프하기 때문에, 그 전에 타이머 인터럽트가 발생했을 때 세팅되었던 인터럽트 마스킹 비트를 조작하여, 추후 인터럽트가 발생할 수 있도록 해야 한다. 이를 위해, 먼저 인터럽트 마스킹 비트를 조작하는 데 필요한 범용 레지스터 2개를 사용자 프로그램 스택에 푸쉬(push)한다(S306). 그리고 2개의 범용 레지스터를 이용하여 인터럽트 마스킹 비트를 조작하는데(S307), 하나의 범용 레지스터에는 조작할 인터럽트 마스킹 비트의 위치가 저장되고 다른 하나의 범용 레지스터에는 그 값이 저장된 다.
이렇게 인터럽트 마스킹 비트가 조작되면, 사용자 프로그램 스택에는 인터럽트 마스킹 비트 조작에 사용된 2개의 범용 레지스터와 R15(PC)가 저장되게 되는데, 이 사용자 프로그램 스택으로부터 LDMFD와 같은 멀티 트랜스퍼(multi transfer) 명령을 이용하여 이 2개의 범용 레지스터와 R15(PC)를 복원하면서 사용자 프로그램 모드로 점프한다(S308).
이상 기술한 타이머 인터럽트 발생시, 콘텍스트 저장 및 복원 과정에서 사용하는 타이머 인터럽트(TI)용 전용 스택은 콘텍스트를 저장하는 공간과, OS 루틴에 필요한 프로그램 스택 공간으로서의 역할을 한다. 이러한 타이머 인터럽트용 전용 스택의 구조는 최대한 최적화(Optimize)되어야 하는데, 이 타이머 인터럽트용 전용 스택의 구조의 일 예는 표 1과 같다.
TI-스택 (Top) 80 temp 76 temp 72 R0 ... 44 R7 40 R8 ... 24 R12 20 SP 16 LR 12 PC 8 CPSR 4 SPSR TI-스택 (Bottom)
표 1의 타이머 인터럽트용 전용 스택 구조에서, 76 위치의 temp는 콘텍스트 저장 방법의 단계 S206에서 CPSR을 일시 저장하고 단계 S209에서 OS 루틴으로 점프하기 전에 스택 포인터를 위치0시킨다. 또한, 80 위치의 temp는 콘텍스트 저장 방법의 단계 SS208에서 FIQ 모드로 되돌아갈 때 SWI 핸들러가 사용한다.
위의 타이머 인터럽트용 전용 스택의 구조는 하나의 예시에 불과하며 각 레지스터의 저장 위치는 변경 가능하다. 또한, 타이머 인터럽트용 전용 스택을 콘텍스트를 저장 공간과 프로그램 스택 공간이 분리될 수도 있다.
위에서 양호한 실시예에 근거하여 본 발명을 설명하였지만, 이러한 실시예는 본 발명을 제한하려는 것이 아니라 예시하려는 것이다. 본 발명이 속하는 분야의 숙련자에게는 본 발명의 기술사상을 벗어남이 없이 위 실시예에 대한 다양한 변화나 변경 또는 조절이 가능함이 자명할 것이다. 그러므로, 본 발명의 보호범위는 첨부된 청구범위에 의해서만 한정될 것이며, 위와 같은 변화예나 변경예 또는 조절예를 모두 포함하는 것으로 해석되어야 할 것이다.
이상과 같이 본 발명에 의하면, MMU가 없는 임베디드 시스템용 마이크로 컨트롤러(ARM7TDMI 또는 그와 유사한 기종)에서, 멀티-쓰레드 환경을 지원할 수 있는 효과가 있다.

Claims (6)

  1. ARM7 계열 마이크로 컨트롤러에서의 멀티 쓰레드를 위한 콘텍스트 저장 방법에 있어서,
    사용자 프로그램 수행 중 타이머 인터럽트가 발생하면 인터럽트 마스킹 비트(interrupt masking bit)와 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정 상태로 진입하는 제 1 단계와;
    타이머 인터럽트 모드 핸들러가 실행되면 인터럽트 모드의 레지스터 중 이전 상태의 모드를 백업하는 레지스터를 상기 사용자 프로그램 모드의 현재 상태의 모드를 백업하는 레지스터로서 저장하고, 상기 인터럽트 모드의 레지스터 중 이전 상태의 프로그램 카운터를 백업하는 레지스터를 상기 사용자 프로그램 모드의 현재 상태의 프로그램 카운터로서 저장하여, 타이머 인터럽트용 전용 스택공간에 현 인터럽트 모드에서 저장 가능한 사용자 프로그램 모드의 레지스터들을 저장하는 제 2 단계;
    상기 사용자 프로그램 모드로 진입하고 상기 타이머 인터럽트용 전용 스택공간에 상기 사용자 프로그램 모드의 나머지 레지스터들을 저장하는 제 3 단계; 및
    소프트웨어 인터럽트를 이용하여 상기 인터럽트 모드로 진입한 후 OS 루틴으로 점프하는 제 4 단계를 포함한 것을 특징으로 하는 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 저장 방법.
  2. 삭제
  3. 제 1 항에 있어서, 상기 타이머 인터럽트용 전용 스택은 콘텍스트를 저장하는 공간과, OS 루틴에 필요한 프로그램 스택 공간을 포함하는 것을 특징으로 하는 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 저장 방법.
  4. ARM7 계열 마이크로 컨트롤러에서의 멀티 쓰레드를 위한 콘텍스트 복원 방법에 있어서,
    OS 루틴의 처리가 종료하고, 복원할 사용자 프로그램의 레지스터들이 저장된 공간에 대한 정보가 입력되면, 상기 저장 공간에서 CPSR을 복원하여 사용자 프로그램 모드로 진입하는 제 1 단계와;
    상기 저장 공간에서 SPSR을 복원하는 제 2 단계;
    상기 저장 공간에 대한 정보가 저장된 특정 범용 레지스터를 메모리에 임시 저장하고, 상기 특정 범용 레지스터를 이용하여 상기 특정 범용 레지스터와 프로그램 카운터(PC)를 제외한 나머지 레지스터들을 복원하는 제 3 단계;
    상기 특정 범용 레지스터를 이용하여 프로그램 카운터(PC)를 사용자 프로그램 스택에 저장하는 제 4 단계;
    상기 메모리에 임시 저장된 원래의 특정 범용 레지스터값을 이용하여 상기 특정 범용 레지스터를 복원하는 제 5 단계; 및
    상기 사용자 프로그램 스택에 저장된 프로그램 카운터를 복원하면서 복원 대상 사용자 프로그램으로 점프하는 제 6 단계를 포함한 것을 특징으로 하는 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 복원 방법.
  5. 제 4 항에 있어서, 상기 제 5 단계 후 인터럽트 마스킹 비트를 리셋하고 상 기 제 6 단계를 수행하는 것을 특징으로 하는 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 복원 방법.
  6. 인터럽트가 발생하면 동작 모드가 사용자 프로그램 모드에서 인터럽트 모드로 바뀌고 레지스터 뱅킹이 일어나며 상기 뱅킹(Banking)되는 레지스터(Register) 중에 스택 포인터가 포함되고, 시스템이 초기화될 때 모드별로 스택 포인터도 초기화되며 인터럽트가 발생할 때 바뀐 인터럽트 모드의 고유한 스택 포인터가 복원되며, 모드를 지정하는 레지스터(CPSR)와 이전 상태의 모드를 백업하는 레지스터(SPSR)와 프로그램 카운터(PC)와 스택 포인터(SP)와 이전 상태의 프로그램 카운터를 백업하는 레지스터(LR) 및 여러 개의 범용 레지스터를 포함하고, RISC 구조로 분류되는 ARM7 계열 마이크로 컨트롤러에서의 멀티 쓰레드를 위한 콘텍스트 스위치 방법에 있어서,
    사용자 프로그램 수행 중 타이머 인터럽트가 발생하면 인터럽트 마스킹 비트(interrupt masking bit)와 인터럽트 펜딩 비트(interrupt pending bit)를 세팅하여 안정 상태로 진입하는 제 1 단계와;
    타이머 인터럽트 모드 핸들러가 실행되면 타이머 인터럽트용 전용 스택공간에 현 인터럽트 모드에서 저장 가능한 사용자 프로그램 모드의 레지스터들을 저장하는 제 2 단계;
    상기 사용자 프로그램 모드로 진입하고 상기 타이머 인터럽트용 전용 스택공 간에 상기 사용자 프로그램 모드의 나머지 레지스터들을 저장하는 제 3 단계;
    소프트웨어 인터럽트를 이용하여 상기 인터럽트 모드로 진입한 후 OS 루틴으로 점프하는 제 4 단계;
    OS 루틴의 처리가 종료하고, 복원할 사용자 프로그램의 레지스터들이 저장된 공간에 대한 정보가 입력되면, 상기 저장 공간에서 CPSR을 복원하여 사용자 프로그램 모드로 진입하는 제 5 단계;
    상기 제 5 단계의 저장 공간에서 SPSR을 복원하는 제 6 단계;
    상기 제 5 단계의 저장 공간에 대한 정보가 저장된 특정 범용 레지스터를 메모리에 임시 저장하고, 상기 특정 범용 레지스터를 이용하여 상기 특정 범용 레지스터와 프로그램 카운터(PC)를 제외한 나머지 레지스터들을 복원하는 제 7 단계;
    상기 제 7 단계의 특정 범용 레지스터를 이용하여 프로그램 카운터(PC)를 사용자 프로그램 스택에 저장하는 제 8 단계;
    상기 제 7 단계에서 메모리에 임시 저장된 원래의 특정 범용 레지스터값을 이용하여 상기 특정 범용 레지스터를 복원하는 제 9 단계; 및
    상기 제 8 단계의 사용자 프로그램 스택에 저장된 프로그램 카운터를 복원하면서 복원 대상 사용자 프로그램으로 점프하는 제 10 단계를 포함한 것을 특징으로 하는 ARM7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치 방법.
KR1020020008440A 2002-02-18 2002-02-18 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법 KR100870175B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020020008440A KR100870175B1 (ko) 2002-02-18 2002-02-18 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020020008440A KR100870175B1 (ko) 2002-02-18 2002-02-18 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법

Publications (2)

Publication Number Publication Date
KR20030068809A KR20030068809A (ko) 2003-08-25
KR100870175B1 true KR100870175B1 (ko) 2008-11-25

Family

ID=32221644

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020008440A KR100870175B1 (ko) 2002-02-18 2002-02-18 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법

Country Status (1)

Country Link
KR (1) KR100870175B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7768518B2 (en) * 2006-09-27 2010-08-03 Intel Corporation Enabling multiple instruction stream/multiple data stream extensions on microprocessors

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970002657A (ko) * 1995-06-29 1997-01-28 구자홍 에이알엠(arm) 씨피유(cpu)용 디램(dram)제어장치
KR20010007120A (ko) * 1999-05-25 2001-01-26 사와다 아끼라 인터럽트 처리 방법, os 지원 시스템, 정보 처리 장치및 기록 매체
KR20010027669A (ko) * 1999-09-15 2001-04-06 윤종용 Arm7t 프로세서를 이용한 마이크로 프로세서에서 명령어 모드에 따른 캐쉬 메모리의 라인 사이즈 제어 방법 및 그 장치
US20020016880A1 (en) * 2000-06-29 2002-02-07 Robin Bhagat Interrupt controller with preamble execution and disable control bit

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970002657A (ko) * 1995-06-29 1997-01-28 구자홍 에이알엠(arm) 씨피유(cpu)용 디램(dram)제어장치
KR20010007120A (ko) * 1999-05-25 2001-01-26 사와다 아끼라 인터럽트 처리 방법, os 지원 시스템, 정보 처리 장치및 기록 매체
KR20010027669A (ko) * 1999-09-15 2001-04-06 윤종용 Arm7t 프로세서를 이용한 마이크로 프로세서에서 명령어 모드에 따른 캐쉬 메모리의 라인 사이즈 제어 방법 및 그 장치
US20020016880A1 (en) * 2000-06-29 2002-02-07 Robin Bhagat Interrupt controller with preamble execution and disable control bit

Also Published As

Publication number Publication date
KR20030068809A (ko) 2003-08-25

Similar Documents

Publication Publication Date Title
US9727343B2 (en) Apparatus and method for handling exception events
CN107851036B (zh) 具有高级操作系统支持的处理器
JP5655677B2 (ja) ハイパーバイザ置き換え方法および情報処理装置
US7937700B1 (en) System, processor, and method for incremental state save/restore on world switch in a virtual machine environment
US9311088B2 (en) Apparatus and method for mapping architectural registers to physical registers
US6666383B2 (en) Selective access to multiple registers having a common name
US7412590B2 (en) Information processing apparatus and context switching method
EP2428892A2 (en) Structured exception handling for application-managed thread units
CN107735791B (zh) 安全模式状态的数据访问追踪
JPH10198469A (ja) コンピュータシステムおよびそのシステムにおけるハイバネーション制御方法
JP2974577B2 (ja) コンピュータシステム
CN112199681A (zh) 基于多编码模式cpu的代码注入型攻击防护方法及装置
EP1811375B1 (en) Processor
JP4837247B2 (ja) プロセッサ
CN115858020B (zh) 中断处理方法、装置、设备及处理器
KR100870175B1 (ko) 에이알엠7 계열 마이크로 컨트롤러에서의 콘텍스트 스위치방법
US20110107328A1 (en) Virtual machine device and methods thereof
TWI574152B (zh) 具有上下文切換之微控制器
JP2005275703A (ja) プロセッサ及びコンテキスト切り替え方法
US11704127B2 (en) Marking current context data to control a context-data-dependent processing operation to save current or default context data to a data location
JP2562838B2 (ja) プロセッサ及びストアバッファ制御方法
JPH0554141B2 (ko)
JPS62151942A (ja) タスク切換え方式
JPH01118932A (ja) 情報処理装置
Abdelrazek Exception and interrupt handling in arm

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
LAPS Lapse due to unpaid annual fee