2010-10-01 12 views
5

mi pregunta es cómo exactamente el sistema operativo protege su parte del kernel.¿Cómo funciona exactamente el núcleo de protección del sistema operativo

Por lo que he encontrado, hay básicamente 2 modos kernel y usuario. Y debe haber algunos bits en los segmentos de memoria que tels si un segmento de memoria es núcleo o segmento de espacio de usuario. Pero, ¿dónde está el origen de esos bits? ¿Hay algún "interruptor" en el compilador que marque los programas como programas kernel? Y, por ejemplo, si el controlador está en modo kernel, ¿cómo gestiona el sistema operativo su integración en el sistema para que no se agregue software malicioso como controlador?

Si alguien me pudiera iluminar sobre este tema, yo estaría muy agradecido, gracias

Respuesta

5

La técnica normal es mediante el uso de una función del administrador de memoria virtual presente en la mayoría de las CPU modernas.

La forma en que funciona el hardware es que mantiene una lista de fragmentos de memoria en un caché y una lista de las direcciones a las que corresponden. Cuando un programa intenta leer alguna memoria que no está presente en esa caché, la MMU no solo va a buscar la memoria desde la ram principal, ya que las direcciones en la memoria caché son solo direcciones "lógicas". En cambio, invoca otro programa que interpretará la dirección y buscará esa memoria desde donde debería estar.

Ese programa, llamado localizador, es suministrado por el kernel, y los indicadores especiales en la MMU impiden que ese programa sea anulado.

Si ese programa determina que la dirección corresponde a la memoria que debe usar el proceso, le proporciona a la MMU la dirección física en la memoria principal que corresponde a la dirección lógica solicitada por el programa del usuario, la MMU la trae a su caché y reanuda la ejecución del programa de usuario.

Si esa dirección es una dirección "especial", como para un archivo mapeado en memoria, entonces el kernel busca la parte correspondiente del archivo en la caché y permite que el programa se ejecute junto con eso.

Si la dirección está en el rango que pertenece al núcleo, o si el programa aún no se ha asignado esa dirección, el localizador genera un SEGFAULT, lo que causa la muerte del programa.

Dado que las direcciones son direcciones lógicas, no físicas, diferentes programas de usuario pueden usar las mismas direcciones lógicas para significar direcciones físicas diferentes, el programa de buscapersonas kernel y la MMU lo hacen todo transparente y automático.

Este nivel de protección no está disponible en CPUs antiguas (como 80286 cpus) y algunos dispositivos de muy baja potencia (como ARM CortexM3 o Attiny CPU) porque no hay MMU, todas las direcciones en estos sistemas son direcciones físicas, con correspondencia 1 a 1 entre el espacio de memoria rAM y dirección

+0

Quiere decir MMU en lugar de VMU, y las CPU ARM sin MMU generalmente tienen una MPU que le permite establecer algunas regiones de memoria (8 en ARM946E-S) con derechos de acceso para usuario/kernel. – ninjalj

0

Cuando una computadora se enciende, comienza a ejecutar el código de algún lugar bien conocido. Ese código finalmente termina cargando algo del núcleo del SO en la memoria y pasándole control. El núcleo del sistema operativo luego configura el mapa de memoria de la CPU a través de algún método específico de la CPU.

5

El "interruptor" está realmente en el procesador. Algunas instrucciones solo están disponibles en modo kernel (a.k.a ring 0 en i386). Cambiar del modo núcleo al modo usuario es fácil. Sin embargo, no hay tantas formas de volver al modo kernel. Puede:

  • enviar una interrupción al procesador
  • hacer una llamada al sistema.

En cualquier caso, la operación tiene el efecto secundario de transferir el control a un código de kernel de confianza.

0

y por ejemplo si el conductor está en modo kernel, ¿cómo sistema operativo gestiona su integración en el sistema por lo que no es un software malicioso añadido como piloto?

en realidad depende de la arquitectura del sistema operativo. Le daré dos ejemplos:

  1. kernel de Linux: Un código de controlador puede ser muy poderoso. El nivel de protecciones es el siguiente:

a) Un conductor tiene permitido acceder a un número limitado de símbolos en el núcleo, especificados mediante EXPORT_SYMBOL. Los símbolos exportados son generalmente funciones. Pero nada impide que un controlador descarte un kernel usando punteros salvajes. Y la seguridad que usa EXPORT_SYMBOL es nominal.

b) Un controlador solo puede ser cargado por el usuario con privilegios que tenga permiso de root en el cuadro. Entonces, mientras los privilegios de root no sean vulnerados, el sistema es seguro.

  1. Micro kernel como QNX: El sistema operativo exporta suficiente interfaz al usuario para que un controlador pueda implementarse como un programa de espacio de usuario. Por lo tanto, el controlador al menos no puede trash fácilmente el sistema.
Cuestiones relacionadas