¿Cómo se puede ejecutar el sistema operativo en el mismo chip que se supone que debe administrar?

17

De mis lecturas sobre los sistemas operativos (leyendo el material básico en Wikipedia, sitios tecnológicos, etc.) aprendí que el sistema operativo es un programa que permite que los programas y aplicaciones interactúen con el hardware de una manera eficiente y segura.

Sin embargo, estoy confundido acerca de cómo el sistema operativo supervisa el funcionamiento de la computadora cuando necesita ser operada.

¿Que quiero decir? Bueno, la forma en que me imagino que funciona un Sistema Operativo es que en una computadora, habría dos CPU. Uno que ejecuta el sistema operativo todo el tiempo, y otro que el sistema operativo utiliza para ejecutar la computadora. Sin embargo, resulta que el sistema operativo se está ejecutando en la misma CPU que los otros procesos. Esto es como un gerente que tiene que trabajar en la misma línea de producción que sus empleados, y solo puede usar las herramientas eléctricas cuando otro empleado termina con ellas. No sería un gerente muy efectivo, ya que no tendría la capacidad de emitir órdenes si su empleado es incluso un poco indisciplinado.

Entonces, ¿cómo puede ser que el sistema operativo solo se ejecute parte del tiempo en la misma CPU que debe compartirse entre todos los demás procesos? ¿Cómo termina esto funcionando?

CodyBugstein
fuente
1
¡Un gerente no debería usar las herramientas eléctricas de sus empleados! En cambio, tiene que asegurarse de que los empleados tengan herramientas de poder de trabajo.
MSalters

Respuestas:

15

Las CPU modernas conocen el sistema operativo hasta cierto punto. Proporcionan algunas "herramientas eléctricas" para el primero que las reclama. Por lo general, este es el cargador de arranque, que luego transfiere el control al sistema operativo. Por lo general, se habla de "modo de núcleo" frente a "modo de usuario" o "anillo 0" frente a "anillo 3" para distinguir entre un proceso con privilegios adicionales y el resto.

Estas "herramientas eléctricas" son ciertos privilegios para la administración de recursos: controle la memoria, el acceso al hardware y cuánto tiempo se puede ejecutar el código de nivel de usuario sin interrupción.

La CPU ejecuta el sistema operativo con sus privilegios especiales cuando ocurre uno de los siguientes eventos:

  1. Un proceso en modo usuario entrega explícitamente el control al proceso en modo kernel. Esto se llama syscall .
  2. El proceso en modo kernel puede usar sus privilegios especiales para registrarse para ciertos eventos (por ejemplo, el hardware externo envía una señal especial a la CPU o un proceso espacial del usuario intenta acceder a un recurso reservado). Cuando esto ocurre, la CPU detiene el proceso en modo usuario inmediatamente y entrega el control al proceso en modo kernel. Por lo general, uno habla desde un interrupción .

Entonces, el sistema operativo puede ejecutarse en el mismo chip porque el chip está diseñado para esto. Puede reservar privilegios especiales para sí mismo. La CPU puede interrumpir todas las demás piezas de código sin estos privilegios especiales en cualquier momento y entregar el control al sistema operativo.

Algunos chips con soporte muy limitado (por ejemplo, un microcontrolador ) no tienen este soporte para código especial privilegiado. Estos chips generalmente se ejecutan sin un sistema operativo. Solo hay un gran programa en ejecución, que puede acceder al hardware directamente, debe responder a las interrupciones del hardware y puede acceder a cualquier recurso en cualquier momento. Si ese programa comete un error, generalmente todo se bloquea.

stefan.schwetschke
fuente
17

En su forma más primitiva, los sistemas operativos se basan en procesos que se comportan bien y que devuelven el control al sistema operativo de vez en cuando. Si un proceso no se comporta bien, puede suceder que el sistema operativo se congele.

Sin embargo, la mayoría de las CPU tienen interrupciones : una interrupción detiene el proceso actual (preferencia) y el control manual regresa al sistema operativo. Puede programar interrupciones para que sucedan a intervalos específicos o activarse externamente (por ejemplo, presionando el botón de reinicio).

Básicamente, la CPU alterna entre ejecutar el sistema operativo y ejecutar procesos a una velocidad increíblemente rápida. Además, las CPU tienen "modo de usuario" y "modo de núcleo". Los procesos se ejecutan en modo de usuario y el sistema operativo se ejecuta en modo de núcleo. La ejecución en modo de usuario evita que un proceso ejecute comandos restringidos (como IO). Si un proceso quiere escribir en el disco, tiene que pedirle al sistema operativo que lo haga. El sistema operativo cambia al modo kernel y escribe en nombre del proceso (después de asegurarse de que el proceso tenga los permisos necesarios).

Tom van der Zanden
fuente
77
@ Imray No realmente, para la CPU, el sistema operativo es solo otro bit de código. Sin embargo, la CPU tiene muchas características que están diseñadas para ser utilizadas por los creadores de un sistema operativo.
Tom van der Zanden
3
No sé si "consciente de" es la terminología correcta, pero la CPU no tiene otra razón para existir que ejecutar un sistema operativo. Definitivamente no es completamente independiente. De hecho, la CPU depende completamente del sistema operativo para administrar sus diversos modos y, de lo contrario, decirle qué hacer.
Mohair
2
@Mohair Hay muchos microcontroladores que se ejecutan sin un sistema operativo, ¿cuentan como CPU?
Tom van der Zanden
2
"¿cuentan como CPU?" Por supuesto que lo hacen. Lo mismo hizo el 6502 en mi primera computadora a pesar de que no tenía anillos de kernel y de usuario distintos, y pokedesde la línea de comandos se podía hacer todo tipo de travesuras.
dmckee
2
@TomvanderZanden, ¿cómo exactamente the CPU switches back and forth between running the OS and running processes? ¿Qué desencadena el cambio?
jnovacho
1

No necesita dos procesadores diferentes para que el microprocesador ejecute el espacio de usuario y el código de espacio del núcleo. Básicamente funciona de esta manera cuando enciende su computadora en su Bios carga el cargador de arranque (código de 512kb en el disco que termina con la firma del cargador de arranque 55aa) para cargar y a través de este cargador de arranque, su núcleo se carga en la memoria RAM y se ejecuta para siempre hasta que apague su computadora. Y su núcleo gestiona la memoria y no permite que el código de espacio del usuario no sobrescriba el código del núcleo que se encuentra en la memoria RAM. Para este propósito, hay llamadas al sistema que el código de espacio de usuario invoca mediante el uso de estas llamadas del sistema y agrega su código de espacio de usuario para ram y comenzar a ejecutarlo. En los sistemas operativos, este concepto se investiga como gestión de memoria. Aquí está el enlace que puedes leer, es muy bueno para comenzar https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

Yasin Fatullayev
fuente
0

Para construir sobre otras respuestas, es más fácil de entender si cree que el núcleo en sí mismo no es un proceso sino un código de administración. Cualquier proceso de usuario puede cambiar del modo de usuario al modo de núcleo y ejecutar el código del núcleo (instrucciones privilegiadas) utilizando alguna parte del espacio del núcleo. Luego, el proceso puede volver al modo de usuario y ejecutarse nuevamente en el espacio de usuario.

usuario35809
fuente