Comprensión profunda del mecanismo del sistema operativo Windows (2)

Soy Liyuan Breeze. Como veterano en la industria de TI durante 25 años, hoy reexaminaremos Windows, un sistema con el que estamos familiarizados y con el que ya no podemos estar familiarizados.

Usamos el sistema operativo Windows todos los días, pero lo que tratamos directamente todos los días no es el núcleo del sistema operativo Windows, sino la interfaz de interacción persona-computadora del sistema operativo Windows. Esta interfaz es en realidad solo un componente de Windows. sistema operativo., la interfaz que utilizamos cuando usamos el sistema Linux es solo un programa en el sistema Linux. Por tanto, no estamos expuestos al núcleo de estos sistemas. Con el tiempo, gradualmente confundiremos las cosas intuitivas que se muestran en la interfaz con el propio sistema operativo Windows, lo cual en realidad es incorrecto.

Reexaminemos nuevamente el sistema operativo Windows y veamos las características típicas y funciones principales del propio sistema operativo Windows. A partir de las funciones del sistema operativo Windows, podemos saber que los servicios proporcionados por el sistema operativo Windows son los siguientes: se proporciona un entorno para ejecutar programas y los servicios proporcionados incluyen ejecución de programas, operaciones de E / S, operaciones de archivos, recursos asignación y protección, detección y exclusión de errores, etc.

El sistema operativo Windows toma prestado el concepto de multiprogramación. La llamada tecnología de multiprogramación se refiere a almacenar dos o más trabajos en la memoria al mismo tiempo, estos trabajos se ejecutan al mismo tiempo y están bajo el control del programa de administración. Corre intercalados. Estos trabajos comparten procesadores, periféricos y otros recursos.

El controlador de interrupciones del sistema operativo Windows solo puede ser un programa del sistema operativo, no un programa de aplicación. La interrupción del procesamiento es una acción en el sistema que tendrá un impacto significativo en el sistema, por lo que solo se permite la ejecución de programas en modo kernel. El programa de aplicación generalmente se refiere al programa de usuario, que se ejecuta en el estado de usuario y no puede realizar estas operaciones.

Las llamadas al sistema del sistema operativo Windows se pueden dividir en 6 categorías según sus funciones, incluyendo gestión de procesos, operación de archivos, gestión de dispositivos, gestión de memoria principal, comunicación de procesos y mantenimiento de información.

Si un programa de Windows intenta leer el bloque lógico número 100 de un disco determinado, utilice una llamada al sistema proporcionada por el sistema operativo Windows. Las interfaces requeridas en este artículo pertenecen a las llamadas relacionadas con operaciones de archivos.

En la multiprogramación, los procesos se ejecutan al mismo tiempo a nivel macro, pero a nivel micro, un único procesador solo puede manejar un proceso a la vez, por lo que los procesos no se pueden ejecutar en paralelo. Los procesadores, canales y dispositivos se pueden ejecutar en paralelo, como la impresión (dispositivo), la computación (procesador) y la transmisión de datos (el canal controla el intercambio de datos entre la memoria y la memoria externa) al mismo tiempo. Aquí debemos prestar atención a la diferencia entre concurrencia y paralelismo: paralelismo significa que dos o más eventos ocurren al mismo tiempo, mientras que concurrencia significa que dos o más eventos ocurren dentro del mismo intervalo de tiempo. Aunque sólo se puede procesar un proceso a la vez, se pueden ejecutar varios procesos al mismo tiempo.

De hecho, entre los conceptos de llamadas al sistema, interrupciones, funciones de biblioteca y primitivas en el sistema operativo Windows, solo las llamadas al sistema son las interfaces proporcionadas por el sistema operativo. Una llamada al sistema es una subrutina que puede completar una función específica.Cuando el programa de aplicación requiere que el sistema operativo brinde un determinado servicio, llama a la llamada al sistema con la función correspondiente.

