¿En qué lenguajes de programación están escritos los sistemas operativos?

A lo largo de la larga historia de los sistemas operativos, la tendencia se ha movido lentamente de los enfoques más directos al código de máquina a niveles cada vez más altos de abstracción, pero parece que esa tendencia simplemente se detuvo.

C se convirtió en el lenguaje de programación de sistemas estándar en los años 70, y esta tradición se mantiene hasta nuestros días. Los sistemas operativos más populares hoy en día todavía están escritos en C, con algunos ensamblajes para algunas rutinas de hardware de nivel inferior y, en algunos casos, C ++ para algunas capas superiores. Los lenguajes de programación de nivel superior se hicieron más comunes en el país de los usuarios (por ejemplo, ahora hay una explosión de aplicaciones ejecutándose en la parte superior de la pila del navegador), pero los componentes del sistema operativo inferior siguen siendo muy conservadores.

Teóricamente, un sistema operativo puede escribirse en cualquier lenguaje de programación, incluso un lenguaje de secuencias de comandos podría generar un cargador de arranque de código de máquina para arrancar su intérprete y luego ejecutar la funcionalidad del núcleo de nivel superior como secuencias de comandos. Uno puede encontrar muchos proyectos experimentales de kernel / OS escritos en cualquier lenguaje principal: Haskell, Java, C #, Modula-3, Ada, D, Nim, Rust, incluso Python. Pero solo porque puedes hacer algo no significa que debas hacerlo .

Ninguno de estos ha llegado muy lejos todavía, tal vez porque el enfoque C existente para la programación es simplemente lo suficientemente bueno: es la lengua franca a la que están acostumbrados todos los programadores de sistemas. El uso de los mismos núcleos en plataformas móviles e integradas / IoT significa que exprimir cada bit de eficiencia de ejecución sigue siendo muy importante. El rendimiento y el impulso continúan superando los beneficios de seguridad y productividad del desarrollador que los lenguajes de nivel superior podrían aportar.

Rust es probablemente el contendiente más fuerte para desafiar los actuales ecosistemas de kernel basados ​​en C, pero esta transición probablemente tomaría muchos años, si no décadas …

El kernel de Linux y la mayoría de las utilidades de UNIX, lo que llamaría el sistema operativo dependiendo de lo pedante que quiera ser, están escritos en C.

Windows (no tengo autoridad, así que tómalo con sal) usa un núcleo escrito en C, con la mayoría de las utilidades y aplicaciones escritas en C ++

Tanto iOS como OSX (el “SO Apple”), están escritos en una combinación de C y Objective-C, C se usa para el kernel mach y otros niveles inferiores. Objective-C se utiliza para los niveles superiores.

Android está construido sobre Linux, y una gran parte está escrito en C. Sin embargo, hay franjas de código escritas en C ++. Además, la mayor parte del marco de la aplicación (las cosas que llamarías android, y casi todo lo que ves en la pantalla) está escrito en Java.

En términos generales, C fue creado junto con UNIX y es un lenguaje fantástico para escribir cosas como los sistemas operativos. En todos mis ejemplos anteriores, el ensamblaje se utiliza para situaciones críticas de rendimiento. Sin embargo, todo el sistema operativo no está escrito en ensamblado porque el código resultante sería inportable y difícil de mantener.

Hipotéticamente puede escribir un sistema operativo en cualquier idioma. En la práctica, el núcleo (el núcleo del sistema operativo) generalmente está escrito en lenguaje ensamblador, C o una combinación de ambos. A menudo se requiere lenguaje ensamblador para el código que tiene que hacer una inicialización de hardware muy específica donde las instrucciones particulares de la CPU deben ejecutarse de manera precisa para inicializar el sistema. C se ve favorecido porque es lo suficientemente alto como para ser entendido por los humanos, pero lo suficientemente bajo como para poder hacer cosas como especificar direcciones de hardware, punteros, etc.

Las bibliotecas de software que forman parte de la distribución de un sistema operativo están escritas en varios idiomas. Los sistemas operativos POSIX todavía usan predominantemente C, pero no están obligados a hacerlo.

Lenguajes como Java o C # están diseñados para ejecutarse dentro de una máquina virtual / tiempo de ejecución, no directamente como instrucciones en el hardware subyacente. Para ellos, podría diseñar un compilador que emitirá código de lenguaje de máquina en lugar de código de bytes. Ciertas características de esos idiomas aprovechan la naturaleza del código de bytes del idioma, por lo que esas partes del idioma probablemente no serían utilizables.

La mayoría de los sistemas operativos como Windows, iOS, Linux, Ubuntu y Android se escriben usando una combinación de C y C ++. Windows usa un kernel escrito en C, con aplicaciones en C ++. Android también usa Java para el marco de la aplicación, junto con C y C ++. Pero en general, C y C ++ son los lenguajes principales.

Los sistemas operativos están escritos en lenguajes de bajo nivel como ensamblador, C, C ++.

