PCLSRing (también conocido como Program Counter Lusering [ 1 ] [ a ] ) es el término utilizado en el sistema operativo ITS para un principio de consistencia en la forma en que un proceso accede al estado de otro proceso. [ 2 ]
Escenario problemático
Este escenario presenta complicaciones particulares:
- El proceso A realiza una llamada al sistema que consume mucho tiempo . Por "consumo de tiempo" se entiende que el sistema necesita poner al proceso A en una cola de espera y puede programar la ejecución de otro proceso si hay alguno listo para ejecutarse. Un ejemplo común es una operación de entrada/salida .
- Mientras el Proceso A se encuentra en este estado de espera , el Proceso B intenta interactuar con el Proceso A o acceder a él, por ejemplo, enviándole una señal .
¿Cuál debería ser el estado visible del contexto del Proceso A en el momento del acceso por parte del Proceso B? De hecho, el Proceso A está en medio de una llamada al sistema, pero el ITS impone la apariencia de que las llamadas al sistema no son visibles para otros procesos (ni siquiera para el mismo proceso).
Solución ITS: reinicio transparente
Si la llamada al sistema no puede completarse antes del acceso, entonces debe ser reiniciable . Esto significa que el contexto se retrocede hasta el punto de entrada a la llamada al sistema, mientras que los argumentos de la llamada se actualizan para reflejar la parte de la operación que ya se ha completado. [ 2 ] Para una operación de E/S, esto significa que la dirección de inicio del búfer debe avanzarse sobre los datos ya transferidos, mientras que la longitud de los datos a transferir debe decrementarse en consecuencia. Una vez completada la interacción del Proceso B, el Proceso A puede reanudar la ejecución y la llamada al sistema se reanuda desde donde se interrumpió.
Esta técnica reproduce en software lo que el PDP-10 hace en hardware. Algunas instrucciones del PDP-10, como BLT, pueden no completarse debido a una interrupción o un fallo de página . [ 2 ] Durante el procesamiento de la instrucción, el PDP-10 modifica los registros que contienen los argumentos de la instrucción, de modo que posteriormente esta pueda ejecutarse de nuevo con nuevos argumentos que completen el trabajo restante. PCLSRing aplica la misma técnica a las llamadas al sistema.
Esto requiere cierta complejidad adicional. Por ejemplo, las páginas de memoria en el espacio de usuario pueden no ser paginadas durante una llamada al sistema en ITS. Si esto se permitiera, cuando la llamada al sistema se corrige mediante PCLS y trata de actualizar los argumentos para que la llamada pueda ser abortada, la página que contiene los argumentos podría no estar presente, y la llamada al sistema tendría que bloquearse, impidiendo que PCLSR tenga éxito. Para evitar esto, ITS no permite que las páginas de memoria en el espacio de usuario sean paginadas después de que se acceden por primera vez durante una llamada al sistema, y las llamadas al sistema normalmente comienzan accediendo a páginas en el espacio de usuario que saben que necesitarán. [ 2 ]
Solución Unix: reiniciar a petición
Compárese esto con el enfoque adoptado en el sistema operativo UNIX , donde existe la posibilidad de reiniciar, pero no es transparente. En cambio, una operación de E/S devuelve el número de bytes transferidos (o el error EINTR si la operación se interrumpió antes de que se transfiriera ningún byte), y es responsabilidad de la aplicación verificar esto y gestionar su propia reanudación de la operación hasta que se hayan transferido todos los bytes. En la filosofía de UNIX , Richard P. Gabriel lo presentó como un ejemplo del principio de que " lo peor es mejor ".
Enfoques asíncronos
Es posible un enfoque diferente. En lo anterior se observa que la llamada al sistema debe ser síncrona , es decir, el proceso que realiza la llamada debe esperar a que la operación se complete. Esto no es inevitable: en el sistema operativo OpenVMS , todas las operaciones de E/S y otras operaciones que consumen tiempo son inherentemente asíncronas , lo que significa que la semántica de la llamada al sistema es "iniciar la operación y realizar una o más de estas notificaciones cuando se complete", tras lo cual regresa inmediatamente al proceso que realizó la llamada. Existe un conjunto estándar de notificaciones disponibles (como establecer una bandera de evento o entregar una trampa del sistema asíncrona ), así como un conjunto de llamadas al sistema para suspender explícitamente el proceso mientras se esperan estas, las cuales son a) completamente reiniciables en el sentido de ITS, y b) mucho menos numerosas que el conjunto de llamadas al sistema que realmente consumen tiempo.
OpenVMS proporciona versiones síncronas alternativas de todas las llamadas al sistema que consumen mucho tiempo, que permiten iniciar la operación y esperar a que finalice. Estas se implementan ejecutando la operación asíncrona y luego esperando a que la operación active el indicador de evento. Cualquier acceso al contexto del proceso durante este tiempo permitirá observar que está a punto de (re)ingresar a la llamada de espera del indicador de evento.
Notas
- ↑ Se le llama "PC luser-ing" porque se obliga al PC a entrar en "modo luser", donde "luser" es el nombre cariñoso que se le da a "usuario" en el MIT.
Referencias
- Computación concurrente