KR102467842B1 - 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템 - Google Patents

인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템 Download PDF

Info

Publication number
KR102467842B1
KR102467842B1 KR1020170133470A KR20170133470A KR102467842B1 KR 102467842 B1 KR102467842 B1 KR 102467842B1 KR 1020170133470 A KR1020170133470 A KR 1020170133470A KR 20170133470 A KR20170133470 A KR 20170133470A KR 102467842 B1 KR102467842 B1 KR 102467842B1
Authority
KR
South Korea
Prior art keywords
function
path
core
path identifier
called
Prior art date
Application number
KR1020170133470A
Other languages
English (en)
Other versions
KR20190041793A (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 KR1020170133470A priority Critical patent/KR102467842B1/ko
Priority to US15/962,558 priority patent/US10747644B2/en
Priority to CN201810893707.8A priority patent/CN109669722B/zh
Publication of KR20190041793A publication Critical patent/KR20190041793A/ko
Application granted granted Critical
Publication of KR102467842B1 publication Critical patent/KR102467842B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1451Management of the data involved in backup or backup restore by selection of backup contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields

Abstract

본 개시의 기술적 사상의 일측면에 따른 코어의 인스트럭션 실행 방법은, 제1 함수를 호출하는 단계, 제1 함수 내에서 제2 함수를 호출하는 단계, 및 제2 함수가 종료되고 돌아올 주소를 나타내는 리턴 어드레스를 이용하여 호출된 함수들의 경로 정보를 내포하는 경로 식별자를 업데이트 하는 단계를 포함할 수 있다.

Description

인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템{CORE EXECUTING INSTRUCTIONS AND SYSTEM COMPRISING THE SAME}
본 개시의 기술적 사상은 코어 시스템에 관한 것으로서, 자세하게는 인스트럭션들을 실행하는 코어의 인스트럭션 실행 방법, 코어의 디버깅 정보 수집 방법 및 이를 이용한 디버깅 방법 및 장치에 관한 것이다.
컴퓨팅 시스템을 포함한 다양한 시스템에서 코어는 다양한 연산 또는 인스트럭션(또는 명령)을 실행한다. 코어는 메모리 상에서 일정하게 증가하는 주소의 위치에 저장된 인스트럭션들을 실행하던 중 함수를 호출하는 경우, 함수가 저장된 주소로 점프(jump)하여 함수를 실행하게 된다.
코어가 인스트럭션들을 실행하는 과정에서 다양한 오류가 발생할 수 있다. 시스템은 상기 오류가 발생한 이유 또는 상기 오류에 대한 분석을 포함하는 디버깅 동작을 지원할 수 있다. 위와 같은 디버깅 동작을 수행하기 위해 함수 및 인스트럭션들이 실행된 로그 정보를 필요로 하게 된다.
본 개시의 기술적 사상은 코어를 포함하는 코어 시스템에서, 코어의 동작 중 호출된 함수들의 경로를 나타내는 정보를 저장하고, 상기 정보를 이용하여 디버깅을 지원하기 위한 방법 및 장치를 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 코어의 인스트럭션 실행 방법은, 제1 함수를 호출하는 단계, 제1 함수 내에서 제2 함수를 호출하는 단계 및 제2 함수가 종료되고 돌아올 주소를 나타내는 리턴 어드레스를 이용하여 호출된 함수들의 경로 정보를 내포하는 경로 식별자를 업데이트 하는 단계를 포함할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 코어 시스템은, 인스트럭션들을 실행하고, 인스트럭션들의 실행 중 제1 함수가 호출되는 경우, 호출된 함수들의 경로 정보를 내포하는 경로 식별자를 업데이트 하는 코어, 인스트럭션들의 적어도 일부 또는 인스트럭션들의 실행에 필요한 데이터를 저장하고, 경로 식별자를 저장하는 비휘발성 메모리 및 디버깅 모드에서, 비휘발성 메모리에 접근하여 경로 식별자를 독출하는 디버깅 로직을 포함할 수 있고, 코어는, 백업 이벤트가 발생하는 경우, 경로 식별자를 비휘발성 메모리에 저장할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 디버깅 장치의 코어 시스템 디버깅 방법은, 코어 시스템에 디버깅 정보를 요구하는 디버깅 제어 신호를 송신하는 단계, 코어 시스템으로부터 코어 시스템에서 호출된 함수들의 함수 경로 정보를 내포하는 경로 식별자를 수신하는 단계 및 수신된 경로 식별자를 디버깅 장치에 저장된 프로필과 비교하여 함수 경로 정보를 추출하는 단계를 포함할 수 있다.
본 개시의 예시적 실시예에 따른 코어 및 디버깅 장치의 동작 방법에 의하면, 코어 시스템에서 함수 호출 경로에 관한 정보를 간소화하여 저장함으로써, 로그 정보의 저장을 위한 메모리 공간을 감소시킬 수 있다.
도 1은 본 개시의 예시적 실시예에 따른 코어 시스템을 나타낸다.
도 2는 본 개시의 예시적 실시예에 따른 레지스터 유닛을 나타낸다.
도 3은 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정을 나타낸다.
도 4는 본 개시의 예시적 실시예에 따른 경로 관리 로직을 나타낸다.
도 5는 본 개시의 예시적 실시예에 따른 코어의 인스트럭션 실행 순서도를 나타낸다.
도 6은 본 개시의 예시적 실시예에 따른 경로 관리 로직을 나타낸다.
도 7은 본 개시의 예시적 실시예에 따른 경로 관리 로직의 업데이트 수행 순서도를 나타낸다.
도 8은 본 개시의 예시적 실시예에 따른 경로 관리 로직을 나타낸다.
도 9a는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정을 나타낸다.
도 9b는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정을 나타낸다.
도 9c는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정을 나타낸다.
도 10은 본 개시의 예시적 실시예에 따른 코어 시스템 및 디버깅 장치를 나타낸다.
도 11은 본 개시의 예시적 실시예에 따른 디버깅 장치를 나타낸다.
도 12는 본 개시의 예시적 실시예에 따른 프로필 메모리를 나타낸다.
도 13은 본 개시의 예시적 실시예에 따른 코어 시스템 및 디버깅 장치를 나타낸다.
도 14는 본 개시의 예시적 실시예에 따른 컴퓨팅 플랫폼을 나타낸다.
이하, 첨부한 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명한다.
도 1은 본 개시의 예시적 실시예에 따른 코어 시스템(10)을 나타낸다. 코어 시스템(10)은 코어(100), 디버깅 로직(200), 비휘발성 메모리(300) 및 휘발성 메모리(400)를 포함할 수 있다.
코어(100)는 디코더(110), 제어 로직(120), 연산부(140), 레지스터 유닛(150) 및 경로 관리 로직(160)을 포함할 수 있다. 디코더(110) 및 제어 로직(120)은 제어 로직(130)으로 총괄적으로 지칭될 수 있다.
디코더(110)는, 외부로부터 수신된 인스트럭션을 디코딩 하여, 디코딩 된 인스트럭션을 제어 로직(120)에 제공할 수 있다. 예를 들어, 코어(100)는 코어(100) 외부의 비휘발성 메모리(300)로부터 인스트럭션을 수신할 수 있고, 또한 휘발성 메모리(400)에 캐시 된 인스트럭션을 휘발성 메모리(400)로부터 수신할 수도 있다. 또한 예를 들어, 디코더(110)는 레지스터 유닛(150)에 포함된 명령 레지스터가 외부의 메모리로부터 수신한 인스트럭션을 명령 레지스터로부터 수신할 수 있고, 수신된 인스트럭션을 디코딩 하여 제어 로직(120)에 제공할 수 있다. 제어 로직(120)은 디코딩 된 인스트럭션에 대응하는 동작 수행을 제어할 수 있다. 예를 들어, 제어 로직(120)은 연산부(140)를 제어하여 소정의 연산 동작 수행을 제어할 수 있다.
레지스터 유닛(150)은 다수의 레지스터 정보들이 저장된 복수의 레지스터들을 포함할 수 있다. 각각의 레지스터 별로 각각의 레지스터 정보가 저장될 수 있다. 예를 들어, 레지스터 유닛(150)은 함수가 호출될 때 다시 돌아올 위치를 나타내는 리턴 어드레스(Return Address; RA)를 저장하는 링크 레지스터(158)를 포함할 수 있다. 링크 레지스터(158) 외에도, 레지스터 유닛(150)은 명령 레지스터, 어드레스 레지스터, 데이터 레지스터, 프로그램 카운터 레지스터, 스택 포인터 레지스터 및 프로그램 상태 레지스터 등 중 적어도 하나를 포함할 수 있다. 코어(100)는 레지스터 유닛(150)에 저장된 다수의 레지스터 정보들을 기반으로 인스트럭션을 실행할 수 있고, 결과적으로 복수의 인스트럭션들을 포함하는 프로그램을 수행할 수 있다. 레지스터 유닛(150)에 관해서는 도 2를 참조하여 보다 자세히 설명될 수 있다.
경로 관리 로직(160)은 코어(100)가 인스트럭션을 실행하는 중 함수들이 호출되는 경우, 함수들이 호출된 경로에 관한 정보를 관리할 수 있다. 예를 들어, 경로 관리 로직(160)은 레지스터 유닛(150)의 링크 레지스터(158)로부터 리턴 어드레스(RA)를 수신할 수 있고, 리턴 어드레스(RA)를 이용해 함수가 호출되는 경로 정보를 내포하는 경로 식별자(Path Identifier; PI)를 생성 및 업데이트 할 수 있다. 코어(100)에 백업 이벤트가 발생하는 경우, 제어 로직(120)은 경로 관리 로직(160)에 백업 이벤트 발생 신호(E_OCCUR)를 송신할 수 있고, 경로 관리 로직(160)은 백업 이벤트 발생 신호(E_OCCUR)에 기초하여, 저장된 경로 식별자(PI) 및 호출 깊이(Call Depth; CD)를 비휘발성 메모리(300)에 저장할 수 있다. 비휘발성 메모리(300)에 저장된 경로 식별자(PI) 및 호출 깊이(CD)는 디버깅 요청에 따라 디버깅 로직(200)에 제공되어, 디버깅 동작에 이용될 수 있다. 경로 관리 로직(160)의 보다 자세한 동작은 이하의 도면들을 참조하여 설명될 수 있다.
디버깅 로직(200)은 코어 시스템(10) 외부의 호스트(또는 디버깅 장치)로부터 수신된 디버깅 제어 신호에 응답하여, 디버깅 정보를 요청하는 디버깅 정보 요청 신호(DBG_REQ1, DBG_REQ2)를 코어(100) 및/또는 비휘발성 메모리(300)에 제공할 수 있다. 코어(100)는 제1 디버깅 정보 요청 신호(DBG_REQ1)에 응답하여 디버깅에 필요한 다양한 디버깅 정보(DBG_INFO)를 디버깅 로직(200)에 제공할 수 있다. 비휘발성 메모리(300)는 제2 디버깅 정보 요청 신호(DBG_REQ2)에 응답하여 저장된 경로 식별자(PI) 및 호출 깊이(CD)를 디버깅 로직(200)에 제공할 수 있다. 디버깅 로직(200)은 상기 언급된 바와 같이 외부 호스트로부터 수신한 디버깅 제어 신호에 기초하여 코어(100) 및 비휘발성 메모리(300)에 디버깅 정보 요청 신호(DBG_REQ1, DBG_REQ2)를 제공하여 디버깅 정보(DBG_INFO), 경로 식별자(PI) 및 호출 깊이(CD)를 수신할 수도 있지만, 이에 제한되는 것은 아니다. 예를 들어, 디버깅 로직(200)은 일정 주기마다 비휘발성 메모리(300)에 제2 디버깅 정보 요청 신호(DBG_REQ2)를 제공하여 경록 식별자(PI) 및 호출 깊이(CD)를 수신할 수도 있다.
비휘발성 메모리(300)는 코어(100)의 동작에 필요한 인스트럭션 및 데이터를 저장할 수 있다. 코어(100)는 레지스터 유닛(150) 내 저장된 주소 정보에 기초해 비휘발성 메모리(300)에 접근할 수 있고, 비휘발성 메모리(300)는 코어(100)에 각종 인스트럭션 및/또는 데이터를 제공할 수 있다. 비휘발성 메모리(300)는 낸드 플래시 메모리(NAND Flash Memory), 수직형 낸드 플래시 메모리(Vertical NAND; VNAND), 노아 플래시 메모리(NOR Flash Memory), 저항성 램(Resistive Random Access Memory; RRAM), 상변화 메모리(Phase-Change Memory; PRAM), 자기저항 메모리(Magnetoresistive Random Access Memory; MRAM), 강유전체 메모리(Ferroelectric Random Access Memory; FRAM), 스핀주입 자화반전 메모리(Spin Transfer Torque Random Access Memory; STT-RAM) 등 중 적어도 하나를 포함할 수 있다.
휘발성 메모리(400)는 코어(100)의 프로그램 수행시에 사용 빈도가 높은 데이터가 저장됨으로써, 휘발성 메모리(400)에 비하여 상대적으로 입출력 속도가 느린 외부 메모리 장치로의 액세스 빈도를 줄일 수 있다. 휘발성 메모리(400)는 캐시(Cache)로 구현될 수 있으며, 예를 들어, 코어(100)는 프로그램 수행 시에 캐시(400)에 저장된 캐시 데이터를 이용할 수 있다. 휘발성 메모리(400)는 DRAM(Dynamic Random Access Memory), SDRAM(Synchronous DRAM), DDR SDRAM(Double Data Rate SDRAM), LPDDR SDRAM(Low Power Double Data Rate SDRAM), GDDR SDRAM(Graphics Double Data Rate SDRAM), RDRAM(Rambus DRAM) 및 SRAM(Static RAM) 등 중 적어도 하나를 포함할 수 있다.
상기 개시된 코어(100), 디버깅 로직(200) 및 휘발성 메모리(400)는 하나의 장치로 구현될 수 있다. 예를 들어, 어플리케이션 프로세서는 코어(100), 디버깅 로직(200) 및 휘발성 메모리(400)를 포함할 수 있고, 코어 시스템(10)은 어플리케이션 프로세서 및 어플리케이션 프로세서 외부의 비휘발성 메모리(300)를 포함할 수 있다. 하지만 이에 제한되는 것은 아니며, 예를 들어, 상기 개시된 코어(100), 디버깅 로직(200), 비휘발성 메모리(300) 및 휘발성 메모리(400)가 하나의 장치로 구현될 수 있다. 예를 들어, 코어(100), 디버깅 로직(200), 비휘발성 메모리(300) 및 휘발성 메모리(400)는 하나의 보드 상에 구현될 수도 있다.
본 개시의 예시적 실시예에 따라, 경로 관리 로직(160)은 코어(100) 내 링크 레지스터(158)에 저장되는 리턴 어드레스(RA)를 이용해 호출되는 함수들의 정보를 내포하는 경로 식별자(PI)를 생성 및 업데이트 할 수 있고, 호출된 함수의 개수를 나타내는 호출 깊이(CD)를 생성 및 업데이트 할 수도 있다. 백업 이벤트가 발생하는 경우, 제어 로직(120)이 제공하는 백업 이벤트 발생 신호(E_OCCUR)에 기초하여 경로 관리 로직(160)은 경로 식별자(PI) 및 호출 깊이(CD)를 비휘발성 메모리(300)에 저장할 수 있다. 디버깅 로직(200)은 외부 호스트의 디버깅 제어 신호에 따라 제2 디버깅 정보 요청 신호(DBG_REQ2)를 비휘발성 메모리(300)에 제공하여 경로 식별자(PI) 및 호출 깊이(CD)를 수신할 수 있다. 디버깅 로직(200)은 수신된 경로 식별자(PI) 및 호출 깊이(CD)를 외부 호스트에 제공할 수 있다. 외부 호스트는 경로 식별자(PI) 및 호출 깊이(CD)를 이용해 코어(100) 내에서 호출된 함수들의 경로를 얻어낼 수 있다. 위와 같이 호출된 모든 함수들의 로그 정보를 일일이 저장할 필요 없이 경로 정보를 포함하는 경로 식별자(PI) 및 호출 깊이(CD) 만을 저장함으로써, 적은 용량의 비휘발성 메모리(300) 만을 이용해 디버깅에 필요한 정보들을 저장할 수 있다.
도 2는 본 개시의 예시적 실시예에 따른 레지스터 유닛(150)을 나타낸다. 레지스터 유닛(150)은 어드레스 레지스터(152), 프로그램 카운터 레지스터(154), 스택 포인터 레지스터(156) 및 링크 레지스터(158)를 포함할 수 있다. 도 2에 개시된 레지스터 유닛(150)의 구성은 예시적인 것일 뿐이며, 레지스터 유닛(150)의 구성은 도 2에 개시된 구성들 중 일부만 포함할 수도 있으며, 다른 다양한 종류의 레지스터들을 더 포함할 수 도 있다. 또한 예를 들어, 프로그램 카운터 레지스터(154), 스택 포인터 레지스터(156) 및 링크 레지스터(158)는 하나의 레지스터 뱅크(155)에 포함된 레지스터들일 수 있다.
어드레스 레지스터(152)는 외부 메모리에 데이터를 기입하거나 외부 메모리로부터 데이터를 읽을 때, 상기 데이터의 주소를 나타내는 값을 저장할 수 있다. 프로그램 카운터 레지스터(154)는 코어가 현재 실행중인 인스트럭션의 어드레스를 나타내는 값을 저장할 수 있다. 스택 포인터 레지스터(156)는 현재 사용하고 있는 스택 영역에서 마지막에 데이터가 푸쉬(push)된 곳의 주소를 저장할 수 있다.
코어의 인스트럭션 실행에 있어서, 실행되는 인스트럭션들이 저장되는 주소는 보통 일정하게 증가할 수 있고, 프로그램 카운터 레지스터(154)에 저장되는 값은 순차적으로 증가할 수 있다. 하지만 코어가 실행하는 인스트럭션이 저장되는 주소가 일정하게 증가하지 않고, 다른 주소로 건너뛰게 되는 경우가 존재할 수 있다. 이러한 경우를 인스트럭션이 저장된 주소가 점프(jump)한다고 칭할 수 있다. 예를 들어, 인스트럭션들이 실행되는 도중 함수가 호출되는 경우, 인스트럭션이 저장된 주소는 점프할 수 있다. 이 때 링크 레지스터(158)는 함수가 종료되고 돌아올 위치의 주소를 나타내는 리턴 어드레스를 저장할 수 있다.
본 개시의 예시적 실시예에 따라, 코어는 함수가 호출되는 경우 링크 레지스터(158)에 저장되는 리턴 어드레스를 이용하여 호출되는 함수들의 경로 정보를 내포하는 경로 식별자를 생성해낼 수 있다. 예를 들어, 도 1을 함께 참조하면, 코어(100) 내의 경로 관리 로직(160)은 함수가 호출되는 경우, 링크 레지스터(158)에 저장되는 리턴 어드레스(RA)를 링크 레지스터(158)로부터 수신할 수 있고, 리턴 어드레스(RA)를 이용하여 경로 식별자(PI)를 생성 또는 업데이트 할 수 있다. 코어(100)가 인스트럭션들을 실행하는 도중 복수의 함수가 호출될 수 있다. 예를 들어, 제1 함수가 호출되고, 제1 함수 내에서 제2 함수가 호출될 수 있다. 이 때, 경로 관리 로직(160)은 제1 함수가 호출될 때 링크 레지스터(158)에 저장되는 리턴 어드레스를 이용해 경로 식별자를 생성할 수 있고, 제2 함수가 호출될 때 링크 레지스터(158)에 저장되는 리턴 어드레스를 이용해 경로 식별자를 업데이트 할 수 있다. 호출되는 함수들의 경로 정보를 리턴 어드레스를 이용하여 간소화하여 저장함으로써 디버깅 정보 저장에 소모되는 비휘발성 메모리의 용량을 감소시킬 수 있다.
도 3은 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정(135)을 나타낸다. 코어는 순차적으로 복수의 인스트럭션들을 실행할 수 있다. 또한 코어가 복수의 인스트럭션들을 실행하는 과정(135) 중에 함수가 호출될 수 있다. 도 3은 인스트럭션 실행 과정(135) 중 a() 함수가 호출되고, a() 함수 내에서 b() 함수가 호출되고, b() 함수 내에서 c() 함수가 호출되는 예시적인 과정을 나타낸다.
코어의 인스트럭션 실행 과정(135) 중 a() 함수가 호출될 수 있다(①). a() 함수가 호출되면, 주소의 점프가 일어날 수 있다. 따라서 a() 함수가 호출되는 경우, a() 함수가 종료되고 돌아올 위치의 주소를 나타내는 제1 리턴 어드레스(RA_a)가 링크 레지스터(158)에 저장될 수 있다. 링크 레지스터(158)는 제1 리턴 어드레스(RA_a)를 휘발성 메모리(400)에 송신할 수 있고, 휘발성 메모리(400)는 제1 리턴 어드레스(RA_a)를 저장할 수 있다.
a() 함수 내에서 인스트럭션들이 실행되는 과정 중 b() 함수가 호출될 수 있다(②). b() 함수가 호출되면, 주소의 점프가 한번 더 일어날 수 있다. 따라서 b() 함수가 호출되는 경우, b() 함수가 종료되고 돌아올 위치의 주소를 나타내는 제2 리턴 어드레스(RA_b)가 링크 레지스터(158)에 저장될 수 있다. 링크 레지스터(158)는 제2 리턴 어드레스(RA_b)를 휘발성 메모리(400)에 송신할 수 있고, 휘발성 메모리(400)는 제2 리턴 어드레스(RA_b)를 저장할 수 있다.
b() 함수 내에서 인스트럭션들이 실행되는 과정 중 c() 함수가 호출될 수 있다(③). c() 함수가 호출되면, 주소의 점프가 한번 더 일어날 수 있다. 따라서 c() 함수가 호출되는 경우, c() 함수가 종료되고 돌아올 위치의 주소를 나타내는 제3 리턴 어드레스(RA_c)가 링크 레지스터(158)에 저장될 수 있다. 링크 레지스터(158)는 제3 리턴 어드레스(RA_c)를 휘발성 메모리(400)에 송신할 수 있고, 휘발성 메모리(400)는 제3 리턴 어드레스(RA_c)를 저장할 수 있다.
도 3과 같이 복수의 함수들이 호출되는 경우, 인스트럭션들이 실행되는 도중 또는 실행된 이후 코어 외부의 디버깅 장치가 코어의 인스트럭션 실행에 대해 디버깅하는 동작을 할 필요가 있을 수 있다. 디버깅 동작을 위해, 코어는 호출된 함수들의 경로 정보를 비휘발성 메모리에 저장할 수 있다. 경로 정보는 호출된 함수들의 목록 및 호출된 함수들의 순서에 관한 정보를 포함할 수 있다. 호출된 함수들의 경로 정보를 비휘발성 메모리에 저장할 때, 호출된 함수들의 인자(argument) 또는 리턴 값(return value) 등과 같은 로그(log) 정보들을 저장하거나 모든 리턴 어드레스들(RA_a, RA_b, RA_c)을 저장하는 경우 비휘발성 메모리의 많은 용량을 이용할 수 있다. 코어는 비휘발성 메모리의 적은 용량을 사용하여 호출된 함수들의 경로 정보를 저장하기 위해 경로 식별자를 생성 및 업데이트 할 수 있다. 예를 들면, 도 1을 함께 참조하면, 경로 관리 로직(160)은 리턴 어드레스(RA)를 이용하여 경로 식별자(PI)를 생성 및 업데이트 할 수 있다. 경로 식별자(PI)의 생성 및 업데이트에 관해서는 이하의 도면들을 통해 보다 자세히 설명된다.
도 4는 본 개시의 예시적 실시예에 따른 경로 관리 로직(160a)을 나타낸다. 경로 관리 로직(160a)은 경로 식별자 생성기(170a)를 포함할 수 있다.
경로 식별자 생성기(170a)는 경로 식별자 메모리(171a) 및 경로 식별자 업데이트 로직(172a)을 포함할 수 있다. 경로 식별자 업데이트 로직(172a)은 함수 호출 로직(173a) 및 함수 팝 로직(164a)을 포함할 수 있다. 경로 식별자 생성기(170a)는 함수가 호출되거나 종료되는 경우 경로 식별자(PI)를 생성 또는 업데이트 할 수 있다. 경로 식별자 생성기(170a)는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합으로 구현될 수 있다.
경로 식별자 메모리(171a)는 경로 식별자(PI)를 저장할 수 있다. 새로운 함수가 호출되거나 호출되었던 함수가 종료되는 경우, 경로 식별자 메모리(171a)는 경로 식별자 메모리(171a)에 저장된 경로 식별자(PI)를 경로 식별자 업데이트 로직(172a)에 제공할 수 있다. 경로 식별자 메모리(171a)는 경로 식별자 업데이트 로직(172a)에 의해 업데이트 된 경로 식별자(PI)를 수신할 수 있고, 업데이트 된 경로 식별자(PI)를 저장할 수 있다. 예를 들어, 경로 식별자 메모리(171a)는 업데이트 된 경로 식별자(PI)를 수신한 경우, 이전에 경로 식별자 메모리(171a)에 저장된 경로 식별자(PI)를 제거하고 업데이트 된 경로 식별자(PI)를 저장할 수 있다. 경로 식별자 생성기(170a)는 코어 내 제어 로직으로부터 백업 이벤트 발생 신호(E_OCCUR)를 수신할 수 있다. 백업 이벤트 발생 신호(E_OCCUR)가 백업 이벤트의 발생을 나타내는 경우, 경로 식별자 메모리(171a)는 경로 식별자 메모리(171a)에 저장된 경로 식별자(PI)를 코어 외부의 비휘발성 메모리에 송신하여 저장할 수 있다.
경로 식별자 업데이트 로직(172a)은 현재 호출된 함수 또는 종료된 함수의 리턴 어드레스(RA_CUR) 및 프로그램 카운터 레지스터에 저장된 PC 값을 수신할 수 있다. PC 값에 따른 주소에 저장된 인스트럭션이 '함수 호출'을 나타내는 경우, 경로 식별자 업데이트 로직(172a) 내에서 함수 호출 로직(173a)에 의해 경로 식별자(PI)는 업데이트 될 수 있다. PC 값에 따른 주소에 저장된 인스트럭션에 '함수 종료'를 나타내는 경우, 경로 식별자 업데이트 로직(172a) 내에서 함수 팝 로직(174a)에 의해 경로 식별자(PI)는 업데이트 될 수 있다.
함수가 호출된 경우, 함수 호출 로직(173a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)를 현재 호출된 함수의 리턴 어드레스(RA_CUR)를 이용해 업데이트 할 수 있다. 예를 들어, 함수 호출 로직(173a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)와 리턴 어드레스(RA_CUR)를 제1 산술 연산하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다. 또한 예를 들어, 함수 호출 로직(173a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)와 리턴 어드레스(RA_CUR)를 합하는 연산을 하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다.
호출되었던 함수가 종료되는 경우, 함수 팝 로직(174a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)를 현재 종료된 함수의 리턴 어드레스(RA_CUR)를 이용해 업데이트 할 수 있다. 예를 들어, 함수 팝 로직(164a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)와 리턴 어드레스(RA_CUR)를 제2 산술 연산하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다. 제2 산술 연산은 제1 산술 연산의 역연산(inverse operation)일 수 있다. 또한 예를 들어, 함수 팝 로직(174a)은 경로 식별자 메모리(171a)로부터 수신된 경로 식별자(PI)에서 리턴 어드레스(RA_CUR)를 감산하는 연산을 하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다.
도 5는 본 개시의 예시적 실시예에 따른 코어의 인스트럭션 실행 순서도를 나타낸다. 도 5는 복수의 함수들이 호출되는 예시적인 실시예를 나타낸다. 특히, 제1 함수가 호출되고 제2 함수가 호출되는 경우 코어의 인스트럭션 실행 순서도를 나타낸다. 도 5는 도 1의 코어 시스템(10)을 참조하여 설명될 수 있다.
코어(100)는 인스트럭션 실행 중, 제1 함수를 호출할 수 있다(S120). 코어(100)는 제1 함수 내에서 적어도 하나의 인스트럭션을 실행할 수 있으며, 이에 제한되는 것은 아니고, 제1 함수의 호출(S120) 이후 다른 인스트럭션의 실행 없이 다음 단계로 진행할 수도 있다.
코어(100) 동작 중 제1 함수가 호출된 뒤, 제1 함수가 종료되기 전에 제1 함수 내에서 제2 함수가 호출될 수 있다(S140). 제2 함수가 호출되는 경우, 링크 레지스터(158)는 제2 함수가 종료되고 돌아올 위치를 나타내는 제2 함수의 리턴 어드레스를 저장할 수 있다. 코어(100)는 제2 함수의 리턴 어드레스를 코어(100) 외부의 휘발성 메모리(400)에 저장할 수 있다. 하지만 이에 제한되는 것은 아니며, 코어(100) 내에 캐시 기능을 수행할 수 있는 메모리가 있는 경우, 코어(100)는 제2 함수의 리턴 어드레스를 코어(100) 내의 캐시 기능을 수행하는 메모리에 저장할 수 있다.
코어(100)는 제2함수의 리턴 어드레스를 이용해 코어(100)에 저장된 경로 식별자(PI)를 업데이트 할 수 있다(S160). 예를 들어, 코어(100) 내의 경로 관리 로직(160)은 경로 관리 로직(160)에 저장된 경로 식별자(PI)와 제2 함수의 리턴 어드레스를 산술 연산하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다. 또한 예를 들어, 코어(100) 내의 경로 관리 로직(160)은 경로 관리 로직(160)에 저장된 경로 식별자(PI)와 제2 함수의 리턴 어드레스를 합하는 연산을 하여 업데이트 된 경로 식별자(PI)를 생성할 수 있다.
코어(100)는 제2 함수를 호출한 이후, 코어(100)에 저장된 호출 깊이(CD)를 1 증가시켜 호출 깊이(CD)를 업데이트 할 수 있다. 호출 깊이에 대해서는 도 6 및 도 7을 참조해 보다 자세히 설명될 수 있다.
코어(100)의 인스트럭션 실행 방법은 제2 함수를 종료하는 단계를 더 포함할 수 있으며, 제2 함수가 종료되는 경우 코어(100)는 제2 함수의 리턴 어드레스를 이용해 경로 식별자 및 호출 깊이를 업데이트 할 수 있다. 예를 들어, 경로 관리 로직(160)은 경로 관리 로직(160)에 저장된 경로 식별자에서 제2 함수의 리턴 어드레스를 감산하는 연산을 하여 업데이트 된 경로 식별자를 생성할 수 있으며, 저장된 호출 깊이를 1 감소시킬 수 있다.
코어(100)는 백업 이벤트가 발생하는 경우, 백업 이벤트 발생 전에 코어(100)에 저장된 경로 식별자를 코어(100) 외부의 비휘발성 메모리(300)에 저장할 수 있다. 백업 이벤트는 제1 유형 백업 이벤트 및 제2 유형 백업 이벤트를 포함할 수 있으며, 이에 대해서는 도 9a, 9b 및 9c를 참조해 보다 자세히 설명될 수 있다.
도 6은 본 개시의 예시적 실시예에 따른 경로 관리 로직(160b)을 나타낸다. 경로 관리 로직(160b)은 경로 식별자 생성기(170b) 및 호출 깊이 생성기(180b)를 포함할 수 있다. 경로 식별자 생성기(170b)에 관한 도 4와 중복되는 설명은 생략한다.
호출 깊이 생성기(180b)는 호출 깊이 메모리(181b) 및 호출 깊이 업데이트 로직(182b)을 포함할 수 있다. 호출 깊이 업데이트 로직(182b)은 호출 깊이 가산 로직(183b) 및 호출 깊이 감산 로직(184b)을 포함할 수 있다. 호출 깊이 생성기(180b)는 코어 내에서 함수가 호출되거나 종료되는 경우 호출 깊이를 생성 또는 업데이트 할 수 있다. 호출 깊이 생성기(180b)는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합으로 구현될 수 있다.
호출 깊이 메모리(181b)는 호출 깊이를 저장할 수 있다. 새로운 함수가 호출되거나 호출되었던 함수가 종료되는 경우, 호출 깊이 메모리(181b)는 호출 깊이 메모리(181b)에 저장된 호출 깊이(CD)를 호출 깊이 업데이트 로직(182b)에 제공할 수 있다. 호출 깊이 메모리(181b)는 호출 깊이 업데이트 로직(182b)에 의해 업데이트 된 호출 깊이(CD)를 수신할 수 있고, 업데이트 된 호출 깊이(CD)를 저장할 수 있다. 예를 들어, 호출 깊이 메모리(181b)는 업데이트 된 호출 깊이(CD)를 수신한 경우, 이전에 호출 깊이 메모리(181b)에 저장된 호출 깊이(CD)를 제거하고 업데이트 된 호출 깊이(CD)를 저장할 수 있다. 호출 깊이 생성기(180b)는 코어 내 제어 로직으로부터 백업 이벤트 발생 신호(E_OCCUR)를 수신할 수 있다. 백업 이벤트 발생 신호(E_OCCUR)가 백업 이벤트의 발생을 나타내는 경우, 호출 깊이 메모리(181b)는 호출 깊이 메모리(181b)에 저장된 호출 깊이(CD)를 코어 외부의 비휘발성 메모리에 송신하여 저장할 수 있다.
호출 깊이 업데이트 로직(182b)은 프로그램 카운터 레지스터에 저장된 PC 값을 수신할 수 있다. PC 값에 따른 주소에 저장된 인스트럭션이 '함수 호출'을 나타내는 경우, 호출 깊이 업데이트 로직(182b) 내에서 호출 깊이 가산 로직(183b)에 의해 호출 깊이(CD)는 업데이트 될 수 있다. PC 값에 따른 주소에 저장된 인스트럭션이 '함수 종료'를 나타내는 경우, 호출 깊이 업데이트 로직(182b) 내에서 호출 깊이 감산 로직(184b)에 의해 호출 깊이(CD)는 업데이트 될 수 있다.
함수가 호출된 경우, 호출 깊이 가산 로직(183b)은 호출 깊이 메모리(181b)로부터 수신된 호출 깊이(CD)를 1만큼 증가시켜 업데이트 된 호출 깊이(CD)를 생성할 수 있다.
호출되었던 함수가 종료되는 경우, 호출 깊이 감산 로직(184b)은 호출 깊이 메모리(181b)로부터 수신된 호출 깊이(CD)를 1만큼 감소시켜 업데이트 된 호출 깊이(CD)를 생성할 수 있다.
도 6에 개시된 실시예에 따르면, 코어 내의 경로 관리 로직(160b)은 함수가 호출되거나 종료될 때마다 경로 식별자의 업데이트 동작만 수행하는 것이 아니라, 호출 깊이의 업데이트 동작도 수행하여 백업 이벤트가 발생하는 경우, 경로 식별자 및 호출 깊이를 비휘발성 메모리에 제공할 수 있다. 디버깅 장치의 요청에 의해 비휘발성 메모리에 저장된 경로 식별자 및 호출 깊이는 디버깅 장치에 전달될 수 있다. 디버깅 장치는 경로 식별자 뿐 아니라 호출 깊이도 이용하여 호출된 함수들의 경로 정보를 추출해낼 수 있다. 호출 깊이를 추가적으로 이용함으로써 경로 정보 추출의 신뢰성을 향상시킬 수 있다.
도 7은 본 개시의 예시적 실시예에 따른 경로 관리 로직의 업데이트 수행 순서도를 나타낸다. 도 7은 도 6을 함께 참조하여 설명될 수 있다.
경로 관리 로직(160b)이 수신한 현재 PC 값에 따른 위치에 저장된 인스트럭션이 함수 호출(Function Call; FC)을 나타내는지, 함수 종료(POP)를 나타내는지 판단할 수 있다(S210). 이하에서, 함수가 호출되는 경우(INSTRUCTION@PC≡'FC')와 호출되었던 함수가 종료되는 경우(INSTRUCTION@PC≡'POP')로 나누어 경로 식별자 및 호출 깊이가 업데이트 될 수 있다.
현재 PC 값에 따른 위치에 저장된 인스트럭션이 함수 호출(FC)을 나타내는 경우, 경로 식별자 생성기(170b) 내의 함수 호출 로직(173b)은 경로 식별자 메모리(171b)에 저장된 경로 식별자(PI_EX)에 현재 호출된 함수의 리턴 어드레스(RA_CUR)를 합하는 연산을 하여 업데이트 된 경로 식별자(PI_UPD)를 생성할 수 있다(S220). 이 경우, 호출 깊이 생성기(180b) 내의 호출 깊이 가산 로직(183b)은 호출 깊이 메모리(181b)에 저장된 호출 깊이(CD_EX)에 1을 더하는 연산을 하여 업데이트 된 호출 깊이(CD_UPD)를 생성할 수 있다(S230).
현재 PC 값에 따른 위치에 저장된 인스트럭션이 함수 종료(POP)를 나타내는 경우, 경로 식별자 생성기(170b) 내의 함수 팝 로직(174b)은 경로 식별자 메모리(171b)에 저장된 경로 식별자(PI_EX)에서 현재 종료된 함수의 리턴 어드레스(RA_CUR)를 감산하는 연산을 하여 업데이트 된 경로 식별자(PI_UPD)를 생성할 수 있다(S240). 이 경우, 호출 깊이 생성기(180b) 내의 호출 깊이 감산 로직(184b)은 호출 깊이 메모리(181b)에 저장된 호출 깊이(CD_EX)에서 1을 빼는 연산을 하여 업데이트 된 호출 깊이(CD_UPD)를 생성할 수 있다(S250).
도 8은 본 개시의 예시적 실시예에 따른 경로 관리 로직(160c)을 나타낸다. 경로 관리 로직(160c)은 경로 식별자 생성기(170c) 및 호출 깊이 생성기(180c)를 포함할 수 있다. 경로 식별자 생성기(170c) 및 호출 깊이 생성기(180c)에 관한 도 4 및 도 6과 중복되는 설명은 생략한다.
도 8의 예시적 실시예에 따른 경로 식별자 생성기(170c)는 제1 연산을 이용해 제1 경로 식별자(PI_1)를 관리할 수 있고, 제2 연산을 이용해 제2 경로 식별자(PI_2)를 관리할 수 있다.
예를 들어, 함수가 호출되는 경우, 함수 호출 로직(173c)은 경로 식별자 메모리(171c)로부터 수신된 제1 경로 식별자(PI_1)와 호출된 함수의 리턴 어드레스(RA_CUR)를 제1 연산하여 업데이트 된 제1 경로 식별자(PI_1)를 생성할 수 있고, 경로 식별자 메모리(171c)로부터 수신된 제2 경로 식별자(PI_2)와 호출된 함수의 리턴 어드레스(RA_CUR)를 제2 연산하여 업데이트 된 제2 경로 식별자(PI_2)를 생성할 수 있다.
또한 예를 들어, 호출된 함수가 종료되는 경우, 함수 팝 로직(174c)은 경로 식별자 메모리(171c)로부터 수신된 제1 경로 식별자(PI_1)와 종료된 함수의 리턴 어드레스(RA_CUR)를 제3 연산하여 업데이트 된 제1 경로 식별자(PI_1)를 생성할 수 있고, 경로 식별자 메모리(171c)로부터 수신된 제2 경로 식별자(PI_2)와 종료된 함수의 리턴 어드레스(RA_CUR)를 제4 연산하여 업데이트 된 제2 경로 식별자(PI_2)를 생성할 수 있다. 제3 연산은 제1 연산의 역연산일 수 있고, 제4 연산은 제2 연산의 역연산일 수 있다.
경로 식별자 메모리(171c)는 위와 같이 업데이트 되는 제1 경로 식별자(PI_1) 및 제2 경로 식별자(PI_2)를 저장할 수 있다. 경로 식별자 메모리(171c)는 외부로부터(예를 들어, 제어 로직) 수신되는 백업 이벤트 발생 신호(E_OCCUR)에 기초하여, 저장된 제1 경로 식별자(PI_1) 및 제2 경로 식별자(PI_2)를 비휘발성 메모리에 저장할 수 있다.
하나의 경로 식별자를 이용하지 않고 제1 경로 식별자(PI_1) 및 제2 경로 식별자(PI_2)를 이용하는 도 8과 같은 실시예에서, 디버깅 장치는 제1 경로 식별자(PI_1), 제2 경로 식별자(PI_2) 및 호출 깊이(CD)를 이용해 호출된 함수들의 경로 정보를 추출하는 동작을 수행할 수 있다. 복수의 경로 식별자를 이용하여 경로 정보를 추출함으로써 경로 정보 추출 동작의 신뢰성을 향상시킬 수 있다.
도 9a는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정(135a)을 나타낸다. 코어는 순차적으로 복수의 인스트럭션들을 실행할 수 있다. 또한 코어가 복수의 인스트럭션들을 실행하는 과정(135a) 중에 복수의 함수들이 호출될 수 있다. 도 9a는 인스트럭션 실행 과정(135a) 중 a() 함수가 호출되고, a() 함수 내에서 b() 함수가 호출되고, b() 함수 내에서 c() 함수가 호출되기 전에 예외(EXCEPTION) 상황이 발생하는 예시적인 과정을 나타낸다. 도 9a에 개시된 상황은 설명의 편의를 위한 예시적인 것일 뿐이며, 함수의 호출 도중 예외(EXCEPTION) 상황이 발생하는 모든 경우 도 9a의 설명은 적용될 수 있다.
코어의 인스트럭션 실행 과정(135a) 중에 a() 함수가 호출될 수 있다(①). a() 함수가 호출되는 경우, 링크 레지스터(158a) 및 휘발성 메모리(400a)에 제1 리턴 어드레스(RA_a)가 저장될 수 있다. 경로 관리 로직(160a)은 경로 식별자(PI)를 제1 리턴 어드레스(RA_a)로 초기화하여 생성할 수 있고, 호출 깊이(CD)를 1로 초기화하여 생성할 수 있다.
a() 함수 내에서 b() 함수가 호출될 수 있다(②). b() 함수가 호출되는 경우, 링크 레지스터(158a) 및 휘발성 메모리(400a)에 제2 리턴 어드레스(RA_b)가 저장될 수 있다. 또한 경로 관리 로직(160a)은 기존에 저장된 경로 식별자(PI)에 제2 리턴 어드레스(RA_b)를 더하는 연산을 하여 경로 식별자(PI)를 업데이트 할 수 있다. 연산이 합 연산인 것으로 설명되지만, 합 연산에 제한되는 것은 아니고 다양한 산술 연산이 사용될 수 있다. 경로 관리 로직(160a)은 호출 깊이(CD)를 1만큼 증가시켜 2로 업데이트 할 수 있다.
b() 함수 내에서 c() 함수가 호출되기 전에 예외(EXCEPTION) 상황이 발생할 수 있다. 예외 상황은 인스트럭션 실행 도중 하드웨어 또는 소프트웨어에 오류가 발생한 경우 및/또는 외부의 요청에 의해 코어가 특정 동작 모드에 진입하는 경우를 포함할 수 있다. 상기 코어의 특정 동작 모드는 비제한적인 예시로서, IRQ(Interrupt ReQuest) 모드, FIQ(Fast Interrupt request) 모드, SVC(SuperVisor Call) 모드 및 ABT(ABorT) 모드를 포함할 수 있다. 이와 같이 함수 내에서 예외 상황이 발생한 경우, 제1 유형의 백업 이벤트가 발생했다고 칭할 수 있다.
위와 같은 제1 유형의 백업 이벤트가 발생한 경우, 외부의 호스트(또는 디버깅 장치)는 제1 유형의 백업 이벤트 발생 이전까지의 코어의 인스트럭션 실행에 대해 디버깅 동작을 수행하고자 할 수 있다. 따라서 코어 내의 제어 로직은 백업 이벤트 발생 신호(E_OCCUR)를 경로 관리 로직(160a)에 송신할 수 있다. 경로 관리 로직(160a)은 이벤트 발생 신호(E_OCCUR)의 수신에 기초하여, 저장하고 있던 경로 식별자(PI) 및 호출 깊이(CD)를 코어 외부의 비휘발성 메모리(300a)에 저장할 수 있다. 이 때 저장되는 경로 식별자(PI)는 제1 리턴 어드레스(RA_a)와 제2 리턴 어드레스(RA_b)를 합한 값일 수 있고, 저장되는 호출 깊이(CD)는 2일 수 있다.
이와 같이 예외 상황이 발생한 경우, 즉 제1 유형의 백업 이벤트가 발생한 경우, 코어는 예외 상황 발생 전까지 호출된 함수들의 경로 정보를 내포하는 경로 식별자(PI) 및 호출된 함수들의 개수를 나타내는 호출 깊이(CD)를 비휘발성 메모리에 저장할 수 있다. 코어 외부의 호스트(또는 디버깅 장치)는 비휘발성 메모리로부터 저장된 경로 식별자(PI) 및 호출 깊이(CD)를 얻어낼 수 있고, 이들을 이용하여 예외 상황 발생 전까지 호출된 함수들의 경로 정보를 추출해낼 수 있다.
도 9b는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정(135b)을 나타낸다. 코어는 순차적으로 복수의 인스트럭션들을 실행할 수 있다. 또한 코어가 복수의 인스트럭션들을 실행하는 과정(135b) 중에 복수의 함수들이 호출될 수 있다. 도 9b는 인스트럭션 실행 과정(135b) 중 a() 함수가 호출되고, a() 함수 내에서 b() 함수가 호출되고, b() 함수 내에서 c() 함수가 호출되는 예시적인 과정을 나타낸다. 도 9b에 개시된 상황은 설명의 편의를 위한 예시적인 것일 뿐이며, 하나 이상의 함수가 호출되는 모든 경우 도 9b의 설명은 적용될 수 있다.
코어의 인스트럭션 실행 과정(135b) 중에 a() 함수가 호출될 수 있다(①). a() 함수가 호출되는 경우, 링크 레지스터(158b) 및 휘발성 메모리(400b)에 제1 리턴 어드레스(RA_a)가 저장될 수 있다. 경로 관리 로직(160b)은 경로 식별자(PI)를 제1 리턴 어드레스(RA_a)로 초기화하여 생성할 수 있고, 호출 깊이(CD)를 1로 초기화하여 생성할 수 있다.
a() 함수 내에서 b() 함수가 호출될 수 있다(②). b() 함수가 호출되는 경우, 링크 레지스터(158b) 및 휘발성 메모리(400b)에 제2 리턴 어드레스(RA_b)가 저장될 수 있다. 또한 경로 관리 로직(160b)은 기존에 저장된 경로 식별자(PI)에 제2 리턴 어드레스(RA_b)를 더하는 연산을 하여 경로 식별자(PI)를 업데이트 할 수 있다. 연산이 합 연산인 것으로 설명되지만, 합 연산에 제한되는 것은 아니고 다양한 산술 연산이 사용될 수 있다. 경로 관리 로직(160b)은 호출 깊이(CD)를 1만큼 증가시켜 2로 업데이트 할 수 있다.
b() 함수 내에서 c() 함수가 호출될 수 있다(③). c() 함수가 호출되는 경우, 링크 레지스터(158b) 및 휘발성 메모리(400b)에 제3 리턴 어드레스(RA_c)가 저장될 수 있다. 또한 경로 관리 로직(160b)은 기존에 저장된 경로 식별자(PI)에 제3 리턴 어드레스(RA_c)를 더하는 연산을 하여 경로 식별자를 업데이트 할 수 있다. 경로 관리 로직(160b)은 호출 깊이(CD)를 1만큼 증가시켜 3으로 업데이트 할 수 있다.
c() 함수 내에서 다른 함수의 호출 없이 c() 함수가 종료될 수 있다(④). 이와 같이 특정 함수 내에서 다른 함수의 호출 없이 그 함수가 종료되는 경우, 상기 특정 함수를 리프 함수(leaf function)라 칭할 수 있다. 이와 같이 리프 함수가 종료되는 경우, 제2 유형의 백업 이벤트가 발생했다고 칭할 수 있다.
위와 같은 제2 유형의 백업 이벤트가 발생한 경우, 코어 내의 제어 로직은 백업 이벤트 발생 신호(E_OCCUR)를 경로 관리 로직(160b)에 송신할 수 있다. 경로 관리 로직(160b)은 이벤트 발생 신호(E_OCCUR)의 수신에 기초하여, 저장하고 있던 경로 식별자(PI) 및 호출 깊이(CD)를 코어 외부의 비휘발성 메모리(300b)에 저장할 수 있다. 이 때 저장되는 경로 식별자(PI)는 제1 리턴 어드레스(RA_a), 제2 리턴 어드레스(RA_b) 및 제3 리턴 어드레스(RA_c)를 합한 값일 수 있고, 저장되는 호출 깊이(CD)는 3일 수 있다.
이와 같이 리프 함수가 종료되는 경우, 즉 제2 유형의 백업 이벤트가 발생한 경우, 코어는 리프 함수의 종료 전까지 호출된 함수들의 경로 정보를 내포하는 경로 식별자(PI) 및 호출된 함수들의 개수를 나타내는 호출 깊이(CD)를 비휘발성 메모리에 저장할 수 있다. 코어 외부의 호스트(또는 디버깅 장치)는 비휘발성 메모리로부터 저장된 경로 식별자(PI) 및 호출 깊이(CD)를 얻어낼 수 있고, 이들을 이용하여 리프 함수 종료 전까지 호출된 함수들의 경로 정보를 추출해낼 수 있다.
도 9c는 본 개시의 예시적 실시예에 따른 인스트럭션 실행 과정(135c)을 나타낸다. 코어는 순차적으로 복수의 인스트럭션들을 실행할 수 있다. 또한 코어가 복수의 인스트럭션들을 실행하는 과정(135c) 중에 복수의 함수들이 호출될 수 있다. 도 9c는 인스트럭션 실행 과정(135c) 중 a() 함수가 호출되고, a() 함수 내에서 b() 함수가 호출되고, b() 함수 내에서 c() 함수가 호출되며, c() 함수가 종료된 뒤 b() 함수 내에서 d() 함수가 호출되는 예시적인 과정을 나타낸다. 도 9c에 개시된 상황은 설명의 편의를 위한 예시적인 것일 뿐이며, 하나의 함수 내에서 복수의 함수들이 호출되는 모든 경우 도 9c의 설명은 적용될 수 있다. a() 함수, b() 함수 및 c() 함수의 호출 뒤 c() 함수가 종료되는 백업 이벤트의 발생까지는 도 9b의 설명을 참조한다.
c() 함수가 종료될 때(④), 경로 관리 로직은 c() 함수 종료 전에 저장하고있던 경로 식별자(PI) 및 호출 깊이(CD)를 비휘발성 메모리(300c)에 저장할 수 있다. 예를 들어, 비휘발성 메모리(300c)는 제1 경로(PATH_1)에 해당하는 경로 식별자(PI)에 RA_a+RA_b+RA_c의 값을, 제1 경로(PATH_1)에 해당하는 호출 깊이(CD)에 3의 값을 저장할 수 있다. c() 함수가 종료될 때(④), 경로 관리 로직은 또한 경로 식별자(PI) 및 호출 깊이(CD)를 업데이트 할 수 있다. 경로 관리 로직은 종전 경로 식별자(RA_a+RA_b+RA_c)에서 종료되는 c() 함수의 리턴 어드레스를 빼는 연산을 하여 업데이트 된 경로 식별자(RA_a+RA_b)를 생성할 수 있고, 종전 호출 깊이인 3에서 1을 빼는 연산을 하여 업데이트 된 호출 깊이인 2를 생성할 수 있다.
c() 함수가 종료되고, b() 함수 내에서 d() 함수가 호출될 수 있다(⑤). d() 함수가 호출되는 경우, 링크 레지스터 및 휘발성 메모리에 제4 리턴 어드레스(RA_d)가 저장될 수 있다. 또한 경로 관리 로직은 기존에 저장된 경로 식별자에 제4 리턴 어드레스(RA_d)를 더하는 연산을 하여 경로 식별자를 업데이트 할 수 있다. 경로 관리 로직은 호출 깊이에 1을 더하는 연산을 하여 3으로 업데이트 할 수 있다.
d() 함수 내에서 다른 함수의 호출 없이 d() 함수가 종료될 수 있다(⑥). 즉, d() 함수도 리프 함수에 해당할 수 있고, d() 함수의 종료도 제2 유형의 백업 이벤트에 해당할 수 있다.
d() 함수가 종료될 때(⑥), 경로 관리 로직은 d() 함수 종료 전에 저장하고 있던 경로 식별자(PI) 및 호출 깊이(CD)를 비휘발성 메모리(300c)에 저장할 수 있다. 예를 들어, 비휘발성 메모리(300c)는 제2 경로(PATH_2)에 해당하는 경로 식별자(PI)에 RA_a+RA_b+RA_c의 값을, 제2 경로(PATH_2)에 해당하는 호출 깊이(CD)에 3의 값을 저장할 수 있다. d() 함수가 종료될 때(⑥), 경로 관리 로직은 또한 경로 식별자(PI) 및 호출 깊이(CD)를 업데이트 할 수 있다. 경로 관리 로직은 종전 경로 식별자(RA_a+RA_b+RA_d)에서 종료되는 d() 함수의 리턴 어드레스를 빼는 연산을 하여 업데이트 된 경로 식별자(RA_a+RA_b)를 생성할 수 있고, 종전 호출 깊이인 3에서 1을 빼는 연산을 하여 업데이트 된 호출 깊이인 2를 생성할 수 있다.
이와 같이, b() 함수 내에서 c() 함수 및 d() 함수가 각각 호출되는 경우, a() 함수, b() 함수 및 c() 함수로 이루어지는 제1 경로(PATH_1)에 대한 경로 식별자(PI) 및 호출 깊이(CD)가 저장되며, a() 함수, b() 함수 및 d() 함수로 이루어지는 제2 경로(PATH_2)에 대한 경로 식별자(PI) 및 호출 깊이(CD)가 저장될 수 있다.
도 10은 본 개시의 예시적 실시예에 따른 코어 시스템(20) 및 디버깅 장치(1000)를 나타낸다. 코어 시스템(20)은 디버깅 로직(200) 및 비휘발성 메모리(300)를 포함할 수 있으며, 이는 설명에 필요한 구성만 개시한 것일 뿐 다른 임의의 구성 요소들이 추가적으로 포함될 수 있다. 코어 시스템(20)에 관한 도 1 내지 도 9c와 중복되는 설명은 생략한다.
디버깅 장치(1000)는 코어 시스템(20) 내 코어의 인스트럭션 실행에 대해 디버깅 동작을 수행하고자 할 때, 디버깅 제어 신호(DBG_CTRL)를 코어 시스템(20)에 제공하여 디버깅에 필요한 다양한 정보를 수신할 수 있다. 하지만 이는 예시적인 경우이며, 디버깅 장치(1000)는 주기적으로 코어 시스템(20)으로부터 디버깅에 필요한 정보를 수신할 수 있다. 본 개시의 예시적 실시예에 따라, 디버깅 장치(1000)는 코어 시스템(20)으로부터 인스트럭션 실행 중 호출된 함수들의 경로 정보를 내포하는 경로 식별자(PI) 및 호출된 함수의 개수를 나타내는 호출 깊이(CD)를 수신할 수 있다. 디버깅 장치(1000)는 수신된 경로 식별자(PI) 및 호출 깊이(CD)를 이용해 호출된 함수들의 경로 정보를 추출해낼 수 있다. 디버깅 장치(1000)의 경로 정보 추출에 대해서는 도 11 및 12를 참조해 보다 자세히 이해될 수 있다.
디버깅 로직(200)은 디버깅 장치(1000)로부터 수신한 디버깅 제어 신호(DBG_CTRL)에 기초하여 비휘발성 메모리(300)에 제2 디버깅 정보 요청 신호(DBG_REQ2)를 송신할 수 있다. 디버깅 로직(200)은 제2 디버깅 정보 요청 신호(DBG_REQ2)를 기초로 비휘발성 메모리(300)에 접근하여 경로 식별자(PI) 및 호출 깊이(CD)를 얻어낼 수 있다. 디버깅 로직(200)은 얻어낸 경로 식별자(PI) 및 호출 깊이(CD)를 디버깅 장치(1000)에 송신할 수 있다. 하지만 이는 예시적인 동작이며, 디버깅 로직(200)은 일정한 주기 마다 비휘발성 메모리(300)로부터 저장된 경로에 해당하는 경로 식별자(PI) 및 호출 깊이(CD)를 얻어낼 수도 있다.
비휘발성 메모리(300)에는 코어의 인스트럭션 실행 과정에서 호출된 함수들의 경로에 해당하는 경로 식별자(PI) 및 호출 깊이(CD)가 저장될 수 있다. 예를 들어, 코어 시스템(20) 내의 코어는 도 9a 내지 9c에 해당하는 백업 이벤트가 발생하는 경우, 저장하고 있던 경로 식별자(PI) 및 호출 깊이(CD)를 비휘발성 메모리(300)에 저장할 수 있다.
이와 같이 간소화된 데이터인 경로 식별자(PI) 및 호출 깊이(CD)를 이용하여 디버깅 장치(1000)가 호출된 함수들의 경로 정보를 추출해냄으로써 디버깅에 사용되는 비휘발성 메모리(300)의 용량을 줄일 수 있다.
도 11은 본 개시의 예시적 실시예에 따른 디버깅 장치(1000)를 나타낸다. 디버깅 장치(1000)는 경로 분석기(1200) 및 디버깅 유닛(1400)을 포함할 수 있다.
경로 분석기(1200)는 경로 분석기(1200) 외부의 코어 시스템으로부터 경로 식별자(PI) 및 호출 깊이(CD)를 수신할 수 있다. 경로 분석기(1200)는 수신된 경로 식별자(PI) 및 호출 깊이(CD)로부터 호출된 함수들의 경로 정보를 추출해낼 수 있다. 경로 분석기(1200)는 프로필 메모리(1240) 및 비교 로직(1220)을 포함할 수 있다.
프로필 메모리(1240)는 호출된 함수들의 경로 정보와 경로 식별자(PI) 및 호출 깊이(CD)를 매칭시킨 프로필 정보(PFL_INFO)를 저장할 수 있다. 디버깅 장치(1000)는 디버깅 동작을 수행하기 전에 미리 코어 시스템 내 코어에서 사용되는 함수 및 함수들이 저장된 위치의 어드레스를 이용하여 프로필 정보(PFL_INFO)를 프로필 메모리(1240)에 저장할 수 있다. 프로필 메모리(1240)는 디버깅 장치(1000) 내의 임의의 저장 공간의 일부로 구현될 수 있다. 프로필 메모리(1240)가 저장하는 프로필 정보(PFL_INFO)에 대해서는 도 12를 참조해 보다 자세히 설명될 수 있다.
비교 로직(1220)은 코어 시스템 내 디버깅 로직으로부터 경로 식별자(PI) 및 호출 깊이(CD)를 수신할 수 있고, 프로필 메모리(1240)로부터 프로필 정보(PFL_INFO)를 수신할 수 있다. 비교 로직(1220)은 수신된 경로 식별자(PI) 및 호출 깊이(CD)와 프로필 정보(PFL_INFO)를 비교하여, 수신된 경로 식별자(PI) 및 호출 깊이(CD)에 매칭되는 함수 경로 정보(PATH_INFO)를 추출해낼 수 있다. 비교 로직(1220)은 함수 경로 정보(PATH_INFO)를 디버깅 유닛(1400)에 제공할 수 있다.
디버깅 유닛(1400)은 경로 분석기(1200)로부터 함수 경로 정보(PATH_INFO)를 수신할 수 있다. 디버깅 유닛(1400)은 경로 분석기(1200)로부터 수신한 함수 경로 정보(PATH_INFO)를 이용하여 디버깅 동작을 수행할 수 있다.
이와 같이, 디버깅 장치(1000)는 프로필 정보(PFL_INFO)를 저장함으로써 간소화된 정보인 경로 식별자(PI) 및 호출 깊이(CD)를 이용하여 코어 내에서 호출된 함수들의 함수 경로 정보(PATH_INFO)를 추출해내어 디버깅 동작에 이용할 수 있다.
도 12는 본 개시의 예시적 실시예에 따른 프로필 메모리(1240)를 나타낸다.
프로필 메모리(1240)는 디버깅 장치가 사전에 미리 코어 시스템 내 코어에서 사용되는 함수 및 함수들이 저장되는 위치의 어드레스를 이용하여 프로필 정보를 저장하는 메모리일 수 있다. 프로필 메모리(1240)는 디버깅 장치 내의 임의의 저장 공간의 일부일 수 있다.
프로필 정보는 함수 경로 정보(PATH_INFO)와 경로 식별자(PI) 및 호출 깊이(CD)를 매칭시킨 정보를 포함할 수 있다. 예를 들어, 프로필 정보는 제1 내지 제5 경로(PATH_1~PATH_5) 각각에 매칭되는 경로 식별자(PI) 및 호출 깊이(CD)를 저장할 수 있다. 예를 들어, a() 함수의 호출 뒤 b() 함수의 호출 뒤 c() 함수가 호출되는 제1 경로(PATH_1)에 대응되는 경로 식별자(PI)에는 a() 함수 리턴 어드레스(RA_a), b() 함수 리턴 어드레스(RA_b) 및 c() 함수 리턴 어드레스(RA_c)의 합과 같은 값(RA)이 저장될 수 있고, 제1 경로(PATH_1)에 대응되는 호출 깊이(CD)에는 호출된 함수의 개수인 3이 저장될 수 있다. 제2 내지 제5 경로(PATH_5)에 대해서도 마찬가지의 방식으로 저장된다는 것은 도 12의 표를 참조하여 이해될 수 있을 것이다.
디버깅 장치는 이와 같이 프로필 정보를 저장할 수 있고, 디버깅 장치가 간소화 된 데이터인 경로 식별자(PI) 및 호출 깊이(CD) 만을 수신한다고 하더라도, 프로필 정보와 매칭시키는 동작을 통해 호출된 함수들의 함수 경로 정보(PATH_INFO)를 추출해내어 디버깅 종작에 이용할 수 있다.
도 13은 본 개시의 예시적 실시예에 따른 코어 시스템(30) 및 디버깅 장치(1000)를 나타낸다. 코어 시스템(30)은 코어(100), 디버깅 로직(200) 및 비휘발성 메모리(300)를 포함할 수 있으며, 휘발성 메모리를 더 포함할 수 있고, 디버깅 장치(1000)는 경로 분석기(1200) 및 디버깅 유닛(1400)을 포함할 수 있으며, 예측 로직(1600)을 더 포함할 수 있다. 코어 시스템(30) 및 디버깅 장치(1000)에 관한 도 1 내지 도 12와 중복되는 설명은 생략한다.
경로 분석기(1200)는 코어 시스템(30)으로부터 수신된 경로 식별자(PI) 및 호출 깊이(CD)를 프로필 메모리(1240)에 저장된 프로필 정보(PFL_INFO)와 매칭시키는 동작을 통해 호출된 함수들의 함수 경로 정보(PATH_INFO)를 얻어낼 수 있고, 디버깅 유닛(1400)은 함수 경로 정보(PATH_INFO)를 이용해 코어(100)의 인스트럭션 실행에 대해 디버깅 동작을 수행할 수 있다.
경로 분석기(1200)는 얻어낸 함수 경로 정보(PATH_INFO)를 예측 로직(1600)에도 제공할 수 있다. 예측 로직(1600)은 호출된 함수들의 함수 경로 정보(PATH_INFO)를 이용해 이후에 호출될 함수들의 정보를 예측할 수 있다. 함수들이 호출되는 방식은 다양하지만, 코어(100)가 실행하는 일련의 인스트럭션들은 전형적인 패턴을 띄는 경우가 있을 수 있다. 따라서 전형적인 패턴의 인스트럭션들을 실행하는 경우, 현재까지 호출된 함수 경로 정보(PATH_INFO)를 기초로 이후에 호출될 함수들 또는 인스트럭션들에 대한 예측이 가능할 수 있다. 예측 로직(1600)은 호출된 함수 경로 정보(PATH_INFO)가 특정 패턴과 일치하는 경우, 이후에 호출될 함수 또는 인스트럭션들을 예측할 수 있고, 상기 예측된 정보를 코어 시스템(30)에 제공할 수 있다.
이와 같이, 경로 식별자(PI) 및 호출 깊이(CD)를 이용해 디버깅 장치(1000)가 함수 경로 정보(PATH_INFO)를 얻어내게 된다면, 디버깅 장치(1000)는 함수 경로 정보(PATH_INFO)를 디버깅 동작 뿐 아니라 현재까지 호출된 함수 이후에 실행될 함수 또는 인스트럭션을 예측하는 동작도 수행할 수 있다.
도 14는 본 개시의 예시적 실시예에 따른 컴퓨팅 플랫폼(2000)을 나타낸다. 컴퓨팅 플랫폼(2000)은 CPU 시스템(2100), 인터페이스 블록(2200), 메모리 장치(2300), 무선 인터페이스 블록(2400) 및 디스플레이(2500)를 포함할 수 있다.
CPU 시스템(2100)은 인터페이스 블록(2200)을 통하여 메모리 장치(2300), 무선 인터페이스 블록(2400), 또는 디스플레이(2500)와 통신할 수 있다. CPU 시스템(2100)은 도 1의 코어(100), 디버깅 로직(200) 및 휘발성 메모리(400)를 포함하는 시스템일 수 있다. 또한, CPU 시스템(2100)은 CPU가 인스트럭션을 실행하는 도중 호출되는 함수들에 대한 경로 정보를 내포하는 경로 식별자 및 호출 깊이에 대한 정보를 관리할 수 있고, 백업 이벤트가 발생하는 경우 인터페이스 블록(2200)을 통해 메모리 장치(2300)에 저장할 수 있다. CPU 시스템(2100)은 어플리케이션 프로세서와 같은 하나의 장치로 구현될 수 있다.
인터페이스 블록(2200)은 다양한 인터페이스 제어 기능들을 수행할 수 있는 하나 또는 그 이상의 회로 블록들을 포함할 수 있다. 상기 제어 기능들은 메모리 액세스 제어, 그래픽 제어, 입출력 인터페이스 제어, 또는 무선 네트워크 액세스 제어 등을 포함할 수 있다.
상기 회로 블록들 각각은 별도의 독립적인 칩으로 구현되거나, CPU 시스템(2100)의 일부로서 구현되거나, 또는 CPU 시스템(2100)의 내부에 구현될 수 있다. 메모리 장치(2300)는 인터페이스 블록(2200)을 통하여 CPU 시스템(2100)과 데이터를 주거나 받을 수 있다. 무선 인터페이스 블록(2400)은 안테나를 통하여 컴퓨팅 플랫폼(2000)을 무선 네트워크, 예컨대 이동 통신 네트워크 또는 무선 LAN(Local Area Network)에 접속시킬 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 코어의 인스트럭션 실행 방법에 있어서,
    제1 함수를 호출하는 단계;
    상기 제1 함수가 종료되고 돌아올 주소를 나타내는 제1 리턴 어드레스를 이용하여, 호출된 함수들의 경로 정보에 대한 경로 식별자(Path Identifier) 및 호출된 함수들의 개수를 나타내는 호출 깊이를 생성하는 단계;
    상기 제1 함수 내에서 제2 함수를 호출하는 단계;
    상기 제2 함수가 종료되고 돌아올 주소를 나타내는 제2 리턴 어드레스를 이용하여 상기 경로 식별자를 업데이트 하는 단계;
    상기 경로 식별자를 비휘발성 메모리에 저장하는 단계; 및
    상기 경로 식별자 및 상기 호출 깊이를, 디버깅 장치에 저장된 프로필과 비교함으로써 상기 경로 정보를 추출하는 단계를 포함하는 인스트럭션 실행 방법.
  2. 제1항에 있어서,
    상기 경로 식별자를 업데이트 하는 단계는,
    상기 경로 식별자와 상기 제2 리턴 어드레스를 산술 연산하여 상기 경로 식별자를 업데이트 하는 것을 특징으로 하는 인스트럭션 실행 방법.
  3. 제2항에 있어서,
    상기 산술 연산은 상기 경로 식별자와 상기 제2 리턴 어드레스의 합 연산인 것을 특징으로 하는 인스트럭션 실행 방법.
  4. 제1항에 있어서,
    상기 제2 함수를 호출한 이후, 상기 호출 깊이를 1 증가시키는 단계를 더 포함하는 인스트럭션 실행 방법.
  5. 제4항에 있어서,
    상기 경로 식별자는 상기 코어 내에 저장되는 것을 특징으로 하고,
    상기 코어에 백업 이벤트가 발생하는 경우, 상기 코어에 저장된 상기 경로 식별자를 상기 비휘발성 메모리에 저장하는 단계를 더 포함하는 인스트럭션 실행 방법.
  6. 제5항에 있어서,
    상기 호출 깊이는 상기 코어 내에 저장되는 것을 특징으로 하고,
    상기 백업 이벤트가 발생하는 경우, 상기 코어에 저장된 상기 호출 깊이를 상기 비휘발성 메모리에 저장하는 단계를 더 포함하는 인스트럭션 실행 방법.
  7. 제4항에 있어서,
    상기 제2 함수를 종료하는 단계; 및
    상기 제2 리턴 어드레스를 이용해 상기 경로 식별자를 다시 업데이트하고, 상기 호출 깊이를 1 감소시키는 단계를 더 포함하는 인스트럭션 실행 방법.
  8. 인스트럭션들을 실행하고, 상기 인스트럭션들의 실행 중 제1 함수가 호출되는 경우, 호출된 함수들의 경로 정보에 대한 경로 식별자 및 호출된 함수들의 개수를 나타내는 호출 깊이를 업데이트 하는 코어;
    상기 인스트럭션들의 적어도 일부 또는 상기 인스트럭션들의 실행에 필요한 데이터를 저장하고, 상기 경로 식별자 및 상기 호출 깊이를 저장하는 비휘발성 메모리; 및
    디버깅 모드에서, 상기 비휘발성 메모리에 접근하여 상기 경로 식별자를 독출하는 디버깅 로직을 포함하고,
    상기 코어는, 백업 이벤트가 발생하는 경우, 상기 경로 식별자 및 상기 호출 깊이를 상기 비휘발성 메모리에 저장하고,
    상기 경로 정보는, 상기 경로 식별자 및 상기 호출 깊이가 디버깅 장치에 저장된 프로필과 비교됨으로써 추출되는 것을 특징으로 하는 코어 시스템.
  9. 제8항에 있어서,
    상기 비휘발성 메모리에 저장되는 상기 경로 식별자는, 상기 백업 이벤트가 발생하기 전까지 호출된 함수들의 리턴 어드레스들을 합한 값인 것을 특징으로 하는 코어 시스템.
  10. 제9항에 있어서,
    상기 호출 깊이는,
    상기 백업 이벤트가 발생하기 전까지 호출된 함수들의 개수를 나타내는 것을 특징으로 하고,
    상기 코어는,
    상기 코어 내의 PC 값 및 상기 리턴 어드레스들을 기초로 상기 경로 식별자를 업데이트 하는 경로 식별자 생성기; 및
    상기 코어 내의 PC 값을 기초로 상기 호출 깊이를 업데이트 하는 호출 깊이 생성기를 포함하는 것을 특징으로 하는 코어 시스템.
KR1020170133470A 2017-10-13 2017-10-13 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템 KR102467842B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170133470A KR102467842B1 (ko) 2017-10-13 2017-10-13 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템
US15/962,558 US10747644B2 (en) 2017-10-13 2018-04-25 Method of executing instructions of core, method of debugging core system, and core system
CN201810893707.8A CN109669722B (zh) 2017-10-13 2018-08-07 执行内核的指令的方法、调试内核系统的方法和内核系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170133470A KR102467842B1 (ko) 2017-10-13 2017-10-13 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템

Publications (2)

Publication Number Publication Date
KR20190041793A KR20190041793A (ko) 2019-04-23
KR102467842B1 true KR102467842B1 (ko) 2022-11-16

Family

ID=66097058

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170133470A KR102467842B1 (ko) 2017-10-13 2017-10-13 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템

Country Status (3)

Country Link
US (1) US10747644B2 (ko)
KR (1) KR102467842B1 (ko)
CN (1) CN109669722B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11650860B2 (en) * 2021-08-02 2023-05-16 Dell Products L.P. Managing services across containers

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150268195A1 (en) 2014-03-20 2015-09-24 Agency For Science, Technology And Research Sensor device and method of operating thereof

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681280B1 (en) * 1998-10-29 2004-01-20 Fujitsu Limited Interrupt control apparatus and method separately holding respective operation information of a processor preceding a normal or a break interrupt
JP2004519027A (ja) * 2001-01-30 2004-06-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 主プロセッサと命令経路コプロセッサとの同期化
US7017030B2 (en) 2002-02-20 2006-03-21 Arm Limited Prediction of instructions in a data processing apparatus
EP1447742A1 (en) 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US20050268195A1 (en) * 2004-04-29 2005-12-01 Lund Morten W Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems
KR20070109432A (ko) 2006-05-11 2007-11-15 삼성전자주식회사 커널 인지 디버깅 장치 및 방법
KR20070109539A (ko) 2006-05-11 2007-11-15 주식회사 팬택앤큐리텔 런타임에 함수 호출 경로의 확인이 가능한 디버깅 방법
CN100570581C (zh) * 2008-04-09 2009-12-16 中兴通讯股份有限公司 故障定位的方法和装置
JP2010287101A (ja) 2009-06-12 2010-12-24 Oki Semiconductor Co Ltd ソフトウエアデバッグ装置及び方法
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US20150067279A1 (en) * 2012-04-23 2015-03-05 Freescale Semiconductor, Inc. Data processing system and method for operating a data processing system
US9619345B2 (en) 2012-09-13 2017-04-11 International Business Machines Corporation Apparatus for determining failure context in hardware transactional memories
US9690642B2 (en) 2012-12-18 2017-06-27 Western Digital Technologies, Inc. Salvaging event trace information in power loss interruption scenarios
WO2014151691A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. Method and apparatus for guest return address stack emulation supporting speculation
GB2540948B (en) 2015-07-31 2021-09-15 Advanced Risc Mach Ltd Apparatus with reduced hardware register set
KR20170079368A (ko) 2015-12-30 2017-07-10 삼성전자주식회사 디버그 정보를 수집하기 위한 디버그 로직을 포함하는 cpu 시스템, 이를 포함하는 컴퓨팅 시스템 및 이의 디버깅 방법
US9998889B2 (en) * 2016-03-22 2018-06-12 Arm Limited Apparatus and method of tracking call paths

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150268195A1 (en) 2014-03-20 2015-09-24 Agency For Science, Technology And Research Sensor device and method of operating thereof

Also Published As

Publication number Publication date
CN109669722A (zh) 2019-04-23
KR20190041793A (ko) 2019-04-23
CN109669722B (zh) 2024-04-19
US10747644B2 (en) 2020-08-18
US20190114249A1 (en) 2019-04-18

Similar Documents

Publication Publication Date Title
US11237728B2 (en) Method for accessing extended memory, device, and system
EP3314396B1 (en) Technologies for shadow stack manipulation for binary translation systems
CN110716845B (zh) 一种Android系统的日志信息读取的方法
CN102439567A (zh) 分布式虚拟机访问异常的处理方法以及虚拟机监控器
CN105426231A (zh) 多进程处理装置和多进程处理方法
US11093245B2 (en) Computer system and memory access technology
US8006238B2 (en) Workload partitioning in a parallel system with hetergeneous alignment constraints
KR102467842B1 (ko) 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템
US8327122B2 (en) Method and system for providing context switch using multiple register file
US10379827B2 (en) Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
US7934073B2 (en) Method for performing jump and translation state change at the same time
US6862675B1 (en) Microprocessor and device including memory units with different physical addresses
CN107209720B (zh) 用于页面高速缓存的系统及方法以及存储介质
JP2018536230A (ja) キャッシュへのアクセス
US8225030B2 (en) Systems and methods for using a page table in an information handling system comprising a semiconductor storage device
US11003488B2 (en) Memory-fabric-based processor context switching system
TWI660307B (zh) 二元碼轉譯裝置及方法
US20150347042A1 (en) Apparatus and method for controlling memory
US8862825B2 (en) Processor supporting coarse-grained array and VLIW modes
CN104050017A (zh) 运行虚拟机的控制方法和装置
JP6691884B2 (ja) 計算機及びアプリケーション管理方法
EP3948525A1 (en) Widening memory access to an aligned address for unaligned memory operations

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right