KR101538749B1 - 온칩 디바이스 관리를 위한 알려진 제품 코드 - Google Patents

온칩 디바이스 관리를 위한 알려진 제품 코드 Download PDF

Info

Publication number
KR101538749B1
KR101538749B1 KR1020107015763A KR20107015763A KR101538749B1 KR 101538749 B1 KR101538749 B1 KR 101538749B1 KR 1020107015763 A KR1020107015763 A KR 1020107015763A KR 20107015763 A KR20107015763 A KR 20107015763A KR 101538749 B1 KR101538749 B1 KR 101538749B1
Authority
KR
South Korea
Prior art keywords
kgc
circuit
processor
processor core
executing
Prior art date
Application number
KR1020107015763A
Other languages
English (en)
Other versions
KR20100102666A (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 KR20100102666A publication Critical patent/KR20100102666A/ko
Application granted granted Critical
Publication of KR101538749B1 publication Critical patent/KR101538749B1/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/76Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in application-specific integrated circuits [ASIC] or field-programmable devices, e.g. field-programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • 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/30181Instruction operation extension or modification
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

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

Abstract

일 실시예에서, 프로세서는 프로그램가능한 맵(programmable map) 및 회로를 포함한다. 상기 프로그램가능한 맵은, 프로세서에 의해 실시되는 명령어 세트 아키텍쳐의 구조적 변경(architectural modification)이 정의된 적어도 하나의 명령어를 식별하는 데이터를 저장하도록 구성되며, 프로세서는 이러한 변경을 실시하지 않는다. 상기 회로는 상기 명령어 또는 그 메모리 오퍼랜드들을 검출하고, 알려진 제품 코드(KGC)에 대한 변환을 야기하도록 구성되며, 상기 KGC는 권한없는 변경(unauthorized modification)으로부터 보호되며, 인증된 엔티티(authenticated entity)로부터 제공된다. KGC는, 실행될 때에 변경을 에뮬레이트(emulate)하는 코드를 포함한다. 다른 실시예에서, 집적 회로는 적어도 하나의 프로세서 코어와; 적어도 하나의 다른 회로와; 그리고 KGC를 실행을 위해 프로세서 코어에 공급하도록 구성된 KGC 소스를 포함한다. KGC는 상기 다른 회로에 대한 인터페이스 코드를 포함하며, 이에 의해 상기 적어도 하나의 프로세서 코어 상에서 실행되는 애플리케이션은 이러한 KGC를 통해 상기 적어도 하나의 다른 회로와 인터페이스하게 된다.

Description

온칩 디바이스 관리를 위한 알려진 제품 코드{KNOWN GOOD CODE FOR ON-CHIP DEVICE MANAGEMENT}
본 발명은 프로세서들 및 컴퓨터 시스템들의 분야에 관한 것으로서, 보다 특정하게는 프로세서 아키텍쳐 확장(processor architecture extension)을 가능하게 하고 내장(on-board) 디바이스들을 제어하기 위해 이러한 시스템들에서 알려진 제품 코드(known good code, KGC)를 이용하는 것, 및 기타 이용에 관한 것이다.
프로세서들은 명령어 세트 아키텍쳐(instruction set architecture, ISA) 내에 정의된 명령어들을 실행하도록 설계된다. 이러한 ISA는 명령어들과, 이들이 어떻게 엔코드되는 지와, 그리고 이들이 실행될 때 무슨 동작들이 일어나는 지를 정의한다. 일반적으로, ISA는 또한 프로세서의 다양한 동작 모드들, 및 프로그래머가 원하는 동작의 달성을 위하여 프로세서에 대한 프로그래밍의 성공인 코딩을 위해 요구할 수 있는 기타 정보를 정의한다. 다시 말해, ISA는 본질적으로 실행할 명령어 스트림이 제공될 때 프로세서가 어떻게 동작하는지의 설명서(description)이다.
프로그래머는 프로세서가 ISA에서 특정되는 대로 동작하는 것으로 믿고 있기 때문에, ISA에 대한 변경들은, 전형적으로 프로그래머들(또는 소프트웨어 회사들) 및 프로세서 설계자들(또는 프로세서 제조업자들) 모두로부터의 상당량의 입력을 이용하여, 신중하게 이루어져야 한다. 요구되는 작동이 프로세서에 의해 제공되도록 보장하기 위해, 그 프로세서는 ISA 변경들을 하드웨어로 구현해야 한다.
따라서, 변경들의 정의는 신중하게 기술되어야 하고 합의되어야 하는데, 그 이유는 이러한 변경들을 실시하기 위해서는 프로세서의 새로운 하드웨어가 발생될 필요가 있기 때문이다. 이후의 변경들은 또 다른 하드웨어 발생을 요구할 것이다.
일 실시예에서, 집적 회로는 적어도 하나의 프로세서 코어와; 적어도 하나의 다른 회로(other circuit)와; 그리고 알려진 제품 코드(KGC)를 실행을 위해 프로세서 코어에 공급하도록 구성된 KGC 소스를 포함한다. KGC는 상기 다른 회로에 대한 인터페이스 코드를 포함하며, 이에 의해 상기 적어도 하나의 프로세서 코어 상에서 실행되는 애플리케이션은 이러한 KGC를 통해 상기 적어도 하나의 다른 회로와 인터페이스하게 된다.
다른 실시예에서, 프로세서는 프로그램가능한 맵(programmable map) 및 이러한 프로그램가능한 맵에 결합된 회로를 포함한다. 이러한 프로그램가능한 맵은, 프로세서에 의해 실시되는 명령어 세트 아키텍쳐의 구조적 변경(architectural modification)이 정의된 적어도 하나의 명령어를 식별하는 데이터를 저장하도록 구성되며, 프로세서는 이러한 변경을 실시하지 않는다. 상기 회로는 이러한 명령어를 검출하고, KGC에 대한 변환(transition)을 야기하도록 구성되며, 상기 KGC는 권한없는 변경(unauthorized modification)으로부터 보호되며, 인증된 엔티티(authenticated entity)로부터 제공된다. KGC는, 실행될 때에 변경을 에뮬레이트(emulate)하는 코드를 포함한다.
하기의 상세한 설명은 첨부 도면들을 참조하여 이루어지며, 첨부 도면들에 있어서,
도 1은 프로세서 및 관련된 KGC를 도시하는 블록도이다.
도 2는 프로세서 및 KGC의 제 1 실시예의 블록도이다.
도 3은 프로세서 및 KGC의 제 2 실시예의 블록도이다.
도 4는 프로세서 및 KGC의 제 3 실시예의 블록도이다.
도 5는 KGC에 대한 변환 메커니즘(transition mechanism)의 제 1 실시예를 도시하는 블록도이다.
도 6은 변환 메커니즘의 제 1 실시예를 구현하는 프로세서의 일 실시예의 블록도이다.
도 7은 KGC에 대한 변환 메커니즘의 제 2 실시예를 도시하는 블록도이다.
도 8은 변환 메커니즘의 제 2 실시예를 구현하는 프로세서의 일 실시예의 블록도이다.
도 9는 디바이스 관리자로서 KGC를 이용하는 멀티코어 집적 회로(multicore integrated circuit)의 일 실시예의 블록도이다.
도 10은 디바이스 관리자로서의 KGC의 일 실시예의 동작을 도시하는 흐름도이다.
도 11은 링 0(ring 0)을 보호된 구역(protected zone)들로 분할하기 위한 메커니즘으로서 KGC를 이용하는 일 실시예의 블록도이다.
도 12는 프로세서를 갖는 집적 회로 상의 프로그램가능한 논리(programmable logic)와 함께 KGC를 이용하는 일 실시예의 블록도이다.
본 발명은 많은 변형 및 대안적인 형태를 가질 수 있지만, 도면에는 특정한 실시예가 예시적으로 도시되어 있으며, 본원에서는 이에 대해 상세히 설명한다. 하지만, 이러한 도면 및 그에 대한 상세한 설명은 본 발명을 개시된 특정 형태로 한정하지 않으며, 본 발명은 첨부된 청구항에 의해 규정되는 본 발명의 정신 및 범위 내의 모든 변형, 등가 및 대안을 포괄하는 것으로 의도된다.
하기의 설명은 알려진 제품 코드(KGC)를 이용하여, 유연한(flexible) 방식으로(예를 들어, KGC의 실행을 통해 변경들을 에뮬레이트함으로써) 프로세서에 대한 구조적인 변경들을 실시하는 것과 관련된다. 부가적으로, 하기의 설명은 또한 KGC의 기타 이용들에도 관련된다. 이러한 이용들을 설명하기 전에, KGC에 대한 개요가 제공된다.
알려진 제품 코드( KGC ) 개요
일반적으로, KGC는, 그 수명 동안 권한없는 변경으로부터 보호되며 인증된 엔티티로부터 제공되는 코드를 말한다. 인증된 엔티티는, 예를 들어 프로세서의 제조업자에게 신뢰할 수 있는 것으로서 알려진 엔티티가 될 수 있다. KGC는 변경불가능한 저장소(non-modifable storage)에 코드를 제공함으로써 변경으로부터 보호되는바, 여기서 이러한 저장소와 프로세서 간의 통신 메커니즘은 어떠한 방식으로 보호된다. 대안적으로, KGC는 변경가능한 또는 보호되지 않는 저장소에 제공될 수도 있지만, 실행되기 전에 암호적(cryptographic)으로 인증될 수 있다.
KGC는 보안 실행 컴퓨팅 환경(secure execution computing environment, SECE)에서 실행될 수 있다. SECE는 코드(KGC) 및 관련된 데이터가 컴퓨터 상에서 실행되는 다른 코드에 의해 변경 또는 검사될 수 없는 컴퓨팅 환경이다. 이러한 SECE는 (예를 들어, 전원을 공급받을 때에) 프로세서 하드웨어에 의해 생성되거나, 또는 SECE를 생성하고 KGC를 이러한 SECE에 두기 위해 개시 후에 곧 실행되는 소프트웨어에 의해 생성될 수 있다. 예를 들어, 이러한 SECE의 예들은, 프로세서 내의 마이크로코드 엔진(microcode engine)과; 로컬 보안 비휘발성 메모리로부터 KGC를 프로세서의 명령어 및 데이터 캐시들로 로드(load)하고, 캐시들 내의 코드 및 데이터를 로크(lock)시키는 프로세서와; 그리고 로컬 비휘발성 메모리로부터 KGC를 실행하는 내장형(embedded) 프로세서 또는 기타 실행 엔진을 포함하며, 그리고 만일 있는 경우, 기타 디바이스들에 대한 통신 인터페이스들은 인증되고, 허가되며, 가능하게는 암호화되거나, 또는 (예를 들어, 멀티-칩 모듈 내에서) 물리적으로 보호된다. 명확성을 위해 적절한 경우, KGC는, 다른 코드를 실행하는 동일한 프로세서에 의해 실행되는 경우에는 "네이티브(native) KGC"라 불리고, 내장형 프로세서 등의 다른 프로세서에 의해 실행되는 경우에는 "넌-네이티브(non-native) KGC"라 불린다. KGC의 용어가 이러한 "네이티브" 또는 "넌-네이티브" 라벨없이 이용된다면, 환경이 명백한 것이거나, 또는 네이티브 또는 넌-네이티브 KGC가 이러한 환경에서 이용될 수 있다.
도 1은 일 실시예에 대한, 개념적 레벨에서의, 프로세서 및 관련된 KGC의 블록도이다. 도시된 바와 같이, 프로세서(10)는 KGC 소스(12)와 함께 포함된다. 선택적으로, 암호 인증 유닛(cryptographic authentication unit)(14) 그리고/또는 변경-보호된 메모리(change-protected memory)(16)가 또한 포함될 수 있다. 프로세서(10)와 (변경 보호된 메모리(16) 또는 KGC 소스(12) 내의) KGC 간의 통신 링크는 보호된다(도 1의 참조 부호 18).
만일 프로세서(10)가 보호된 채널(18)을 통해 KGC 소스(12)에 직접 결합되고, KGC 소스(12)가 변경보호된다면(즉, KGC 소스(12)가 어떠한 권한없는 엔티티에 의해 변경될 수 없다면), 암호 인증 유닛(14)은 제거될 수 있다. 허가된 엔티티들은 KGC를 생성한 엔티티, 및 어떠한 경우들에서는, 프로세서(10)의 제조업자를 포함할 수 있다. 따라서, KGC 소스(12)는 임의의 컴퓨터 접속가능한 저장 디바이스를 포함할 수 있다.
만일 프로세서(10)가 보호된 채널(18)을 통해 KGC 소스(12)에 직접 결합되지 않는 다면, KGC는 그 소스(12) 내에서 또는 변경-보호된 메모리(16)로 전송되는 동안 권한없는 변경을 받게 된다. 어떠한 변경도 일어나지 않도록 보장하기 위해, 암호 인증 유닛(14)은 KGC를 인증할 수 있다. 예를 들어, 암호 인증 유닛(14)은 KGC를 인증하기 위해 프로세서로부터 RTV(root of turst for verification)를 이용할 수 있다. 다양한 실시예들에서, 어떠한 인증 방식이라도 이용될 수 있다.
인증된 KGC는, 프로세서(10)에 의해 보호된 채널(18)을 통해 페치(fetch)할 수 있도록, 변경 보호된 메모리(16)에 저장된다. 몇몇 실시예들에서, KGC 소스(12)로부터 변경 보호된 메모리(16)로의 채널은 보호될 수 있고, KGC 소스(12)는 변경 보호될 수 있으며, 이에 따라 어떠한 암호 인증도 요구되지 않을 수 있다. 이러한 실시예들은, 예를 들어 변경 보호된 메모리(16)가 KGC 소스(12) 보다 낮은 레이턴시 액세스(latency access)를 제공하거나, 또는 변경 보호 이외에 어떠한 다른 이득(예를 들어, 더 낮은 전력; 각 프로세서가 로컬 변경 보호된 메모리(16)를 갖거나, 또는 프로세서들의 서브세트와 변경 보호된 메모리(16)를 공유하는 멀티프로세서 시스템에서의 동시 액세스; 등)을 제공하는 경우에 구현될 수 있다.
일반적으로, 변경 보호된 메모리(16)는 메모리(16)의 콘텐츠(content)를 변경하는 능력을 제한 또는 제거하는 임의 종류의 메모리가 될 수 있다. 구체적으로, 변경 보호된 메모리(16)는 그 콘텐츠를 변경하는 능력을 그렇게 하도록 허가된 것들로만 제한할 수 있다. 이러한 변경 보호된 메모리(16)는 단지 허가된 엔티티 만이 콘텐츠를 변경할 수 있는 방식으로 물리적으로 분리되어 있거나, 또는 어떠한 다른 방식(예를 들어, 캐시 메모리 내에 로크시킴)으로 보호될 수 있다.
도 2 내지 4는 KGC 소스가 구현될 수 있는 몇 개의 예들을 제공한다. 속속들이 규명한 것은 아니지만, 이러한 예들은 KGC를 서로 다른 정도(varying degree)로 보호하는 다양한 실시예들을 설명한다. 도 2 내지 4에 나타낸 실시예들중 임의의 실시예는 필요에 따라 1개 이상의 프로세서를 이용할 수 있다는 것이 주목된다.
도 2는 프로세서(10) 및 KGC를 저장하는 비휘발성 메모리(22)를 포함하는 집적 회로(20)의 일 실시예의 블록도이다. 이에 따라, 비휘발성 메모리(22)는 KGC 소스(12)의 역할을 할 수 있으며, 변경 보호되는데, 그 이유는 프로세서(10)와 동일한 집적 회로(20) 상에 물리적으로 포함되기 때문이다. 즉, 이러한 비휘발성 메모리(22)는 집적 회로(20) 외부에서 액세스가능하지 않으며, 이 메모리(22)를 액세스하기 위한 채널은 물리적으로 보호된다.
비휘발성 메모리(22)는 다양하게 구현될 수 있다. 예를 들어, 비휘발성 메모리(22)는 판독 전용 메모리(ROM)이거나, 또는 배터리에 의해 작동되는(battery backed) RAM 또는 고상 메모리(solid state memory)가 될 수 있다. 다른 실시예들에서, 비휘발성 메모리(22)는 메모리들(예를 들어, ROM 또는 다른 비휘발성 메모리, 및 KGC가 로드되고 로크되는 캐시 메모리)의 결합이 될 수 있다. KGC가 캐시 내로 로드되고 그 캐시 내로 로크되는 경우들에서는, 다른 메커니즘들도 구현될 수 있다(예를 들어, 로크된 엔트리들이 코히런시(coherency) 목적으로 스누프(snoop)되지 않을 수도 있으며, 이에 의해 코히런시 메커니즘들을 통한 코드/데이터의 관찰(observation)을 방지하고; 표준 캐시 검색(standard cache lookup)의 일부가 아닌 테스트 포트들 및 다른 액세스 포인트들이 로크된 엔트리들을 액세스하는 것으로부터 디스에이블(disable)될 수 있다; 등).
도 3은 프로세서(10) 및 그 KGC의 다른 실시예의 블록도이다. 도 3의 실시예에서, (하나 이상의 프로세서들(10)을 포함하는) 프로세서 집적 회로(24)는 비휘발성 메모리(22)를 갖는 멀티-칩 모듈(MCM)(26) 내에 포함된다. 몇몇 경우들에서는 프로세서(10)가 여전히 KGC("네이티브 KGC")를 실행하거나, 또는 KGC("넌-네이티브 KGC")를 실행하기 위한 실행 엔진(28)이 제공될 수도 있다. 이러한 실행 엔진(28)은 프로세서 집적 회로(24)와 통신할 수 있다. 일 실시예에서, 실행 엔진(28) 및 비휘발성 메모리(22)는 단일의 집적 회로 내에 통합될 수 있다(예를 들어, SoC(system on a chip)). 구체적으로, 칩 상의 실행 엔진/비휘발성 메모리 시스템은 신뢰된 플랫폼 모듈(trusted platform module, TPM)이 될 수 있다. 본 실시예에서, 비휘발성 메모리(22)는 또한 프로세서(10)의 KGC 소스(12)의 역할을 할 수 있으며, 암호 인증 유닛(14)은 없을 수 있다. 몇몇 실시예들에서, 프로세서 집적 회로(24) 내에는 변경 보호된 메모리(예를 들어, 로크된 캐시들)가 있을 수 있다.
도 4는 메모리 제어기(30) 및 네이티브 KGC를 저장하는 메모리(32)(비휘발성이 될 수 있다)를 구비하는 시스템 내에 프로세서(10)가 포함되는 다른 실시예이다. 이 경우, 메모리(32)는 프로세서(10)의 외부에 있으며, 이에 따라 네이티브 KGC는 (메모리 제어기(30) 내의 또는 프로세서(10) 내의) 암호 인증 유닛(14)에서 암호적으로 인증될 수 있다. 또한, 변경 보호된 메모리(16)(예를 들어, 프로세서(10) 내의 로크된 캐시들)가 있을 수 있다.
메모리(32)는 컴퓨터 시스템 내의 기본 입출력 시스템(BIOS)이 되거나, 또는 이 시스템 내에 포함되는 다른 비휘발성 메모리가 될 수 있다.
구조적인 변경들을 위한 KGC 에 대한 변환
KGC는 인증된(신뢰된 소스)로부터 제공되며, 권한없는 변경으로부터 보호되기 때문에, KGC는 프로세서 제조업자에 의해 신뢰될 수 있다. 이에 따라, KGC는 프로세서 하드웨어 내에서 아직 실시되지 않은 구조적인 변경들을 실시하는 데에 이용될 수 있다. KGC-실시되는 구조적인 변경들은 사용자들(예를 들어, 프로세서를 포함하는 컴퓨터 시스템들 및 코드 기록기(code writer)들)로 하여금 구조적인 확장들이 하드웨어에 커미트(commint)되기 전에 이러한 구조적인 확장들을 이용할 수 있게 한다(또는 구조적인 삭제들이 하드웨어에 커미트된 이후 이러한 구조적인 삭제들을 이용할 수 있게 한다).
예를 들어, 구조적인 확장들(예를 들어, 새로운 명령어들, 기존의 명령어들 및 이들의 실행 환경에 대한 새로운 기능, 프로세서 내의 또는 이 프로세서에 근접하게 결합되는 새로운 액셀러레이터(accelerator)들 또는 기타 기능 블록들 등)은 이들이 하드웨어로 실시되기 전에 KGC 내에서 실시될 수 있다. 구조적인 확장들이 KGC에 의해 실시되는 동안 이러한 구조적인 확장들의 정의에 있어서 어떠한 문제들이 검출되면, 이러한 문제들은 (예를 들어, 확장 자체를 변경함으로써) 상기 확장들이 하드웨어에 커미트되기 전에 교정될 수 있다. 이러한 확장의 기대되는 이득들(예를 들어, 더 높은 성능, 더 낮은 전력 소비 등)은 KGC 실시를 이용하여 평가될 수 있다. 상기 확장은 이후 더 높은 신뢰를 가지고 하드웨어에 커미트될 수 있다. 또한, 동일한 명령어 세트 아키텍쳐를 이용하는 경쟁자가 새로운 피쳐(feature)들을 도입하면, KGC를 이용하여 이러한 피쳐들을 실시할 수 있으며, 이에 따라 경쟁자의 변화를 빠르게 따라갈 수 있게 된다.
구조적인 삭제들(예를 들어, 더 이상 크게 이용되지 않거나 또는 더 이상 크게 이용되지 않는 것으로 여겨지는 명령어들의 삭제, 또는 더 이상 필요없거나 또는 더 이상 필요없는 것으로 여겨지는 레거시 동작 모드들의 삭제)에 대해, KGC는 삭제되는 기능을 실시하는 데에 이용될 수 있다. 만일 이러한 기능이 예를 들어 레거시 코드(legacy code)에서 여전히 이용중이라면, 비록 더 낮은 성능을 갖기는 하지만, 이러한 레거시 코드는 여전히 정확하게 동작할 것이다. 이에 따라, 삭제된 기능의 어떠한 나머지의 이용이 여전히 적절하게 작동하게 된다는 점에서, 삭제들은 신뢰를 가지고 실시될 수 있다.
KGC를 이용하여 구조적인 변경들을 실시하기 위해, KGC 실행으로 변환하기 위한 메커니즘이 실시될 수 있다. 이 메커니즘은, 현재 실행하는 코드가 구조적인 변경을 이용하고 있음을 검출함과 아울러 이러한 검출에 응답하여 KGC가 실행되게 하는 프로세스를 포함할 수 있다. 비록 프로그램이 특권 코드(priviledged code)(예를 들어, 운영 체제 또는 다른 특권 코드)로서 실행될 수 있기는 하지만, 현재 실행하는 코드는 본원에서 사용자 프로그램(user program)이라 지칭될 것이다. 상기 변환은 사용자 프로그램에 투명(transparent)하게 일어날 것이며, 이에 따라 구조적인 확장 또는 삭제는 사용자 프로그램에 대해 에뮬레이트될 수 있다.
상기 메커니즘은 프로그램가능한 맵을 포함할 수 있는데, 이러한 프로그램가능한 맵은 구조적인 변경들을 검출하기 위해 프로세서에 의해 이용될 수 있는 데이터로 프로그램될 수 있다. 맵 내에 프로그램되는 데이터는 변경들이 어떻게 검출되느냐에 의존하여 달라질 수 있다. 예를 들어, 도 5 및 6에 도시된 일 실시예에서, 데이터는 명령어의 엔코딩(예를 들어, 오피코드(opcode), 오피코드 변경자들(opcode modifiers), 오퍼랜드 필드들(operand fields) 등)의 전부 또는 일부를 포함할 수 있다. 이러한 데이터는 또한 하나 이상의 구성/제어 레지스터(configuration/control register)들로부터의 다양한 모드 표시들(mode indications)을 포함할 수 있는데, 이러한 모드 표시들은 프로세서의 현재 동작 모드를 나타낸다. 상기 데이터는 또한, 도 7 및 8에 도시된 실시예와 같이, 명령어를 실행하는 동안 발생되는 어드레스 또는 데이터를 포함할 수 있다. 상기 데이터는 실행 동안 발생되는 명령어 엔코딩 및 데이터/어드레스의 임의의 결합, 그리고/또는 실행 동안 일어날 수 있는 임의의 다른 이벤트(예를 들어, 예외, 특정 타입의 예외, 인터럽트, 특정 타입의 인터럽트 등)를 포함할 수 있다. 프로그래밍가능한 맵은 어떠한 타입의 저장소 또는 저장소의 결합(예를 들어, 프로세서에 의해 실행되는 명령어들에 의해 어드레스가능한 레지스터들, 메모리 어레이 등)이 될 수 있다.
도 5는 검출된 명령어가 실행에 이르기 전에 일어나는 변환 메커니즘의 일 실시예를 도시하는 블록도이다. 도 5에서는, (구조적인 확장에 해당하는) 새로운 명령어를 포함하는 사용자 프로그램이 도시된다. 삭제된 명령어, 또는 구조적인 변경에서 그 동작이 달라지는 명령어를 포함하는 사용자 프로그램에 대해 유사한 동작이 일어날 수 있다. 도 5에는 또한, KGC, 사용자 프로그램 상태(40) 및 KGC 상태(42)가 도시되어 있다. 사용자 프로그램 상태(40)는 사용자 프로그램에 가시적인 프로세서의 구조적인 상태(예를 들어, 레지스터 값들)를 포함한다. KGC 상태(42)는 KGC 코드가 실행될 때에만 가시적인 프로세서의 상태를 포함한다. 즉, 사용자 프로그램 코드는 KGC 상태(42)를 판독하거나 기록할 수 없다. 따라서, KGC 상태(42)는 KGC에 대해 사적(private)이며, 프로세서 하드웨어에 의해 실시되지 않는 구조적인 변경들을 에뮬레이트하는 부분으로서 이용될 수 있다. KGC 상태(42)는 하나 이상의 레지스터들과 같은 적어도 얼마간의 프로세서 상태를 포함한다. 이러한 레지스터들은 KGC에 의해 발생되는/이용되는 데이터를 저장하는 데에 이용되고, 그리고/또는 예를 들어, KGC 이용에 지정되는 메모리에 대한 포인터들을 저장할 수 있다. 이러한 레지스터들은 또한 KGC가 어떻게 실행되는지를 제어하는 다양한 구성/제어 데이터를 포함할 수 있다. 도 5에 도시된 바와 같이, 사용자 프로그램은 사용자 프로그램 상태(40)는 액세스하지만(화살표 44), KGC 상태(42)는 액세스하지 않는다. KGC는 사용자 프로그램 상태(화살표 48) 뿐 아니라, KGC 상태(42)를 액세스한다(화살표 46).
도 5에 나타낸 바와 같이, 사용자 프로그램은 명령어들(I1, I2, I3 등)과 같은 명령어들의 스트림을 포함한다. 일반적으로, 명령어들(I1, I2, I3, I4, I5 및 I6)은 프로세서(10)에 의해 실시되는 명령어 세트 구조 내에서 정의되는 명령어들("매크로 명령어들(macro instructions)"로서 지칭됨)이다. 명령어들중 하나(도 5의 "New Inst")는 KGC에 의해 실시되는 구조적인 변경들에 따라 새롭게 정의되는 명령어가 될 수 있다. 즉, 이 명령어는 프로세서 하드웨어에서 실시되는 것으로서 정의되지 않을 수도 있다. 만일 실행이 허용되면, 이 명령어는 프로세서(10) 상에서 예외를 야기할 것이다. 대안적으로, 이 명령어는 이전에 정의되지만, KGC에 의해 에뮬레이트되는 구조적인 변경의 일부인 새로운 기능을 이용할 수 있다. 프로세서(10)는 이 명령어에 대한 KGC에 대해 사전 실행 단계 맵핑(pre-execute stage mapping)(화살표 50)을 포함할 수 있으며, 이에 의해 (만일 있는 경우) 예외를 막고, KGC가 페치되어 실행되게 한다. 화살표(50)에 의해 도시된 KGC에 대한 변환은 또한 KGC 상태를 인에이블(enable)시킬 수 있으며, 이에 따라 KGC 내에서 실행하는 명령들에 대해 가시적이 된다. 몇몇 경우들에 있어서, 프로세서(10)는 KGC가 자신의 특정된 기능을 실시할 수 있도록 보장하기 위해 KGC의 실행을 위한 특권 레벨(privilege level)을 올릴 수 있지만, 사용자 프로그램에 대한 예외를 야기하고 KGC 실행에 대해서는 요구되지 않는 어떠한 이벤트들이 KGC 실행 동안 예외들을 야기할 것임을 또한 확실하게 해야 한다. 따라서, 특권을 올리는 것은 어떠한 자원들, 전체 특권 보호 방식의 단지 특정 부분들 등으로만 제한될 수 있다.
도 5에 나타낸 바와 같이, KGC는 또한 명령어들의 스트림(KGC I1 내지 KGC IN)을 포함한다. KGC 명령어들 역시 (KGC에 의해 에뮬레이트되는 구조적인 변경들없이) 프로세서(10)에 의해 실시되는 명령어 세트 아키텍쳐에서 정의되는 매크로 명령어들이다. KGC 명령어들이 실행되면, 이들은 프로세서(10)에 의해 실시되지 않는 구조적인 변경들을 에뮬레이트한다. 비록 다른 지점(point)에서의 계속적인 실행(하나 이상의 명령어가 에뮬레이트된 경우에는 사용자 프로그램 내의 이후의 명령어, 에러가 검출된 경우에는 예외 또는 기타 에러 취급 루틴, 등)이 가능하기는 하지만, KGC는 전형적으로 새로운 명령어 다음에 오는 명령어(예를 들어, 도 5의 I5)에서 사용자 프로그램에 실행이 반환되게 하는 명령어들로 끝날 수 있다.
유사한 방식으로, KGC는 프로세서(10)에서 실시된 구조적인 변경들을 통해 삭제된 기능을 에뮬레이트할 수 있다. 예를 들어, 아키텍쳐로부터 어떠한 명령어가 삭제된 경우, KGC는 그 명령어를 에뮬레이트할 수 있으며, 이에 의해 레거시 사용자 프로그램들은 여전히 정확하게 기능할 것이다. 또한, KGC는, 설사 프로세서(10)가 명령어를 부정확하게 실시할지라도(예를 들어, 프로세서 하드웨어 내에서 버그(bug)가 발견된다고 할지라도) 적절한 동작을 제공하는 데에 이용될 수 있다.
도 6은 KGC에 대한 명령어들의 사전-실행 맵핑을 실시할 수 있는 프로세서(10)의 일 실시예의 블록도이다. 도시된 실시예에서, 프로세서(10)는 명령어 캐시(ICache)(60), 페치 유닛(62), 디코드 유닛(64), 실행 코어(66), 사용자 상태 저장소(68), KGC 상태 저장소(70) 및 프로그램가능한 맵(72)을 포함한다. 페치 유닛(62)은 ICache(60) 및 디코드 유닛(64)에 결합되며, 디코드 유닛(64)은 또한 프로그램가능한 맵(72) 및 실행 코어(66)에 결합된다. 실행 코어(66)는 또한 사용자 상태 저장소(68) 및 KGC 상태 저장소(70)에 결합된다.
프로세서(10)는 사용자 프로그램을 실행할 수 있는 바, 페치 유닛(62)은 ICache(60)로부터 명령어들을 페치한 다음, 페치된 명령어들을 디코드 유닛(64)에제공한다. 디코드 유닛(64)은 이 명령어들을 디코드한 다음, 디코드된 명령어들을 실행을 위해 실행 코어(66)에 공급한다. 몇몇 경우들에 있어서, 디코드 유닛(64)은 사용자 상태 저장소(68) (및 KGC가 실행되고 있는 경우에는, KGC 상태 저장소(70)에 오퍼랜드 판독 요청들을 제공할 수 있다.
또한, 디코드 유닛(64)은 프로그램가능한 맵(72)에 결합될 수 있는 바, 이러한 프로그래밍가능한 맵은 KGC 실행에 대한 변환을 야기하게 될 하나 이상의 명령어들을 식별하는 데이터로 프로그램될 수 있다. 이러한 프로그램가능한 맵(72)은, 어떠한 사용자 프로그램들도 실행되기 전에, 프로세서(10)가 전원을 공급받을 때에 프로그램될 수 있다. 이러한 프로그램가능한 맵(72)이 프로그래밍 목적을 위해 명령어들에 의해 어드레스가능하거나, 또는 하드웨어 회로가 명령어들을 실행하기 위해 프로세서(10)를 준비하는 것의 일부로서, 지정된 컴퓨터 시스템 위치로부터 프로그램가능한 맵(72) 내로 그 맵을 읽을 수 있다.
본 실시예에서, 프로그램가능한 맵(72) 내에 저장된 데이터는 KGC 실행에 대한 변환을 야기하는 명령어의 전부 또는 일부를 식별할 수 있다. 예를 들어, 명령어 내의 오피코드 필드들, 변경자들, 오퍼랜드 지정자들(operand specifiers) 등이 이용될 수 있다. 또한, 몇몇 실시예들에서, 프로그램가능한 맵 데이터 내에는 다양한 모드 표시들이 포함될 수 있다.
만일 디코드 유닛(64)이 프로그램가능한 맵(72) 내에 표시된 명령어를 검출한다면, 그 디코드 유닛(64)은 그 명령어 (및 사용자 프로그램 코드 스트림 내의 이후 명령어들)을 폐기할 수 있으며, 페치 유닛(62)에게 KGC를 페치할 것을 신호(도 6의 Fetch KGC 신호)할 수 있다. 예를 들어, 네이티브 KGC는 ICache(60) 내에 로크될 수 있다. 대안적으로, 이러한 네이티브 KGC는 동일한 칩 상의 비휘발성 메모리 내에 또는 동일한 MCM 내에 있거나, 또는 분리된 시스템 메모리 내에 있을 수 있다. 다른 실시예들에서, 디코드 유닛(64)은 도 3에 나타낸 것과 같은 외부 실행 엔진에게 넌-네이티브 KGC를 실행할 것을 신호할 수 있다.
디코드 유닛(64)은 임의의 디코드 회로를 포함할 수 있다. 이러한 디코드 유닛은 (하나 이상의 디코더가 제공되는 경우, 다른 명령어들에 대해 병렬식으로) 명령어들을 디코드하도록 구성된 하나 이상의 하드웨어 디코더들을 포함할 수 있다. 이 디코드 유닛은 또한 더 복잡한 명령어들에 대해 마이크로코드 루틴들을 디스패치(dispatch)하도록 구성된 마이크로코드 유닛을 포함할 수 있다.
실행 코어(66)는 임의의 실행 구성(예를 들어, 슈퍼스칼라(superscalar), 슈퍼파이프라인드(superpipelined), 인오더(in-order), 아웃오브오더(out-of-order) 등)을 포함할 수 있다. 부가적으로, 네이티브 KGC가 실행중이라면, 실행 코어(66)는 KGC 상태 저장소(70)에 대한 액세스 만을 허용할 수 있다. 사용자 상태 저장소(68) 및 KGC 상태 저장소(70)는 각각 임의의 반도체 저장소(예를 들어, 레지스터들, 레지스터 파일, 메모리 어레이 등)를 포함할 수 있다.
도 7은 검출된 명령어를 실행한 이후에(이는 KGC 실행으로의 변환을 야기한다), 또는 검출된 명령어를 실행하는 동안 일어나는 변환 메커니즘의 다른 실시예를 도시하는 블록도이다. 도 5와 유사하게, 도 7은 사용자 프로그램 및 KGC를 도시한다. 이러한 실시예에서는, 구조적인 변경을 실시하는 명령어가 실행되며, 그 실행 동안 일어나는 이벤트는 KGC가 실행될 것인 지를 검출하는 데에 이용된다. 도 5와 유사하게, 도 7에도, 사용자 프로그램 상태(40) 및 KGC 상태(42)가 도시되어 있다. 도 5와 유사하게, 사용자 프로그램은 사용자 프로그램 상태(40)는 액세스하지만(화살표 44), KGC 상태(42)는 액세스하지 않는다. KGC는 사용자 프로그램 상태(화살표 48) 뿐 아니라, KGC 상태(42)도 액세스한다(화살표 46).
도 7에 나타낸 바와 같이, 사용자 프로그램은 명령어들(I1, I2, I3 등)과 같은 명령어들의 스트림을 포함한다. 일반적으로, 명령어들(I1, I2, I3, I4, IO Inst, I5 및 I6)은 매크로 명령어들이다. IO Inst는 입/출력(I/O)(이는 메모리-맵핑된 I/O 또는 소위 입/출력 I/O (IOIO) 중 어느 하나이다)에 맵핑되는 명령어들이다. IOIO는 x86 명령어 세트 내의 IN 및 OUT 명령어들에 해당한다. 일반적으로, IOIO 명령어는 I/O 사이클을 생성하는 어떠한 명령어라도 될 수 있고, 이러한 I/O 사이클은 메모리 어드레스 공간과 별개의 I/O 어드레스 공간에 대해 발생하며, 프로세서에 의해 별개의 것으로서 인식된다. IO Inst는, KGC 실행에 대한 변환을 야기하는 트리거 이벤트(trigger event)(화살표 80)에 의해, 실행 동안 프로세서(10)에 의해 검출될 수 있다.
일 구현에 있어서, 이러한 트리거 이벤트는 IO Inst를 실행하는 동안 발생되는 어드레스가 될 수 있다. 대안적으로, 실행 동안 판독 또는 기록되는 데이터가 트리거 이벤트가 되거나, 또는 IO Inst의 실행 동안의 어떠한 다른 이벤트가 트리거 이벤트가 될 수 있다. 다른 실시예들에서, 프로세서(10)에 의해 트리거 이벤트로서 검출될 수 있는 이벤트를 야기하는 한, 명령어가 I/O 명령어일 필요는 없다. 기타 트리거 이벤트들은 타이머 만료(timer expiration), 에러(예를 들어, ECC 에러) 검출, 또는 머신 상태에 있어서의 어떠한 다른 검출가능한 변경을 포함할 수 있다.
도 8은 트리거 이벤트에 기초하여, 실행 동안 또는 실행 이후에 KGC에 대한 명령어들의 맵핑을 실시할 수 있는 프로세서(10)의 다른 실시예의 블록도이다. 도 6의 실시예와 유사하게, 도 8의 실시예는 명령어 캐시(ICache)(60), 페치 유닛(62), 디코드 유닛(64), 실행 코어(66), 사용자 상태 저장소(68), KGC 상태 저장소(70) 및 프로그램가능한 맵(72)을 포함한다. 페치 유닛(62)은 ICache(60) 및 디코드 유닛(64)에 결합되며, 디코드 유닛(64)은 또한 실행 코어(66)에 결합된다. 실행 코어(66)는 또한 사용자 상태 저장소(68) 및 KGC 상태 저장소(70)에 결합된다.
도 8의 실시예에서는, 실행 코어(66)가 프로그램가능한 맵(72)에 결합되어, 페치 유닛(62)(또는 외부 실행 엔진)에 대해 페치 KGC 표시를 발생시킨다. 프로그램가능한 맵(72) 내의 데이터는 KGC에 대한 변환을 야기하기 위해 명령어의 실행 동안 트리거 이벤트가 될 수 있는 어드레스, 어드레스들의 범위, 데이터, 데이터의 범위, 예외들, 인터럽트들 등을 식별할 수 있다. 이러한 데이터는 또한, KGC에 대한 변환을 야기하는 명령어를 식별하기 위해 실행에 의해 발생된 데이터(execute-generated data)와 함께 (또는 이러한 실행에 의해 발생된 데이터 대신에) 이용되는 명령어(예를 들어, 오피코드 및 기타 엔코딩들)를 식별하는 데이터를 포함할 수 있다. 상기 설명한 바와 같이, 이러한 데이터는 또한 다양한 모드 표시들을 포함할 수 있다.
KGC가 페치/실행되어야 함을 신호하는 것 외에, 실행 코어(66)는 또한, 트리거 이벤트(트리거링 명령어 및 이전의 모든 명령어들이 실행을 완료할 때 까지, 첫 번째 KGC 명령어의 실행을 연기하는 것(hold off), 및 KGC 실행이 완료될 때 까지, 사용자 프로그램 내의 트리거링 명령어 이후의 명령어들을 실행하는 않는 것)에 해당하는 명령어에 동기화될 수 있다. 실행 코어(66)는 또한 디코드 유닛(64) 및 파이프라인의 실행 스테이지 이전의 다른 어떠한 유닛들에게 사용자 프로그램 명령어들을 제거(purge)하게 하거나, 또는 페치 KGC 신호를 이용하여 제거를 신호할 수도 있다.
KGC 의 기타 이용들
이전 부분에서는 구조적인 변경들을 실시하기 위해 KGC를 이용하는 것에 대해 설명하였다. KGC의 다른 이용들이 또한 고려된다.
예를 들어, 도 9는 하나 이상의 범용(general-purpose, GP) 코어들(92A-92N) 및 하나 이상의 특별 목적(special-purpose, SP) 코어들(94A-94M)을 포함하는 집적 회로(90)를 도시하는 바, 이들 모두는 단일의 실리콘 기판 위에 집적되거나 (또는 다른 실시들에 있어서는, MCM 내에 포함된다). GP 코어들(92A-92N)은 명령어 세트 아키텍쳐 내에 정의되는 명령어들을 실행하도록 설계된, 프로세서(10)와 유사한 프로세서들이 될 수 있다. SP 코어들은 액셀러레이터들, 부가 기능(added functionality) 또는 기타 디바이스들이 될 수 있다. 예를 들어, SP 코어들은 그래픽 동작들에 대해 최적화되는 그래픽 처리 유닛(graphics processing unit, GPU)들, 암호화 작업들을 수행하도록 구성되는 암호화 액셀러레이터들(cryptographic accelerators), 신뢰된 플랫폼 모듈들(trusted platform modules), 전력 관리에 이용될 수 있는 저전력/저성능 프로세서 코어들, 및 기타 요구되는 디바이스들이 될 수 있다. 하나 이상의 SP가 포함된다면, 이러한 SP 코어들은 서로 다를 수 있다. 일반적으로, SP 코어들(94A-94M)은 GP 코어들(92A-92N)에 부가하여 제공되는 임의의 요구되는 회로를 포함할 수 있다.
도 9의 실시예에서의 KGC는 디바이스 관리자(96)가 될 수 있는데, 이는 GP 코어들(92A-92N)에 의한 SP 코어들(94A-94M)로의 액세스를 제어한다. KGC는 애플리케이션 프로그래밍 인터페이스(API)를 제공할 수 있는데, 이는 SP 코어들(94A-94M)을 액세스하기 위해 GP 코어들(92A-92N) 상에서 실행하는 사용자 프로그램들에 의해 이용될 수 있다. 따라서, SP 코어들(94A-94M)은, 이러한 코어들이 어떻게 액세스되는 지를 포함하여, 변경될 수 있으며, 그리고 GP 코어들(92A-92N)(및 사용자 프로그램들)은 이러한 변경들로부터 분리된다. 또한, KGC 디바이스 관리자(96)는 작업(task)들의 우선순위(prioritization) 및 GP 코어들(92A-92N) 사이에서의 SP 코어들(94A-94M)의 공유를 취급할 수 있다. 예를 들어, 더 높은 우선순위 작업이 요구될 때, SP 코어들(94A-94M)은 더 낮은 우선순위 작업을 수행할 수 있다. KGC 디바이스 관리자(96)는 SP 코어를 인터럽트하고, 더 낮은 우선순위 작업에 해당하는 상태를 세이브(save)하며, 그리고 더 높은 우선순위 작업을 시작할 수 있다. KGC 디바이스 관리자(96)는 서로 다른 작업들의 상태를 유지하기 위한 안전한 저장 위치를 가질 수 있으며, 이에 따라 관련없는 사용자 프로그램에 상태가 노출되지 않게 된다. 즉, KGC에 의해 한 프로그램의 상태는 다른 프로그램으로부터 숨겨지게 된다. 이에 따라, KGC 디바이스 관리자(96)는 보안(security)을 제공할 수 있다. 만일 SP 코어가 예를 들어 암호화 디바이스인 경우, 암호화에 이용되는 키들(keys) 및 기타 민감한(sensitive) 데이터는 관련없는 프로세스에 대해 가시적이지 않게 된다. 또한, KGC 디바이스 관리자(96)는 SP 코어를 에뮬레이트할 수 있게 되며, 이에 의해 코어가 제거될 수 있게 하거나, 또는 요청이 수신될 때 모든 물리적인 코어들이 바쁜(busy) 경우에는 가상 코어(virtual core)들을 가능하게 한다.
KGC 디바이스 관리자(96)는 또한 집적 회로(90) 내의 어떤 피쳐들이 인에이블 또는 디스에이블되는 지를 제어할 수 있다. 이러한 피쳐 제어는 다양한 용도를 가질 수 있다. 예를 들어, 페이 에즈 유 고우 모델(pay-as-you-go)이 지원될 수 있는바, 여기에서 구매된 피쳐들은 인에이블되며, 구매가 만료되면, 이들은 디스에이블될 수 있다. 피쳐들은 최초 판매에 대해서는 디스에이블될 수 있지만, 이후 고객이 부가적인 지불을 제공하게 되면 인에이블된다.
도 10의 흐름도는 GP 코어들(92A-92N)로부터의 요청에 응답하여 디바이스 관리자(94)로서의 KGC의 일 실시예의 동작 예를 도시한다. 이해의 용이를 위해 도 10에서는 블록들로 나타내었지만, 다른 순서도 이용될 수 있다. KGC는, 실행될 때에 도 10의 흐름도를 실시하는 명령들을 포함할 수 있다.
KGC는 요청된 코어가 집적 회로(90) 내에 존재하는지를 결정할 수 있다(결정 블록 130). 만일 요청된 코어가 존재하지 않으면(예를 들어, 코어가 제거되었거나, 또는 집적 회로(90)의 이후의 설계에 포함되지 않은 경우 -결정 블록(130)에서 "아니오"), KGC는 존재하지 않는 코어를 에뮬레이트한다(블록 132). 대안적으로, 요청된 코어가 집적 회로(90) 상에 존재하지 않지만, 등가의 하드웨어가 프로세서를 포함하는 컴퓨터 시스템 내의 어떠한 다른 곳에서 이용가능한 경우, KGC는 요청된 작업을 수행하기 위해 외부 하드웨어와 통신할 수 있다. 존재의 체크와 에뮬레이션을 제공함으로써, KGC는, SP 코어들이 포함되지 않을지라도, SP 코어들(94A-94M)에 의존하는 프로그램들이 기능할 수 있게 한다.
만일 요청된 코어가 집적 회로(90) 내에 존재한다면(결정 블록(130)에서, "예"), KGC는 요청된 코어(94A-94M)가 이용가능한지를 결정할 수 있다(결정 블록 134). 소정 타입의 하나 이상의 코어가 있을 수 있으며, 요청된 타입의 코어들(94A-94M)중 임의의 것이 이용가능하다면(예를 들어, 인에이블되고 아이들(idle) 상태라면), 그 코어(94A-94M)가 작업을 수행하도록 할당될 수 있다. 만일 요청된 코어(94A-94M)가 이용가능하다면(결정 블록(134)에서, "예"), KGC는 요청된 작업을 수행하도록 코어를 프로그램할 수 있다(블록 136). 일단 작업이 완료되면(결정 블록(138)에서, "예"), KGC는 요청기(requestor)에게 알린다(블록 140). 작업이 완료되었는 지를 결정하는 것은 다양한 형태를 가질 수 있다. 예를 들어, KGC가 할당된 코어(94A-94M)를 폴링(polling)하거나, 또는 완료시, 할당된 코어가 인터럽트를 표명(assert)할 수 있다. 만일 완료된 작업이 코어 상의 다른 작업을 선취(preempt)했다면(결정 블록 142에서, "예"), KGC는 안전한 저장소로부터 선취된 작업에 대한 작업 상태를 안전하게 전송하고(블록 144), 저장된 상태에서 시작하는 요청을 수행하도록 코어를 프로그램할 수 있으며(블록 136), 그런 다음에는 이전에 설명한 바와 같이 계속해서 실행할 수 있다. 안전한 저장소는 KGC 이외의 코드에는 가시적이지 않은 KGC-할당된 데이터 저장소(예를 들어, 위치가 정해진(located) 데이터 캐시 저장소, 기록가능한 NVRAM 저장소 등)가 될 수 있다. 만일 완료된 작업이 어떠한 작업을 선취하지 않았고, (안전한 저장소 내에서) 실행을 기다리는 작업이 있다면(결정 블록(146)에서, "예"), KGC는 안전한 저장소로부터 대기하고 있는 작업에 대한 작업 상태를 안전하게 전송할 수 있고(블록 144), 그리고 대기하고 있는 작업을 수행하도록 코어를 프로그램할 수 있으며(블록 136), 그런 다음에는 이전에 설명한 바와 같이 계속해서 실행할 수 있다.
만일 요청된 코어가 이용가능하지 않으면(결정 블록(134)에서, "아니오"), KGC는 요청된 코어가 요청된 작업 보다 더 낮은 우선순위 작업을 수행하고 있는 지를 결정할 수 있다(결정 블록 148). 우선순위는 임의의 요구되는 우선순위 방식을 이용하여 작업들에 할당될 수 있다. 이러한 방식은 요청된 작업들과 관련되거나(예를 들어, 어떠한 타입들의 작업들이 다른 타입들 보다 더 높은 우선수위를 가질 수 있다), 또는 요청들을 발생시켰던 사용자 프로그램들의 상대적인 우선순위에 기초하여 할당될 수 있다. 만일 코어(94A-94M)에 의해 더 낮은 우선순위 작업이 수행되고 있다면(결정 블록(148)에서, "예"), KGC는 더 높은 우선순위 작업을 수행하기 위해 더 낮은 우선순위 작업을 선취할 수 있다(블록 150). KGC는 선취된 작업의 상태를 안전한 저장소에 안전하게 전송할 수 있으며, 이에 따라 이러한 상태는 다른 사용자 프로그램들로부터 (그리고 심지어는 개시 사용자 프로그램 자체로부터도) 숨겨지게 된다(블록 152). 이후, KGC는 요청을 수행하도록 코어를 프로그램할 수 있으며(블록 136), 그런 다음에는 이전에 설명한 바와 같이 계속해서 실행할 수 있다. 만일 더 낮은 우선순위 작업을 수행하는 코어가 없다면(결정 블록(148)에서, "아니오"), KGC는 이용가능한 코어를 기다리기 위해 안전한 저장소에 작업 요청 상태를 저장할 수 있다(블록 154). 대안적으로, 요구되는 경우, KGC는 요청된 코어를 에뮬레이트할 수 있다.
KGC의 고려되는 다른 이용은 x86 (또는 IA-32, 및 AMD-64TM과 같은 확장들) 명령어 세트와 관련된다. 이러한 x-86 명령어 세트는 4-레벨 특권 방식을 통해 특권을 제어한다. 가장 높은 특권 레벨은 링 0 (ring 0)으로서 지칭되며, 운영 체제 커널 동작들을 위해 종종 필요하다. 하지만, 링 0 내에서는 어떠한 구획(partition)도 없다. 링 0에서 동작하는 어떠한 작업은 머신 내에서 어떠한 상태를 달성할 수 있으며, 이 작업에 대한 상태조차도 액세스되서는 안된다. 링 0 구성은 잘못된 코드로 하여금 관련없는 동작들에 대해 문제들을 야기할 수 있게 하며, 이는 또한 보안 문제(security concern)이다.
KGC는 링 0을 구획함으로써 이러한 결과들에 대항(counter)하는 데에 이용될 수 있다. 도 11은 구획들을 나타내는데, 여기서 링 0은 원(100)으로 도시되어 있고, 라인들(102A-102C)은 이러한 구획들을 도시한다. 하나의 구획에 속하는 코드가 그 구획의 부분이 아닌 자원들을 액세스하고자 시도할 때, KGC(104)는 이러한 액세스를 인터셉트하여, 이것이 허용가능한지의 여부를 결정할 수 있다. 예를 들어, 한 구획으로부터 다른 구획으로의 액세스는 점선 화살표(106)로서 도시되어 있다. 액세스를 허용하는 대신, 이러한 액세스는 KGC(104)로 라우팅된다(실선 화살표(108)). 만일 액세스가 허용된다면, KGC(104)는 요청기를 대신하여 액세스를 수행할 수 있다(실선 화살표(110)). 이러한 방식으로, 구획들은 서로로부터 분리될 수 있다. 만일 악의성 코드(malicious code)가 어떠한 구획을 침투(penetrate)한다면, 이러한 구획은 영향을 받을 수 있지만, 나머지 구획들에 대한 영향은 감소되거나, 심지어는 제거될 수 있다.
도 11에 도시된 구획은 다양한 방법들로 실시될 수 있다. 예를 들어, 다른 구획들에는 다른 메모리 범위들이 할당될 수 있는데, 이들은 프로그램가능한 맵(72) 내에 프로그램될 수 있다. 만일 실행되고 있는 코드의 구획 바깥의 메모리 어드레스가 발생되면, KGC에 대한 변환이 일어날 수 있다. 유사하게, 구성/제어 레지스터 상태가 이러한 구획들 사이에 분할될 수 있으며, 이러한 구성/제어 레지스터들에 대한 액세스들은, 허용할 수 없는 레지스터들을 오퍼랜드들로서 검출하도록 프로그램가능한 맵(72)을 프로그램함으로써, 현재 구획에 기초하여 제한될 수 있다.
KGC가 새로운 구조적인 피쳐들을 실시하는 데에 이용될 수 있기는 하지만, 몇몇 경우들에서는, KGC 단독으로, 하드웨어 구현이 제공하게 될 요구되는 성능을 제공하지 못할 수도 있다. 일 실시예에서, KGC는 프로세서와 함께 집적 회로 상에 포함되는 프로그램가능한 논리 유닛에 대한 인터페이스를 관리할 수 있다. KGC에 할당되는 기능의 적어도 일부는 프로그램가능한 논리 유닛 내에서 실시될 수 있으며, 이에 따라 더 높은 "하드웨어와 같은(hardware-like)" 속도로 수행될 수 있다. 나머지 기능은 KGC 자체에서 실시될 수 있다.
도 12는 (사용자 상태 저장소(68) 및 KGC 상태 저장소(70)를 포함하는) 프로세서(10) 및 프로그램가능한 논리 유닛(122)을 포함하는 집적 회로(120)의 일 실시예의 블록도이다. 도 12에는 또한, KGC 소스(12)가 도시되어 있는데, 이는 KGC 및 적어도 하나의 프로그램가능한 논리 구성(124A)을 저장한다. 몇몇 경우들에서는, 프로그램가능한 논리 구성(124B)과 같은 부가적인 프로그램가능한 논리 구성들도 저장된다.
프로그램가능한 논리 구성은 프로그램 인터페이스(도 12의 "Program")를 이용하여 프로그램가능한 논리 유닛(122) 내에 로드될 수 있다. 이러한 프로그램 인터페이스는 집적 회로(120)의 외부 입/출력들로부터 분리될 수 있으며, 이에 따라 프로세서(10) 상에서 실행하는 KGC에 의해서만 프로그램될 수 있다. KGC는 KGC 소스(12)로부터 구성(124A 또는 124B)을 판독할 수 있으며, 프로그램 인터페이스를 통해 이러한 구성을 프로그램가능한 논리 유닛(122)에 기록할 수 있다.
몇몇 실시들에 있어서, 프로그램가능한 논리 유닛(122)의 구성은 전원이 공급되는 동안 선택될 수 있으며, KGC는 전원이 공급되는 동안 이러한 구성을 프로그램가능한 논리 유닛(122) 내에 로드시킨 다음, 이후 이 구성을 유지할 수 있다. 다른 실시들에 있어서, 프로그램가능한 논리 유닛(122)의 구성은 동작시 변경될 수 있는데, 이는 KGC 소스(12)로부터 다른 구성을 선택하고, 프로그램가능한 논리 유닛(122)을 재프로그램함으로써 이루어진다. 이러한 실시들에 있어서, 프로그램가능한 논리 유닛(122)의 동작은 KGC에 의해 수행되고 있는 작업에 기초하여 변경될 수 있다. 예를 들어, KGC가 프로그램가능한 논리 유닛(122)으로부터 이득을 얻는 2개의 연산 집중 작업(computation-intensive task)들을 포함하고 있다면, 더 빈번하게 이용되는 작업에 대한 구성이 프로그램가능한 논리 유닛(122) 내에 로드될 수 있다. (프로그램가능한 논리 유닛(122) 내에 로드되지 않은) 나머지 작업이 요청되면, 그 프로그램가능한 논리 유닛(122)은 변경될 수 있다. 대안적으로, 프로그램가능한 논리 유닛(122)은 나머지 작업이 더 빈번하게 요청되는 경우에만 변경될 수 있으며, 그리고 프로그램가능한 논리 유닛(122)의 구성을 변경해야 한다는 결정이 이루어질 때 까지, KGC는 소프트웨어로 그 작업을 수행할 수 있다.
프로그램가능한 논리 유닛은 입력들(도 12의 In[0:n])을 수신할 수 있고, 출력들(도 12의 Out[0:m])을 발생시킬 수 있다. 상기 입력들은 KGC 상태 저장소(70)로부터 비롯될 수 있고, 상기 출력들은 KGC 상태 저장소(70)에 의해 수신될 수 있으며, 이에 의해 KGC가 프로그램가능한 논리 유닛(122)을 구동(drive)시키고 그 프로그램가능한 논리 유닛(122)으로부터 결과들을 수신하는 메커니즘을 제공한다. 예를 들어, 상기 입력들 및 출력들은 KGC 상태 저장소(70) 내부의 레지스터 내의 비트들에 맵핑될 수 있다.
프로그램가능한 논리 유닛(122)은 어떠한 타입의 비영구적인(non-permanent) 프로그램가능한 논리를 포함할 수 있다. 예를 들어, 필드 프로그램가능한 게이트 어레이(field programmable gate array, FPGA) 또는 복잡한 프로그램가능한 논리 디바이스(complex programmable logic device, CPLD) 기술이 이용될 수 있다. 플래시 소거가능한 판독 전용 메모리들, 또는 랜덤 액세스 메모리 기술들이 프로그램가능한 논리 유닛(122)에서 이용될 수 있다.
상기 개시를 완전히 이해하게 되면, 많은 변형들 및 수정들이 당업자에게 명백할 것이다. 하기의 청구항은 이러한 모든 변형들 및 수정들을 포괄하는 것으로 의도된다.
본 발명은 일반적으로 프로세서들 및 컴퓨터 시스템들에 적용될 수 있다.
10: 프로세서
12: 알려진 제품 코드(KGC) 소스
14: 암호 인증 유닛
16: 변경-보호된 메모리
22: NV 메모리
24: 프로세서 I/C
28: 실행 엔진
32: 메모리
40: 사용자 프로그램 상태
42: KGC 상태
50: 사전-실행 맵
60: 명령어 캐시(ICache)
62: 페치 유닛
64: 디코드 유닛
66: 실행 코어
68: 사용자 상태 저장소
70: KGC 상태 저장소
72: 프로그램가능한 맵

Claims (14)

  1. 집적 회로로서,
    사용자 상태 저장소와 KGC 상태 저장소를 포함하는 적어도 하나의 프로세서 코어와;
    적어도 하나의 다른 회로(other circuit)와; 그리고
    알려진 제품 코드(Known Good Code: KGC)를 실행을 위해 상기 프로세서 코어에 공급하도록 구성된 KGC 소스를 포함하며,
    여기서, 상기 KGC는 상기 집적 회로 내에서 그 수명 동안 변경으로부터 보호되고, 인증된 엔티티(authenticated entity)로부터 제공되며;
    상기 KGC는 상기 다른 회로에 대한 인터페이스 코드를 포함하며, 이에 의해 상기 적어도 하나의 프로세서 코어 상에서 실행되는 애플리케이션은 상기 KGC를 통해 상기 적어도 하나의 다른 회로와 인터페이스하며;
    상기 KGC는 상기 적어도 하나의 다른 회로와 상호작용하기 위해 상기 애플리케이션에 대한 애플리케이션 프로그래밍 인터페이스(API)를 제공하며; 그리고
    상기 적어도 하나의 프로세서 코어는, 상기 KGC가 상기 적어도 하나의 프로세서 코어 상에서 실행 중일 때에만 상기 KGC 상태 저장소에 대한 액세스를 허용하는 것을 특징으로 하는 집적 회로.
  2. 제 1 항에 있어서,
    상기 KGC는 상기 적어도 하나의 다른 회로에 대한 액세스를 관리하도록 구성된 디바이스 관리자(device manager)를 포함하는 것을 특징으로 하는 집적 회로.
  3. 제 2 항에 있어서,
    상기 적어도 하나의 프로세서 코어는 복수의 프로세서 코어들을 포함하고, 상기 디바이스 관리자는 상기 적어도 하나의 다른 회로로의 상기 복수의 프로세서 코어들의 액세스를 관리하도록 구성되는 것을 특징으로 하는 집적 회로.
  4. 제 3 항에 있어서,
    상기 디바이스 관리자는, 상기 복수의 프로세서 코어들중 하나 상에서 실행중인 하나의 프로그램과 관련된 상기 적어도 하나의 다른 회로로부터의 상태를 안전하게 세이브(save)하고, 다른 프로그램과 관련된 상태를 상기 적어도 하나의 다른 회로 내로 로드시키도록 구성되는 것을 특징으로 하는 집적 회로.
  5. 적어도 하나의 프로세서 코어 및 적어도 하나의 다른 회로를 포함하는 집적 회로에서의 방법으로서,
    상기 프로세서 코어 상에서 알려진 제품 코드(KGC)를 실행하는 단계를 포함하며,
    여기서, 상기 적어도 하나의 프로세서 코어는 사용자 상태 저장소와 KGC 상태 저장소를 포함하며, 상기 KGC는 상기 다른 회로에 대한 인터페이스 코드를 포함하며, 이에 의해 상기 적어도 하나의 프로세서 코어 상에서 실행되는 애플리케이션은 상기 KGC를 통해 상기 적어도 하나의 다른 회로와 인터페이스하며;
    상기 KGC는 상기 집적 회로 내에서 그 수명 동안 변경으로부터 보호되고, 인증된 엔티티로부터 제공되며;
    상기 KGC는 상기 적어도 하나의 다른 회로와 상호작용하기 위해 상기 애플리케이션에 대한 애플리케이션 프로그래밍 인터페이스(API)를 제공하며; 그리고
    상기 적어도 하나의 프로세서 코어는, 상기 KGC가 상기 적어도 하나의 프로세서 코어 상에서 실행 중일 때에만 상기 KGC 상태 저장소에 대한 액세스를 허용하는 것을 특징으로 하는 방법.
  6. 제 5 항에 있어서,
    상기 KGC는 상기 적어도 하나의 다른 회로에 대한 액세스를 관리하도록 구성된 디바이스 관리자를 포함하고, 상기 적어도 하나의 프로세서 코어는 복수의 프로세서 코어들을 포함하며, 그리고 상기 방법은 상기 적어도 하나의 다른 회로로의 상기 복수의 프로세서 코어들의 액세스를 관리하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 제 6 항에 있어서,
    상기 액세스를 관리하는 단계는, 상기 복수의 프로세서 코어들중 하나 상에서 실행중인 하나의 프로그램과 관련된 상기 적어도 하나의 다른 회로로부터의 상태를 안전하게 세이브하는 단계, 및 다른 프로그램과 관련된 상태를 상기 적어도 하나의 다른 회로 내로 로드시키는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제 5 항에 있어서,
    상기 적어도 하나의 다른 회로는 프로그램가능한 논리 유닛(programmable logic unit)을 포함하고, 상기 KGC를 실행하는 단계는 상기 집적 회로의 초기화시에 상기 프로그램가능한 논리 유닛 내에 구성을 로드시키는 단계를 포함하는 것을 특징으로 하는 방법.
  9. 명령어들로 된 알려진 제품 코드(KGC)를 포함하는 컴퓨터 액세스가능한 저장 매체로서,
    상기 명령어들이, 적어도 하나의 프로세서 코어 및 적어도 하나의 다른 회로를 포함하는 집적 회로 내의 상기 적어도 하나의 프로세서 코어 상에서 실행되면, 상기 다른 회로에 대한 인터페이스 코드를 제공하며, 이에 의해 상기 적어도 하나의 프로세서 코어 상에서 실행되는 애플리케이션은 상기 KGC를 통해 상기 적어도 하나의 다른 회로와 인터페이스하며;
    상기 KGC는 상기 집적 회로 내에서 그 수명 동안 변경으로부터 보호되고, 인증된 엔티티로부터 제공되며;
    상기 KGC는 상기 적어도 하나의 다른 회로와 상호작용하기 위해 상기 애플리케이션에 대한 애플리케이션 프로그래밍 인터페이스(API)를 제공하며; 그리고
    상기 적어도 하나의 프로세서 코어는 사용자 상태 저장소와 KGC 상태 저장소를 포함하고, 상기 적어도 하나의 프로세서 코어는, 상기 KGC가 상기 적어도 하나의 프로세서 코어 상에서 실행 중일 때에만 상기 KGC 상태 저장소에 대한 액세스를 허용하는 것을 특징으로 하는 컴퓨터 액세스가능한 저장 매체.
  10. 제 9 항에 있어서,
    상기 KGC는 상기 적어도 하나의 다른 회로에 대한 액세스를 관리하도록 구성된 디바이스 관리자를 포함하고, 상기 적어도 하나의 프로세서 코어는 복수의 프로세서 코어들을 포함하며, 그리고 상기 KGC는 상기 적어도 하나의 다른 회로로의 상기 복수의 프로세서 코어들의 액세스를 관리하는 것을 특징으로 하는 컴퓨터 액세스가능한 저장 매체.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
KR1020107015763A 2007-12-17 2008-12-03 온칩 디바이스 관리를 위한 알려진 제품 코드 KR101538749B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/957,930 US8612729B2 (en) 2007-12-17 2007-12-17 Known good code for on-chip device management
US11/957,930 2007-12-17

Publications (2)

Publication Number Publication Date
KR20100102666A KR20100102666A (ko) 2010-09-24
KR101538749B1 true KR101538749B1 (ko) 2015-07-22

Family

ID=40427362

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107015763A KR101538749B1 (ko) 2007-12-17 2008-12-03 온칩 디바이스 관리를 위한 알려진 제품 코드

Country Status (7)

Country Link
US (2) US8612729B2 (ko)
EP (1) EP2223257A1 (ko)
JP (1) JP5410445B2 (ko)
KR (1) KR101538749B1 (ko)
CN (1) CN101999123A (ko)
TW (1) TW200937293A (ko)
WO (1) WO2009078913A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI497511B (zh) * 2012-11-08 2015-08-21 Ind Tech Res Inst 具嵌入式非揮發性記憶體之晶片及其測試方法
US10303881B2 (en) 2013-02-05 2019-05-28 Hackproof Technologies Inc. Soft-wired radio (SWR) web machine
US9519804B2 (en) * 2013-02-05 2016-12-13 Hackproof Technologies, Inc. Domain-specific hardwired symbolic machine that validates and maps a symbol
TWI507989B (zh) * 2013-08-08 2015-11-11 Nat Univ Tsing Hua 資源導向之嵌入式系統功率消耗分析方法
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
WO2017066427A1 (en) 2015-10-13 2017-04-20 Hackproof Technologies, Inc. Soft-wired radio (swr) web machine
US10210323B2 (en) * 2016-05-06 2019-02-19 The Boeing Company Information assurance system for secure program execution
US10956572B2 (en) 2016-08-22 2021-03-23 Hackproof Technologies Inc. Domain-specific hardwired web browser machine
KR102309429B1 (ko) * 2017-03-20 2021-10-07 현대자동차주식회사 차량 및 그 제어 방법
FR3076920B1 (fr) * 2018-01-16 2019-12-13 Continental Automotive France Procede de reprogrammation des donnees d'une fonction logicielle executee par au moins un calculateur muni d'au moins un cœur d'execution, d'au moins un cœur de securite et d'au moins une memoire non volatile
US11442740B2 (en) * 2020-09-29 2022-09-13 Rockwell Automation Technologies, Inc. Supporting instruction set architecture components across releases

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438737B1 (en) * 2000-02-15 2002-08-20 Intel Corporation Reconfigurable logic for a computer
US20060059574A1 (en) * 2004-09-10 2006-03-16 International Business Machines Corporation System for securely configuring a field programmable gate array or other programmable hardware
US20070277161A1 (en) * 2004-03-04 2007-11-29 Trustees Of Boston University System and Method for Programmable Logic Acceleration of Data Processing Applications and Compiler Therefore

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5600845A (en) * 1994-07-27 1997-02-04 Metalithic Systems Incorporated Integrated circuit computing device comprising a dynamically configurable gate array having a microprocessor and reconfigurable instruction execution means and method therefor
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6041402A (en) 1998-01-05 2000-03-21 Trw Inc. Direct vectored legacy instruction set emulation
US6338435B1 (en) 1999-01-15 2002-01-15 Todd Carper Smart card patch manager
US6390374B1 (en) 1999-01-15 2002-05-21 Todd Carper System and method for installing/de-installing an application on a smart card
US7290081B2 (en) 2002-05-14 2007-10-30 Stmicroelectronics, Inc. Apparatus and method for implementing a ROM patch using a lockable cache
US20040025027A1 (en) * 2002-07-30 2004-02-05 Eric Balard Secure protection method for access to protected resources in a processor
US7039776B2 (en) 2003-04-17 2006-05-02 Broadcom Corporation Patch memory system for a ROM-based processor
US7512813B2 (en) 2004-05-28 2009-03-31 International Business Machines Corporation Method for system level protection of field programmable logic devices
US8320880B2 (en) * 2005-07-20 2012-11-27 Qualcomm Incorporated Apparatus and methods for secure architectures in wireless networks
US7831813B2 (en) 2007-12-17 2010-11-09 Globalfoundries Inc. Uses of known good code for implementing processor architectural modifications

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438737B1 (en) * 2000-02-15 2002-08-20 Intel Corporation Reconfigurable logic for a computer
JP2003524969A (ja) * 2000-02-15 2003-08-19 インテル・コーポレーション コンピュータのための再構成可能なロジック
US20070277161A1 (en) * 2004-03-04 2007-11-29 Trustees Of Boston University System and Method for Programmable Logic Acceleration of Data Processing Applications and Compiler Therefore
US20060059574A1 (en) * 2004-09-10 2006-03-16 International Business Machines Corporation System for securely configuring a field programmable gate array or other programmable hardware

Also Published As

Publication number Publication date
JP5410445B2 (ja) 2014-02-05
KR20100102666A (ko) 2010-09-24
US9058163B2 (en) 2015-06-16
WO2009078913A1 (en) 2009-06-25
TW200937293A (en) 2009-09-01
EP2223257A1 (en) 2010-09-01
US20140129810A1 (en) 2014-05-08
JP2011508308A (ja) 2011-03-10
US20100174890A1 (en) 2010-07-08
CN101999123A (zh) 2011-03-30
US8612729B2 (en) 2013-12-17

Similar Documents

Publication Publication Date Title
US7831813B2 (en) Uses of known good code for implementing processor architectural modifications
KR101538749B1 (ko) 온칩 디바이스 관리를 위한 알려진 제품 코드
US20210406201A1 (en) Processors, methods, systems, and instructions to support live migration of protected containers
US7917740B1 (en) Virtualization assist for legacy x86 floating point exception handling
US8078792B2 (en) Separate page table base address for minivisor
KR101738212B1 (ko) 명령어 에뮬레이션 프로세서, 방법, 및 시스템
US20070016832A1 (en) System, device and method of verifying that a code is executed by a processor
US20220197678A1 (en) Apparatus and method for secure instruction set execution, emulation, monitoring, and prevention
US20140281398A1 (en) Instruction emulation processors, methods, and systems
US20180007051A1 (en) Protected container key management processors, methods, systems, and instructions
US20190156015A1 (en) Smm protection utilizing ring separation and smi isolation
US10963280B2 (en) Hypervisor post-write notification of control and debug register updates
Banik et al. Understanding the BIOS and Minimalistic Design
US20240184717A1 (en) Processors, methods, systems, and instructions to support live migration of protected containers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190617

Year of fee payment: 5