KR102318740B1 - 보호 영역에서의 메모리 초기화 - Google Patents

보호 영역에서의 메모리 초기화 Download PDF

Info

Publication number
KR102318740B1
KR102318740B1 KR1020217012114A KR20217012114A KR102318740B1 KR 102318740 B1 KR102318740 B1 KR 102318740B1 KR 1020217012114 A KR1020217012114 A KR 1020217012114A KR 20217012114 A KR20217012114 A KR 20217012114A KR 102318740 B1 KR102318740 B1 KR 102318740B1
Authority
KR
South Korea
Prior art keywords
page
enclave
epc page
target
instruction
Prior art date
Application number
KR1020217012114A
Other languages
English (en)
Other versions
KR20210047975A (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 KR20210047975A publication Critical patent/KR20210047975A/ko
Application granted granted Critical
Publication of KR102318740B1 publication Critical patent/KR102318740B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring 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 executing in a restricted environment, e.g. sandbox or secure virtual machine
    • 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/74Protecting 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 operating in dual or compartmented mode, i.e. at least one secure mode
    • 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/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement

Abstract

보안 메모리 할당 기술들이 설명된다. 프로세서는 프로세서 코어 및 프로세서 코어와 주 메모리 사이에 연결되는 메모리 제어기를 포함한다. 주 메모리는 보안 페이지들을 포함하는 보호 영역을 포함한다. 프로세서는, 콘텐츠 복사 명령어에 응답하여, 애플리케이션 어드레스 공간의 보호 영역에서의 타겟 페이지를 초기화한다. 프로세서는, 콘텐츠 복사 명령어에 응답하여, 보호 영역에서의 복사될 소스 페이지의 콘텐츠를 또한 선택한다. 프로세서는, 콘텐츠 복사 명령어에 응답하여, 선택된 콘텐츠를 애플리케이션 어드레스 공간의 보호 영역에서의 타겟 페이지에 복사한다.

Description

보호 영역에서의 메모리 초기화{MEMORY INITIALIZATION IN A PROTECTED REGION}
본 개시내용은 컴퓨터 시스템들에 관한 것으로; 보다 구체적으로, 컴퓨터 시스템의 메모리에 저장되는 데이터의 보호에 관한 것이다.
컴퓨터들에서 실행되는 하드웨어 시스템들 및 소프트웨어 시스템들과 같은 컴퓨터 시스템들은 인터넷 또는 다른 통신 네트워크들을 통해 수신되는 악의적인 컴퓨터 프로그램들과 같은 하드웨어 공격들 또는 소프트웨어 공격들에 의해 악용될 수 있는 검출되지 않는 결함들을 종종 갖는다. 이러한 하드웨어 공격들 및 소프트웨어 공격들은 트로이 목마(Trojans), 바이러스들, 웜들(worms), 스파이웨어(spyware), 및 기타 맬웨어(malware)를 포함할 수 있다. 많은 기존 컴퓨터 보안 시스템들은 이러한 공격들이 컴퓨터 시스템의 임의의 부분을 손상시키는 것을 방지하려고 시도하는 것에 의해 하드웨어 공격들 및 소프트웨어 공격들에 대항한다.
컴퓨터 시스템에서의 프로세서들은 메모리에서의 민감한 데이터를 하드웨어 공격들 및 소프트웨어 공격들 양자 모두로부터 보호하도록 설계된다. 일부 프로세서들은 암호화(encryption), 무결성(integrity), 및 재생(replay) 보호를 위한 암호 메커니즘들(cryptographic mechanisms)을 제공한다. 메모리 암호화는 메모리 상주 데이터의 비밀성을 보호한다. 무결성 보호는 공격자가 메모리에서의 암호문(ciphertext)(즉, 암호화되지 않은 데이터인 평문에 반대인 것인, 암호화된 데이터)에 대한 어떠한 숨겨진 수정들이라도 야기하는 것을 방지한다. 재생 보호는 암호문의 임의의 검출되지 않은 일시적 치환을 제거한다. 암호화, 무결성, 및 재생 보호들이 없으면, 시스템에 물리적으로 액세스하는 공격자는 데이터 라인들의 스냅샷들을 기록하고, 데이터 라인들을 수정하고자 하는 이후 시점에 데이터 라인들을 재생하여, 컴퓨터 시스템을 공격들할 수 있다.
도 1은 일 실시예에 따라 보안 메모리를 구현하기 위한 MEE(memory encryption engine)를 구현하는 컴퓨팅 시스템을 도시하는 블록도이다.
도 2a는 일 실시예에 따라 애플리케이션 어드레스 공간을 포함하는 주 메모리를 도시한다.
도 2b는 일 실시예에 따라 선택된 콘텐츠 또는 코드를 갖는 하나 이상의 소스 페이지들을 보호 영역이 포함할 수 있다는 점을 도시한다.
도 2c는 일 실시예에 따라 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하는 방법을 도시하는 흐름도이다.
도 2d는 일 실시예에 따라 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하는 방법을 도시하는 흐름도이다.
도 3은 일 실시예에 따라 애플리케이션 어드레스 공간 내의 엔클레이브(enclave)를 도시한다.
도 4는 일 실시예에 따라 보류 EPC 페이지가 정상적인 EPC 페이지로 변환된 엔클레이브를 도시한다.
도 5는 일 실시예에 따라 상이한 권한 레벨 링들을 묘사한다.
도 6a는 일 실시예에 따라 순차적 파이프라인(in-order pipeline) 및 레지스터 재명명 스테이지, 비순차적 발행/실행 파이프라인(register renaming stage, out-of-order issue/execution pipeline)을 도시하는 블록도이다.
도 6b는 일 실시예에 따라 보안 메모리 재구획화를 구현하는 프로세서에 대한 마이크로 아키텍처를 도시하는 블록도이다.
도 7은 일 실시예에 따라 보안 메모리 재구획화를 수행하기 위한 로직 회로들을 포함하는 프로세서에 대한 마이크로 아키텍처의 블록도를 도시한다.
도 8은 일 구현에 따른 컴퓨터 시스템의 블록도이다.
도 9는 다른 구현에 따른 컴퓨터 시스템의 블록도이다.
도 10은 일 구현에 따른 시스템 온 칩의 블록도이다.
도 11은 컴퓨팅 시스템에 대한 블록도의 다른 구현을 도시한다.
도 12는 컴퓨팅 시스템에 대한 블록도의 또 다른 구현을 도시한다.
보안 메모리 할당 기술들이 설명된다. 프로세서는 프로세서 코어 및 프로세서 코어와 주 메모리 사이에 연결되는 메모리 제어기를 포함한다. 하드웨어 공격들이나 소프트웨어 공격들이 선택된 애플리케이션들을 침입하는 것을 방지하기 위해, 프로세서들은 선택된 애플리케이션이 실행되기 위한 보호 영역들을 제공할 수 있다. 전통적인 컴퓨터 보안 시스템들은 전체 소프트웨어 시스템의 상대적으로 낮은 보장 보호를 제공한다. 보호 영역들에 상주하지 않는 임의의 소프트웨어로부터의 보호 영역에 대한 액세스가 방지된다. 보호 영역들은 보호 영역에서의 소프트웨어에 대해 상대적으로 높은 보안을 제공한다.
일 예에서, 보호 영역들은 하드웨어 공격들 또는 소프트웨어 공격들이 보호 영역들 외부의 소프트웨어 시스템의 부분들을 손상시키는 것을 방지하려고 시도하지 않지만, 하드웨어 공격들 또는 소프트웨어 공격들이 보호 영역들 내의 소프트웨어 시스템의 부분들을 손상시키는 것을 중지시킨다. 따라서, 보호 영역들 외부의 소프트웨어 시스템 프로세스가 손상되면, 손상된 프로세스는 보호 영역 내의 소프트웨어 시스템 리소스들을 손상시키는 것이 방지될 수 있다. 보호 영역들의 한 가지 이점은 권한이 부여된 맬웨어 또는 높은 권한 레벨들에서 실행되는 다른 불법 소프트웨어 프로그램들이 존재하더라도 선택된 프로그램들에 대한 비밀성과 무결성을 제공하는 것이다.
도 1은 일 실시예에 따라 보안 메모리를 구현하기 위해 MEE(memory encryption engine)(150)을 구현하는 컴퓨팅 시스템(100)을 도시하는 블록도이다. 보안 메모리는 BIOS(basic input-output system)에 의한 부팅 시에 셋업될 수 있다. 프로세서(110)는, 본 명세서에 설명되는 바와 같이, OS(operating system) 또는 VMM(virtual machine monitor)와 같은, 프로세서(110) 상에서 실행중인 소프트웨어에 의해 안내되는 바와 같이, 메모리의 보호 영역에 보안 페이지들을 추가하기 위한 명령어들을 실행한다. 또한, MEE에 의해 제공되는 메모리 보호들은 프로세서가 비밀성, 무결성 및 재생 보호들을 제공하기 위해 어떠한 명령어들도 실행할 필요가 없다는 의미에서 명료하다. 예를 들어, 보안 페이지에 속하는 임의의 캐시 라인이 축출될 때, MEE는 이러한 보호들을 그 캐시 라인에 자동으로 제공한다. 프로세서(110)는, 이에 제한되는 것은 아니지만, 데스크톱 컴퓨터, 태블릿 컴퓨터, 랩톱 컴퓨터, 넷북, 노트북 컴퓨터, PDA(personal digital assistant), 서버, 워크스테이션, 휴대폰, 모바일 컴퓨팅 디바이스, 스마트폰, 인터넷 응용기기 또는 임의의 다른 타입의 컴퓨팅 디바이스를 포함하는 시스템에서 사용될 수 있다. 다른 실시예에서, 프로세서(110)는 SoC(system on a chip) 시스템에서 사용될 수 있다.
컴퓨팅 시스템(100)은 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수 가능한 PENTIUM III™, PENTIUM 4™, Xeon™, Itanium, XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초하는 처리 시스템들을 나타내지만, 다른 시스템들(다른 마이크로프로세서들을 갖는 PC들, 엔지니어링 워크스테이션들, 셋톱 박스들 등을 포함함)도 사용될 수 있다. 일 실시예에서, 컴퓨팅 시스템(100)은 워싱턴주 레드몬드 소재의 Microsoft Corporation으로부터 입수 가능한 WINDOWS™ 운영 체제의 한 버전을 실행할 수 있지만, 다른 운영 체제들(예를 들어, UNIX 및 Linux), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스들도 사용될 수 있다. 따라서, 본 발명의 실시예들은 하드웨어 회로와 소프트웨어의 임의의 명시적 조합에 제한되는 것은 아니다.
일 실시예는 단일의 프로세서 데스크톱 또는 서버 시스템의 맥락에서 설명될 수 있지만, 대안적인 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 컴퓨터 시스템(100)은 '허브' 시스템 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호들을 처리하는 프로세서(110)를 포함한다. 프로세서(110)는, 하나의 예시적인 예로서, CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는, 예를 들어, 디지털 신호 프로세서와 같은, 임의의 다른 프로세서 디바이스를 포함한다. 프로세서(110)는 프로세서(110)와 시스템(100)에서의 다른 구성요소들(명령어, 데이터, 또는 이들의 임의의 조합을 저장하는 메모리(120) 등) 사이에서 데이터 신호들을 전송하는 프로세서 버스에 연결된다. 시스템(100)의 다른 구성요소들은 그래픽 가속기, 메모리 제어기 허브, I/O 제어기 허브, 무선 송수신기, Flash BIOS, 네트워크 제어기, 오디오 제어기, 직렬 확장 포트, I/O 제어기 등을 포함할 수 있다. 이러한 엘리먼트들은 관련분야에 친숙한 자들에게 널리 알려진 그들의 종래의 기능들을 수행한다.
일 실시예에서, 프로세서(110)는 L1(Level 1) 내부 캐시 메모리(160)를 포함한다. 아키텍처에 따라, 프로세서(110)는 단일의 내부 캐시 또는 다수 레벨들의 내부 캐시들을 가질 수 있다. 다른 실시예들은 특정 구현 및 필요들에 따라 내부 캐시와 외부 캐시 양자 모두의 조합을 포함한다. 레지스터 파일은 상이한 타입들의 데이터를, 정수 레지스터들, 부동 소수점 레지스터들, 벡터 레지스터들, 뱅크드 레지스터들(banked registers), 쉐도우 레지스터들(shadow registers), 체크포인트 레지스터들(checkpoint registers), 상태 레지스터들, 구성 레지스터들, 및 명령어 포인터 레지스터를 포함하는 다양한 레지스터들에 저장하기 위한 것이다.
실행 유닛은 부동 소수점 유닛을 가질 수 있거나 그렇지 않을 수 있다는 점이 주목되어야 한다. 프로세서(110)는, 일 실시예에서, 실행될 때, 특정 마이크로명령어들에 대한 알고리즘들을 수행하거나 또는 복잡한 시나리오들을 취급해야 하는 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함한다. 여기서, 마이크로코드는 프로세서(110)에 대한 로직 버그들(bugs)/픽스들(fixes)을 취급하기 위해 잠재적으로 업데이트 가능하다.
실행 유닛의 대안적인 실시예들은 마이크로 제어기들, 임베디드 프로세서들, 그래픽 디바이스들, DSP들, 및 다른 타입들의 로직 회로들에서 또한 사용될 수 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 DRAM(dynamic random access memory) 디바이스, SRAM(static random access memory) 디바이스, 플래시 메모리 디바이스, 또는 다른 메모리 디바이스를 포함한다. 메모리(120)는 프로세서(110)에 의해 실행되어야 하는데이터 신호들에 의해 표현되는 명령어들 및/또는 데이터를 저장한다. 프로세서(110)는 프로세서 버스를 통해 메모리(120)에 연결된다. MCH(memory controller hub)와 같은, 시스템 로직 칩이 프로세서 버스 및 메모리(120)에 연결될 수 있다. MCH는 명령어 및 데이터 저장을 위한 그리고 그래픽 명령, 데이터 및 텍스처들의 저장을 위한 메모리(120)로의 고대역폭 메모리 경로를 제공할 수 있다. MCH는 프로세서(110), 메모리(120), 및 시스템(100)에서의 다른 구성요소들 사이에서 데이터 신호들을 보내기 위해 그리고, 예를 들어, 프로세서 버스, 메모리(120) 및 시스템 I/O 사이에서 데이터 신호들을 브리징하기 위해 사용될 수 있다. MCH는 메모리 인터페이스를 통해 메모리(120)에 연결될 수 있다. 일부 실시예들에서, 시스템 로직 칩은 AGP(Accelerated Graphics Port) 인터커넥트를 통해 그래픽 제어기에 연결하기 위한 그래픽 포트를 제공할 수 있다. 시스템(100)은 ICH(I/O controller hub)를 또한 포함할 수 있다. ICH는 로컬 I/O 버스를 통해 일부 I/O 디바이스들에 대한 직접 접속들을 제공한다. 로컬 I/O 버스는 주변기기들을 메모리(120), 칩셋, 및 프로세서(110)에 접속하기 위한 고속 I/O 버스이다. 일부 예들은 오디오 제어기, 펌웨어 허브(플래시 BIOS), 무선 송수신기, 데이터 스토리지, 사용자 입력 및 키보드 인터페이스들을 포함하는 레거시 I/O 제어기, USB(Universal Bus)와 같은 직렬 확장 포트, 및 네트워크 제어기이다. 데이터 스토리지 디바이스는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스, 또는 다른 대용량 스토리지 디바이스를 포함할 수 있다.
시스템의 다른 실시예에 대해, 위에 설명된 프로세서 코어(140)에 의해 실행된 명령어들은 시스템 온 칩과 함께 사용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리로 이루어진다. 하나의 이러한 시스템을 위한 메모리는 플래시 메모리이다. 플래시 메모리는, 프로세서 및 다른 시스템 구성요소들과 동일한 다이 상에 위치될 수 있다. 추가적으로, 메모리 제어기 또는 그래픽스 제어기와 같은 다른 로직 블록들이 시스템 온 칩 상에 또한 위치될 수 있다.
프로세서(110)는 시스템의 명령어들을 실행하는 하나 이상의 프로세서 코어들(140)을 포함한다. 프로세서 코어(140)는, 이에 제한되는 것은 아니지만, 명령어들을 페치하는 프리페치 로직(pre-fetch logic), 명령어들을 디코드하는 디코드 로직(decode logic), 명령어들을 실행하는 실행 로직(execution logic) 등을 포함한다. 프로세서(110)는 명령어들 및/또는 데이터를 캐싱하는 캐시(160)를 포함한다. 캐시(160)는, 이에 제한되는 것은 아니지만, 레벨 1, 레벨 2 및 LLC(last level cache)(165), 또는 프로세서(110) 내의 캐시 메모리의 임의의 다른 구성을 포함한다. 다른 실시예에서, 컴퓨팅 시스템(100)은, 본 명세서에 설명되는 실시예에 따라, 데이터를 처리하기 위한 알고리즘들을 수행하는 로직을 포함하는 실행 유닛들을 이용하는 프로세서(110)와 같은 구성요소를 포함한다.
메모리 제어기(130)는 프로세서(110)가 휘발성 메모리 및/또는 비-휘발성 메모리를 포함하는 주 메모리(120)에 액세스하여 그와 통신할 수 있게 하는 기능들을 수행한다. 일 실시예에서, 메모리 제어기(130)는 MEE(150)를 포함하는 시스템 에이전트(system agent)(180)에 연결된다. 일 실시예에서, MEE(150)는 주 메모리(120)의 보호 영역(125)에 들어가고 그로부터 나오는 데이터 라인들의 암호화, 복호화 및 인증을 수행하기 위해 마지막 레벨 캐시(165)와 메모리 제어기(130) 사이에 위치된다. MEE(150)는 프로세서 다이 상에 위치되는 반면, 메모리(120)는 프로세서 다이를 벗어나 위치된다.
본 발명의 일 실시예에 따르면, MEE(150)는 보호 영역(125)에 대한 액세스 대기 시간(access latency)을 개선하기 위해 다수의 메모리 판독 요청들을 병렬로 처리한다. MEE(150)는 암호화 씨드(encryption seed)가 시간적으로도 그리고 공간적으로도 데이터 라인에 대해 고유할 것을 요구하는 카운터 모드 암호화(counter mode encryption)를 수행한다. 공간적 고유성(spatial uniqueness)은 액세스될 데이터 라인의 어드레스를 사용하는 것에 의해 달성될 수 있는 반면, 시간적 고유성(temporal uniqueness)은 데이터 라인의 버전으로서 역할을 하는 카운터를 사용하는 것에 의해 달성될 수 있다. 일 실시예에서, MEE(150)는, 트리의 루트만이 다이 상에 저장되고 신뢰의 루트(root of trust)(즉, 신뢰 경계(trust boundary))를 형성하는 카운터 트리 구조를 사용하여, 주 메모리(120)의 보호 영역(125)에 있는 데이터 라인들을 또한 보호한다. 데이터 라인들의 버전들은 이러한 카운터 트리 구조의 일부이다. 대안적으로, 재생 보호를 위해 다른 보호 메커니즘들이 사용될 수 있다. 예를 들어, 보안 캐시 라인들과 관련된 MAC들(Message Authentication Codes)이 다이 상에 저장될 수 있는데, 그 이유는 성공적인 재생 공격들이 데이터 라인 및 그의 관련된 MAC 양자 모두를 재생할 필요가 있을 것이기 때문이다. 그러나, 이러한 해결책은 엄청나게 높은 온-다이 스토리지 요건들을 갖는다.
일 실시예에서, 메모리 암호화는 주 메모리(120)에 대한 메모리 상주 데이터의 비밀성을 보호할 수 있다. 메모리 암호화는 데이터 라인들이 프로세서에 들어가고 그로부터 나가기 때문에 공격자가 데이터 라인들을 몰래 관찰하려고 시도하는 소극적 공격들(passive attacks)에 대해 보호하도록 주로 설계된다. 일부 프로세서들은 민감한 데이터를, 그 데이터가 메모리의 보호 영역에 저장되기 전에, 암호화하는 암호화 모듈을 포함한다. 보호 영역에 대한 메모리 판독시, 데이터 라인은 프로세서에 피드되기 전에 복호화된다. 암호화 및 복호화 알고리즘들은 사용자에 의해 요구되는 보안 레벨에 기초하여 선택될 수 있다.
다른 실시예에서, 주 메모리(120)는 하나 이상 보호 영역들(125)(본 명세서에서 보안 메모리 범위 또는 MEE 영역이라고도 함)을 포함하는 영역들로 분할된다. 각각의 영역은 다수의 섹션들, EPC(enclave page cache) 섹션, 재생-보호 및 무결성 메타데이터의 하드웨어 예약 섹션, 및 구현 내부에 있는 다른 하드웨어 예약 섹션을 갖는다. 일 실시예에서는, 보호 영역(MEE 영역)이 고정된 범위일 수 있거나, 다수의 보호 영역들(MEE 영역들)이 다수의 고정된 범위들의 세트일 수 있다. 다른 실시예에서는, 전체 메모리가 다수의 MEE 영역들로 분할되는 플렉시블 메모리로서 구성될 수 있다. 기동(startup)시, 전체 메모리가 비-보안으로서 시작하고, 시스템 소프트웨어는, 시스템 상의 보안 메모리에 대한 요구에 의해 안내되는 바와 같이, 이를 변환한다. 본 명세서에 설명되는 바와 같이, 주 메모리(120)는 다수의 보안 MEE 영역들을 포함할 수 있고, 비-보안 메모리 범위들을 또한 포함할 수 있다.
실시예들이 컴퓨터 시스템에 제한되는 것은 아니다. 본 발명의 대안적인 실시예들은 핸드헬드 디바이스들과 같은 다른 디바이스들 및 임베디드 애플리케이션들에서 사용될 수 있다. 핸드헬드 디바이스들의 일부 예들은 휴대폰들, 인터넷 프로토콜 디바이스들, 디지털 카메라들, PDA들, 및 핸드헬드 PC들을 포함한다. 임베디드 애플리케이션들은, 마이크로 제어기, DSP(digital signal processor), 시스템 온 칩, 네트워크 컴퓨터들(NetPC), 셋톱 박스들, 네트워크 허브들, WAN(wide area network) 스위치들, 또는 적어도 하나의 실시예에 따라 하나 이상의 명령어들을 수행할 수 있는 임의의 다른 시스템을 포함할 수 있다.
도 2a는 애플리케이션 어드레스 공간(210)을 포함하는 주 메모리(220)(도 1에 도시되는 바와 같음)를 도시한다. 도 2는 애플리케이션 어드레스 공간(210)이 운영 체제 코드(230)에 할당되는 메모리, 메모리의 보호 영역(240)(본 명세서에서는 엔클레이브들이라고도 함), 및 메모리의 비보호 영역(250)을 포함할 수 있다는 점을 더욱 도시한다. 일 실시예에서, 메모리의 비보호 영역(250)은 애플리케이션 코드(260 및 270)를 포함할 수 있다. 다른 실시예에서, 엔클레이브(240)는 보안 페이지들을 포함할 수 있고, 메모리의 비보호 영역(250)은 비-보안 페이지들을 포함할 수 있다. 일 예에서, 엔클레이브(240)의 보안 페이지들은 엔트리 테이블(242), 엔클레이브 힙(244), 엔클레이브 스택(246), 및 엔클레이브 코드(248)를 포함할 수 있다. 엔트리 테이블(242)은 보호 영역(240)에서의 오브젝트들의 세트에 대한 참조들의 테이블일 수 있다. 엔클레이브 힙(244)은 동적으로 할당되는 메모리가 보호 영역(240)에 위치될 수 있는 메모리의 부분일 수 있다. 엔클레이브 스택(246)은 로컬 변수들이 보호 영역(240)에 위치될 수 있는 메모리 스택일 수 있다.
엔클레이브(240)는 제3자 비밀들을 하드웨어 공격들 및 소프트웨어 공격들 양자 모두로부터 보호하도록 설계된다. 엔클레이브는 엔클레이브 비밀들(enclave secrets)이 플랫폼 메모리에 상주할 때 암호화되어 저장되는 것을 보장하는 것에 의해 엔클레이브 비밀들의 비밀성을 보호할 수 있다. 하드웨어 공격들로부터의 완전한 보호를 제공하기 위해, 엔클레이브는 무결성 보호 및 재생 보호를 제공한다. 무결성 보호 및 재생 보호가 없으면, 시스템에 물리적으로 액세스하는 공격자는 엔클레이브 캐시 라인들의 스냅샷들을 기록하여 이후 시점에 이들을 재생할 수 있다. 엔클레이브 보호들을 달성하기 위해, 엔클레이브는 암호화, 무결성, 및 재생 보호를 위한 암호 메커니즘들을 제공하는 MEE(memory encryption engine)를 이용할 수 있다. MEE는 보안 페이지들이 메모리에 있을 때 그들에 대해 암호 기능성을 구현하는 하드웨어 유닛이다. 보다 구체적으로, MEE는 프로세서 밖으로 축출되는 임의의 캐시 라인이 보안 페이지에 속하면 그 캐시 라인을 암호화할 수 있고, MEE는 보안 페이지들에 대한 무결성 보호 및 재생 보호를 또한 제공한다. 종래의 전략들은 부팅 시에 정적으로 일정 범위의 플랫폼 메모리를 예약하고, 이 범위의 메모리에 대해서만 암호 보호들을 시행한다. 이러한 보안 메모리 범위는 EPC(Enclave Page Cache)라고 지칭된다. 엔클레이브 메모리 요청들은 EPC로부터 충족된다.
전통적으로, 메모리 관리 설비들 또는 메모리 제어기들은 고정된 선형 어드레스에 메모리 페이지들을 할당하여, 예를 들어, 메모리 페이지의 선형 어드레스는 메모리 페이지들에 저장되는 데이터의 수명 동안 변경될 수 없다. 보안 메모리의 정적 할당은 보안 메모리 요건들이 오버타임을 변경하면 문제점들을 생성할 수 있다. 예로서, 주간에는 트랜잭션 처리를 수행하고 야간에는 영화 스트리밍으로 전환하는데이터 센터는 데이터 센터 상에서 실행중인 엔클레이브 작업부하들에 기초하여 보안 메모리에 대해 완전히 상이한 요건들을 가질 수 있다. 일 구현에서는, 시스템 메모리의 128 메가바이트(MBs)가 EPC로서 예약된다. 그러나, 보안 서버 애플리케이션들이 엔클레이브를 효율적으로 사용할 수 있게 하기 위해, 큰 EPC가 필요할 것이다. 현재의 정적 구획화에 의하면, 이것은 수 기가바이트 구획화의 시스템 메모리가 비-보안 사용들을 위해 회수될 수 없는 EPC로서 예약될 것을 필요로 할 것이다. 추가로, 시스템 메모리가 제한된 모바일 디바이스들은 보안 메모리가 비-보안 사용들을 위해 회수될 수 있게 하기 위해 메모리의 동적 재구획화를 요구할 수 있다. 대안적으로, 다른 양의 시스템 메모리가 EPC로서 예약될 수 있다.
동적 EPC 아키텍처를 사용하는 본 명세서에 설명되는 실시예들은 EPC 메모리의 동적 재할당을 허용하여, 많은 양의 EPC 메모리를 요구하는 서버들 및 메모리 시스템들이 제한된 모바일 플랫폼에서 엔클레이브 구현들을 보다 효율적이게 한다. IA(interface architecture)의 SGX들(Software Guard Extensions)은 보호 실행 영역 또는 보호 영역(240)에서 주 메모리의 동적 관리를 가능하게 할 수 있다. SGX는 프로세서들에 대한 메모리 액세스를 위한 명령어들 및 메커니즘들의 세트이다. 일 실시예에서, SGX는 애플리케이션이 보호 영역 또는 엔클레이브를 인스턴스화할 수 있게 한다. 일 예에서는, 메모리 페이지들을 비우고(메모리 페이지들의 콘텐츠를 제로화하는 것을 포함함) 나서 제로화된 메모리 페이지들을 새로운 선형 어드레스에 재할당하는 것에 의해 SGX 아키텍처에서의 다른 선형 어드레스에 메모리 페이지들이 재할당될 수 있다. SGX의 한 가지 이점은 더 높은 권한 레벨들에서 실행되는 불법 소프트웨어에 의한 비인가 액세스 또는 수정으로부터 민감한 데이터를 보호하는 것이다. SGX의 또 다른 이점은 애플리케이션들이 합법적인 시스템 소프트웨어의 기능을 중단하지 않고도 민감한 코드 및 데이터의 비밀성과 무결성을 보존할 수 있게 하여 플랫폼 리소스들의 사용을 스케줄링하고 관리하는 것이다.
일 예에서, 동적 라이브러리 로더 알고리즘들은 메모리 페이지 로딩 프로세스 동안 사적 선형 어드레스에 메모리 페이지들을 할당하고 나서, 메모리 페이지들을 타겟 선형 어드레스에 재배치할 수 있다. 일 예에서, 동적 라이브러리 로더들은 SGX에 의해 제공되는 보호 영역들에서 실행될 수 있다. 보호 실행 영역에서 실행되는 동적 라이브러리 로더들의 한 가지 이점은 SGX 애플리케이션들에서의 성능 이득들 및 효율적인 프로그래밍 모델을 증가시키는 것이다. SGX 엔클레이브들 내에서 실행되는 동적 라이브러리 로더들의 다른 이점은 광범위한 종류의 소프트웨어가 SGX 내에서 실행될 수 있게 하고, 기존 소프트웨어 모델들을 크게 변경하지 않고도 기존 애플리케이션들의 성능을 향상시키는 것이다.
일 실시예에서, SGX는 메모리의 특정 부분들에 대한 액세스를 방지하는 것에 의해 바이러스들 및 맬웨어에 대한 보호 장치들을 제공할 수 있다. 예를 들어, 민감한 또는 제한된 데이터 및/또는 코드가 보호 영역에 배치될 수 있고, 데이터 및/또는 코드는 엔클레이브 외부에서 볼 수 없다. SGX의 한 가지 이점은 게스트 운영 체제 내에서 암호화가 사용되는 가상 컴퓨팅 환경들 또는 VM들(virtual machines)에 대한 것이다. 이러한 예에서, 데이터 및/또는 코드를 액세스되거나 또는 복사되는 것으로부터 보호하기 위해, 데이터베이스 페이지들이 SGX 보호 영역들에 저장될 수 있고 및/또는 운영 체제 캐시들이 SGX 엔클레이브들 보호 영역들에 저장될 수 있다.
도 2b는 보호 영역(240)이 선택된 콘텐츠 또는 코드를 갖는 하나 이상의 소스 페이지들(282)를 포함할 수 있다는 점을 도시한다. 도 2b는 엔클레이브(240)가 엔클레이브(240), 예를 들어 확장된 엔클레이브(280)의 메모리 사이즈를 증가시키기 위해 보호 영역에 추가되는 하나 이상의 타겟 페이지들(284)을 가질 수 있다는 점을 더욱 도시한다. 일 실시예에서, 하나 이상의 소스 페이지들(282)의 선택된 콘텐츠가 하나 이상의 타겟 페이지들(284)에 복사될 수 있다. 도 2b의 나머지 부분들은 도 2a와 동일하다.
도 2c는 일 실시예에 따라 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하는 방법(200)을 도시하는 흐름도이다. 방법(200)은 하드웨어(예를 들어, 회로, 전용 로직, 프로그램 가능 로직, 마이크로코드 등), (프로세서상에서 실행되는 명령어들과 같은) 소프트웨어, 펌웨어 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일 실시예에서는, 도 1의 프로세서(110)가 방법(200)을 수행한다. 대안적으로, 도 1의 컴퓨팅 시스템(100)의 다른 구성요소들이 방법(200)의 동작들의 일부 또는 전부를 수행할 수 있다. 다른 실시예에서는, 도 6a 또는 6b의 프로세서(600)가 방법(200)을 수행한다. 다른 실시예에서는, 도 7의 프로세서(700)가 방법(200)을 수행한다. 다른 실시예에서는, 도 8의 프로세서들(870 및/또는 880)이 방법(200)을 수행한다. 다른 실시예에서는, 도 9의 프로세서들(970 및/또는 980)이 방법(200)을 수행한다. 다른 실시예들에서는, 도 10의 코어들(1002) 중 하나 이상이 방법(200)을 수행한다. 다른 실시예에서는, 도 11의 코어들(1106 및/또는 1107)이 방법(200)을 수행한다. 다른 실시예에서는, 도 12의 처리 디바이스(1202)가 방법(200)을 수행한다. 대안적으로, 도 1 및/또는 도 6 내지 도 12의 컴퓨팅 시스템들의 다른 구성요소들이 방법(200)의 동작들의 일부 또는 전부를 수행할 수 있다.
도 2c를 참조하면, 방법(200)은, 처리 로직에 의해, 프로세서 로직에 연결되는 주 메모리의 보호 영역에서의 소스 페이지의 선택된 콘텐츠를 복사하라는 콘텐츠 복사 명령어를 디코드하는 것으로 시작한다(블록 210). 처리 로직은 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하라는 콘텐츠 복사 명령어를 실행한다. 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 보호 영역의 타겟 페이지를 할당한다(블록 220). 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 복사될 보호 영역의 소스 페이지의 콘텐츠를 선택한다(블록 230). 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 선택된 콘텐츠를 보호 영역에서의 타겟 페이지에 복사한다.
도 2d는 일 실시예에 따라 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하는 방법(250)을 도시하는 흐름도이다. 방법(250)은 하드웨어(예를 들어, 회로, 전용 로직, 프로그램 가능 로직, 마이크로코드 등), (프로세서상에서 실행되는 명령어들과 같은) 소프트웨어, 펌웨어 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일 실시예에서는, 도 1의 프로세서(110)가 방법(250)을 수행한다. 대안적으로, 도 1의 컴퓨팅 시스템(100)의 다른 구성요소들이 방법(250)의 동작들의 일부 또는 전부를 수행할 수 있다. 다른 실시예에서는, 도 6a 또는 6b의 프로세서(600)가 방법(250)을 수행한다. 다른 실시예에서는, 도 7의 프로세서(700)가 방법(250)을 수행한다. 다른 실시예에서는, 도 8의 프로세서들(870 및/또는 880)이 방법(250)을 수행한다. 다른 실시예에서는, 도 9의 프로세서들(970 및/또는 980)이 방법(250)을 수행한다. 다른 실시예에서는, 도 10의 코어들(1002) 중 하나 이상이 방법(250)을 수행한다. 다른 실시예에서는, 도 11의 코어들(1106 및/또는 1107)이 방법(250)을 수행한다. 다른 실시예에서는, 도 12의 처리 디바이스(1202)가 방법(250)을 수행한다. 대안적으로, 도 1 및/또는 도 6 내지 도 12의 컴퓨팅 시스템들의 다른 구성요소들이 방법(250)의 동작들의 일부 또는 전부를 수행할 수 있다.
도 2d를 참조하면, 방법(250)은 처리 로직에 의해 타겟 페이지의 승인들을 업데이트하는 것으로 시작한다(블록 260). 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 타겟 페이지의 사용이 완료되었음을 표시하기 위해 타겟 페이지의 보류 비트를 클리어한다(블록 270). 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 타겟 페이지에 대한 EDMM(enclave dynamic memory management) 잠금을 해제한다(블록 280).
일 실시예에서는, 처리 로직이 타겟 페이지의 승인들을 수정한다. 다른 실시예에서는, 처리 로직이 소스 페이지의 선택된 소스 파라미터들을 검증한다. 다른 실시예에서는, 처리 로직이 타겟 페이지의 선택된 타겟 파라미터들을 검증한다. 다른 실시예에서는, 소스 페이지의 선택된 소스 파라미터들을 검증하는 처리 로직이, 소스 페이지의 판독가능 상태를 결정하는 것 및 소스 페이지의 ELRange(enclave linear address range)를 결정하는 것을 더 포함한다. 다른 실시예에서에서는, 타겟 페이지의 선택된 타겟 파라미터들을 검증하는 처리 로직이, 타겟 페이지의 기입가능 상태를 결정하는 것; 타겟 페이지의 ELRange를 결정하는 것; 및 보호 영역 내에서 타겟 페이지의 위치를 결정하는 는 것을 더 포함한다. 다른 실시예에서는, 타겟 페이지의 선택된 타겟 파라미터들을 검증하는 처리 로직이, EDMM 잠금을 취득하는 것; 타겟 페이지의 상태가 정상적이고 보류중이라는 점을 확인하는 것; 및 타겟 페이지가 정확한 선형 어드레스를 통해 액세스된다는 점을 확인하는 것을 더 포함한다.
(도 2c 및 도 2d에서와 같이) 처리 로직은 보안 페이지들을 주 메모리(120)에서의 보호 영역(125)에 추가하기 위해 메모리 할당 프로세스를 수행할 수 있다. 처리 로직은 타겟 페이지를 보호 영역에 추가하라는 (EAUG 명령어와 같은) 페이지 추가 명령어를 사용할 수 있다. 일 실시예에서, 추가되는 타겟 페이지는 페이지 추가 명령어가 실행될 때 보류 상태를 갖는다. 처리 로직은 페이지 추가 명령어에 응답하여, 페이지 수락 명령어가 언제 수신될 지를 결정할 수 있고, 페이지 수락 명령어가 수신될 때 타겟 페이지의 상태를 보류로부터 변경할 수 있다. 처리 로직은 페이지 추가 명령어에 응답하여, 타겟 페이지를 보호 영역에 추가할 수 있다. 처리 로직은 타겟 페이지의 권한 레벨을 결정할 수 있고, 타겟 페이지의 권한 레벨이 0일 때 페이지 추가 명령어를 수행할 수 있다.
처리 로직은 보호 영역에서의 소스 페이지의 콘텐츠를 동일한 보호 영역에서의 타겟 페이지에 복사하라는 콘텐츠 복사 명령어를 사용할 수 있다. 일 실시예에서, 처리 로직은 콘텐츠 복사 명령어에 응답하여 보호 영역의 애플리케이션 어드레스 공간에서의 타겟 페이지를 초기화할 수 있다. 다른 예에서, 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 복사될 보호 영역에서의 소스 페이지의 콘텐츠를 선택할 수 있다. 다른 예에서, 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 선택된 콘텐츠를 보호 영역의 애플리케이션 어드레스 공간에서의 타겟 페이지에 복사할 수 있다. 일 실시예에서, 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 애플리케이션이 비활성이거나 실행 중이 아닌 동안 선택된 콘텐츠를 타겟 페이지에 복사할 수 있으며, 이러한 애플리케이션은 주 메모리(120)의 보호 영역(125)에 저장된다. 일 실시예에서, 처리 로직은, 콘텐츠 복사 명령어에 응답하여, 애플리케이션이 실행되는 동안 선택된 콘텐츠를 타겟 페이지에 복사할 수 있으며, 이러한 애플리케이션은 주 메모리(120)의 보호 영역(125)에 저장된다. 애플리케이션이 실행되는 것일 수 있는 동안 처리 로직이 선택된 콘텐츠를 타겟 페이지에 복사하는 것의 이점은 기존 애플리케이션들 또는 운영 체제를 방해하지 않고도 추가적인 보안 보호들을 가능하게할 수 있다는 것일 수 있다.
일 실시예에서, 페이지 추가 명령어는 메모리 파라미터 정보를 포함할 수 있으며, 이러한 메모리 파라미터 정보는, PAGEINFO(page information) 구조의 유효 어드레스 및 EPC 페이지의 유효 어드레스를 포함한다. 다른 실시예에서, PAGEINFO 구조는 타겟 페이지의 SECINFO(security information) 구조 및 SRCPAGE(source page)의 페이지 정보 구조를 포함한다.
일 실시예에서, 처리 로직은 페이지 추가 명령어에 응답하여, 비어 있는 EPC 페이지를 보호 영역의 섹션에서의 하나 이상의 선택된 SECS 페이지들과 관련시키고; EPCM(enclave page cache map)에 보호 영역 오프셋 속성 및 보호 영역 보안 속성을 저장하고; 타겟 페이지의 콘텐츠를 제로화할 수 있다. 다른 실시예에서, 프로세서 코어는 페이지 수락 명령어가 언제 수신되는지 결정할 수 있다. 일 예에서, 타겟 페이지의 상태는 프로세서 코어가 페이지 수락 명령어를 수신할 때까지 보류로 남는다. 이러한 예에서, 처리 로직은 페이지 수락 명령어가 수신될 때 보호 영역에 타겟 페이지를 추가한다.
일 실시예에서, 콘텐츠 복사 명령어는 SECINFO 구조를 포함하는 메모리 파라미터 정보를 포함할 수 있으며, 이러한 SECINFO 구조는 선택된 콘텐츠가 복사될 때 수정되는 타겟 페이지에 대해 선택되는 승인 레벨 및 타겟 페이지에 대해 요청되는 타입; 콘텐츠가 복사될 타겟 페이지의 유효 어드레스; 및 콘텐츠가 복사된 소스 페이지의 유효 어드레스를 명시한다. 다른 실시예에서, 소스 페이지는 유효 EPC 페이지일 수 있고, 차단 상태, 보류 상태, 또는 수정 상태에 있지 않는 PT_REG 타입일 수 있다. 다른 실시예에서, 타겟 페이지는 유효 EPC 페이지일 수 있고, 보류 상태에 있지만 수정 상태 또는 차단 상태에 있지 않는 PT_REG 타입일 수 있다.
프로세서 코어상에서 실행되는 소프트웨어는 메모리 할당 프로세스를 사용하여 안전하게 초기화된 메모리 페이지를 안전하게 재배치할 수 있다. 처리 로직은 페이지 추가 명령어(EAUG 명령어)에 응답하여, 기존 엔클레이브에 판독/기입 액세스가능 메모리 페이지를 추가할 수 있다. EAUG 명령어의 예가 아래에 보여진다:
Figure 112021047401205-pat00001
일 실시예에서, 기존 엔클레이브는 판독/기입 액세스가능 메모리 페이지가 추가될 때 실행될 수 있다. 일 예에서, 프로세서 코어는, EAUG 명령어에 응답하여, 비어 있는 EPC 메모리 페이지를 EPC에 상주하는 주어진 SECS 페이지와 관련시킬 수 있다. 이러한 예에서, 프로세서 코어는, EAUG 명령어에 대한 응답하여, EPCM에 엔클레이브 오프셋 및 보안 속성들을 저장하고 EPC 메모리 페이지의 콘텐츠를 제로화할 수 있다. 일 실시예에서, 프로세서 코어는 EPC 메모리 페이지의 권한 레벨을 결정할 수 있고, 타겟 페이지의 권한 레벨이 0일 때 EAUG 명령어를 수행할 수 있다. 다른 실시예에서, 프로세서 코어는 타겟 페이지의 권한 레벨이 0이 아닐 때 EAUG 명령어를 수행하지 않을 수 있다. 다른 실시예에서, 프로세서 코어는 EPC 메모리 페이지의 권한 레벨을 결정하지 않고 EAUG 명령어를 수행할 수 있다.
일 예에서, EAUG 명령어는 EAUG 메모리 파라미터 정보를 포함할 수 있다. EAUG 메모리 파라미터 정보의 예가 아래에 보여진다:
Figure 112021047401205-pat00002
RBX(BX register)는 PAGEINFO(page information) 구조의 유효 어드레스를 포함한다. RCX(CX register)는 EPC 페이지의 유효 어드레스를 포함한다. 일 실시예에서, PAGEINFO 구조의 SRCPAGE 필드 및 SECINFO 필드는 0일 수 있다. 다른 예에서, EAUG 명령어는 전술한 표에 명시적으로 포함되지 않는 다른 EAUG 메모리 파라미터 정보를 포함할 수 있다. 다른 예에서, EAUG 명령어는 메모리 파라미터 정보를 포함하지 않을 수 있다.
일 실시예에서, 프로세서 코어는 EAUG 명령어에 응답하여, 피연산자가 올바르게 정렬되지 않을 때; 지원되지 않는 보안 속성들이 설정될 때; 선택된 SECS(SGX enclave control structure) 페이지들이 다른 스레드에 의해 잠길 때; 페이지 추가 명령어가 타겟 EPC 페이지 또는 소스 EPC 페이지의 유효 어드레스를 포함하지 않을 때; 타겟 EPC 페이지 또는 소스 EPC 페이지가 다른 스레드에 의해 잠길 때; 타겟 EPC 페이지 또는 소스 EPC 페이지가 현재 유효 상태에 있을 때; 또는 선택된 보호 영역 오프셋이 보호 영역의 유효 어드레스 범위 밖에 있을 때를 포함하는, 하나 이상의 선택된 조건들이 발생할 때, 타겟 EPC 페이지를 엔클레이브에 추가하는 것에 실패할 수 있다.
일 예에서, EAUG 명령어는 EAUG 임시 변수들을 포함할 수 있다. EAUG 임시 변수들의 예가 아래에 보여진다:
Figure 112021047401205-pat00003
대안적으로, EAUG 명령어는 상이한 타입들 또는 사이즈들의 다른 변수들을 포함할 수 있고, 다른 예에서, EAUG 명령어는 앞의 표에 명시적으로 나열되지 않은 다른 EAUG 임시 변수들을 포함할 수 있다. 다른 예에서, EAUG 명령어는 임시 변수들을 포함하지 않을 수 있다.
다음의 설명은 일 실시예에 따라, 본 명세서에 설명되는 바와 같이, EAUG 명령어의 예시적인 의사 코드를 제공한다.
Figure 112021047401205-pat00004
Figure 112021047401205-pat00005
Figure 112021047401205-pat00006
Figure 112021047401205-pat00007
일 실시예에서, EAUG 명령어는 전술한 예시적인 의사 코드에 포함되지 않는 다른 동작들 또는 다른 코드를 포함할 수 있다. 다른 실시예에서, EAUG 명령어는 예시적인 의사 코드의 일부 또는 다른 동작들을 포함할 수 있다. 다른 실시예에서, EAUG 명령어는 전술한 예시적인 의사 코드에 명시적으로 나열되지 않는 코드 또는 동작들을 포함할 수 있다.
도 3은 애플리케이션 어드레스 공간(300) 내의 엔클레이브(310)를 도시한다. 도 3은 애플리케이션 어드레스 공간(300)이 엔트리 테이블(312), 엔클레이브 힙(314), 및 엔클레이브 스택(316), 및 엔클레이브 코드(318), 및 소스 EPC 페이지(320)를 갖는 엔클레이브(310)를 포함한다는 점을 더욱 도시한다. 엔트리 테이블(312)은 엔클레이브(310)에서의 오브젝트들의 세트에 대한 참조의 테이블일 수 있다. 엔클레이브 힙(314)은 동적으로 할당되는 메모리가 엔클레이브(310)에 위치될 수 있는 메모리의 일부일 수 있다. 엔클레이브 스택(316)은 로컬 변수들이 엔클레이브(310)에 위치될 수 있는 메모리 스택일 수 있다. 애플리케이션 어드레스 공간(300)은 엔클레이브(310) 외부에 있는 보류 EPC 페이지(330)를 또한 포함한다. 일 실시예에서, 보류 EPC 페이지(330)와 같은, EPC 메모리 페이지의 상태는 프로세서 코어가 페이지 수락 명령어(EACCEPT 명령어)을 실행할 때까지 보류 상태에 놓인다.
도 4a는 일 실시예에 따라 보류 EPC 페이지가 정상적인 EPC 페이지로 변환된 엔클레이브를 도시한다. 일 실시예에서, 프로세서 코어가 EACCEPT 명령어를 실행할 때, (도 3에 도시되는 바와 같은) 보류 EPC 페이지는 엔클레이브(310)에서 정상적인 EPC 페이지(예를 들어, 타겟 EPC 페이지(430))로서 액세스가능하게 된다. 도 4a의 나머지는 도 3과 동일하다.
일 실시예에서, 프로세서 코어는, 콘텐츠 복사 명령어(EACCAPTCOPY 명령어)에 응답하여, 판독/기입 액세스가능 메모리 페이지를 기존 엔클레이브에 추가할 수 있다. EACCAPTCOPY 명령어의 예가 아래에 보여진다:
Figure 112021047401205-pat00008
다른 예에서, EACCAPTCOPY 명령어는 전술한 표에 명시적으로 포함되지 않는 다른 오피코드들(operational codes) 또는 설명을 포함할 수 있다.
프로세서 코어는, EACCAPTCOPY 명령어에 응답하여, 전술한 단락들에서 논의된 바와 같이, 콘텐츠를 기존 EPC 페이지(예를 들어, 소스 EPC 페이지)로부터 EAUG 명령어를 사용하여 생성된 새로 할당 된 EPC 페이지(예를 들어, 타겟 EPC 페이지)에 복사할 수 있다. 일 실시예에서, 프로세서 코어는, EACCAPTCOPY 명령어에 응답하여, 타겟 페이지의 승인들을 수정할 수 있다. 일 예에서, 프로세서 코어는, EACCAPTCOPY 명령어에 응답하여, 동일한 엔클레이브 내의 기존 보호 페이지(예를 들어, 소스 EPC 페이지)의 콘텐츠를 복사하는 것에 의해 보류 EPC 페이지(예를 들어, 타겟 EPC 페이지)를 초기화할 수 있고, 타겟 페이지의 액세스 승인 레벨을 선택된 액세스 승인 레벨로 업데이트한다. 다른 예에서, 프로세서 코어는, EACCAPTCOPY 명령어에 응답하여, 타겟 페이지의 사용이 완료되었음을 표시하기 위해 타겟 페이지의 보류 비트를 클리어하고 타겟 페이지에 대한 EDMM 잠금을 해제할 수 있다.
일 실시예에서, 콘텐츠가 타겟 EPC 페이지에 복사되고 액세스 승인 레벨이 업데이트될 때, 소스 EPC 페이지는 유효한 것으로 남을 수 있다. 처리 코어가 소스 EPC 페이지로부터 타겟 EPC 페이지에 콘텐츠를 복사하라는 EACCEPTCOPY 명령어를 실행하는 것의 한 가지 이점은 성능에 대한 보다 적은 권한 링 전환들을 요구하는 것에 의해 동적 라이브러리 로더들에 대한 소프트웨어 모델을 단순화하는 것이다. 도 5는 상이한 권한 레벨 링들을 갖는 권한 링(500)을 묘사한다. 일 실시예에서, 권한 레벨 링 0은 가장 신뢰되거나 또는 최고 권한 레벨 링이고, 신뢰 레벨 또는 권한 레벨은 권한 레벨 링 0으로부터 권한 레벨 링 3으로 연속적으로 감소한다, 예를 들어, 권한 레벨 링 3은 가장 낮은 신뢰 레벨 또는 권한 레벨을 갖는다.
다른 실시예에서, 프로세서 코어는 소스 EPC 페이지의 유효성 및 소스 EPC 페이지의 PT_REG 타입을 결정할 수 있다. 일 예에서, 소스 EPC 페이지가 BLOCKED, PENDING 또는 MODIFIED 상에 있지 않는 PT_REG 타입을 갖는 유효 EPC 페이지라고 프로세서 코어가 결정하면, 프로세서 코어는 소스 EPC 페이지로부터 타겟 EPC 페이지에 콘텐츠를 복사할 수 있다 .
일 실시예에서, 프로세서 코어는, EACCAPTCOPY 명령어에 응답하여, 피연산자가 올바르게 정렬되지 않을 때; 지원되지 않는 액세스 권한 조합이 요청될 때; 피연산자가 타겟 EPC 페이지 또는 소스 EPC 페이지를 참조하지 않을 때; 타겟 EPC 페이지 또는 소스 EPC 페이지가 다른 스레드에 의해 사용중일 때; 타겟 EPC 페이지 또는 소스 EPC 페이지가 선택된 PT_REG 타입을 갖지 않을 때; 또는 타겟 EPC 페이지 또는 소스 EPC 페이지가 유효 페이지가 아닐 때를 포함하는, 하나 이상의 선택된 조건들이 발생할 때, 소스 EPC 페이지로부터 타겟 EPC 페이지에 콘텐츠를 복사하는 것에 실패할 수 있다.
일 예에서, EACCAPTCOPY 명령어는 EACCAPTCOPY 메모리 파라미터 정보를 포함할 수 있다. EACCAPTCOPY 메모리 파라미터 정보의 예가 아래에 보여진다:
Figure 112021047401205-pat00009
일 실시예에서, RBX는 SECINFO 구조의 유효 어드레스를 포함할 수 있다. 일 예에서, SECINFO는, EPC 페이지의 콘텐츠의 복사가 완료되었을 때, (PT_REG 또는 PT_TCS와 같은) EPC 페이지에 대해 요청된 타입 뿐만 아니라 수정중인 EPC 페이지에 대해 원하는 승인들을 명시할 수 있다. 다른 예에서 SECINFO 구조의 보류 필드들 및 수정된 필드들은 무시될 수 있다. 다른 실시예에서, RCX는 타겟 EPC 페이지의 유효 어드레스를 포함할 수 있다. 다른 실시예에서, RDX는 그로부터 데이터가 복사될 수 있는 소스 EPC 페이지의 유효 어드레스를 포함할 수 있다. 다른 예에서, EACCAPTCOPY 명령어는 전술한 표에 명시적으로 포함되지 않는 다른 EACCAPTCOPY 메모리 파라미터 정보를 포함할 수 있다. 다른 예에서, EACCAPTCOPY 명령어는 메모리 파라미터 정보를 포함하지 않을 수 있다.
일 실시예에서, EACCAPTCOPY 명령어는 EACCAPTCOPY 임시 변수들을 포함할 수 있다. EACCAPTCOPY 임시 변수들의 예가 아래에 보여진다:
Figure 112021047401205-pat00010
다른 예에서, EACCAPTCOPY 명령어는 전술한 표에 명시적으로 나열되지 않는 다른 EACCAPTCOPY 임시 변수들을 포함할 수 있다. 다른 예에서, EACCAPTCOPY 명령어는 임시 변수들을 포함하지 않을 수 있다.
다음의 설명은 일 실시예에 따라 본 명세서에 설명되는 바와 같이 EACCAPTCOPY 명령어의 예시적인 의사 코드를 제공한다.
Figure 112021047401205-pat00011
Figure 112021047401205-pat00012
Figure 112021047401205-pat00013
Figure 112021047401205-pat00014
Figure 112021047401205-pat00015
Figure 112021047401205-pat00016
일 실시예에서, EACCAPTCOPY 명령어는 전술한 예시적인 의사 코드에 포함되지 않는 다른 동작들 또는 다른 코드를 포함할 수 있다. 다른 실시예에서, EACCAPTCOPY 명령어는 예시적인 의사 코드의 일부 또는 다른 동작들을 포함할 수 있다. 다른 실시예에서, EACCAPTCOPY 명령어는 전술한 예시적인 의사 코드에 명시적으로 나열되지 않는 코드 또는 동작들을 포함할 수 있다.
일 예에서, EACCAPTCOPY 명령어는 EACCAPTCOPY 에러 코드들을 포함할 수 있다. EACCAPTCOPY 에러 코드의 예가 아래에 보여진다:
Figure 112021047401205-pat00017
다른 예에서, EACCAPTCOPY 명령어는 전술한 표에 명시적으로 열거되지 않는 다른 EACCAPTCOPY 에러 코드들을 포함할 수 있다. 다른 예에서, EACCAPTCOPY 명령어는 에러 코드들을 포함하지 않을 수 있다.
도 6a는 일 실시예에 따라 보안 메모리 재구획화를 구현하는 프로세서(600)에 대한 마이크로 아키텍처를 도시하는 블록도이다. 구체적으로, 프로세서(600)는 본 개시내용의 적어도 하나의 실시예에 따라 프로세서에 포함될 순차적 아키텍처 코어(in-order architecture core) 및 레지스터 재명명 로직(register renaming logic), 비순차적 발행/실행 로직(out-of-order issue/execution logic)을 묘사한다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 프로세서(600)에서 구현될 수 있다.
프로세서(600)는 실행 엔진 유닛(650)에 연결되는 프론트 엔드 유닛(front end unit)(630)을 포함하고, 이들 양자 모두는 메모리 유닛(670)에 연결된다. 프로세서(600)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 타입을 포함할 수 있다. 또 다른 옵션으로서, 프로세서(600)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 그래픽 코어 등과 같은 특수 목적 코어를 포함할 수 있다. 일 실시예에서, 프로세서(600)는 멀티 코어 프로세서일 수 있거나 멀티 프로세서 시스템의 일부일 수 있다.
프론트 엔드 유닛(630)은 명령어 캐시 유닛(634)에 연결되는 분기 예측 유닛(632)을 포함하고, 명령어 캐시 유닛(634)은 명령어 TLB(translation lookaside buffer)(636)에 연결되고, 명령어 TLB(636)는 명령어 페치 유닛(638)에 연결되며, 명령어 페치 유닛(638)은 디코드 유닛(660)에 연결된다. 디코드 유닛(660)(디코더라고도 알려져 있음)은 명령어들을 디코드할 수 있고, 원래의 명령어들로부터 디코드되거나, 원래의 명령어들을 다른 방식으로 반영하거나, 원래의 명령어들로부터 파생되는 하나 이상의 마이크로-연산(micro-operation)들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코더(660)는 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다. 적합한 메커니즘들의 예들은, 이에 제한되는 것은 아니지만, 룩업 테이블들, 하드웨어 구현들, PLA들(programmable logic arrays), 마이크로코드 ROM들(read only memories) 등을 포함한다. 명령어 캐시 유닛(634)은 또한 메모리 유닛(670)에 연결된다. 디코드 유닛(660)은 실행 엔진 유닛(650)에서의 재명명/할당기 유닛(652)에 연결된다.
실행 엔진 유닛(650)은, 리타이어먼트 유닛(654) 및 하나 이상의 스케줄러 유닛(들)(656)의 세트에 연결되는 재명명/할당기 유닛(652)을 포함한다. 스케줄러 유닛(들)(656)은 RS(reservations station), 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(656)은 물리적 레지스터 파일(들) 유닛(들)(658)에 연결된다. 물리적 레지스터 파일(들) 유닛들(658) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 팩킹된 정수, 팩킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은, 하나 이상의 상이한 데이터 타입들을 저장한다. 물리적 레지스터 파일(들) 유닛(들)(658)은, 레지스터 재명명 및 비순차적 실행이 (예를 들어, 재배열 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하여, 미래 파일(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 사용하여; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하여 등으로) 구현될 수 있는 다양한 방식들을 도시하도록 리타이어먼트 유닛(654)에 의해 오버랩된다.
일반적으로, 아키텍처 레지스터들은 프로세서의 외부로부터 또는 프로그래머의 관점으로부터 가시적이다. 레지스터들이 임의의 알려진 특정 타입의 회로에 제한되는 것은 아니다. 본 명세서에 설명되는 바와 같이 데이터를 저장하고 제공할 수 있는 한, 다양한 상이한 타입의 레지스터들이 적합하다. 적합한 레지스터들의 예들은, 이에 제한되는 것은 아니지만, 전용 물리적 레지스터들, 레지스터 재명명을 사용하여 동적으로 할당되는 물리적 레지스터들, 전용 및 동적으로 할당되는 물리적 레지스터들의 조합들 등을 포함한다. 리타이어먼트 유닛(654) 및 물리적 레지스터 파일(들) 유닛(들)(658)은 실행 클러스터(들)(660)에 연결된다. 실행 클러스터(들)(660)는 하나 이상의 실행 유닛(662)의 세트, 및 하나 이상의 메모리 액세스 유닛들(664)의 세트를 포함한다. 실행 유닛들(662)은 다양한 연산들(예를 들어, 시프트, 덧셈, 뺄셈, 곱셈) 및 다양한 타입들의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대한 연산을 수행할 수 있다.
일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용의 복수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 복수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(656), 물리적 레지스터 파일(들) 유닛(들)(658), 및 실행 클러스터(들)(660)는 가능하게는 복수인 것으로 도시되는데, 그 이유는 특정 실시예들은 특정 타입들의 데이터/연산들에 대해 개별 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 메모리 액세스 파이프라인- 개별 메모리 액세스 파이프라인의 경우에, 이러한 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(664)을 갖는 특정 실시예들이 구현됨)을 생성할 수 있기 때문이다. 개별 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해되어야 한다.
메모리 액세스 유닛들(664)의 세트는 메모리 유닛(670)에 연결되고, 메모리 유닛(670)은, 몇 가지 예를 들자면, 데이터 프리페처(680), 데이터 TLB 유닛(672), DCU(data cache unit)(674), 및 L2(level 2) 캐시 유닛(676)을 포함할 수 있다. 일부 실시예들에서, DCU(674)는 제1 레벨 데이터 캐시(L1 캐시)라고도 알려져 있다. DCU(674)는 다수의 미해결 캐시 미스(cache miss)들을 취급할 수 있고, 들어오는 저장(store)들 및 로드(load)들을 계속하여 서비스할 수 있다. 이는 또한 캐시 코히어런시를 유지하는 것을 지원할 수 있다. 데이터 TLB 유닛(672)은 가상의 및 물리적 어드레스 공간들을 매핑하는 것에 의해 가상의 어드레스 변환 속도를 향상시키는데 사용되는 캐시이다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(664)은 로드 유닛, 스토리지 어드레스 유닛, 및 스토리지 데이터 유닛을 포함할 수 있으며, 이들 각각은 메모리 유닛(670)에서의 데이터 TLB 유닛(672)에 연결된다. L2 캐시 유닛(676)은 하나 이상의 다른 레벨들의 캐시에 그리고 궁극적으로 주 메모리에 연결될 수 있다.
일 실시예에서, 데이터 프리페처(680)는 프로그램이 어느 데이터를 사용할 것인지를 자동으로 예측하는 것에 의해 데이터를 DCU(674)에 투기적으로 로드/프리페치한다. 프리페칭은 메모리 계층구조(예를 들어, 하위 레벨 캐시들 또는 메모리)의 하나의 메모리 장소(예를 들어, 위치)에 저장되는 데이터를, 데이터가 프로세서에 의해 실제로 요구되기 전에, 프로세서에 더 가까운(예를 들어, 보다 낮은 액세스 대기 시간을 가져오는) 상위 레벨 메모리 장소로 전송하는 것을 지칭할 수 있다. 보다 구체적으로, 프리페칭은, 프로세서가 반환되는 구체적인 데이터에 대한 요구를 발행하기 전에, 하위 레벨 캐시들/메모리 중 하나로부터 데이터 캐시 및/또는 프리페치 버퍼로의 데이터의 조기 검색을 지칭할 수 있다.
프로세서(600)는 하나 이상의 명령어 세트들(예를 들어, (보다 최신 버전들이 추가된 일부 확장들을 갖는) x86 명령어 세트); 캘리포니아주 서니베일 소재의 MIPS Technologies사의 MIPS 명령어 세트; 캘리포니아주 서니베일 소재의 ARM Holdings사의 (NEON과 같은 선택적인 추가적 확장들을 갖는) ARM 명령어 세트)을 지원할 수 있다.
코어가 (연산들 또는 스레드들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 슬라이스된 멀티스레딩, 동시 멀티스레딩을 포함하는 다양한 방식들로(이 경우 단일 물리적 코어는 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대해 논리적 코어를 제공한다), 또는 이들의 조합(예를 들어, Intel® Hyperthreading technology에서와 같은 그 후의 시간 슬라이싱된 페칭 및 디코딩 및 동시 멀티스레딩)으로 지원할 수 있다는 점이 이해되어야 한다.
레지스터 재명명이 비순차적 실행의 맥락에서 설명되었지만, 레지스터 재명명은 순차적 아키텍처에서 사용될 수도 있다는 점이 이해되어야 한다. 프로세서의 예시된 실시예는 개별 명령어 및 데이터 캐시 유닛들과 공유 L2 캐시 유닛을 또한 포함하지만, 대안적인 실시예들은, 예를 들어, L1(Level 1) 내부 캐시, 또는 다수의 레벨들의 내부 캐시와 같은, 명령어들 및 데이터 양자 모두에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 내부 캐시와, 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시가 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
도 6b는 본 개시내용의 일부 실시예들에 따라 도 6a의 프로세서(600)에 의해 구현되는 순차적 파이프라인(in-order pipeline) 및 레지스터 재명명 스테이지(register renaming stage), 비순차적 발행/실행 파이프라인(out-of-order issue/execution pipeline)을 도시하는 블록도이다. 도 6b에서의 실선 상자들은 순차적 파이프라인을 도시하는 반면, 파선 상자들은 레지스터 재명명, 비순차적 발행/실행 파이프라인을 도시한다. 도 6b에서, 프로세서 파이프라인(600)은, 페치 스테이지(602), 길이 디코드 스테이지(604), 디코드 스테이지(606), 할당 스테이지(608), 재명명 스테이지(610), (디스패치 또는 발행이라고도 알려진) 스케줄링 스테이지(612), 레지스터 판독/메모리 판독 스테이지(614), 실행 스테이지(616), 라이트 백(write back)/메모리 기입 스테이지(618), 예외 처리 스테이지(622), 및 커밋 스테이지(624)를 포함한다. 일부 실시예들에서, 스테이지들(602 내지 624)의 순서는 도시되는 것과 상이할 수 있고, 도 6b에 도시되는 구체적인 순서로 제한되는 것은 아니다.
도 7은 일 실시예에 따라 보안 메모리 재구획화를 수행하는 로직 회로들을 포함하는 프로세서(700)에 대한 마이크로 아키텍처의 블록도를 도시한다. 일부 실시예들에서, 일 실시예에 따른 명령어는, 단일 정밀도(single precision) 및 2배 정밀도(double precision) 정수 및 부동 소수점 데이터 타입들과 같은, 데이터 타입들뿐만 아니라, 바이트, 워드, 더블워드, 쿼드워드 등의 사이즈들을 갖는 데이터 요소들에 대해 연산하도록 구현될 수 있다. 일 실시예에서, 순차적 프론트 엔드(in-order front end)(701)는 실행될 명령어들을 페치하고 이 명령어들을 프로세서 파이프라인에서 나중에 사용되도록 준비하는 프로세서(700)의 일부이다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 프로세서(700)에서 구현될 수 있다.
프론트 엔드(701)는 여러 유닛들을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(716)는 메모리로부터 명령어들을 페치하고 명령어들을 명령어 디코더(718)에 피드하며, 명령어 디코더(718)는 이어서 명령어들을 디코드하거나 해석한다. 예를 들어, 일 실시예에서, 디코더는 수신된 명령어를, 머신이 실행할 수 있는 "마이크로-명령어들" 또는 "마이크로-연산들"(마이크로-op 또는 uop들이라고도 함)이라 불리는 하나 이상의 연산들로 디코드한다. 다른 실시예들에서, 디코더는, 명령어를, 일 실시예에 따른 연산들을 수행하기 위해 마이크로 아키텍처에 의해 사용되는 오피코드 및 대응하는 데이터 및 제어 필드들로 파싱한다. 일 실시예에서, 트레이스 캐시(trace cache)(730)는 디코드된 uop들을 받아서 이들을 프로그램 순서의 시퀀스들(program ordered sequences)로 어셈블링하거나 실행을 위해 uop 큐(734)를 추적한다. 트레이스 캐시(730)가 복합 명령어를 만날 때, 마이크로코드 ROM(732)은 연산을 완료하는데 필요한 uop들을 제공한다.
일부 명령어들은 단일의 마이크로-op로 변환되는 한편, 다른 것들은 전체 연산(full operation)을 완료하는데 여러 마이크로-op들을 필요로 한다. 일 실시예에서, 명령어를 완료하는데 4개보다 많은 마이크로-op들이 필요하면, 디코더(718)는 명령어를 행하기 위해 마이크로코드 ROM(732)에 액세스한다. 일 실시예에 대해, 명령어는 명령어 디코더(718)에서의 처리를 위해 적은 수의 마이크로 op들로 디코드될 수 있다. 다른 실시예에서, 연산을 달성하기 위해 다수의 마이크로-op들이 필요하면, 명령어가 마이크로코드 ROM(732) 내에 저장될 수 있다. 트레이스 캐시(730)는 마이크로코드 ROM(732)으로부터 일 실시예에 따른 하나 이상의 명령어들을 완료하기 위해 마이크로코드 시퀀스들을 판독하기 위한 정확한 마이크로 명령어 포인터를 결정하는 엔트리 포인트 PLA(programmable logic array)를 지칭한다. 마이크로코드 ROM(732)이 명령어에 대한 마이크로-op들을 시퀀싱하는 것을 끝낸 후에, 머신의 프론트 엔드(701)는 트레이스 캐시(730)로부터 마이크로-op들을 페치하는 것을 재개한다.
비순차적 실행 엔진(703)은 명령어들이 실행을 위해 준비되는 곳이다. 비순차적 실행 로직은, 명령어들이 파이프라인 아래로 진행하고 실행을 위해 스케쥴링될 때, 성능을 최적화하도록 명령어들의 흐름을 평활화하고 재정렬하기 위한 다수의 버퍼들을 갖는다. 할당기 로직은 각각의 uop가 실행하기 위하여 필요로 하는 머신 버퍼들 및 리소스들을 할당한다. 레지스터 재명명 로직은 로직 레지스터들을 레지스터 파일 내의 엔트리들로 재명명한다. 할당기는, 명령어 스케줄러들: 메모리 스케줄러, 고속 스케줄러(702), 저속/일반 부동 소수점 스케줄러(704), 및 단순 부동 소수점 스케쥴러(706)의 앞에, 2개의 uop 큐들- 하나는 메모리 연산들을 위한 것이고 하나는 비-메모리 연산들을 위한 것임 - 중하나에서 각각의 uop에 대한 엔트리를 또한 할당한다. uop 스케줄러들(702, 704, 706)은, 그들의 의존적인 입력 레지스터 피연산자 소스들의 준비성(readiness) 및 uop들이 그들의 연산을 완료하는데 필요로 하는 실행 리소스들의 이용가능성에 기초하여, uop가 언제 실행될 준비가 되는지 결정한다. 일 실시예의 고속 스케줄러(702)는 주 클럭 사이클의 각각의 절반마다 스케줄링할 수 있는 한편, 다른 스케줄러들은 주 프로세서 클럭 사이클마다 한번 스케줄링할 수만 있다. 스케줄러들은 실행을 위해 uop들을 스케줄링하도록 디스패치 포트들에 대하여 중재한다.
레지스터 파일들(708, 710)은 스케줄러들(702, 704, 706)과 실행 블록(711) 내의 실행 유닛들(712, 714, 716, 718, 710, 712, 714) 사이에 있다. 정수 및 부동 소수점 연산들을 위해, 각각, 별개의 레지스터 파일(708, 710)이 있다. 일 실시예의 각각의 레지스터 파일(708, 710)은 또한 아직 레지스터 파일에 기입되지 않은 금방 완성된 결과들을 새로운 의존적 uop들로 바이패스하거나 포워딩할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(708) 및 부동 소수점 레지스터 파일(710)은 또한 상대방과 데이터를 통신할 수 있다. 일 실시예에 대하여, 정수 레지스터 파일(708)은 2개의 별개의 레지스터 파일들로 분할되며, 하나의 레지스터 파일은 데이터의 하위 32 비트에 대한 것이고, 제2 레지스터 파일은 데이터의 상위 32 비트에 대한 것이다. 일 실시예의 부동 소수점 레지스터 파일(710)은 128 비트 폭 엔트리들을 가지며, 그 이유는 부동 소수점 명령어들이 전형적으로 64 내지 128 비트 폭의 피연산자들을 갖기 때문이다.
실행 블록(711)은 명령어들이 실제로 실행되는 실행 유닛들(712, 714, 716, 718, 710, 712, 714)을 포함한다. 이 섹션은 마이크로 명령어가 실행해야 하는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(708, 710)을 포함한다. 일 실시예의 프로세서(700)는 다수의 실행 유닛들: AGU(address generation unit)(712), AGU(714), 고속 ALU(716), 고속 ALU(718), 저속 ALU(710), 부동 소수점 ALU(712), 부동 소수점 이동 유닛(714)으로 이루어진다. 일 실시예에 대해, 부동 소수점 실행 블록들(712, 714)은 부동 소수점, MMX, SIMD, 및 SSE, 또는 다른 연산들을 실행한다. 일 실시예의 부동 소수점 ALU(712)는 나눗셈, 제곱근 및 나머지 마이크로-op들을 실행하는 64 비트 x 64 비트 부동 소수점 나눗셈기를 포함한다. 본 개시내용의 실시예들에 대해서, 부동 소수점 값을 포함하는 명령어들은 부동 소수점 하드웨어에서 처리될 수 있다.
일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(716, 718)로 간다. 일 실시예의 고속 ALU들(716, 718)은 1/2 클록 사이클의 유효 대기 시간으로 고속 연산들을 실행할 수 있다. 일 실시예에서, 가장 복잡한 정수 연산들은 저속 ALU(710)로 가는데, 그 이유는 저속 ALU(710)가 곱셈기, 시프트, 플래그 로직 및 분기 처리와 같은 긴 대기 시간 타입의 연산들에 대한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/스토리지 연산들은 AGU들(712, 714)에 의해 실행된다. 일 실시예에서, 정수 ALU들(716, 718, 710)은 64 비트 데이터 피연산자들에 대해 정수 연산들을 수행하는 것과 관련하여 설명된다. 대안적인 실시예에서, ALU들(716, 718, 710)은, 16, 32, 128, 256 등을 포함하는 다양한 데이터 비트를 지원하도록 구현될 수 있다. 유사하게, 부동 소수점 유닛들(712, 714)은 다양한 폭들의 비트들을 갖는 피연산자들의 범위를 지원하도록 구현될 수 있다. 일 실시예에 대해, 부동 소수점 유닛들(712, 714)은 SEVID 및 멀티미디어 명령어들과 관련하여 128 비트 폭의 패킹된 데이터 피연산자들을 처리할 수 있다.
일 실시예에서, uop 스케줄러들(702, 704, 706)은 부모 로드(parent load)가 실행을 끝내기 전에 의존적 연산들을 디스패치한다. uop들이 프로세서(700)에서 투기적으로 스케줄링되고 실행되기 때문에, 프로세서(700)는 또한 메모리 미스들을 처리하는 로직을 포함한다. 데이터 로드가 데이터 캐시에서 누락되면, 일시적으로 부정확한 데이터를 갖는 스케줄러를 남겨두는, 파이프라인에서 인 플라이트(in flight)인 종속 연산들이 존재할 수 있다. 재생 메커니즘은 부정확한 데이터를 사용하는 명령어들을 추적하고 재실행한다. 종속 연산들만이 재생될 필요가 있고 비종속 연산들은 완료하도록 허용된다. 프로세서의 일 실시예의 스케줄러들 및 재생 메커니즘은 텍스트 스트링 비교 연산들을 위한 명령어 시퀀스들을 캐치하도록 또한 설계된다.
프로세서(700)는 일 실시예에 따라 보안 메모리 재구획화를 구현하기 위한 로직을 또한 포함한다. 일 실시예에서, 프로세서(700)의 실행 블록(711)은 본 명세서에서의 설명에 따라 보안 메모리 재구획화를 수행하는 MCU(115)를 포함할 수 있다.
"레지스터들"이라는 용어는, 피연산자들을 식별하기 위해 명령어들의 일부로서 사용되는 온-보드 프로세서 스토리지 위치들을 지칭할 수 있다. 다시 말하면, 레지스터들은 (프로그래머의 관점에서) 프로세서의 외부로부터 사용가능한 것들일 수 있다. 그러나, 실시예의 레지스터들은 특정 타입의 회로에 의미가 제한되어서는 안 된다. 오히려, 실시예의 레지스터는 데이터를 스토리지 및 제공할 수 있고, 본 명세서에 설명된 기능들을 수행할 수 있다. 본 명세서에 설명되는 레지스터들은, 전용 물리적 레지스터들, 레지스터 재명명을 사용하여 동적으로 할당되는 물리적 레지스터들, 전용 물리적 레지스터들과 동적으로 할당되는 물리적 레지스터들의 조합, 등과 같은, 임의의 수의 상이한 기술들을 사용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 패킹된 데이터에 대한 8개의 멀티미디어 SIMD 레지스터들을 또한 포함한다.
이하의 논의에 대해, 레지스터들은, 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터의 MMX 기술로 인에이블된 마이크로프로세서들에서의 64-비트 폭의 MMX™ 레지스터들(일부 경우에 'mm' 레지스터들로 또한 지칭됨)과 같은, 패킹된 데이터를 유지하도록 설계된 데이터 레지스터들인 것으로 이해된다. 정수 형태 및 부동 소수점 형태 양자 모두에서 이용가능한 이러한 MMX 레지스터들은 SIMD 및 SSE 명령어들을 수반하는 패킹된 데이터 요소들로 동작할 수 있다. 유사하게, SSE2, SSE3, SSE4 또는 그 이상의(일반적으로, "SSEx"로 지칭됨) 기술에 관한 128 비트 폭의 XMM 레지스터들이 이러한 패킹된 데이터 피연산자들을 유지하는데 또한 사용될 수 있다. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장하는데 있어서, 레지스터들이 2개의 데이터 타입들 사이를 구별할 필요는 없다. 일 실시예에서, 정수 및 부동 소수점은 동일한 레지스터 파일 또는 상이한 레지스터 파일들에 포함된다. 또한, 일 실시예에서, 부동 소수점 및 정수 데이터는 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다.
실시예들은 많은 상이한 시스템 타입들에서 구현될 수 있다. 이제 도 8을 참조하면, 일 구현에 따른 멀티프로세서 시스템(800)의 블록도가 도시된다. 도 8에 도시되는 바와 같이, 멀티프로세서 시스템(800)은 포인트-투-포인트 인터커넥트 시스템이고, 포인트-투-포인트 인터커넥트(850)를 통해 연결되는 제1 프로세서(870) 및 제2 프로세서(880)를 포함한다. 도 8에 도시되는 바와 같이, 프로세서들(870 및 880) 각각은, 잠재적으로는 더 많은 코어들이 프로세서들에 존재할 수 있지만, 제1 및 제2 프로세서 코어들(즉, 프로세서 코어들(874a 및 874b) 및 프로세서 코어들(884a 및 884b))을 포함하는 멀티코어 프로세서일 수 있다. 프로세서들은 현재의 실시예에 따른 하이브리드 기록 모드 로직들을 각각 포함할 수 있다. 페이지 추가들 및 콘텐츠 복사의 실시예들은 프로세서(870), 프로세서(880), 또는 이들 양자 모두에서 구현 될 수 있다.
2개의 프로세서들(870, 880)이 도시되어 있지만, 본 개시내용의 범위가 그것으로 제한되는 것은 아니라는 점을 잘 알 것이다. 다른 구현들에서는, 주어진 프로세서에 하나 이상의 부가 프로세서들이 존재할 수 있다.
프로세서들(870 및 880)은, 각각, 통합된 메모리 제어기 유닛들(882 및 882)을 포함하는 것으로 도시된다. 프로세서(870)는 자신의 버스 제어기 유닛들의 일부로서, P-P(point-to-point) 인터페이스들(876 및 888)을 또한 포함하고; 이와 유사하게, 제2 프로세서(880)는 P-P 인터페이스들(886 및 888)을 포함한다. 프로세서들(870, 880)은 P-P(point-to-point) 인터페이스 회로들(888, 888)을 사용하여 P-P 인터페이스(850)를 통해 정보를 교환할 수 있다. 도 8에 도시되는 바와 같이, IMC들(882 및 882)은 프로세서들을 각각의 메모리들, 즉 각각의 프로세서들에 로컬로 부가되는 주 메모리의 부분들일 수 있는 메모리(832) 및 메모리(834)에 연결시킨다.
프로세서들(870, 880)은 포인트-투-포인트 인터페이스 회로들(876, 894, 886, 898)을 사용하여 개별 P-P 인터페이스들(852, 854)을 통해 칩셋(890)과 정보를 각각 교환할 수 있다. 칩셋(890)은 또한 고성능 그래픽 인터페이스(839)를 통해 고성능 그래픽 회로(838)와 정보를 교환할 수 있다.
공유 캐시(도시되지 않음)가 어느 한 프로세서에 포함되거나, 양자 모두의 프로세서의 외부에 있을 수 있지만, 여전히 P-P 인터커넥트를 통해 프로세서들과 접속될 수 있어서, 프로세서가 저 전력 모드에 놓이면, 어느 하나의 또는 양자 모두의 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 연결될 수 있다. 일 실시예에서, 제1 버스(816)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI Express 버스 또는 다른 3세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 개시내용의 범위가 그것으로 제한되는 것은 아니다.
도 8에 도시되는 바와 같이, 제1 버스(816)를 제2 버스(820)에 연결시키는 버스 브릿지(818)와 함께, 다양한 I/O 디바이스들(814)이 제1 버스(816)에 연결될 수 있다. 일 실시예에서, 제2 버스(820)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(822), 통신 디바이스들(827), 그리고 명령어들/코드 및 데이터(830)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 스토리지 디바이스와 같은 스토리지 유닛(828)을 포함하는 다양한 디바이스들이 제2 버스(820)에 연결될 수 있다. 또한, 오디오 I/O(824)가 제2 버스(820)에 연결될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의하자. 예를 들어, 도 8의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
이제 도 9를 참조하면, 본 발명의 일 실시예에 따른 제3 시스템(900)의 블록도가 도시된다. 도 8 및 9에서 동일한 엘리먼트들은 동일한 참조 번호들을 가지며, 도 8의 특정 양상들은 도 9의 다른 양상들을 불명료하게 하는 것을 회피하기 위해 도 9로부터 생략되었다.
도 9는 프로세서들(970, 980)이, 각각, 통합된 메모리 및 I/O CL(control logic))(972 및 982)을 포함할 수 있다는 점을 도시한다. 적어도 하나의 실시예에 대해, CL(972, 982)은 본 명세서에 설명되는 바와 같이 통합 메모리 제어기 유닛들을 포함할 수 있다. 또한. CL(972, 982)는 I/O 제어 로직을 또한 포함할 수 있다. 도 9는 메모리들(932, 934)이 CL(972, 982)에 연결된다는 점, 및 I/O 디바이스들(914)이 제어 로직(972, 982)에 또한 연결된다는 점을 도시한다. 레거시 I/O 디바이스들(915)이 칩셋(990)에 연결된다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 프로세서(970), 프로세서(980), 또는 양자 모두에서 구현될 수 있다.
도 10은 코어들(1002) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP들(digital signal processors), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱박스들, 마이크로 제어기들, 휴대 전화들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들, 및 다양한 다른 전자 디바이스들에 대해 본 기술분야에 알려진 다른 시스템 설계들 및 구성들 또한 적합하다. 일반적으로, 본 명세서에 개시되는 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 10을 참조하면, 본 개시내용의 일 실시예에 따른 SoC(1000)의 블록도가 도시된다. 또한, 파선 상자들은 보다 진보된 SoC들 상의 특징부들이다. 도 10에서, 인터커넥트 유닛(들)(1002)은: 한 세트의 하나 이상의 코어들(1002A-N) 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1010); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합 메모리 제어기 유닛(들)(1014); 통합 그래픽 로직(1008), 정지 및/또는 비디오 카메라 기능성을 제공하기 위한 이미지 프로세서(1024), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(1026), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(1028)를 포함할 수 있는 한 세트의 또는 하나 이상의 매체 프로세서들(1020); SRAM(static random access memory) 유닛(1030); DMA(direct memory access) 유닛(1032); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(1040)에 연결된다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 SoC(1000)에서 구현될 수 있다.
다음으로 도 11을 참조하면, 본 개시내용의 실시예들에 따른 SoC(system on chip) 설계의 일 실시예가 도시된다. 예시적인 예로서, SoC(1100)는 UE(user equipment)에 포함된다. 일 실시예에서, UE는 핸드헬드 전화, 스마트폰, 태블릿, 초박형 노트북, 광대역 어댑터를 가진 노트북, 또는 임의의 다른 유사한 통신 디바이스와 같이, 최종 사용자가 통신에 사용하는 임의의 디바이스를 지칭한다. 사실상 GSM 네트워크에서의 MS(mobile station)에 대응할 수 있는 UE가 기지국 또는 노드에 접속시킬 수 있다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 SoC(1100)에서 구현될 수 있다.
여기서, SoC(1100)는 2개의 코어들-1106 및 1107을 포함한다. 이상의 논의와 유사하게, 코어들(1106 및 1107)은 Intel® Architecture Core™를 갖는 프로세서, AMD(Advanced Micro Devices, Inc.) 프로세서, MlPS 기반 프로세서, ARM 기반 프로세서 설계, 또는 이들의 고객은 물론 이들의 실시권자들 또는 채택자들과 같은, 명령어 세트 아키텍처(Instruction Set Architecture)에 부합할 수 있다. 코어들(1106 및 1107)은 시스템(1100)의 다른 부분들과 통신하기 위해 버스 인터페이스 유닛(1109) 및 L2 캐시(1110)와 관련되는 캐시 제어(1108)에 연결된다. 인터커넥트(1111)는, 설명된 개시내용의 하나 이상의 양상들을 구현할 수 있는, IOSF, AMBA, 또는 앞서 논의된 다른 인터커넥트들과 같은, 온-칩 인터커넥트를 포함한다.
인터커넥트(1111)는, SIM 카드와 인터페이스하는 SIM(Subscriber Identity Module)(1130), SoC(1100)를 초기화하고 부팅하기 위해 코어들(1106 및 1107)에 의해 실행하기 위한 부트 코드를 유지하는 부트 ROM(1135), 외부 메모리(예를 들어, DRAM(1160))와 인터페이스하는 SDRAM 제어기(1140), 비-휘발성 메모리(예를 들어, 플래시(1165))와 인터페이스하는 플래시 제어기(1145), 주변기기들과 인터페이스하는 주변기기 제어(1150)(예를 들어, 직렬 주변기기 인터페이스(Serial Peripheral Interface)), 입력(예를 들어, 터치 인에이블형 입력(touch enabled input))을 디스플레이하고 수신하는 비디오 코덱들(1120) 및 비디오 인터페이스(1125), 그래픽 관련 계산들을 수행하는 GPU(1115) 등과 같은, 다른 구성요소들에 통신 채널들을 제공한다. 이러한 인터페이스들 중 임의의 것은 본 명세서에 설명되는 실시예들의 양상들을 포함할 수 있다.
추가로, 시스템은, 블루투스 모듈(1170), 3G 모뎀(1175), GPS(1180), 및 Wi-Fi(1185)와 같은, 통신을 위한 주변기기들을 도시한다. 전술된 바와 같이, UE는 통신용 라디오를 포함한다는 점에 유의하자. 그 결과, 이러한 주변기기 통신 모듈들 모두가 포함되지는 않을 수 있다. 그러나, 외부 통신을 위한 일부 형태의 무선부가 UE에 포함되어야 한다.
도 12는, 머신으로 하여금 본 명세서에 논의된 방법론들 중 임의의 하나 이상을 수행하게 하기 위한, 명령어들의 세트가 실행될 수 있는 컴퓨팅 시스템(1200)의 예시적인 형태로 머신의 개략적 표현을 도시한다. 대안적인 실시예들에서, 이러한 머신은 LAN, 인트라넷, 엑스트라넷, 또는 인터넷에서의 다른 머신들에 접속(예를 들어, 네트워킹)될 수 있다. 머신은 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 디바이스의 용량 내에서, 또는 피어-투-피어(또는 분산형) 네트워크 환경에서 피어 머신으로서 동작할 수 있다. 머신은 PC(personal computer), 태블릿 PC, 셋톱 박스(STB), PDA(Personal Digital Assistant), 셀룰러 전화, 웹 응용기기, 서버, 네트워크 라우터, 스위치 또는 브릿지, 또는 해당 머신에 의해 취해질 작용들을 명시하는 (순차적 또는 다른 방식의) 명령어들의 세트를 실행할 수 있는 임의의 머신일 수 있다. 또한, 단일 머신만이 도시되지만, "머신(machine)"이라는 용어는 본 명세서에서 논의되는 방법론들 중 임의의 하나 이상을 수행하기 위한 명령어들의 세트(또는 다수의 세트들)를 개별적으로 또는 공동으로 실행하는 머신들의 임의의 모음을 포함하는 것으로도 간주되어야 한다. 페이지 추가들 및 콘텐츠 복사의 실시예들이 컴퓨팅 시스템(1200)에서 구현될 수 있다.
컴퓨팅 시스템(1200)은 버스(1230)를 통해 서로 통신하는, 처리 디바이스(1202), 주 메모리(1204)(예를 들어, ROM(read-only memory), 플래시 메모리, (dynamic random access memory)(SDRAM(synchronous DRAM) 또는 DRAM(RDRAM) 등과 같은) DRAM, 정적 메모리(1206)(예를 들어, 플래시 메모리, SRAM(static random access memory) 등), 및 데이터 스토리지 디바이스(1218)를 포함한다.
처리 디바이스(1202)는 마이크로프로세서, 중앙 처리 유닛 등과 같은 하나 이상의 범용 처리 디바이스들을 나타낸다. 보다 구체적으로, 처리 디바이스는 CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 또는 다른 명령어 세트들을 구현하는 프로세서, 또는 명령어 세트들의 조합을 구현하는 프로세서들일 수 있다. 처리 디바이스(1202)는 또한 ASIC(application specific integrated circuit), FPGA(field programmable gate array), DSP(digital signal processor), 네트워크 프로세서, 등과 같은 하나 이상의 특수 목적 처리 디바이스들일 수 있다. 일 실시예에서, 처리 디바이스(1202)는 하나 이상의 프로세서 코어들을 포함할 수 있다. 처리 디바이스(1202)는 본 명세서에서 논의되는 동작들을 수행하기 위한 처리 로직(1226)을 실행하도록 구성된다. 일 실시예에서, 처리 디바이스(1202)는 도 1의 컴퓨팅 시스템(100)의 일부일 수 있다. 대안적으로, 컴퓨팅 시스템(1200)은 본 명세서에 설명되는 다른 구성요소들을 포함할 수 있다. 코어가 (연산들 또는 스레드들의 2개 이상의 병렬 세트들을 실행하는) 멀티스레딩을 지원할 수 있고, 시간 슬라이스된 멀티스레딩, 동시 멀티스레딩을 포함하는 다양한 방식으로(이 경우 단일 물리적 코어는 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대해 논리적 코어를 제공한다), 또는 이들의 조합(예를 들어, Intel® Hyperthreading technology에서와 같은 시간 슬라이싱된 페칭 및 그 후의 디코딩 및 동시 멀티스레딩)으로 지원할 수 있다는 점이 이해되어야 한다.
컴퓨팅 시스템(1200)은 네트워크(1220)에 통신가능하게 연결되는 네트워크 인터페이스 디바이스(1208)를 추가로 포함할 수 있다. 컴퓨팅 시스템(1200)은 비디오 디스플레이 유닛(1210)(예를 들어, LCD(liquid crystal display) 또는 CRT(cathode ray tube)), 영숫자 입력 디바이스(1212)(예를 들어, 키보드), 커서 제어 디바이스(1214)(예를 들어, 마우스), 신호 생성 디바이스(1216)(예를 들어, 스피커), 또는 다른 주변 디바이스들을 포함할 수 있다. 더욱이, 컴퓨팅 시스템(1200)은 그래픽 처리 유닛(1222), 비디오 처리 유닛(1228) 및 오디오 처리 유닛(1232)을 포함할 수 있다. 다른 실시예에서, 컴퓨팅 시스템(1200)은 칩셋(도시되지 않음)을 포함할 수 있으며, 이러한 칩셋은 처리 디바이스(1202)와 함께 동작하도록 설계되는 일 그룹의 집적 회로들, 또는 칩들을 지칭하며, 처리 디바이스(1202)와 외부 디바이스들 사이의 통신을 제어한다. 예를 들어, 칩셋은 처리 디바이스(1202)를, 주 메모리(1204) 및 그래픽 제어기들과 같은, 초고속 디바이스들에 링크시키는 것은 물론, 처리 디바이스(1202)를, USB, PCI 또는 ISA 버스들과 같은, 주변기기들의 저속 주변기기 버스들에 링크시키는 마더보드 상의 칩들의 세트일 수 있다.
데이터 스토리지 디바이스(1218)는 본 명세서에 설명되는 방법론들 또는 기능들 중 임의의 하나 이상을 구현하는 소프트웨어(1226)가 저장되는 컴퓨터 판독가능 스토리지 매체(1224)를 포함할 수 있다. 소프트웨어(1226)는 또한, 컴퓨팅 시스템(1200)에 의한 그것의 실행 동안 명령어(1226)로서 주 메모리(1204) 내에서 및/또는 처리 로직(1226)으로서 처리 디바이스(1202) 내에서, 완전히 또는 적어도 부분적으로, 상주할 수 있으며; 주 메모리(1204) 및 처리 디바이스(1202)는 또한 컴퓨터 판독가능 스토리지 매체를 구성한다.
컴퓨터 판독가능 스토리지 매체(1224)는 또한, 도 1과 관련하여 설명되는 바와 같이, 처리 디바이스(1202)를 이용하는 명령어들(1226), 및/또는 위 애플리케이션들을 호출하는 방법들을 포함하는 소프트웨어 라이브러리를 저장하는데 사용될 수 있다. 컴퓨터 판독가능 스토리지 매체(1224)가 단일의 매체인 것으로 예시적인 실시예에 도시되지만, "컴퓨터 판독가능 스토리지 매체(computer-readable storage medium)"라는 용어는 명령어들의 하나 이상의 세트들을 저장하는 단일의 매체 또는 다수의 매체(예를 들어, 집중형 또는 분산형 데이터베이스, 및/또는 관련 캐시들 및 서버들)를 포함하는 것으로 간주되어야 한다. "컴퓨터 판독가능 스토리지 매체(computer-readable storage medium)"라는 용어는 또한, 머신에 의한 실행을 위해 명령어의 세트를 저장하거나, 인코드하거나, 또는 운반할 수 있는, 그리고 머신로 하여금 본 실시예들의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주되어야 한다. "컴퓨터 판독가능 스토리지 매체(computer-readable storage medium)"라는 용어는 따라서, 이에 제한되는 것은 아니지만, 솔리드-스테이트 메모리들(solid-state memories), 및 광 및 자기 매체를 포함하는 것으로 간주되어야 한다.
다음의 예들은 추가적 실시예들에 관련된다.
예 1은 프로세서로서, 1) 프로세서 코어; 및 2) 프로세서 코어와 주 메모리 사이에 연결되는 메모리 제어기를 포함하고, 주 메모리는 보안 페이지들을 포함하는 보호 영역을 포함하며, 프로세서 코어는 콘텐츠 복사 명령어에 응답하여, a) 애플리케이션 어드레스 공간의 보호 영역에서의 타겟 페이지를 초기화하는 것; b) 보호 영역에서의 복사될 소스 페이지의 콘텐츠를 선택하는 것; 및 c) 선택된 콘텐츠를 애플리케이션 어드레스 공간의 보호 영역에서의 타겟 페이지에 복사하는 것을 수행한다.
예 2에서, 예 1의 프로세서 코어는 또한, 콘텐츠 복사 명령어에 응답하여, 애플리케이션이 실행되는 동안 선택된 콘텐츠를 타겟 페이지에 복사하며, 애플리케이션은 보호 영역에 저장된다.
예 3에서, 예들 1-2 중 어느 하나의 프로세서 코어는 페이지 추가 명령어에 응답하여 보호 영역에 타겟 페이지를 추가한다.
예 4에서, 예들 1-3 중 어느 하나의 프로세서 코어는, 타겟 페이지의 권한 레벨을 결정하고; 타겟 페이지의 권한 레벨이 0일 때 페이지 추가 명령어를 수행한다.
예 5에서, 예들 1-4 중 어느 하나의 프로세서 코어는, 페이지 추가 명령어가 언제 실패할 지를 결정하고- 페이지 추가 명령어는, 피연산자가 올바르게 정렬되지 않을 때; 지원되지 않는 보안 속성들이 설정될 때; 선택된 SECS(SGX(software guard extensions) enclave control structure) 페이지들이 다른 스레드에 의해 잠길 때; EAUG 명령어가 EPC(enclave page cache) 페이지의 유효 어드레스를 포함하지 않을 때; EPC 페이지가 다른 스레드에 의해 잠길 때; EPC 페이지가 유효 상태에 있을 때; 또는 선택된 보호 영역 오프셋이 보호 영역의 유효 어드레스 범위 밖에 있을 때 실패함 -; 콘텐츠 복사 명령어가 언제 실패할 지를 결정한다- 콘텐츠 복사 명령어는, 피연산자가 올바르게 정렬되지 않을 때; 지원되지 않는 액세스 권한 조합이 요청될 때; 피연산자가 EPC(enclave page cache) 페이지를 참조하지 않을 때; 타겟 페이지 또는 소스 페이지가 다른 스레드에 의해 사용 중일 때; EPC 페이지가 선택된 PT_REG 타입을 갖지 않을 때; 또는 EPC 페이지가 유효 페이지가 아닐 때 실패함 -.
예 6에서, 예들 1-5 중 어느 하나의 페이지 추가 명령어는 메모리 파라미터 정보를 포함하며, 메모리 파라미터 정보는, PAGEINFO(page information) 구조의 유효 어드레스; 및 EPC(enclave page cache) 페이지의 유효 어드레스를 포함한다.
예 7에서, 예들 1-6 중 어느 하나의 PAGEINFO 구조는, 타겟 페이지의 SECINFO(security information) 구조; 및 SRCPAGE(source page)의 페이지 정보 구조를 포함한다.
예 8에서, 예들 1-7의 어느 하나의 프로세서 코어는, 페이지 추가 명령어에 응답하여, 비어 있는 EPC(enclave page cache) 페이지를 보호 영역의 섹션에서의 하나 이상의 선택된 SECS(SGX(software guard extensions) enclave control structure) 페이지들과 관련시키고; EPCM(enclave page cache map)에 보호 영역 오프셋 속성 및 보호 영역 보안 속성을 저장하고; 타겟 페이지의 콘텐츠를 제로화한다.
예 9에서, 예들 1-8 중 어느 하나의 프로세서 코어는, 페이지 수락 명령어가 언제 수신되는 지를 결정하고- 페이지 수락 명령어가 수신될 때까지 타겟 페이지의 상태는 보류 상태로 유지됨 -; 페이지 수락 명령어가 수신될 때 애플리케이션 어드레스 공간의 보호 영역에 타겟 페이지를 추가한다.
예 10에서, 예들 1-9 중 어느 하나의 콘텐츠 복사 명령어는 메모리 파라미터 정보를 포함하며, 메모리 파라미터 정보는, SECINFO(SEC(SGX(software guard extensions) enclave control) information) 구조- SECINFO 구조는 선택된 콘텐츠가 복사될 때 타겟 페이지에 대해 요청된 타입 및 수정되는 타겟 페이지에 대한 선택된 승인 레벨을 명시함 -; 콘텐츠가 복사될 타겟 페이지의 유효 어드레스; 및 콘텐츠가 복사된 소스 페이지의 유효 어드레스를 포함한다.
예 11에서, 예들 1-10 중 어느 하나의 소스 페이지는, 유효 EPC(enclave page cache) 페이지이고; 소스 페이지는 차단 상태, 보류 상태, 또는 수정 상태에 있지 않은 PT_REG 타입이다.
예 12에서, 예들 1-11 중 어느 하나의 타겟 페이지는, 유효 EPC(enclave page cache) 페이지이고; 타겟 페이지는 보류 상태에 있지만 수정 상태 또는 차단 상태에 있지 않은 PT_REG 타입이다.
다양한 실시들은 위에 설명된 구조적 특징들의 상이한 조합들을 가질 수 있다. 예를 들어, 위에 설명된 컴퓨팅 시스템의 모든 선택적인 특징들은 또한 본 명세서에 설명되는 방법 또는 프로세스에 관하여 구현될 수 있으며, 예들에서의 구체사항들은 하나 이상의 실시에들에서 어느 곳에서나 사용될 수 있다.
예 13에서, 방법은, 1) 프로세서의 프로세서 코어에 의해, 프로세서 코어에 연결되는 주 메모리의 보호 영역에서의 소스 페이지의 선택된 콘텐츠를 복사하라는 콘텐츠 복사 명령어를 디코드하는 단계; 및 2) 프로세서 코어에 의해, 소스 페이지의 선택된 콘텐츠를 보호 영역 내의 타겟 페이지에 복사하라는 콘텐츠 복사 명령어를 실행하는 단계를 포함한다.
예 14에서, 예 13의 방법은, 콘텐츠 복사 명령어에 응답하여, a) 프로세서 코어에 의해, 보호 영역의 타겟 페이지를 할당하는 단계; b) 프로세서 코어에 의해, 복사될 보호 영역의 소스 페이지의 콘텐츠를 선택하는 단계; 및 c) 프로세서 코어에 의해, 선택된 콘텐츠를 보호 영역에서의 타겟 페이지에 복사하는 단계를 더 포함한다.
예 15에서, 예들 13-14의 방법은, 콘텐츠 복사 명령어에 응답하여, a) 프로세서 코어에 의해, 타겟 페이지의 승인들을 업데이트하는 단계; b) 프로세서 코어에 의해, 타겟 페이지의 사용이 완료되었음을 표시하기 위해 타겟 페이지의 보류 비트를 클리어하는 단계; 및 c) 프로세서 코어에 의해, 타겟 페이지에 대한 EDMM(enclave dynamic memory management) 잠금을 해제하는 단계를 더 포함한다.
예 16에서, 예들 13-15의 방법은, 프로세서 코어에 의해, 타겟 페이지의 승인들을 수정하는 단계를 더 포함한다.
예 17에서, 예들 13-16의 방법은, a) 프로세서 코어에 의해, 소스 페이지의 선택된 소스 파라미터들을 검증하는 단계; 또는 b) 프로세서 코어에 의해, 타겟 페이지의 선택된 타겟 파라미터들을 검증하는 단계를 더 포함한다.
예 18에서, 예들 13-17의 방법은, 프로세서 코어에 의해, 소스 페이지의 선택된 소스 파라미터들을 검증하는 단계가, a) 소스 페이지의 판독가능 상태를 결정하는 단계; 및 b) 소스 페이지의 ELRange(enclave linear address range)를 결정하는 단계를 더 포함한다.
예 19에서, 예들 13-18의 방법은, 프로세서 코어에 의해, 타겟 페이지의 선택된 타겟 파라미터들을 검증하는 단계가, a) 타겟 페이지의 기입가능 상태를 결정하는 단계; b) 타겟 페이지의 ELRange(enclave linear address range)를 결정하는 단계; 및 c) 보호 영역 내의 타겟 페이지의 위치를 결정하는 단계를 더 포함한다.
예 20에서, 예들 13-19의 방법은, 프로세서 코어에 의해, 타겟 페이지의 선택된 타겟 파라미터들을 검증하는 단계가, a) 프로세서 코어에 의해, EDMM(enclave dynamic memory management) 잠금을 취득하는 단계; b) 프로세서 코어에 의해, 타겟 페이지의 상태가 정상적이고 보류중이라는 것을 확인하는 단계; 및 c) 프로세서 코어에 의해, 타겟 페이지가 정확한 선형 어드레스를 통해 액세스된다는 것을 확인하는 단계를 더 포함한다.
다양한 실시들은 위에 설명된 구조적 특징들의 상이한 조합들을 가질 수 있다. 예를 들어, 위에 설명된 프로세서들 및 방법들의 모든 선택적인 특징들은 또한 본 명세서에 설명되는 시스템에 관하여 구현될 수 있으며, 예들에서의 구체사항들은 하나 이상의 실시에들에서 어느 곳에서나 사용될 수 있다.
예 21에서, 시스템은, 1) 명령어들을 실행하는 복수의 기능 유닛들을 포함하는 프로세서; 및 2) 프로세서에 연결되는 메모리 디바이스를 포함하고, 메모리 디바이스는 코드 메모리 및 데이터 메모리를 저장하도록 동작 가능하고, 보안 페이지들을 포함하는 보호 영역을 포함하며, 프로세서는, a) 보호 영역 내의 콘텐츠를 복사하라는 명령어를 디코드하고; b) 제1 보안 페이지로부터 제2 보안 페이지로 콘텐츠를 복사하라는 콘텐츠 복사 명령어를 실행한다.
예 22에서는, 예 21의 시스템에서 프로세서가 콘텐츠 복사 명령어에 응답하여 소스 보안 페이지로부터 타겟 보안 페이지로 콘텐츠를 복사하며, 프로세서는 명령어에 응답하여, a) 애플리케이션 어드레스 공간의 보호 영역에서의 제2 보안 페이지를 초기화하는 것; b) 보호 영역에서의 복사될 제1 보안 페이지의 콘텐츠를 선택하는 것; 및 c) 선택된 콘텐츠를 애플리케이션 어드레스 공간의 보호 영역에서의 제2 보안 페이지에 복사하는 것을 수행한다.
예 23에서는, 예들 21-22의 시스템에서, 프로세서가, 명령어에 응답하여, 애플리케이션이 실행되는 동안 선택된 콘텐츠를 제2 페이지에 복사하며, 애플리케이션은 보호 영역에 저장된다.
예 24에서는, 예들 21-23의 시스템에서, 메모리 할당 프로세스가 제1 보안 페이지를 보호 영역에 추가하라는 다른 명령어를 포함한다.
본 발명이 제한된 수의 실시예들에 관하여 설명되었지만, 관련분야의 기술자들은 그로부터의 다수의 수정들 및 변경들을 인식할 것이다. 첨부된 청구항들은 이러한 본 발명의 진정한 사상 및 범위 내에 속하는 바와 같은 모든 그러한 수정들 및 변경들을 커버하는 것으로 의도된다.
이하의 설명에서는, 본 발명의 철저한 이해를 제공하기 위하여, 구체적인 타입들의 프로세서들 및 시스템 구성들, 구체적인 하드웨어 구조들, 구체적인 아키텍처 및 마이크로 아키텍처 세부사항들, 구체적인 레지스터 구성들, 구체적인 명령어 타입들, 구체적인 시스템 구성요소들, 구체적인 측정들/높이들, 구체적인 프로세서 파이프라인 스테이지들 및 연산 등의 예들과 같은, 다수의 구체적인 세부사항들이 제시된다. 그러나, 이러한 구체적인 세부사항들이 본 발명을 실시하는데 반드시 이용될 필요는 없다는 점이 관련분야에서의 숙련된 자에게 명백할 것이다. 다른 경우들에서는, 본 발명을 불필요하게 불명료하게 하는 것을 회피하기 위해서, 구체적인 그리고 대안적인 프로세서 아키텍처들, 설명되는 알고리즘들을 위한 구체적인 로직 회로들/코드, 구체적인 펌웨어 코드, 구체적인 인터커넥트 동작, 상호접속 로직 구성들, 상호접속 제조 기술들 및 재료들, 상호접속 컴파일러 구현들, 코드에서의 알고리즘들의 상호접속 표현, 상호접속 파워 다운 및 게이팅 기술들/로직, 및 컴퓨터 시스템의 다른 상호접속 동작 세부사항들과 같은, 잘 알려진 구성요소들 또는 방법들이 상세히 설명되지는 않는다.
실시예들은, 컴퓨팅 플랫폼들 또는 마이크로프로세서들에서와 같은, 상호접속 집적 회로들에서의 보안 메모리 재구획화를 참조하여 설명된다. 실시예들은 다른 타입들의 집적 회로들 및 프로그램가능 로직 디바이스들에 적용가능할 수 있다. 예를 들어, 개시되는 실시예들이 Intel® UltrabooksTM 컴퓨터들 같은 데스크톱 컴퓨터 시스템 또는 휴대용 컴퓨터들에 제한되는 것은 아니다. 그리고 또한 핸드헬드 디바이스들, 태블릿들, 다른 박형 노트북들, SoC(system on a chip) 디바이스들, 및 임베디드 애플리케이션들과 같은, 다른 디바이스들에 내에서 사용될 수 있다. 핸드헬드 디바이스들의 일부 예들은 셀룰러 전화들, 인터넷 프로토콜 디바이스들, 디지털 카메라들, PDA들(personal digital assistants), 및 핸드헬드 PC들을 포함한다. 임베디드 애플리케이션들은 통상적으로 마이크로제어기, DSP(digital signal processor), 시스템 온 칩, NetPC(network computers), 셋톱 박스들, 네트워크 허브들, WAN(wide area network) 스위치들, 또는 후술하는 기능들 및 동작들을 수행할 수 있는 임의의 다른 시스템을 포함한다. 시스템이 임의의 종류의 컴퓨터 또는 임베디드 시스템일 수 있다는 점이 설명된다. 개시되는 실시예들은 특히, 웨어러블 디바이스들(예를 들어, 시계들), 전자 임플란트들(electronic implants), 감각 및 제어 인프라구조 디바이스들, 제어기들, SCADA(supervisory control and data acquisition) 시스템들 등과 같은 저가 디바이스들에 대해 사용될 수 있다. 더욱이, 본 명세서에 설명되는 장치들, 방법들 및 시스템들은 물리적 컴퓨팅 디바이스들에 제한되지 않고, 에너지 보존 및 효율을 위한 소프트웨어 최적화에들도 관련될 수 있다. 이하의 설명에서 쉽게 명백하게 되는 바와 같이, 본 명세서에서 설명되는 방법들, 장치들, 및 시스템들의 실시예들은 (하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합을 참조하든지 간에) 성능 고려사항들과 균형을 이루는 '녹색 기술(green technology)' 미래에 핵심적인 것들이다.
본 명세서의 실시예들이 프로세서를 참조하여 설명되더라도, 다른 실시예들은 다른 타입들의 집적 회로들 및 논리 디바이스들에 적용될 수 있다. 본 발명의 실시예들의 유사한 기술들 및 교시들은, 보다 높은 파이프라인 스루풋 및 개선된 성능으로부터 이익을 얻을 수 있는 다른 타입들의 회로들 또는 반도체 디바이스들에 적용될 수 있다. 본 발명의 실시예들의 교시들은 데이터 조작들을 수행하는 임의의 프로세서 또는 머신에 적용될 수 있다. 그러나, 본 발명은 512 비트, 256 비트, 128 비트, 64 비트, 32 비트, 또는 16 비트 데이터 연산을 수행하는 프로세서나 머신으로 제한되지 않고, 데이터의 조작 또는 관리가 수행되는 임의의 프로세서 및 머신에 적용될 수 있다. 추가로, 본 명세서에서의 설명은 예들을 제공하고, 첨부 도면들은 예시의 목적들로 다양한 예들을 보여준다. 그러나, 이러한 예들은 제한적인 의미로 해석해서는 안 되는데, 그 이유는 이것들이 본 발명의 실시예들의 모든 가능한 구현들의 빠짐없는 목록을 제공하는 것이 아니라 단순히 본 발명의 실시예들의 예들을 제공하기 위해 의도되기 때문이다.
이하의 예들은 실행 유닛들 및 로직 회로들의 맥락에서 명령어 취급 및 분배를 설명하지만, 본 발명의 다른 실시예들은, 머신에 의해 실행될 때 머신으로 하여금 본 발명의 적어도 하나의 실시예와 일치하는 기능들을 수행하게 하는 머신 판독가능, 타입의(tangible) 매체 상에 저장되는 데이터 또는 명령어들에 의해 달성될 수 있다. 일 실시예에서, 본 발명의 실시예들과 관련된 기능들은 머신 실행가능 명령어들로 구체화된다. 명령어들은, 명령어들로 프로그래밍되는 범용 또는 특수 목적 프로세서로 하여금 본 발명의 단계들을 수행하도록 야기하는데 사용될 수 있다. 본 발명의 실시예들은, 본 발명의 실시예들에 따른 하나 이상의 연산들을 수행하도록 컴퓨터(또는 다른 전자 디바이스들)를 프로그래밍하는데 사용될 수 있는 명령어들이 저장되어 있는 머신 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 대안적으로, 본 발명의 실시예들의 동작들은, 이러한 동작들을 수행하기 위한 고정형 기능 로직을 포함하는 특정 하드웨어 구성요소들에 의해, 또는 프로그램된 컴퓨터 구성요소들 및 고정형 기능 하드웨어 구성요소들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 실시예들을 수행하는 논리를 프로그래밍하는데 사용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 기타 스토리지와 같은 시스템 내의 메모리에 저장될 수 있다. 또한, 이러한 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체에 의해 분산될 수 있다. 따라서, 머신 판독가능 매체는, 이에 제한되는 것은 아니지만, 플로피 디스켓, 광학 디스크, 콤팩트 디스크, 판독 전용 메모리(CD-ROM들), 및 광자기 디스크들, ROM들(Read-Only Memory), RAM(Random Access Memory), EPROM(Electrically Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드들, 플래시 메모리, 또는 전기, 광학, 음향, 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 등)을 통해 인터넷을 통하여 정보를 전송하는데 사용되는 유형의, 머신 판독가능 스토리지를 포함하는, 머신(예를 들어, 컴퓨터)에 의해 판독가능 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있다. 따라서, 컴퓨터 판독가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전자적 명령어들 또는 정보를 저장하거나 전송하기에 적합한 임의의 타입의 유형의 머신 판독가능 매체를 포함한다.
설계는 작성으로부터 시뮬레이션을 거쳐 제조에 이르기까지 다양한 단계들을 거칠 수 있다. 설계를 나타내는 데이터는 다수의 방식으로 설계를 나타낼 수 있다. 먼저, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어(hardware description language) 또는 다른 기능 기술 언어(functional description language)를 이용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델은 설계 프로세스의 일부 단계들에서 생성될 수 있다. 더욱이, 대부분의 설계들은, 일부 단계에서, 하드웨어 모델의 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 종래의 반도체 제조 기술들이 사용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하는데 사용되는 마스크들에 대한 상이한 마스크 층들 상의 다양한 특징들의 유무를 명시하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독가능한 매체에 저장될 수 있다. 메모리, 또는 디스크와 같은 자기 또는 광학 스토리지는, 정보를 전송하기 위해 변조되거나 다른 방식으로 발생하는 광학 또는 전기적 파동을 통해 전송되는 그러한 정보를 저장하는 머신 판독가능 매체일 수 있다. 코드 또는 설계를 나타내거나 전달하는 전기 반송파가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행되는 한, 새로운 사본이 만들어진다. 따라서, 통신 제공자 또는 네트워크 제공자는 반송파로 인코드되는 정보와 같은 아티클(article)을 타입의 머신 판독가능 매체 상에 적어도 일시적으로 저장하여, 본 발명의 실시예들의 기술들을 구현할 수 있다.
본 명세서에 사용되는 바와 같은 모듈은 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은 마이크로-제어기에 의해 실행되도록 적응된 코드를 저장하는 비-일시적 매체와 관련되는 마이크로-제어기와 같은 하드웨어를 포함한다. 따라서, 일 실시예에서, 모듈에 대한 참조는 비-일시적 매체 상에 유지될 코드를 인식 및/또는 실행하도록 구체적으로 구성되는 하드웨어를 지칭한다. 더욱이, 다른 실시예에서, 모듈의 사용은 미리 결정된 동작들을 수행하기 위해 마이크로제어기에 의해 실행되도록 구체적으로 적응되는 코드를 포함하는 비-일시적 매체를 지칭한다. 그리고, 추정될 수 있는 바와 같이, 또 다른 실시예에서, (이러한 예에서의) 모듈이라는 용어는 마이크로제어기와 비-일시적 매체의 조합을 지칭할 수 있다. 개별인 것으로 도시되는 모듈 경계들은 종종 흔히 변하고 잠재적으로 겹친다. 예를 들어, 제1 및 제2 모듈은, 일부의 독립적인 하드웨어, 소프트웨어, 또는 펌웨어를 잠재적으로 보유하면서, 하드웨어, 소프트웨어, 펌웨어, 또는 그 조합을 공유할 수 있다. 일 실시예에서, 로직이라는 용어의 사용은 트랜지스터, 레지스터와 같은 하드웨어, 또는 프로그램가능한 로직 디바이스와 같은 그 외의 하드웨어를 포함한다.
일 실시예에서, '~하도록 구성되는(configured to)'이라는 문구의 사용은, 지정되거나 결정된 작업을 수행하기 위해 장치, 하드웨어, 로직, 또는 요소를 배열하는 것(arranging), 조립하는 것(putting together), 제조하는 것(manufacturing), 판매 제안하는 것(offering to sell), 수입하는 것(importing), 및/또는 설계하는 것을 지칭한다. 이러한 예에서, 동작하고 있지 않는 장치 또는 그의 요소도 상기 지정된 작업을 수행하도록 설계되고, 연결되고, 및/또는 인터커넥트되면, 지정된 작업을 수행"하도록 구성"된다. 전적으로 예시적인 예로서, 로직 게이트는 동작 동안 0 또는 1를 제공할 수 있다. 그러나, 클럭에 인에이블 신호를 제공"하도록 구성되는" 로직 게이트가 1 또는 0을 제공할 수 있는 모든 잠재적인 로직 게이트를 포함하지는 않는다. 그 대신에, 로직 게이트는, 동작 동안 1 또는 0 출력이 클럭을 인에이블시키는 일부 방식으로 연결되는 것이다. "~하도록 구성되는"이라는 용어의 사용은 동작을 필요로 하지 않는 대신에, 장치, 하드웨어, 및/또는 요소의 잠재적인 상태에 집중한다는 점에 다시 한 번 유의하고, 여기서 잠재적인 상태에서 장치, 하드웨어, 및/또는 요소는 장치, 하드웨어, 및/또는 요소가 동작할 때 특정 작업을 수행하도록 설계된다.
더구나, 일 실시예에서, '~로(to)', '~하도록/를할 수 있는(capable of/to)', 및/또는 '~하도록 동작가능한(operable to)'이라는 문구의 사용은 특정한 방식으로 장치, 로직, 하드웨어, 및/또는 요소의 사용을 인에이블시키는 그러한 방식으로 설계된 일부 장치, 로직, 하드웨어, 및/또는 요소를 지칭한다. 위와 같이 유의할 점은, 일 실시예에서, '~로', '~하도록할 수 있는' 또는 '~로 동작 가능한'의 사용은 장치, 로직, 하드웨어, 및/또는 요소의 잠재 상태를 지칭하며, 여기서 장치, 로직 하드웨어, 및/또는 요소는 동작 중이지는 않지만, 특정 방식으로 장치의 사용을 인에이블시키는 그러한 방식으로 설계된다는 것이다.
본 명세서에서 사용된 값은, 숫자, 상태, 로직 상태, 또는 이진 로직 상태의 임의의 공지된 표현을 포함한다. 종종, 논리 레벨들, 논리 값들 또는 논리적인 값들의 사용은 이진 논리 상태들을 간단히 표현하는 1들 및 0들로서 지칭된다. 예를 들어, 1은 높은 로직 레벨을 지칭하고 0은 낮은 로직 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 스토리지 셀은 단일의 로직 값 또는 다수의 로직 값들을 보유할 수 있다. 그러나, 컴퓨터 시스템에서의 값들에 대한 그 외의 표현들이 사용되어 왔다. 예를 들어, 십진수 10은 이진 값 1010 및 16진법 문자 A로도 표현될 수 있다. 따라서, 값은 컴퓨터 시스템 내에 보유될 수 있는 정보의 임의의 표현을 포함한다.
게다가, 상태들은 값들 또는 값들의 부분에 의해 표현될 수 있다. 일례로서, 로직 1과 같은 제1 값은 디폴트 또는 초기 상태를 나타낼 수 있고, 로직 0과 같은 제2 값은 디폴트가 아닌 상태를 나타낼 수 있다. 한, 일 실시예에서, 재설정 및 설정이라는 용어들은 각각 디폴트 및 업데이트된 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 잠재적으로는 높은 논리값, 즉, 재설정을 포함하는 반면, 업데이트된 값은 낮은 논리 값, 즉 설정을 포함한다. 임의의 수의 상태들을 나타내기 위하여 값들의 임의의 조합이 사용될 수 있다는 점에 주목하자.
전술한 방법들, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 처리 요소에 의해 실행 가능한 머신-액세스가능, 머신 판독가능, 컴퓨터 액세스가능, 또는 컴퓨터 판독가능 매체 상에 저장된 명령어들 또는 코드를 통해 구현될 수 있다. 비일시적 머신 액세스가능/판독가능 매체는 컴퓨터 또는 전자 시스템과 같은 머신에 의해 판독가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 비-일시적인 머신 액세스가능 매체는 RAM(random-access memory), 이를테면, SRAM(static RAM) 또는 DRAM(dynamic RAM); ROM; 자기 또는 광학 스토리지 매체; 플래시 메모리 디바이스들; 전기 스토리지 디바이스들; 광학 스토리지 디바이스들; 음향 스토리지 디바이스들; 그로부터 정보를 수신할 수 있는 비-일시적인 매체들과 구별되는, 일시적(전파된) 신호들(예를 들어, 반송파, 적외선 신호, 디지털 신호)로부터 수신된 정보를 유지하기 위한 다른 형태의 스토리지 디바이스들 등을 포함한다.
본 발명의 실시예들을 수행하는 논리를 프로그래밍하는데 사용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 기타 스토리지와 같은 시스템 내의 메모리에 저장될 수 있다. 또한, 이러한 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체에 의해 분산될 수 있다. 따라서, 머신 판독가능 매체는, 이에 제한되는 것은 아니지만, 플로피 디스켓들, 광학 디스크들, 콤팩트 디스크, 판독 전용 메모리(CD-ROM들), 및 광자기 디스크들, ROM들(Read-Only Memory), RAM(Random Access Memory), EPROM(Electrically Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드들, 플래시 메모리, 또는 전기, 광학, 음향, 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 등)을 통해 인터넷을 통하여 정보를 전송하는데 사용되는 유형의, 머신 판독가능 스토리지를 포함하는, 머신(예를 들어, 컴퓨터)에 의해 판독가능 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있다. 따라서, 컴퓨터 판독가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전자적 명령어들 또는 정보를 저장하거나 전송하기에 적합한 임의의 타입의 유형의 머신 판독가능 매체를 포함한다.
본 명세서 전반적으로 "일 실시예(one embodiment)" 또는 "실시예(an embodiment)"를 참조하는 것은, 실시예와 결합되어 설명되는 특정의 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전반적으로 다양한 곳에서의 "일 실시예에서" 또는 "실시예에서"라는 표현들의 출현들은 반드시 모두가 동일 실시예를 지칭하지는 않는다. 더욱이, 특정한 특징들, 구조들, 또는 특성들은 하나 이상의 실시예에서 임의의 적합한 방식으로 결합될 수 있다.
전술한 명세서에서, 상세한 설명은 특정한 예시적인 실시예들과 관련하여 주어졌다. 그러나, 첨부된 청구항들에서 개시된 바와 같은 본 발명의 더 넓은 사상 및 범주로부터 벗어남이 없이 그에 대한 다양한 수정 및 변경들이 행해질 수 있다는 것은 명백할 것이다. 따라서, 본 명세서 및 도면들은 한정적인 의미가 아니라 예시적인 의미로 간주되어야 한다. 또한, 실시예 및 기타 예시적인 언어의 전술한 사용은 반드시 동일한 실시예 또는 동일한 예를 지칭할 필요는 없지만, 상이하고 구별되는 실시예들 뿐만 아니라, 잠재적으로 동일한 실시예를 지칭할 수도 있다.
상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 알고리즘들 및 심볼 표현들의 관점에서 제시된다. 이러한 알고리즘적 설명 및 표현은 데이터 처리 기술 분야의 통상의 기술자가 이들의 작업 내용을 그 기술 분야의 다른 통상의 기술자에게 가장 효과적으로 전달하기 위해 사용하는 수단이다. 알고리즘은 여기서 그리고 일반적으로 원하는 결과를 초래하는 자기-일관적인(self-consistent) 연산들의 시퀀스인 것으로 고려된다. 동작들은 물리적 양들의 물리적 조작을 요구하는 것들이다. 일반적으로, 반드시 그러하지는 않지만, 이들 양들은 저장되고, 전송되고, 결합되고, 비교되고, 다른 방식으로 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 주로 통상 사용의 이유로 이들 신호들을 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 숫자들 등으로서 지칭하는 것이 때로는 편리하다는 것이 입증되었다. 본 명세서에 설명되는 블록들은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합일 수 있다.
그러나, 명심해야 할 것은 이러한 및 유사한 용어들 전부가 적절한 물리량과 관련되게 될 것이고, 이러한 양들에 적용되는 편리한 표지일 뿐이라는 점이다. 위의 논의로부터 명백한 바와 같이 구체적으로 달리 기술되지 않는 한, 본 설명 전반적으로 "정의하는(defining)", "수신하는(receiving)" "결정하는(determining)" "발행하는(issuing)", "링크시키는(linking)", "관련시키는(associating)", "획득하는(obtaining)", "인증하는(authenticating)", "방지하는(prohibiting)", "실행하는(executing)", "요청하는(requesting)", "통신하는(communicating)" 등과 같은 용어들을 이용하는 논의들은, 컴퓨팅 시스템의 레지스터들 및 메모리들 내의 물리적(예를 들어, 전자적) 양들로서 표현되는 데이터를 조작하여, 컴퓨팅 시스템 메모리들이나 레지스터들 또는 다른 이러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적 양들로서 유사하게 표현되는 다른 데이터로 변환하는 컴퓨팅 시스템 또는 유사한 전자 컴퓨팅 디바이스의 액션들 및 프로세스들을 지칭한다는 것이 인식된다.
"예(example)" 또는 "예시적인(exemplary)"이라는 단어들은 본 명세서에서 예, 사례 또는 예시의 역할을 하는 것을 의미하는데 사용된다. 본 명세서에서 "예(example)" 또는 "예시적인(exemplary)"으로서 설명되는 임의의 양상 또는 설계가 다른 양상들 또는 설계들에 비해 반드시 바람직하거나 유리한 것으로 해석될 필요는 없다. 오히려, "예(example)" 또는 "예시적인(exemplary)"이라는 단어들의 사용은 개념들을 구체적인 방식으로 제시하기 위해 의도된 것이다. 본 출원에서 사용되는 바와 같이, "또는(or)"이라는 용어는 배타적 "or"가 아니라 포괄적 "or"를 의미하는 것으로 의도된다. 즉, 달리 특정되어 있거나 맥락으로부터 명백하지 않다면, "X는 A 또는 B를 포함한다"는 자연 발생적인 포괄적 순열들 중 하나를 의미하도록 의도된 것이다. 즉, X가 A를 포함하거나; X가 B를 포함하거나; 또는 X가 A 및 B 양자 모두를 포함한다면, "X는 A 또는 B를 포함한다"는 것은 임의의 전술한 사례들에서 충족된다. 또한, 본 명세서 및 첨부의 특허청구범위에서 사용된 "하나("a" 및 "an")"는, 달리 특정되어 있거나 또는 맥락으로부터 단수 형태로 유도된 것임이 명백하지 않은 한, 일반적으로 "하나 이상"을 의미하는 것으로 해석되어야 한다. 또한, "실시예(an embodiment)" 또는 "일 실시예(one embodiment)" 또는 "구현(an implementation)" 또는 "일 구현(one implementation)"이라는 용어의 사용은 전반적으로 이와 같이 설명되지 않는다면 동일한 실시예 또는 구현을 의미하는 것으로 의도되지는 않는다. 또한, 본 명세서에서 사용되는 바와 같은 "제1(first)", "제2(second)", "제3(third)", "제4(fourth)" 등의 용어들은 상이한 요소들을 구별하기 위한 레이블들로서 의도되고, 반드시 그들의 수치 지정에 따라 서수 의미를 갖는 것은 아닐 수 있다.

