[go: up one dir, main page]

KR102028663B1 - 에러 검출 방법 및 장치 - Google Patents

에러 검출 방법 및 장치 Download PDF

Info

Publication number
KR102028663B1
KR102028663B1 KR1020120080405A KR20120080405A KR102028663B1 KR 102028663 B1 KR102028663 B1 KR 102028663B1 KR 1020120080405 A KR1020120080405 A KR 1020120080405A KR 20120080405 A KR20120080405 A KR 20120080405A KR 102028663 B1 KR102028663 B1 KR 102028663B1
Authority
KR
South Korea
Prior art keywords
deterministic
instruction
execution
error
program counter
Prior art date
Application number
KR1020120080405A
Other languages
English (en)
Other versions
KR20140014449A (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 KR1020120080405A priority Critical patent/KR102028663B1/ko
Priority to US13/890,675 priority patent/US9336114B2/en
Publication of KR20140014449A publication Critical patent/KR20140014449A/ko
Application granted granted Critical
Publication of KR102028663B1 publication Critical patent/KR102028663B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error 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 the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • 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/0751Error or fault detection not based on redundancy
    • G06F11/0763Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)

Abstract

마이크로 아키텍쳐를 사용하는 컴퓨터 환경에서 응용 프로그램의 실행 시 돌발적으로 발생하는 에러를 검출하기 위한 방법 및 장치에 관한 것으로, 일 측면에 있어서, 에러 검출 장치는 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 측정하고, 상기 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 검증세트로 결정하며, 상기 런타임 실행 중인 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 상기 검증세트와 상기 측정세트를 비교하여 상기 명령어의 런타임 에러를 검출할 수 있다.

Description

