Saltar al contenido
PS5PCEM
ParcialFirmware y HLE

Fibras e hilos de nivel de usuario

En Windows, cada fibra de libSceFiber es una fibra real de Windows, de modo que un cambio conserva los registros del invitado y la pila del invitado. Los hilos de nivel de usuario arrancan por la misma ruta pthread.

Notas del repositorio hasta el 10 de octubre de 2026

Por qué una fibra no puede ser una operación nula

El código del invitado se ejecuta como código de máquina nativo. Un cambio de fibra tiene que reanudar los registros exactos y la pila exacta, con marcos del anfitrión y marcos del invitado mezclados en esa pila. Devolver éxito desde sceFiberSwitch sin cambiar dejaría que el título continuara en la pila equivocada y corrompería ambos lados.

PS5PCEM respalda cada fibra invitada inicializada con una fibra de Windows. sceFiberRun, sceFiberSwitch y sceFiberReturnToThread usan ese mecanismo. El hilo que llamó a sceFiberRun es la fibra raíz. El registro público SceFiber de 128 bytes conserva las firmas de la ABI, el estado, el argumento de entrada, el nombre y el rango de contexto que aportó quien llama.

De quién es la pila

El título aporta un búfer de contexto, y ese búfer queda registrado en el objeto de la ABI. Windows posee la pila real. Usar el búfer del título como pila nativa de Windows se saltaría la página de guarda y la contabilidad de desenrollado que exige el sistema operativo. El contexto mínimo que espera el registro del firmware se sigue comprobando, junto con la alineación y las firmas de inicio y de fin.

sceFiberGetSelf, la finalización, las comprobaciones de propiedad entre hilos y el reinicio en tiempo de ejecución están implementados. El backend existe en el objetivo de ejecución nativa Windows x86-64. Otros anfitriones pueden compilar el resto del emulador, y esta ruta de cambio no está disponible allí.

Hilos de nivel de usuario

La inicialización y la finalización de libSceUlt tienen éxito para que el sistema de trabajos de un título pueda arrancar. Los entornos de ejecución, las colas de espera, los pools de datos de cola, los mutex, los semáforos y las colas conservan estado del lado del anfitrión con clave según los objetos que asignó el título. Los propios elementos de trabajo arrancan por la ruta pthread existente. Las consultas de tamaño del área de trabajo devuelven los tamaños alineados que esperan esas creaciones.

Las colas de eventos user-edge del kernel comparten la misma espera consciente de la secuencia que la sincronización pthread. El filtro -13 de VideoOut y el filtro -14 de gráficos viajan en esa cola y conservan el identificador y los datos de usuario de cada registro. ULT es código de unión para la planificación. No añade un segundo emulador de CPU.

Qué está implementado

  • Fibras de Windows para sceFiberRun, sceFiberSwitch y sceFiberReturnToThread.
  • Firmas de la ABI, comprobaciones de propiedad y una pila propiedad del anfitrión con página de guarda.
  • Inicialización de ULT, colas, mutex, semáforos y elementos de trabajo respaldados por pthread.
  • Colas de eventos user-edge compartidas con la finalización de VideoOut y de gráficos.

Qué falta todavía

  • El cambio de fibra existe en Windows x86-64. Otros sistemas operativos anfitriones no ejecutan el código invitado de forma nativa.
  • Una fibra no es un hilo de hardware con planificación preventiva.
  • ULT no implementa un intérprete aparte para los cuerpos de los workers.

Mecanismos relacionados

Qué describen estas páginas

El texto sigue las notas de arquitectura y los informes de octubre de 2026 del repositorio PS5PCEM. Un test concreto que pasa no es una tasa de fotogramas nueva ni una partida terminada nueva.

Todas las tecnologías