Red de conocimiento de abogados - Derecho de sociedades - Principios de lectura y escritura de IO y modelo de IO

Principios de lectura y escritura de IO y modelo de IO

Para proteger la seguridad del sistema operativo, el sistema operativo divide el espacio virtual en dos partes según el nivel de privilegio, espacio del kernel y espacio del usuario. El espacio del kernel (Anillo 0) es el área a la que accede el kernel del sistema operativo. Tiene los permisos más altos y puede acceder directamente a todos los recursos. El espacio de usuario (Anillo 3) es un área de memoria accesible para aplicaciones ordinarias. Solo puede acceder a recursos restringidos y no puede acceder directamente a dispositivos de hardware como la memoria. Debe ingresar al kernel a través de llamadas al sistema para acceder a estos recursos privilegiados. Los programas que solo pueden acceder al espacio del usuario, es decir, los programas que se ejecutan en el Anillo 3, se denominan programas de usuario, mientras que los programas que se ejecutan en el Anillo 0 se denominan programas del núcleo.

Los programas de usuario no pueden acceder al espacio del kernel. Si desea llamar al programa del kernel para realizar operaciones de IO, debe cambiar del modo de usuario al modo de kernel y luego cambiar al modo de usuario una vez que se complete el proceso del kernel. .

Cuando el programa de usuario realiza operaciones de IO, necesita cambiar de estado dos veces: modo de usuario -> modo kernel -> modo de usuario. El proceso específico es el siguiente:

Cada vez. El programa de usuario realiza una llamada al sistema. Realizará dos cambios de estado. Los cambios de estado frecuentes afectarán la eficiencia de ejecución del programa. La función del búfer es reducir las llamadas al sistema. Hay dos tipos de búfer: búfer del kernel y búfer del usuario:

Cuando el programa de usuario realiza operaciones de lectura y escritura de IO, iniciará una llamada al sistema. El kernel del sistema operativo lee los datos del disco en el búfer del kernel. y luego lo lee desde el área del buffer del kernel y lo copia al buffer del usuario, el proceso es el siguiente:

Por ejemplo, si desea leer un archivo y enviarlo a través de la red, en el modo tradicional. De esta manera, cada ciclo de lectura/escritura requiere dos copias de datos y conmutación. Dos contextos, y la copia de datos requiere CPU. La misma operación se logra mediante tecnología de copia cero, con cambios de contexto reducidos a dos y sin necesidad de copiar datos por parte de la CPU.

No se utiliza copia cero

No aplicable La copia cero requiere cuatro copias de datos + tres cambios de estado

mmap + escritura

mmap + El método de escritura reduce una copia de la CPU

sendfile

El método sendfile no implica la copia de la CPU

Antes de explicar el modelo IO, primero comprenda los siguientes conceptos: bloqueo Con no bloqueo, síncrono y asíncrono:

IO de bloqueo

El proceso del usuario inicia una llamada al sistema. Si los datos aún no están listos, el proceso del usuario espera hasta que los datos estén listos. y almacenado en el búfer del kernel. El mensaje exitoso se devuelve solo después de que el área se copia al búfer del usuario. Esta operación de IO se llama bloqueo de IO. Desventajas: si los datos no están listos, el proceso del usuario siempre estará bloqueado. Si desea procesar muchas solicitudes al mismo tiempo, debe asignar subprocesos para cada solicitud para su procesamiento, lo que provocará una gran sobrecarga del sistema.

IO sin bloqueo

El proceso del usuario inicia una llamada al sistema. Si los datos no están listos, el indicador de estado se devuelve inmediatamente. El proceso del usuario puede ver los resultados posteriormente a través del sondeo. . Desventajas: aunque el proceso del usuario ya no está bloqueado, se requieren sondeos frecuentes para obtener resultados, lo que provocará llamadas frecuentes al sistema y consumirá una gran cantidad de recursos de la CPU.

Multiplexación de IO

Registre eventos de IO en el multiplexor de IO (select/poll/epoll). El proceso de llamada de selección se bloqueará hasta que se registre en él. Volverá solo cuando se hayan preparado los datos. se completa en cualquier momento IO.

E/S impulsada por señales

Cuando el proceso del usuario inicia una llamada al sistema, registrará una función de procesamiento de señales con el kernel y luego el proceso regresará sin bloquearse cuando el kernel; Los datos están listos, se enviará una señal al proceso. El proceso llama a IO en la función de procesamiento de señales para leer los datos.

IO asincrónica

El proceso del usuario regresa directamente después de iniciar una llamada al sistema, espera hasta que se completa el procesamiento y notifica activamente al proceso sobre el resultado.

Una revisión de este artículo:

El proceso de usuario se ejecuta en el espacio del usuario y solo puede acceder a recursos restringidos. Si necesita acceder a dispositivos de hardware como discos, debe iniciar un. llamada del sistema y cambio del modo de usuario Es el modo de usuario

Para reducir las llamadas frecuentes al sistema y reducir el consumo de CPU, se explica el papel del búfer del núcleo y del usuario

; El proceso de lectura y escritura de IO debe experimentarse dos veces. Cambio de estado y dos copias de datos;

Principio de copia cero

Bloqueo y no bloqueo, conceptos sincrónicos y asincrónicos, cuatro IO sincrónicos; modelos y un modelo IO asíncrono.