Las funciones de biblioteca son funciones correspondientes a llamadas al sistema proporcionadas en lenguajes de alto nivel (algunas funciones de biblioteca no tienen nada que ver con llamadas al sistema) y su propósito es ocultar los detalles de las instrucciones y hacer que las llamadas al sistema sean más convenientes y abstractas. Pero cabe señalar que las funciones de la biblioteca pertenecen a programas de usuario en lugar de llamadas al sistema, y ​​son la capa superior de las llamadas al sistema; las interrupciones y las primitivas son las funciones básicas de la capa inferior del sistema informático y pertenecen a la capa inferior del sistema. llamadas.

El sistema proporciona llamadas al sistema encapsuladas para que las utilicen los programas de aplicación. El programa de aplicación no necesita considerar el contenido de la capa inferior del sistema, solo considera el funcionamiento de la capa superior; la interrupción es el mecanismo interno del sistema para eventos respuesta, que es transparente para el programa de aplicación y no se proporcionará al programa de aplicación para uso directo; de manera similar, las funciones y primitivas de la biblioteca están orientadas a la capa inferior del sistema operativo y no se proporcionarán directamente al programa de aplicación.  

Tanto el procesamiento de fallas de página como la interrupción del reloj son interrupciones que afectarán al sistema, por lo que solo se pueden ejecutar en el estado central. La programación de procesos es parte del sistema y solo se puede ejecutar en el estado central. El intérprete de comandos pertenece a la interfaz de comandos, que es la interfaz proporcionada por el sistema operativo al usuario, por lo que se puede ejecutar en modo usuario.

El estado de la CPU se divide en estado central y estado de usuario, y el estado central también se denomina estado privilegiado, estado del sistema o estado de administración. Normalmente, el sistema operativo se ejecuta en modo de gestión y la CPU puede ejecutar el conjunto completo del sistema de instrucciones en modo de gestión. El estado de usuario también se denomina estado normal o estado de destino. Cuando la máquina está en el estado de usuario, el programa solo puede ejecutar instrucciones sin privilegios y el programa de usuario solo puede ejecutarse en el estado de usuario. La CPU divide las instrucciones en instrucciones privilegiadas e instrucciones no privilegiadas. Para esas instrucciones peligrosas, solo el sistema operativo y sus módulos relacionados pueden usarlas, y las aplicaciones comunes no pueden usarlas.
  

Las instrucciones privilegiadas comunes del sistema operativo Windows son las siguientes:

(1) Instrucciones relacionadas con el uso de dispositivos de E/S, como instrucciones para iniciar dispositivos de E/S, probar el estado de funcionamiento de los dispositivos de E/S y controlar las acciones de los dispositivos de E/S.

(2) Instrucciones relacionadas con el acceso al estado del programa, como instrucciones sobre la palabra de estado del programa (PSW), etc.

(3) Acceda a instrucciones de registro especiales, como registros de interrupción de acceso, registros de reloj y otras instrucciones.

(4) Otras instrucciones privilegiadas.

En este artículo, el controlador de fallas de página y el controlador de interrupciones de reloj deben modificar el registro de interrupción, y el programador de procesos debe modificar la palabra de estado del programa.

Entre las llamadas al sistema, las interrupciones externas, el cambio de procesos y los fallos de página del sistema operativo Windows, el cambio de procesos generalmente es imposible en modo de usuario. La clave para juzgar si se puede ejecutar en modo usuario es si el evento ejecutará instrucciones privilegiadas.

Primero mire la llamada al sistema. La llamada al sistema la proporciona el sistema al programa de usuario para llamar a la función del núcleo. Cuando el programa de usuario ejecuta la llamada al sistema, cambiará el estado de la CPU del estado de usuario al estado central y ejecutará la función del kernel Después de la ejecución, el control volverá al programa de usuario y el estado de la CPU cambia del estado del kernel al estado de usuario. Se puede ver en este proceso que, aunque la CPU necesita cambiar al estado central durante la ejecución de la llamada al sistema, la llamada al sistema (o referencia, llamada) ocurre en el estado de usuario, que está especialmente diseñado para el estado de usuario mediante el sistema, por lo que la llamada al sistema puede ocurrir en modo de usuario.