Claims (20)

  1. 프로세서로서,
    프로세서 코어; 및
    상기 프로세서 코어와 주 메모리 사이에 연결되는 메모리 제어기
    를 포함하고,
    상기 주 메모리는 EPC(enclave page cache) 페이지들을 포함하는 엔클레이브를 포함하며, 상기 프로세서 코어는,
    제1 엔클레이브 명령어를 실행하고 - 상기 제1 엔클레이브 명령어는 단일 명령어임 -;
    상기 제1 엔클레이브 명령어를 실행하는 것에 응답하여,
    타겟 EPC 페이지와 동일한 엔클레이브 내의 소스 EPC 페이지의 콘텐츠를 복사하고,
    상기 타겟 EPC 페이지의 액세스 승인 레벨을 갱신하고,
    상기 타겟 EPC 페이지의 페이지 타입 플래그를 보류 상태(pending state)로부터 상기 엔클레이브 내 사용을 위한 유효 상태로 변경하기 위한 것인, 프로세서.
  2. 제1항에 있어서,
    상기 프로세서 코어는 또한, 상기 타겟 EPC 페이지를 상기 엔클레이브 내에 할당하도록 하는 제2 엔클레이브 명령어를 실행하기 위한 것이고,
    상기 제2 엔클레이브 명령어는 상기 타겟 EPC 페이지의 상기 페이지 타입 플래그를 상기 보류 상태로 설정하기 위한 것인, 프로세서.
  3. 제1항에 있어서,
    상기 프로세서 코어는 또한,
    상기 타겟 EPC 페이지에 대한 잠금(lock)을 설정하고,
    상기 타겟 EPC 페이지에 복사될 상기 엔클레이브 내의 상기 소스 EPC 페이지의 상기 콘텐츠의 적어도 일부분을 선택하고,
    상기 소스 EPC 페이지에 대한 페이지 타입 플래그가 차단 상태(blocked state), 상기 보류 상태, 또는 수정 상태(modified state)를 나타내도록 설정되어 있지 않다고 결정하고,
    상기 타겟 EPC 페이지의 ELRange(enclave linear address range)가 상기 엔클레이브 내에 있다고 결정하고,
    상기 타겟 EPC 페이지의 상기 ELRange가 상기 엔클레이브 내에 있고 상기 소스 EPC 페이지에 대한 상기 페이지 타입 플래그가 상기 차단 상태, 상기 보류 상태, 또는 상기 수정 상태를 나타내도록 설정되어 있지 않다는 것에 응답하여, 상기 선택된 콘텐츠를 상기 소스 EPC 페이지로부터 상기 엔클레이브 내의 상기 타겟 EPC 페이지에 복사하고, 상기 소스 EPC 페이지의 보안 속성들을 상기 타겟 EPC 페이지의 보안 속성들에 복사하고,
    상기 타겟 EPC 페이지가 상기 엔클레이브 내에서의 사용을 위한 준비가 되었다는 것을 지시하기 위해 상기 타겟 EPC 페이지의 보류 비트를 클리어하고,
    상기 타겟 EPC 페이지에 대한 상기 잠금을 해제하기 위한 것인, 프로세서.
  4. 제1항에 있어서,
    상기 프로세서 코어는 또한, 애플리케이션이 실행되는 동안 상기 콘텐츠의 적어도 일부분을 상기 타겟 EPC 페이지에 복사하기 위한 것이고, 상기 애플리케이션은 상기 엔클레이브에 저장되는, 프로세서.
  5. 제1항에 있어서,
    상기 프로세서 코어는,
    현재 권한 레벨(privilege level)을 결정하고,
    상기 현재 권한 레벨이 0일 때 상기 제1 엔클레이브 명령어를 실행하기 위한 것인, 프로세서.
  6. 제2항에 있어서,
    상기 프로세서 코어는,
    상기 제1 엔클레이브 명령어가 언제 실패할 지를 결정하고 - 상기 제1 엔클레이브 명령어는,
    상기 제1 엔클레이브 명령어의 피연산자가 올바르게 정렬되지 않을 때;
    지원되지 않는 보안 속성들이 설정될 때;
    선택된 SECS(SGX(software guard extensions) enclave control structure) 페이지들이 다른 스레드에 의해 잠길 때;
    상기 제1 엔클레이브 명령어가 상기 타겟 EPC 페이지에 대한 유효 어드레스를 포함하지 않을 때;
    상기 타겟 EPC 페이지가 다른 스레드에 의해 잠길 때;
    상기 타겟 EPC 페이지가 유효 상태에 있을 때; 또는
    선택된 엔클레이브 오프셋이 상기 엔클레이브의 유효 어드레스 범위 밖에 있을 때 실패함 -,
    상기 제2 엔클레이브 명령어가 언제 실패할 지를 결정하기 위한 것인 - 상기 제2 엔클레이브 명령어는,
    상기 제2 엔클레이브 명령어의 피연산자가 올바르게 정렬되지 않을 때;
    지원되지 않는 액세스 권한 조합이 요청될 때;
    상기 제2 엔클레이브 명령어의 상기 피연산자가 상기 타겟 EPC 페이지를 참조하지 않을 때;
    상기 타겟 EPC 페이지 또는 상기 소스 EPC 페이지가 다른 스레드에 의해 사용 중일 때;
    상기 타겟 EPC 페이지가 선택된 페이지 타입 플래그를 수정 상태 또는 차단 상태 중 하나로 갖지 않을 때; 또는
    상기 타겟 EPC 페이지가 유효 페이지가 아닐 때 실패함 -, 프로세서.
  7. 제2항에 있어서,
    상기 제2 엔클레이브 명령어는 메모리 파라미터 정보를 포함하고, 상기 메모리 파라미터 정보는,
    페이지 정보(PAGEINFO) 구조의 유효 어드레스; 및
    상기 타겟 EPC 페이지의 유효 어드레스
    를 포함하는, 프로세서.
  8. 제7항에 있어서,
    상기 PAGEINFO 구조는,
    상기 소스 EPC 페이지의 보안 정보(SECINFO) 구조; 및
    상기 소스 EPC 페이지의 페이지 정보
    를 포함하는, 프로세서.
  9. 제2항에 있어서,
    상기 프로세서 코어는 상기 제2 엔클레이브 명령어에 응답하여,
    비어 있는(free) EPC 페이지를 상기 엔클레이브의 섹션에서의 하나 이상의 선택된 SECS 페이지들과 관련시키고,
    EPCM(enclave page cache map)에 엔클레이브 오프셋 속성 및 엔클레이브 보안 속성을 저장하고,
    상기 타겟 EPC 페이지의 콘텐츠를 제로화하기 위한 것인, 프로세서.
  10. 제1항에 있어서,
    상기 제1 엔클레이브 명령어는 메모리 파라미터 정보를 포함하고, 상기 메모리 파라미터 정보는,
    SECINFO(SEC(SGX(software guard extensions) enclave control) information) 구조 - 상기 SECINFO 구조는 상기 콘텐츠의 적어도 일부분이 복사될 때 상기 타겟 EPC 페이지에 대해 요청된 타입 및 수정되는 상기 타겟 EPC 페이지에 대한 선택된 승인 레벨을 명시함 -;
    상기 타겟 EPC 페이지의 유효 어드레스; 및
    상기 소스 EPC 페이지의 유효 어드레스
    를 포함하는, 프로세서.
  11. 제3항에 있어서,
    상기 잠금은 EDMM(enclave dynamic memory management) 잠금이고, 상기 소스 EPC 페이지 전체가 상기 타겟 EPC 페이지에 복사될 때까지 다른 스레드들은 상기 타겟 EPC 페이지에 액세스하는 것이 제한되는, 프로세서.
  12. 제1항에 있어서,
    상기 프로세서 코어는 또한,
    상기 타겟 EPC 페이지의 상기 페이지 타입 플래그가 상기 유효 상태로 설정될 때까지 다른 엔클레이브 스레드들, 운영 체제, 또는 애플리케이션이 상기 타겟 EPC 페이지에 액세스하는 것을 제한하기 위해, 상기 타겟 EPC 페이지의 상기 페이지 타입 플래그를 상기 보류 상태로 설정하고,
    상기 소스 EPC 페이지 전체가 상기 타겟 EPC 페이지에 복사된 이후, 상기 타겟 EPC 페이지의 상기 페이지 타입 플래그를 상기 유효 상태로 설정하기 위한 것인, 프로세서.
  13. 방법으로서,
    프로세서 코어에 의해, 타겟 EPC 페이지를 엔클레이브에 추가하고, 상기 타겟 EPC 페이지의 페이지 타입 플래그를 보류 상태로 설정하도록 하는 페이지 추가 명령어를 실행하는 단계;
    동일한 엔클레이브 내의 소스 EPC 페이지로부터의 콘텐츠를 상기 타겟 EPC 페이지에 복사하도록 하는 단일 명령어를 실행하는 단계; 및
    상기 단일 명령어에 응답하여,
    타겟 EPC 페이지와 동일한 엔클레이브 내의 소스 EPC 페이지의 콘텐츠를 복사하는 단계;
    상기 타겟 EPC 페이지의 액세스 승인 레벨을 갱신하는 단계; 및
    상기 타겟 EPC 페이지의 페이지 타입 플래그를 보류 상태로부터 상기 엔클레이브 내 사용을 위한 유효 상태로 변경하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 타겟 EPC 페이지에 대한 잠금을 설정하는 단계;
    상기 타겟 EPC 페이지에 복사될 상기 엔클레이브 내의 상기 소스 EPC 페이지의 상기 콘텐츠를 선택하는 단계;
    상기 소스 EPC 페이지에 대한 페이지 타입 플래그가 차단 상태, 상기 보류 상태, 또는 수정 상태를 나타내도록 설정되어 있지 않다고 결정하는 단계;
    상기 타겟 EPC 페이지의 ELRange가 상기 엔클레이브 내에 있다고 결정하는 단계;
    상기 타겟 EPC 페이지의 상기 ELRange가 상기 엔클레이브 내에 있고 상기 소스 EPC 페이지에 대한 상기 페이지 타입 플래그가 상기 차단 상태, 상기 보류 상태, 또는 상기 수정 상태를 나타내도록 설정되어 있지 않다는 것에 응답하여, 상기 소스 EPC 페이지의 상기 콘텐츠를 상기 엔클레이브 내의 상기 타겟 EPC 페이지에 복사하고, 상기 소스 EPC 페이지의 보안 속성들을 상기 타겟 EPC 페이지의 보안 속성들에 복사하는 단계;
    상기 타겟 EPC 페이지가 상기 엔클레이브 내에서의 사용을 위한 준비가 되었다는 것을 지시하기 위해 상기 타겟 EPC 페이지의 보류 비트를 클리어하는 단계; 및
    상기 타겟 EPC 페이지에 대한 상기 잠금을 해제하는 단계
    를 더 포함하는 방법.
  15. 제14항에 있어서,
    상기 소스 EPC 페이지의 선택된 소스 파라미터들을 검증하는 단계; 또는
    상기 타겟 EPC 페이지의 선택된 타겟 파라미터들을 검증하는 단계
    를 더 포함하는 방법.
  16. 제15항에 있어서,
    상기 소스 EPC 페이지의 상기 선택된 소스 파라미터들을 검증하는 단계는,
    상기 소스 EPC 페이지의 판독가능 상태를 결정하는 단계; 및
    상기 소스 EPC 페이지의 ELRange를 결정하는 단계
    를 더 포함하는, 방법.
  17. 제15항에 있어서,
    상기 타겟 EPC 페이지의 상기 선택된 타겟 파라미터들을 검증하는 단계는,
    상기 타겟 EPC 페이지의 기입가능 상태를 결정하는 단계; 및
    상기 엔클레이브 내의 상기 타겟 EPC 페이지의 위치를 결정하는 단계
    를 더 포함하는, 방법.
  18. 제15항에 있어서,
    상기 타겟 EPC 페이지의 상기 선택된 타겟 파라미터들을 검증하는 단계는,
    상기 타겟 EPC 페이지에 대한 상기 잠금을 설정하기 위해 EDMM 잠금을 취득하는 단계;
    상기 타겟 EPC 페이지의 상태가 정상적(regular)이고 보류중이라는 것을 확인하는 단계; 및
    상기 타겟 EPC 페이지가 정확한 선형 어드레스(correct linear address)를 통해 액세스된다는 것을 확인하는 단계
    를 더 포함하는, 방법.
  19. 시스템으로서,
    명령어들을 실행하는 복수의 기능 유닛들을 포함하는 프로세서; 및
    상기 프로세서에 연결되는 메모리 디바이스
    를 포함하고,
    상기 메모리 디바이스는 제1 EPC(enclave page cache) 페이지를 포함하는 엔클레이브를 포함하며,
    상기 프로세서는,
    타겟 EPC 페이지를 엔클레이브에 추가하고, 상기 타겟 EPC 페이지의 페이지 타입 플래그를 보류 상태로 설정하도록 하는 페이지 추가 명령어를 실행하고,
    상기 제1 EPC 페이지와 동일한 엔클레이브 내의 제2 EPC 페이지로부터의 콘텐츠를 복사하도록 하는 단일 명령어를 실행하고,
    상기 단일 명령어를 실행하는 것에 응답하여,
    타겟 EPC 페이지와 동일한 엔클레이브 내의 소스 EPC 페이지의 콘텐츠를 복사하고,
    상기 타겟 EPC 페이지의 액세스 승인 레벨을 갱신하고,
    상기 타겟 EPC 페이지의 페이지 타입 플래그를 보류 상태로부터 상기 엔클레이브 내 사용을 위한 유효 상태로 변경하기 위한 것인, 시스템.
  20. 제19항에 있어서,
    상기 프로세서는 또한,
    상기 타겟 EPC 페이지에 복사될 상기 엔클레이브 내의 상기 소스 EPC 페이지의 상기 콘텐츠를 선택하고,
    상기 타겟 EPC 페이지에 대한 잠금을 설정하고,
    상기 소스 EPC 페이지에 대한 페이지 타입 플래그가 차단 상태, 상기 보류 상태, 또는 수정 상태를 나타내도록 설정되어 있지 않다고 결정하고,
    상기 타겟 EPC 페이지의 ELRange가 상기 엔클레이브 내에 있다고 결정하고,
    상기 타겟 EPC 페이지의 상기 ELRange가 상기 엔클레이브 내에 있고 상기 소스 EPC 페이지에 대한 상기 페이지 타입 플래그가 상기 차단 상태, 상기 보류 상태, 또는 상기 수정 상태를 나타내도록 설정되어 있지 않다는 것에 응답하여, 상기 소스 EPC 페이지의 상기 콘텐츠를 상기 엔클레이브 내의 상기 타겟 EPC 페이지에 복사하고, 상기 소스 EPC 페이지의 보안 속성들을 상기 타겟 EPC 페이지의 보안 속성들에 복사하고,
    상기 타겟 EPC 페이지가 상기 엔클레이브 내에서의 사용을 위한 준비가 되었다는 것을 지시하기 위해 상기 타겟 EPC 페이지의 보류 비트를 클리어하고,
    상기 타겟 EPC 페이지에 대한 상기 잠금을 해제하기 위한 것인, 시스템.