에러 검출 방법 및 장치{APPARATUS AND METHOD FOR ERROR DETECTION}
아래의 실시 예들은 마이크로 아키텍쳐를 사용하는 컴퓨터 환경에서 응용 프로그램의 실행 시 돌발적으로 발생하는 에러를 검출하기 위한 방법 및 장치에 관한 것이다.
개인 휴대 단말의 보급과 정보 처리 요구량이 증가함에 따라 컴퓨팅 기기들은 점점 복잡해지고, 다양한 응용 프로그램들을 동시에 처리해야 할 필요가 있다. 또한, 실시간 처리를 요구하는 멀티미디어와 같은 어플리케이션이 증가함에 따라, 컴퓨팅 기기들의 시스템 성능에 대한 요구량도 점점 증가하고 있으며, 단일 프로세서 만으로는 어플리케이션을 효율적으로 처리할 수 없는 상황에 놓여 있다.
이러한 상황을 극복하기 위해 반도체 집적기술의 발달과 멀티 프로세서 컴퓨팅 기술이 등장하였다. 멀티 프로세서를 사용하는 경우 단일 프로세서보다 에너지 효율 및 성능향상에 있어서 많은 이점이 있다. 그러나 멀티 프로세서를 이용한 시스템의 설계 및 개발은 쉽지 않으며, 특히 동시성을 가지는 시스템의 검증이 어렵다.
프로그램 개발 단계에서 검증이 이루어진 경우에도, 실제 프로그램이 실행되는 동안 런타임 에러가 발생할 수 있다. 런타임 에러는 응용 프로그램의 실행 중에 발생하는 에러를 의미한다.
일 측면에 있어서, 에러 검출 장치는 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 측정하는 측정부, 상기 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 검증세트로 결정하는 결정부 및 상기 측정부에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 상기 검증세트와 상기 측정세트를 비교하여 상기 명령어의 런타임 에러를 검출하는 검출부를 포함할 수 있다.
다른 일 측면에 있어서, 에러 검출 장치는 상기 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 기 설정된 기준에 기초하여 판단하는 판단부, 상기 결정적 방식으로 실행되는 명령어에 대하여 상기 결정적 프로그레스 인덱스를 생성하는 결정적 프로그레스 카운터(DPC, Deterministic Progress Counter) 및 프로그램 상에서 실행 중인 명령어의 위치를 나타내는 상기 프로그램 카운터 값을 생성하는 프로그램 카운터(PC, Program Counter)를 더 포함할 수 있다.
상기 검출부는 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값이 서로 다르면, 상기 런타임 에러를 검출할 수 있다.
상기 검출부는 프로세서의 클럭 사이클 마다 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 비교하여 상기 런타임 에러를 검출하는 실시간 에러 검출부를 포함할 수 있다.
상기 검출부는 설정된 체크 섬(Check Sum) 구간에서 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 계산하는 계산부 및 상기 체크 섬 구간의 종료 지점에서, 상기 계산부에서 계산된 체크 섬 값과 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값에 대해서 미리 계산된 체크 섬 값을 비교하여, 상기 런타임 에러를 검출하는 구간 에러 검출부를 포함할 수 있다.
상기 계산부는 상기 설정된 체크 섬 구간에서, 순차적으로 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 해쉬(hash) 값을 계산하고, 상기 구간 에러 검출부는 상기 체크 섬 구간의 종료 지점에서, 상기 계산부에서 계산된 해쉬 값과 상기 설정된 체크 섬 구간에서 미리 계산된 검증세트의 해쉬 값을 비교하여, 상기 런타임 에러를 검출할 수 있다.
다른 일 측면에 있어서, 에러 검출 장치는 입력 데이터에 따라 상기 명령어의 실행 시퀀스가 변하지 않는 구간을 상기 런타임 에러를 검증할 구간으로 결정하는 구간 결정부를 더 포함할 수 있다.
상기 구간 결정부는 상기 명령어의 실행 시퀀스가 변하기 시작하는 지점부터 상기 실행 시퀀스의 변화가 종료되는 지점까지의 구간을 체크 섬(Check Sum) 계산 구간으로 결정할 수 있다.
상기 비결정적(Non-deterministic) 방식은 하드웨어에 기초한 프로세서의 명령어 수준에서 비결정적 방식으로 상기 명령어를 실행하는 하드웨어 비결정적 실행(HWND, HardWare Non-Deterministic) 방식 및 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비결정적 방식으로 상기 함수를 실행하는 소프트웨어 비결정적 실행(SWND, SoftWare Non-Deterministic)방식을 포함할 수 있다.
상기 결정적 프로그레스 카운터는 상기 명령어 실행방식이 결정적 방식으로 판단되면 시스템 클럭에 기초하여 상기 결정적 프로그레스 카운터의 값을 증가시킬 수 있다.
상기 결정적 프로그레스 카운터는 하드웨어에 기초한 프로세서의 명령어 수준에서 비결정적 방식으로 상기 명령어를 실행하는 하드웨어 비결정적 실행 신호 및 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비결정적 방식으로 상기 함수를 실행하는 소프트웨어 비결정적 실행 신호 중 적어도 하나에 의하여 동작이 제어될 수 있다.
다른 일 측면에 있어서, 에러 검출 장치는 스레드가 러닝 상태(running state)에 있지 않은 경우에 상기 결정적 프로그레스 카운터가 동작하지 않도록, 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 소프트웨어 비결정적 실행(SWND) 신호를 제어하는 제어부를 더 포함할 수 있다.
상기 제어부는 상기 스레드에서 러닝 상태 중에 인터럽트(interrupt)가 발생하면 상기 소프트웨어 비결정적 실행(SWND) 신호를 세트하여, 상기 결정적 프로그레스 카운터를 중지시키고, 상기 인터럽트의 서비스 루틴이 종료된 후 다시 상기 스레드가 러닝 상태가 되면 상기 소프트웨어 비결정적 실행(SWND) 신호를 클리어하여 상기 결정적 프로그레스 카운터(DPC)를 동작시킬 수 있다.
다른 일 측면에 있어서, 에러 검출 장치는 상기 검증세트 및 설정된 체크 섬 구간 별로 미리 계산된 해쉬 값들을 저장하는 메모리를 더 포함할 수 있다.
일 측면에 있어서, 에러 검출 방법은 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 검증세트로 결정하는 단계, 상기 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정하는 단계, 상기 런타임 실행 중인 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 상기 검증세트와 상기 측정세트를 비교하는 단계 및 상기 비교 결과에 기초하여 상기 명령어의 런타임 에러를 검출하는 단계를 포함할 수 있다.
다른 일 측면에 있어서, 에러 검출 방법은 상기 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 기 설정된 기준에 기초하여 판단하는 단계, 결정적 프로그레스 카운터(DPC, Deterministic Progress Counter)에 의하여, 상기 결정적 방식으로 실행되는 명령어에 대하여 상기 결정적 프로그레스 인덱스를 생성하는 단계 및 프로그램 카운터(PC, Program Counter)에 의하여, 프로그램 상에서 실행 중인 명령어의 위치를 나타내는 상기 프로그램 카운터 값을 생성하는 단계를 더 포함할 수 있다.
상기 검출하는 단계는 프로세서의 클럭 사이클 마다 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 비교하여 상기 런타임 에러를 검출하는 단계를 포함할 수 있다.
상기 검출하는 단계는 설정된 체크 섬(Check Sum) 구간에서 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 계산하는 단계 및 상기 체크 섬 구간의 종료 지점에서, 상기 계산부에서 계산된 체크 섬 값과 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값에 대해서 미리 계산된 체크 섬 값을 비교하여, 상기 런타임 에러를 검출하는 단계를 포함할 수 있다.
도 1은 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 2는 다른 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 3은 일 실시예에 따른 에러 검출 장치가 적용되는 컴퓨팅 환경을 나타낸 도면이다.
도 4는 응용 프로그램의 기능을 수행하는 명령어를 결정적 실행 및 비결정적 실행으로 구분하여 나타낸 도면이다.
도 5는 일 실시예에 따른 에러 검출 장치에서 사용되는 결정적 프로그레스 인덱스의 개념을 설명하기 위한 도면이다.
도 6은 스레드의 상태 변화에 따른 프로그레스 카운터의 동작여부를 나타낸 도면이다.
도 7은 결정적 프로그레스 카운터와 스레드 별 결정적 프로그레스 인덱스의 관계를 나타낸 예이다.
도 8은 일 실시예에 따른 에러 검출 방법에서 운영체제를 이용하여 스케쥴러 동작을 수행하는 경우의 흐름도이다.
도 9는 일 실시예에 따른 에러 검출 방법에서 스레드가 러닝 상태에 있을 때, 비결정적 함수가 동작하는 경우의 결정적 프로그레스 카운터의 동작을 나타낸 흐름도이다.
도 10은 일 실시예에 따른 에러 검출 방법에서 하드웨어 비결정적 실행 신호가 발생하는 경우의 흐름도이다.
도 11은 일 실시예에 따른 에러 검출 장치에서 사용하는 검증세트와 측정세트를 나타낸 도면이다.
도 12는 다른 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 13은 일 실시예에 따른 에러 검출 장치에서 실시간으로 에러를 검증하는 구간을 나타낸 도면이다.
도 14는 일 실시예에 따른 에러 검출 장치에서 체크 섬 값을 이용하여 에러를 검증하는 구간을 나타낸 도면이다.
도 15는 일 실시예에 따른 에러 검출 장치에서 체크 섬 구간의 시작지점과 종료지점을 나타낸 도면이다.
도 16은 일 실시 예에 따른 에러 검출 방법의 흐름도이다.
이하, 일측에 따른 실시 예를 첨부된 도면을 참조하여 상세하게 설명한다.
실행 중인 응용 프로그램의 성능 및 진행상태를 정확하게 측정 가능하면 측정된 값을 지표화하여 스레드의 성능 개선, 부하 균형 및 저전력 관리에 활용할 수 있다. 그러나 런타임 에러의 발생을 최소화 시키면서 응용 프로그램의 상태를 정확하고 정밀하게 측정하는 것은 용이하지 않다. 또한, 응용 프로그램을 구성하는 명령어들의 실행 시간은 일정하지 않다. 또한, 응용 프로그램의 실행 시, 함께 실행되는 다른 응용 프로그램들에 의한 예상하지 못한 영향으로 인하여, 응용 프로그램의 상태를 정확하게 측정하기 어렵다.
단일 응용 프로그램이 실행되는 경우, 단일 응용 프로그램을 구성하는 여러 스레드들이 함께 실행되면서 서로 영향을 미치며, 단일 응용 프로그램이 하나의 스레드로 구성된 경우에도 스레드를 구성하는 명령어들의 실행시간이 일정하지 않기 때문에 측정이 어렵다.
응용 프로그램의 진행상태를 측정하는 방법은 크게 부가적인 코드를 삽입하는 방법과 퍼포먼스 카운터(performance counter)를 활용하는 방법이 있다. 부가적인 코드를 삽입하는 방법은 비교적 구현이 용이하나, 삽입에 따른 런타임 오버헤드로 인해 정밀한 측정이 어렵다. 퍼포먼스 카운터를 활용하는 방법은 비교적 저렴한 비용으로 구현이 가능하나, 기본적으로 리타이어드 명령어(retired instruction) 이벤트를 사용함으로써 스레드간에 클럭 레이트(rate)의 차이가 발생한다. 또한, 가상 클럭의 레이트를 높여 고정밀 지표를 측정하면 퍼포먼스 카운터에 인터럽트 오버헤드가 발생하여 응용 프로그램의 성능을 저하시킨다. 따라서, 응용 프로그램의 진행상태를 결정적(Deterministic)으로 측정할 수 있고, 정밀하면서도 정확하게 실제 스레드의 진행상태를 반영하며, 적은 런타임 오버헤드 및 적은 구현 비용이 드는 진행상태의 측정방법이 요구된다.
또한, 응용 프로그램의 컴파일(compile) 시에는 발견되지 않았는데, 응용 프로그램의 실행 중에 다른 응용 프로그램들의 영향을 받아 예상하지 못했던 에러가 발생할 수 있다. 응용 프로그램의 실행 중에 발생하는 에러를 런타임 에러라고 정의할 수 있다.
런타임 에러는 변수에 값이 할당되지 않거나, 잘못된 값이 할당된 경우에 발생할 수 있다. 일반적으로 디버깅이 가능한 조건에서는 런타임 에러가 발생하면 응용 프로그램이 중지되고, 코드 편집기 창에 예외(exception) 도우미 대화 상자가 표시될 수 있다. 즉, 런타임 에러가 발생하면 응용 프로그램은 중단 모드로 설정되고, 디버깅이 수행될 수 있다. 이때, 예외 도우미 대화 상자에는 런타임 에러에 대한 설명과 함께 발생원인을 알려 주는 문제 해결 팁이 포함될 수 있다.
그러나 응용 프로그램이 디플로이(deploy)된 상황에서는 런타임 에러의 디버깅이 현실적으로 용이하지 않다. 또한, 디버깅이 가능한 소스코드가 준비되지 않은 조건에서는 실제 응용 프로그램이 정상적으로 동작하는지 여부를 판별하고, 발생하는 에러를 검출하는 것이 용이하지 않다.
최근 하드웨어의 집적도 증가로, 컴퓨팅 시스템은 매우 높은 시스템 클럭을 사용하여 동작한다. 그런데, 이러한 컴퓨팅 시스템에서는 집적도의 증가로 인하여 소프트 에러(soft error)가 빈번하게 발생하게 된다. 소프트 에러는 주변 하드웨어의 영향으로 발생하는 예상치 못한 에러를 의미할 수 있다.
또는 정적 분석(static analysis) 조건에서는 발생하지 않던 에러가 런타임 시스템의 불안정으로 인하여 발생할 수도 있다.
따라서, 응용 프로그램의 성능과 진행상태를 응용 프로그램의 실행 중에 측정할 수 있다면 측정된 값을 이용함으로써 런타임 에러를 검출하고, 응용 프로그램의 실행 성능을 개선할 수 있다.
도 1은 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 1을 참조하면, 일 실시예에 따른 에러 검출 장치는 측정부(110), 결정부(120) 및 검출부(130)를 포함할 수 있다. 에러 검출 장치는 추가적으로 구간 결정부(140), 메모리(150) 및 제어부(160)를 더 포함할 수 있다.
측정부(110)는 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 측정할 수 있다. 결정적 프로그레스 인덱스는 결정적 실행 시간을 나타내는 지표이다. 결정적 실행 시간이란 명령어의 실행 시간이 일정한 사이클을 가지는 경우를 의미한다. 프로그램 카운터 값은 응용 프로그램 상에서 실행 중인 명령어의 위치를 나타낸다.
명령어들 각각에 대한 결정적 또는 비결정적 방식의 판단은 기 설정된 기준에 기초하여 판단될 수 있다. 여기서 기 설정된 기준은 명령어의 실행시간이 일정한 사이클을 가지는지 여부로 정의될 수 있다. 따라서 명령어는 기 설정된 기준에 기초하여 결정적 방식 또는 비결정적 방식 여부로 구별될 수 있다. 이에 대해서는 도 5에서 좀 더 상세히 설명한다.
비결정적(Non-deterministic) 방식은 하드웨어 비결정적(HardWare Non-Deterministic, 이하 HWND이라 함)실행방식 및 소프트웨어 비결정적(SoftWare Non-Deterministic, 이하 SWND이라 함)실행방식을 포함할 수 있다. HWND는 하드웨어에 기초한 프로세서의 명령어 수준에서 비결정적 방식으로 명령어를 실행하는 방식을 의미한다. SWND는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비결정적 방식으로 함수를 실행하는 방식을 의미한다.
측정부(110)는 명령어가 에러 없이 실행되는 조건에서 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정할 수 있다. 명령어가 에러 없이 실행되는 조건을 정상상태라고 정의할 수 있다.
결정부(120)는 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 검증세트로 결정할 수 있다. 검증세트는 결정적 프로그레스 인덱스와 프로그램 카운터 값을 쌍으로 하여 구성될 수 있다. 검증세트는 정상상태에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값으로 구성될 수 있다.
결정부(120)는 측정부(110)에서 런타임 실행 중인 조건에서 측정한 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 결정할 수도 있다. 측정세트는 프로세서의 클럭 사이클 마다 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값으로 구성될 수 있다.
검출부(130)는 측정부(110)에서 런타임 실행 중인 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 검증세트와 측정세트를 비교하여 명령어의 런타임 에러를 검출할 수 있다.
검출부(130)는 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값이 서로 다르면, 런타임 에러를 검출할 수 있다.
검출부(130)는 실시간 에러 검출부(131), 계산부(133) 및 구간 에러 검출부(135)를 포함할 수 있다.
실시간 에러 검출부(131)는 프로세서의 클럭 사이클 마다 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 비교하여 런타임 에러를 검출할 수 있다. 실시간 에러 검출부(131)는 설정된 에러 검증 구간에서 측정되는 모든 측정세트의 결정적 프로그레스 인덱스와 프로그램 카운터 값을 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 비교하여, 서로 불일치 하는 경우를 런타임 에러가 발생하는 경우로 추정할 수 있다.
계산부(133)는 설정된 체크 섬(Check Sum) 구간에서 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 계산할 수 있다. 설정된 체크 섬 구간에서 계산된 체크 섬 값은 메모리(150)에 저장될 수 있다.
구간 에러 검출부(135)는 체크 섬 구간의 종료 지점에서, 계산부(133)에서 계산된 체크 섬 값과 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값에 대해서 미리 계산된 체크 섬 값을 비교하여, 런타임 에러를 검출할 수 있다. 체크 섬 값은 체크 섬 구간에서 누적하여 계산될 수 있다. 예를 들면, 체크 섬 구간의 시작 지점에서 계산된 체크 섬 값은 체크 섬 구간의 종료 지점까지 누적하여 계산될 수 있다. 체크 섬 구간의 종료 지점에서 계산된 체크 섬 값은 메모리(150)에 저장될 수 있다. 구간 에러 검출부(135)는 체크 섬 구간의 종료 지점에서 계산된 체크 섬 값과 메모리(150)에 저장된 정상상태에서의 체크 섬 값을 비교하여 런타임 에러를 검출할 수 있다. 체크 섬 값 만을 비교하여 런타임 에러를 검출함으로써, 프로세서의 클럭 사이클 마다 런타임 에러를 검출하는 경우보다 시간 및 비용, 구현 이슈 부분에서 효율적이다.
계산부(133)는 설정된 체크 섬 구간에서, 순차적으로 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 해쉬(hash) 값을 계산할 수 있다. 예를 들면, 계산부(133)는 설정된 체크 섬 구간의 시작 지점부터 종료 지점까지 순차적으로 서큘러 해쉬(circular hash) 값을 계산할 수 있다.
구간 에러 검출부(135)는 체크 섬 구간의 종료 지점에서, 계산부(133)에서 계산된 해쉬 값과 체크 섬 구간에서 미리 계산된 검증세트의 해쉬 값을 비교하여, 런타임 에러를 검출할 수 있다.
구간 결정부(140)는 입력 데이터에 따라 명령어의 실행 시퀀스가 변하지 않는 구간을 런타임 에러를 검증할 구간으로 결정할 수 있다. 명령어의 실행 시퀀스가 변하지 않는 구간이란, 조건문과 같이 실행 시퀀스가 분기되지 않는 구간을 의미한다. 예를 들면, if와 같은 조건문의 명령어는 입력 데이터에 따라 트루(true) 또는 폴스(false)의 경우로 실행 시퀀스가 분리될 수 있다.
구간 결정부(140)는 명령어의 실행 시퀀스가 변하기 시작하는 지점부터 상기 실행 시퀀스의 변화가 종료되는 지점까지의 구간을 체크 섬(Check Sum) 구간으로 결정할 수 있다.
메모리(150)는 검증세트 및 설정된 체크 섬 구간 별로 미리 계산된 체크 섬 값들을 저장할 수 있다. 예를 들면, 체크 섬 값에는 해쉬 값이 포함될 수 있다. 또한, 체크 섬 값은 체크 섬 계산 메커니즘으로 계산되는 다양한 방식의 값을 포함할 수 있다.
제어부(160)는 스레드가 러닝 상태(running state)에 있지 않은 경우에 결정적 프로그레스 카운터(미도시)가 동작하지 않도록, 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 SWND 신호의 발생을 제어할 수 있다.
제어부(160)는 스레드에서 러닝 상태 중에 인터럽트(interrupt)가 발생하면 SWND 신호를 세트하여, 결정적 프로그레스 카운터(미도시)를 중지시키고, 인터럽트의 서비스 루틴이 종료된 후 다시 상기 스레드가 러닝 상태가 되면 SWND 신호를 클리어하여, 결정적 프로그레스 카운터(미도시)를 동작시킬 수 있다.
제어부(160)는 에러 검출 장치의 전반적인 제어를 담당하고, 측정부(110), 결정부(120), 검출부(130), 구간 결정부(140) 및 메모리(150)의 기능을 수행할 수 있다. 도 1의 실시 예에서 이를 별도로 구성하여 도시한 것은 각 기능들을 구별하여 설명하기 위함이다. 따라서 실제로 제품을 구현하는 경우에 이들 모두를 제어부(160)에서 처리하도록 구성할 수도 있으며, 이들 중 일부만을 제어부(160)에서 처리하도록 구성할 수도 있다.
도 2는 다른 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 2를 참조하면, 일 실시예에 따른 에러 검출 장치는 측정부(210), 결정부(220) 및 검출부(230)를 포함할 수 있다. 에러 검출 장치는 추가적으로 구간 결정부(240), 메모리(250), 제어부(260), 판단부(270), 결정적 프로그레스 카운터(280) 및 프로그램 카운터(290)를 더 포함할 수 있다.
측정부(210)는 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(PC, Program Counter) 값을 측정할 수 있다. 결정적 프로그레스 인덱스는 결정적 실행 시간을 나타내는 지표이다. 결정적 실행 시간이란 명령어의 실행 시간이 일정한 사이클을 가지는 경우를 의미한다. 프로그램 카운터 값은 응용 프로그램 상에서 실행 중인 명령어의 위치를 나타낸다.
측정부(210)는 명령어가 에러 없이 실행되는 조건에서 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정할 수 있다. 명령어가 에러 없이 실행되는 조건을 정상상태라고 정의할 수 있다.
결정부(220)는 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 검증세트로 결정할 수 있다. 검증세트는 결정적 프로그레스 인덱스와 프로그램 카운터 값을 쌍으로 하여 구성될 수 있다. 검증세트는 정상상태에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값으로 구성될 수 있다.
결정부(220)는 측정부(210)에서 런타임 실행 중인 조건에서 측정한 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 결정할 수도 있다. 측정세트는 프로세서의 클럭 사이클 마다 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값으로 구성될 수 있다.
검출부(230)는 측정부(210)에서 런타임 실행 중인 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 검증세트와 측정세트를 비교하여 명령어의 런타임 에러를 검출할 수 있다.
검출부(230)는 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값이 서로 다르면, 런타임 에러를 검출할 수 있다.
구간 결정부(240)는 입력 데이터에 따라 명령어의 실행 시퀀스가 변하지 않는 구간을 런타임 에러를 검증할 구간으로 결정할 수 있다. 명령어의 실행 시퀀스가 변하지 않는 구간이란, 조건문과 같이 실행 시퀀스가 분기되지 않는 구간을 의미한다. 예를 들면, if와 같은 조건문의 명령어는 입력 데이터에 따라 트루(true) 또는 폴스(false)의 경우로 실행 시퀀스가 분리될 수 있다.
구간 결정부(1240)는 명령어의 실행 시퀀스가 변하기 시작하는 지점부터 상기 실행 시퀀스의 변화가 종료되는 지점까지의 구간을 체크 섬(Check Sum) 구간으로 결정할 수 있다.
메모리(250)는 검증세트 및 설정된 체크 섬 구간 별로 미리 계산된 체크 섬 값들을 저장할 수 있다. 예를 들면, 체크 섬 값에는 해쉬(hash) 값이 포함될 수 있다. 또한, 체크 섬 값은 체크 섬 계산 메커니즘으로 계산되는 다양한 방식의 값을 포함할 수 있다.
판단부(270)는 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 기 설정된 기준에 기초하여 판단할 수 있다. 여기서 기 설정된 기준은 명령어의 실행시간이 일정한 사이클을 가지는지 여부로 정의될 수 있다. 따라서 명령어는 기 설정된 기준에 기초하여 결정적 방식 또는 비결정적 방식 여부로 구별될 수 있다. 이에 대해서는 도 5에서 좀 더 상세히 설명한다.
비결정적(Non-deterministic) 방식은 하드웨어 비결정적(HardWare Non-Deterministic, 이하 HWND이라 함)실행방식 및 소프트웨어 비결정적(SoftWare Non-Deterministic, 이하 SWND이라 함)실행방식을 포함할 수 있다. HWND는 하드웨어에 기초한 프로세서의 명령어 수준에서 비결정적 방식으로 명령어를 실행하는 방식을 의미한다. SWND는 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 비결정적 방식으로 함수를 실행하는 방식을 의미한다.
제어부(260)는 스레드가 러닝 상태(running state)에 있지 않은 경우에 결정적 프로그레스 카운터(280)가 동작하지 않도록, 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 SWND 신호의 발생을 제어할 수 있다.
결정적 프로그레스 카운터(DPC, Deterministic Progress Counter)(280)는 결정적 방식으로 실행되는 명령어에 대하여 결정적 프로그레스 인덱스를 생성할 수 있다. 예를 들면, 결정적 프로그레스 카운터(280)는 결정적 방식으로 실행되는 명령어의 실행시간을 카운트하여, 결정적 프로그레스 인덱스로 생성할 수 있다.
결정적 프로그레스 카운터(280)는 명령어의 실행방식이 결정적 방식으로 판단되면 시스템 클럭에 기초하여 결정적 프로그레스 카운터의 값을 증가시킬 수 있다.
결정적 프로그레스 카운터(280)는 HWND 신호 및 SWND 신호 중 적어도 하나에 의하여 동작이 제어될 수 있다. HWND 신호 및 SWND 신호 중 적어도 하나가 결정적 프로그레스 카운터(280)에 세트되면, 결정적 프로그레스 카운터(280)는 동작을 중지할 수 있다. 세트된 신호가 클리어되면, 결정적 프로그레스 카운터(280)는 다시 동작할 수 있다.
프로그램 카운터(290)는 프로그램 상에서 실행 중인 명령어의 위치를 나타내는 프로그램 카운터 값을 생성할 수 있다. 예를 들면, 프로그램 카운터(290)는 컴파일 된 명령어에 프로세서의 클럭 사이클을 매칭시켜 프로그램 카운터 값을 생성할 수 있다.
제어부(260)는 에러 검출 장치의 전반적인 제어를 담당하고, 측정부(210), 결정부(220), 검출부(230), 구간 결정부(240), 메모리(250), 판단부(270), 결정적 프로그레스 카운터(280) 및 프로그램 카운터(290)의 기능을 수행할 수 있다. 도 2의 실시 예에서 이를 별도로 구성하여 도시한 것은 각 기능들을 구별하여 설명하기 위함이다. 따라서 실제로 제품을 구현하는 경우에 이들 모두를 제어부(260)에서 처리하도록 구성할 수도 있으며, 이들 중 일부만을 제어부(260)에서 처리하도록 구성할 수도 있다.
도 3은 일 실시예에 따른 에러 검출 장치가 적용되는 컴퓨팅 환경을 나타낸 도면이다.
응용 프로그램은 프로세서 상에서 메모리와 하드웨어 디바이스를 자원으로 하여 정해진 기능을 수행한다. 메모리는 보통의 경우 계층적 구조를 가진다. 이때, 접속(access) 속도가 빠른 로컬 메모리는 로컬 버스에 구비되고, 접속 속도는 느리지만 저렴한 외부 메모리는 시스템 버스상에 구비될 수 있다. 또한, 다중 프로세서는 높은 성능의 요구사항을 만족시키기 위해 하나의 시스템에 집적된 복수의 프로세서들을 이용하여 응용 프로그램을 병렬처리 한다. 외부 디바이스는 시스템 버스 및 로커 버스를 통하여 프로세서에 응용 프로그램의 실행을 요청할 수 있다.
응용 프로그램은 하나 이상의 스레드를 포함할 수 있다. 하나의 프로세서 상에서 다중 스레드가 실행될 수 있다. 하나의 프로세서 상에서 다중 스레드가 실행되는 것을 멀티 스레딩이라고 한다. 응용 프로그램의 성능 및 진행상태를 측정하기 위해서는 응용 프로그램을 구성하는 스레드의 성능 및 진행상태를 측정할 필요가 있다. 일 실시예에 따른 에러 감출 장치의 적용 환경은 도 1에 도시된 예에 한정되지 않는다.
도 4는 응용 프로그램의 기능을 수행하는 명령어를 결정적 실행 및 비결정적 실행으로 구분하여 나타낸 도면이다.
프로그램을 구성하는 스레드는 정의된 기능을 수행하기 위한 명령어들로 구성되어 있으며, 해당 명령어들이 컴퓨터에서 실행됨으로써, 프로그램이 진행 될 수 있다. 응용 프로그램 상에서 실행 중인 명령어의 위치는 프로그램 카운터(PC, Program Counter)에서 카운트 된 프로그램 카운터 값으로 표시될 수 있다. 프로그램 카운터 값은 프로그램을 디버깅하는데 사용될 수도 있다.
프로그램 카운터 값은 프로그램의 진행상태를 파악하는데 결정적인 역할을 한다. 그러나 프로그램에서 발생하는 에러를 식별하기에는 프로그램 카운터 값 만으로는 부족하다. 만약 프로그램의 실행 중 각각의 지점 별로 명령어가 위치해야 하는 프로그램 카운터 값을 정의할 수 있다면, 특정 지점에서 측정된 프로그램 카운터 값과 미리 저장된 프로그램 카운터 값의 비교를 통하여 프로그램의 런타임 에러를 식별할 수 있을 것이다.
프로세서의 사이클 별로 프로그램 카운터 값을 절대값으로 정의하는 것은 용이하지 않다. 프로그램이 동작하는 런타임 환경의 변화는 명령어의 실행 사이클에 영향을 미치기 때문이다.
그러나 명령어의 실행 사이클에서 실행시간의 변화에 영향을 미치는 요소를 제거할 수 있다면, 상기 요소가 제거된 사이클은 명령어의 위치를 나타내는 절대 값으로 사용될 수 있을 것이다. 상기 요소가 제거된 사이클 또는 인덱스를 명세서에서는 결정적 프로그레스 인덱스(Deterministic Progress Index)로 정의하기로 한다.
응용 프로그램은 스레드들로 구성될 수 있다. 스레드는 특정 기능을 수행하기 위한 명령어들로 구성될 수 있다. 명령어의 실행 방식은 결정적(deterministic) 실행 방식 및 비결정적(nondeterministic) 실행 방식으로 구분될 수 있다.
결정적 실행 방식은 명령어의 실행 완료 지점 또는 명령어 그룹의 실행완료 지점이 항상 일정한 사이클을 가지는 경우를 의미한다. 반면, 비 결정적 실행 방식은 명령어 또는 명령어 그룹의 실행완료 지점이 일정하지 않은 지연 사이클을 가지는 경우를 의미한다.
도 4를 참조하면, 스레드가 실행되는 물리적 시간(Physical time)은 일정하게 증가하며 결정적 실행(Deterministic execution) 영역은 항상 동일한 실행 시간 내에 명령어들의 실행이 완료된다. 반면에 비결정적 실행(Nondeterministic execution) 영역은 다른 스레드들의 실행으로부터 영향을 받거나, 실행지점에 따라 발생하는 다른 상황 때문에 완료시간이 일정하지 않다.
비결정적 실행은 프로세서의 명령어 수준에서 비결정적 실행을 하는 하드웨어 비결정적 실행(Hardware nondeterministic execution, 이하 HWND라 함)과 명령어들로 구성된 함수 또는 소프트웨어 적으로 실행 시간이 일정하지 않은 이벤트 수준에서 비결정적 실행을 하는 소프트웨어 비결정적 실행(Software nondeterministic execution, 이하 SWND라 함)으로 구분될 수 있다.
스레드의 실행에서 SWND와 HWND를 제외한 나머지 부분의 실행은 명령어의 실행시간이 일정하다고 할 수 있다. 따라서, 스레드의 실행에서 SWND와 HWND를 제외한 나머지 부분을 실행하는데 필요한 사이클은 매번 동일한 값을 가질 수 있다. SWND와 HWND를 제외한 나머지 부분을 지표화하면 스레드의 결정적(deterministic) 실행 지표로 활용할 수 있다. 즉, 결정적 실행 시간에 대한 지표는 스레드의 실행에 있어서 항상 동일한 위치를 나타내게 된다. 여기서 결정적 실행 시간을 나타내는 지표를 결정적 프로그레스 인덱스(Deterministic Progress Index, 이하 DPI라 함)라고 정의한다. DPI는 다음의 수식으로 표현될 수 있다.
P스레드 = P결정적 실행 + P비결정적 실행
τ결정적 스레드 프로그레스 = τ런 상태 - (τSWND + τHWND)
여기서 응용 프로그램을 구성하는 스레드의 프로그레스 P스레드 는 결정적 프로그레스(P결정적 실행)와 비결정적 프로그레스(P비결정적 실행)로 구분될 수 있다. 따라서, 스레드의 결정적 프로그레스를 나타내는 시간(τ결정적 스레드 프로그레스)은 스레드가 러닝 상태(running state)에 있는 시간(τ런 상태) 중에서 SWND 실행 시간(τSWND)과 HWND 실행 시간(τHWND)을 제거하면 된다.
도 5는 일 실시예에 따른 에러 검출 장치에서 사용되는 결정적 프로그레스 인덱스의 개념을 설명하기 위한 도면이다.
도 5는 스레드에서 SWND와 HWND가 제외된 논리적인(logical)인 시간을 지표화한 DPI 개념을 나타낸다. SWND 및 HWND 중 적어도 하나가 실행되는 동안 물리적인 시간은 증가하지만 DPI는 증가하지 않는다. SWND 및 HWND의 실행이 종료되면, DPI는 다시 증가할 수 있다. 따라서 DPI는 스레드의 실행을 나타내는 결정적 지표로 사용될 수 있다.
스레드의 실행에 있어서 SWND 및 HWND는 기 설정된 기준에 의해 판단될 수 있다. 기 설정된 기준은 현재까지 측정된 명령어 또는 명령어들로 구성된 함수의 실행시간이 일정한 경우와 일정하지 않은 경우를 고려하여 정의되었다. 다만, 여기서 기 설정된 기준은 정의될 수 있는 SWND 및 HWND의 일 예일뿐 상기 예에 한정되지 않으며 일측에 따른 발명이 속하는 분야에서 통상의 지식을 가진 자가 용이하게 유추할 수 있는 범위를 포함할 수 있다. 다음의 표 1에 SWND 및 HWND의 일 예가 분류되어 있다.
종류