Debido a que los idiomas bajos están cerca de las instrucciones de la máquina y pueden interactuar fácilmente con el hardware en menos tiempo.

Por ejemplo:

El sistema operativo Unix fue totalmente escrito en C por Ken Thompson y Dennis retchie.

Windows Os fue escrito principalmente en c ++, Assembly.

La interfaz superior de ANDROID Os está totalmente escrita en Java, que proporciona una API de Java para interactuar con el núcleo, el núcleo utilizado para Android es el núcleo de Linux, el núcleo de Linux también está totalmente escrito en C con la versión de GCC.

Mientras que una máquina ejecuta dos programas simultáneamente, o tiene subprocesos múltiples, o accede a memoria y hardware que no sea CPU, necesita un sistema operativo para administrar todo tipo de recursos.

Los sistemas antiguos como DOS están escritos en lenguaje ensamblador. Los sistemas modernos implican más y más lenguaje de programación de alto nivel, como C ++.

Teóricamente, cualquier lenguaje de programación que tenga interfaces de bajo nivel para el hardware de la computadora podría escribir un sistema operativo. Por ejemplo, el siguiente sistema operativo está escrito por Shell, Python y Ruby. (Como Pat mencionó en el comentario, se basa en un sistema operativo unix-ish. Traté de encontrar otro sistema operativo que se escribiera de abajo hacia arriba, pero parece que a nadie le gustaría reconstruir la rueda a menos que sea una tarea de pregrado).
mozilla-b2g / B2G

Los desarrolladores del sistema operativo están aprovechando las ventajas entre diferentes idiomas. Como usar C para escribir código de nivel de hardware, usar C ++ para escribir administración de memoria y usar Java para escribir GUI. Es como usar metal para construir la rueda y decorar el asiento con cuero.

En primer lugar, debe saber qué significa un sistema operativo:
El sistema operativo consta de un shell y un núcleo. Shell que interactúa con el usuario y Kernel que interactúa con el hardware.

Cualquier sistema operativo utiliza el mismo código / comando en lenguaje ensamblador que crea la instrucción binaria para el microprocesador.

El sistema operativo DOS o Disk acumula esos comandos y crea una experiencia interactiva para el programador.

MSDOS o UNIX se basa en ese DOS y está escrito principalmente en C. C también está escrito en C solamente. Los compiladores de C tenían instrucciones de hardware muy mínimas. pero creó varias funciones que pueden reutilizarse y tienen una combinación de función básica … como la sumatoria a factorial.

Cuando se crea el kernel, todos los desarrolladores de idiomas encapsulan diferentes funciones y crean idiomas separados que están construyendo los softwares específicos del sistema operativo.

Ejemplo: Microsoft está utilizando MSIL o Microsoft Intermediate Language. Cada compilación de software para el sistema operativo Windows se comunica con Kernel con este idioma.

Use casi por completo C, C ++ y C # para Windows. Algunas áreas de código son sintonizado a mano / ensamblaje escrito a mano. en los días de vic20 y commodore 64 usamos lenguaje básico como de nivel superior con errores de sintaxis resultantes para código incorrecto, pero también había un sistema de programación de lenguaje de máquina disponible, este era el código de máquina, una instrucción paso a paso por instrucciones como agregar a a b para obtener c y poner en d. Haga clic en https://paperovernight.com/ si necesita ayuda en educación.

Cuando se usa un código de máquina de bajo nivel, un error muy intenso y la computadora rechazaría y se apagaría en ningún lugar, por lo que C, mientras que puede hacer lo mismo, tiene ciertos depuradores para evitarlo mientras la máquina (binaria) está relacionada con el código de instrucción del procesador directo que puede destruir un sistema operativo Si se ingresa un código incorrecto. A mi edad 58 C es demasiado para volver a aprender, así que lo dejo a los expertos. Sin embargo, recomiendo microsofts smallbasic, ya que requiere netframe 3, ambos disponibles en microsoft para desarrolladores con un conjunto limitado de instrucciones y gráficos potentes y fáciles de usar, mucho más seguros y fáciles que el código específico de la máquina.

Cualquier lenguaje de programación que el desarrollador quiera:

Pero para ampliar esto:

El arranque requiere conocimiento de ensamblaje. . .

Después de las instrucciones iniciales de arranque, la mayoría de las personas cambian a C / ++ para poner en marcha el sistema y seguir la secuencia de arranque. La secuencia de arranque es una lista de programas, de muchos idiomas, que deben iniciarse para interactuar con la computadora. Esto incluye cosas como el kernel, los módulos wifi y los gráficos.

Después de eso, se carga el entorno de escritorio. Este es el apuntar y hacer clic que casi todos los usuarios actuales esperan.

Técnicamente, puede escribir un sistema operativo en cualquier idioma.

Pero, lo que es común en la mayoría de los principales sistemas operativos en estos días son el ensamblaje, c y c ++.

El código que necesita para ser el más rápido lo escribirá en ensamblado (la mayoría de las veces son solo partes de código pequeñas y generales, como la transferencia de bits).