KR1020217012114A 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화 KR102318740B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/495,074 US20160085695A1 (en) 2014-09-24 2014-09-24 Memory initialization in a protected region
US14/495,074 2014-09-24
KR1020177005090A KR102269010B1 (ko) 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화
PCT/US2015/045385 WO2016048478A1 (en) 2014-09-24 2015-08-14 Memory initialization in a protected region

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005090A Division KR102269010B1 (ko) 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화

Publications (2)

Publication Number Publication Date
KR20210047975A KR20210047975A (ko) 2021-04-30
KR102318740B1 true KR102318740B1 (ko) 2021-10-28

Family

ID=55525876

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020217012114A KR102318740B1 (ko) 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화
KR1020177005090A KR102269010B1 (ko) 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020177005090A KR102269010B1 (ko) 2014-09-24 2015-08-14 보호 영역에서의 메모리 초기화

Country Status (5)

Country Link
US (3) US20160085695A1 (ko)
EP (2) EP3198453B1 (ko)
KR (2) KR102318740B1 (ko)
CN (1) CN106575261A (ko)
WO (1) WO2016048478A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9875189B2 (en) 2015-06-12 2018-01-23 Intel Corporation Supporting secure memory intent
US9852072B2 (en) * 2015-07-02 2017-12-26 Netapp, Inc. Methods for host-side caching and application consistent writeback restore and devices thereof
US10664179B2 (en) * 2015-09-25 2020-05-26 Intel Corporation Processors, methods and systems to allow secure communications between protected container memory and input/output devices
GB2543520B (en) * 2015-10-20 2019-06-19 Advanced Risc Mach Ltd Memory access instructions
US10511598B2 (en) * 2016-03-29 2019-12-17 Intel Corporation Technologies for dynamic loading of integrity protected modules into secure enclaves
US10354095B2 (en) * 2016-03-31 2019-07-16 Intel Corporation Methods and apparatus to initialize enclaves on target processors
US10572687B2 (en) * 2016-04-18 2020-02-25 America as represented by the Secretary of the Army Computer security framework and hardware level computer security in an operating system friendly microprocessor architecture
US10572395B2 (en) * 2016-09-07 2020-02-25 Intel Corporation Non-enclave access prevention
US10180854B2 (en) 2016-09-28 2019-01-15 Intel Corporation Processor extensions to identify and avoid tracking conflicts between virtual machine monitor and guest virtual machine
US10324862B2 (en) * 2016-09-30 2019-06-18 Intel Corporation Supporting oversubscription of guest enclave memory pages
US9798482B1 (en) 2016-12-05 2017-10-24 Red Hat, Inc. Efficient and secure memory allocation in virtualized computer systems
WO2018230280A1 (ja) * 2017-06-14 2018-12-20 住友電気工業株式会社 車外通信装置、通信制御方法および通信制御プログラム
US10387686B2 (en) 2017-07-27 2019-08-20 International Business Machines Corporation Hardware based isolation for secure execution of virtual machines
US10296741B2 (en) 2017-07-27 2019-05-21 International Business Machines Corporation Secure memory implementation for secure execution of virtual machines
FR3069935A1 (fr) * 2017-08-01 2019-02-08 Maxim Integrated Products, Inc. Dispositifs et procedes de protection de propriete intellectuelle de logiciel pour des plates-formes integrees
CN111259380B (zh) * 2017-08-22 2021-02-12 海光信息技术股份有限公司 内存页转移方法和函数调用方法
US10579439B2 (en) 2017-08-29 2020-03-03 Red Hat, Inc. Batched storage hinting with fast guest storage allocation
US10956216B2 (en) 2017-08-31 2021-03-23 Red Hat, Inc. Free page hinting with multiple page sizes
US10628315B2 (en) * 2017-09-28 2020-04-21 Intel Corporation Secure memory repartitioning technologies
US10474382B2 (en) 2017-12-01 2019-11-12 Red Hat, Inc. Fast virtual machine storage allocation with encrypted storage
US11082231B2 (en) * 2017-12-29 2021-08-03 Intel Corporation Indirection directories for cryptographic memory protection
US10838773B2 (en) * 2018-03-30 2020-11-17 Intel Corporation Techniques for dynamic resource allocation among cryptographic domains
CN108459973B (zh) * 2018-04-03 2022-03-18 清华大学 处理器的安全控制方法、装置和系统
CN112703490A (zh) * 2018-09-18 2021-04-23 华为技术有限公司 用于存储器保护的装置和方法
US11095684B2 (en) * 2019-01-07 2021-08-17 Fortanix, Inc. Providing attributes of a network service
US11088846B2 (en) * 2019-03-28 2021-08-10 Intel Corporation Key rotating trees with split counters for efficient hardware replay protection
CN109992526A (zh) * 2019-04-10 2019-07-09 苏州浪潮智能科技有限公司 一种读写管理方法以及相关装置
US11256785B2 (en) * 2019-07-09 2022-02-22 Microsoft Technologly Licensing, LLC Using secure memory enclaves from the context of process containers
US20210144170A1 (en) * 2019-11-09 2021-05-13 Indian Institute Of Science System and method for protection against side channel attacks
US11436141B2 (en) 2019-12-13 2022-09-06 Red Hat, Inc. Free memory page hinting by virtual machines
CN111159018B (zh) * 2019-12-17 2021-06-22 浙江大学 基于软件防护扩展指令sgx的在线模糊测试系统和方法
US11763041B2 (en) 2021-04-28 2023-09-19 SK Hynix Inc. Data storage device performing in-storage processing

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159184A1 (en) 2010-12-17 2012-06-21 Johnson Simon P Technique for Supporting Multiple Secure Enclaves
JP2014112383A (ja) 2013-12-19 2014-06-19 Intel Corp セキュアなアプリケーションの実行を提供するプロセッサ
US20140189326A1 (en) 2012-12-28 2014-07-03 Rebekah Leslie Memory management in secure enclaves

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4985825A (en) 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
DE19928057B4 (de) 1999-06-15 2005-11-10 Francotyp-Postalia Ag & Co. Kg Sicherheitsmodul und Verfahren zur Sicherung der Postregister vor Manipulation
US6502170B2 (en) * 2000-12-15 2002-12-31 Intel Corporation Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes
US7631160B2 (en) * 2001-04-04 2009-12-08 Advanced Micro Devices, Inc. Method and apparatus for securing portions of memory
US7191318B2 (en) * 2002-12-12 2007-03-13 Alacritech, Inc. Native copy instruction for file-access processor with copy-rule-based validation
EP1450261A1 (en) * 2003-02-18 2004-08-25 STMicroelectronics S.r.l. Semiconductor memory with access protection scheme
KR100694061B1 (ko) * 2004-10-06 2007-03-12 삼성전자주식회사 데이터를 안전하게 저장하는 장치 및 방법
US20070022141A1 (en) 2005-07-19 2007-01-25 Singleton Shawn D System and method for acquiring and assembling real property data
US20080052467A1 (en) 2006-08-25 2008-02-28 Advanced Micro Devices, Inc. System for restricted cache access during information transfers and method thereof
US20090196417A1 (en) * 2008-02-01 2009-08-06 Seagate Technology Llc Secure disposal of storage data
CN101777104A (zh) * 2009-01-14 2010-07-14 青岛大学 一种基于多cpu双总线的高安全性体系结构
US8578175B2 (en) * 2011-02-23 2013-11-05 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
CN101788958A (zh) * 2010-02-04 2010-07-28 杭州晟元芯片技术有限公司 一种存储器数据保护的方法
US9009406B2 (en) * 2010-12-10 2015-04-14 International Business Machines Corporation Determining server write activity levels to use to adjust write cache size
US8832452B2 (en) * 2010-12-22 2014-09-09 Intel Corporation System and method for implementing a trusted dynamic launch and trusted platform module (TPM) using secure enclaves
CN103455280B (zh) * 2012-05-31 2016-12-14 国际商业机器公司 用于执行存储器复制的方法和系统
US9053042B2 (en) * 2012-06-27 2015-06-09 Intel Corporation Method, system, and device for modifying a secure enclave configuration without changing the enclave measurement
JP2014182449A (ja) 2013-03-18 2014-09-29 Toshiba Corp メモリコントローラ
US9311508B2 (en) 2013-12-27 2016-04-12 Intel Corporation Processors, methods, systems, and instructions to change addresses of pages of secure enclaves

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159184A1 (en) 2010-12-17 2012-06-21 Johnson Simon P Technique for Supporting Multiple Secure Enclaves
US20140189326A1 (en) 2012-12-28 2014-07-03 Rebekah Leslie Memory management in secure enclaves
JP2014112383A (ja) 2013-12-19 2014-06-19 Intel Corp セキュアなアプリケーションの実行を提供するプロセッサ

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Ahmad-Reza Sadeghi, "Trusted Execution Environments Intel SGX", Summer Term 2014.
Frank McKeen et al., "Innovative instructions and software model for isolated execution", HASP 2013, pp. 1-8, 23 June 2013.