Para las interrupciones externas, cuando escucha "interrupción", es fácil pensar que todas las interrupciones deben ser cosas en el estado central y no pueden ejecutarse en el estado de usuario. ¡Esta comprensión es incorrecta! Las interrupciones a menudo ocurren en el sistema, como la entrada del teclado causará interrupciones externas (las interrupciones externas se refieren a interrupciones causadas por eventos externos, como las interrupciones causadas por operaciones como hacer clic con el mouse y la entrada del teclado), las fallas de página de proceso generarán interrupciones por fallas de página , etc. Estos ocurren a menudo en procesos de usuario y, naturalmente, también son eventos en modo de usuario. Tomando la entrada del teclado como ejemplo, un proceso de usuario requiere que el usuario ingrese una serie de comandos. Cuando el usuario usa el teclado para ingresar, se activará una interrupción externa (la CPU todavía está en el estado de usuario en este momento), y el sistema cambiará al estado central para ejecutar el controlador de interrupciones (luego la CPU Después del procesamiento, el programa de procesamiento devuelve el resultado de entrada al programa de usuario y cambia el estado de la CPU al estado de usuario, y el procesamiento de la interrupción finaliza. Se puede ver en este proceso que la aparición y el procesamiento de interrupciones son similares a las llamadas al sistema, y ​​​​todas ocurren en modo de usuario, y las funciones correspondientes se completan cambiando al modo central y luego regresan al modo de usuario. La ocurrencia de llamadas e interrupciones del sistema está en el estado de usuario y el procesamiento está en el estado de kernel.

Veamos nuevamente las fallas de página: similar a las interrupciones externas, se generará una interrupción por falla de página cuando el modo de usuario ejecuta una falla de página de proceso (la interrupción ocurre en el modo de usuario), y luego el sistema se transfiere al estado central para procesar la Se interrumpe la falla de la página y luego se regresa al modo de usuario y el control se devuelve al proceso del usuario. Por lo tanto, los fallos de página también pueden ocurrir en modo usuario.

Entonces, ¿por qué no se puede realizar el cambio de proceso en modo de usuario? El cambio de proceso es en realidad una modificación del estado del programa, por lo que para modificar la palabra de estado del programa, esta es una instrucción privilegiada y debe ejecutarse en el estado central.

¿Entiendes lo que dije arriba?

Veamos un ejemplo de cálculo. Solo hay dos trabajos P1 y P2 en un sistema de procesamiento por lotes multicanal, y P2 llega 5 ms después que P1. El orden de sus operaciones de cálculo y E/S es el siguiente:

P1: cálculo 60 ms, E/S 80 ms, cálculo 20 ms. P2: cálculo 120 ms, E/S 40 ms, cálculo 40 ms.

Si no se consideran el tiempo de programación y cambio, ¿cuál es el tiempo mínimo requerido para completar los dos trabajos? Hagamos un dibujo:

 Después de hacer un dibujo de este tipo, sabemos que el tiempo necesario para completar los dos trabajos es de al menos 260 ms.

La aparición de una interrupción del sistema operativo Windows suele ser repentina, como una dirección fuera de los límites, etc., lo que a menudo es impredecible para el sistema (la interrupción de la entrada externa también es impredecible y la computadora no sabrá cuándo el usuario usa el teclado para aporte). Cuando el sistema es interrumpido, debe transferirse al controlador de interrupciones. Después del procesamiento, debe regresar a la instrucción donde ocurrió la interrupción para continuar la ejecución. Debido a que la CPU puede cambiar de estado al procesar la interrupción (si ocurre una interrupción en el núcleo estado, siempre estará en el estado central, no es necesario cambiar), por lo que cuando regresa el procesamiento de interrupción, es necesario restaurar el estado actual del programa, incluida la información del procesador, etc., que utiliza el contenido almacenado en el estado del programa. registro de palabras. El registro de palabras de estado del programa se utiliza para registrar el estado del procesador actual y la secuencia de ejecución de las instrucciones de control, y para retener e indicar diversa información relacionada con el programa en ejecución. Su función principal es realizar la protección y recuperación del estado del programa. , por lo que debe ser Empuje el PSW a la pila y guárdelo. El sistema predice la llamada a la subrutina, y la llamada a la subrutina generalmente se ejecuta dentro del proceso y no cambiará el estado del programa. Incluso si se cambia el estado del programa, solo necesita actualizar el registro sin guardar, porque todo es lo esperado por el sistema No hay necesidad de proteger ni restaurar, por lo que la llamada a la subrutina guarda principalmente información de parámetros locales, etc., y no necesita insertar la palabra de estado del programa en la pila.

Por lo tanto, el sistema operativo Windows interrumpe el procesamiento y las llamadas a subrutinas deben impulsar la pila para proteger la escena. Es el registro de palabras de estado del programa lo que el procesamiento de la interrupción debe guardar y la llamada a la subrutina no necesita guardar su contenido. El manejo de interrupciones y la llamada a subrutinas tienen las mismas operaciones en el contador del programa, los registros de datos generales y los registros de direcciones generales.

Cuando el usuario normalmente enciende la computadora, primero se inicia el programa BIOS almacenado en la ROM de la placa base (se solidifica en el chip ROM de la placa base y almacena los programas de entrada/salida más básicos de la computadora, el auto- programa de prueba después del arranque y el programa de inicio automático del sistema. Su función principal es proporcionar a la computadora la configuración y control de hardware más bajo y directo), y luego llama al sistema Windows en el disco duro y carga automáticamente el sistema operativo. programa en el área del sistema en la memoria. Esta área es RAM.

Cuando una tarea (proceso) del sistema operativo Windows ejecuta una llamada al sistema y cae en la ejecución del código del kernel, llamamos al proceso en el estado de ejecución del kernel (estado del kernel). En este punto, el procesador está ejecutando el código del kernel con el nivel de privilegio más alto (nivel 0). Cuando el proceso está en modo kernel, el código del kernel ejecutado utilizará la pila del kernel del proceso actual. Cada proceso tiene su propia pila de kernel. Cuando el proceso ejecuta el código propio del usuario, se dice que está en el estado de ejecución del usuario (estado de usuario), es decir, el procesador se está ejecutando en el código de usuario con el nivel de privilegio más bajo (nivel 3). Cuando el programa de usuario se está ejecutando y el programa de interrupción lo interrumpe repentinamente, el programa de usuario también se puede llamar simbólicamente en el estado del núcleo del proceso en este momento, porque el controlador de interrupciones utilizará la pila del núcleo del proceso actual. Esto es algo similar al estado de un proceso en modo kernel:

(1) Ingrese al estado central cuando utilice la llamada al sistema. Linux solo puede operar el hardware en el estado central, que puede controlarse escribiendo un controlador. Operar el hardware en modo de usuario provocará un vuelco del núcleo.

(2) Preste atención a la distinción entre llamadas al sistema y funciones generales. El kernel proporciona las llamadas al sistema, como read(), write(), open(), etc. Las funciones generales las proporciona la biblioteca de funciones del paquete de software, como sin(), cos(), etc. No hay diferencia en la sintaxis entre los dos.

(3) En circunstancias normales, la llamada al sistema se ejecuta en el estado central y la función se ejecuta en el estado de usuario. Sin embargo, también hay algunas funciones que utilizan llamadas al sistema (como fopen ()) internamente. Dichas funciones ingresan al estado de kernel cuando se llama a la llamada al sistema y se ejecutan en el estado de usuario en otros momentos.

Después de la descripción anterior, veamos algunas situaciones específicas:

Por ejemplo, dividir un número entero por cero provocará una interrupción y entrará en el estado del núcleo. Por ejemplo, la llamada a la función sin() la proporciona la biblioteca de funciones del paquete de software y se puede ejecutar en modo de usuario. Por ejemplo, una llamada al sistema debe ingresar al estado del kernel.

La instrucción trap, la instrucción de salto y la instrucción de inserción de pila se pueden ejecutar en el modo de usuario, y la instrucción trap es responsable de convertir del modo de usuario al modo kernel. El comando de interrupción es un comando privilegiado y debe ejecutarse en el estado central. Durante el procesamiento de interrupciones externas, el contenido del contador del programa se guarda automáticamente mediante la instrucción implícita de interrupción, y el sistema operativo guarda el contenido del registro general.

Suponiendo que las siguientes instrucciones del sistema operativo Windows se han cargado en el registro de instrucciones, ¿cuáles no harán que la CPU cambie del estado de usuario al estado de kernel cuando se ejecute?

El primer comando DIV R0,R1;(R0)/(R1)->R0

El segundo comando INT n; genera una interrupción suave

El tercer comando NOT R0; el contenido del registro R0 se niega

El cuarto comando MOV R0,addr; coloca los datos de la memoria en la dirección addr en el registro R0.

En el primer comando, si el contenido en R1 es 0, se producirá una interrupción interna, cambiando del modo de usuario al modo kernel; la interrupción suave del segundo comando se ejecuta en modo kernel; la negación del registro del tercer comando no generará una interrupción, y no pertenece a otros núcleos del sistema operativo, por lo que no cambiará al estado del núcleo; la cuarta dirección es la dirección de la memoria principal y el acceso a la memoria debe ingresar al estado del núcleo.

En el sistema de procesamiento por lotes, los trabajos se ingresan secuencialmente en la cinta en un modo de entrada fuera de línea, y el programa de supervisión ejecuta los trabajos en la cinta en secuencia, y el usuario no puede intervenir en su operación cuando se ejecuta el trabajo. El sistema de procesamiento por lotes se puede dividir en sistema de procesamiento por lotes de un solo canal y sistema de procesamiento por lotes multicanal según el historial de desarrollo. La principal diferencia es que hay uno o varios trabajos en la memoria al mismo tiempo. Cuando un programa en un sistema de procesamiento por lotes multicanal se suspende debido a una solicitud de E/S, la CPU ejecuta otro programa con la ayuda de la tecnología de interrupción.

El proceso de realizar llamadas al sistema por parte del sistema operativo Windows incluye algunas operaciones principales, y su orden correcto de ejecución es:

Pase los parámetros de llamada del sistema --> Ejecutar en la instrucción trap --> Ejecute el programa de servicio correspondiente --> Volver al estado de usuario

Cuando el sistema operativo Windows ejecuta una llamada al sistema, primero pasa los parámetros requeridos por la llamada al sistema al kernel del sistema, luego ingresa al estado del kernel mediante instrucciones de captura, inserta la dirección de retorno en la pila para su uso y luego la CPU ejecuta el programa de servicio de estado del kernel correspondiente y finalmente regresar al modo de usuario.

Sobre el autor: Li Yuan Weifeng, nacido en 1981, ingeniero senior, maestro en ingeniería de la Universidad de Zhejiang, supervisor de proyectos de ingeniería de software, ha trabajado como programador, diseñador de software, arquitecto de sistemas, primer programador de Windows, usuario leal de Visual Studio, C/ Usuario de C ++ El autor es un veterano que ha estudiado, trabajado duro y luchado en la industria informática durante 25 años, ha experimentado la era UNIX, la era WIN32 de escritorio, la era de las aplicaciones web, la era de la computación en la nube, el teléfono móvil Android. era, la era del big data, la era de las TIC y la era del aprendizaje profundo de la IA, la era de las máquinas inteligentes, no sé qué era habrá en el futuro, solo recuerdo que este viaje está lleno de dificultades y ganancias. y estoy dispuesto a seguir contigo, lleno de esperanza.

Supongo que te gusta

Origin blog.csdn.net/wang2015cn/article/details/131738985
Recomendado
Clasificación