SWND
스케쥴 타임 러닝 상태를 제외한 모든 스레드 상태
이벤트 또는 타이머 대기(EventWait(), sleep(),…)
인터럽트 관리 인터럽트 관리 명령어
인터럽스 서비스 루틴
동적 자원 할당 메모리 할당/비할당
스레드 생성/종료
비결정적 사용자 함수 비지 웨이팅(Busy waiting)
비결정적 외부 디바이스 접속 비결정적 하드웨어 디바이스를 위한 블록 접속(Blocked access)
기타


HWND



외부 메모리 접속 DRAM 접속
캐시 미스(Cache miss) 명령어/데이터 캐시 미스
브랜치(Branch) 동적 브랜치 예측(Dynamic branch prediction)
기타 기타
도 6은 스레드의 상태 변화에 따른 프로그레스 카운터의 동작여부를 나타낸 도면이다.
운영체제는 응용 프로그램을 구성하는 여러 스레드들을 통하여 시스템 자원이 효율적으로 활용될 수 있도록 스레드들의 실행을 관리 및 스케줄링 한다. 스레드는 스케줄링에 따라 도 6과 같은 상태 전이를 할 수 있다.
결정적 프로그레스 카운터(Deterministic Progress Counter, 이하 DPC라 함)는 스레드가 러닝 상태(running state)가 아닌 경우에는 동작하지 않을 수 있다. 예를 들면, 결정적 프로그레스 카운터(DPC)는 스레드가 러닝 중에 인터럽트(interrupt)가 발생하면 SWND 신호가 세트(set)되어 동작하지 않고, 인터럽트의 서비스 루틴이 실행된 후, 다시 스레드가 러닝 상태가 될 때, SWND 신호를 클리어(clear)됨으로써, 다시 동작할 수 있다.
즉, 결정적 프로그레스 카운터(DPC)는 스레드가 러닝 상태인 경우에만 동작함으로써, 결정적 프로그레스 인덱서를 생성할 수 있다.
도 7은 결정적 프로그레스 카운터와 스레드 별 결정적 프로그레스 인덱스의 관계를 나타낸 예이다.
도 7을 참조하면, 결정적 프로그레스 카운터(DPC)는 프로세서 별로 위치하며, SWND 신호와 HWND 신호에 의하여 활성화 여부가 결정될 수 있다. 도 7에서는 OR 논리회로로서 SWND 신호 또는 HWND 신호가 세트된 경우에 카운터가 불활성화 되도록 구성되어 있다. 여기서 카운터의 활성화 여부는 카운터의 동작 또는 부동작 여부를 의미한다. 또한 SWND 신호와 HWND 신호에 의하여 카운터가 제어되는 방식은 다양한 방식으로 가능하다.
일 실시예에 따른 에러 검출 장치는 스레드 별로 각각의 결정적 프로그레스 인덱스(DPI)를 저장할 수 있는 메모리를 포함 할 수 있다. 에러 검출 장치는 러닝 상태에 있는 스레드의 DPI 메모리에 현재의 DPC 값을 복사할 수 있다. 즉, 에러 검출 장치는 DPC를 통해 카운트 된 값을 DPI로 복사할 수 있다. 에러 검출 장치는 주기적으로 DPC의 값을 실행 중인 스레드의 DPI 메모리에 복사할 수도 있다.
그러나 실시간으로 DPC 값을 DPI 메모리에 복사하는 것은 런타임 성능의 저하를 가져오기 때문에, 실행 중인 스레드의 DPI는 복사 없이, DPC 자체가 표시 하도록 할 수 있다. 그리고 실행 중인 스레드에서 다른 스레드로 컨텍스트 스위치(context switch) 되는 시점에, 계산된 DPC 값을 DPI 메모리로 복사할 수 있다. 에러 검출 장치는 다른 스레드가 디스패치(dispatch)되어 러닝 상태로 전이되는 경우 다른 스레드의 DPI 메모리에 저장되어 있던 DPI를 DPC에 세트하여 이전 실행 지표인 DPI로부터 DPC가 카운트 하도록 할 수 있다.
또한, 에러 검출 장치는 다시 원래의 스레드로 컨텍스트 스위치가 발생하면, 원래의 스레드에 해당하는 DPI 메모리에 저장된 DPI를 로딩하여 DPC의 초기값으로 세트할 수 있다.
도 8은 일 실시예에 따른 에러 검출 방법에서 운영체제를 이용하여 스케쥴러 동작을 수행하는 경우의 흐름도이다.
SWND 신호는 스레드가 러닝 상태에 있을 때, 비결정적 함수가 실행되는 경우에도 발생할 수 있다. 예를 들면, 스레드에 "malloc"과 같은 동적 메모리 할당 시스템 함수가 호출되는 경우 "malloc"의 실행 시간이 일정하지 않기 때문에 에러 검출 장치는 "malloc" 함수를 호출하는 지점에서 결과를 받을 때까지 SWND 실행 구간으로 분류하여 해당 구간에서는 DPC가 동작하지 않도록 해야 한다. 이렇게 실행시간이 일정하지 않은 "malloc"과 같은 함수를 비결정적 함수(ND function)라고 정의할 수 있다.
801단계에서 에러 검출 장치는 운영체제에 의한 스케줄러를 초기화할 수 있다.
803단계에서 에러 검출 장치는 결정적 프로그레스 인덱스(DPI) 모듈을 초기화할 수 있다. 초기화 과정은 새로 실행되는 절차와 기존에 실행된 절차가 구별되게 하기 위함이다.
805단계에서 에러 검출 장치는 스케쥴러 상에서 실행하려는 명령어에 따라 준비된 스레드를 선택한다. 실행하려는 명령어는 스레드마다 다르게 할당될 수 있는데, 스케쥴러 상에서 실행 명령어에 따라 정해진 스레드가 선택될 수 있다.
807단계에서 에러 검출 장치는 스레드에 저장된 결정적 프로그레스 인덱스(DPI)를 결정적 프로그레스 카운터(DPC)의 초기 값으로 세팅할 수 있다. 스레드에서 DPC 값이 처음부터 시작된 경우는 0부터 시작될 수도 있지만, 컨텍스트 스위치로 인해 다른 스레드에서 원래의 스레드로 스위치 된 경우에는 DPI 메모리에 저장되어 있는 DPI를 DPC의 초기 값으로 세팅하여 카운트를 시작할 수 있다.
809단계에서 에러 검출 장치는 스레드의 스레드 제어 블록(Thread Control Block)에 비결정적 함수(ND Function)가 실행 중임을 나타내기 위해 설정된 플래그 값이 세트되어 있는지 판단한다.
811단계에서 에러 검출 장치는 스레드의 러닝 상태에서 비결정적 함수가 실행되는 경우를 나타내기 위해 스레드 제어 블록의 플래그를 이용할 수 있다. 일반적인 스케줄러의 스레드 제어 알고리즘에 SWND 구간에서는 DPC 값이 증가하지 않도록 코드가 추가될 수 있다.
813단계에서 에러 검출 장치는 스레드 제어 블록의 플래그 값이 세트되지 않은 경우에는 실제 스레드의 명령어를 유효하게 실행하는데 사용되지 않은 결정적 프로그레스 카운터 증가분을 보상할 수 있다.
815단계에서 에러 검출 장치는 SWND 신호를 클리어하여 중지된 결정적 프로그레스 카운터를 동작시킬 수 있다. 각각의 명령어 별로 보정해 주어야 하는 DPC 사이클이 정의될 수 있고, 에러 검출 장치는 정의된 값에 따라 DPC를 보정할 수 있다. 보정 가능한 DPC 사이클은 세트, 클리어, 비활성화와 같이 형식적으로 사용되는 동작에 소요되는 사이클에 해당한다. 예를 들면, SWND를 세트(set)하는데 사용된 실행시간이 4 사이클이라면 스레드에서 명령어를 실행하는데 필요한 사이클이 아니므로 SWND를 클리어 하기 전에 DPC 값에서 4 사이클을 빼서 보정한다. 마찬가지로 비결정적 함수를 호출하는 경우에도 DPC 값을 보정할 수 있다.
817단계에서 에러 검출 장치는 스레드 제어 블록의 플래그 값이 세트된 경우에는 SWND 신호를 결정적 프로그레스 카운터(DPC)에 세트하여 결정적 프로그레스 카운터(DPC)를 중지시킬 수 있다.
819단계에서 에러 검출 장치는 스레드를 디스패치할 수 있다.
821단계에서 스레드는 러닝 상태가 된다. SWND의 실행이 종료된 후에는 DPC가 동작할 수 있고, 스레드에 요구된 명령어가 계속하여 실행될 수 있다(B).
823단계에서 스케줄 이벤트가 발생할 수 있다.
825단계에서 에러 검출 장치는 러닝 상태인 스레드에서 스케줄 이벤트가 발생하면 SWND 신호를 DPC에 세트하여 DPC의 동작을 중지시킬 수 있다. 스케줄 이벤트의 예로는 인터럽트, 입출력 대기, 비결정적 함수 호출과 같은 경우가 포함될 수 있다.
827단계에서 인터럽트가 발생하였는지 판단할 수 있다.
829단계에서 에러 검출 장치는 인터럽트가 발생하면 인터럽트 서비스 루틴을 실행하고, 이때 SWND 신호를 DPC에 세트하여 DPC의 동작을 중지시킬 수 있다.
831단계에서 에러 검출 장치는 DPC가 중지된 상태에서 컨텍스트 스위치 이벤트의 발생여부를 판단하고, 837단계에서 에러 검출 장치는 컨텍스트 스위치 이벤트가 발생하면 중지된 DPC의 DPC 값을 스위치 되기 전 스레드의 결정적 프로그레스 인덱스(DPI)로 저장할 수 있다. 또한, 에러 검출 장치는 컨텍스트 스위치가 발생하는 지점까지 실행된 컨텍스트 결과를 저장할 수 있다.
833단계에서 에러 검출 장치는 DPC의 동작이 중지된 상태에서 스케줄 이벤트가 종료하면 실제 스레드의 명령어를 유효하게 실행하는데 사용되지 않은 DPC 증가분을 보정하고, 835단계에서 에러 검출 장치는 SWND 신호를 클리어하여 중지된 DPC를 동작시킬 수 있다.
또한, 에러 검출 장치는 컨텍스트가 스위치된 후 준비된 스레드를 선택하여 (A) 절차를 반복할 수 있다.
도 9는 일 실시예에 따른 에러 검출 방법에서 스레드가 러닝 상태에 있을 때, 비결정적 함수가 동작하는 경우의 결정적 프로그레스 카운터의 동작을 나타낸 흐름도이다..
910단계에서 에러 검출 장치는 스레드의 스레드 제어 블록에 사용자 함수(ND Function)가 실행 중임을 나타내기 위해 설정된 플래그 값을 세트(set)할 수 있다. SWND 신호를 발생시킬 수 있는 여러 가지 경우들 중, 사용자 함수를 이용하는 경우는 별도의 API(Application Program Interface)를 제공하여 SWND 신호를 발생시킬 수 있다.
대표적인 경우가 "busy waiting"을 하며 특정 기능을 반복적으로 수행하는 경우이다. 예를 들면, 외부 디바이스의 입력 큐(Queue)가 비어 있는지를 확인하여 비어 있는 경우 데이터를 추가하는 함수인 경우에 외부 디바이스의 상태에 따라 확인에 필요한 지연 시간이 비결정적이게 된다. 따라서 이와 같은 경우 에러 검출 장치는 별도의 API를 제공하여 비결정적인 구간에서 DPC가 동작하지 않도록 할 수 있다. 다음의 일 예는 busy waiting 함수에 대한 처리 방법을 보여 주는 의사 코드(pseudo code)이다. 또한, "DetermSWNDSet()", "DetermSWNDClear()"과 같은 API를 제공하여 비결정적 실행 구간을 설정할 수 있다.
Figure 112012058958259-pat00001
920단계에서 에러 검출 장치는 플래그 값이 세트된 경우, SWND 신호를 DPC에 세트하여 DPC의 동작을 중지시킬 수 있다.
930단계에서 에러 검출 장치는 비결정적 함수를 실행할 수 있다. 예를 들면, 비결정적 함수에는 사용자 함수가 포함될 수 있다.
940단계에서 에러 검출 장치는 비결정적 함수의 실행이 완료되면 설정된 플래그 값을 클리어할 수 있다.
950단계에서 에러 검출 장치는 실제 스레드의 코드를 유효하게 실행하는데 사용되지 않은 결정적 프로그레스 카운터 증가분을 보정할 수 있다.
960단계에서 에러 검출 장치는 SWND 신호를 클리어하여 DPC를 실행 시간이 일정한 결정적 구간에서만 동작하도록 할 수 있다.
도 10은 일 실시예에 따른 에러 검출 방법에서 하드웨어 비결정적 실행 신호가 발생하는 경우의 흐름도이다.
1010단계에서 에러 검출 장치는 결정적 프로그레스 카운터(DPC)를 초기화할 수 있다. 여기서 초기화는 시작되는 명령어 실행 절차가 기존의 명령어 실행 절차로부터 차단되는 것을 의미한다.
1020단계에서 에러 검출 장치는 프로세서의 스톨(stall) 신호를 확인할 수 있다. 에러 검출 장치는 스톨 신호 이외에 프로세서의 비결정적인 실행 구간을 나타낼 수 있는 프로세서의 상태 또는 신호가 있다면 DPC를 제어하는 신호로 사용할 수 있다.
1030단계에서 에러 검출 장치는 스톨 신호가 검출되는지 여부를 판단하고, 1050단계에서 에러 검출 장치는 스톨 신호가 검출되는 경우에는 HWND 신호를 세트하여 DPC 의 동작을 중지시킬 수 있다.
1040단계에서 스레드 프로그레스 트래킹 장치는 스톨 신호가 검출되지 않는 경우에는 HWND를 클리어하여 DPC의 동작이 중지되어 있다면 다시 동작하도록 할 수 있다. DPC의 동작이 중지되지 않은 경우에는 계속해서 DPC가 동작하도록 한다.
또한, DPC의 비트폭(bit-width)은 프로세서의 사이클을 고려하여 결정될 수 있다. DPC의 비트폭이 너무 작은 경우에는 오버플로우가 자주 발생하여 업데이트 주기를 매우 짧게해야 한다. 따라서, DPC의 비트폭을 64비트 이상으로 하여 시스템의 전원이 지속되는 동안 오버플로우가 발생하지 않도록 할 수 있고, 업데이트에 따른 성능 저하를 최소화 할 수 있다. 시스템의 동작 클럭이 50MHz 이하라면 클럭에 비례하게 DPC의 비트 폭을 줄여 구현비용을 최소화할 수 있다.
도 11은 일 실시예에 따른 에러 검출 장치에서 사용하는 검증세트와 측정세트를 나타낸 도면이다.
도 11을 참조하면, 에러 검출 장치는 스레드의 결정적 프로그레스 인덱스(DPI)를 생성할 수 있다. 스레드에서 결정적 방식으로 실행되는 명령어의 실행시간 동안 DPI가 생성될 수 있다.
에러 검출 장치는 명령어가 에러 없이 실행되는 조건에서 프로그램 카운터 값을 카운트할 수 있다. 또한, 에러 검출 장치는 명령어가 런타임 실행 중인 조건에서 프로그램 카운터 값을 카운트 할 수 있다.
스레드의 DPI는 명령어의 프로그램 카운터 값과 매칭될 수 있다. Tv(DPIi, PCi)는 명령어가 에러 없이 실행되는 조건에서 매칭된 DPI와 프로그램 카운터 값의 세트를 나타낸다. 즉, 검증세트를 나타낸다. Tf(DPIi, PCi)는 런타임 실행 중인 조건에서 매칭된 DPI와 프로그램 카운터 값의 세트를 나타낸다. 즉 측정세트를 나타낸다.
검증세트와 측정세트의 값이 매칭되지 않으면, 런타임 에러가 발생한 것으로 추정될 수 있다. 보다 구체적으로 검증세트의 DPI, PC 값과 측정세트의 DPI, PC 값이 동일하지 않으면, 런타임 에러가 발생한 것으로 간주될 수 있다.
도 11을 참조하면, DPIi 0~6 까지는 기준 값과 동일한 PC상에 명령어가 위치하며, DPIi가 7인 경우에, PCi가 일치하지 않음을 알 수 있다. 즉, 이때 런타임 에러가 발생한 것으로 추정될 수 있다.
도 12는 다른 일 실시예에 따른 에러 검출 장치의 블록도이다.
도 12를 참조하면, 일 실시예에 따른 에러 검출 장치는 DPI 모듈(1210), 프로세서(1220), 측정세트 모듈(1230), 검증세트 모듈(1240), 비교부(1250) 및 에러검출부(1260)를 포함할 수 있다.
DPI 모듈(1210)은 명령어가 런타임 실행 중인 조건에서 DPI를 생성할 수 있다. 프로세서(1220)는 명령어가 런타임 실행 중인 조건에서 프로그램 카운터(PC) 값을 측정할 수 있다. 측정세트 모듈(1230)은 DPI 모듈(1210)에서 생성된 DPIi와 프로세서(1220)에서 측정된 프로그램 카운터 값(PCi)을 매칭시킬 수 있다. 매칭된 DPI와 프로그램 카운터 값(PCi)이 측정세트의 구성요소가 될 수 있다.
검증세트 모듈(1240)은 명령어가 에러 없이 실행되는 조건에서 생성된 DPI와 측정된 프로그램 카운터 값이 매칭 된 검증세트를 저장할 수 있다. 검증세트 모듈(1240)은 검증세트를 시스템 상의 메모리나 이와 유사한 저장 장치에 저장할 수 있다.
비교부(1250)는 측정세트와 검증세트를 비교할 수 있다. 에러 검출부(1260)는 비교결과, 측정세트와 검증세트가 일치하지 않으면, 명령어가 런타임 실행 중에 에러가 발생하였음을 추정할 수 있다. 즉, 런타임 에러를 검출할 수 있다.
에러 검출부(1260)는 측정세트와 검증세트가 일치하지 않으면 에러 감지 신호를 발생하여, 에러 검출을 인식할 수도 있다. 에러 감지 신호의 예로는 익셉션(Exception)이 포함될 수 있다.
프로세서(1220)의 익셉션 처리 루틴은 검출된 에러에 대응하는 처리 프로세서를 구동할 수 있다. 이러한 에러 검출 결과에 대한 처리 루틴은, 프로그램의 시스템에 미치는 영향이나 중요도에 따라 프로그램을 중단시키거나 재 시작 하도록 할 수 있다
DPI의 결정적인 특성은 프로그램 실행 시 소요되는 절대 시간을 의미하여, 동일한 DPI에서는 프로그램에서 동일한 실행 위치를 나타낸다고 할 수 있다. PC값과 다른 점은 예를 들어 프로그램에서 for, while과 같은 loop를 수행 하는 경우 PC값은 프로그램 상에서 명령어의 위치를 나타낼 수는 있지만, 몇 번째 루프 실행인지를 나타낼 수 없다.
그러나 DPI는 프로그램의 실행 위치를 나타내며, 비결정적인 실행 사이클이 제거된 것이기 때문에 동일한 DPI에서는 동일한 위치에서 스레드가 실행되고 있음이 보장될 수 있다.
정상상태에서의 DPI와 PC값에 대한 모델이 정의되면, 런타임에서 DPI와 PC값을 미리 정의된 DPI, PC값과 비교 함으로써 에러여부를 식별할 수 있다.
이때 프로세서의 매 클럭 사이클마다 모든 DPI, PC 쌍에 대하여 프로파일 값과 런타임 실행에서의 DPC, PC값을 비교하여 오류를 검출하는 방법과, 정의된 에러 검증 구간에 대하여 발생된 DPI, PC 값의 프로파일 결과에 대한 서큘러 해쉬(circular hash) 값과 동일한 에러 검증 구간에서 측정된 DPC, PC 값의 서큘러 해쉬(circular hash) 값을 비교하여 오류를 검출하는 방법이 있다.
전자를 실시간 오류 검침 기법(Realtime fault detection: RFD)이라 하고, 후자를 지연 구간 오류 검출 기법(Delayed fault detection: DFD)이라고 정의할 수 있다.
프로그램의 정상적으로 실행되는 상황에서 기록된 DPI와 PC값은 하나의 검증 쌍이 되며, 에러가 발생하지 않는 경우 특정 DPI에서의 PC값은 동일해야 한다. 즉, 임의의 DPIi에서 기록된 PCi 의 값은 런타임 실행 중에 측정된 DPIi에서의, PCi 값과 동일해야 한다.
도 13은 일 실시예에 따른 에러 검출 장치에서 실시간으로 에러를 검증하는 구간을 나타낸 도면이다.
DPI, PC값을 비교하여 에러 검증을 수행할 수 있는 구간은 다음의 조건을 고려하여 결정될 수 있다. 입력 데이터에 따라 실행 시퀀스가 변하는 구간을 피해야 한다. 즉, 조건문과 같이 조건에 따라 분기가 되는 구간은 분기 조건에 따라 가변 적이기 때문에, 분기가 일어나는 지점은 피하여 구간이 결정될 필요가 있다.
입력 데이터에 따라 실행 시퀀스가 변하는 구간은 컴파일러에서 자동으로 조건 분기를 피하여 자동으로 구간을 결정하도록 설정될 수 있다. 또는 프라그마(pragma)를 사용하여 수동으로 컴파일러에서 조건 분기를 인식하도록 할 수도 있다.
또한, 모든 분기에 대하여 각각 분기의 DPI, PC값을 저장하여, 분기 조건의 트루(true)/폴스(false)에 따른 비교 값들을 별도로 저장함으로써, 에러 검출에 사용할 수도 있다.
도 13을 참조하면, 지점(1310)에서 에러 검증 구간이 시작될 수 있다. 에러 검출 장치는 DPC를 리셋하고 활성화여 DPI를 생성할 수 있다. 에러 검출 장치는 지점(1320)까지 프로세서의 매 싸이클 마다 해당 DPI에 대한 PC값을 비교하여 실시간으로 런타임 에러를 검출할 수 있다. 지점(1320)에서 에러 검증 구간은 종료될 수 있다.
도 14는 일 실시예에 따른 에러 검출 장치에서 체크 섬 값을 이용하여 에러를 검증하는 구간을 나타낸 도면이다.
프로그램이 매우 크고 에러 검증 구간이 많은 경우, 모든 DPI, PC값을 프로파일(profile) 하는 것은 매우 많은 양의 메모리를 요구한다. 따라서 실시간으로 에러 검출이 요구되지 않는 구간에 대해서는 메모리를 효율적으로 사용하는 방법을 적용할 수 있다.
즉, 전체 프로그램에서 체크 섬 구간을 결정하고 해당 구간에 대해서는 모든 DPI, PC값을 저장하여 비교하는 것이 아니라, 체크 섬 구간의 시작에서 끝까지 저장된 DPI, PC값 들에 대한 서큘러 해쉬(circular hash) 값을 계산하여 저장할 수 있다.
에러 검출 장치는 프로그램이 실행 될 때 결정된 체크 섬 구간에 대하여 측정된 DPI, PC값에 대한 서큘러 해쉬(circular hash) 값을 계산하고, 해당 구간의 마지막 지점에서 미리 저장된 서큘러 해쉬(circular hash) 값과 비교할 수 있다. 에러 검출 장치는 비교 결과 서큘러 해쉬 값이 서로 다른 경우, 에러 발생을 식별할 수 있다. 체크 섬 구간을 이용하는 방식은, 에러를 검출하는데 어느 정도 마진이 허용되는 프로그램에 대하여는 모든 DPI, PC값을 프로파일하여 비교하는 방법에 비하여, 체크 섬 구간 별로 특정 길이(예를 들면, 128bit)의 해쉬 값만 저장해도 됨으로 매우 적은 메모리 사용으로 에러를 검출 할 수 있다.
에러 검출 장치는 컴파일러를 이용할 수 있다. 기본 코드 진행 시퀀스에서, 체크 섬 구간에 대하여 설정을 하고 체크 섬 구간의 시작임을 알리는 코드(1410)가 삽입될 수 있다. 또한, 체크 섬 구간의 끝임을 알리는 코드(1420)가 삽입될 수 있다.
컴파일러는 코드(1410)와 코드(1420)를 인식함으로써, 체크 섬 구간을 인식할 수 있다.
체크 섬 구간을 이용할 경우, 일반적인 모든 코드에 대하여 조건 분기점을 기준으로 구간의 시작과 끝이 설정될 수 있다. 컴파일러는 조건 분기의 결과에 무관하게 설정된 구간에서 발생된 DPI, PC값에 대한 해쉬 값을 비교하여 에러 발생여부를 식별할 수 있다.
도 15는 일 실시예에 따른 에러 검출 장치에서 체크 섬 구간의 시작지점과 종료지점을 나타낸 도면이다.
도 15를 참고하면, 분기점(1510)을 기준으로 체크 섬 구간의 시작지점(1511) 및 시작지점(1515)이 결정될 수 있다. 분기점(1520)을 기준으로 체크 섬 구간의 종료지점(1513)이 결정될 수 있고, 새로운 체크 섬 구간의 시작지점(1521) 및 시작지점(1525)이 결정될 수 있다. 분기점(1530)을 기준으로 체크 섬 구간의 종료지점(1517)이 결정될 수 있고, 새로운 체크 섬 구간의 시작지점(1531) 및 시작지점(1535)이 결정될 수 있다.
분기점(1540)을 기준으로 체크 섬 구간의 종료지점(1527), 종료지점(1533) 및 종료지점(1557)이 결정될 수 있고, 새로운 체크 섬 구간의 시작지점(1541) 및 시작지점(1545)이 결정될 수 있다. 분기점(1550)을 기준으로 체크 섬 구간의 종료지점(1523)이 결정될 수 있고, 새로운 체크 섬 구간의 시작지점(1551) 및 시작지점(1555)이 결정될 수 있다. 마지막으로 종료지점(1537), 종료지점(1543) 및 종료지점(1553)이 결정될 수 있다.
각각의 체크 섬 구간에서는 저장된 해쉬 값과 계산된 해쉬 값의 비교를 통해 런타임 에러가 검출될 수 있다.
도 16은 일 실시 예에 따른 에러 검출 방법의 흐름도이다.
1610단계에서, 에러 검출 장치는 명령어가 에러 없이 실행되는 조건에서 측정된 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 검증세트로 결정할 수 있다.
1620단계에서, 에러 검출 장치는 명령어가 런타임 실행 중인 조건에서 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정할 수 있다.
1630단계에서, 에러 검출 장치는 런타임 실행 중인 조건에서 측정된 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 하고, 검증세트와 측정세트를 비교할 수 있다.
1640단계에서, 에러 검출 장치는 비교 결과에 기초하여 명령어의 런타임 에러를 검출할 수 있다.
일 측면에 있어서, 에러 검출 장치는 프로세서의 클럭 사이클 마다 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값과 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 비교하여 런타임 에러를 검출할 수 있다.
일 측면에 있어서, 에러 검출 장치는 설정된 체크 섬(Check Sum) 구간에서 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 계산할 수 있다.
일 측면에 있어서, 에러 검출 장치는 체크 섬 구간의 종료 지점에서, 계산된 체크 섬 값과 검증세트에 대해서 미리 계산된 체크 섬 값을 비교하여, 런타임 에러를 검출할 수 있다.
일 측면에 있어서, 에러 검출 장치는 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 기 설정된 기준에 기초하여 판단할 수 있다.
일 측면에 있어서, 에러 검출 장치는 결정적 프로그레스 카운터(DPC, Deterministic Progress Counter)에 의하여, 결정적 방식으로 실행되는 명령어에 대하여 결정적 프로그레스 인덱스를 생성할 수 있다.
일 측면에 있어서, 에러 검출 장치는 프로그램 카운터(PC, Program Counter)에 의하여, 프로그램 상에서 실행 중인 명령어의 위치를 나타내는 프로그램 카운터 값을 생성할 수 있다.
일 측면에 있어서, 에러 검출 장치는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 세트로 하는 검증세트 및 측정세트를 이용함으로써, 응용 프로그램의 실행 중에 발생하는 런타임 에러를 정확하게 검출할 수 있다.
또한, 일 측면에 있어서, 에러 검출 장치는 결정적 프로그레스 인덱스 별로 매칭되는 프로그램 카운터 값을 이용함으로써, 허위 에러 검출의 발생확률을 줄일 수 있다.
또한, 일 측면에 있어서, 에러 검출 장치는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 세트로 하는 검증세트 및 측정세트를 이용함으로써, 런타임 에러를 검출하기 위한 별도의 코드를 삽입할 필요가 없다.
또한, 일 측면에 있어서, 에러 검출 장치는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 세트로 하는 검증세트 및 측정세트를 이용함으로써, 지연 없이 에러를 검출할 수 있고, 에러 검출에 대응하여 빠르게 대응할 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 실행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 실행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (18)

  1. 명령어가 런타임 실행 되는 제 1 조건에서 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 측정하도록 구성되는 측정부;
    상기 명령어가 에러 없이 실행되는 제 2 조건에서 측정되는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 검증세트로 결정하도록 구성되는 결정부; 및
    프로세서의 클럭 사이클마다 상기 측정부에서 측정되는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 설정하고, 상기 검증세트와 상기 측정세트를 비교하여 상기 명령어의 런타임 에러를 검출하도록 구성되는 검출부를 포함하는 에러 검출 장치.
  2. 제1항에 있어서,
    상기 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 여부를 판단하도록 구성되는 판단부;
    상기 결정적 방식으로 실행되는 명령어에 대하여 결정적 프로그레스 인덱스를 생성하도록 구성되는 결정적 프로그레스 카운터(DPC, Deterministic Progress Counter); 및
    프로그램 상에서 실행 중인 명령어의 위치를 나타내는 프로그램 카운터 값을 생성하도록 구성되는 프로그램 카운터(PC, Program Counter)를 더 포함하는 에러 검출 장치.
  3. 삭제
  4. 삭제
  5. 제1항에 있어서,
    상기 검출부는
    체크 섬(Check Sum) 구간에서 상기 측정세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 계산하도록 구성되는 계산부; 및
    상기 체크 섬 구간의 종료 지점에서, 상기 계산되는 체크 섬 값과 상기 검증세트의 결정적 프로그레스 인덱스 및 프로그램 카운터 값의 체크 섬 값을 비교하여, 상기 런타임 에러를 검출하도록 구성되는 구간 에러 검출부를 포함하는 에러 검출 장치.
  6. 삭제
  7. 제1항에 있어서,
    입력 데이터에 따라 상기 명령어의 실행 시퀀스가 변하지 않는 구간을 상기 런타임 에러를 검증하기 위한 구간으로 결정하고, 상기 실행 시퀀스가 변하기 시작하는 지점부터 상기 실행 시퀀스의 변화가 종료되는 지점까지의 구간을 체크 섬(Check Sum) 구간으로 결정하도록 구성되는 구간 결정부를 더 포함하는 에러 검출 장치.
  8. 삭제
  9. 제2항에 있어서,
    상기 비결정적(Non-deterministic) 방식은
    하드웨어에 기초한 프로세서의 명령어 수준에서 명령어를 실행하기 위한 하드웨어 비결정적(HWND, HardWare Non-Deterministic)실행방식; 및
    소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 함수를 수행하기 위한 소프트웨어 비결정적(SWND, SoftWare Non-Deterministic)실행방식을 포함하는 에러 검출 장치.
  10. 제2항에 있어서,
    상기 결정적 프로그레스 카운터는
    상기 프로그램 상에서 실행되는 명령어의 실행 방식이 상기 결정적 방식일 경우, 시스템 클럭에 기초하여 상기 결정적 프로그레스 카운터의 값을 증가시키도록 구성되는 에러 검출 장치.
  11. 제2항에 있어서,
    상기 결정적 프로그레스 카운터는
    하드웨어에 기초한 프로세서의 명령어 수준에서 상기 비결정적 방식으로 명령어를 실행하기 위한 하드웨어 비결정적 실행 신호 및
    소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 상기 비결정적 방식으로 함수를 수행하기 위한 소프트웨어 비결정적 실행 신호 중 적어도 하나에 의하여 동작이 제어되는 에러 검출 장치.
  12. 제2항에 있어서,
    스레드가 러닝 상태(running state)에 있지 않은 경우에 상기 결정적 프로그레스 카운터가 동작하지 않도록, 소프트웨어에 기초한 명령어들로 구성된 함수 수준에서 소프트웨어 비결정적 실행(SWND) 신호를 제어하고,
    상기 스레드가 러닝 상태에 있는 경우에 인터럽트(interrupt)가 발생하면 상기 소프트웨어 비결정적 실행(SWND) 신호를 세트하고, 상기 결정적 프로그레스 카운터를 중지시키고, 상기 인터럽트의 서비스 루틴이 종료된 후 상기 스레드가 러닝 상태가 되면 상기 소프트웨어 비결정적 실행(SWND) 신호를 클리어하여 상기 결정적 프로그레스 카운터(DPC)를 동작시키는 제어부를 더 포함하는 에러 검출 장치.
  13. 삭제
  14. 삭제
  15. 프로세서에 의해 수행되는 에러 검출 방법에 있어서,
    상기 프로세서에 의해, 명령어가 에러 없이 실행되는 제 1 조건에서 측정되는 결정적 프로그레스 인덱스(DPI, Deterministic Progress Index) 및 프로그램 카운터(Program Counter) 값을 검증세트로 결정하는 단계;
    상기 프로세서에 의해, 상기 명령어가 런타임 실행 중인 제 2 조건에서 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정하는 단계;
    상기 프로세서에 의해, 상기 제 2 조건에서 측정되는 결정적 프로그레스 인덱스 및 프로그램 카운터 값을 측정세트로 설정 하고, 상기 검증세트와 상기 측정세트를 비교하는 단계; 및
    상기 프로세서에 의해, 상기 검증세트와 상기 측정세트의 비교 결과에 기초하여 프로세서의 클럭 사이클 마다 상기 명령어의 런타임 에러를 검출하는 단계를 포함하는 방법.
  16. 제15항에 있어서,
    상기 프로세서에 의해, 상기 명령어의 실행 방식이 일정한 사이클을 가지는 결정적(Deterministic) 방식인지 또는 일정하지 않은 지연 사이클을 가지는 비결정적(Non-deterministic) 방식인지 여부를 판단하는 단계;
    상기 프로세서에 의해, 결정적 프로그레스 카운터(DPC, Deterministic Progress Counter)에 의하여, 상기 결정적 방식으로 실행되는 명령어에 대하여 결정적 프로그레스 인덱스를 생성하는 단계; 및
    상기 프로세서에 의해, 프로그램 카운터(PC, Program Counter)에 의하여, 프로그램 상에서 실행 중인 명령어의 위치를 나타내는 프로그램 카운터 값을 생성하는 단계를 더 포함하는 방법.
  17. 삭제
  18. 삭제