Also Published As

Publication number Publication date
US10592436B2 (en) 2020-03-17
WO2016048478A1 (en) 2016-03-31
KR102269010B1 (ko) 2021-06-25
US20190012273A1 (en) 2019-01-10
KR20210047975A (ko) 2021-04-30
EP3198453A1 (en) 2017-08-02
EP3198453B1 (en) 2022-06-08
US20200310990A1 (en) 2020-10-01
KR20170033891A (ko) 2017-03-27
EP3862886A1 (en) 2021-08-11
US11467981B2 (en) 2022-10-11
EP3198453A4 (en) 2018-04-25
US20160085695A1 (en) 2016-03-24
EP3862886B1 (en) 2024-04-24
CN106575261A (zh) 2017-04-19

Similar Documents

Publication Publication Date Title
US11467981B2 (en) Memory initialization in a protected region
US11934843B2 (en) Secure arbitration mode to build and operate within trust domain extensions
US9942035B2 (en) Platform migration of secure enclaves
EP3049992B1 (en) Secure memory repartitioning
EP3757839B1 (en) Scalable virtual machine operation inside trust domains within the trust domain architecture
KR20190031136A (ko) 신뢰 도메인들을 사용한 가상화된 시스템들에서의 격리 제공
EP3757859B1 (en) Host-convertible secure enclaves in memory that leverage multi-key total memory encryption with integrity
US10255199B1 (en) Evicting clean secure pages without encryption
US9971702B1 (en) Nested exception handling
US20190156043A1 (en) Support for increased number of concurrent keys within multi-key cryptographic engine
US11204874B2 (en) Secure memory repartitioning technologies
US10180854B2 (en) Processor extensions to identify and avoid tracking conflicts between virtual machine monitor and guest virtual machine
US10324862B2 (en) Supporting oversubscription of guest enclave memory pages
US10318440B2 (en) Mapping security policy group registers

Legal Events

Date Code Title Description
A107 Divisional application of patent
E701 Decision to grant or registration of patent right