KR102664370B1 - 민감성으로서 명령들의 동적 지정 - Google Patents
민감성으로서 명령들의 동적 지정 Download PDFInfo
- Publication number
- KR102664370B1 KR102664370B1 KR1020200168366A KR20200168366A KR102664370B1 KR 102664370 B1 KR102664370 B1 KR 102664370B1 KR 1020200168366 A KR1020200168366 A KR 1020200168366A KR 20200168366 A KR20200168366 A KR 20200168366A KR 102664370 B1 KR102664370 B1 KR 102664370B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- sensitive
- instructions
- execution
- integrated circuit
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 207
- 230000008569 process Effects 0.000 claims abstract description 135
- 230000004913 activation Effects 0.000 claims abstract description 52
- 230000004044 response Effects 0.000 claims abstract description 28
- 230000003213 activating effect Effects 0.000 claims abstract description 7
- 230000035945 sensitivity Effects 0.000 claims description 17
- 238000001514 detection method Methods 0.000 claims description 10
- 230000000903 blocking effect Effects 0.000 claims description 6
- 230000026676 system process Effects 0.000 claims description 6
- 230000009849 deactivation Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 12
- 238000013519 translation Methods 0.000 description 10
- 230000014616 translation Effects 0.000 description 10
- 230000008901 benefit Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000000638 solvent extraction Methods 0.000 description 7
- 230000009466 transformation Effects 0.000 description 7
- 238000013507 mapping Methods 0.000 description 6
- 238000000844 transformation Methods 0.000 description 6
- 206010010099 Combined immunodeficiency Diseases 0.000 description 4
- 102100021885 Speedy protein A Human genes 0.000 description 4
- 101710151560 Speedy protein A Proteins 0.000 description 4
- 238000001360 collision-induced dissociation Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000004888 barrier function Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000036316 preload Effects 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
본 명세서에서 설명되는 것은 민감성으로서 명령들을 동적으로 지정하기 위한 시스템들 및 방법들이다. 예를 들어, 일부 방법들은, 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 제 1 프로세스의 상태를 저장하는 프로세스 상태 레지스터 내의 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것; 민감성 명령의 검출 및 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약을 호출하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 1 프로세스의 제 2 명령을 실행하는 것을 포함한다.
Description
본 출원은 미국 가출원 특허 일련 번호 제62/944,245호(출원일: 2019년 12월 5일)에 대한 우선권 및 이러한 미국 출원의 혜택을 주장하고, 이러한 미국 출원의 전체 개시내용은 참조로 본 명세서에 통합된다.
본 개시내용은 민감성(sensitive)으로서 명령(instruction)들의 동적 지정(dynamic designation)에 관한 것이다.
프로세서 파이프라인(processor pipeline)은 다수의 스테이지(stage)들을 포함하고, 이러한 스테이지들을 통해 명령(instruction)들이 한 번에 한 싸이클(cycle) 씩 진행(advance)한다. 스칼라 프로세서(scalar processor)에서, 명령들은 파이프라인을 통해 하나씩 진행하며, 이 경우 한 싸이클 당 많아 봐야 단일의 명령이 커밋(commit)된다. 슈퍼스칼라 프로세서(superscalar processor)에서, 다수의 명령들은 동일한 파이프라인 스테이지를 통해 동시에 진행할 수 있고, 이것은 하나보다 많은 명령이 (해저드(hazard)들로 지칭되는) 특정 조건(condition)들에 따라 최대 발행 폭(issue width)까지 한 싸이클 당 발행될 수 있게 한다. 일부 프로세서들은 (프로그램 순서에 따라) 순차적으로(in-order) 명령들을 발행하고, 이 경우 연속적인 명령들은 프로그램 순서로 파이프라인을 통해 진행한다. 다른 프로세서들은 명령들이 재배열(reorder)되는 것 및 비순차적으로(out-of-order) 발행되는 것을 허용하고, 이것은 잠재적으로 전체 파이프라인 처리량(pipeline throughput)을 증가시킨다. 만약 재배열이 허용된다면, 명령들은 슬라이딩(sliding)되는 명령 윈도우(instruction window)(이것의 크기는 발행 폭보다 더 클 수 있음) 내에서 재배열될 수 있고, 그리고 재배열 버퍼(reorder buffer)는 명령들이 순차적으로 커밋될 수 있도록 하기 위해서(이것은 잠재적으로 다수의 명령들이 프로그램 순서에서 인접해 있기만 하면 동일한 싸이클에서 커밋될 수 있게 함) 명령 윈도우 내의 명령들과 관련된 결과들(및 다른 정보)을 일시적으로 저장하기 위해 사용될 수 있다.
본 명세서에서 개시되는 것은 민감성으로서 명령들을 동적으로 지정하는 구현예들이다.
본 명세서에서 개시되는 구현예들의 제 1 실시형태는, 명령(instruction)들을 실행하기 위한 집적 회로(integrated circuit)이고, 이러한 집적 회로는, 민감성 핸들링 활성화 표시자(sensitive handling enable indicator)를 포함하는 레지스터(register); 그리고 프로세서 코어(processor core)를 포함하고, 여기서 프로세서 코어는, 제 1 프로세스의 제 1 명령이 민감성 명령(sensitive instruction)으로서 지정(designate)되었음을 검출하는 것; 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검(check)하는 것; 민감성 명령의 검출 및 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약(constraint)을 호출(invoke)하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 1 프로세스의 제 2 명령을 실행하는 것을 수행하도록 구성된다.
본 명세서에서 개시되는 구현예들의 제 2 실시형태는 방법이고, 이러한 방법은, 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 제 1 프로세스의 상태를 저장하는 프로세스 상태 레지스터 내의 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것; 민감성 명령의 검출 및 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약을 호출하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 1 프로세스의 제 2 명령을 실행하는 것을 포함한다.
본 명세서에서 개시되는 구현예들의 제 3 실시형태는, 명령들을 실행하기 위한 집적 회로이고, 이러한 집적 회로는, 민감성 핸들링 활성화 표시자를 포함하는 레지스터; 그리고 프로세서 코어를 포함하고, 여기서 프로세서 코어는, 제 1 명령을 페치(fetch)하는 것(여기서 명령은 제 1 명령이 민감성 명령임을 표시하는 민감성 비트를 포함함); 민감성 핸들링 활성화 표시자의 현재 값 및 민감성 비트에 근거하여, 제 1 명령의 실행에 대한 제약을 호출하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 2 명령을 실행하는 것을 수행하도록 구성된다.
본 명세서에서 개시되는 구현예들의 제 4 실시형태는, 명령들을 실행하기 위한 집적 회로이고, 이러한 집적 회로는, 프로세서 파이프라인; 레지스터; 그리고 쓰레드 해저드 회로(thread hazard circuitry)를 포함하고, 여기서 프로세서 파이프라인은, 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성되고, 레지스터는 민감성 핸들링 활성화 표시자를 포함하고, 쓰레드 해저드 회로는, 제 1 쓰레드의 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것; 그리고 민감성 명령의 검출 및 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 민감성 명령이 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 제 1 쓰레드와는 다른 쓰레드들의 명령들이 프로세서 파이프라인의 실행 유닛들을 사용하여 실행되는 것을 차단(block)하는 것을 수행하도록 구성된다.
본 개시내용의 이러한 실시형태들 및 다른 실시형태들이, 구현예들의 다음의 상세한 설명, 첨부되는 청구항들, 및 수반되는 도면들에서 개시된다.
본 개시내용은 수반되는 도면들과 연계되어 읽혀질 때 다음의 상세한 설명으로부터 가장 잘 이해되며, 도면들에서 유사한 참조 번호들은 수 개의 도면들에 걸쳐 유사한 부분들을 지칭한다. 일반적인 관행에 따라 도면들의 다양한 특징들은 일정한 비율로 도시된 것이 아님이 강조된다. 반대로, 이러한 다양한 특징들의 치수들은 명확성을 위해 임의로 확대 혹은 축소된다.
도 1은 컴퓨팅 시스템(computing system)(100)의 예의 하이-레벨 블록도(high-level block diagram)이다.
도 2a는 도 1의 파이프라인(pipeline)의 구성의 예이다.
도 2b는 도 1의 파이프라인의 구성의 예이다.
도 3은 도 1의 프로세서 메모리 시스템(processor memory system)의 구성의 예이다.
도 4는 보안 멀티쓰레딩 실행(secure multithread execution)을 위한 기법의 예의 흐름도이다.
도 5는 동적으로 지정된 민감성 명령(sensitive instruction)들에 대한 특별 핸들링(special handling)으로 명령들을 실행하기 위한 집적 회로의 예의 블록도이다.
도 6은 동적으로 지정된 민감성 명령들에 대한 특별 핸들링으로 명령들을 실행하기 위한 기법의 예의 흐름도이다.
도 7은 프로세스의 하나 이상의 명령들이 민감성 명령들로서 지정되었음을 검출하기 위한 기법의 예의 흐름도이다.
도 8은 더 높은 우선권 프로세스(priority process)를 사용하여 프로세스에 대한 명령들의 민감성 핸들링(sensitive handling)에 대한 권한(authorization)을 업데이트(updating)하기 위한 기법의 예의 흐름도이다.
도 1은 컴퓨팅 시스템(computing system)(100)의 예의 하이-레벨 블록도(high-level block diagram)이다.
도 2a는 도 1의 파이프라인(pipeline)의 구성의 예이다.
도 2b는 도 1의 파이프라인의 구성의 예이다.
도 3은 도 1의 프로세서 메모리 시스템(processor memory system)의 구성의 예이다.
도 4는 보안 멀티쓰레딩 실행(secure multithread execution)을 위한 기법의 예의 흐름도이다.
도 5는 동적으로 지정된 민감성 명령(sensitive instruction)들에 대한 특별 핸들링(special handling)으로 명령들을 실행하기 위한 집적 회로의 예의 블록도이다.
도 6은 동적으로 지정된 민감성 명령들에 대한 특별 핸들링으로 명령들을 실행하기 위한 기법의 예의 흐름도이다.
도 7은 프로세스의 하나 이상의 명령들이 민감성 명령들로서 지정되었음을 검출하기 위한 기법의 예의 흐름도이다.
도 8은 더 높은 우선권 프로세스(priority process)를 사용하여 프로세스에 대한 명령들의 민감성 핸들링(sensitive handling)에 대한 권한(authorization)을 업데이트(updating)하기 위한 기법의 예의 흐름도이다.
본 명세서에서 설명되는 것은 민감성으로서 명령들을 동적으로 지정하기 위한 시스템들 및 방법들이다. 포트스매쉬(Portsmash)와 같은, 프로세서들에 대한 사이드-채널 공격(side-channel attack)들이 최근에 발견되었다. 사이드-채널 공격은, 스파이(spy)가 임의의 구현된 알고리즘 자체 내의 약점이 아니라 구현의 지식을 사용하여 피해자 엔티티(victim entity)에 대한 정보를 발견할 수 있는 공격이다. 예를 들어, 만약 스파이가 스파이 자체에 대한 타이밍 정보(timing information)를 측정함으로써 컴퓨터 시스템 내의 희생자 프로세스(victim process) 상에서 어떤 명령들이 실행되고 있는지를 발견할 수 있다면, 이것은 사이-채널 공격인 것으로 고려되게 된다.
일부 경우들에서, 희생자는 어떤 명령들 혹은 코드(code)의 어떤 섹션(section)이 사이드-채널 공격들에 대해 취약할 수 있는지를 실현가능하게 지정할 수 있다. 더 정확히 말하면, 공격을 받는 경우 어떤 명령들 혹은 코드가 심각한 해(harm)를 초래하게 되는지를 지정할 수 있다. AES 암호화 명령들은 명령들의 이러한 클래스(class)의 예들이다.
전형적으로, 운영 체제(Operating System) 혹은 하이퍼바이저(hypervisor)는 프로세서 내에서 리소스 할당(resource allocation)을 핸들링하고 그리고 정책 결정(policy decision)을 수행하며, 반면 하드웨어(hardware)는 프리미티브(primitive)들을 제공하고 있을 수 있다. 예를 들어, 운영 체제는 메모리 페이지들을 어떻게 할당할지를 결정하고, 반면 하드웨어는 가상 메모리(virtual memory)에 대한 프리미티브들을 제공한다. 유사하게, OS/하이퍼바이저가 "민감성(sensitive)" 명령들 및 코드를 어떻게 보호할지를 결정하는 유사한 문제로서 보안(security)이 고려될 수 있다. 하드웨어는 이것을 지원하기 위한 프리미티브들을 제공할 수 있다.
본 개시내용은 소프트웨어가 어떻게 특정 명령들을 민감성으로서 혹은 그렇지 않은 것으로서 지정할 수 있는지를 설명한다. 명령이 민감성인지 혹은 그렇지 않은지 여부는, 더 낮은 특권 레벨 프로세스(privilege level process)에 의해 요청이 행해진 이후에, 더 높은 특권 레벨 프로세스에 의해 혜택을 받을 수 있다. 예를 들어, ARM에서, ELO 사용자 프로세스는 명령을 민감성으로서 마킹(marking)하도록 요청할 수 있다. 하지만, 만약 하드웨어가 명령이 민감성으로서 마킹될 수 있게 한다면, 이것은 악의적 목적으로 사용될 수 있다(예컨대, 컴퓨팅 시스템의 속도를 저하시키기 위해 사용될 수 있음). 이러한 문제에 대처하기 위해, 명령이 민감성으로서 마킹될 수 있는지 여부는 더 높은 특권 레벨 소프트웨어 프로세스(예컨대, 하이퍼바이저 프로세스)에 의해 제어될 수 있다.
명령들을 민감성 명령들로서 마킹하는 다른 방법들이 이용될 수 있는데, 이것은 더 높은 레벨 소프트웨어에 의해 혜택을 받을 수 있다. 제 1 메커니즘(mechanism)은 모든 명령 내에 추가 비트(bit)를 사용한다. 따라서, 모든 명령은 민감성(sensitive) 혹은 비-민감성(non-sensitive)으로서 독립적으로 지정될 수 있다. 소프트웨어는 명령의 어느 한 버전(version)을 발행할 수 있다. 더 높은 레벨 소프트웨어가 이처럼 더 낮은 특권 실행 프로세스의 민감성 명령이 인식되었는지를 표시하게 되는 별개의 시스템 제어 레지스터가 존재할 수 있다. 예를 들어, 만약 시스템 제어 레지스터 비트가 설정(set)되어 있지 않다면, 하드웨어는 명령을 민감성으로서 인식하지 않을 수 있고, 그리고 명령의 실행을 보호하기 위해 실행시 제약을 호출하지 않게 된다. 예를 들어, 만약 시스템 제어 레지스터 비트가 설정되어 있다면, 하드웨어는 명령을 민감성 명령으로서 실행할 수 있는데, 이것은 민감성 명령을 포함하는 프로세스의 보안을 증진시키는 역할을 하는 제약 하에서 행해진다.
제 2 메커니즘은 명령들의 서브시퀀스(subsequence)(예컨대, 명령들의 영역)를 민감성으로서 지정할 수 있다. 더 낮은 레벨 소프트웨어는 시스템 제어 비트를 설정하기 위해 업콜(upcall)을 행할 수 있는데, 이것은 이제 모든 후속 명령들이 민감성이라고 표시하게 된다. 만약 더 높은 레벨 소프트웨어가 비트가 설정될 수 있게 한다면, 하드웨어는 적절한 액션(action)들을 취할 것이다. 후속적으로, 더 낮은 레벨 소프트웨어가 비트를 설정해제(unset)하기 위해 또 하나의 다른 업콜을 행할 수 있다.
본 명세서에서 설명되는 시스템들 및 기법들은 종래의 시스템들 및 기법들을 넘어서는 장점들을 제공할 수 있는데, 예를 들어, (소프트웨어에 의해 구현되는) 정책들과 (하드웨어에 의해 구현되는) 프리미티브들 간의 명확한 분리를 제공하는 장점, 민감성 명령들에 대한 소프트웨어 지정에 근거하여 하드웨어로 하여금 적절한 보호를 제공할 수 있게 하는 장점, 그리고/또는 적절한 보호 메커니즘(예컨대, 실행시 제약을 호출하는 것)을 행하도록 하기 위해 소프트웨어로 하여금 하드웨어에게 피드백(feedback)을 제공할 수 있게 하는 장점과 같은 장점들을 제공할 수 있다.
본 명세서에서 설명되는 것은 보안 멀티쓰레딩 실행을 위한 시스템들 및 방법들이다. 동시 멀티쓰레딩(Simultaneous MultiThreading, SMT) 프로세서들에 대한 사이드-채널 공격들이 최근에 발견되었다. 사이드-채널 공격은, 스파이가, 구현된 알고리즘 자체 내의 약점이 아니라 구현의 지식을 사용하여 피해자 엔티티에 대한 정보를 발견할 수 있는 공격이다. 예를 들어, 만약 스파이가 스파이 자체에 대한 타이밍 정보를 측정함으로써 컴퓨터 시스템 내의 희생자 프로세스 상에서 어떤 명령들이 실행되고 있는지를 발견할 수 있다면, 이것은 사이-채널 공격인 것으로 고려되게 된다.
SMT 프로세서들은 다수의 하드웨어 쓰레드들이 동일한 물리적 프로세서 코어 내에서 실행될 수 있는 멀티쓰레딩 프로세서들의 클래스이다. 예를 들어, 인텔(Intel) 제온(Xeon)은 SMT 프로세싱의 형태인 하이퍼쓰레딩(Hyperthreading)을 지원한다. SMT 쓰레드들의 동시 실행은, 다수의 쓰레드들로부터의 명령들이 파이프라인을 채울 수 있고, 그리고 실행 유닛들 내에서 동시에 실행될 수 있음을 시사한다. SMT 프로세싱의 장점은, 하나의 쓰레드에 의해 사용되지 않는 아이들 슬롯(idle slot)들이 다른 쓰레드들에 의해 채워질 수 있고 사용될 수 있다는 것이고, 그럼으로써 성능을 부스팅(boosting)시키게 된다.
하지만, 포트스매쉬로 지칭되는 사이드-채널 공격들의 새로운 클래스가 SMT 프로세서들에서 드러났다. 이러한 공격들에서, 스파이 프로세스는 자기 자신의 실행의 타이밍에 의해 희생자에 대한 정보를 발견한다. 예를 들어, 루프(loop) 내에서 두 개의 명령들, VICTIM0 및 VICTIM1 중 하나만을 실행하는 희생자 프로세스를 고려한다. 또한, VICTIM0이 (포트0(port0)으로 지칭되는) 실행 유닛 0 내에서만 실행될 수 있고, 그리고 VICTIM1이 (포트1(port1)로 지칭되는) 실행 유닛 1 내에서만 실행될 수 있다고 가정한다. 유사하게, 스파이가 명령들, SPY0 및 SPY1을 실행할 수 있다고 가정한다. 유사하게, SPY0이 포트0 내에서 실행되고, 그리고 SPY1이 포트1 내에서 실행된다. 간결함을 위해, 본 예에서는 희생자가 단지 VICTIM0만을 계속해서 실행하거나, 또는 VICTIM1만을 계속해서 실행한다고 가정한다.
문제는 두 개의 명령들 중 어떤 명령을 희생자 프로세스가 실행하고 있는지를 스파이가 알아낼 수 있는가?이다. 대답은 그렇다이다. 어떻게 그렇게 되는지는 다음과 같다. 가령, 희생자가 VICTIM0 또는 VICTIM1을 계속해서 실행하고 있다고 하자. 스파이는 먼저 SPY0을 계속해서 실행하고 이러한 명령들을 실행하기 위한 시간 t0을 측정한다. 그 다음에, 스파이는 동일한 수의 SPY1을 계속해서 실행하고 이러한 명령들을 실행하기 위한 시간 t1을 측정한다. 만약 t0 > t1이면, 이것은 희생자가 VICTIM0 명령들을 실행하고 있었음을 의미한다. 만약 t0 < t1이면, 희생자는 VICTIM1 명령들을 실행하고 있었다. 그 이유는 SPY0과 VICTIM0이 모두 포트0에서 실행되기 때문이다. 따라서, 만약 VICTIM0이 실행되고 있었다면, 포트1로 가는 SPY1보다 SPY0의 실행이 더 오래 걸릴 것이다.
앞서의 내용은 문헌(Aldaya, A. C., Brumley, B. B., ul Hassan, S., Garcia, C. P., & Tuveri, N. (2018) Port Contention for Fun and Profit, IACR Cryptology ePrint Archive, 2018, 1060)에 설명된 더 복잡한 기법의 더 간단한 버전인데, 하지만 원리들은 동일하다. 스파이는 희생자와 동일한 포트에 대해 경쟁할 수 있는 자신의 명령들을 실행하는데 얼마나 오래 걸리는지를 측정하고, 희생자가 어떤 알고리즘을 실행하고 있을 수 있는지를 발견한다. 상기 문헌은 이러한 메커니즘을 사용하여 P-384 타원형 곡선 암호화(elliptical curve cryptography)를 깨는 방법을 보여준다.
포트스매쉬 공격을 막기 위한 한 가지 접근법은 SMT 프로세싱을 완전히 비활성화하는 것이다. 즉, 물리적 코어 내에서 한 번에 하나의 쓰레드만이 실행될 수 있게 하는 것이다. 이러한 접근법은 프로세서의 전체 능력들을 사용하지 않기 때문에 높은 성능을 달성하지 못한다.
포트스매쉬 공격을 막기 위한 또 하나의 다른 접근법은 파이프라인 리소스(pipeline resource)들의 시간적 파티셔닝(temporal partitioning) 혹은 공간적 파티셔닝(spatial partitioning)을 이용하는 것이다. 시간적 파티셔닝에서, 프로세서 파이프라인은 한 번에 하나의 쓰레드에 의해서만 사용될 수 있다. 따라서, 희생자 프로세스와의 포트 경쟁(port contention) 때문에 스파이 프로세스가 얼마나 많이 지연되게 되는지를 측정하기 위해 스파이 프로세스는 포트 경쟁을 사용할 수 없다. 공간적 파티셔닝에서, 프로세서 파이프라인 내에서 실행 유닛 및 가능하게는 다른 리소스들은 쓰레드들 간에 하드-파티셔닝(hard-partitioning)되고, 이에 따라 두 개의 쓰레드들로부터의 명령들은 동일한 포트 상에서 실행되지 않게 된다. 시간적 파티셔닝은 제 1 쓰레드가 실행될 때 제 2 쓰레드로부터의 명령들이 파이프라인에 진입하는 것을 허용하지 않기 때문에 성능에 있어 차선책(sub-optimal)이다. 공간적 파티셔닝은, 많은 경우들에서 단지 하나의 포트만이 특정 종류의 실행 리소스를 지원할 수 있기 때문에 설계하기 어려울 수 있다. 공간적 파티셔닝은 동일한 실행 리소스에 대해 쓰레드들이 존재하는 것만큼 많은 포트들을 요구한다.
본 개시내용은 멀티쓰레딩 프로세서들(예컨대, SMT 프로세서들)에 대한 이러한 사이드-채널 공격들을 막기 위한 기법들을 논의한다.
리소스들을 파티셔닝하기 위해 쓰레드-레벨 입도(thread-level granularity)를 사용하는 대신에, 본 개시내용은 멀티쓰레딩 파이프라인(multithread pipeline)(예컨대, SMT 파이프라인) 내에서 리소스들을 파티셔닝하기 위해 명령-레벨 입도(instruction-level granularity)를 사용한다. 하이-레벨에서, 이러한 기법들은, 1.) 명령(잠재적으로는 희생자 프로세스 내의 명령)이 "민감성"임을 인식하는 것을 포함할 수 잇다. 민감성 명령은 비밀(secret)들을 노출시킬 수 있는 명령일 수 있다. 민감성 명령들의 예들은, 고급 암호화 표준(Advanced Encryption standard, AES) 단일 라운드 복호화(single round decryption) 또는 AES 단일 라운드 암호화(single round encryption), 등을 포함할 수 있다.
2.) 만약 민감성 명령이 일 싸이클 내에서 실행된다면, 이것은 민감성 명령을 실행하는 동일한 쓰레드로부터의 명령들만이 실행 유닛들 내에서 실행될 수 있게 한다. 따라서, 앞서의 예에서, VICTIM0 또는 VICTIM1이 실행될 때, SPY0 또는 SPY1은 실행되는데 동등한 시간을 소요할 것이다((t0 ~= t1).
보통의 경우, 프로세서 파이프라인의 발행 및 디스패치 로직(issue and dispatch logic)은 명령이 실행 유닛 내의 포트에 발행될 수 있는지를 결정할 것이다. 이러한 결정은 구조적 해저드들, 제약들, 및 RAW(Read-After-Write; 기입-후-판독) 종속성(dependence)들을 해결(resolving)하는 것을 포함할 수 있다. 일부 구현예들에서, 발행 로직은 추가적으로 이제 새로운 "쓰레드 해저드(thread hazard)"를 해결할 것이다. 이것은, 만약 민감성 명령이 하나의 쓰레드로부터 실행되도록 선택되었다면, 다른 쓰레드로부터의 명령들은 민감성 명령이 실행되고 있는 하나 이상의 싸이클들 동안 동시에 실행될 수 없음을 규정한 새로운 규칙(rule)이다.
일부 구현예들은 이전의 시스템들을 넘어서는 장점들을 제공할 수 있는데, 예컨대, 평균 명령 처리량 측면에서 높은 성능을 유지하면서 사이드 채널 공격들(예를 들어, 포트스매쉬 공격들)을 막을 수 있는 장점과 같은 것을 제공할 수 있다.
보안 멀티쓰레딩 실행을 위한 기법들의 더 세부적 사항들은 도 1 내지 도 3에서 보여지는 바와 같이 이들이 구현될 수 있는 시스템을 초기에 참조하여 본 명세서에서 설명된다.
도 1은 컴퓨팅 시스템(100)의 예의 하이-레벨 블록도이다. 컴퓨팅 시스템(100)은 적어도 하나의 프로세서 코어(102)를 갖는 집적 회로(101)를 포함하는데, 여기서 적어도 하나의 프로세서 코어(102)는 단일의 중앙 프로세싱 유닛(Central Processing Unit, CPU)일 수 있거나, 또는 멀티-코어 아키텍처(multi-core architecture)에서의 다수의 프로세서 코어들 중 하나일 수 있다. 멀티-코어 아키텍처에서, 각각의 프로세서 코어(혹은 간단히 "코어(core)")는 관련된 회로를 갖는 개개의 CPU를 포함할 수 있다. 멀티-코어 아키텍처에서의 이러한 예에서, 각각의 프로세서 코어(102)는 프로세서 파이프라인(processor pipeline)(104), 하나 이상의 레지스터 파일(register file)들(106), 그리고 프로세서 메모리 시스템(processor memory system)(108)을 포함할 수 있다. 레지스터 파일들(106)의 각각의 레지스터 파일은 하나 이상의 개별적으로 어드레싱가능한(addressable) 레지스터들을 포함할 수 있다.
각각의 프로세서 코어(102)는 언코어(uncore)(110)에 연결될 수 있다. 언코어(110)는 상호연결 네트워크(interconnection network)(112) 및 외부 메모리 시스템(external memory system)(113)을 포함할 수 있다. 상호연결 네트워크(112)는 버스(bus), 크로스-바 스위치(cross-bar switch), 메쉬 네트워크(mesh network), 또는 어떤 다른 상호연결 네트워크일 수 있다. 상호연결 네트워크(112)는 각각의 프로세서 코어(102)와 외부 메모리 시스템(113)과 그리고/또는 입력/출력(Input/Output)(I/O) 브리지(bridge)(114) 간의 통신을 활성화할 수 있다.
I/O 브리지(114)는 예를 들어, I/O 버스(116)를 통해 저장 디바이스(118A) 및 다른 I/O 디바이스들(118B-118D)을 포함하는 다양한 서로 다른 I/O 디바이스들과의 통신을 활성화할 수 있다. 다른 I/O 디바이스들(118B-118D)의 비-한정적인 예들은 네트워크 인터페이스(network interface), 디스플레이 어댑터(display adapter), 또는 사용자 입력 디바이스들, 예컨대, 키보드 혹은 마우스와 같은 것을 포함할 수 있다.
저장 디바이스(118A)는 디스크 드라이브(disk drive)일 수 있거나, 또는 어떤 다른 대용량 저장 디바이스일 수 있다. 저장 디바이스(118A)는 전형적으로 비-휘발성 저장 디바이스(non-volatile storage device)일 수 있다. 일부 예들에서, 저장 디바이스(118A), 또는 그 일부는 가상 메모리 방식(virtual memory scheme)에서 사용될 수 있다. 예를 들어, 저장 디바이스(118A)의 일부는 메인 메모리(main memory)(전형적으로는 휘발성 및/또는 제한된-용량의 메인 메모리)에 대해 가상 메모리 방식에서 2차 저장소(또는 "보조 저장소(backing store)")로서의 역할을 할 수 있다. 메인 메모리의 예들은, 프로세서 메모리 시스템(108)를 포함하고 또는 예컨대, 외부 메모리 시스템(113)과 관련하여 아래에서 설명되는 외부 메모리 시스템을 포함한다.
프로세서 메모리 시스템(108)과 외부 메모리 시스템(113)은 함께 계층적 메모리 시스템(hierarchical memory system)을 형성한다. 계층(hierarchy)은 임의 개수의 레벨들을 포함할 수 있다. 이러한 레벨들은 L1, L2, ..., LN으로서 표시될 수 있거나 또는 지칭될 수 있다. L1 레벨은 L2 메모리 시스템보다 더 낮은 레벨 메모리이고, L2 메모리 시스템은 또한 L3 메모리 시스템보다 더 낮은 레벨이고, 기타 등등이다. 전형적으로, 계층적 메모리 시스템의 각각의 레벨은 바로 아래의 더 낮은 레벨보다 액세스(access)하기에 더 느린 메모리(예컨대, 메모리 시스템)를 포함할 수 있고, 그리고/또는 계층적 메모리 시스템의 각각의 레벨은 더 높은 레벨보다 액세스하기에 더 빠르고, 용량에 있어 더 한정되어 있고, 그리고/또는 더 비싼 메모리(예컨대, 메모리 시스템)를 포함할 수 있다. 계층적 메모리 시스템의 각각의 레벨은 캐시로서의 역할을 할 수 있다.
제 1 레벨(L1) 캐시는 프로세서 메모리 시스템(108) 내에 있을 수 있다(예컨대, 프로세서 메모리 시스템(108)의 일부일 수 있음). 임의 개수의 더 높은 레벨(L2, L3, ...) 캐시들이 외부 메모리 시스템(113) 내에 있을 수 있다. 외부 메모리 시스템(113) 내에서의 가장 높은(즉, 마지막) 레벨 캐시는 마지막 레벨 캐시(Last Level Cache, LLC)로서 지칭될 수 있다. 일 예에서, LLC는 L2 캐시일 수 있다.
각각의 레벨에서, 캐시는, 명령들을 캐싱(caching)하기 위한 명령 캐시를 제공하는 제 1 모듈(module)과, 그리고 데이터를 캐싱하기 위한 데이터 캐시를 제공하는 제 2 모듈을 포함할 수 있다. 계층적 메모리 시스템의 일 레벨의 메모리 시스템은, 명령들 혹은 데이터의 블록(block)들을 엔트리(entry)들 안으로 로딩(loading)할 수 있고, 그리고 명령들 혹은 데이터의 블록들을 엔트리들로부터 퇴거(evict)시킬 수 있는데(예를 들어, 제거할 수 있음, 오버-라이트(over-write)할 수 있음, 등), 이것은 캐시 블록(cache block)들(이것은 또한 캐시 라인(cache line)들로 지칭됨)의 단위들로 행해진다. 캐시 라인들은 도 3과 관련하여 더 설명된다.
L1 명령 캐시 및 데이터 캐시에 추가하여, 프로세서 메모리 시스템(108)은 최근 변환(translation)들을 캐싱하기 위한 변환 색인 버퍼(Translation Lookaside Buffer, TLB)를 포함할 수 있고, 그리고 L1 명령 혹은 데이터 캐시들 내에서의 미스(miss) 또는 TLB 내에서의 미스를 핸들링하기 위한 다양한 다른 회로를 포함할 수 있다. 예를 들어, 프로세서 코어(102)의 프로세서 메모리 시스템(108) 내의 회로는 프로세서 파이프라인(104) 내에서 실행되고 있는 저장 명령(store instruction)으로부터 기입(write)될 값들을 일시적으로 홀딩(holding)하기 위한 기입 버퍼(write buffer)를 포함할 수 있다. TLB는 도 3과 관련하여 더 설명된다.
이미 언급된 바와 같이, 외부 메모리 시스템(113) 내의 가장 높은 레벨 캐시는 LLC(예컨대, LLC(120))이다. LLC(120)는 메인 메모리 직전에 액세스될 수 있다(예컨대, 검색될 수 있음, 등). 당연한 것으로, 이것은 단지 예이다. 어떤 레벨 캐시들이 프로세서 메모리 시스템(108) 내에 있고 어떤 것들은 외부 메모리 시스템(113) 내에 있는지 간의 정확한 분할은 다른 예들에서 다를 수 있다. 예를 들어, L1 캐시 및 L2 캐시는 모두 프로세서 코어(102) 내부에 있을 수 있고(즉, 프로세서 메모리 시스템(108)의 일부일 수 있음), 그리고 L3(및 더 높은 레벨) 캐시들은 프로세서 코어(102) 외부에 있을 수 있다.
일 예에서, 각각의 프로세서 코어(102)는 자기 자신의 내부 L1 캐시를 가질 수 있고, 그리고 프로세스 코어들은 L2 캐시를 공유할 수 있다. 외부 메모리 시스템(113)은 또한 메인 메모리 제어기(122)를 포함할 수 있다. 메인 메모리 제어기(122)는 임의 개수의 메모리 모듈(memory module)들(124)에 연결될 수 있다. 메모리 모듈들(124) 각각은 메인 메모리로서의 역할을 할 수 있다(예를 들어, 메인 메모리일 수 있음). 비-한정적 예에서, 메모리 모듈들(124) 중 하나 이상은 동적 랜덤 액세스 메모리(Dynamic Random Access Memory, DRAM) 모듈들일 수 있다.
전형적인 예에서, 메모리 어드레스(memory address)의 내용(content)은 계층적 메모리 시스템의 레벨(예컨대, L1) 내에서 검색된다. 만약 발견되지 않는다면, 다음 더 높은 레벨(예컨대, L2)이 검색되는 등등이다. 메모리 어드레스를 검색하는 것은 질문: 계층적 메모리 시스템의 이러한 메모리 레벨이 메모리 어드레스의 내용을 포함하고 있는가?에 대답하는 것에 이르게 된다. 또는, 대안적으로, 계층적 메모리 시스템의 이러한 메모리 내에 메모리 어드레스가 캐싱되어 있는가?에 대답하는 것에 이르게 된다.
즉, 계층적 메모리 시스템의 계층의 특정 캐시 레벨에서, 각각의 캐시 엔트리(cache entry)는, 메모리 블록(memory block)으로부터의 특정 워드(word)가 해당 캐시 레벨 내에 존재하는지(즉, '히트(hit)') 또는 해당 캐시 레벨 내에 존재하지 않는지(즉, '미스(miss)')를 결정하기 위한 비트들과 함께, 특정 메모리 블록의 데이터 워드(data word)들을 저장하기 위한 공간을 포함한다. 하나의 레벨에서의 미스 이후, 캐시 시스템은 더 높은 레벨 캐시로부터, 또는 (LLC에서의 미스인 경우) 메인 메모리로부터 메모리 블록에 액세스하려고 시도한다(즉, 판독 혹은 기입을 행하려고 시도함).
프로세서 파이프라인(104)은 다수의 스테이지들을 포함할 수 있고, 이러한 스테이지들을 통해 명령들이 한 번에 한 싸이클 씩 진행한다. 스테이지들은, 명령 페치(Instruction Fetch, IF) 스테이지 혹은 스테이지들, 명령 디코딩(Instruction Decode, ID) 스테이지 혹은 스테이지들, 오퍼랜드 페치(Operand Fetch, OF) 스테이지 혹은 스테이지들, 명령 실행(Instruction Execution, IE) 스테이지 혹은 스테이지들, 그리고/또는 라이트 백(Write Back, WB) 스테이지 혹은 스테이지들을 포함할 수 있다. 파이프라인은 도 2a 및 도 2b와 관련하여 더 설명되는 바와 같이 다른 스테이지들을 포함할 수 있다. 프로세서 파이프라인(104)은 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성될 수 있다. 예를 들어, 코어(102)는 동시 멀티쓰레딩(SMT) 프로세서일 수 있다. 코어(102)는 파이프라인의 프런트-엔드 부분(front-end portion)에서 일어나는 어떤 스테이지들을 포함할 수 있다. 어떤 다른 스테이지들은 파이프라인의 백-엔드 부분(back-end portion)에서 일어난다. 프런트-엔드 부분은 실행-전 스테이지(pre-execution stage)들을 포함할 수 있다. 파이프라인의 백-엔드 부분은 실행 및 실행-후 스테이지(post-execution stage)들을 포함할 수 있다. 예를 들어, 프로세서 파이프라인(104)은 도 2a의 프로세서 파이프라인(220)일 수 있다. 예를 들어, 프로세서 파이프라인(104)은 도 2b의 프로세서 파이프라인(222)일 수 있다.
집적 회로(101)는 쓰레드 해저드 회로를 포함할 수 있고, 여기서 쓰레드 해저드 회로는, 제 1 쓰레드의 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 그리고 민감성 명령의 검출에 응답하여, 민감성 명령이 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 제 1 쓰레드와는 다른 쓰레드들의 명령들이 프로세서 파이프라인의 실행 유닛들을 사용하여 실행되는 것을 차단하는 것을 수행하도록 구성된다. 예를 들어, 쓰레드 해저드 회로는 프로세서 파이프라인(104)의 일부일 수 있거나 또는 프로세서 파이프라인(104)과 인터페이싱할 수 있다. 일부 구현예들에서, 쓰레드 해저드 회로는 다수의 혹은 대부분의 명령들의 실행들 동안 SMT 프로세서의 성능 장점들을 유지하면서 특정 사이드 채널 공격들(예컨대, 포트스매쉬 공격)을 막는 역할을 할 수 있다.
먼저, 명령이 (예를 들어, IF 스테이지 혹은 스테이지들에서) 페치된다. 명령은 프로그램 카운터(Program Counter, PC)에 근거하여 페치될 수 있다. PC는 메모리 내에서(예를 들어, 메인 메모리의 일부 내에서, 또는 코어((102)의 명령 캐시 내에서) 명령들을 식별하기 위해 사용될 수 있는 포인터(pointer)이다. PC는 ("기본 블록(basic block)"으로 지칭되는) 컴파일링된 명령(compiled instruction)들의 블록의 어드레스들을 통해 진행할 수 있다. PC는 특정 개수의 바이트(byte)들만큼 증분(increment)될 수 있다. PC를 증분시키기 위한 특정 개수의 바이트들은, 각각의 명령이 (예컨대, 바이트들에 있어서) 얼마나 긴가, 그리고 명령들이 한 번에 얼마나 많이 페치되는가에 따라 달라질 수 있다.
페치된 이후, 그 다음에 명령은 (예를 들어, ID 스테이지 혹은 스테이지들에서) 동작(operation) 및 하나 이상의 오퍼랜드(operand)들을 결정하기 위해 디코딩된다. 대안적으로, 일부 파이프라인들에서, IF 및 ID 스테이지들은 중첩(overlap)될 수 있다. 만약 명령이 오퍼랜드들을 포함한다면, 오퍼랜드들이 (예를 들어, OF 스테이지 혹은 스테이지들에서) 페치된다.
그 다음에 명령은 발행될 준비가 된다. 명령을 발행하는 것은 명령을 실행하기 위해 파이프라인의 백-엔드 부분에서 스테이지들을 통해 명령의 진행을 개시시킨다. 일 예에서, 명령의 실행은, 산술 로직 유닛(Arithmetic Logic Unit, ALU) 명령에 대한 결과를 생성하기 위해 명령의 동작을 오퍼랜드(들)에 적용하는 것을 포함할 수 있다. 일 예에서, 명령의 실행은, 메모리 명령에 대한 메모리 어드레스에 저장을 행하는 것 또는 메모리 명령에 대한 메모리 어드레스로부터 로딩을 행하는 것을 포함할 수 있다. 일 예에서, 명령의 실행은, 분기(branch)가 행해져야 하는지 여부를 결정하기 위해 조건부 분기 명령(conditional branch instruction)의 조건을 평가하는 것을 포함할 수 있다.
명령이 실행을 완료한 이후, 명령은 커밋될 수 있고(즉, 퇴각(retire)될 수 있고), 이에 따라 명령의 임의의 효과가 소프트웨어에 전체적으로 가시적이게 된다. 예를 들어, 명령을 커밋하는 것은 (예컨대, WB 스테이지 혹은 스테이지들에서) 결과를 레지스터 파일 내에 저장하는 것을 포함할 수 있다. 대부분의 구현예들에서, 비록 임의의 명령들이 비순차적으로 발행되었지만, 모든 명령들은 일반적으로 순차적으로 커밋된다.
도 2a는 프로세서 파이프라인(220)의 구성의 예이다. 프로세서 파이프라인(220)은 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성될 수 있다.
프로세서 파이프라인(220)은 다양한 스테이지들(예컨대, IF, ID, 및 OF 스테이지들)을 위한 회로를 포함할 수 있다. 하나 이상의 명령 페치 스테이지들 동안, 명령 페치 회로(200)는 프로세서 파이프라인(220)에 공급될(예컨대, 제공될, 기타 등등) 명령들을 페치하기 위해(예컨대, 검색하기 위해, 판독하기 위해, 기타 등등) 도 1의 프로세서 메모리 시스템(108)과 같은 프로세서 메모리 시스템 내의 명령 캐시에 PC를 제공한다. 예를 들어, PC는 다음 명령(next instruction)의 가상 어드레스(virtual address)일 수 있고, 이러한 경우에 PC는 순차적 실행의 경우(즉, 임의의 분기들을 행함이 없는 경우) 가상 어드레스의 길이만큼 증분될 수 있다. 가상 어드레스들은 도 3과 관련하여 설명된다.
명령 페치 회로(200)는 또한 프로그램 카운터(PC)를 분기 예측 회로(branch prediction circuitry)(201)에 제공할 수 있다. 분기 예측 회로(201)는 분기 명령들에 대한 예측된 분기 결과(203)를 제공하기 위해 사용될 수 있다. 예측된 분기 결과(203)는 실제 분기 결과(204)가 결정되고 있는 동안 프로세서 파이프라인(220)으로 하여금 추론적으로(speculatively) 실행을 계속할 수 있게 한다. 분기 예측 회로(201)는 또한 실제 분기 결과(204)를 수신하는 것에 근거하여 업데이트되는 분기 이력 정보(branch history information)를 저장할 수 있다. 일부 구현예들에서, 분기 예측 회로(201)의 일부 혹은 모두는 명령 페치 회로(200)의 일부인 것으로 고려될 수 있다.
비순차적 실행의 예에서, 하나 이상의 명령 디코딩(ID) 스테이지들 동안, 명령 디코딩 회로(202)는 발행되기를 기다리는 명령 윈도우 내의 명령들에 대한 정보를 발행 큐(issue queue) 내에 저장할 수 있다. 발행 큐(이것은 또한 명령 큐(instruction queue)로서 지칭될 수 있음)는, 명령의 오퍼랜드들이 이용가능하게 될 때 큐 내의 명령이 큐를 이탈(leave)할 수 있도록 한다. 이처럼, 프로그램 내의 더 이른 명령들(예를 들어, 더 오래된 명령들)이 실행되기 전에 명령은 이탈할 수 있다. 명령 윈도우는 비순차적으로 실행될 수 있는 명령들의 세트를 지칭한다.
발행 회로(issue circuitry)(206)는 발행 큐 내의 명령들 각각이 발행될 각각의 싸이클을 결정할 수 있다. 명령을 발행하는 것은, 명령이 프로세서 파이프라인(220)의 제 1 실행 스테이지(208A), 제 2 실행 스테이지(208B), 및 제 3 실행 스테이지(208C)와 같은, 명령 실행(IE) 스테이지들의 회로를 통해 진행하기 위해 이용가능하게 한다. 설명의 간결함을 위해, 단지 세 개의 실행 스테이지들만이 도 2a에서 예시된다. 하지만, 본 명세서에서의 개시내용은 이렇게만 한정되지 않으며, 더 많거나 더 적은 수의 실행 스테이지들이 가능하다.
집적 회로(101)는 쓰레드 해저드 회로(230)를 포함한다. 이러한 예에서, 쓰레드 해저드 회로(230)는 프로세서 파이프라인(220)의 발행 회로(206)의 일부이다. 쓰레드 해저드 회로(230)는, 제 1 쓰레드의 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 그리고 민감성 명령의 검출에 응답하여, 민감성 명령이 프로세서 파이프라인(220)의 실행 유닛에 의해 실행되고 있는 동안, 제 1 쓰레드와는 다른 쓰레드들의 명령들이 프로세서 파이프라인(220)의 실행 유닛들을 사용하여 실행되는 것을 차단하는 것을 수행하도록 구성될 수 있다.
일부 구현예들에서, 민감성 명령들은 정적으로 지정될 수 있다(예를 들어, 특정 타입의 명령은 항상 민감성으로 고려됨). 예를 들어, 쓰레드 해저드 회로(230)는 명령의 오피코드(opcode)에 근거하여 민감성 명령을 검출하도록 구성될 수 있다. 일부 구현예들에서, 민감성 명령들은 동적으로 지정될 수 있다(예를 들어, 플래그(flag)를 사용하여 소프트웨어에 의해 명령이 민감성으로서 마킹될 수 있음). 예를 들어, 쓰레드 해저드 회로(230)는 명령 내의 포함된 플래그(예컨대, 민감성 비트)에 근거하여 민감성 명령을 검출하도록 구성될 수 있다. 예를 들어, 쓰레드 해저드 회로(230)는 아키텍처 레지스터(architectural register) 내의 플래그에 근거하여 민감성 명령을 검출하도록 존재할 수 있다.
실행되는 애플리케이션(application)들에 따라 다양한 서로 다른 명령들이 민감성으로서 고려될 수 있다. 예를 들어, 민감성 명령은 암호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 복호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 암호화 명령일 수 있다.
프로세서 파이프라인(220)은 커밋 스테이지(210)와 같은 하나 이상의 커밋 스테이지들을 포함할 수 있다. 커밋 스테이지는 IE 스테이지들(208A, 208B, 및 208C)을 통과한 명령들의 결과들을 커밋한다(예를 들어, 메모리에 기입함). 예를 들어, 커밋 스테이지 회로(217)는 도 1의 레지스터 파일과 같은 레지스터 파일에 결과를 기입(write back)할 수 있다. 하지만, 일부 명령들은 커밋 스테이지 회로(217)에 의해 커밋되지 않을 수 있다. 대신, 명령들의 결과들은, 가능하게는 커밋 스테이지로부터의 정보에 근거하여, 프런트-엔드의 스테이지 또는 백-엔드의 또 하나의 다른 스테이지 내의 회로와 같은 다른 회로에 의해 커밋될 수 있다.
프로세서 파이프라인(220)의 인접하는 스테이지들 사이에서, 파이프라인 회로를 통과하는 다양한 경로(path)들은 파이프라인 레지스터들을 포함한다. 예를 들어, 도 2a에서는 IE 스테이지들(208A, 208B, 및 208C)에 대한 파이프라인 레지스터들(211)이 보여진다. 파이프라인 레지스터들은 다음 스테이지로의 다운스트림(downstream)에서 전달될 업스트림 스테이지(upstream stage)의 결과들을 저장하기 위해 사용될 수 있다. 파이프라인 레지스터들(211)은 공통 클록(common clock)(미도시)에 의해 클록킹(clocking)될 수 있다(즉, 공통 클록으로부터 나온 클록 신호(clock signal)를 수신할 수 있음). 따라서, 각각의 클록 싸이클에서, 각각의 파이프라인 레지스터(211)(이것은 또한 래치(latch) 또는 플립-플롭(flip-flop)들의 세트로 지칭됨)는 결과를 자신의 입력으로부터의 자신의 출력으로 전달할 수 있고, 그리고 해당 스테이지의 회로에 의해 결과가 생성된 후에 자신의 입력에서 새로운 결과를 수신할 준비가 되게 된다.
IE 스테이지들을 통과하는 다수의 개별 경로들이 존재할 수 있다. IE 스테이지들은 명령들의 상이한 타입들을 실행하기 위한 다양한 회로를 포함할 수 있다. 예시적 목적들을 위해, 단지 두 개의 경로들(212A 및 212B)만이 도 2a에서 보여진다. 하지만, 실행 스테이지들은, 파이프라인 레지스터들(211)과 같은 파이프라인 레지스터들에 의해 분리될 수 있는, 대응하는 회로를 갖는 임의 개수의 경로들을 포함할 수 있다.
명령 실행 스테이지들을 통과하는 경로들의 개수는 일반적으로 특정 아키텍처에 따라 달라질 수 있다. 일 예에서, 동일한 싸이클들에서 동일한 실행 스테이지들을 통해 진행할 수 있는 명령들의 최대 개수에 이르는 명령들의 개수가 되도록 충분한 경로들이 포함될 수 있다. 동일한 싸이클들에서 동일한 실행 스테이지들을 통해 진행할 수 있는 명령들의 최대 개수는 발행 폭으로서 지칭될 수 있다.
주어진 경로에 대해 기능 회로(functional circuitry)를 포함하는 스테이지들의 개수는 또한 달라질 수 있다. 도 2a의 예에서, 제 1 경로(212A)는, 제 1 실행 스테이지(208A), 제 2 실행 스테이지(208B), 및 제 3 실행 스테이지(208C) 내에 각각 위치하는 기능 회로(214A), 기능 회로(214B), 및 기능 회로(214C)를 포함한다. 제 2 경로(212B)는, 제 1 실행 스테이지(208A) 및 제 2 실행 스테이지(208B) 내에 각각 위치하는 기능 회로(216A) 및 기능 회로(216B)를 포함한다. 제 2 경로(212B)에서, 제 3 실행 스테이지(208C)는 추가 계산(computation)을 수행함이 없이 결과를 넘겨주는, 그럼으로써 각각의 경로가 파이프라인을 통해 동일한 개수의 스테이지들을 통과하게 보장하는, "사일로 스테이지(silo stage)"이다.
일 예에서, 경로는 다양한 동작들을 위한 유닛들(예컨대, ALU, 곱셈기(multiplier), 부동 소수점 유닛(floating point unit), 등)을 사용하여 명령들을 실행하기 위한 회로를 포함할 수 있다. 일 예에서, 또 하나의 다른 경로는 메모리 액세스 명령들을 실행하기 위한 회로를 포함할 수 있다. 메모리 액세스 명령들은 메모리 시스템으로부터 데이터 값들을 판독하는 로딩 명령(load instruction)들을 포함할 수 있다. 메모리 액세스 명령들은 메모리 시스템에 데이터 값들을 기입하기 위한 저장 명령(store instruction)들을 포함할 수 있다. 메모리 액세스 명령들을 실행하기 위한 회로는 또한, 도 3과 관련하여 아래에서 더 상세히 설명되는 바와 같이, 필요할 때 가상 어드레스들을 물리적 어드레스들로 변환하는 것을 개시할 수 있다.
분기 예측에 추가하여, 분기 예측 회로(201)와 관련하여 설명된 바와 같이, 프로세서 파이프라인(220)은 추론적 실행(speculative execution)의 다른 타입들을 수행하도록 구성될 수 있다. 추론적 실행의 또 하나의 다른 타입의 예에서, 프로세서 파이프라인(220)은 프리페치(prefetching)에 의해 (예컨대, 캐시 미스의 경우에) 스톨링(stalling)의 가능성(chance)을 감소시키도록 구성될 수 있다. 스톨링은 명령들의 프로세서 실행이 중단(stop)/중지(pause)되는 상황을 지칭한다.
프리페치 요청(prefetch request)은, 장래 메모리 요청이 더 높은 캐시 레벨 혹은 메인 메모리에 액세스해야만 하는 것 대신에 해당 캐시 레벨에서 히트를 일으킬 가능성이 높도록 (예컨대, 데이터 캐시의) 캐시 레벨을 프리로딩(preload)하기 위해 사용될 수 있다. 예를 들어, 추론적 메모리 액세스 요청은 예측된 액세스 패턴에 근거하여 명령 캐시 혹은 데이터 캐시를 프리로딩하기 위해 전송되는 프리페치 요청들을 포함할 수 있다.
프리페치 요청은, 프로세서 파이프라인(220)에 삽입되는 명시적 프리페치 명령이 프리페치될 특정 어드레스를 포함하도록 소프트웨어 프리페치 요청일 수 있거나 또는 소프트웨어 프리페치 요청을 포함할 수 있다. 프리페치 요청은, 명시적 프리페치 명령이 파이프라인(예컨대, 프로세서 파이프라인(220))에 삽입됨이 없이 프로세서(예컨대, 프로세서 코어(102)) 내에서 하드웨어에 의해 수행되는 하드웨어 프리페치일 수 있거나 또는 그러한 하드웨어 프리페치를 포함할 수 있다.
일부 경우들에서, 프리페치는, 프로그램의 메모리 액세스들 내에서 패턴(예컨대, 스트림)을 인식하는 것을 포함할 수 있고, 또는 로딩 명령이 실제로 프로그램 실행의 일부로서 발행되기 전에 (예를 들어, 해당 로딩 명령에 대한 추론적 어드레스를 사용하여) 프로그램 내에서 로딩 명령을 추론적으로 수행하는 것을 포함할 수 있다.
외부 명령들의 다양한 타입들이 다른 프로세서 코어들로부터 수신될 수 있다. 이러한 외부에서 수신된 명령들은 적절한 스테이지에서 핸들링되도록 발행 회로(206)에 의해 프로세서 파이프라인(220)에 삽입될 수 있다. 이러한 외부에서 수신된 명령의 예는, 해당하는 특정 프로세서 코어(즉, 수신측 코어(receiving core))의 TLB 내의 엔트리들을 무효화(invalidating)하기 위한 TLB 무효화(TLB Invalidation, TLBI) 명령이다. 수신될 수 있는 외부 명령의 또 하나의 다른 예는 글로벌동기화(GlobalSync) 명령인데, 이것은 임의의 이전에 브로드캐스팅(broadcasting)된 TLBI들의 효과들이 완료되었음을 보장하기 위해 프로세서 코어에 의해 수행되는 메모리 배리어 동작(memory barrier operation)의 부수적 효과(side effect)로서 프로세서 코어들에게 브로드캐스팅될 수 있다. 달리 말하면, 브로드캐스팅 TLBI 명령(broadcast TLBI instruction)을 발행하는 발신측 프로세서 코어(originating processor core)는 후속적으로 데이터 동기화 배리어(Data Synchronization Barrier, DSB) 명령을 발행할 수 있고, 이것은 결국 글로벌동기화 명령들이 다른 모든 프로세서 코어에 의해 수신되도록 한다. 글로벌동기화 명령에 응답하여, 수신측 프로세서 코어가 TLBI 명령을 완료한 경우, 수신측 프로세서 코어는 확인응답(acknowledgement)을 발신측 프로세서 코어에게 보내거나, 또는 확인응답이 발신측 프로세서 코어에게 보내지도록 한다. 발신측 프로세서 코어가 모든 수신측 프로세서 코어들로부터 확인응답들을 수신하면, 발신측 프로세서 코어는 명령 실행을 진행할 수 있다. 일부 경우들에서, 외부 명령은 실행되고 있는 프로그램에서 인터럽트(interrupt)를 유발시킬 수 있다.
도 2b는 프로세서 파이프라인(222)의 구성의 예이다. 프로세서 파이프라인(222)은 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성될 수 있다.
프로세서 파이프라인(222)은 다양한 스테이지들(예컨대, IF, ID, 및 OF 스테이지들)을 위한 회로를 포함할 수 있다. 하나 이상의 명령 페치 스테이지들 동안, 명령 페치 회로(200)는 프로세서 파이프라인(222)에 공급될(예컨대, 제공될, 기타 등등) 명령들을 페치하기 위해(예컨대, 검색하기 위해, 판독하기 위해, 기타 등등) 도 1의 프로세서 메모리 시스템(108)과 같은 프로세서 메모리 시스템 내의 명령 캐시에 PC를 제공한다. 예를 들어, PC는 다음 명령의 가상 어드레스일 수 있고, 이러한 경우에 PC는 순차적 실행의 경우(즉, 임의의 분기들을 행함이 없는 경우) 가상 어드레스의 길이만큼 증분될 수 있다. 가상 어드레스들은 도 3과 관련하여 설명된다.
명령 페치 회로(200)는 또한 프로그램 카운터(PC)를 분기 예측 회로(201)에 제공할 수 있다. 분기 예측 회로(201)는 분기 명령들에 대한 예측된 분기 결과(203)를 제공하기 위해 사용될 수 있다. 예측된 분기 결과(203)는 실제 분기 결과(204)가 결정되고 있는 동안 프로세서 파이프라인(222)으로 하여금 추론적으로 실행을 계속할 수 있게 한다. 분기 예측 회로(201)는 또한 실제 분기 결과(204)를 수신하는 것에 근거하여 업데이트되는 분기 이력 정보를 저장할 수 있다. 일부 구현예들에서, 분기 예측 회로(201)의 일부 혹은 모두는 명령 페치 회로(200)의 일부인 것으로 고려될 수 있다.
비순차적 실행의 예에서, 하나 이상의 명령 디코딩(ID) 스테이지들 동안, 명령 디코딩 회로(202)는 발행되기를 기다리는 명령 윈도우 내의 명령들에 대한 정보를 발행 큐 내에 저장할 수 있다. 발행 큐(이것은 또한 명령 큐로서 지칭될 수 있음)는, 명령의 오퍼랜드들이 이용가능하게 될 때 큐 내의 명령이 큐를 이탈할 수 있도록 한다. 이처럼, 프로그램 내의 더 이른 명령들(예를 들어, 더 오래된 명령들)이 실행되기 전에 명령은 이탈할 수 있다. 명령 윈도우는 비순차적으로 실행될 수 있는 명령들의 세트를 지칭한다.
발행 회로(240)는 발행 큐 내의 명령들 각각이 발행될 각각의 싸이클을 결정할 수 있다. 명령을 발행하는 것은, 명령이 프로세서 파이프라인(222)의 실행 스테이지(250)와 같은, 명령 실행(IE) 스테이지의 회로를 통해 진행하기 위해 이용가능하게 한다. 설명의 간결함을 위해, 단지 한 개의 실행 스테이지만이 도 2b에서 예시된다. 하지만, 본 명세서에서의 개시내용은 이렇게만 한정되지 않으며, 더 많거나 더 적은 수의 실행 스테이지들이 가능하다.
레지스터 판독 회로(register read circuitry)(242)는, 실행 스테이지(250)에서 명령을 실행하기 위한 입력 인수(input argument)들로서의 사용을 위해 (예를 들어, 하나 이상의 레지스터 파일들(106)로부터) 레지스터 값들이 이용가능하게 될 때 그 레지스터 값들을 판독하도록 구성될 수 있다.
디스패치 회로(dispatch circuitry)(244)는 실행을 위해 실행 스테이지(250)의 실행 유닛들(예컨대, 260, 262, 264, 266, 또는 268) 중 하나에 명령을 할당하도록 구성될 수 있다. 예를 들어, 디스패치 회로(244)는 실행 유닛의 이용가능성, 그리고 명령 타입과 실행 유닛의 타입 간의 매칭(match)에 근거하여 실행 유닛을 선택할 수 있다.
실행 스테이지(250)는 병렬로 실행될 수 있는 다수의 실행 유닛들(예컨대, 260, 262, 264, 266, 및 268)을 포함한다. 명령 타입에 따라, 명령은 실행 유닛들(예컨대, 260, 262, 264, 266, 및 268) 중 하나에서 실행되기 위해 하나 이상의 클록 싸이클들을 소요할 수 있다. 이러한 예에서, 실행 유닛(260)은 산술 로직 유닛(Arithmetic Logic Unit, ALU)이고, 실행 유닛(262)은 로딩-저장 유닛(Load-Store Unit, LSU)이고, 실행 유닛(264)은 부동-소수점 유닛(Floating-Point Unit, FPU)이고, 실행 유닛(266)은 암호화 실행 유닛(cryptographic execution unit)이고, 실행 유닛(268)은 또 하나의 다른 산술 로직 유닛(ALU)이다. 예를 들어, 주어진 클록 싸이클에서 실행 스테이지(250)의 상이한 실행 유닛들에서 두 개의 명령들을 실행시킴으로써, 프로세서 파이프라인(222)은 두 개의 명령들을 병렬로 실행할 수 있다.
레지스터 기입 회로(register write circuitry)(270)는, 실행 스테이지(250)에서 실행 유닛(예컨대, 260, 262, 264, 266, 또는 268)의 출력으로서 값들이 이용가능하게 될 때 (예를 들어, 하나 이상의 레지스터 파일들(106)로부터) 목적지 레지스터(destination register)들에 그 값들을 기입하도록 구성될 수 있다.
집적 회로(101)는 쓰레드 해저드 회로(280)를 포함한다. 이러한 예에서, 쓰레드 해저드 회로(280)는 프로세서 파이프라인(222)의 디스패치 회로(244)의 일부이다. 쓰레드 해저드 회로(280)는, 제 1 쓰레드의 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 그리고 민감성 명령의 검출에 응답하여, 민감성 명령이 프로세서 파이프라인(220)의 실행 유닛에 의해 실행되고 있는 동안, 제 1 쓰레드와는 다른 쓰레드들의 명령들이 프로세서 파이프라인(220)의 실행 유닛들을 사용하여 실행되는 것을 차단하는 것을 수행하도록 구성될 수 있다.
일부 구현예들에서, 민감성 명령들은 정적으로 지정될 수 있다(예를 들어, 특정 타입의 명령은 항상 민감성으로 고려됨). 예를 들어, 쓰레드 해저드 회로(280)는 명령의 오피코드에 근거하여 민감성 명령을 검출하도록 구성될 수 있다. 일부 구현예들에서, 민감성 명령들은 동적으로 지정될 수 있다(예를 들어, 플래그를 사용하여 소프트웨어에 의해 명령이 민감성으로서 마킹될 수 있음). 예를 들어, 쓰레드 해저드 회로(280)는 명령 내의 포함된 플래그(예컨대, 민감성 비트)에 근거하여 민감성 명령을 검출하도록 구성될 수 있다. 예를 들어, 쓰레드 해저드 회로(280)는 아키텍처 레지스터 내의 플래그에 근거하여 민감성 명령을 검출하도록 존재할 수 있다.
실행되는 애플리케이션들에 따라 다양한 서로 다른 명령들이 민감성으로서 고려될 수 있다. 예를 들어, 민감성 명령은 암호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 복호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 암호화 명령일 수 있다.
도 3은 도 1의 프로세서 메모리 시스템(108)의 구성의 예이다. 도 3에 예시된 예에서, 프로세서 메모리 시스템(108)은 메모리 시스템에 대한 액세스를 관리하는 메모리 관리 유닛(Memory Management Unit, MMU)(300)을 포함한다. MMU(300)는 가상 어드레스들을 물리적 어드레스들로 변환하는 것을 관리할 수 있다.
일부 구현예들에서, MMU(300)는 주어진 가상 어드레스에서의 저장된 값(예컨대, 데이터 혹은 명령)의 카피(copy)가 계층적 캐시 시스템의 레벨들 중 임의의 레벨에 존재하는지 여부를 결정할 수 있는데, 예컨대, L1 캐시(301)로부터 필요하면 LLC(120)(도 1)까지의 레벨들 중 임의의 레벨에 존재하는지 여부를 결정할 수 있다. 만약 존재한다면, 가상 어드레스에 액세스하는 명령은 해당 어드레스와 관련된 값의 캐싱된 카피를 사용하여 실행될 수 있다. 만약 존재하지 않는다면, 해당 명령은 메인 메모리(302)로부터의 값에 액세스한 이후에 실행되도록 미스 회로(miss circuitry)에 의해 핸들링될 수 있다.
메인 메모리(302), 그리고 잠재적으로 캐시 시스템의 하나 이상의 레벨들은, 가상 어드레스(Virtual Address, VA)로부터 변환된 물리적 어드레스(Physical Address, PA)를 사용하여 액세스될 필요가 있을 수 있다. 이것을 위해, 프로세서 메모리 시스템(108)은 VA-대-PA 맵핑(mapping)들에 의해 정의되는 변환들을 저장하는 TLB(304)를 포함할 수 있고, 그리고 만약 TLB(304) 내에서 변환이 발견되지 않는다면 페이지 테이블(page table)(308)에 액세스하기 위한 페이지 테이블 워커(page table walker)(306)를 포함할 수 있다. TLB 내에 저장되는 변환들은, 최근에 액세스된 변환들, 액세스될 가능성이 높은 변환들, 변환들의 어떤 다른 타입들, 또는 이들의 조합을 포함할 수 있다.
페이지 테이블(308)은 현재 사용중인 모든 VA-대-PA 맵핑들을 포함하는 엔트리들을 저장할 수 있고, 여기서 엔트리들은 페이지 테이블 엔트리(Page Table Entry, PTE)(310)를 포함한다. 페이지 테이블(308)은 전현적으로 메인 메모리(302) 내에 저장될 수 있는데, 2차 저장소(예컨대, 도 1의 저장 디바이스(118A))로부터 "페이지 인(page in)"된 대응하는 맵핑된 가상 메모리 페이지들을 나타내는 물리적 메모리 페이지들과 함께 저장될 수 있다. 페이지 폴트(page fault)를 초래하는 페이지 테이블 내의 이러한 미스는 프로그램 실행 동안 유발될 수 있는 인터럽트의 또 하나의 다른 예이다.
메모리 페이지는 임의 개수의 캐시 블록(cache block)들을 포함할 수 있다. 캐시 블록은 임의 개수의 워드들을 포함할 수 있다. 워드는 미리결정된 개수(예컨대, 2개)의 바이트들을 갖는다. 바이트는 비트들의 그룹(group)이고(예컨대, 8개의 비트들), 이것은 하나의 단위(unit)로서 동작될 수 있다. 바이트는 메모리 크기의 단위로서 고려될 수 있다.
대안적으로, 하이퍼바이저에 의해 관리되는 하나 이상의 게스트 운영 체제(guest operating system)들을 갖는 가상화된 시스템에서, 가상 어드레스(VA)들은 중간 물리적 어드레스(Intermediate Physical Address, IPA)들로 변환될 수 있고, 그 다음에 중간 물리적 어드레스(IPA)들은 물리적 어드레스(PA)들로 변환된다. 가상화된 시스템에서, 게스트 운영 체제에 의해 VA들을 IPA들로 변환하는 것은 전적으로 소프트웨어로 핸들링될 수 있고, 또는 게스트 운영 체제는 MMU(300)로부터의 일부 하드웨어 지원(hardware assistance)을 가질 수 있다.
TLB(304)는 페이지 테이블(308)로부터 최근에 액세스된 PTE들을 캐싱하기 위해 사용될 수 있다. 최근에 액세스된 PTE들의 캐싱은, 페이지 테이블 워커(306)가 PTE(310)를 검색하기 위해 페이지 테이블(308)을 저장하는 다수-레벨 데이터 구조의 잠재적 멀티-레벨 페이지 테이블 워크(multi-level page table walk)를 수행해야 함이 없이, (예컨대, 로딩 혹은 저장 명령에 응답하여) 변환이 수행될 수 있게 할 수 있다. 일 예에서, 페이지 테이블(308)의 PTE(310)는 가상 페이지 번호(Virtual Page Number)(312) 및 물리적 페이지 번호(Physical Page Number)(314)를 저장할 수 있고, 이들은 함께 VA와 (해당 VA의 변환을 정의하는) PA 간의 맵핑으로서의 역할을 한다.
어드레스(즉, 메모리 어드레스)는 비트들의 집합(collection)일 수 있다. 메모리 어드레스의 비트들은 하위 비트(low-order bit)들과 상위 비트(high-order bit)들로 분할될 수 있다. 예를 들어, 32-비트 어드레스들을 가정하면, 메모리 어드레스들의 예는 01101001 00101000 00001101 01011100이다. 하위 비트들은 가장우측에 있는 16개의 비트들(즉, 00001101 01011100)이고, 그리고 상위 비트는 가장좌측에 있는 16개의 비트들(즉, 01101001 00101000)이다. 메모리 어드레스의 하위 비트들은 페이지 오프셋(page offset)으로서 사용될 수 있다. 하위 비트들은 VA 및 그 맵핍된 PA에 대해 동일할 수 있다. 따라서, 메모리 어드레스의 상위 비트들은 맵핑을 특정하기 위한 메모리 페이지 번호로서 사용될 수 있다.
PTE(310)는 또한 상태 정보(Status Information, SI)(316)를 포함할 수 있다. SI(316)는 페이지가 메인 메모리(302) 내에 상주하는지 여부를 표시할 수 있거나, 또는 페이지가 2차 저장소로부터 검색돼야하는지 여부를 표시할 수 있다. PTE(310)가 TLB(304)의 임의의 엔트리 내에 저장되는 경우, 페이지 테이블(308)과 TLB(304) 간의 PTE들의 이동(transfer)을 관리하기 위한 아울러 TLB(304) 내의 PTE들을 무효화하기 위한 추가적인 정보가 또한 존재할 수 있다. 일 예에서, TLB(304) 내에서 PTE들을 무효화하는 것은, (엔트리가 유효(valid)한지 여부를 표시하는) 하나의 비트를 엔트리가 비유효(invalid)함을 표시하는 상태(즉, 이진 상태(binary state))로 토글링(toggling)함으로써 달성될 수 있다. 하지만, PTE들을 무효화하는 다른 방법들이 가능하다.
만약 변환될 VA의 일부와 매칭되는 유효한 엔트리가 TLB(304) 내에서 발견된다면(즉, "TLB 히트(TLB hit)"), 해당 엔트리 내에 저장된 PTE는 변환을 위해 사용된다. 만약 매칭이 존재하지 않는다면(즉, "TLB 미스(TLB miss)"), 페이지 테이블 워커(306)는 PTE를 검색하기 위해 페이지 테이블(308)의 레벨들을 트래버스(traverse)(또는 "워크(walk)")할 수 있다.
L1 캐시(301)는 임의 개수의 가능한 웨이(way)들로 구현될 수 있다. 도 3에서 예시되는 구현예에서, L1 캐시(301)는 N-웨이 세트 연관 캐시 모듈(N-way set associative cache module)로서 구현되는 것으로서 예시된다. L1 캐시(301)의 각각의 캐시 엔트리(320)는 메인 메모리(302) 내의 물리적 페이지로부터 (가능하게는 더 높은 레벨 캐시 모듈을 통해) 카피된 특정 캐시 블록(324)을 저장하기 위한 비트들을 포함할 수 있다.
캐시 엔트리(320)는 또한 태그(tag)(322)를 저장하기 위한 비트들을 포함할 수 있다. 태그(322)는 해당 엔트리의 워드들에 공통인 가상 어드레스의 임의 개수의 최상위 비트(most significant bit)들로 구성될 수 있다. 가상으로 인덱싱되고 가상으로 태깅된(Virtually Indexed, Virtually Tagged, VIVT) 타입의 캐시 모듈에 대해, 원하는 데이터의 가상 어드레스의 태그 부분(tag portion)을 비교하는 것에 추가하여, 캐시 모듈은 그러한 원하는 데이터를 포함하는 캐시 엔트리를 다수의 세트들 중 어떤 세트가 가질 수 있는지를 결정하기 위해 (태그(tag)와 블록 오프셋(block offset) 사이의 중간 비트들로 구성될 수 있는) 가상 어드레스의 인덱스 부분(index portion)을 비교할 수 있다.
N-웨이 세트 연관 캐시에 대해, 태그 비교는 선택된 "세트(set)" (i)에 대해 N번 (가능하게는 병렬로) 수행될 수 있다. 비교는 원하는 데이터를 포함하는 캐시 블록이 저장될 수 있는 N개의 "웨이(way)들" 각각에 대해 한번 수행될 수 있다.
그 다음에 블록 오프셋은 캐시 엔트리 내에서 발견되는(즉, '캐시 히트(cache hit)'인) 캐시 블록으로부터 특정 워드를 선택하기 위해 사용될 수 있다. 만약 선택된 세트의 웨이들 중 어떠한 웨이에 대해서도 태그가 매칭되지 않는다면(즉, '캐시 미스(cache miss)'라면), 캐시 시스템은 더 높은 레벨 캐시로부터 또는 (LLC의 경우에는) 메인 메모리(302)로부터 캐시 블록을 검색하려고 시도할 수 있다. 캐시 엔트리(320)는 또한 상태 정보(326)를 저장하기 위한 비트들을 포함할 수 있다. 상태 정보(326)는 예를 들어, 유효 비트(valid bit) 및/또는 임의의 플래그(flag)들 또는 에러 정정 비트(error correction bit)들을 포함할 수 있다.
특정 가상 어드레스로부터 특정 물리적 어드레스로의 변환 혹은 중간 물리적 어드레스로의 변환을 확립할 때, 콘텍스트 정보(context information)의 다양한 타입들이 서로로부터 동일한 가상 어드레스들을 달리 구분하기 위해 사용될 수 있다. 콘텍스트 정보는 다수의 독립된 가상 어드레스 공간들이 상이한 프로세스들에 대해 존재하게 할 수 있고, 또는 상이한 가상 머신(virtual machine)들에 대해 존재하게 할 수 있고, 또는 상이한 가상 어드레스 공간들을 지원하는 다양한 다른 구별되는 특성들 중 어느 하나에 대해 존재하게 할 수 있다.
콘텍스트 정보의 다양한 부분들은, 상이한 VA-대-PA 변환들, 또는 중간 물리적 어드레스(IPA)들이 사용되는 경우에는 VA-대-IPA 변환들, 혹은 IPA-대-PA 변환들 내에서 사용중인 가상 어드레스들 간을 구별하는데 사용될 수 있다.
예를 들어, 운영 체제는 실행되는 프로세스와 관련된 메모리 공간(가상 어드레스 공간)을 식별하기 위해 어드레스 공간 식별자(Address Space IDentifier, ASID)(예컨대, 16개의 비트들)를 사용할 수 있다. 하이퍼바이저는 가상 머신의 게스트 운영 체제와 관련된 메모리 공간(즉, 중간 물리적 어드레스 공간)을 식별하기 위해 가상 머신 식별자(Virtual Machine IDentifier, VMID)(예컨대, 16개의 비트들)를 사용할 수 있다.
특정 파라미터(parameter)들은, 예를 들어, 보안(Secure)(S) 혹은 비-보안(Non-Secure, NS)의 값들을 갖는 보안 상태(security state), 또는 (2-비트 예외 레벨(2-bit Exception Level)에 대해) EL0 - EL3의 값들을 갖는 예외 레벨(Exception Level)(이것은 또한 '우선권 레벨(priority level)'로 지칭됨)과 같은 아키텍처에서 이용가능한 상이한 클래스들의 프로세스들 혹은 소프트웨어 환경들과 관련될 수 있다.
이러한 콘텍스트 정보의 서브세트(subset) 혹은 모두는 함께 특정 가상 어드레스에 대한 콘텍스트(이것은 또한 "변환 콘텍스트(translation context)" 또는 "소프트웨어 콘텍스트(software context)"로 지칭됨)를 구성한다.
콘텍스트 식별자(Context IDentifier, CID)는 전체 콘텍스트 정보(full context information) 혹은 부분 콘텍스트 정보(partial context information)를 나타낼 수 있다. 일부 아키텍처들에서, 예를 들어, 전체 콘텍스트 정보는 35개의 비트들: 2-비트 예외 레벨(Exception Level, EL), 1-비트 비-보안/보안(NS/S) 값, 16-비트 VMID, 및 16-비트 ASID를 포함할 수 있다.
하지만, 상이한 CID들에 대한 유효성(validity)을 추적(track)하는 데이터 구조에 대한 저장에 집적 회로 영역이 할당된다는 측면에서 잠재적으로 상당한 오버헤드(overhead)가 존재할 수 있음에 유의해야 한다. 오버헤드를 감소시키기 위해, CID는 단지 16-비트 VMID 및 2-비트 EL과 같은 부분 콘텍스트 정보를 포함할 수 있다. 이러한 부분 콘텍스트 정보는 콘텍스트들의 상이한 서브세트들을 고유하게 식별시킬 수 있다. 대안적으로, 전체 콘텍스트 정보로부터의 비트들의 서브세트들을 단순히 연결(concatenating)하는 대신에, 기법들은 전체 콘텍스트 정보를 더 적은 수의 비트들로 기본적으로(essentially) 압축(compress)하기 위해 사용될 수 있다. 예를 들어, CID들을 계산하는 회로는 전체 콘텍스트 정보보다 더 적은 수의 비트들을 포함하도록 구성될 수 있고, 여기서 이러한 비트들은 CID들 및 대응하는 전체 콘텍스트 정보 스트링(full context information string) 간의 저장된 맵핑에 근거하여 할당될 수 있다.
맵핑 자체가 집적 회로 상의 공간을 차지하지만, 상이한 활성 CID들의 유효성을 추적하는 데이터 구조에서 더 많은 공간이 절약될 수 있다. 콘텍스트 정보를 압축하기 위한 기법들에 대한 추가적인 세부사항들은, 예를 들어, 참조로 본 명세서에 통합되는 미국 특허 번호 제9,779,028호(발명의 명칭: "MANAGING TRANSLATION INVALIDATION")에서 발견될 수 있다.
도 4는 보안 멀티쓰레딩 실행을 위한 기법(400)의 예의 흐름도이다. 기법은, 제 1 쓰레드의 명령을 메모리로부터 프로세서 파이프라인으로 페치하는 것(410); 명령이 민감성 명령으로서 지정되었음을 검출하는 것(420); 민감성 명령의 검출에 응답하여, 프로세서 파이프라인의 실행 유닛에 의한 민감성 명령의 실행 동안 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430); 프로세서 파이프라인의 실행 유닛을 사용하여 민감성 명령을 실행하는 것(440); 민감성 명령의 실행의 완료에 응답하여, 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 활성화하는 것(450); 그리고 프로세싱 파이프라인의 실행 유닛들을 사용하여, 제 1 쓰레드의 제 2 명령과 병렬로 제 2 쓰레드의 명령을 실행하는 것(460)을 포함한다. 예를 들어, 기법(400)은 도 1의 집적 회로(101)를 사용하여 구현될 수 있다. 예를 들어, 기법(400)은 도 2a의 프로세서 파이프라인(220)을 사용하여 구현될 수 있다. 예를 들어, 기법(400)은 도 2b의 프로세서 파이프라인(222)을 사용하여 구현될 수 있다.
기법(400)은 제 1 쓰레드의 명령을 메모리로부터 (예컨대, 프로세서 메모리 시스템(108)을 통해) 프로세서 파이프라인(예컨대, 프로세서 파이프라인(104))으로 페치하는 것(410)을 포함하고, 여기서 프로세서 파이프라인은, 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성된다. 예를 들어, 프로세서 파이프라인은 동시 멀티쓰레딩 프로세서 내에 포함될 수 있다.
기법(400)은 명령이 민감성 명령으로서 지정되었음을 검출하는 것(420)을 포함한다. 일부 구현예들에서, 민감성 명령들은 정적으로 지정될 수 있다(예를 들어, 특정 타입의 명령은 항상 민감성으로 고려됨). 예를 들어, 민감성 명령은 명령의 오피코드에 근거하여 검출될 수 있다(420). 일부 구현예들에서, 민감성 명령들은 동적으로 지정될 수 있다(예를 들어, 플래그를 사용하여 소프트웨어에 의해 명령이 민감성으로서 마킹될 수 있음). 예를 들어, 민감성 명령은 명령 내의 포함된 플래그(예컨대, 민감성 비트)에 근거하여 검출될 수 있다(420). 예를 들어, 민감성 명령은 아키텍처 레지스터 내의 플래그에 근거하여 검출될 수 있다(420). 예를 들어, 도 6의 기법(600)은 명령이 민감성 명령으로서 지정되었음을 검출하도록(420) 구현될 수 있다.
실행되는 애플리케이션들에 따라 다양한 서로 다른 명령들이 민감성으로서 고려될 수 있다. 예를 들어, 민감성 명령은 암호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 복호화 명령일 수 있다. 예를 들어, 민감성 명령은 AES 단일 라운드 암호화 명령일 수 있다.
기법(400)은, 민감성 명령의 검출에 응답하여, 프로세서 파이프라인의 실행 유닛에 의한 민감성 명령의 실행 동안 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430)을 포함한다. 일부 구현예들에서, 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430)은, 제 1 쓰레드와는 다른 쓰레드들의 명령들의 발행을 차단하는 것을 포함한다. 일부 구현예들에서, 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430)은, 제 1 쓰레드와는 다른 쓰레드들의 명령들의 디스패치를 차단하는 것을 포함한다. 예를 들어, 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430)은, 민감성 명령에 의해 사용되는 포트에 대해서만 지연들을 증가시키는 것이 아니라, 모든 포트들(즉, 프로세서 파이프라인의 실행 유닛들)에 걸쳐 균일한 지연을 일으킬 수 있다. 따라서, 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 비활성화하는 것(430)은, 민감성 명령이 실행되고 있는 동안 다수의 쓰레드들로부터의 명령들의 병렬 실행을 막을 수 있고, 이것은 제 1 쓰레드에 대한 특정 사이드 채널 공격들(예컨대, 포트스매쉬 공격)을 막을 수 있다.
기법(400)은 프로세서 파이프라인의 실행 유닛을 사용하여 민감성 명령을 실행하는 것(440)을 포함한다. 실행 유닛(예컨대, 실행 유닛(260), 실행 유닛(262), 실행 유닛(264), 실행 유닛(266), 또는 실행 유닛(268))을 사용하여 민감성 명령을 실행하는 것(440)은 하나 이상의 클록 싸이클들을 소요할 수 있다. 예를 들어, 일부 명령들(예컨대, 제곱근 명령(square root instruction) 또는 특정 암호화 명령들)은 실행을 완료하기 위해 다수의 클록 싸이클들을 소요할 수 있다.
기법(400)은 민감성 명령의 실행의 완료에 응답하여, 프로세서 파이프라인 내에서 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 활성화하는 것(450)을 포함한다. 민감성 명령의 완료 이후 제 1 쓰레드와는 다른 쓰레드들의 명령들의 실행을 활성화하는 것(450)은 프로세서 파이프라인 내의 발행/디스패치 로직이 제약되는 시간의 양을 제한할 수 있다.
기법(400)은 프로세싱 파이프라인의 실행 유닛들을 사용하여, 제 1 쓰레드의 제 2 명령과 병렬로 제 2 쓰레드의 명령을 실행하는 것(460)을 포함한다. 어떠한 민감성 명령도 실행되고 있지 않을 때 다른 쓰레드들로부터의 명령들이 병렬로 실행될 수 있게 하여 명령 처리량의 측면에서 더 좋은 성능이 달성될 수 있는데, 왜냐하면 이것은 프로세서 파이프라인의 실행 유닛들의 활용도(utilization)를 증가시킬 수 있기 때문이다. 이러한 성능 이득들은 보안을 실질적으로 손상시키지 않으면서 달성될 수 있다(여기서 상이한 쓰레드들이 파이프라인의 실행 스테이지(예컨대, 실행 스테이지(250))를 공유하는 동안 어떠한 민감성 명령도 현재 실행되고 있지 않음이 알려짐).
설명의 간결함을 위해, 기법(400)은 일련의 블록들, 단계들, 또는 동작들로서 묘사되고 설명된다. 하지만, 본 개시내용에 따른 블록들, 단계들, 또는 동작들은 다양한 순서들로 그리고/또는 동시에 일어날 수 있다. 추가적으로, 본 명세서에서 제시 및 설명되지 않은 다른 단계들 또는 동작들이 사용될 수 있다. 더욱이, 예시되는 모든 단계들 또는 동작들이 본 명세서에서 개시되는 주된 내용에 따른 기법을 구현하기 위해 요구될 수 있는 것은 아니다.
도 5는 동적으로 지정된 민감성 명령들에 대한 특별 핸들링으로 명령들을 실행하기 위한 집적 회로(500)의 예의 블록도이다. 예를 들어, 민감성 핸들링 활성화 표시자가 사용될 수 있으며, 이것은 본 예에서 단일 비트로서 표현되는데, 하지만 다른 예들에서 민감성 핸들링 활성화 표시자는 임의 개수의 비트들을 사용할 수 있거나, 또는 정보의 다른 표현들을 사용할 수 있다. 집적 회로(500)는 프로세서 코어(510)를 포함하고, 프로세서 코어(510)는 프로세서 파이프라인(104)과, 프로세서 메모리 시스템(108)과, 그리고 민감성 핸들링 활성화 비트(sensitive handling enable bit)(522)를 포함하는 프로세스 상태 레지스터(520)를 포함한다. 민감성 핸들링 활성화 비트(522)는, 관련된 프로세스가, 프로세스가 민감성으로서 지정한 특정 명령들(예컨대, 암호화 명령)에 대한 제약 하에서 특수 실행(special execution)을 이용할 권한이 있는지 여부를 표시할 수 있다. 제약은, 제약을 호출하는 프로세스에 대한 보안(예컨대, 사이드 채널 공격들로부터의 보호)을 증진시키는 대신 프로세서 코어(510)의 성능을 감소시킬 수 있다. 성능 손상을 감소시키고 제약을 활용하여 공격들을 막기 위해, 민감성 핸들링 활성화 비트(522)의 값은 집적 회로(500) 상에서 실행되는 높은 우선권 프로세스(예컨대, 하이퍼바이저 프로세스)에 의해 제어될 수 있다. 예를 들어, 집적 회로(500)는 도 6의 기법(600)을 구현하기 위해 사용될 수 있다.
집적 회로(500)는 프로세서 파이프라인(104)을 포함하고, 여기서 프로세서 파이프라인(104)은, 프로세서 파이프라인(104)의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성될 수 있다. 예를 들어, 프로세서 파이프라인(104)은 동시 멀티쓰레딩 프로세서 내에 포함될 수 있다. 일부 구현예들에서, 제약은, 민감성 명령이 프로세서 파이프라인(104)의 실행 유닛에 의해 실행되고 있는 동안 다른 쓰레드들로부터의 명령들의 병렬 실행을 막는다. 예를 들어, 프로세서 파이프라인(104)은 도 2a의 프로세서 파이프라인(220)일 수 있다. 예를 들어, 프로세서 파이프라인(104)은 도 2b의 프로세서 파이프라인(222)일 수 있다.
집적 회로(500)는 민감성 핸들링 활성화 비트(522)를 포함하는 레지스터(520)를 포함한다. 이러한 예에서, 레지스터(520)는 제 1 프로세스의 상태를 저장하는 프로세스 상태 레지스터이다. 민감성 핸들링 활성화 비트(522)의 값은, 활성화된 상태(즉, 관련된 프로세스가 제약 하의 실행에 대한 권한이 있음)에 대응할 수 있거나, 또는 비활성화된 상태(즉, 관련된 프로세스가 제약 하의 실행에 대한 권한이 없음)에 대응할 수 있다. 민감성 핸들링 활성화 비트(522)는 다른 구현예들에서 활성화 로우(active low) 또는 활성화 하이(active high)로서 해석될 수 있다. 예를 들어, 민감성 핸들링 활성화 비트(522)에 대한 기입 액세스는 높은 우선권 프로세스(예컨대, 하이퍼바이저 프로세스 또는 운영 체제 프로세스)로 제한될 수 있다.
집적 회로(500)는 레지스터(520)에 대한 액세스를 갖는 프로세서 코어(510)를 포함한다. 이러한 예에서, 레지스터는 프로세서 코어(510)의 일부이다. 프로세서 코어는 민감성 핸들링 활성화 비트(522)에 근거하여 제약 하에서 특수 실행에 대한 액세스를 제한하도록 구성될 수 있다. 프로세서 코어(510)는 개개의 명령들 혹은 명령들의 시퀀스들을 민감성 명령들로서 동적으로 지정하는 것이 가능하도록 구성될 수 있다. 예를 들어, 프로세서 코어(510)는, 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 민감성 핸들링 활성화 비트가 활성화되었는지 여부를 점검하는 것; 민감성 명령의 검출 및 민감성 핸들링 활성화 비트의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약을 호출하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 1 프로세스의 제 2 명령(예컨대, 민감성으로서 지정되지 않았던 명령)을 실행하는 것을 수행하도록 구성될 수 있다. 따라서, 권한이 있는 프로세스가 프로세서 코어(510)의 성능에 대한 임의의 부정적 영향을 제한하면서 보안을 증진시키기 위해 민감성 명령들에 대한 특별 핸들링을 적절하게(judiciously) 적용하는 것이 가능하게 될 수 있다.
일부 구현예들에서, 제 1 명령은 민감성 비트를 포함하고, 프로세서 코어(510)는 제 1 명령의 민감성 비트를 평가(evaluating)함으로써 제 1 명령이 민감성 명령으로서 지정되었음을 검출하도록 구성된다. 예를 들어, 프로세서 코어(510)에 의해 지원되는 명령 세트는 명령 세트의 일부 혹은 모든 명령들 내에 민감성 비트를 포함할 수 있고, 그리고 명령 세트를 사용하는 소프트웨어는 애플리케이션의 필요에 근거하여 특정 명령에 대한 민감성 비트를 동적으로 설정할 수 있다. 예를 들어, 프로세서 코어(510)는, 제 1 명령을 페치하는 것(여기서 명령은 제 1 명령이 민감성 명령임을 표시하는 민감성 비트를 포함함); 민감성 핸들링 활성화 비트의 현재 값 및 민감성 비트에 근거하여, 제 1 명령의 실행에 대한 제약을 호출하는 것; 제약 하에서 제 1 명령을 실행하는 것; 그리고 제약 없이 제 2 명령(예컨대, 민감성으로서 지정되지 않았던 명령)을 실행하는 것을 수행하도록 구성될 수 있다.
일부 구현예들에서, 제 1 명령은, 제 1 프로세스의 명령들의 시퀀스에서, 민감성-시작 명령(sensitive-start instruction) 뒤에 있고 민감성-중단 명령(sensitive-stop instruction) 앞에 있으며, 그리고 프로세서 코어(510)는, 민감성-시작 명령의 검출에 근거하여 제 1 명령이 민감성 명령으로서 지정되었음을 검출하도록 구성된다. 예를 들어, 제 1 명령은, 제 1 프로세스의 명령들의 시퀀스에서, 민감성-시작 명령 바로 뒤에 있고 민감성-중단 명령 바로 앞에 있는, 명령들의 서브시퀀스의 멤버(member)일 수 있고, 그리고 프로세서 코어(510)는 제약 하에서 명령들의 서브시퀀스의 모든 멤버들을 실행하도록 구성될 수 있다. 예를 들어, 도 7의 기법(700)은 민감성-시작 명령 및 민감성-중단 명령을 사용하여 소프트웨어에 의해 지정되는 하나 이상의 민감성 명령들의 서브시퀀스들을 검출하도록 구현될 수 있다.
프로세서 코어(510)는, 제 1 프로세스보다 더 높은 우선권을 갖는 제 2 프로세스의 명령에 근거하여 민감성 핸들링 활성화 비트(522)의 값을 업데이트(update)하도록 구성될 수 있다. 예를 들어, 제 2 프로세스는 하이퍼바이저 프로세스(hypervisor process)일 수 있다. 예를 들어, 제 2 프로세스는 운영 체제 프로세스(operating system process)일 수 있다.
프로세서 코어(510)는 관련된 민감성 핸들링 활성화 비트(522)에 의해 표시되는 바와 같이 권한이 없는 프로세스들에 대해 제약 하에서의 실행의 사용을 막을 수 있다. 예를 들어, 레지스터(520)에 권한이 없는 제 3 프로세스에 대한 상태 정보가 로딩될 때, 제 3 프로세스가 민감성으로서 지정한 명령을 제약을 사용하여 제 3 프로세스가 실행하는 것을 막을 수 있다. 예를 들어, 프로세서 코어(510)는, 제 3 프로세스의 제 3 명령이 민감성 명령으로서 지정되었음을 검출하는 것; 민감성 핸들링 활성화 비트(522)가 활성화되었는지 여부를 점검하는 것; 그리고 민감성 핸들링 활성화 비트(522)의 비활성화에 응답하여, 제약 없이 제 3 프로세스의 제 3 명령을 실행하는 것을 수행하도록 구성될 수 있다.
도 6은 동적으로 지정된 민감성 명령들에 대한 특별 핸들링으로 명령들을 실행하기 위한 기법(600)의 예의 흐름도이다. 기법(600)은, 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것(610); 민감성 핸들링 활성화 비트가 활성화되었는지 여부를 점검하는 것(620); 만약 (단계(625)에서) 민감성 핸들링 활성화 비트가 활성화되었다면, 민감성 명령의 검출 및 민감성 핸들링 활성화 비트의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약을 호출하는 것(630); 제약 하에서 제 1 명령을 실행하는 것(640); 그리고 제약 없이 제 1 프로세스의 제 2 명령을 실행하는 것(660)을 포함한다. 예를 들어, 기법(600)은 도 1의 집적 회로(101)를 사용하여 구현될 수 있다. 예를 들어, 기법(600)은 도 5의 집적 회로(500)를 사용하여 구현될 수 있다.
기법(600)은 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것(610)을 포함한다. 예를 들어, 제 1 명령은 암호화 명령(예를 들어, AES 단일 라운드 암호화 명령 또는 AES 단일 라운드 복호화 명령)일 수 있다. 일부 구현예들에서, 소프트웨어는 명령의 민감성 비트를 설정(setting)하거나 혹은 클리어(clearing)함으로써 명령을 민감성으로 동적으로 지정할 수 있다. 예를 들어, 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것(610)은 제 1 명령 내에 포함된 민감성 비트를 평가하는 것을 포함할 수 있다. 일부 구현예들에서, 소프트웨어는, 제약 하에서 명령들을 실행하는 민감성 핸들링의 시작 및 중단을 표시하기 위해 명령들의 시퀀스 내에서 특화된 명령들(예컨대, 민감성-시작 명령 및 민감성-중단 명령)을 사용하여 명령들의 서브시퀀스를 민감성으로서 동적으로 지정할 수 있다. 예를 들어, 제 1 명령은, 제 1 프로세스의 명령들의 시퀀스에서, 민감성-시작 명령 뒤에 있을 수 있고 민감성-중단 명령 앞에 있을 수 있다. 제 1 명령이 민감성 명령으로서 지정되었음은 민감성-시작 명령의 검출에 근거하여 검출될 수 있다(610). 예를 들어, 제 1 명령은, 제 1 프로세스의 명령들의 시퀀스에서, 민감성-시작 명령 바로 뒤에 있고 민감성-중단 명령 바로 앞에 있는, 명령들의 서브시퀀스의 멤버일 수 있고, 그리고 명령들의 서브시퀀스의 모든 멤버들은 제약 하에서 실행될 수 있다. 예를 들어, 도 7의 기법(700)은 제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하도록(610) 구현될 수 있다.
기법(600)은 제 1 프로세스의 상태를 저장하는 프로세스 상태 레지스터 내의 민감성 핸들링 활성화 비트가 활성화되었는지 여부를 점검하는 것(620)을 포함한다. 민감성 핸들링 활성화 비트의 값은, 활성화된 상태(즉, 관련된 프로세스가 제약 하의 실행에 대한 권한이 있음)에 대응할 수 있거나, 또는 비활성화된 상태(즉, 관련된 프로세스가 제약 하의 실행에 대한 권한이 없음)에 대응할 수 있다. 일부 구현예들에서, 민감성 핸들링 활성화 비트는 활성화 로우로서 해석될 수 있다. 일부 구현예들에서, 민감성 핸들링 활성화 비트는 활성화 하이로서 해석될 수 있다.
기법(600)은, 만약 (단계(625)에서) 민감성 핸들링 활성화 비트가 활성화되었다면, 민감성 명령의 검출 및 민감성 핸들링 활성화 비트의 활성화에 응답하여, 제 1 명령의 실행에 대한 제약을 호출하는 것(630)을 포함한다. 예를 들어, 제 1 명령의 실행에 대한 제약을 호출하는 것(630)은, 프로세서 파이프라인(예컨대, 프로세서 파이프라인(104))으로 하여금 제약 하에서 제 1 명령을 실행하도록 하기 위해 프로세서 코어의 마이크로아키텍처 상태(microarchitectural state)를 업데이트하는 것을 포함할 수 있다. 예를 들어, 프로세서 파이프라인은, 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 구성될 수 있고, 그리고 제약은, 제 1 명령이 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안(640) 다른 쓰레드들로부터의 명령들의 병렬 실행을 막을 수 있다.
기법(600)은 제약 하에서 제 1 명령을 실행하는 것(640)을 포함한다. 제약은 제 1 프로세스의 보안을 증진시키지만 기법(600)을 구현하는 프로세서 코어의 성능을 손상시킬 수 있다. 예를 들어, 제약 하에서 제 1 명령을 실행하는 것(640)은 사이드 채널 공격(예컨대, 포트스매쉬 공격)을 막을 수 있거나 완화시킬 수 있다.
기법(600)은, 만약 (단계(625)에서) 민감성 핸들링 활성화 비트가 비활성화되었다면, 제 1 프로세스와 관련된 민감성 핸들링 활성화 비트의 비활성화에 응답하여, 제약 없이 제 1 프로세스의 제 1 명령을 실행하는 것(650)을 포함한다. 예를 들어, 제 1 명령이 제약 없이 실행되도록 하는 것(650)은, 기법(600)을 구현하는 프로세서 코어의 성능을 보존(preserve)할 수 있고, 그리고 명령들을 민감성 명령들로서 동적으로 지정하는 것을 사용하여 악성 프로세스들에 의한 공격들을 막을 수 있다.
기법(600)은 제약 없이 제 1 프로세스의 제 2 명령(예컨대, 민감성으로서 지정되지 않았던 명령)을 실행하는 것(660)을 포함한다. 제약 없이 제 2 명령을 실행하는 것(660)은, 기법(600)을 구현하는 프로세싱 코어의 성능을 보존할 수 있다. 권한 있는 프로세스가 개개의 명령들 혹은 명령들의 서브시퀀스들을 민감성으로서 지정하는 것을 가능하게 함으로써, 기법(600)을 구현하는 프로세싱 코어의 성능은, 단지 민감성 프로세스들 혹은 쓰레드들의 지정만을 가능하게 하는 프로세서들과 비교하여, 향상될 수 있다.
기법(600)은 제 1 프로세스보다 더 높은 우선권을 갖는 제 2 프로세스의 명령에 근거하여 민감성 명령 활성화 비트(sensitive instruction enabled bit)의 값을 업데이트하는 것(670)을 포함한다. 예를 들어, 제 2 프로세스는 하이퍼바이저 프로세스일 수 있다. 예를 들어, 제 2 프로세스는 운영 체제 프로세스일 수 있다. 예를 들어, 제 2 프로세스는 제약 하에서의 실행을 이용할 권한에 대한 요청들을 관리하기 위해 도 8의 기법(800)을 구현할 수 있다.
설명의 간결함을 위해, 기법(600)은 일련의 블록들, 단계들, 또는 동작들로서 묘사되고 설명된다. 하지만, 본 개시내용에 따른 블록들, 단계들, 또는 동작들은 다양한 순서들로 그리고/또는 동시에 일어날 수 있다. 예를 들어, 단계(670)는 제 2 프로세스(예컨대, 하이퍼바이저 프로세스)로부터의 명령에 응답하여 비동기적으로 수행될 수 있다. 추가적으로, 본 명세서에서 제시 및 설명되지 않은 다른 단계들 또는 동작들이 사용될 수 있다. 더욱이, 예시되는 모든 단계들 또는 동작들이 본 명세서에서 개시되는 주된 내용에 따른 기법을 구현하기 위해 요구될 수 있는 것은 아니다.
도 7은 프로세스의 하나 이상의 명령들이 민감성 명령들로서 지정되었음을 검출하기 위한 기법(700)의 예의 흐름도이다. 기법(700)은, 민감성-시작 명령을 디코딩하는 것(710); 그리고 민감성-시작 명령에 응답하여, 민감성-시작 명령 뒤에 있는 하나 이상의 명령들을 민감성 명령들로서 식별하는 것(720)(민감성 명령들에 대한 제약 하에서 실행이 계속됨)을 포함한다. 제약 하에서의 프로세스의 명령들의 실행은 민감성-중단 명령이 디코딩될 때(730)까지 게속될 수 있다. 기법(700)은, 민감성-중단 명령에 응답하여 제약 없이 프로세스의 명령들의 실행을 계속하는 것(740)을 포함한다. 예를 들어, 프로세스의 명령들의 시퀀스는, 민감성-시작 명령 바로 뒤에 있고 민감성-중단 명령 바로 앞에 있는, 명령들의 서브시퀀스(예컨대, 코드의 영역)를 포함할 수 있다. 기법(700)은, 프로세서 성능에 대한 영향을 제한하면서 보안을 증진시키기 위해 명령들의 서브시퀀스 밖에 있는 프로세스의 명령들을 제약 없이 실행하는 반면 명령들의 서브시퀀스의 모든 멤버들을 제약 하에서 실행하도록 구현될 수 있다. 예를 들어, 기법(700)은 도 1의 집적 회로(101)를 사용하여 구현될 수 있다. 예를 들어, 기법(700)은 도 5의 집적 회로(500)를 사용하여 구현될 수 있다.
도 8은 더 높은 우선권 프로세스를 사용하여 프로세스에 대한 명령들의 민감성 핸들링에 대한 권한을 업데이트하기 위한 기법(800)의 예의 흐름도이다. 기법(800)은, 민감성 명령 핸들링(즉, 지정된 민감성 명령들을 제약 하에서 실행하는 것)에 대한 권한을 부여하도록 하는 요청을 프로세스로부터 수신하는 것(810); 요청에 응답하여, 보안 정책에 근거하여 프로세스에 대한 민감성 명령 핸들링에 대해 권한을 부여할지 여부를 결정하는 것(820); 그리고 결정(820)에 근거하여 민감성 핸들링 활성화 비트(예컨대, 민감성 핸들링 활성화 비트(522))의 값을 업데이트하는 것(830)을 포함한다. 예를 들어, 민감성 핸들링 활성화 비트의 값은, 특화된 명령을 사용하여 그리고/또는 제한된 기입 허가들로 집적 회로의 레지스터에 기입을 행함으로써, 업데이트될 수 있다(830). 예를 들어, 기법(800)은, 집적 회로(예컨대, 집적 회로(101) 또는 집적 회로(500)) 상에서 실행되는, 그리고 집적 회로의 하드웨어 리소스들에 대한 액세스를 관리하는데 사용되는, 높은 우선권 프로세스(예컨대, 하이퍼바이저 프로세스 또는 운영 체제 프로세스)에 의해 구현될 수 있다. 지정된 민감성 명령들을 제약 하에서 실행하는 것을 이용하려는 프로세스는, 프로세스가 민감성인 것으로서 동적으로 지정할 명령들이 발행되기 전에 이러한 특징을 활성화시키기 위해서 (예컨대, 프로세스-간 통신(inter-process communication)을 일으키는 시스템 호출 기능(system call function)을 사용하여) 요청을 보낼 수 있다. 일부 구현예들에서, 높은 우선권 프로세스는 요청의 승인(grant)을 확인시키거나 또는 요청을 거부하는 메시지(message)로 프로세스에게 다시 응답할 수 있다. 일부 구현예들에서, 높은 우선권 프로세스는 요청이 승인되었는지 여부를 표시하는 어떠한 피드백(feedback)도 프로세스에게 제공하지 않는데, 이것은 일부 악성 프로세스들을 저지(thwart)하는 역할을 할 수 있다.
단어 "예(example)"는 예로서, 사례로서, 혹은 예시로서의 역할을 하는 의미를 갖도록 본 명세서에서 사용된다. 본 명세서에서 "예"로서 설명되는 임의의 실시형태 혹은 설계는 다른 실시형태들 혹은 설계들보다 선호되거나 유리한 것으로서 반드시 해석될 필요는 없다. 오히려, 단어 "예"의 사용은 구체적인 방식으로 개념들을 제시하도록 의도된 것이다. 본 출원에서 사용되는 바와 같은, 용어 "또는"은 배타적 "또는"이 아닌 포함적 "또는"을 의미하도록 의도된 것이다. 즉, 문맥에 의해 달리 명확히 표시되지 않는다면 혹은 달리 특정되지 않는다면, "X는 A 또는 B를 포함한다"는 기재는 이것의 자연적인 포함적 순열들 중 어느 하나를 의미하도록 의도된 것이다. 다시 말해, 만약 X는 A를 포함한다; X는 B를 포함한다; 또는 X는 A와 B를 모두 포함한다라면, "X는 A 또는 B를 포함한다"는 앞서의 사레들 중 어느 하나 하에서 충족된다. 추가적으로, 본 출원 및 첨부되는 청구항들에서 사용되는 바와 같은 단수적 표현은, 단수적 형태를 지향하도록 문맥에 의해 명확히 표시되지 않는다면 혹은 달리 특정되지 않는다면, 일반적으로 "하나 이상"을 의미하는 것으로 해석돼야 한다. 더욱이, 본 개시내용 전반에 걸쳐 용어 "구현예" 또는 용어 "일 구현예"의 사용은 동일한 구현예로서 설명되지 않는 한 동일한 구현예를 의미하도록 의도된 것이 아니다.
집적 회로(101)(및 집적 회로(101) 상에 저장된 그리고/또는 집적 회로(101)에 의해 실행되는 알고리즘들, 방법들, 명령들, 등)의 구현예들은 하드웨어, 소프트웨어, 혹은 이들의 임의의 결합으로 실현될 수 있다. 하드웨어는 예를 들어, 컴퓨터(computer)들, 지적 재산(Intellectual Property, IP) 코어(core)들, 애플리케이션-특정 집적 회로(Application-Specific Integrated Circuit, ASIC)들, 프로그래밍가능 로직 어레이(programmable logic array)들, 광학 프로세서(optical processor)들, 프로그래밍가능 로직 제어기(programmable logic controller)들, 마이크로코드(microcode), 마이크로제어기(microcontroller)들, 서버(server)들, 마이크로프로세서(microprocessor)들, 디지털 신호 프로세서(digital signal processor)들, 또는 임의의 다른 적절한 회로를 포함할 수 있다. 청구항들에서, 용어 "프로세서"는 앞서의 하드웨어 중 임의의 것을 단일하게 혹은 결합하여 포괄하는 것으로서 해석돼야 한다. 용어들 "신호"와 "데이터"는 상호교환가능하게 사용된다.
더욱이, 본 개시내용의 구현예들 중 일부 혹은 모두는 예를 들어, 컴퓨터-사용가능 또는 컴퓨터-판독가능 매체로부터 액세스가능한 컴퓨터 프로그램 물의 형태를 취할 수 있다. 컴퓨터-사용가능 또는 컴퓨터-판독가능 매체는 예를 들어, 임의의 프로세서에 의한 사용을 위해 혹은 임의의 프로세와 연계된 사용을 위해 프로그램을 실체가 있게 포함, 저장, 전달, 또는 운반할 수 있는 임의의 디바이스일 수 있다. 매체는 예를 들어, 전자 디바이스, 자기 디바이스, 광학 디바이스, 전자기 디바이스, 또는 반도체 디바이스일 수 있다. 다른 적절한 매체들이 또한 이용가능하다.
앞서-설명된 구현예들 및 다른 실시형태들은 본 개시내용의 손쉬운 이해를 용이하게 하기 위해 설명되었고, 그리고 본 개시내용을 한정하지 않는다. 반대로, 본 개시내용은 첨부되는 청구항들의 범위 내에 포함되는 다양한 수정들 및 등가적 구성들을 포괄하도록 의도된 것인데, 이와 같은 첨부되는 청구항들의 범위에는 이러한 수정들 및 등기적 구성들을 모두 포괄하도록 합법적으로 허용되는 바와 같이 가장 넓은 해석이 부여돼야 한다.
Claims (29)
- 명령(instruction)들을 실행하기 위한 집적 회로(integrated circuit)로서, 상기 집적 회로는,
민감성 핸들링 활성화 표시자(sensitive handling enable indicator)를 포함하는 레지스터(register)와; 그리고
프로세서 코어(processor core)를 포함하고,
상기 프로세서 코어는,
제 1 프로세스의 제 1 명령이 민감성 명령(sensitive instruction)으로서 지정(designate)되었음을 검출하는 것과;
상기 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검(check)하는 것과;
상기 민감성 명령의 검출 및 상기 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 상기 제 1 명령의 실행에 대한 제약(constraint)을 호출(invoke)하는 것과, 여기서 상기 제약은 상기 제 1 명령의 실행 동안 상기 제 1 명령과는 다른 선택된 명령들의 발행(issue), 디스패치(dispatch), 또는 실행 중 적어도 하나를 선택적으로 차단(block)하는 것이며;
상기 제약 하에서 상기 제 1 명령을 실행하는 것과; 그리고
상기 민감성 핸들링 활성화 표시자가 여전히 활성화되어 있는 동안 상기 제약 없이 민감성 명령으로서 지정되지 않았던 상기 제 1 프로세스의 제 2 명령을 실행하는 것을
수행하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 제 1 명령은 민감성 비트(sensitive bit)를 포함하고,
상기 프로세서 코어는, 상기 제 1 명령의 상기 민감성 비트를 평가(evaluating)함으로써 상기 제 1 명령이 민감성 명령으로서 지정되었음을 검출하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 제 1 명령은, 상기 제 1 프로세스의 명령들의 시퀀스(sequence)에서, 민감성-시작 명령(sensitive-start instruction) 뒤에 있고 민감성-중단 명령(sensitive-stop instruction) 앞에 있으며,
상기 프로세서 코어는, 상기 민감성-시작 명령의 검출에 근거하여 상기 제 1 명령이 민감성 명령으로서 지정되었음을 검출하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제3항에 있어서,
상기 제 1 명령은, 상기 제 1 프로세스의 명령들의 상기 시퀀스에서, 상기 민감성-시작 명령 바로 뒤에 있고 상기 민감성-중단 명령 바로 앞에 있는, 명령들의 서브시퀀스(subsequence)의 멤버(member)이고,
상기 프로세서 코어는 상기 제약 하에서 명령들의 상기 서브시퀀스의 모든 멤버들을 실행하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 프로세서 코어는, 상기 제 1 프로세스보다 더 높은 특권(privilege)을 갖는 제 2 프로세스의 명령에 근거하여 상기 민감성 핸들링 활성화 표시자의 값을 업데이트(update)하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제5항에 있어서,
상기 제 2 프로세스는 하이퍼바이저 프로세스(hypervisor process)인 것을 특징으로 하는 집적 회로. - 제5항에 있어서,
상기 제 2 프로세스는 운영 체제 프로세스(operating system process)인 것을 특징으로 하는 집적 회로. - 제5항에 있어서,
상기 프로세서 코어는,
제 3 프로세스의 제 3 명령이 민감성 명령으로서 지정되었음을 검출하는 것과;
상기 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것과; 그리고
상기 민감성 핸들링 활성화 표시자의 비활성화에 응답하여, 상기 제약 없이 상기 제 3 프로세스의 상기 제 3 명령을 실행하는 것을
수행하도록 되어 있는 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 집적 회로는 프로세서 파이프라인(processor pipeline)을 포함하고,
상기 프로세서 파이프라인은 상기 프로세서 파이프라인의 실행 유닛(execution unit)들을 사용하여 병렬로 둘 이상의 쓰레드(thread)들로부터의 명령들을 실행하도록 되어 있고,
상기 제약은, 상기 제 1 명령이 상기 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 다른 쓰레드들로부터의 명령들의 병렬 실행을 막는 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 레지스터는 상기 제 1 프로세스의 상태(state)를 저장하는 프로세스 상태 레지스터(process state register)인 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 제 1 명령은 암호화 명령(cryptographic instruction)인 것을 특징으로 하는 집적 회로. - 제1항에 있어서,
상기 민감성 핸들링 활성화 표시자는 단일 비트(single bit)로 구성되는 것을 특징으로 하는 집적 회로. - 방법으로서, 상기 방법은,
제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것과;
상기 제 1 프로세스의 상태를 저장하는 프로세스 상태 레지스터 내의 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것과;
상기 민감성 명령의 검출 및 상기 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 상기 제 1 명령의 실행에 대한 제약을 호출하는 것과, 여기서 상기 제약은 상기 제 1 명령의 실행 동안 상기 제 1 명령과는 다른 선택된 명령들의 발행, 디스패치, 또는 실행 중 적어도 하나를 선택적으로 차단하는 것이며;
상기 제약 하에서 상기 제 1 명령을 실행하는 것과; 그리고
상기 민감성 핸들링 활성화 표시자가 여전히 활성화되어 있는 동안 상기 제약 없이 민감성 명령으로서 지정되지 않았던 상기 제 1 프로세스의 제 2 명령을 실행하는 것을 포함하는 것을 특징으로 하는 방법. - 제13항에 있어서,
상기 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것은, 상기 제 1 명령 내에 포함된 민감성 비트를 평가하는 것을 포함하는 것을 특징으로 하는 방법. - 제13항에 있어서,
상기 제 1 명령은, 상기 제 1 프로세스의 명령들의 시퀀스에서, 민감성-시작 명령 뒤에 있고 민감성-중단 명령 앞에 있으며,
상기 방법은, 상기 민감성-시작 명령의 검출에 근거하여 상기 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것을 포함하는 것을 특징으로 하는 방법. - 제15항에 있어서,
상기 제 1 명령은, 상기 제 1 프로세스의 명령들의 상기 시퀀스에서, 상기 민감성-시작 명령 바로 뒤에 있고 상기 민감성-중단 명령 바로 앞에 있는, 명령들의 서브시퀀스의 멤버이고,
상기 방법은, 상기 제약 하에서 명령들의 상기 서브시퀀스의 모든 멤버들을 실행하는 것을 포함하는 것을 특징으로 하는 방법. - 제13항에 있어서,
상기 방법은, 상기 제 1 프로세스보다 더 높은 특권을 갖는 제 2 프로세스의 명령에 근거하여 상기 민감성 핸들링 활성화 표시자의 값을 업데이트하는 것을 포함하는 것을 특징으로 하는 방법. - 제17항에 있어서,
상기 제 2 프로세스는 하이퍼바이저 프로세스인 것을 특징으로 하는 방법. - 제17항에 있어서,
상기 제 2 프로세스는 운영 체제 프로세스인 것을 특징으로 하는 방법. - 제17항에 있어서,
상기 방법은,
제 3 프로세스의 제 3 명령이 민감성 명령으로서 지정되었음을 검출하는 것과;
상기 제 3 프로세스와 관련된 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것과; 그리고
상기 제 3 프로세스와 관련된 상기 민감성 핸들링 활성화 표시자의 비활성화에 응답하여, 상기 제약 없이 상기 제 3 프로세스의 상기 제 3 명령을 실행하는 것을 포함하는 것을 특징으로 하는 방법. - 제13항에 있어서,
상기 제약은, 상기 제 1 명령이 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 다른 쓰레드들로부터의 명령들의 병렬 실행을 막고,
상기 프로세서 파이프라인은 상기 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 되어 있는 것을 특징으로 하는 방법. - 제13항에 있어서,
상기 제 1 명령은 암호화 명령인 것을 특징으로 하는 방법. - 제14항에 있어서,
상기 민감성 핸들링 활성화 표시자는 단일 비트로 구성되는 것을 특징으로 하는 방법. - 명령들을 실행하기 위한 집적 회로로서, 상기 집적 회로는,
민감성 핸들링 활성화 표시자를 포함하는 레지스터와; 그리고
프로세서 코어를 포함하고,
상기 프로세서 코어는,
제 1 명령을 페치(fetch)하는 것과, 여기서 상기 명령은 상기 제 1 명령이 민감성 명령임을 표시하는 민감성 비트를 포함하고;
상기 민감성 핸들링 활성화 표시자의 현재 값 및 상기 민감성 비트에 근거하여, 상기 제 1 명령의 실행에 대한 제약을 호출하는 것과, 여기서 상기 제약은 상기 제 1 명령의 실행 동안 상기 제 1 명령과는 다른 선택된 명령들의 발행, 디스패치, 또는 실행 중 적어도 하나를 선택적으로 차단하는 것이며;
상기 제약 하에서 상기 제 1 명령을 실행하는 것과; 그리고
상기 민감성 핸들링 활성화 표시자가 여전히 활성화되어 있는 동안 상기 제약 없이 민감성 명령으로서 지정되지 않았던 제 2 명령을 실행하는 것을
수행하도록 되어 있는 것을 특징으로 하는 집적 회로. - 명령들을 실행하기 위한 집적 회로로서, 상기 집적 회로는,
프로세서 파이프라인과;
레지스터와; 그리고
쓰레드 해저드 회로(thread hazard circuitry)를 포함하고,
상기 프로세서 파이프라인은, 상기 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 되어 있고,
상기 레지스터는 민감성 핸들링 활성화 표시자를 포함하고,
상기 쓰레드 해저드 회로는,
제 1 쓰레드의 명령이 민감성 명령으로서 지정되었음을 검출하는 것과,
상기 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것과, 그리고
상기 민감성 명령의 검출 및 상기 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 상기 민감성 명령이 상기 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 상기 제 1 쓰레드와는 다른 쓰레드들의 명령들이 프로세서 파이프라인의 실행 유닛들을 사용하여 실행되는 것을 차단하기 위한 제약을 호출하는 것을
수행하도록 되어 있고,
상기 쓰레드 해저드 회로는 또한, 상기 민감성 핸들링 활성화 표시자가 여전히 활성화되어 있는 동안 상기 제약 없이 민감성 명령으로서 지정되지 않았던 상기 제 1 쓰레드의 명령들을 실행하도록 되어 있는 것을 특징으로 하는 집적 회로. - 명령들을 실행하기 위한 집적 회로로서, 상기 집적 회로는,
민감성 핸들링 활성화 표시자를 저장하기 위한 수단과;
제 1 프로세스의 제 1 명령이 민감성 명령으로서 지정되었음을 검출하는 것과, 상기 민감성 핸들링 활성화 표시자가 활성화되었는지 여부를 점검하는 것과, 그리고 상기 민감성 명령의 검출 및 상기 민감성 핸들링 활성화 표시자의 활성화에 응답하여, 상기 제 1 명령의 실행에 대한 제약을 호출하는 것을 수행하기 위한 수단과, 여기서 상기 제약은 상기 제 1 명령의 실행 동안 상기 제 1 명령과는 다른 선택된 명령들의 발행, 디스패치, 또는 실행 중 적어도 하나를 선택적으로 차단하는 것이며; 그리고
상기 제약 하에서 상기 제 1 명령을 실행하는 것과, 그리고 상기 민감성 핸들링 활성화 표시자가 여전히 활성화되어 있는 동안 상기 제약 없이 민감성 명령으로서 지정되지 않았던 상기 제 1 프로세스의 제 2 명령을 실행하는 것을 수행하기 위한 수단을 포함하는 것을 특징으로 하는 집적 회로. - 제26항에 있어서,
상기 집적 회로는, 상기 제 1 프로세스보다 더 높은 특권을 갖는 제 2 프로세스의 명령에 근거하여 상기 민감성 핸들링 활성화 표시자의 값을 업데이트하기 위한 수단을 포함하는 것을 특징으로 하는 집적 회로. - 제26항에 있어서,
상기 집적 회로는 프로세서 파이프라인을 포함하고,
상기 프로세서 파이프라인은 상기 프로세서 파이프라인의 실행 유닛들을 사용하여 병렬로 둘 이상의 쓰레드들로부터의 명령들을 실행하도록 되어 있고,
상기 제약은, 상기 제 1 명령이 상기 프로세서 파이프라인의 실행 유닛에 의해 실행되고 있는 동안, 다른 쓰레드들로부터의 명령들의 병렬 실행을 막는 것을 특징으로 하는 집적 회로. - 제26항에 있어서,
상기 민감성 명령은 암호화 명령인 것을 특징으로 하는 집적 회로.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962944245P | 2019-12-05 | 2019-12-05 | |
US62/944,245 | 2019-12-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210070936A KR20210070936A (ko) | 2021-06-15 |
KR102664370B1 true KR102664370B1 (ko) | 2024-05-28 |
Family
ID=76208983
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200168366A KR102664370B1 (ko) | 2019-12-05 | 2020-12-04 | 민감성으로서 명령들의 동적 지정 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11307857B2 (ko) |
JP (1) | JP7443641B2 (ko) |
KR (1) | KR102664370B1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11263015B1 (en) | 2019-12-05 | 2022-03-01 | Marvell Asia Pte, Ltd. | Microarchitectural sensitive tag flow |
US11372647B2 (en) | 2019-12-05 | 2022-06-28 | Marvell Asia Pte, Ltd. | Pipelines for secure multithread execution |
US11914524B2 (en) * | 2022-03-01 | 2024-02-27 | Qualcomm Incorporated | Latency management in synchronization events |
US12045615B1 (en) | 2022-09-16 | 2024-07-23 | Apple Inc. | Processing of synchronization barrier instructions |
CN117375792B (zh) * | 2023-02-24 | 2024-07-19 | 华为技术有限公司 | 侧信道检测的方法和装置 |
US20240320157A1 (en) * | 2023-03-22 | 2024-09-26 | Qualcomm Incorporated | Filtering remote data synchronization barrier (dsb) instruction execution in processor-based devices |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010108315A (ja) * | 2008-10-30 | 2010-05-13 | Fujitsu Ltd | 不揮発性メモリ・ドライバ |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050180675A1 (en) | 2004-02-12 | 2005-08-18 | Panorama Flat Limited, A Western Australia Corporation | Apparatus, method, and computer program product for structured waveguide including performance_enhancing bounding region |
US20080126766A1 (en) | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
US20090089564A1 (en) * | 2006-12-06 | 2009-04-02 | Brickell Ernie F | Protecting a Branch Instruction from Side Channel Vulnerabilities |
US9887833B2 (en) | 2012-03-07 | 2018-02-06 | The Trustees Of Columbia University In The City Of New York | Systems and methods to counter side channel attacks |
US9183399B2 (en) | 2013-02-14 | 2015-11-10 | International Business Machines Corporation | Instruction set architecture with secure clear instructions for protecting processing unit architected state information |
US9824225B1 (en) * | 2013-09-20 | 2017-11-21 | EMC IP Holding Company LLC | Protecting virtual machines processing sensitive information |
US9436603B1 (en) | 2014-02-27 | 2016-09-06 | Amazon Technologies, Inc. | Detection and mitigation of timing side-channel attacks |
KR102354990B1 (ko) | 2014-09-17 | 2022-01-24 | 삼성전자주식회사 | 캐시 메모리 시스템 및 그 동작방법 |
GB2544452B (en) | 2015-08-26 | 2019-09-11 | Advanced Risc Mach Ltd | Data processing systems |
US10771236B2 (en) | 2017-05-03 | 2020-09-08 | Seagate Technology Llc | Defending against a side-channel information attack in a data storage device |
US10534725B2 (en) | 2017-07-25 | 2020-01-14 | International Business Machines Corporation | Computer system software/firmware and a processor unit with a security module |
GB2566469B (en) | 2017-09-13 | 2021-03-24 | Advanced Risc Mach Ltd | Cache line statuses |
US10963567B2 (en) | 2017-10-12 | 2021-03-30 | Microsoft Technology Licensing, Llc | Speculative side-channel attack mitigations |
KR102424357B1 (ko) | 2017-10-24 | 2022-07-25 | 삼성전자주식회사 | 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 |
US10713075B2 (en) | 2017-11-30 | 2020-07-14 | International Business Machines Corporation | Workload manager control of dynamic thread mode switch |
US10936714B1 (en) | 2018-02-02 | 2021-03-02 | Itsec Analytics Pte. Ltd. | Systems and methods for preventing code insertion attacks |
GB2572158B (en) | 2018-03-20 | 2020-11-25 | Advanced Risc Mach Ltd | Random tag setting instruction |
US10860215B2 (en) | 2018-06-18 | 2020-12-08 | Arm Limited | Delay masking action for memory access requests |
US10740220B2 (en) | 2018-06-27 | 2020-08-11 | Microsoft Technology Licensing, Llc | Cache-based trace replay breakpoints using reserved tag field bits |
US10929535B2 (en) | 2018-06-29 | 2021-02-23 | Intel Corporation | Controlled introduction of uncertainty in system operating parameters |
US11144468B2 (en) | 2018-06-29 | 2021-10-12 | Intel Corporation | Hardware based technique to prevent critical fine-grained cache side-channel attacks |
US20200065112A1 (en) | 2018-08-22 | 2020-02-27 | Qualcomm Incorporated | Asymmetric speculative/nonspeculative conditional branching |
US11635965B2 (en) * | 2018-10-31 | 2023-04-25 | Intel Corporation | Apparatuses and methods for speculative execution side channel mitigation |
US20210096872A1 (en) * | 2019-09-27 | 2021-04-01 | Intel Corporation | Hardware for eliding security checks when deemed safe during speculative execution |
US11372647B2 (en) | 2019-12-05 | 2022-06-28 | Marvell Asia Pte, Ltd. | Pipelines for secure multithread execution |
-
2020
- 2020-10-27 US US17/081,099 patent/US11307857B2/en active Active
- 2020-11-25 JP JP2020195581A patent/JP7443641B2/ja active Active
- 2020-12-04 KR KR1020200168366A patent/KR102664370B1/ko active IP Right Grant
-
2022
- 2022-02-07 US US17/665,991 patent/US20220156076A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010108315A (ja) * | 2008-10-30 | 2010-05-13 | Fujitsu Ltd | 不揮発性メモリ・ドライバ |
Non-Patent Citations (1)
Title |
---|
D. Townley and D. Ponomarev, "SMT-COP: Defeating Side-Channel Attacks on Execution Units in SMT Processors"(2019.09.)* |
Also Published As
Publication number | Publication date |
---|---|
JP2021089727A (ja) | 2021-06-10 |
KR20210070936A (ko) | 2021-06-15 |
US11307857B2 (en) | 2022-04-19 |
US20210173651A1 (en) | 2021-06-10 |
US20220156076A1 (en) | 2022-05-19 |
JP7443641B2 (ja) | 2024-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102664370B1 (ko) | 민감성으로서 명령들의 동적 지정 | |
US11989285B2 (en) | Thwarting store-to-load forwarding side channel attacks by pre-forwarding matching of physical address proxies and/or permission checking | |
KR102702317B1 (ko) | 보안 멀티쓰레딩 실행을 위한 파이프라인들 | |
US11176055B1 (en) | Managing potential faults for speculative page table access | |
US9043559B2 (en) | Block memory engine with memory corruption detection | |
US11797673B2 (en) | Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception | |
US11868469B2 (en) | Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception | |
US11907369B2 (en) | Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception | |
US11733972B2 (en) | Processor that mitigates side channel attacks by providing random load data as a result of execution of a load operation that does not have permission to access a load address | |
US11734426B2 (en) | Processor that mitigates side channel attacks by prevents cache line data implicated by a missing load address from being filled into a data cache memory when the load address specifies a location with no valid address translation or no permission to read from the location | |
US11853424B2 (en) | Processor that mitigates side channel attacks by refraining from allocating an entry in a data TLB for a missing load address when the load address misses both in a data cache memory and in the data TLB and the load address specifies a location without a valid address translation or without permission to read from the location | |
US11442864B2 (en) | Managing prefetch requests based on stream information for previously recognized streams | |
US12118076B2 (en) | Physically-tagged data cache memory that uses translation context to reduce likelihood that entries allocated during execution under one translation context are accessible during execution under another translation context | |
US20240311150A1 (en) | Method for secure, simple, and fast speculative execution | |
US11625479B2 (en) | Virtually-tagged data cache memory that uses translation context to make entries allocated during execution under one translation context inaccessible during execution under another translation context | |
US11263015B1 (en) | Microarchitectural sensitive tag flow | |
US11403101B1 (en) | Introducing noise in threaded execution to mitigate cross-thread monitoring | |
US11822652B1 (en) | Prime and probe attack mitigation | |
US11604873B1 (en) | Noisy instructions for side-channel attack mitigation | |
US11663130B1 (en) | Cache replacement mechanisms for speculative execution | |
US11379368B1 (en) | External way allocation circuitry for processor cores | |
WO2024124036A1 (en) | A method for secure, simple, and fast speculative execution crossing trust domains |
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 |