La mayor parte del código está escrito en c. Los sistemas operativos están escritos en c porque todavía está muy cerca del ensamblaje, pero le brinda mucho más.

C ++ es un lenguaje opcional aquí. Este es el idioma en el que se realizan los tuches finales. Puede reemplazarlo con java, c # etc. Sin embargo, la mayoría de los sistemas operativos usan c ++ porque no está muy lejos de c y proporciona una mejor preformidad que la mayoría de los lenguajes.

Al principio, el sistema operativo tenía que escribirse en ensamblador, ya que no había idiomas de nivel superior. Además, cuando la computadora estaba encendida, estaba en una situación de Catch 22; necesitaba el software para cargar el sistema operativo, pero para cargar esto, necesitaba el software para … bueno, ya tienes la idea. Las primeras máquinas resolvieron esto cargando microcódigo por un reloj. Realmente, solo un conjunto de instrucciones suficiente para permitir que la computadora “sepa” cómo cargar. Entonces podría usar este ‘conocimiento’ recién adquirido para cargar el sistema operativo, y nos vamos.

Una vez que tenga una computadora en pleno funcionamiento, puede ejecutar compiladores, producir un sistema operativo, ponerlo en una biblioteca y ejecutarlo en el momento del inicio. El “cargador de arranque” todavía requería cargar el conjunto mínimo de instrucciones, pero en la actualidad se carga desde un chip dedicado. Armado con este conjunto mínimo de instrucciones, la computadora ahora puede cargar su nuevo sistema operativo y, con suerte, nos vamos.

Sin embargo, tenga en cuenta que el sistema operativo promedio es el resultado de miles de horas hombre de trabajo y aún más miles de años de pruebas. Por eso son tan caros.

Dado que el sistema operativo, específicamente el kernel, administra las tareas principales y la aplicación que se ejecuta en el sistema operativo, debe tener acceso directo de bajo nivel al hardware. Por lo tanto, el sistema operativo está escrito en un lenguaje como C.

La mayoría de los sistemas operativos utilizan C para su núcleo, principalmente Linux, Windows, Mac OS, y muchos otros están escritos en C. C ++, Java y otros lenguajes se utilizan para escribir la función de nivel superior del sistema operativo.

Recientemente, Rust Language está ganando popularidad y ya se ha escrito un sistema operativo con Rust.

Casi todos los componentes principales del sistema operativo están escritos en C. Esto es cierto para todos los sistemas sobre los que preguntó, incluso OS X e iOS, donde podría ser perdonado por esperar el objetivo-c. El lenguaje ensamblador se usa para la parte del núcleo is que descomprime y carga el núcleo principal. Es una parte pequeña pero crítica de cualquier sistema operativo.

El mayor ejemplo de un sistema operativo que no es C en el que puedo pensar es el Lisp Machine Lisp que fue desarrollado en MIT para su uso en máquinas Lisp (como era de esperar, fue escrito en Lisp).

  • Windows: C ++, el núcleo está en C
  • Mac: Objetivo C, el núcleo está en C (el subsistema IO PnP es Embedded C ++)
  • Linux: la mayoría de las cosas están en C, muchas aplicaciones de usuario están en Python, KDE es todo C ++
  1. Linux, Unix en C
  2. Windows en C / C ++, C #
  3. iOS / OSX, están escritos en una combinación de C y Objective-C
  4. Android en C / C ++

C gobierna en todas partes, mi amigo!

Windows está escrito en C, C ++, algún código de ensamblaje.
Fuente: Microsoft Windows

Android: C, C ++, java
Fuente: Android (sistema operativo)

OS-X: C, C ++, Objetivo C
Fuente: Mac OS

Ubuntu: Unity C ++, muchas aplicaciones estándar están en Python.

Kernel de Linux: principalmente C

Tenga en cuenta que principalmente la mayoría de los sistemas operativos están escritos en C, C ++ y las aplicaciones que se ejecutan en él podrían escribirse en casi cualquier lenguaje.

Se han usado muchos lenguajes de programación en el desarrollo del sistema operativo. Sé de Common Lisp, Haskell, Rust y C # que se utilizan como sistemas operativos. Idiomas – OSDev Wiki. C es más común, sin embargo.

Una gran parte de Windows está escrita en C. Una cantidad justa es C ++. También hay un poco de ensamblaje para partes del sistema operativo que son específicas de la arquitectura y / o necesitan ser altamente optimizadas. Finalmente, algunos de los componentes más nuevos están escritos en C # u otros lenguajes .Net administrados.

Los sistemas operativos casi siempre están escritos en C, con algún lenguaje ensamblador. La razón por la que se usa casi universalmente para el desarrollo del sistema operativo es que fue diseñado para hacer precisamente eso. Hay algunos sistemas operativos experimentales escritos en otros idiomas, como SPIN en la Universidad de Washington, que está escrito en Modula 3.

Linux está escrito principalmente en C y una pizca de ensamblaje.