인텔® Software Guard Extensions(인텔® SGX) 엔클레이브에 힙 메모리를 할당하는 프로세스
생성 시 사용 가능한 EPC(Enclave Page Cache) 메모리보다 큰 힙 메모리가 엔클레이브에 할당되는 방법을 판별할 수 없습니다.
인텔® Software Guard Extensions(인텔® SGX)는 EADD 프로세서 명령을 사용하여 엔클레이브에 힙을 포함한 메모리를 추가합니다. 힙 페이지를 EADD하려면 사용 가능한 무료 EPC(Enclave Page Cache) 페이지가 있어야 합니다. 무료 페이지가 이미 있는 경우 EADD에서 즉시 사용합니다. EPC가 이미 꽉 찬 경우 현재 사용 중인 페이지가 페이징 아웃되고 해제됩니다. 이제 무료 페이지를 힙 페이지에 사용할 수 있습니다. 이 페이지는 새로 해제된 페이지이므로 EPC에 있습니다. 두 경우 모두 페이지가 교체되지 않습니다. 실제 EADD가 발생하면 페이지가 이미 EPC에 있으므로 페이징이나 스와핑이 필요하지 않습니다.
코드를 따릅니다.
- 먼저 SGX signtool 이 엔클레이브 레이아웃을 결정합니다. 레이아웃 정보를 메타데이터에 배치합니다. 힙이 추가되고 EADD 전용으로 설정되는 위치는 다음과 같습니다. manage_metadata#L775
- 엔클레이브 로드 중에 신뢰할 수 없는 런타임 시스템(uRTS) 로더가 레이아웃 항목을 반복하고 적절하게 loader.cpp#L382를 추가합니다.
- 각 엔클레이브 페이지는 EADD: loader.cpp#L311을 호출하는 드라이버를 호출하여 추가됩니다.