APR 파일 식별자와 읽기
APR은 타이틀 파일을 한 번 해결한 뒤, 이후 명령 버퍼에는 프로세스 안에서만 쓰는 식별자를 넣습니다. 지연된 AMPR 읽기는 호스트 디스크립터를 영원히 붙잡지 않고, 같은 읽기 전용 /app0 파일을 다시 엽니다.
2026년 10월 10일까지의 저장소 노트
경로 대신 식별자
가속기 API는 명령마다 경로를 받고 싶어 하지 않습니다. 타이틀이 경로를 해결하면 간결한 파일 식별자를 받고, 나중에 제출하는 읽기 명령에 그 식별자를 넣습니다. PS5PCEM은 식별자 옆에 경로와 파일 크기를 보관합니다. 이 테이블은 프로세스 안에서만 쓰입니다. 호스트 경로는 게스트에 돌려주지 않습니다.
파일은 타이틀의 읽기 전용 /app0 마운트에서 옵니다. 해결된 항목은 지연된 읽기가 실행될 때 다시 열 수 있으므로, 에뮬레이터가 프로세스 수명 내내 모든 디스크립터를 붙잡고 있을 필요가 없습니다. 캐시 테이블은 파일을 최대 64개까지 보관합니다.
명령 버퍼
제출은 단일 읽기 호출이 아니라 게스트 명령 버퍼입니다. PS5PCEM은 활성 명령 버퍼를 최대 32개까지 받습니다. 각 버퍼에는 한도가 있습니다. 읽기 32개, 쓰기 32개, 매핑 32개, 완료 기록 32개, 연산 128개입니다. 동시에 처리 중인 제출은 최대 64개이며, 자동 풀은 버퍼 8개를 보관합니다. 읽기는 파일 식별자, 게스트 대상, 크기, 파일 오프셋을 지정하고, 바이트 수를 받을 주소를 지정할 수도 있습니다.
리더는 알 수 없는 식별자, 없는 파일, 짧거나 정렬되지 않은 명령 버퍼, 파일이나 대상을 벗어나는 요청을 거부합니다. 단일 읽기는 4 GiB로 제한되는데, 이는 인터페이스 한도이지 타이틀이 그만큼 큰 읽기를 보낸다는 뜻은 아닙니다. 매핑 명령은 게스트가 기대하는 16 KiB AMM 페이지 크기를 사용합니다.
APR과 AMPR이 만나는 지점
APR은 파일 테이블과 명령 버퍼 수명을 맡습니다. AMPR은 카운터, 대기, 그리고 작업이 끝났음을 타이틀에 알리는 완료 이벤트를 맡습니다. 타이틀은 파일 읽기를 여러 개 대기열에 넣은 뒤, 완료 명령이 업데이트하는 카운터를 기다릴 수 있습니다. Grand Theft Auto III의 첫 시작이 관찰된 대규모 사례입니다. 읽기는 이 경로를 거치고, 완료 이벤트는 AMPR 큐로 돌아옵니다.
또 다른 파일 API인 커널 비동기 I/O는 별도 페이지에서 다룹니다. APR은 가속기 명령 스트림이고, 커널 배치 API는 POSIX 스타일의 요청 목록입니다.
구현된 것
- 읽기 전용 /app0 경로를 위한 프로세스 내 파일 식별자. 이후 읽기를 위해 크기를 보관합니다.
- 읽기, 쓰기, 매핑, 완료 기록을 위한 한도가 있는 명령 버퍼.
- 같은 타이틀 파일을 다시 여는 지연 읽기.
- 알 수 없는 파일, 오버플로, 잘못된 버퍼에 대한 검사 후 거부.
아직 빠진 것
- 이 경로는 명령 버퍼를 소프트웨어로 실행하는 것이며, 콘솔의 DMA 엔진이 아닙니다.
- 쓰기 가능한 패키지 파일은 /app0 밖에 있습니다. 저장은 저장 데이터 마운트를 거칩니다.
- 리졸버가 본 적 없는 파일은 식별자만으로 만들어 낼 수 없습니다.
관련 메커니즘
이 페이지들에 대하여