Асинхронные чтения файлов ядра
API AIO ядра принимает пакет чтений и возвращает идентификатор. PS5PCEM выполняет пакет в момент подачи, что интерфейс позволяет, а игра забирает готовый результат.
Заметки репозитория по 10 октября 2026 г.
Интерфейс
Движки, которые потоково читают ресурсы, подают список чтений и позже спрашивают, закончен ли пакет. Игра, построенная так, не может загрузить файл без этого API. PS5PCEM принимает пакет, выполняет чтения в момент подачи и сохраняет результаты под идентификатором. Более поздний опрос видит пакет, который уже завершён.
Немедленное завершение — законный исход интерфейса. Вызывающие обязаны обработать запрос, который закончился до опроса. Эмулятор не засыпает, чтобы изобразить задержку устройства, и не сообщает пакет как неудачный, чтобы выглядеть более асинхронным.
Чем это отличается от APR
AIO ядра — это пакет в стиле POSIX по файловым дескрипторам, которые игра уже открыла. APR — путь ускорителя: пути становятся идентификаторами, а команды живут в буфере команд AMPR со счётчиками и событиями завершения. Игра может использовать любой из путей или оба.
Оба пути читают установку игры как данные, которые эмулятор не производил. Границы проверяются. Короткий буфер или плохой дескриптор — это возврат ошибки, а не частичная запись, выданная за успех.
Что реализовано
- Пакетная подача, идентификатор и завершение, которое игра может забрать.
- Чтения по файлам, которые открыла игра.
- Немедленное завершение, которое разрешает гостевой API.
Чего ещё нет
- Отдельного потока ввода-вывода, изображающего задержку диска, нет.
- Планировщик приоритета и полосы пропускания консоли не моделируется.
- Буферы команд APR — другой API, и они не переписываются в AIO ядра.
Связанные механизмы
Чему посвящены эти страницы