KR20140123546A - 도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지 - Google Patents

도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지 Download PDF

Info

Publication number
KR20140123546A
KR20140123546A KR1020147023456A KR20147023456A KR20140123546A KR 20140123546 A KR20140123546 A KR 20140123546A KR 1020147023456 A KR1020147023456 A KR 1020147023456A KR 20147023456 A KR20147023456 A KR 20147023456A KR 20140123546 A KR20140123546 A KR 20140123546A
Authority
KR
South Korea
Prior art keywords
stack
secure
data processing
data
area
Prior art date
Application number
KR1020147023456A
Other languages
English (en)
Other versions
KR102069522B1 (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 KR20140123546A publication Critical patent/KR20140123546A/ko
Application granted granted Critical
Publication of KR102069522B1 publication Critical patent/KR102069522B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6245Protecting personal data, e.g. for financial or medical purposes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2105Dual mode as a secondary aspect
    • 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
    • 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
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자; 복수의 레지스터; 및 데이터를 저장하되, 안전한 레벨이 서로 다른 복수의 영역으로 이루어진 데이터 스토어를 구비하고, 그 영역은, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함한 데이터 처리장치. 상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함한다. 상기 데이터 처리 회로소자는, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하고; 상기 데이터 처리 회로소자는, 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하도록 구성된다. 실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 데이터 처리 회로소자는, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 영역의 상기 스택에 액세스하도록 구성된다.

Description

도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지{MAINTAINING SECURE DATA ISOLATED FROM NON-SECURE ACCESS WHEN SWITCHING BETWEEN DOMAINS}
본 기술분야는 데이터 처리 분야에 관한 것으로, 특히 민감한 데이터와 코드의 처리에 관한 것이다.
다수의 데이터 처리 시스템과 아키텍처에서는, 민감한 데이터와 코드의 부분을 비인증된 사람이나 프로세스에 의한 액세스로부터 분리하여 보호하는 방식들을 제공한다. 안전성을 제공할 수 있는 것이 중요하지만, 이러한 보호에 관련된 성능 및 회로면적에 있어서 부담이다.
마이크로콘트롤러와 같은 소형 시스템에서는, 이들 부담이 낮게 유지되는 것이 매우 중요하기 때문에, 안전성의 수준과 성능간에 일부 절충을 할 필요도 있다.
영국 캠브릿지의 ARM®에서는, 안전(secure) 및 불안전(non-secure) 상태가 있고, 그 상태 사이에서 예외 명령어를 사용하여 천이하는 트러스트존(Trustzone) 아키텍처를 갖는, 데이터와 코드를 안전하게 유지하는 일 방식을 제공하고, 예외 핸들러는 안전한 측의 안전성을 보호한다. 이러한 접근방법이 고도의 안전성을 제공하지만, 소프트웨어 예외 핸들러 형태의 상당한 소프트웨어 개입은, 시스템의 성능을 저하시키고, 또한 모든 호출(call)이 예외 핸들러를 통해 대리가 되어야 하므로 상기 안전한 소프트웨어를 위한 외부 애플리케이션 프로그램 인터페이스 API를 개발하는데 필요한 많은 노력을 증가시키는 안전한 상태를 변경하는데 필요하다.
US7966466 및 US 2008/0250216에는, 데이터 스토어가 안전측과 불안전측을 갖고, 현재 실행중인 코드의 데이터 스토어내의 장소가 상기 프로세서가 동작중인 도메인과 그래서 액세스가 허용되게 하는 데이터를 판정하는, 대체의 안전 시스템이 개시되어 있다.
본 발명의 제1 국면에서 본 본 발명의 데이터 처리장치는, 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자; 복수의 레지스터; 및 데이터를 저장하되, 복수의 영역으로 이루어진 데이터 스토어를 구비하고, 각 영역은, 안전한 레벨을 갖고, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고; 상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고; 상기 데이터 처리 회로소자는, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하고; 상기 데이터 처리 회로소자는, 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드(load)할지를 판정하도록 구성되고; 실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 데이터 처리 회로소자는, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 영역의 상기 스택에 액세스하도록 구성된다.
본 발명에 의해 안 것은, 안전한 데이터와 안전한 코드에의 액세스가 제한되는 것이 중요하지만, 때로는 이 안전성이 저 지연의 저면적 방식으로 제공되는 것도 중요하다는 것이다.
메모리의 서로 다른 안전영역에서 서로 다른 스택의 사용은 처리중에 데이터를 저장하는 공지된 방식이다. 태스크와 도메인간에 전환시에, 이들 스택은, 상기 프로세서의 현재의 상태를 나중에 복원될 수 있도록 저장하는데 사용되는 경우도 있다. 일 도메인에서 처리되는 데이터와 코드를 타 도메인에서 처리중인 데이터와 코드로부터 분리하는 것은, 일 도메인에서의 프로그램이 타 도메인에서의 함수를 호출하고 함수 인수와 복귀값을 사용하여 그들 중 2개의 사이에서 전달하는 경우에 보다 복잡해진다. 안전한 도메인과 불안전한 도메인간의 전환시에, 도메인간의 어떠한 데이터의 전송도, 민감한 데이터가 불안전한 프로그램에 이용가능해지지 않도록 주의 깊게 제어될 필요가 있다. 본 발명에서는, 서로 다른 안전한 영역에 있는 스택들과 또 현재 실행중인 코드의 저장 장소로부터 현재의 안전한 레벨을 판정하는 능력도 이용함으로써, 안전한 영역에서 전환의 원인이 되는 함수 호출을 검출할 때, 그 함수의 인수들과 복귀값들에 대해 스택이 액세스되는 것을 제어하여, 그것들이 그 함수를 호출하였던 도메인과, 다른 데이터가 자신의 영역내에 유지되어 있는 동안에 상기 함수가 실행중인 도메인으로부터, 액세스될 수 있다.
이렇게 하여, 하드웨어를 거의 추가하지 않고, 전용 소프트웨어 핸들링 루틴이 없어, 서로 다른 안전한 도메인간에 전환될 수 있고, 또 그들간에 효율적으로 데이터가 전송될 수 있다.
덜 안전한 레벨의 스택이 함수 인수와 복귀 데이터 값을 저장하는데 사용될 수 있지만, 모든 함수 인수와 복귀 데이터 값이, 함수 호출 프로그램과 호출중인 함수 양쪽에 액세스 가능한 값들을 저장하는데 특정 레지스터가 이용 가능할 수도 있는 일부의 실시예에서는 상기 스택에 저장되어도 되는 것이 아니고, 이러한 경우에, 이들은 함수 인수와 복귀 데이터 값을 저장하는데 사용되어도 되고, 그것은 프로그램 코드와, 덜 안전한 레벨의 스택이 사용되는 함수 사이에서 보다 많은 값들이 전달될 필요가 있는 경우뿐이라는 것에 주목해야 한다.
함수를 호출하는 단계는, 코드의 2개의 섹션 사이에서 데이터 값이 전달될 필요가 있는 코드의 타 섹션으로 분기하는 프로그램 내의 코드의 일 섹션에 관한 것이다는 것에 주목해야 한다. 이것이 함수 호출 프로그램으로서 기술되어 있지만, 코드의 2개의 섹션간에 상당한 차이가 없을 수도 있고, 콜러(caller)를 프로그램으로 하고 콜리(callee)를 함수로 한다는 것을 알아야 한다. 따라서, 콜러는 특정한 태스크를 행하기 위해 보다 작은 함수를 호출하는 큰 프로그램이어도 되거나, 사이즈가 유사한 또 다른 프로그램으로 분기하는 프로그램이어도 되거나, 또는 또 다른 함수나 애플리케이션을 호출하는 함수이어도 된다.
일부의 실시예에서, 상기 데이터 처리장치는, 스택 선택 플래그를 저장하는 저장 장소; 및 플래그 설정 회로소자를 더 구비하고; 상기 데이터 스토어는 보다 안전한 영역과 덜 안전한 영역의 2개의 영역을 포함하고; 상기 플래그 설정 회로소자는, 보다 안전한 함수를 호출하는 덜 안전한 프로그램 코드에 응답하여 상기 스택 선택 플래그를 설정하도록 구성되고, 임의의 함수를 호출하는 안전한 프로그램 코드에 응답하고 덜 안전한 함수를 호출하는 덜 안전한 프로그램 코드에 응답하여 상기 스택 선택 플래그를 클리어하도록 구성된다.
상기 처리 회로소자에 어느 스택이 사용되어야 하는지를 가리키는 일 방식은, 프로그램 코드가 안전한 도메인간에 전환할 때 자동으로 설정되는 스택 선택 플래그를 이용하는 방식이다. 이것은, 특정한 순간에 하드웨어에 의해 제어되므로 안전하고 저 지연인 스택을 어느 스택을 사용할 것인지를, 상기 회로소자에 의해 판정할 수 있는 간단한 방식이다. 도메인이 2개인 경우에, 안전한 영역으로의 변경에 따라 함수가 호출될 때 하드웨어가 설정되거나 클리어될 수 있는, 단순한 1비트 플래그가 사용될 수 있다. 이에 관하여, 그 플래그의 설정은 1로 설정하는 것을 의미하거나, 0으로 설정하는 것을 의미하기도 하고, 이때 그 플래그를 클리어하는 것은 다른 값으로의 설정이다. 또한, 상기 플래그를 설정하는 하드웨어 회로소자는, 상기 처리 회로소자의 일부이어도 되거나, 데이터 처리장치의 어딘가에 분포되어도 되거나, 또는 일부의 데이터 액세스 제어 회로소자의 일부이어도 된다는 것에 주목해야 한다.
일부의 실시예에서, 상기 데이터 처리장치는, 스택 선택 플래그를 저장하는 저장 장소; 및 플래그 설정 회로소자를 더 구비하고; 상기 플래그 설정 회로소자는, 안전 레벨이 서로 다른 영역간에 천이하는 상기 데이터 처리 회로소자를 검출하는 것에 응답하여 하위 안전한 영역을 나타내고, 동일한 안전 레벨에 대한 함수 호출을 실행하는 상기 데이터 처리회로를 검출하는 것에 응답하여 현재의 안전한 영역을 나타내기 위해, 상기 스택 선택 플래그를 설정하도록 구성된다.
일부의 실시예에서, 상기 스택 선택 플래그는, 2개의 안전한 영역 사이에서 상기 처리 회로소자가 천이하고 있는 2개의 안전한 영역 중 하위의 안전한 영역을 나타낼 수도 있다. 서로 다른 안전 레벨이 2개보다 많은 경우, 플래그의 간단한 설정 및 클리어는 그 레벨을 구별하는데 충분하지 않고, 다수의 비트 값이 그 플래그에 대해 필요할 수도 있고, 이때 그 하드웨어는 영역들이 천이될 때 덜 안전한 영역을 나타낸다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 프로그램 코드에서 세트 스택 선택 플래그 명령어에 응답하여 상기 스택 선택 플래그를 덜 안전한 영역을 나타내는 값으로 설정하도록 구성되고, 덜 안전한 함수를 호출하는 상기 프로그램 코드는 상기 함수를 호출하기 전에 상기 프로그램 코드에서의 상기 세트 스택 선택 플래그 명령어를 포함한다.
회로소자가 상기 스택 선택 플래그를 설정하기 위해 도메인간의 천이에 자동으로 응답하였지만, 그 코드에 삽입된 소프트웨어 명령어에 의해서도 설정될 수 있다. 이것은, 상기 천이에 의해 상기 플래그 설정이 정확해질 수 있기에 충분하지 않은 일부의 경우에는 중요하기도 하다. 따라서, 예를 들면, 프로그램 코드가 덜 안전한 함수를 호출중인 경우에, 그 덜 안전한 코드에의 천이는, 서로 다른 안전한 영역이 2개만 있는 경우에 그 플래그를 클리어하거나, 2개보다 많은 경우에 하위의 영역을 나타내도록 설정한다. 그러나, 천이하기 전에, 상기 안전한 프로그램은, 함수 인수를 스택에 저장하는 것이 필요하므로, 상기 스택 선택 플래그가 덜 안전한 스택을 나타내도록 설정되지 않는다면, 그 덜 안전한 함수에서 사용할 인수는 액세스 불가능한 안전한 스택에 저장될 것이다.
일부의 실시예에서, 상기 데이터 처리장치는, 함수를 호출하는 상기 프로그램 코드에 응답하여, 상기 스택 선택 플래그로 나타낸 상기 스택이 상기 함수 인수와 상기 복귀값에 대해 액세스되도록, 상기 스택 선택 플래그에 따라 상기 함수 인수와 상기 복귀값에 대해 액세스하기 위한 상기 스택을 판정한다.
이전에 언급된 것처럼, 실행중인 상기 프로그램 코드의 저장 장소는, 일반적으로 어느 스택을 사용할지에 관한 좋은 표시다. 그러나, 서로 다른 안전 도메인에 있어서 함수가 호출중이면, 이 경우에, 2개의 도메인간에 데이터 값을 전달하는 경우에, 함수 호출과 프로그램 호출을 행하여서 액세스 가능한 스택이 사용될 필요가 있을 수도 있을 때, 어느 스택을 사용해야 하는지를 상기 스택 선택 플래그를 사용하여 판정할 수 있다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 스택에 적어도 하나의 장소로부터의 값이 적어도 하나의 레지스터에 로드해야하는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 로드 명령어에 응답하여, 현재의 처리 도메인의 상기 스택 선택 플래그와 상기 안전 레벨에 따라 어느 스택에 액세스할 것인지를 판정하도록 구성된다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 스택에 적어도 하나의 장소로부터의 값이 적어도 하나의 레지스터에 로드해야하는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 로드 명령어에 응답하여, 상기 스택 선택 플래그에 따라 어느 스택에 액세스할 것인지를 판정하도록 구성된다.
상기 정확한 스택이 선택되도록 스택으로부터의 값이 레지스터에 로드해야 할 경우 상기 스택 선택 플래그가 고려되어야 하는 것을 나타내는 전용 명령어를 갖는 것이 편리할 수도 있다. 이렇게 하여 이러한 새로운 명령어를 사용하여, 도메인간에 데이터를 전달할 수 있으면서 상기 시스템의 안전성을 유지할 수 있다. 상기 스택 선택 플래그는, 도메인을 나타내기에 충분하여도 되거나, 사용할 스택을 표시하는 상기 플래그와 현재 동작하는 도메인이어도 된다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 적어도 하나의 레지스터에 저장된 적어도 하나의 값이 스택의 적어도 하나의 장소에 저장되는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 저장 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그로부터 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하도록 구성된다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 적어도 하나의 레지스터에 저장된 적어도 하나의 값이 스택의 적어도 하나의 장소에 저장되는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 저장 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그와 현재 처리하는 도메인의 상기 안전 레벨로부터 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하도록 구성된다.
상기 스택 로드 명령어와 마찬가지로, 상기 스택 선택 플래그와 관련지어 사용되고 현재의 안전 도메인과 관련지어 사용되어, 서로 다른 안전 도메인에서 동작 가능한 함수가 프로그램으로부터 호출될 때 서로 다른 안전 도메인간에 데이터 값을 전송할 때 반드시 정확한 스택이 사용되도록 하는 스택 저장 명령어도 있다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 덜 안전한 영역에 있는 함수 코드와 상기 안전한 영역에 있는 상기 프로그램 코드에 응답하여, 복귀 어드레스를 상기 안전한 스택에 로드하고, 상기 링크 레지스터에, 상기 함수로부터의 상기 복귀 어드레스가 상기 안전한 스택에 로드되는 것을 나타내는 값을 로드하도록 구성된다.
보다 안전한 영역에서 덜 안전한 영역으로 천이하는 경우, 상기 복귀 어드레스는 불안전측에 대해 이용가능하지 않아야 한다. 상기 복귀 어드레스를 검색하기 위해 상기 안전한 스택이 액세스되어야 하는 것을 나타내기위해 상기 링크 레지스터를 사용하는 것은, 추가 하드웨어 비용이나 성능 문제가 최소인 프로그램 카운터의 안전성을 보호하는 간단한 방식이다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하는 레지스터를 지정하는 스택 선택 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 상기 안전한 영역이나 상기 덜 안전한 영역에 있는지를 판정하여, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 상기 스택 선택 플래그를, 상기 덜 안전한 영역을 나타내도록 설정하도록 구성된다.
상술한 것처럼, 상기 스택 설정 플래그는, 자동으로 설정되어도 되거나, 어떤 명령어에 응답하여 설정되어도 된다. 단순한 스택 플래그 설정 명령어뿐만 아니라, 실행 가능한 코드, 예를 들면 이후에 실행될 코드의 타겟 어드레스를 나타내는 이용가능한 스택 플래그 설정 명령어이어도 된다. 이것은, 동일한 도메인에서 호출된 함수가 실행될 것인지를 아닌지가 분명하지 않은 경우, 안전한 도메인에서 실행중인 그 호출된 실행중인 프로그램으로서 사용될 수 있다. 실제의 실행동안에, 이러한 명령어를 사용하는 것에 의해 그 호출된 코드의 타겟 어드레스가 검사될 수 있고, 그것을 호출하는 코드에 대해 서로 다른 안전한 영역에 있는 경우, 상기 스택 선택 플래그는 이것을 나타내기 위해 적절한 값으로 설정될 수 있다. 또한, 함수가 실행된 후 임의의 복귀값을 찾으려고 할 때, 실행되고 있던 코드의 어드레스는 필요한 정보를 제공할 것이다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하기 위한 레지스터를 지정하는 또 다른 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 상기 안전한 영역이나 상기 덜 안전한 영역에 있는지를 판정하여, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 상기 스택 선택 플래그와 또 다른 플래그를 설정하도록 구성된다.
동일한 조건에 응답하여 상기 스택 선택 플래그를 설정할 뿐만 아니라 또 다른 플래그도 설정하는 추가의 명령어도, 도움이 된다. 상기 프로세서가 특정한 이벤트에 조건적인 명령어를 사용하는 경우, 플래그들은, 이들 이벤트를 나타내도록 설정될 수 있다. 일부의 명령어는, 상기 스택 선택 플래그의 설정 여부에 따라 실행되어야 하고, 그렇다면, 이를 구현하는 간편한 방식이 상기 스택 선택 플래그와 또 다른 플래그 양쪽을 설정하는 명령어를 사용할 수 있고, 또 이러한 또 다른 플래그에 조건적인 명령어들이 사용될 수도 있다. 상기 사용될 수 있는 또 다른 플래그의 일 예시는, 제로 플래그다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 클리어 다중 레지스터 명령어에 응답하여, 상기 클리어 다중 레지스터 명령어에서 지정한 다중 레지스터에 저장된 값을 클리어하도록 구성된다.
상기 처리 회로소자에서 실행될 수 있는 클리어 다중 레지스터 명령어를 갖는 것이 바람직할 수도 있다. 상기 안전한 도메인에서 상기 안전한 코드 실행에 의해 상기 레지스터에 저장된 값들은, 상기 안전한 도메인에서 비안전한 도메인으로 전환할 때, 비안전한 도메인에 대해 이용가능하지 않아야 한다. 따라서, 이들 값을 클리어하는 간편한 방식은, 클리어 다중 레지스터 명령어를 간단히 실행하는 방식이어도 된다.
일부의 실시예에서, 상기 데이터 처리장치는, 상기 복수의 레지스터 중 어느 레지스터가 안전한 상태를 저장하기 위한 현재 실행중인 코드에서 사용하는데 이용 가능한지를 나타내는 값을 저장하는, 안전한 콘피규레이션 저장 장소를 포함하고, 상기 데이터 처리 회로소자는 보다 안전한 상태에서 덜 안전한 상태로의 천이시에 상기 안전한 콘피규레이션 값으로 나타낸 상기 복수의 레지스터를 클리어하도록 구성된다.
안전한 상태에서 덜 안전한 상태로의 전환시에, 상기 레지스터에 저장된 민감한 데이터는, 덜 안전한 측에 액세스 가능하지 않아야 하고, 이 때문에 상기 레지스터는 천이하기 전에 클리어되어야 한다. 일부의 경우에, 모든 레지스터를 사용하여 민감한 데이터를 저장하는 것이 아니고, 이는, 도메인의 안전 레벨과 실행중인 코드에 좌우되기도 한다. 그렇다면, 이 정보가 안전한 콘피규레이션 저장 장소에 저장된 이용가능하면, 상기 처리 회로소자가 덜 안전한 도메인으로의 전환시에 민감한 데이터를 저장할 수도 있는 상기 레지스터를 간단히 클리어할 수 있고 그 밖의 레지스터는 클리어될 필요가 없어서, 시간과 전력을 절약하는 것이 이롭다. 이에 관해서, 많은 경우에 있어서, 안전한 도메인에서 실행할 때 상기 레지스터를 클리어하기 전에, 상기 안전한 상태는 보관될 필요가 있고 그 경우에 상기 안전한 콘피규레이션 레지스터는 어느 레지스터에 이 상태가 저장되어 있는지와 그에 따라서 보관할 레지스터가 어느 레지스터인지를 판정하는데 사용된다는 것에 주목해야 한다. 레지스터로부터의 상태 저장은, 시간과 전력이 소요되어서, 임의의 주어진 시간에 클리어 및 보관하는 것이 필요한 수를 판정할 수 있다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 예외의 수신에 응답하여 일 세트의 상기 레지스터를 클리어하도록 구성된 예외 핸들링 회로소자를 구비하고, 상기 세트의 상기 레지스터내의 상기 레지스터는, 실행의 상기 도메인과 상기 예외를 둘 상기 도메인의 안전한 레벨에 좌우된다.
안전 도메인간에 천이하는 예외를 둘 때, 상기 처리 회로소자는, 상기 레지스터를 클리어할 필요도 있고, 또한 상태를 상기 스택에 저장할 필요도 있다. 클리어되고 저장 가능할 상태를 갖는 레지스터의 수는, 상기 프로세서가 작동중인 도메인과 그 예외의 도메인에 좌우될 것이다. 예를 들면, 덜 안전한 상태로의 천이시에, 민감한 데이터를 저장하는데 사용될 수도 있는 일 세트의 레지스터는, 그 데이터가 상기 덜 안전한 측에 이용 가능하지 않도록 클리어되어야 한다. 이에 관하여, 상기 세트의 레지스터는, 안전한 데이터를 저장하기 위해 현재 실행중인 코드에서 사용되어도 되는 레지스터다. 따라서, 그것은 레지스터 전부이어도 되거나, 그들 중 일부만이어도 되고, 이것은 안전한 콘피규레이션 값으로 나타낼 가능성이 있다.
일부의 실시예에서, 상기 예외 핸들링 회로소자는, 인터럽트가 상기 안전한 도메인에서 실행되고 또 다른 인터럽트가 이하의 우선순위를 갖고 상기 덜 안전한 도메인으로의 전환을 나타내어서, 상기 데이터 처리 회로소자는, 상기 인터럽트의 완료 후에 상기 또 다른 인터럽트를 취하도록 구성되고: 중단되었던 원래의 코드가 상기 안전한 도메인에 있었을 경우 상기 세트 및 상기 또 다른 레지스터가 상기 안전한 스택에 저장되어 클리어되도록 또 다른 레지스터에 저장된 상기 상태를 보관하도록 구성되고; 또 중단되었던 원래의 코드가 상기 불안전한 도메인에 있었을 경우 상기 세트의 레지스터를 클리어하도록 구성되는 경우와; 상기 인터럽트가 상기 안전한 도메인에서 실행되고, 상기 또 다른 인터럽트가 상기 덜 안전한 도메인에서 실행하는 것으로 전환하는 것을 나타내고 상기 인터럽트에 대해 이상의 우선순위를 갖고, 상기 또 다른 인터럽트가 상기 인터럽트의 완료 전에 취해지고 상기 세트 및 상기 또 다른 레지스터에 저장된 상태가 상기 안전한 스택에 보관되고 상기 세트 및 상기 또 다른 레지스터가 클리어되는 경우를 제외하고는, 상기 인터럽트가 완료되어 있기 전에 상기 또 다른 인터럽트의 수신에 응답하여, 또 다른 스택 저장 동작을 행하지 않도록 구성된다.
안전성이 다른 영역간에 데이터가 반드시 누설되지 않도록 주의할 필요가 있는 또 다른 상황은, 인터럽트가 수신될 때이다. 본 발명의 실시예는, 함수 호출에 응답하여 천이를 제어하는 방식과 마찬가지로 효율적이고 안전한 방식으로 인터럽트 처리를 제어하는데 사용될 수 있다. 이에 관하여, 일반적으로, 프로세서의 현재의 상태를 유지하는 일 세트의 레지스터는, 예외 후에 복원될 필요가 있고, 일반적으로 상기 예외를 둘 때 상기 스택에 저장되어야 한다. 그러나, 안전한 상태로부터 불안전한 상태로 진행하는 경우에, 민감한 데이터를 저장하는 레지스터 전부에 있는 값들은, 불안전한 측에 이용 가능하지 않아야 하고, 전부 상기 안전한 스택에 보관되어 클리어될 필요도 있다. 첫 번째 인터럽트가 완료하기 전에 또 다른 인터럽트가 도달하는 또 다른 문제가 생긴다. 또 다른 스택 저장 동작이 행해질 필요가 없을 수도 있지만, 또 다른 데이터 저장이 필요한 상황이 존재하기도 한다.
예를 들면, 상기 첫 번째 인터럽트가 안전한 도메인으로부터 취해지고 불안전 도메인에서 실행되고 또 다른 인터럽트가 하위 우선순위를 갖고 덜 안전한 도메인에 있을 경우, 첫 번째 인터럽트가 종료했을 때, 안전한 도메인에서 불안전한 도메인으로 변하고 있고, 그 시점에서, 민감한 데이터를 저장하지만 상기 스택에 일반적으로 저장된(따라서, 이미 저장되어 있던) 서브세트에는 저장하지 않는 레지스터 세트에 있는 레지스터는, 안전한 스택에 저장될 필요가 있다. 그리고, 상기 레지스터는, 또 다른 인터럽트가 실행되기 전에 데이터의 손실없이 안전하게 클리어될 수 있다.
다른 상황에서는, 첫 번째 인터럽트가 덜 안전한 도메인으로부터 취해지지만 안전한 도메인에서 실행될 것이다. 이것이 일어날 때, 안전성 문제가 없으므로 (콜러 보관 레지스터인) 서브세트의 레지스터만이 상기 스택에 저장된다. 그러나, 덜 안전한 도메인의 실행으로의 전환을 나타내는 또 다른 인터럽트가 도달하는 경우, 그 시점에서 주위해야 하는 안전한 도메인에서 덜 안전한 도메인으로 전환한다. 상기 또 다른 인터럽트의 우선순위가 첫 번째 인터럽트보다 높은 경우, 그 또 다른 인터럽트는 첫 번째 인터럽트의 완료전에 취해지고 상기 서브세트 레지스터와 상기 세트에서의 상기 또 다른 레지스터에 저장되는 상태는 안전한 스택에 보관되어야 하고, 그 레지스터는 클리어되어야 하고, 이것은, 첫 번째 인터럽트의 첫 번째 명령어가 실행되어 있다고 가정하고 있다. 그렇지 않은 경우, 상기 레지스터는 어떠한 안전한 데이터도 포함하지 않고 보관 또는 클리어될 필요가 없다. 그러나, 상기 또 다른 인터럽트가 하위의 우선순위를 갖는 경우, 그것은 첫 번째 인터럽트가 완료된 후 취해질 뿐이고, 이 시점에서 안전한 상태가, 더 이상 필요하지 않고, 보관될 필요가 없지만, 민감한 데이터를 저장할 수도 있는 상기 세트의 레지스터는, 클리어되어야 한다.
일부의 실시예에서, 상기 데이터 처리장치는, 상기 복수의 레지스터 중 어느 레지스터가 안전한 상태를 저장하기 위한 현재 실행중인 코드에서 사용하는데 이용 가능한지를 나타내는 값을 저장하는, 안전한 콘피규레이션 저장 장소를 포함하고, 상기 예외 핸들링 회로소자는, 상기 안전한 콘피규레이션 저장 장소에 저장된 상기 값으로부터 상기 레지스터의 상기 서브세트 및 상기 또 다른 레지스터를 판정한다.
상기 데이터 처리장치는 레지스터가 많이 있지만 안전한 상태를 저장하기 위해서 임의의 시간에 일부의 레지스터만이 사용되어도 된다. 이러한 경우에, 상기 레지스터 중 어느 레지스터가 안전한 상태를 저장하는데 사용될 것인지를 나타내는 안전한 콘피규레이션 저장 장소에 저장된 안전한 콘피규레이션 값을 갖는 것이 이로울 수도 있다. 이러한 경우에, 상기 세트의 레지스터는 이 값으로부터 판정될 수 있고, 이들만이 안전한 스택에 보관될 필요가 있고, 그 밖의 레지스터에는 그들의 값이 그대로 남겨질 수 있다. 마찬가지로, 이들 레지스터만이 클리어될 필요가 있다.
일부의 실시예에서, 상기 데이터 처리장치는, 예외 복귀 값을 저장하는 저장 장소를 포함하고, 상기 데이터 처리 회로소자는, 상기 데이터 처리장치가 상기 예외를 둘 때 작동중인 도메인을 나타내기 위해서 상기 예외 복귀 값을 설정하도록 구성되고, 상기 예외 핸들링 회로소자는 예외로부터의 복귀시에 상기 예외 복귀 값에 저장된 상기 값에 따라 상기 스택으로부터의 값들이 갱신되어야 할 레지스터가 어느 레지스터인지를 판정한다.
이렇게 하여 인터럽트를 핸들링하는 것은 하드웨어나 소프트웨어를 거의 추가할 필요가 없어도 되고 저 지연이지만, 그 예외를 두었던 도메인의 안전한 레벨에 관한 지식을 필요로 하기도 한다. 이것은, 레지스터를 갱신할 스택이 어느 스택인지와, 그 스택에 몇 개의 레지스터가 저장되었어야 할 것인지를 판정할 때, 중요하기도 하다. 특히, 상기 세트의 레지스터가 불안전한 상태에서 보여지지 않도록 상기 안전한 스택에 보관되어 있도록 초기의 상태가 안전한 상태이었을 경우, 이것은, 이들 레지스터 전부가 복원될 수 있도록 알려질 필요가 있다. 상기 스택에 상태가 보관된 레지스터의 수가 초기의 상태의 안전성과 상기 값들을 복원할 때 천이중인 상태의 안전성에 따라 달라지므로, 초기의 상태에 관한 정보는 알려질 필요도 있다.
일부의 실시예에서, 상기 데이터 스토어는, 민감도가 다른 데이터를 저장하는 복수의 계층적 안전 영역을 포함하고, 보다 높은 레벨의 안전한 영역에 저장된 데이터는 보다 낮은 레벨의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고;
상기 데이터 스토어는 상기 복수의 안전한 영역의 각각에 적어도 하나의 스택을 포함하고;
상기 스택 선택 플래그를 저장하는 상기 저장 장소는, 복수의 비트를 포함하고; 상기 데이터 처리 회로소자는 상기 스택 선택 플래그에 따라 함수 인수와 복귀 값에 대해 어느 스택에 액세스할 것인지를 판정하도록 구성된다.
일부의 실시예에서는 안전한 영역과 불안전 또는 덜 안전한 영역이 2개만 있어도 되었지만, 그 밖의 실시예에서는 복수의 서로 다른 계층적 안전한 레벨을 갖는 서로 다른 영역이 복수일 수 있다. 따라서, 가장 안전한 도메인에서 실행된 코드는, 모든 영역에 저장된 데이터에 액세스하고, 덜 안전한 도메인에서 실행중인 코드는 그 자신의 안전한 영역과 그 밖의 하위의 안전한 영역에 저장된 데이터에만 액세스한다. 이러한 계층적 안전영역이 있는 경우에, 상기 스택 선택 플래그는 액세스될 스택이 있는 실제의 안전한 영역을 나타내기 위해 다수의 비트를 포함할 필요도 있다. 이러한 경우에, 그 나타낸 영역은, 프로그램 코드와 함수 코드가 저장된 2개의 영역 중 보다 낮은 안전한 레벨이다. 이렇게 하여, 상기 플래그는 함수 인수와 복귀 값에 대해 액세스할 스택이 어느 스택인지를 나타낸다.
일부의 실시예에서, 상기 데이터 스토어는, 민감도가 다른 데이터를 저장하는 복수의 안전한 영역을 포함하고, 상기 영역 중 적어도 2개는 민감도가 같은 데이터를 저장하는 형제(sibling) 영역이고, 상기 형제 영역에 저장된 상기 데이터는 보다 높은 레벨의 안전한 도메인에 저장된 데이터에는 액세스 가능하지만 보다 낮은 레벨의 안전한 도메인이나 그 밖의 형제의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고; 상기 데이터 스토어는, 상기 안전한 영역 각각에서의 적어도 하나의 스택과, 상기 형제의 영역 중 어느 한쪽에 저장된 프로그램 코드에 액세스 가능한 또 다른 형제 스택을 포함하고; 상기 함수 코드가 또 다른 상기 형제 영역에 저장되는 함수를 호출하는 상기 형제 영역 중 하나에 저장된 프로그램 코드에 응답하여, 상기 데이터 처리 회로소자는, 상기 프로그램 코드와 상기 함수 코드를 실행할 때, 상기 함수에서 사용될 인수와 상기 또 다른 형제 스택에 상기 함수로부터 복귀될 데이터를 액세스하도록 구성된다.
계층적 안전한 레벨과 아울러, 같은 안전한 레벨을 갖지만 서로 액세스 가능하지 않는, 소위 형제의 안전한 레벨을 갖는 특정한 영역도 있다. 이것은, 서로 다른 제공자(provider)로부터의 코드가 다른 제공자도 그들의 코드에 액세스하기를 원하지 않는 경우에 이로울 수도 있다. 이러한 경우에, 상기 안전한 영역이 액세스될 수 있고, 또 상기 형제의 안전한 레벨 중 하나의 함수가 다른 형제의 안전한 레벨로부터 호출될 때 함수 인수와 복귀값을 저장하는데 사용될 수 있는 추가의 스택이 존재하기도 한다.
이들의 형제의 안전한 레벨도 많은 안전한 레벨을 갖는 계층적 시스템에도 존재할 수 있다는 것을 주목해야 한다.
본 발명의 제2 국면은, 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자; 상기 데이터 처리 회로소자에서 처리된 데이터 항목을 저장하기 위한 복수의 레지스터; 및 데이터를 저장하되, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하는 데이터 스토어를 구비하고; 상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고; 상기 데이터 처리 회로소자는, 처리동안에 상기 스택들과 상기 레지스터들 사이에서 데이터를 전송하도록 구성되고; 상기 데이터 처리 회로소자는, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하는, 데이터 처리장치의 데이터 처리방법을 제공하고, 상기 방법은, 상기 데이터 스토어에 저장된 프로그램 코드를 실행하는 단계; 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하는 단계를 포함하고: 실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수 코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 제1 영역 또는 상기 제2 영역의 상기 스택에 액세스하는 단계를 포함한다.
본 발명의 제3 국면은, 처리 회로소자에 의해 실행될 때, 어떤 값을 갖는 레지스터 스택 로드 명령어에 의해 지정된 적어도 하나의 레지스터를 일 스택의 적어도 하나의 장소로부터 로드하도록; 또 상기 스택이, 스택 선택 플래그에 따라 데이터 스토어의 더 안전한 영역에서의 안전한 스택, 또는 데이터 스토어의 덜 안전한 영역에서의 덜 안전한 스택을 포함하는지를 판정하도록, 데이터 처리 회로소자를 제어하는 상기 레지스터 스택 로드 명령어를 포함한, 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제4 국면은, 처리 회로소자에 의해 실행될 때, 적어도 하나의 값을 일 스택의 적어도 하나의 장소에서의 레지스터 스택 저장 명령어에 의해 지정된 적어도 하나의 레지스터에 저장하도록; 또 상기 스택이, 스택 선택 플래그에 따라 데이터 스토어의 더 안전한 영역에서의 안전한 스택, 또는 데이터 스토어의 덜 안전한 영역에서의 덜 안전한 스택을 포함하는지를 판정하도록, 데이터 처리 회로소자를 제어하는 상기 레지스터 스택 저장 명령어를 포함한, 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제5 국면은, 처리 회로소자에 의해 실행될 때, 스택 선택 플래그 설정 명령어에 의해 지정된 레지스터에 저장된 실행 가능한 코드의 타겟 어드레스가 현재 동작하는 영역보다 덜 안전한 영역에 있는지를 판정하여 그럴 경우 상기 덜 안전한 영역을 나타내기 위해 상기 스택 선택 플래그를 설정하도록, 데이터 처리 회로소자를 제어하는, 상기 스택 선택 플래그 설정 명령어를 포함한, 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제6 국면은, 처리 회로소자에 의해 실행될 때, 또 다른 플래그 설정 명령어에 의해 지정된 레지스터에 저장된 실행 가능한 코드의 타겟 어드레스가 현재 동작하는 영역보다 덜 안전한 영역에 있는지를 판정하여 그럴 경우 상기 덜 안전한 영역을 나타내고 또 다른 플래그를 설정하기위해 상기 스택 선택 플래그를 설정하도록, 데이터 처리 회로소자를 제어하는, 또 다른 플래그 설정 명령어를 포함한, 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제7 국면은, 처리 회로소자에 의해 실행될 때, 클리어 다중 레지스터 명령어에 의해 지정된 다수의 레지스터에 저장된 값들을 클리어하도록, 데이터 처리 회로소자를 제어하는, 상기 클리어 다중 레지스터 명령어를 포함한, 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제8 국면은 데이터 처리장치를 제공하고, 상기 데이터 처리장치는, 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 수단; 복수의 레지스터; 및 데이터를 저장하는 데이터 스토어 수단을 구비하고, 상기 데이터 스토어 수단은, 서로 다른 안전한 레벨을 갖는 복수의 영역을 구비하고, 안전한 도메인에서 작동하는 상기 데이터 처리 수단에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 수단에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고; 상기 데이터 스토어 수단은 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고; 상기 데이터 처리 수단은, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하고; 상기 데이터 처리 수단은, 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하기 위한 것이고; 실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 데이터 처리 수단은, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 영역의 상기 스택에 액세스하기 위한 것이다.
본 발명의 제9 국면은 데이터 처리장치를 제공하고, 이 데이터 처리장치는,
프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자;
복수의 레지스터; 및
데이터를 저장하되, 복수의 영역으로 이루어진 데이터 스토어를 구비하고, 각 영역은, 안전한 레벨을 갖고, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과, 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고;
상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고;
상기 데이터 처리 회로소자는 예외 핸들링 회로소자를 구비하고, 상기 예외 핸들링 회로소자는, 상기 데이터 처리 회로소자가 상기 안전한 도메인에서 실행중이고 상기 인터럽트가 덜 안전한 도메인에서 프로그램 코드를 실행하는 것으로의 전환을 나타낼 때 예외의 수신에 응답하여, 일 세트의 상기 레지스터를 클리어하도록 구성되고, 상기 일 세트의 상기 레지스터내의 상기 레지스터는 실행의 상기 도메인과 상기 예외를 두는 상기 도메인과의 안전한 레벨에 좌우된다. 본 발명에 의해 안 것은, 다수의 안전한 상태를 갖는 처리장치에 있어서, 예외를 두는 것은 서로 다른 안전한 레벨 사이에서 상기 처리 회로소자를 천이시킬 수도 있다는 것이다.
예외는, 외부 이벤트에 의해 생긴 인터럽트 등의 비동기적 예외나, 의도적으로 또는 결함에 응답하여 상기 프로그램에 의해 생긴 동기적 예외이어도 된다. 양쪽의 경우에, 안전한 상태에서 불안전한 상태로 천이하는 경우, 적어도 일부의 레지스터는 클리어될 필요가 있고, 일부의 경우에는 그 데이터의 안전성이 유지될 경우 그 스택에 저장된 상태를 갖도록 할 필요가 있을 수도 있다. 상태가 클리어될 필요가 있는 레지스터의 수는, 상기 프로세서가 작동중인 도메인과 상기 예외의 도메인에 좌우될 것이다. 예를 들면, 덜 안전한 상태로 천이할 때, 민감한 데이터를 저장하는데 사용되어도 되는 일 세트의 레지스터는, 그 데이터가 덜 안전한 측에 이용 가능하지 않도록 클리어되어야 한다. 덜 안전한 상태로의 천이가 필요하지 않는 예외를 둘 때, 일반적으로 레지스터는 클리어될 필요는 없다. 본 발명은, 이들의 천이에 응답하여 그 필요한 레지스터를 클리어하여서 프록싱 인터럽트가 필요하지 않게 할 수 있는 예외 핸들링 회로소자를 제공한다.
일부의 실시예에서, 상기 데이터 처리 회로소자는, 상기 데이터 처리 회로소자가 상기 일 세트의 레지스터를 클리어하기 전에 실행중인 상기 도메인의 상기 스택에 대해 상기 일 세트의 상기 레지스터에 저장된 상태를 보관하도록 더욱 구성된다.
덜 안전한 상태로 천이할 때 안전한 상태를 저장하는 상기 레지스터는 항상 클리어되어야 하지만, 많은 실시예에서 이 상태는 유지되어야 하고, 이 때문에 스택에 보관되어야 한다. 이것은, 상당히 전력과 시간 헝그리 프로세스이므로, 그 수를 제한하고 성능을 향상시키는 필요한 레지스터를 지정할 수 있다. 이에 관하여, 덜 안전한 레벨로 천이하지 않는 예외를 둘 때, 덜 안전한 레벨로 천이하는 경우보다 상기 스택에 보다 소수의 레지스터가 보관될 필요가 있다. 일부의 실시예에서, 콜러 보관 레지스터만이, 상기 예외에 의해 덜 안전한 상태로 천이하지 않으면 보관될 필요가 있고, 이 경우에, 민감한 데이터를 저장하는 어떠한 레지스터도 그 데이터가 덜 안전한 측에 보일 수 없게 클리어될 필요가 있고, 그 데이터가 손실되지 않는 경우는 보관될 필요가 있다.
본 발명의 상기 내용과, 다른 목적, 특징 및 이점은, 아래의 첨부도면과 관련지어 판독되는 예시적 실시예들의 상세한 설명으로부터 명백해질 것이다.
도 1은 안전한 영역과 불안전한 영역을 갖는 데이터 스토어를 갖는 본 발명의 실시예에 따른 데이터 처리장치를 나타내고;
도 2는 2개의 서로 다른 안전한 영역과 불안전한 영역을 갖는 데이터 스토어를 갖는 본 발명의 실시예에 따른 데이터 처리장치를 나타내고;
도 3a는 안전한 프로그램으로부터 불안전한 함수를 호출하는 것을 개략적으로 나타내고;
도 3b는 본 발명의 실시예에 따른 명령어를 나타내고;
도 4는 불안전한 프로그램으로부터 안전한 함수를 호출하는 것을 개략적으로 나타내고;
도 5는 몇몇의 안전한 도메인의 계층적 구조를 개략적으로 나타내고;
도 6은 형제의 도메인을 포함하는 몇몇의 안전한 도메인의 계층적 구조를 개략적으로 나타내고;
도 7은 코드 실행 중에 인터럽트를 취하는 것을 개략적으로 나타내고;
도 8a는 제1 예외와 제2 예외가 수신될 때 보관되는 상태를 나타내고;
도 8b는 인터럽트를 취할 때의 상기 스택에 상태들이 보관된 레지스터를 나타내고;
도 9는 본 발명의 실시예에 따른 방법에서의 단계들을 설명하는 흐름도를 나타내고;
도 10은 본 발명의 실시예에 따른 명령어가 실행되는 방법에서의 단계들을 설명하는 흐름도를 나타낸다.
도 1은 예를 들면 마이크로콘트롤러이어도 되는 데이터 처리장치(10)를 나타낸다. 데이터 처리장치는 명령어를 처리하는 처리 회로소자(20)와, 그 처리 회로소자(20)에 의해 처리된 데이터를 저장하고 또 그 처리 회로소자(20)가 실행하는 프로그램 코드를 저장하는 데이터 스토어(30)를 구비한다.
데이터 스토어(30)는, 안전성이 서로 다른 2개의 영역, 안전한 영역(32)과 불안전한 영역(34)을 갖는다. 상기 안전한 영역(32)에 저장된 데이터는, 실행중일 경우 불안전한 영역(34)에 저장된 코드에 액세스 불가능하다.
또한, 데이터 처리장치(10)는, 상기 안전한 영역(32)과 상기 불안전한 영역(34)에의 액세스를 제어하는 메모리 보호 유닛MPU(40)을 갖는다. 메모리 보호 유닛을 통해 상기 제어를 행하기도 하지만, 다른 실시예에서는, 현재 실행중인 코드가 저장되는 영역을 감시하고, 이에 따라 상기 메모리의 다른 영역에의 액세스를 제어하는 데이터 처리장치내에 회로소자에 의해 보다 많은 분산형태로 행해져도 된다.
본 실시예에서는, 상기 처리 회로소자(20)가 실행중인 안전한 도메인은, 현재 실행중인 코드가 저장되는 영역으로부터 판정된다. 따라서, 안전한 데이터 스토어(32)에 저장된 안전한 프로그램 코드는, 안전한 도메인에서 실행되고, 안전한 스택(36)을 사용하여 데이터 값을 저장한다. 마찬가지로, 불안전한 데이터 스토어(34)에 저장된 불안전한 코드도, 실행중에 데이터 값을 저장하기 위한 불안전한 스택(38)을 사용한다.
처리 회로소자(20)는, 실행될 명령어를 가져오기 위한 페치(fetch) 회로소자(22)를 갖는다. 또한, 처리 회로소자(20)는, 이들 명령어를 디코딩하는 디코드 회로소자(24)와 그 명령어들을 실행하는 실행 회로소자(26)를 갖는다. 또한, 후술하는 예외 핸들링 회로소자(28)도 있다.
실행될 명령어는, 메모리 보호 유닛MPU(40)을 거쳐 데이터 스토어(30)로부터 페치 회로소자(22)에 의해 가져와진다. 그 명령어와 데이터는, 안전 및 불안전한 영역에의 액세스를 제어하고 안전한 데이터를 불안전측으로부터 분리하는 MPU(40)를 거쳐 검색된다.
본 실시예에서는, 데이터 처리중에 사용되는 범용 레지스터를 갖는 레지스터 뱅크(60)가 있다. 이들 범용 레지스터는, 명령어가 다음에 실행되는 것을 나타내는 프로그램 카운터PC와, 상기 스택에서 어느 포인트에 다음 데이터 액세스가 이루어져야 하는지를 나타내는 스택 포인터SP를 갖는다. 본 실시예에서, 안전한 측에 스택이 있고 불안전한 측에 스택이 있으므로, 안전한 스택 포인터와 불안전한 스택 포인터NSP가 있지만, 이들 중 하나만이 임의의 시간에 실행중인 프로그램에 대해서 직접 눈에 보인다. 이때, 일부의 실시예에서는, 스택마다 복수의 스택 포인터가 있지만 또한 하나만이 임의의 시간에 눈에 보일 것이다.
레지스터 뱅크(60)내에서 처리중인 데이터 값을 저장하기 위한 범용 레지스터도 있다. 이들을 본 실시예에서는 RO 내지 R12로서 표시하고 있다. 레지스터 R0 내지 R3은 함수와 그 함수를 호출하는 프로그램 사이에서 값들을 전송하는데 사용될 수 있는 이 경우에는, 이러한 목적을 위해 필요하지 않은 이들 레지스터 중 임의의 레지스터는, 덜 안전한 도메인으로 천이하기 전에 클리어되어야 한다. 레지스터 R0 내지 R3에 저장될 수 있는 보다 많은 인수나 복귀값이 있는 경우, 이들은, 함수와 그 함수를 호출하는 프로그램 사이에서 천이할 때 일 스택에 저장될 필요가 있다. 이에 관하여, 이들의 값을 유지하는 특정 레지스터를 지정함으로써, 상기 스택에 보관될 필요가 있는 값들의 수를 감소시켜서, 함수와 프로그램 사이에서 천이할 때 시간을 절약하지만, 과도한 수가 지정되면, 그 시스템은 다른 관점에서는 효율적이지 못할 것이다. 본 실시예에서, 4개의 레지스터는 이 목적을 위해 사용되지만, 서로 다른 수가 사용될 수 있는 당업자에게 있어서는 명백해야 한다. 이와는 달리, 일부의 실시예에서, 레지스터는 데이터 값을 저장하는데 사용되지 않고, 그 값들은 상기 스택에 저장되고 그 스택 포인터를 거쳐 간접적으로 액세스된다. 이것은 면적을 절감하지만 성능 충돌이 있다는 것이 명백하다.
불안전한 측으로부터의 코드가 실행중이고 함수를 호출하고 MPU(40)는 상기 안전한 측에 함수 코드가 저장되어 있는 것을 판정하는 경우, 상기 레지스터 R0 내지 R3에 맞지 않는 어떠한 인수도 불안전한 측의 상기 스택(38)에 저장될 필요가 없다. 본 실시예에서, CPSR 레지스터에서의 스택 선택 플래그 ASSel은, 불안전한 프로그램 코드로부터 안전한 함수를 호출하는 것을 판정할 때 상기 처리 회로소자(20)내의 스택 선택 플래그 설정 회로소자에 의해 설정된다. 이것은, 일 스택에 저장되는 상기 함수의 어떠한 인수도 불안전한 스택(38)으로부터 액세스될 필요가 있는 것을 상기 실행 회로소자(26)에 가리킨다.
그 함수가 실행중일 때, 안전한 함수일 때 안전한 스택(36)을 사용하고, 종료시에 불안전한 측의 프로그램 코드에 복귀하고, 그 안전한 함수는 그 선택 플래그 ASSel의 값으로부터 복귀 값(R0 내지 R3에 맞지 않음)을 불안전한 스택(38)에 저장해야 하는 것을 알 것이다. 그리고, 민감한 데이터를 저장하는데 이용 가능한 레지스터는, (이들은 콘피규레이션 레지스터(62)에 저장된 안전한 콘피규레이션 SCR값으로부터 판정될 수 있음) 클리어된다.
이에 관하여, 상기 플래그는, 인수와 복귀값에 하위 안전 레벨 스택이 사용되는 것을 나타내기 위해 하위 안전 레벨로부터 상위 안전 레벨로의 천이시에 MPU 하드웨어(40)로부터의 안전성 도메인 정보에 의거하여 자동으로 설정될 수 있고, 또한, 동일한 안전 레벨에서나 상위 안전 레벨로부터 하위 안전 레벨로 천이시에 함수가 호출되면 자동으로 클리어될 수 있다. 그러나, 이러한 자동 하드웨어 설정이 정확한 값을 갖는 플래그가 항상 되지 않기 때문에 소프트웨어에 의해 그 플래그가 설정될 필요가 있을 때가 있다. 이것을, 나중의 실시예에 대해 설명한다.
이렇게 하여, 데이터 값들은, 하드웨어에 의해 일반적으로 관리되고 효율적인 간단하고 단순한 방식으로 불안전 스택을 사용하여 상기 2개의 도메인 사이에서 전송된다.
상기 플래그를 설정할 때 사용되는 안전성 도메인 천이에 대한 정보를 제공하는 것으로서 상기 MPU는 기술되어 있지만, 이러한 정보를 판정하는 상기 회로소자는 데이터 처리장치의 다른 곳에 위치될 수 있었다. 이에 관하여, 일부의 실시예에서, DMA(직접 메모리 액세스) 콘트롤러 등의 주변기기를 거쳐 데이터 스토어에 액세스할 수도 있고, 이들이 MPU를 거쳐 데이터 스토어를 액세스하지 못하면, 불안전한 측으로부터 안전한 상태의 분리는 DMA가 이루어지는 회로소자에 의해 구현되어야 한다.
또한, 도 1은 부동 소수점 레지스터 등의 추가의 전용 레지스터를 갖는 추가의 레지스터 뱅크(64)를 나타낸다. 레지스터 뱅크(60)도, 예외를 두거나 함수가 호출될 때 복귀 어드레스를 저장하는데 사용되어도 되는 링크 레지스터(65)를 구비한다. 또는, 이 레지스터는, 예외를 두었던 도메인의 안전한 레벨을 나타내는 EXC_RETURN값을 저장하기도 하고, 이것에 의해 상기 프로세서가 상태를 복원할 때 어느 스택에 액세스할지와, 얼마나 많이 로드될 필요가 있는지를 알 수 있고, 이것은 나중에 설명하겠다.
요약하면, 도메인간 호출 문제를 해결하고 프로그램 상태 레지스터(CPSR)에서 ASSel(Alternate Stack Select) 플래그를 사용하여 다수의 스택과 관련된 안전성을 유지하는 것이 가능하다. 이러한 플래그는, 메모리 제어 로직이 안전한 상태로의 천이를 생기게 한 호출을 결정했으면, 함수 호출이 일어날 때 하드웨어에 의해 1로 자동으로 설정되어도 된다. 함수는 불안전한 상태로 호출하고, 동일한 상태내에서 그 플래그를 0으로 설정했을 것이다. 이 때문에, 이러한 플래그는, 뱅크드 스택 포인터 중 어느 스택 포인터(즉, 현재의 안전성 상태와 관련된 스택 포인터나, 불안전한 포인터)가 함수 인수와 복귀 값을 액세스하는데 사용되어야 하는지를 콜리 함수에 가리킨다. 이들 값으로의 액세스는, 대부분의 기존의 로드/저장 명령어가 기준 어드레스 레지스터를 명백히 지정하지 않지만, 대신에 상기 ASSel 플래그에 의거한 기준 어드레스로서 상기 정확한 스택 포인터를 자동으로 선택하는 것과는 달리, 일부의 새로운 인덱스된 로드 및 저장 명령어를 거쳐 제공되어도 된다. 이들 명령어는 후술한다. 상기 안전한 상태에 속하는 외부의 API 함수는, 서브 함수 복귀 후에 상기 스택의 상기 함수 인수나 복귀 값으로의 액세스가 필요한 경우 어떠한 서브함수 호출 정도의 ASSel 플래그를 보관 및 복원해야 한다. 이것에 의해 안전한 함수가 안전한 도메인이나 불안전한 도메인 중 어느 한쪽으로부터 호출될 수 있고, 일 스택을 거쳐 값들을 전달할 능력을 계속 유지할 수 있다.
예외 핸들링 회로소자(28)는, 예외를 두는 것을 제어하고, 이들 예외에 의해, 보다 안전한 상태로부터 덜 안전한 상태로 천이하게 되는 경우, 민감한 데이터를 저장하는 일 세트의 레지스터는 이들 레지스터에 저장된 데이터를 불안전한 측에 이용가능하지 않게 상기 예외를 두기 전에 클리어될 것이다. 이들 레지스터에 저장된 상태는, 예외로부터 복귀시에 그 상태가 복원될 수 있도록 안전한 스택에 저장될 것이다.
도 2는 데이터 스토어(30)내에 2개의 안전한 영역 S1과 S2가 있는 도 1에 대한 대체 실시예의 데이터 처리장치(10)를 나타내고, 이때 S2는 S1보다 더 안전하다. 본 실시예에서, 각 영역은, 자신의 스택을 갖는다. 따라서, 스택 포인터가 3개 있긴 하지만, 임의의 시간에 하나의 스택 포인터만이 실행중인 프로그램 20으로 직접 보인다.
상술한 것처럼, CPSR 내의 스택 선택 플래그 ASSel은, 함수의 인수나 복귀 값을 호출한 프로그램에 대해 서로 다른 안전한 도메인에서 실행된 인수나 복귀 값을 저장하는데 어느 스택이 사용되어야 하는지를 판정하는데 사용된다. 서로 다른 안전 레벨 몇몇이 있는 경우, 다수의 비트 플래그 값은 적절한 레벨을 나타내는데 필요할 것이다. 상기 플래그는, 하위 안전 레벨을 나타내기 위해 하위 안전 레벨에서 상위 안전 레벨로의 천이시에 MPU 하드웨어로부터의 정보에 의거하여 자동으로 설정될 수 있고, 또한, 동일한 안전 레벨에서의 함수가 호출되면 또는 상위 안전 레벨에서 하위 안전 레벨로의 천이시에 현재의 안전 레벨을 나타내도록 설정될 수 있다. 상기 플래그는, 이러한 자동 하드웨어 설정이 항상 정확한 값을 갖는 플래그가 되지 않기 때문에 소프트웨어에 의해 설정될 필요가 있는 때가 있다.
소프트웨어에 의한 상기 플래그의 설정의 일례를, 도 3a에 대해서 설명한다. 도 3a는 불안전한 함수를 호출하는 안전한 프로그램을 개략적으로 나타낸 것으로, 그 프로그램과 함수는 도 1의 처리장치에 의해 실행된다. 이 경우에, 그 함수를 호출하기 전에 ASSel 플래그를 설정하는 프로그램 코드 내에 스택 선택 플래그 설정 명령어가 있다. 이것은, 그 함수에 필요한 인수가 불안전한 스택에 저장되어야 하는 것을 상기 처리장치에 가리킨다. 일반적으로, 안전한 상태에서의 프로그램 코드 실행은 안전한 스택(36)을 사용하므로, 이러한 명령어를 사용하여 그 인수가 이 스택에 저장되지 않게 한다. 이 때문에, 이 플래그는, 명령어를 스택할 스토어가 있다면 설정되어 있는 경우, 상기 ASSel 플래그는 상기 처리 회로소자에 이들 값들이 저장될 스택이 불안전한 스택이라는 것을 가리킨다.
그 함수가 호출될 때, MPU(40)는, 지금 실행될 코드가 불안전한 측(34)에 저장되고 그 플래그 클리어된다는 점에서 불안전한 도메인으로의 천이를 검출한다. 이 시점에서, 상기 처리 회로소자는 불안전한 도메인에서 실행중이므로, 불안전한 스택(38)이 사용될 것이다. 안전한 도메인으로의 복귀시에, 상기 ASSel 플래그는, 임의의 복귀 값이 일 스택을 거쳐 전달되면, 상기 복귀 값을 액세스할 때 불안전한 스택(38)이 사용되어야 하는 것을 상기 처리 회로소자에게 가리키는 명령어에 의해 다시 설정되어야 한다. 불안전한 함수의 복귀 값으로의 액세스가 더 이상 필요하지 않으면, 또 다른 명령어를 사용하여 임의의 또 다른 잠재함수 호출이나 복귀를 위한 일정한 상태로 상기 안전한 도메인을 유지하는, 상기 ASSel 플래그를 클리어해야 한다.
상기 ASSel 플래그를 설정하기 위한 명령어는 단순 선택 스택 플래그 명령어이어도 되거나, 타겟 어드레스의 안전한 레벨을 판정한 후, 그에 따라서, 함수가 어느 도메인에서 실행될 코드로부터 분명하지 않은 경우에 사용되어도 되는 플래그 명령어를 설정하여도 된다는 것에 주목해야 한다.
이에 관해서, 본 발명의 실시예에서는, 이 작용을 가능하게 하는 명령어들을 이용하고 이들의 명령어는 도 3b에 나타낸 테이블에 배열되어 있다.
따라서, 어떤 값이 로드될 레지스터가 상기 ASSel 플래그의 값에 좌우되는 스택을 나타내는 로드 스택 명령어가 있다. 이 명령어는, 스택으로부터 로드될 레지스터와, 그 스택의 스택 포인터의 오프셋으로서 로드될 어드레스를 규정한다.
스택이 상기 ASSel 플래그에 좌우되는 것을 다시 가리키는 스토어 스택 명령어가 있다. 이 명령어는, 레지스터와, 그 스택의 스택 포인터의 오프셋으로서 저장될 어드레스를 규정한다.
불안전한 도메인으로부터 안전한 도메인으로의 유효 진입 포인트를 가리키는데 사용될 수 있는 NSBT 명령어가 있다.
본 명령어에 의해 규정된 다수의 레지스터를 클리어하는데 사용될 수 있고 안전한 측의 데이터가 반드시 덜 안전한 측에 보이지 않도록 사용될 수 있는 다수의 레지스터 클리어 명령어가 있다.
또한, 타겟 어드레스의 안전한 상태를 시험하고, 상기 ASSel 플래그를 적절하게 설정하는데 사용될 수 있는 명령어도 있다. 이들은, 그 플래그를 소프트웨어에 의해 설정할 필요가 있지만 호출된 함수의 안전한 도메인이 무엇인지 분명하지 않기 때문에 그 플래그가 무슨 값을 가져야 하는지 미리 분명하지 않은 경우에 유용하다. 일부의 경우에, 상기 명령어는 그 함수의 도메인이 동작이 행해질 것에 영향을 미칠 수도 있는 경우의 조건적 명령어 실행에 사용될 수 있는 또 다른 플래그를 설정하기도 한다. 일부의 명령어 세트에 있어서, 실행이 플래그의 값에 좌우되는 조건적 명령어가 있어서, 이 플래그를 그 함수의 안전한 도메인에 따라 설정하는 것에 의해, 그 조건적 명령어의 실행이 안전한 도메인에 좌우될 수 있다.
단순한 프라그마를 사용하여 컴파일러에게, 함수가 안전성 도메인간의 인터페이스의 일부인 것과 도 3b에 열거된 새로운 명령어가 함수 인수와 결과를 액세스할 때 필요한 것을 가리킬 수 있었다. 이 프라그마는, 컴파일러에게, 안전한 상태의 레지스터 값이 보호될 필요가 있는 것을 가리켰을 것이다. 호출에서 안전한 도메인으로 복귀할 때, 다음의 단계가 이용될 수 있다:
복귀 값을 유지하는데 사용되지 않는 경우 R0-R3을 클리어
불안전한 도메인에 대한 호출일 경우에 다음의 단계가 행해져야 한다:
함수 인수를 유지하는데 사용되지 않는 경우 R0-R3을 클리어
R4-R12는, 콜러 보관 레지스터로서 취급되고, 함수 호출 전에 클리어 되어야 한다.
도 4는 명령어를 사용하여 선택 스택 플래그를 설정하는데 필요한 경우의 또 다른 단순화된 예를 나타낸다. 이 경우에, 도메인이 2개이고, 안전한 함수는 불안전한 도메인으로부터 호출된다. 불안전한 도메인에서 안전한 도메인으로의 천이시에, 그 플래그가 설정된다. 그 함수는, 부동 소수점 곱셈 함수이고, 본 실시예에서는 교대로 호출되고 모두 안전한 함수인 다수의 가산함수로 구현한다. 안전한 도메인으로부터 안전한 함수의 호출은, 상기 ASSel 플래그를 클리어하므로 상기 ASSel 플래그가 불안전한 도메인으로 복귀할 때 클리어된다. 상기 ASSel 플래그가 클리어되면, 불안전한 도메인에 보내질 필요가 있는 복귀 값은 안전한 스택에 저장되고 액세스 불가능하다. 따라서, 이들 값이 저장되기 전에 실행된 세트 선택 플래그 명령어가 있는 것은 중요하다. 불안전한 도메인으로 복귀중인 것이 분명하지 않으면, 타겟 어드레스가 검사되고 이에 따라 상기 ASSel 플래그가 설정되는 도 3b의 TTS 명령어를 사용할 수 있다.
상술한 것처럼, 안전한 도메인을 2개로 설명한 경우도 있지만, 안전한 도메인이 복수이어도 된다. 도 5는 계층적으로 배치된 복수의 도메인을 개략적으로 나타낸다. 내부에 코드와 데이터가 저장되고 자신의 스택을 갖는 불안전한 도메인과, 첫 번째 안전한 도메인 S1과, 운영체계 코드가 저장된 보다 안전한 도메인 S2가 있다. 이들의 서로 다른 안전한 도메인 각각은, 자신의 스택을 갖고, 도메인간 천이할 경우에는 그들 사이에서 데이터 값들이 보내지는 것이 요구되고 나서, 그 2개의 도메인 중 덜 안전한 도메인의 스택은 양쪽의 도메인에 의해 액세스될 수 있을 때의 값들을 저장하는데 사용될 수 있고, 이러한 함수 인수와 복귀 값의 저장 및 로딩은 본 발명의 실시예들에 의해 제어될 수 있다.
그 밖의 실시에에서, 동일한 안전 레벨을 갖지만 도메인간에 액세스가 허용되지 않는 형제의 안전한 도메인이 2개 있어도 된다. 도 6은, 이러한 배치를 나타낸 것이다. 이러한 셋업은, 2개의 벤더가 아마도 동일한 시스템에 사용하기 위한 소프트웨어를 공급중이고 서로 그들의 소프트웨어를 보기를 원하지 않는 경우에 이로울 수도 있다. 따라서, 그들이 소프트웨어를 이용하기도 하지만, 그들은 구현되는 방법을 보도록 허용되지 않는다. 이러한 경우에, 상기 형제의 S1 도메인 중 하나에서의 함수가 다른 형제의 S1 도메인에서 저장된 코드에 의해 호출되는 경우의 인수와 복귀 값을 저장하는데 사용될 수 있는 스택(52)이 있는 안전성이 동일한 추가의 영역이 있다.
도메인간에 데이터를 제어하는 것이 필요한 또 다른 방식은, 인터럽트를 취하는 것이다. 일부의 아키텍처에 있어서, 상기 레지스터 상태의 일부는, 인터럽트가 일어나 완료할 때 하드웨어에 의해 자동으로 보관 및 복원된다. 안전한 도메인을 사용하는 레지스터 상태 전체 또는 적어도 레지스터 상태의 전부를 보관 및 클리어하기 위해 상기와 같은 아키텍처를 확장함으로써, 인터럽트에 의해 안전에서 불안전으로 천이하는 경우에 하드웨어는 인터럽트 정도의 안전성을 유지할 수 있다.
상술한 것처럼, 본 발명의 실시예의 자동 레지스터 스태킹 시스템을 확장하여서 상기 안전한 상태를 통해 프록시 인터럽트에 요구사항을 제거하고 상기 처리 회로소자가 레지스터 전부를 (단지 콜러 보관 레지스터 대신에) 상기 스택에 푸쉬하게 하고 나서, 그들의 값을 불안전 상태로의 전환하고 인터럽트 벡터에 점프하기 전에 클리어하는 것이 가능하다. 가능한 낮게 인터럽트 지연을 유지하기 위해서, 상기 추가의 레지스터 상태는, 안전한 상태에서 불안전한 상태로의 천이시에 상기 스택에 푸쉬될 뿐이다. 이것에 의해, 상위 우선순위가 예외 진입동안에 일어날 때 또는 테일 체이닝 예외가 일어날 때 약간 복잡하게 된다.
제1 예시에서, 프로그램 코드가 안전한 상태에서 실행되고, 제1의 안전한 인터럽트가 수신된다. 일부의 레지스터가 스택에 보관되고 나서 불안전한 도메인에서 작동하는 제2의 상위 우선순위 인터럽트가 수신된다. 그것이 불안전한 영역에서 작동할 때, 안전한 레지스터에서의 정보 중 아무것도 새로운 애플리케이션에 보이지 않아야 하기 때문에, 안전한 레지스터 전부는 안전한 스택에 보관되고 나서, 이러한 인터럽트를 취하기 전에 클리어 되어야 한다. 상기 제2의 인터럽트가 완료되면, 미완료된 초기의 안전한 인터럽트에 복귀하고, 그 제2의 인터럽트에 응답하여 안전한 스택에 푸쉬된 레지스터가 복원될 수 있다. 이러한 제1의 안전한 인터럽트가 완료될 수 있어서, 상기 스택에 푸쉬된 원래의 일부(subset)가 복원될 수 있다.
제2 예시에서, 상기 제2의 인터럽트는 상기 제1의 인터럽트보다 하위의 우선순위를 가지므로, 불안전한 제2의 인터럽트가 취해지기 전에 완료할 것이다. 상기 제1의 인터럽트가 완료하면, 나머지 레지스터는 안전한 스택에 푸쉬되고, 레지스터 전부는 불안전한 인터럽트가 취해지기 전에 클리어된다. 불안전한 인터럽트의 끝에서, 안전한 스택에 푸쉬되어 있던 레지스터 전부는 복원된다.
제3 예시는, 안전한 인터럽트를 수신하는 불안전한 코드를 나타냄으로써, 상기 레지스터를 일부 보관한다. 제2의 불안전한 인터럽트가 상위 우선순위로 수신되면, 상기 안전한 레지스터 전부는 안전한 스택에 푸쉬되어 그 인터럽트가 취해질 수 있기 전에 클리어될 필요가 있다. 불안전한 인터럽트가 완료될 때 안전한 레지스터 전부는 그 스택으로부터 팝핑되고 나서, 그 안전한 인터럽트가 완료될 때 불안전한 레지스터의 일부가 팝핑된다.
제4 예시는, 이 처리가 불안전한 인터럽트가 일어나는 제2의 상위 우선순위를 완료하기 전에, 콜러 보관 레지스터가 상기 안전한 스택에 푸쉬되게 하는 안전한 인터럽트를 수신하는 안전한 코드를 나타낸다. 이 제2의 인터럽트는, 나머지 레지스터를 일부가 완료된 후 푸쉬시켜, 실행중인 레지스터 전부를 푸쉬되게 한다. 그리고, 레지스터 전부는 불안전한 인터럽트가 취해지기 전에 클리어된다. 이 인터럽트가 완료하면, 콜리 보관 레지스터는 안전한 인터럽트가 취해지기 전에 안전한 스택으로부터 팝핑된다. 안전한 인터럽트가 완료될 때, 원래의 일부의 레지스터는, 안전한 스택으로부터 팝핑된다.
도 8a는, 잠재적 인터럽트와 실행될 필요가 있는 상태 보관을 가리키는 테이블을 나타낸다. 이에 관하여, 일부 푸쉬는 상기 스택에 콜러 보관된 일부의 레지스터를 푸쉬하는 것이고, 전부 푸쉬는 상기 스택 포인터로부터 떨어진 스택에 전체 레지스터 상태를 푸쉬하는 것이다. 일부의 레지스터가 민감한 데이터를 저장하는데 이용 가능하지 않고 이것이 알려진 경우, 이들의 레지스터는 상기 스택에 푸쉬될 필요도 없다. 나머지 푸쉬는, 이것이 모든 상태를 푸쉬하는 것과 같은 일부 푸쉬와 조합될 때, 상기 스택에 콜리 보관 일부의 레지스터 상태를 푸쉬하고 있다.
상기 테이블에서, 예외 진입열은, 상기 제1의 인터럽트보다 우선순위가 상위이고 상기 제1의 인터럽트 예외 벡터에 분기하기 전에 일어나므로, 상기 제1의 인터럽트가 완료하기 전에 취해지는, 제2의 인터럽트를 가리킨다. 상기 에외 복귀열은, 상기 제1의 인터럽트가 완료할 때까지 취해지지 않는 이하의 우선순위 인터럽트를 가리킨다.
이에 관하여, 콜러 함수의 역할을 하는 레지스터들과, 콜리 함수의 역할을 하는 레지스터들이 있기 때문에, 콜러 함수의 역할을 하는 레지스터들은 상기 함수를 취하기 전에 상기 스택에 저장된다. 그렇지만, 안전한 상태에서 불안전한 상태로 천이할 때, 안전한 상태를 보관할 수 있는 레지스터 전부에 있는 값들은, 불안전한 측에 이용 가능하지 않아서, 도 8a의 테이블로부터 알 수 있듯이, 추가의 보관 및 클리어가 행해지도록 상기 레지스터들로부터 제거될 필요가 있다.
도 8b는 본 발명의 실시예의 레지스터 스택과, 동일 또는 덜 안전한 상태로부터 인터럽트를 취할 때 보관되는 부분 스택 프레임과 덜 안전한 상태로 천이할 때 보관되는 풀(full) 스택 프레임을 나타낸다. 이에 관하여, 보다 많은 레지스터는, 레지스터들이 임의의 상태를, 덜 안전한 상태에 이용 가능하지 않아야 하는 안전한 상태인 것처럼 저장된 채로 있을 수 없는 것과 같은 후자의 경우에 보관 및 클리어될 필요가 있다.
프로그램 코드가 안전한 상태간에 천이할 때, 함수를 호출할 가능성이 있을 때도, 상기 스택에 저장될 레지스터의 수는, 그 상태들에 좌우되고, 상태의 보관과 레지스터의 클리어는 안전한 콘피규레이션 레지스터에 있는 값을 사용하여 제한될 수 있도록 이 값으로 나타내어질 수 있다. 이 값은, 특별한 장치용 컴파일러에 의해 설정되어도 되고, 이것에 의해 특별한 장치가 다른 방식으로 사용되게 하고, 제품의 약간의 유연성을 제공하고, 다른 실시예에서는, 상기 시스템이 부팅중일 가능성이 있을 때도, 이 값은 소프트웨어에 의해 설정되어도 된다.
상술한 것처럼, 상기 처리 회로소자는, 예외가 일어날 때 상기 스택에 콜러 보관 섹션의 상기 레지스터 상태를 자동으로 푸쉬하여 팝핑하고, 필요한 경우, 어느 스택 포인터가 사용되어서 어느 스택이 사용되는지를 변경한다. 이것에 의해, 안전 및 덜 안전한 도메인의 시스템에서도 다음의 이점: 감소된 인터럽트 지연; 감소된 인터럽트 지터; 예외 핸들러가 어셈블러 대신에 C에 기록될 수 있음; 예외 진입시의 예외와 같은 최적화와, 테일 체이닝을 가능하게 함을, 제시할 수 있다.
상기 예외가 복귀할 때로부터 레지스터 상태를 어느 스택이 복원하는 것인지와 어느 모드에 코어가 복귀되어야 하는지를 코어가 알 수 있도록, 상기 링크 레지스터는, 복귀 어드레스라기 보다는 전용 EXC_RETURN 값을 유지하여도 된다. 이것은, 상기 처리장치에, 상기 처리 회로소자가 상기 예외를 취했을 때에 있는 도메인의 안전한 레벨을 가리킨다. 복귀할 실제의 프로그램 카운터 장소는, 다른 레지스터 상태와 함께 이 도메인의 스택에 저장된다. 이 경우에, 그 링크 레지스터에 있는 상기 EXC_RETURN 값은, 복귀 어드레스가 스택에 있고 이것은 어느 스택인지를 가리킨다.
도 9는 안전한 도메인과 불안전한 도메인이 있는 경우의 본 발명의 실시예에 따른 방법의 단계들을 나타낸다. 먼저, 그 양쪽의 도메인에서의 프로그램 코드가 실행되고, 안전한 함수가 호출된다. 그리고, 그 함수 호출이 안전한 도메인으로부터 이루어졌는지를 판정한다. 안전한 도메인으로부터 함수 호출이 이루어지지 않았던 경우, 상기 스택 선택 플래그가 설정되고, 안전한 도메인으로부터 함수 호출이 이루어졌던 경우에는, 그 플래그는 클리어 된다. 이것은, 상기 처리 회로소자가 상태간에 천이하고 데이터 스토어의 동일한 또는 다른 영역으로부터 코드를 검색할 행해지는 것이 일반적이고, 이러한 코드의 검색에 의해, 하드웨어는 상기 플래그를 설정 또는 클리어시킨다. 그 후, 상기 스택 선택 플래그가 설정되는지를 판정한다. 설정되는 경우, 인수와 복귀 값은, 불안전한 스택에 액세스된다. 설정되지 않는 경우에는, 그 인수와 복귀 값은 안전한 스택에 액세스된다. 이렇게 하여, 안전한 함수와 불안전한 프로그램 모두는 이들 값을 액세스 가능하고, 안전한 함수와 안전한 프로그램 모두는 안전한 스택에 액세스한다.
도 10은 프로그램 코드가 안전한 도메인에서 실행되고 함수가 호출되는 경우의 본 발명의 실시예에 따른 방법에서의 단계들을 나타낸다. 스택 선택 플래그 설정 명령어는 그 함수를 호출하기 전에 실행되고, 상기 타겟 어드레스가 불안전한 도메인에 있으면, 도메인 천이가 있고 스택 플래그가 설정되며, 상기 타겟 어드레스가 불안전한 도메인에 있지 않으면, 스택 플래그가 클리어된다. 그리고, 레지스터 스택 저장 명령어는 실행되고 스택 플래그에 있는 값에 좌우되고, 적절한 스택에는, 그 함수를 실행하는데 필요한 인수가 채워져 있다. 레지스터 스택 저장 명령어는 스택 포인터에 대한 오프셋을 가리키고, 그 스택 플래그(불안전한 것은 세트, 안전한 것은 클리어)로 나타낸 스택에 대한 스택 포인터가 사용된다. 안전한 도메인에 상기 함수가 없는 경우, 상기 레지스터들은 상태를 보관하고 나서 클리어하기 위해 상기 안전한 스택에 저장될 필요가 있고, 이것은 하드웨어에 의해 행해질 수 있거나, 클리어 레지스터 명령어에 의해 행해질 수 있거나, 또는 양자에 의해 행해질 수 있다. 이에 관하여, 상기 하드웨어는, 함수 인수를 보유하지 못하는 안전한 레지스터들을 자동으로 클리어할 수도 있지만, 함수 인수를 보유할 수도 있는 안전한 레지스터들은 클리어되지 않는다. 함수 인수를 저장할 수 있는 레지스터가 함수 인수에 사용되지 않고 있는 중일 때, 그것을 클리어하는 명령어가 필요하다.
그리고, 함수가 호출되어 실행되고, 복귀하면 상기 스택 선택 플래그는, 임의의 복귀 값들에 액세스하는데 사용되어야 하는 스택 포인터를 이전에 가리켰어야 하는 값으로 설정/클리어된다. 이에 관하여, 이전에 가리켰던 값으로 설정하는 것은, 이전의 값을 저장하고 나서 복원하여서 이루어질 수 있었거나, 무슨 상태가 천이를 일으켰는지를 판정하는데 어느 타겟 어드레스가 사용될 수 있었는지를 판정하는 시험 명령어에 의해 이루어질 수 있었다. 그리고, 상기 레지스터 스택 로드 명령어가 실행되어도 되고, 그 함수에 대한 복귀 값이 적절한 스택으로부터 로드되어도 된다.
일부의 실시예에서, 함수가 불안전한 함수인 것이 공지된 경우에, 타겟 어드레스를 시험할 필요가 없는 단순 세트 스택 플래그 명령어가 실행될 수 있다.
이와는 달리, 일부의 경우에는, 세트 스택 및 또 다른 플래그 명령어가 사용될 수 있다. 이에 관하여, 타겟 어드레스가 안전한 도메인에 있는지 아닌지에 좌우되는 흐름도를 통한 2개의 경로는, 타겟 어드레스가 안전하지 않은 경우, 우리는 약간의 레지스터를 푸쉬하고 클리어 다중 명령어를 사용한다는 사실외에는 같다는 것에 주목해야 한다. 따라서, 다른 실시예에서는, 상기 "세트 ASSel 플래그와 또 다른 플래그" 명령어가 사용될 수 있었고, 이 경우에 레지스터의 푸쉬와 클리어 다중 명령어는, 이 명령어에 의해 설정된 상기 또 다른 명령어의 값에 따라 행해질 수 있었다.
본 명세서에서는 첨부도면을 참조하여 예시적 실시예들을 설명하였지만, 청구범위는 상세한 실시예들에 한정되지 않고, 또한 첨부된 청구항의 범위와 사상을 벗어나지 않고 당업자가 여러 가지 변경 및 변형을 할 수 있다는 것을 알 것이다. 예를 들면, 아래의 종속항의 특징을 독립항의 특징과 여러 가지로 조합할 수 있다.

Claims (37)

  1. 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자;
    복수의 레지스터; 및
    데이터를 저장하되, 복수의 영역으로 이루어진 데이터 스토어를 구비하고, 각 영역은, 안전한 레벨을 갖고, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고;
    상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고; 상기 데이터 처리 회로소자는, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하고;
    상기 데이터 처리 회로소자는, 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하도록 구성되고;
    실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 데이터 처리 회로소자는, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 영역의 상기 스택에 액세스하도록 구성된, 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 데이터 처리장치는,
    스택 선택 플래그를 저장하는 저장 장소; 및
    플래그 설정 회로소자를 더 구비하고;
    상기 데이터 스토어는 보다 안전한 영역과 덜 안전한 영역의 2개의 영역을 포함하고;
    상기 플래그 설정 회로소자는, 보다 안전한 함수를 호출하는 덜 안전한 프로그램 코드에 응답하여 상기 스택 선택 플래그를 설정하도록 구성되고, 임의의 함수를 호출하는 안전한 프로그램 코드에 응답하고 덜 안전한 함수를 호출하는 덜 안전한 프로그램 코드에 응답하여 상기 스택 선택 플래그를 클리어하도록 구성된, 데이터 처리장치.
  3. 제 1 항에 있어서,
    상기 데이터 처리장치는,
    스택 선택 플래그를 저장하는 저장 장소; 및
    플래그 설정 회로소자를 더 구비하고;
    상기 플래그 설정 회로소자는, 안전 레벨이 서로 다른 영역간에 천이하는 상기 데이터 처리 회로소자를 검출하는 것에 응답하여 하위 안전한 영역을 나타내고, 동일한 안전 레벨에 대한 함수 호출을 실행하는 상기 데이터 처리회로를 검출하는 것에 응답하여 현재의 안전한 영역을 나타내기 위해, 상기 스택 선택 플래그를 설정하도록 구성된, 데이터 처리장치.
  4. 제 3 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 프로그램 코드에서 세트 스택 선택 플래그 명령어에 응답하여 상기 스택 선택 플래그를 덜 안전한 영역을 나타내는 값으로 설정하도록 구성되고, 덜 안전한 함수를 호출하는 상기 프로그램 코드는 상기 함수에 대한 인수를 저장하기 전에 상기 프로그램 코드에서의 상기 세트 스택 선택 플래그 명령어를 포함하는, 데이터 처리장치.
  5. 제 3 항 또는 제 4 항에 있어서,
    상기 데이터 처리 회로소자는, 함수를 호출하는 상기 프로그램 코드에 응답하여, 상기 스택 선택 플래그로 나타낸 상기 스택이 상기 함수 인수와 상기 복귀값에 대해 액세스되도록, 상기 스택 선택 플래그에 따라 상기 함수 인수와 상기 복귀값에 대해 액세스하기 위한 상기 스택을 판정하는, 데이터 처리장치.
  6. 제 2 항에 있어서,
    상기 데이터 처리 회로소자는, 스택에 적어도 하나의 장소로부터의 값이 적어도 하나의 레지스터에 로드해야하는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 로드 명령어에 응답하여, 현재의 처리 도메인의 상기 스택 선택 플래그와 상기 안전 레벨에 따라 어느 스택에 액세스할 것인지를 판정하도록 구성된, 데이터 처리장치.
  7. 제 3 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 스택에 적어도 하나의 장소로부터의 값이 적어도 하나의 레지스터에 로드해야하는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 로드 명령어에 응답하여, 상기 스택 선택 플래그에 따라 어느 스택에 액세스할 것인지를 판정하도록 구성된, 데이터 처리장치.
  8. 제 3 항, 제 4 항, 제 5 항 또는 제 7 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 적어도 하나의 레지스터에 저장된 적어도 하나의 값이 스택의 적어도 하나의 장소에 저장되는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 저장 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그로부터 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하도록 구성된, 데이터 처리장치.
  9. 제 2 항 또는 제 6 항에 있어서,
    상기 데이터 처리 회로소자는, 적어도 하나의 레지스터에 저장된 적어도 하나의 값이 스택의 적어도 하나의 장소에 저장되는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 저장 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그와 현재 처리하는 도메인의 상기 안전 레벨에 따라 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하도록 구성된, 데이터 처리장치.
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 덜 안전한 영역에 있는 함수 코드와 상기 안전한 영역에 있는 상기 프로그램 코드에 응답하여, 복귀 어드레스를 상기 안전한 스택에 로드하고, 링크 레지스터에, 상기 함수로부터의 상기 복귀 어드레스가 상기 안전한 스택에 로드되는 것을 나타내는 값을 로드하도록 구성된, 데이터 처리장치.
  11. 제 3 항, 제 4 항, 제 5 항, 제 7 항, 제 8 항, 또는 제 3 항에 종속하는 경우의 제 10 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하는 레지스터를 지정하는 스택 선택 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 현재의 동작 영역보다 덜 안전한 영역에 있는지를 판정하여, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 상기 스택 선택 플래그를, 상기 덜 안전한 영역을 나타내게 설정하도록 구성된, 데이터 처리장치.
  12. 제 3 항, 제 4 항, 제 5 항, 제 7 항, 제 8 항, 제 11 항, 또는 제 3 항에 종속하는 경우의 제 10 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하기 위한 레지스터를 지정하는 또 다른 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 상기 안전한 영역이나 상기 덜 안전한 영역에 있는지를 판정하여, 상기 스택 선택 플래그를 상기 덜 안전한 영역을 나타내게 설정하고, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 또 다른 플래그를 설정하도록 구성된, 데이터 처리장치.
  13. 제 1 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 프로그램 코드에 있어서 클리어 다중 레지스터 명령어에 응답하여, 상기 클리어 다중 레지스터 명령어에서 지정한 다중 레지스터에 저장된 값을 클리어하도록 구성된, 데이터 처리장치.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    상기 데이터 처리장치는, 상기 복수의 레지스터 중 어느 레지스터가 안전한 상태를 저장하기 위한 현재 실행중인 코드에서 사용하는데 이용 가능한지를 나타내는 값을 저장하는, 안전한 콘피규레이션 저장 장소를 포함하고, 상기 데이터 처리 회로소자는 보다 안전한 상태에서 덜 안전한 상태로의 천이시에 상기 안전한 콘피규레이션 값으로 나타낸 상기 복수의 레지스터를 클리어하도록 구성된, 데이터 처리장치.
  15. 제 1 항 내지 제 14 항 중 어느 한 항에 있어서,
    상기 데이터 처리 회로소자는, 예외의 수신에 응답하여 일 세트의 상기 레지스터에 저장된 상태를 클리어하도록 구성된 예외 핸들링 회로소자를 구비하고, 상기 세트의 상기 레지스터내의 상기 레지스터는, 실행의 상기 도메인과 상기 예외를 둘 상기 도메인의 안전한 레벨에 좌우되는, 데이터 처리장치.
  16. 제 15 항에 있어서,
    상기 예외 핸들링 회로소자는,
    인터럽트가 상기 안전한 도메인에서 실행되고 또 다른 인터럽트가 이하의 우선순위를 갖고 상기 덜 안전한 도메인으로의 전환을 나타내어서, 상기 데이터 처리 회로소자는, 상기 인터럽트의 완료 후에 상기 또 다른 인터럽트를 취하도록 구성되고:
    중단되었던 원래의 코드가 상기 안전한 도메인에 있었을 경우 상기 세트 및 상기 또 다른 레지스터가 상기 안전한 스택에 저장되어 클리어되도록 또 다른 레지스터에 저장된 상기 상태를 보관하도록 구성되고;
    중단되었던 원래의 코드가 상기 불안전한 도메인에 있었을 경우 상기 세트의 레지스터를 클리어하도록 구성되는 경우와;
    상기 인터럽트가 상기 안전한 도메인에서 실행되고, 상기 또 다른 인터럽트가 상기 덜 안전한 도메인에서 실행하는 것으로 전환하는 것을 나타내고 상기 인터럽트에 대해 이상의 우선순위를 갖고, 상기 또 다른 인터럽트가 상기 인터럽트의 완료 전에 취해지고 상기 세트 및 상기 또 다른 레지스터에 저장된 상태가 상기 안전한 스택에 보관되고 상기 세트 및 상기 또 다른 레지스터가 클리어되는 경우를 제외하고는,
    상기 인터럽트가 완료되어 있기 전에 상기 또 다른 인터럽트의 수신에 응답하여, 또 다른 스택 저장 동작을 행하지 않도록 구성된, 데이터 처리장치.
  17. 제 15 항 또는 제 16 항에 있어서,
    상기 데이터 처리장치는, 상기 복수의 레지스터 중 어느 레지스터가 안전한 상태를 저장하는데 이용 가능한 코드의 현재 실행중인 부분에서 사용하는데 이용 가능한지를 나타내는 값을 저장하는, 안전한 콘피규레이션 저장 장소를 포함하고, 상기 예외 핸들링 회로소자는, 상기 안전한 콘피규레이션 저장 장소에 저장된 상기 값, 실행의 상기 도메인의 안전한 레벨 및 상기 예외가 취해지는 상기 도메인으로부터 상기 세트의 상기 레지스터내의 상기 레지스터를 판정하는, 데이터 처리장치.
  18. 제 15 항 내지 제 17 항 중 어느 한 항에 있어서,
    상기 데이터 처리장치는 예외 복귀 값을 저장하는 저장 장소를 포함하고, 상기 데이터 처리 회로소자는, 상기 데이터 처리장치가 상기 예외를 둘 때 작동중인 도메인을 나타내기 위해 상기 예외 복귀 값을 설정하도록 구성되고, 상기 예외 핸들링 회로소자는 예외로부터의 복귀시에 상기 예외 복귀 값에 저장된 상기 값에 따라 상기 스택으로부터의 값들이 갱신되어야 할 레지스터가 어느 레지스터인지를 판정하는, 데이터 처리장치.
  19. 제 3 항, 제 4 항, 제 5 항, 제 7 항, 제 8 항, 제 11 항, 제 12 항, 또는 제 3 항에 종속하는 경우의 제 10 항 또는 제 13 항, 제 14 항, 제 15 항, 제 16 항, 제 17 항, 제 18 항 중 하나 중 어느 한 항에 있어서,
    상기 데이터 스토어는, 민감도가 다른 데이터를 저장하는 복수의 계층적 안전 영역을 포함하고, 보다 높은 레벨의 안전한 영역에 저장된 데이터는 보다 낮은 레벨의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고;
    상기 데이터 스토어는 상기 복수의 안전한 영역의 각각에 적어도 하나의 스택을 포함하고;
    상기 스택 선택 플래그를 저장하는 상기 저장 장소는, 복수의 비트를 포함하고;
    상기 데이터 처리 회로소자는 상기 스택 선택 플래그에 따라 함수 인수와 복귀 값에 대해 어느 스택에 액세스할 것인지를 판정하도록 구성된, 데이터 처리장치.
  20. 제 1 항 내지 제 19 항 중 어느 한 항에 있어서,
    상기 데이터 스토어는, 민감도가 다른 데이터를 저장하는 복수의 안전한 영역을 포함하고, 상기 영역 중 적어도 2개는 민감도가 같은 데이터를 저장하는 형제(sibling) 영역이고, 상기 형제 영역에 저장된 상기 데이터는 보다 높은 레벨의 안전한 도메인에 저장된 데이터에는 액세스 가능하지만 보다 낮은 레벨의 안전한 도메인이나 그 밖의 형제의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고;
    상기 데이터 스토어는, 상기 안전한 영역 각각에서의 적어도 하나의 스택과, 상기 형제의 영역 중 어느 한쪽에 저장된 프로그램 코드에 액세스 가능한 또 다른 형제 스택을 포함하고;
    상기 함수 코드가 또 다른 상기 형제 영역에 저장되는 함수를 호출하는 상기 형제 영역 중 하나에 저장된 프로그램 코드에 응답하여, 상기 데이터 처리 회로소자는, 상기 프로그램 코드와 상기 함수 코드를 실행할 때, 상기 함수에서 사용될 인수와 상기 또 다른 형제 스택에 상기 함수로부터 복귀될 데이터를 저장하도록 구성된, 데이터 처리장치.
  21. 제 3 항, 제 4 항, 제 5 항, 제 7 항, 제 8 항, 제 11 항, 제 12 항, 제 19 항, 또는 제 3 항에 종속하는 경우의 제 10 항, 제 13 항, 제 14 항, 제 15 항, 제 16 항, 제 17 항, 제 18 항 또는 제 20 항 중 하나 중 어느 한 항에 있어서,
    상기 데이터 스토어는, 민감도가 다른 데이터를 저장하는 복수의 계층적 안전 영역을 포함하고, 보다 높은 레벨의 안전한 영역에 저장된 데이터는 보다 낮은 레벨의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고, 상기 영역 중 적어도 2개는 민감도가 같은 데이터를 저장하는 형제 영역이고, 상기 형제 영역에 저장된 상기 데이터는 보다 높은 레벨의 안전한 도메인에 저장된 데이터에는 액세스 가능하지만 보다 낮은 레벨의 안전한 도메인이나 그 밖의 형제의 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자에 의해 액세스 가능하지 않고;
    상기 데이터 스토어는, 상기 복수의 안전한 영역의 각각에서의 적어도 하나의 스택과, 상기 형제의 영역 중 어느 한쪽에 저장된 프로그램 코드에 액세스 가능한 또 다른 형제 스택을 포함하고;
    상기 스택 선택 플래그를 저장하는 상기 저장 장소는 복수의 비트를 포함하고, 상기 스택 선택 플래그 회로소자는, 상기 데이터 처리 회로소자가 함수에 분기중일 때, 상기 프로그램 코드가 저장되는 상기 영역과, 상기 함수 코드가 저장되고 상기 안전한 레벨이 같고 상기 또 다른 형제의 스택을 나타내기 위한 상기 형제의 안전한 레벨인 상기 영역의, 보다 낮은 안전한 레벨을 가리키는 값으로 상기 스택 선택 플래그를 설정하도록 구성되고;
    상기 데이터 처리 회로소자는 상기 스택 선택값에 따라 상기 함수 인수와 상기 복귀 값에 대해 어느 스택에 액세스할 것인지를 판정하도록 구성된, 데이터 처리장치.
  22. 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자;
    상기 데이터 처리 회로소자에서 처리된 데이터 항목을 저장하기 위한 복수의 레지스터; 및
    데이터를 저장하되, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하는 데이터 스토어를 구비하고;
    상기 데이터 스토어가 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고, 상기 데이터 처리 회로소자가, 처리동안에 상기 스택들과 상기 레지스터들 사이에서 데이터를 전송하도록 구성되고;
    상기 데이터 처리 회로소자가, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하는, 데이터 처리장치의 데이터 처리방법으로서,
    상기 데이터 스토어에 저장된 프로그램 코드를 실행하는 단계;
    실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하는 단계를 포함하고:
    실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수 코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 제1 영역 또는 상기 제2 영역의 상기 스택에 액세스하는 단계를 포함하는, 데이터 처리방법.
  23. 제 22 항에 있어서,
    안전한 레벨이 서로 다른 2개의 도메인 사이에서 천이할 때 스택 선택 플래그를 설정하는 단계-상기 스택 선택 플래그가 상기 2개의 도메인의 덜 안전한 도메인을 가리킴-;
    상기 스택 선택 플래그에 따라 어느 스택에 함수 인수와 복귀 값을 저장할지를 판정하는 단계를, 추가로 포함하는, 데이터 처리방법.
  24. 제 23 항에 있어서,
    스택에 적어도 하나의 장소로부터의 값이 적어도 하나의 레지스터에 로드해야하는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 로드 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그에 따라 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하여, 상기 값을 상기 적어도 하나의 레지스터에 로드하는 단계를 포함하는, 데이터 처리방법.
  25. 제 23 항 또는 제 24 항에 있어서,
    적어도 하나의 레지스터에 저장된 적어도 하나의 값이 스택의 적어도 하나의 장소에 저장되는 것을 나타내는 상기 프로그램 코드에서의 레지스터 스택 저장 명령어에 응답하여, 상기 스택이 상기 스택 선택 플래그로부터 상기 안전한 스택 또는 상기 덜 안전한 스택을 포함하는지를 판정하여, 상기 값을 상기 스택에 저장하는 단계를 포함하는, 데이터 처리방법.
  26. 제 23 항 내지 제 25 항 중 어느 한 항에 있어서,
    상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하는 레지스터를 지정하는 스택 선택 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 현재의 동작 영역보다 덜 안전한 영역에 있는지를 판정하여, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 상기 스택 선택 플래그를, 상기 덜 안전한 영역을 나타내도록 설정하는 단계를 포함하는, 데이터 처리방법.
  27. 제 23 항 내지 제 26 항 중 어느 한 항에 있어서,
    상기 프로그램 코드에 있어서 실행 가능한 코드의 타겟 어드레스를 저장하기 위한 레지스터를 지정하는 또 다른 플래그 설정 명령어에 응답하여, 상기 타겟 어드레스가 현재의 동작 영역보다 덜 안전한 영역에 있는지를 판정하여, 상기 타겟 어드레스가 상기 덜 안전한 영역에 있으면 상기 스택 선택 플래그를 상기 덜 안전한 영역을 나타내도록 설정하고 상기 또 다른 플래그를 설정하는 단계를 포함하는, 데이터 처리방법.
  28. 제 22 항 내지 제 27 항 중 어느 한 항에 있어서,
    상기 프로그램 코드에 있어서 클리어 다중 레지스터 명령어에 응답하여, 상기 클리어 다중 레지스터 명령어에서 지정한 다중 레지스터에 저장된 값을 클리어하는 단계를 포함하는, 데이터 처리방법.
  29. 처리 회로소자에 의해 실행될 때,
    어떤 값을 갖는 레지스터 스택 로드 명령어에 의해 지정된 적어도 하나의 레지스터를 일 스택의 적어도 하나의 장소로부터 로드하도록; 또한
    상기 스택이, 스택 선택 플래그에 따라 데이터 스토어의 더 안전한 영역에서의 안전한 스택, 또는 데이터 스토어의 덜 안전한 영역에서의 덜 안전한 스택을 포함하는지를 판정하도록,
    데이터 처리 회로소자를 제어하는 상기 레지스터 스택 로드 명령어를 포함한, 컴퓨터 프로그램 제품.
  30. 처리 회로소자에 의해 실행될 때,
    적어도 하나의 값을 일 스택의 적어도 하나의 장소에서의 레지스터 스택 저장 명령어에 의해 지정된 적어도 하나의 레지스터에 저장하도록; 또한
    상기 스택이, 스택 선택 플래그에 따라 데이터 스토어의 더 안전한 영역에서의 안전한 스택, 또는 데이터 스토어의 덜 안전한 영역에서의 덜 안전한 스택을 포함하는지를 판정하도록,
    데이터 처리 회로소자를 제어하는 상기 레지스터 스택 저장 명령어를 포함한, 컴퓨터 프로그램 제품.
  31. 처리 회로소자에 의해 실행될 때,
    스택 선택 플래그 설정 명령어에 의해 지정된 레지스터에 저장된 실행 가능한 코드의 타겟 어드레스가 현재 동작하는 영역보다 덜 안전한 영역에 있는지를 판정하여 그럴 경우 상기 덜 안전한 영역을 나타내기 위해 상기 스택 선택 플래그를 설정하도록,
    데이터 처리 회로소자를 제어하는 상기 스택 선택 플래그 설정 명령어를 포함한, 컴퓨터 프로그램 제품.
  32. 처리 회로소자에 의해 실행될 때,
    또 다른 플래그 설정 명령어에 의해 지정된 레지스터에 저장된 실행 가능한 코드의 타겟 어드레스가 현재 동작하는 영역보다 덜 안전한 영역에 있는지를 판정하여 그럴 경우 상기 덜 안전한 영역을 나타내고 또 다른 플래그를 설정하기 위해 상기 스택 선택 플래그를 설정하도록,
    데이터 처리 회로소자를 제어하는 상기 또 다른 플래그 설정 명령어를 포함한, 컴퓨터 프로그램 제품.
  33. 처리 회로소자에 의해 실행될 때,
    클리어 다중 레지스터 명령어에 의해 지정된 다수의 레지스터에 저장된 값들을 클리어하도록,
    데이터 처리 회로소자를 제어하는 상기 클리어 다중 레지스터 명령어를 포함한, 컴퓨터 프로그램 제품.
  34. 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 수단;
    복수의 레지스터; 및
    데이터를 저장하는 데이터 스토어 수단을 구비하고, 상기 데이터 스토어 수단은, 서로 다른 안전한 레벨을 갖는 복수의 영역을 구비하고, 안전한 도메인에서 작동하는 상기 데이터 처리 수단에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 수단에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고;
    상기 데이터 스토어 수단은 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고; 상기 데이터 처리 수단은, 상기 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 안전한 도메인에서 작동하고, 상기 덜 안전한 영역에 저장된 프로그램 코드를 처리할 때 상기 덜 안전한 도메인에서 작동하고;
    상기 데이터 처리 수단은, 실행중인 상기 프로그램 코드의 저장 장소에 응답하여, 어느 스택에 데이터를 저장할지 또는 어느 스택으로부터 데이터를 로드할지를 판정하기 위한 것이고;
    실행될 함수를 호출하는 제1 영역에 저장된 프로그램 코드에 응답하여, 함수코드는 제2 영역에 저장되고, 상기 제2 영역의 안전레벨이 상기 제1 영역과 다르고, 상기 데이터 처리 수단은, 상기 제1 및 제2 영역 중 어느 영역이 보다 낮은 안전한 레벨을 갖는지를 판정하고, 상기 프로그램 코드와 상기 함수 코드를 실행할 때 함수 인수와 복귀 데이터 값에 대한 상기 보다 낮은 안전한 레벨로 상기 영역의 상기 스택에 액세스하기 위한 것인, 데이터 처리장치.
  35. 프로그램 코드에 응답하여 데이터 처리 동작을 행하는 데이터 처리 회로소자;
    복수의 레지스터; 및
    데이터를 저장하되, 복수의 영역으로 이루어진 데이터 스토어를 구비하고, 각 영역은, 안전한 레벨을 갖고, 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 가능하고 덜 안전한 도메인에서 작동하는 상기 데이터 처리 회로소자에 의해 액세스 불가능한 민감한 데이터를 저장하는 안전한 영역과, 덜 안전한 데이터를 저장하는 덜 안전한 영역 중 적어도 하나를 포함하고;
    상기 데이터 스토어는 상기 안전한 영역에서의 안전한 스택과 상기 덜 안전한 영역에서의 덜 안전한 스택 중 적어도 2개의 스택을 포함하고;
    상기 데이터 처리 회로소자는 예외 핸들링 회로소자를 구비하고, 상기 예외 핸들링 회로소자는, 상기 데이터 처리 회로소자가 상기 안전한 도메인에서 실행중이고 인터럽트가 덜 안전한 도메인에서 프로그램 코드를 실행하는 것으로의 전환을 나타낼 때 예외의 수신에 응답하여, 일 세트의 상기 레지스터를 클리어하도록 구성되고, 상기 일 세트의 상기 레지스터내의 상기 레지스터는 실행의 상기 도메인과 상기 예외를 두는 상기 도메인과의 안전한 레벨에 좌우되는, 데이터 처리장치.
  36. 제 35 항에 있어서,
    상기 데이터 처리 회로소자는, 상기 데이터 처리 회로소자가 상기 일 세트의 레지스터를 클리어하기 전에 실행중인 상기 도메인의 상기 스택에 대해 상기 일 세트의 상기 레지스터에 저장된 상태를 보관하도록 더욱 구성된, 데이터 처리장치.
  37. 제 35 항 또는 제 36 항에 있어서,
    상기 데이터 처리장치는, 상기 복수의 레지스터 중 어느 레지스터가 안전한 상태를 저장하기 위한 현재 실행중인 코드에서 사용하는데 이용 가능한지를 나타내는 값을 저장하는, 안전한 콘피규레이션 저장 장소를 포함하고, 상기 데이터 처리 회로소자는, 안전한 콘피규레이션 값과 실행의 상기 도메인과 예외가 취해지는 상기 도메인의 안전한 레벨로 나타낸 상기 복수의 레지스터에 따라 어느 레지스터가 상기 일 세트의 레지스터내에 있는지를 판정하도록 구성된, 데이터 처리장치.
KR1020147023456A 2012-02-08 2013-01-09 도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지 KR102069522B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/368,419 US9477834B2 (en) 2012-02-08 2012-02-08 Maintaining secure data isolated from non-secure access when switching between domains
US13/368,419 2012-02-08
PCT/GB2013/050029 WO2013117896A1 (en) 2012-02-08 2013-01-09 Maintaining secure data isolated from non-secure access when switching between domains

Publications (2)

Publication Number Publication Date
KR20140123546A true KR20140123546A (ko) 2014-10-22
KR102069522B1 KR102069522B1 (ko) 2020-01-23

Family

ID=47561659

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147023456A KR102069522B1 (ko) 2012-02-08 2013-01-09 도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지

Country Status (8)

Country Link
US (2) US9477834B2 (ko)
EP (1) EP2812835B1 (ko)
JP (1) JP6185487B2 (ko)
KR (1) KR102069522B1 (ko)
CN (1) CN104115154B (ko)
IL (1) IL233726A (ko)
MY (1) MY170836A (ko)
WO (1) WO2013117896A1 (ko)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US9213828B2 (en) 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
KR101434860B1 (ko) * 2013-08-16 2014-09-02 (주)잉카엔트웍스 해시를 이용한 동적코드의 무결성 검증 방법
CN104881611B (zh) 2014-02-28 2017-11-24 国际商业机器公司 保护软件产品中的敏感数据的方法和装置
KR102218202B1 (ko) * 2014-08-01 2021-02-23 삼성전자주식회사 반도체 장치
EP2993605A1 (en) * 2014-09-02 2016-03-09 Gemalto Sa System and method for protecting a device against attacks on processing flow using a code pointer complement
GB2539199B (en) * 2015-06-08 2018-05-23 Arm Ip Ltd Apparatus and methods for transitioning between a secure area and a less-secure area
GB2540388B (en) * 2015-07-15 2019-01-23 Advanced Risc Mach Ltd Secure mode state data access tracking
WO2017114702A1 (en) * 2015-12-31 2017-07-06 Koninklijke Philips N.V. Wireless communication system with multiple security levels
FR3047587B1 (fr) * 2016-02-10 2023-01-13 Dolphin Integration Sa Dispositif de traitement muni d'un mode d'acces a des donnees sensibles.
GB2550903B (en) * 2016-05-27 2019-06-12 Arm Ip Ltd Context data control
US10671744B2 (en) 2016-06-23 2020-06-02 Intel Corporation Lightweight trusted execution for internet-of-things devices
US10540287B2 (en) * 2017-05-12 2020-01-21 Samsung Electronics Co., Ltd Spatial memory streaming confidence mechanism
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10534609B2 (en) * 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
CN107563224B (zh) * 2017-09-04 2020-07-28 浪潮集团有限公司 一种多用户物理隔离方法及装置
KR102416501B1 (ko) * 2017-09-20 2022-07-05 삼성전자주식회사 전자 장치 및 그의 제어 방법
KR102495643B1 (ko) * 2018-03-26 2023-02-06 삼성전자주식회사 입력 수단에 따른 어플리케이션으로 사용자 입력을 전달하는 모바일 전자 장치 및 방법
US11171983B2 (en) * 2018-06-29 2021-11-09 Intel Corporation Techniques to provide function-level isolation with capability-based security
US11188639B2 (en) * 2018-07-19 2021-11-30 Intel Corporation System, method and apparatus for automatic program compartmentalization
CN109086162B (zh) * 2018-08-15 2021-12-24 中国农业银行股份有限公司 一种内存诊断方法和装置
GB2577878B (en) 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
JP2019096338A (ja) * 2019-02-04 2019-06-20 ルネサスエレクトロニクス株式会社 半導体装置および半導体装置販売モデル
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception
GB2589895B (en) * 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
CN112507399B (zh) * 2020-12-08 2021-09-14 福州富昌维控电子科技有限公司 一种固件和用户程序隔离保护方法及终端
US20220188463A1 (en) * 2020-12-16 2022-06-16 International Business Machines Corporation Method and system for on demand control of hardware support for software pointer authentification in a computing system

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
WO2010004240A1 (en) * 2008-07-10 2010-01-14 Cambridge Consultants Limited Data processing apparatus, for example using modes
US20100082927A1 (en) * 2008-10-01 2010-04-01 Sebastien Riou Secure memory interface

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4177514A (en) * 1976-11-12 1979-12-04 General Electric Company Graph architecture information processing system
US4519032A (en) * 1982-06-09 1985-05-21 At&T Bell Laboratories Memory management arrangement for microprocessor systems
US4488227A (en) 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US5590332A (en) 1995-01-13 1996-12-31 Baker; Henry G. Garbage collection, tail recursion and first-class continuations in stack-oriented languages
JPH0991154A (ja) * 1995-09-25 1997-04-04 Hitachi Constr Mach Co Ltd スタック割り当て方法、制御装置
US5812850A (en) 1995-11-13 1998-09-22 Object Technology Licensing Corp. Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution
JPH10228421A (ja) 1997-02-14 1998-08-25 Nec Ic Microcomput Syst Ltd メモリアクセス制御回路
JP3716604B2 (ja) 1998-03-24 2005-11-16 富士電機機器制御株式会社 情報処理装置
CA2309627A1 (en) 1998-09-25 2000-04-06 Hughes Electronics Corporation An apparatus for providing a secure processing environment
US6363474B1 (en) 1999-06-30 2002-03-26 Bull Hn Information Systems Inc. Process switching register replication in a data processing system
US7213247B1 (en) * 2000-01-10 2007-05-01 Wind River Systems, Inc. Protection domains for a computer operating system
US6993663B1 (en) 2000-08-31 2006-01-31 Microsoft Corporation Input buffer overrun checking and prevention
JP3786575B2 (ja) * 2000-11-20 2006-06-14 株式会社ルネサステクノロジ データ処理装置
GB2369464B (en) * 2000-11-27 2005-01-05 Advanced Risc Mach Ltd A data processing apparatus and method for saving return state
EP1331539B1 (en) 2002-01-16 2016-09-28 Texas Instruments France Secure mode for processors supporting MMU and interrupts
US20040003377A1 (en) 2002-06-28 2004-01-01 Di Loreto Michael A. Converting byte code instructions to a new instruction set
GB0226874D0 (en) 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
GB0226906D0 (en) 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Virtual to physical memory address mapping within a system having a secure domain and a non-secure domain
GB2396930B (en) 2002-11-18 2005-09-07 Advanced Risc Mach Ltd Apparatus and method for managing access to a memory
US20040168047A1 (en) 2003-02-24 2004-08-26 Matsushita Electric Industrial Co., Ltd. Processor and compiler for creating program for the processor
JP2004280801A (ja) 2003-02-24 2004-10-07 Matsushita Electric Ind Co Ltd プロセッサおよびこのプロセッサ用のプログラムを生成するコンパイラ装置
EP1480046A1 (en) 2003-05-23 2004-11-24 Interuniversitair Microelektronica Centrum ( Imec) A method for determining the current-voltage characteristic of a snap-back device
US20050044292A1 (en) 2003-08-19 2005-02-24 Mckeen Francis X. Method and apparatus to retain system control when a buffer overflow attack occurs
US7120794B2 (en) * 2003-10-29 2006-10-10 Qualcomm Inc. System for invoking a privileged function in a device
US7607133B2 (en) 2004-02-11 2009-10-20 Arm Limited Interrupt processing control
US7401210B2 (en) 2005-03-30 2008-07-15 Arm Limited Selecting subroutine return mechanisms
US7665143B2 (en) 2005-05-16 2010-02-16 Microsoft Corporation Creating secure process objects
US7917753B2 (en) 2005-05-16 2011-03-29 Texas Instruments Incorporated Transferring control between programs of different security levels
JP4519738B2 (ja) 2005-08-26 2010-08-04 株式会社東芝 メモリアクセス制御装置
US8959339B2 (en) 2005-12-23 2015-02-17 Texas Instruments Incorporated Method and system for preventing unauthorized processor mode switches
US8621607B2 (en) 2006-05-18 2013-12-31 Vmware, Inc. Computational system including mechanisms for tracking taint
US7681000B2 (en) * 2006-07-10 2010-03-16 Silverbrook Research Pty Ltd System for protecting sensitive data from user code in register window architecture
DE602007006215D1 (de) 2006-09-06 2010-06-10 Silicon Hive Bv Datenverarbeitungsschaltung mit mehreren anweisungchaltung und scheduling-verfahren für eine solche datenschaltung
GB2448149B (en) 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
GB2448151B (en) 2007-04-03 2011-05-04 Advanced Risc Mach Ltd Memory domain based security control within data processing systems
US8578483B2 (en) 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
US8051467B2 (en) 2008-08-26 2011-11-01 Atmel Corporation Secure information processing
JP2010186386A (ja) 2009-02-13 2010-08-26 Oki Semiconductor Co Ltd プロセッサ
GB2471138B (en) 2009-06-19 2014-08-13 Advanced Risc Mach Ltd Handling integer and floating point registers during a context switch
GB2478733B (en) 2010-03-15 2013-08-14 Advanced Risc Mach Ltd Apparatus and method for handling exception events
GB2482701C (en) 2010-08-11 2018-12-26 Advanced Risc Mach Ltd Illegal mode change handling
US9202071B2 (en) 2012-02-08 2015-12-01 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9213828B2 (en) 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
WO2010004240A1 (en) * 2008-07-10 2010-01-14 Cambridge Consultants Limited Data processing apparatus, for example using modes
US20100082927A1 (en) * 2008-10-01 2010-04-01 Sebastien Riou Secure memory interface

Also Published As

Publication number Publication date
EP2812835B1 (en) 2019-03-20
US9477834B2 (en) 2016-10-25
US20170024557A1 (en) 2017-01-26
IL233726A0 (en) 2014-09-30
MY170836A (en) 2019-09-06
EP2812835A1 (en) 2014-12-17
CN104115154B (zh) 2017-09-29
WO2013117896A1 (en) 2013-08-15
JP6185487B2 (ja) 2017-08-23
US10169573B2 (en) 2019-01-01
US20130205403A1 (en) 2013-08-08
KR102069522B1 (ko) 2020-01-23
JP2015510189A (ja) 2015-04-02
IL233726A (en) 2017-09-28
CN104115154A (zh) 2014-10-22

Similar Documents

Publication Publication Date Title
US10169573B2 (en) Maintaining secure data isolated from non-secure access when switching between domains
JP6204479B2 (ja) 安全なドメインとより安全性の低いドメインの間で切り替えるときに安全ではないアクセスから安全なデータ及びプログラム・コードを保護するためのデータ処理装置及び方法
JP6209611B2 (ja) 安全なドメイン及びより安全性の低いドメインを有するデータ処理装置における例外処理
JP5680679B2 (ja) 例外イベントを取り扱うための装置および方法
EP2812836B1 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
US10140448B2 (en) Systems and methods of asynchronous analysis of event notifications for computer security applications
KR102192835B1 (ko) 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호
US9202071B2 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
WO2012020238A1 (en) Illegal mode change handling
JP7432586B2 (ja) スタック・ポインタを検証すること
US9596261B1 (en) Systems and methods for delivering context-specific introspection notifications
US9536084B1 (en) Systems and methods for delivering event-filtered introspection notifications
US9531735B1 (en) Systems and methods for delivering introspection notifications from a virtual machine
EP3649549B1 (en) Context data management

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