La trampa asincrónica ( AST ) del sistema del refiere a un mecanismo usado en varios sistemas operativos de la computadora diseñados por el anterior Digital Equipment Corporation (DEC ) Maynard, Massachusetts .
Los varios acontecimientos dentro de estos sistemas pueden ser opcionalmente señalados de nuevo a los procesos del usuario vía el mecanismo de AST. Este el acto de ASTs como llamadas de subrutina pero ellos es el entregado asincrónico del ', es decir, sin ninguÌn respeto al contexto del hilo de rosca principal. Debido a esto, el cuidado debe ser tomado:
para asegurarse de que cualquier código que se comparta entre el hilo de rosca principal y el AST se deba diseñar para ser el reentrante, y
cualquier dato se comparta que debe ser seguro contra la corrupción si es modificado en cualquier momento por el AST. Si no, los datos deben ser guardados bloqueando ASTs durante las secciones críticas
ASTs se encuentra lo más comúnmente posible como resultado de publicar llamadas QIO al núcleo . La terminación de la entrada-salida se puede señalar por la emisión de un AST al proceso que llama/a la tarea. Ciertos errores runtime se podían también señalar usar el mecanismo de AST. Dentro del VMS, el Núcleo-Modo especial ASTs se utiliza como el mecanismo estándar para conseguir a acceso un contexto de proceso; se ejecutan en la prioridad más alta posible del por-proceso la próxima vez que el planificador hace esa corriente de proceso, y se utilizan entre otras cosas para recuperar la información del proceso-nivel (en respuesta a un " de $GETJPI; getjob/information" de proceso; llamada de sistema) y para realizar la canceladura de proceso.
Los sistemas operativos siguientes ejecutaron ASTs:
RSX-11 (todas las variantes incluyendo)
RSTS/E
VMS
ASTs es áspero análogo a las señales de Unix . Las diferencias importantes son:
No hay " codes" de la señal; asignado a ASTs: en vez de asignar a un tratante a una señal cifrar y levantando ese código, el AST es especificado directo por su dirección. Esto permite que cualquier número de ASTs sea pendiente inmediatamente (conforme a contingentes de proceso).
De ASTs interrupción nunca cualquie llamada de sistema en curso. De hecho, es posible que un proceso se ponga en un " hibernate" estado (con la llamada de sistema de $HIBER) donde no hace nada sino la espera para que ASTs sea entregado; cuando se entrega un AST, el proceso se despierta temporalmente, y después de que el AST termine, el proceso va a la derecha nuevamente dentro de la hibernación otra vez. La única manera de salir de este estado (aparte de la canceladura de proceso) es ejecutar la llamada de sistema de $WAKE; esto se puede hacer por un AST dentro de ese proceso, o por otro proceso conveniente-privilegiado.
VAX/VMS V4 y más adelante ejecutado una optimización interesante al problema de la sincronización entre el AST-nivel y el código del no-AST-nivel. Un servicio de sistema nombrado $SETAST se podría utilizar para inhabilitar o para permitir la entrega de ASTs para la corriente y todo el menos-privilegiado de los modos de acceso de (el término del VMS para los rasgos de seguridad anillo-basados ). Sin embargo, si la sección crítica que necesitaba la protección contra ASTs era solamente algunas instrucciones de largo, después los gastos indirectos de hacer las llamadas de $SETAST podría compensar lejos la época de ejecutar esas instrucciones.
Tan para el modo del usuario solamente (el menos anillo privilegiado, utilizado normalmente por programas del usuario ordinarios), un par de banderas del pedacito fue proporcionado en una posición de memoria usuario-escribible predefinida (en " del por-proceso; P1" espacio). Los significados de estas dos banderas se podían interpretar como " no entregar ninguÌn ASTs" y " ASTs ha sido disabled". En vez de los pares generalmente de llamadas de $SETAST, el código del usuario-modo fijaría la primera bandera antes de ejecutar la secuencia de instrucciones durante las cuales necesidad de ASTs de ser bloqueado, y claro él después de la secuencia. de entonces (observar ordenar aquí, para evitar las condiciones de raza que comprobaría la segunda bandera para considerar si tenía sistema convertido durante este tiempo: si es así entonces ASTs ha llegado a ser realmente lisiado, y $SETAST se debe llamar para volverlas a permitir. En el caso más común, ninguÌn ASTs se habría convertido hasta que finalice durante este tiempo, tan allí no sería ninguna necesidad de llamar $SETAST en absoluto.
El código de la entrega del núcleo AST, para su parte, comprobaría la primera bandera antes de intentar entregar un usuario-modo AST; si fuera fijado, después fijaría directo el pedacito ASTs-lisiado en el bloque de control de procesos (el mismo pedacito que sería fijado por una llamada explícita de $SETAST del modo del usuario), y también fijaría la segunda bandera, antes de volver y de dejar el AST sin entregar.
.
| Random links: | 1430s | Congreso continental | Chimpancé | COMAL | Anatoly Artsebarsky |