PCLSRing (también conocido como Program Counter Lusering [1] [a] ) es el término utilizado en el sistema operativo ITS para un principio de coherencia 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 requiere mucho tiempo. Por "que consume mucho tiempo", se entiende que el sistema necesita poner el proceso A en una cola de espera y puede programar otro proceso para su ejecución si uno está listo para ejecutarse. Un ejemplo común es una operación de E / S.
- Mientras el proceso A está en este estado de espera, el proceso B intenta interactuar con el proceso A o acceder a él, por ejemplo, enviarle una señal .
¿Cuál debería ser el estado visible del contexto del proceso A en el momento del acceso del proceso B? De hecho, el proceso A está en medio de una llamada al sistema, pero ITS hace que parezca que las llamadas al sistema no son visibles para otros procesos (o incluso para el mismo proceso).
Solución ITS: reinicio transparente
Si la llamada al sistema no se puede completar antes del acceso, debe reiniciarse . Esto significa que se hace una copia de seguridad del contexto hasta el punto de entrada a la llamada al sistema, mientras que los argumentos de la llamada se actualizan para reflejar cualquier parte de la operación que ya se haya completado. [2] Para una operación de E / S, esto significa que la dirección de inicio del búfer debe avanzar sobre los datos ya transferidos, mientras que la longitud de los datos a transferir debe reducirse en consecuencia. Una vez que se completa la interacción del proceso B, el proceso A puede reanudar la ejecución y la llamada al sistema se reanuda desde donde se detuvo.
Esta técnica refleja en el software lo que hace el PDP-10 en el hardware. Es posible que algunas instrucciones de PDP-10 como BLT no se ejecuten hasta su finalización, ya sea debido a una interrupción o un error de página. [2] En el transcurso del procesamiento de la instrucción, el PDP-10 modificaría los registros que contienen argumentos a la instrucción, para que luego la instrucción pudiera ejecutarse nuevamente con nuevos argumentos que completarían cualquier trabajo restante por hacer. PCLSRing aplica la misma técnica a las llamadas al sistema.
Esto requiere cierta complejidad adicional. Por ejemplo, es posible que las páginas de memoria en el espacio de usuario no se paguen durante una llamada al sistema en ITS. Si esto estuviera permitido, entonces cuando la llamada al sistema es PCLSRed e intenta actualizar los argumentos para que la llamada se pueda abortar, la página que contiene los argumentos podría no estar presente y la llamada al sistema tendría que bloquearse, evitando que PCLSR tenga éxito. Para evitar esto, ITS no permite que las páginas de memoria en el espacio de usuario se paguen después de que se accede a ellas por primera vez durante una llamada del sistema, y las llamadas del sistema suelen comenzar tocando páginas en el espacio de usuario que saben que necesitarán acceder. [2]
Solución Unix: reiniciar a pedido
Compare esto con el enfoque adoptado en el sistema operativo UNIX , donde hay reiniciabilidad, pero no es transparente. En cambio, una operación de E / S devuelve el número de bytes realmente transferidos (o el error EINTR si la operación se interrumpió antes de que se transfirieran los bytes), y depende de la aplicación verificar esto y administrar su propia reanudación de la operación. hasta que se hayan transferido todos los bytes. En la filosofía de UNIX , esto fue dado por Richard P. Gabriel como un ejemplo del principio " peor es mejor ".
Enfoques asincrónicos
Es posible un enfoque diferente. Es evidente en lo anterior que la llamada al sistema tiene que ser síncrona , es decir, el proceso de llamada tiene que esperar a que se complete la operación. Esto no es inevitable: en el sistema operativo OpenVMS , todas las operaciones de E / S y otras operaciones que consumen mucho tiempo son inherentemente asincrónicas , 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 "después de lo cual vuelve inmediatamente a la persona que llama. Existe un conjunto estándar de notificaciones disponibles (como establecer un indicador de evento o entregar una trampa del sistema asincrónico ), así como un conjunto de llamadas al sistema para suspender explícitamente el proceso mientras se espera, que son a) completamente reiniciables en el ITS sentido, yb) mucho menor en número que el conjunto de llamadas al sistema que consumen mucho tiempo.
OpenVMS proporciona versiones sincrónicas alternativas de "iniciar la operación y esperar a que se complete" de todas las llamadas al sistema que consumen mucho tiempo. Estos se implementan como "realizar la operación asíncrona real" seguido de "esperar hasta que la operación establezca el indicador de evento". Cualquier acceso al contexto del proceso durante este tiempo lo verá a punto de (re) ingresar a la llamada de espera por evento.
Notas
- ^ Se llama "PC luser-ing" porque la PC está siendo forzada a "modo luser", donde "luser" es el nombre cariñoso de "usuario" en el MIT.
Referencias
- ^ Program Counter LoSeRing, http://www.xxeo.com/archives/2006/06/29/vms.html
- ^ a b c d Alan Bawden. "PCLSRing: mantener modular el estado del proceso" .