KR1020120080405A 2012-07-24 2012-07-24 에러 검출 방법 및 장치 KR102028663B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020120080405A KR102028663B1 (ko) 2012-07-24 2012-07-24 에러 검출 방법 및 장치
US13/890,675 US9336114B2 (en) 2012-07-24 2013-05-09 Apparatus and method for detecting error

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120080405A KR102028663B1 (ko) 2012-07-24 2012-07-24 에러 검출 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20140014449A KR20140014449A (ko) 2014-02-06
KR102028663B1 true KR102028663B1 (ko) 2019-10-04

Family

ID=49996160

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120080405A KR102028663B1 (ko) 2012-07-24 2012-07-24 에러 검출 방법 및 장치

Country Status (2)

Country Link
US (1) US9336114B2 (ko)
KR (1) KR102028663B1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8881270B2 (en) * 2002-12-20 2014-11-04 Creative Mines Llc Method and apparatus for selectively enabling a microprocessor-based system
KR101892273B1 (ko) * 2011-10-12 2018-08-28 삼성전자주식회사 스레드 프로그레스 트래킹 방법 및 장치
US9400701B2 (en) * 2014-07-07 2016-07-26 International Business Machines Corporation Technology for stall detection
US9563536B1 (en) * 2015-10-19 2017-02-07 International Business Machines Corporation Performance neutral isolation of runtime discrepancies in binary code
CN108415823B (zh) * 2017-04-10 2020-06-02 平安科技(深圳)有限公司 一种规则验证方法及终端
US11010659B2 (en) * 2017-04-24 2021-05-18 Intel Corporation Dynamic precision for neural network compute operations
DE102018103152A1 (de) * 2018-02-13 2019-08-14 Infineon Technologies Ag Vorrichtung und verfahren zum überwachen einer digitalen steuereinheit hinsichtlich funktionaler sicherheit sowie steuergerät
US11138085B2 (en) 2018-10-09 2021-10-05 Argo AI, LLC Execution sequence integrity monitoring system
US11144375B2 (en) 2018-10-09 2021-10-12 Argo AI, LLC Execution sequence integrity parameter monitoring system
US10831595B1 (en) 2019-05-31 2020-11-10 International Business Machines Corporation Performing error detection during deterministic program execution
KR102662335B1 (ko) * 2021-10-27 2024-05-03 경북대학교 산학협력단 비교 신경망 학습을 이용한 소프트웨어의 오동작 검출시스템 및 소프트웨어의 오동작 검출방법
KR20230092151A (ko) * 2021-12-17 2023-06-26 삼성전자주식회사 스토리지 장치 및 이의 동작 방법
CN115467602B (zh) * 2022-08-12 2024-09-24 重庆长安汽车股份有限公司 车辆的天窗控制方法、装置、车辆及存储介质
CN117806979B (zh) * 2024-03-01 2024-05-17 芯来智融半导体科技(上海)有限公司 指令执行时间一致性测试方法、系统、设备及存储介质

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06175884A (ja) 1992-12-04 1994-06-24 Nippon Telegr & Teleph Corp <Ntt> プログラムエラー原因究明装置
US5581697A (en) 1994-01-28 1996-12-03 Sun Microsystems, Inc. Method and apparatus for run-time error checking using dynamic patching
EP0721166A1 (en) * 1995-01-03 1996-07-10 International Business Machines Corporation Method and system for the design verification of logic units and use in different environments
US5961650A (en) 1997-07-09 1999-10-05 International Business Machines Corporation Scheme to perform event rollup
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6499048B1 (en) * 1998-06-30 2002-12-24 Sun Microsystems, Inc. Control of multiple computer processes using a mutual exclusion primitive ordering mechanism
US6247143B1 (en) * 1998-06-30 2001-06-12 Sun Microsystems, Inc. I/O handling for a multiprocessor computer system
JP2000029738A (ja) 1998-07-10 2000-01-28 Nec Corp デバッグ監視装置及びデバッグ監視方法
US6289446B1 (en) 1998-09-29 2001-09-11 Axis Ab Exception handling utilizing call instruction with context information
US6113172A (en) 1998-12-22 2000-09-05 Daimlerchrysler Corporation Multi-positional vehicle shelf
US20010037492A1 (en) * 2000-03-16 2001-11-01 Holzmann Gerard J. Method and apparatus for automatically extracting verification models
JP2001350508A (ja) 2000-06-08 2001-12-21 Toshiba Mach Co Ltd プログラマブルコントローラ
US6817009B2 (en) * 2000-11-30 2004-11-09 Hewlett-Packard Development Company, L.P. Method and apparatus for verifying data local to a single thread
GB0118294D0 (en) * 2001-07-27 2001-09-19 Ibm Method and system for deadlock detection and avoidance
US6851075B2 (en) * 2002-01-04 2005-02-01 International Business Machines Corporation Race detection for parallel software
JP4228602B2 (ja) 2002-06-13 2009-02-25 富士通株式会社 仮引数重複違反検出機能を備えたコンパイラプログラム、その記録媒体、およびコンパイラ装置
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7406569B2 (en) * 2002-08-12 2008-07-29 Nxp B.V. Instruction cache way prediction for jump targets
US7103597B2 (en) * 2002-10-03 2006-09-05 Mcgoveran David O Adaptive transaction manager for complex transactions and business process
JP4558376B2 (ja) 2004-05-18 2010-10-06 三菱電機株式会社 コントローラ
WO2006026402A2 (en) 2004-08-26 2006-03-09 Availigent, Inc. Method and system for providing high availability to computer applications
US7409596B2 (en) 2004-09-02 2008-08-05 International Business Machines Corporation Apparatus and method for initializing diagnostic functions when specified run-time error criteria are satisfied
US7475387B2 (en) * 2005-01-04 2009-01-06 International Business Machines Corporation Problem determination using system run-time behavior analysis
US7774647B2 (en) * 2005-01-28 2010-08-10 International Business Machines Corporation Method for counting instructions for logging and replay of a deterministic sequence of events
US20070174823A1 (en) 2006-01-25 2007-07-26 Microsoft Corporation Compile-time interpretable code error detection
US8836964B2 (en) 2006-01-31 2014-09-16 Bell And Howell, Llc Queued error reconciliation in a document processing environment
KR101244684B1 (ko) 2006-07-25 2013-03-18 삼성전자주식회사 에러검출이 가능한 마이크로 컴퓨팅 장치 및 그의 에러검출방법
US8402463B2 (en) * 2006-10-30 2013-03-19 Hewlett-Packard Development Company, L.P. Hardware threads processor core utilization
US8949671B2 (en) 2008-01-30 2015-02-03 International Business Machines Corporation Fault detection, diagnosis, and prevention for complex computing systems
JP4915362B2 (ja) 2008-02-14 2012-04-11 日本電気株式会社 静的検証ツールのアノテーション自動挿入方法
KR101581001B1 (ko) 2009-03-30 2015-12-30 삼성전자주식회사 프로그램의 동적 분석 방법 및 그 장치
KR101635816B1 (ko) * 2010-07-02 2016-07-04 삼성전자주식회사 결정적 프로그레스 인덱스를 이용한 스레드 프로그레스 트래킹 방법 및 장치
KR101686082B1 (ko) * 2010-07-22 2016-12-28 삼성전자주식회사 결정적 프로그레스 인덱스 기반 락 제어 및 스레드 스케줄링 방법 및 장치
US20120151184A1 (en) * 2010-12-10 2012-06-14 Daniel Shawcross Wilkerson Hard object: constraining control flow and providing lightweight kernel crossings
US9027124B2 (en) * 2011-09-06 2015-05-05 Broadcom Corporation System for monitoring an operation of a device
US9069895B2 (en) * 2013-01-15 2015-06-30 International Business Machines Corporation Analyzing concurrent debugging sessions
US9569612B2 (en) * 2013-03-14 2017-02-14 Daniel Shawcross Wilkerson Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality

Also Published As

Publication number Publication date
KR20140014449A (ko) 2014-02-06
US9336114B2 (en) 2016-05-10
US20140032976A1 (en) 2014-01-30

Similar Documents

Publication Publication Date Title
KR102028663B1 (ko) 에러 검출 방법 및 장치
Bhatti et al. HarvOS: Efficient code instrumentation for transiently-powered embedded sensing
CN109891393B (zh) 使用检查器处理器的主处理器错误检测
US8347119B2 (en) System and method for processor utilization adjustment to improve deep C-state use
CN103365776B (zh) 基于确定性重放的并行系统弱一致性的验证方法和系统
US9760411B2 (en) Switching a locking mode of an object in a multi-thread program
US20120254888A1 (en) Pipelined loop parallelization with pre-computations
US10331531B2 (en) Self-testing in a processor core
US8639982B2 (en) Dynamic computer process probe
US20140101668A1 (en) Adaptive Auto-Pipelining for Stream Processing Applications
KR101203099B1 (ko) 운영체제 태스크의 실행시간 모니터링 방법 및 시스템
US9910717B2 (en) Synchronization method
Maghsoudloo et al. Soft error detection technique in multi-threaded architectures using control-flow monitoring
KR101635816B1 (ko) 결정적 프로그레스 인덱스를 이용한 스레드 프로그레스 트래킹 방법 및 장치
Gottschlag et al. AVX overhead profiling: how much does your fast code slow you down?
US9223615B2 (en) Apparatus and method for thread progress tracking
KR102443089B1 (ko) 컴퓨팅 디바이스에서의 동기화
KR20090095500A (ko) 다수의 클록 도메인 사이의 결정을 촉진하는 장치, 시스템,방법 및 머신 판독 가능한 매체
US20130318401A1 (en) Register error protection through binary translation
JP2008513899A (ja) コンピュータシステム上でコンピュータプログラムを処理する方法
JP2005215816A (ja) ハードウェアモニタを用いた性能プロファイリング方法
Lee et al. GPU architecture aware instruction scheduling for improving soft-error reliability
US7865776B2 (en) Adaptive prevention of data loss during continuous event tracing with limited buffer size
JP2013109652A (ja) コンパイラ、そのコンパイラによって作成されたプログラムモジュールの制御方法、及び、その制御方法を実現する制御装置
US10387190B2 (en) System and method of executing a plurality of threads using thread switching on execution time-out using instruction re-write

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20120724

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20170724

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20120724

Comment text: Patent Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20181206

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20190627

PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20190927

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20190930

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
PR1001 Payment of annual fee

Payment date: 20220824

Start annual number: 4

End annual number: 4

PR1001 Payment of annual fee

Payment date: 20230823

Start annual number: 5

End annual number: 5

PR1001 Payment of annual fee

Payment date: 20240823

Start annual number: 6

End annual number: 6