Como ingeniero de software y desarrollador de sistemas C4I, creo que comprender las diversas capas de interacción de software y hardware es extremadamente importante, especialmente cuando empiezas a preocuparte por la seguridad. Esta pregunta es tan simple y, sin embargo, la respuesta tan complicada: me encanta. Antes de comenzar, permítame señalarle un libro llamado “Estructura de la organización de la computadora” de Andrew Tanenbaum. Para obtener una gran apreciación de la respuesta que puedo dar, también debe comprender el lado del hardware.
Permítanme comenzar diciendo esto: el software moderno es una abstracción entendible y utilizable por el ser humano de lo que quiere que haga la computadora, que incluye la interacción con otras partes del sistema, otros sistemas y datos. Por abstracción, los detalles de gran parte de la computadora y lo que el hardware realmente hace están ocultos para el programador.
Por lo tanto, un programador se ocupará de la aplicación o del software del sistema. El software de aplicación existe para ayudar al usuario a realizar alguna tarea específica del usuario, como el procesamiento de textos. El software del sistema son instrucciones dirigidas más al hardware, como el sistema operativo (SO) (por ejemplo, Microsoft Windows). De cualquier manera, el software que escribe un programador en realidad pasará por múltiples capas de procesamiento y conversión para llegar a la forma que el hardware de la computadora puede ejecutar.
- ¿Qué hace que el software de Tableau se destaque?
- ¿Dónde puedo obtener el mejor software de verificación de identificación?
- ¿Son precisas las aplicaciones de fertilidad?
- ¿Cuál es el mejor software para administrar un préstamo de oro en un negocio NBFC?
- ¿Qué aplicación de inglés hablado estadounidense debe descargarse para hablar con fluidez?
Así que tomemos un programa típico de “Hola Mundo”. Por ejemplo, el programador puede escribir: Imprimir “Hola Mundo”.
Eso es una abstracción: tiene un comando, “Imprimir” y los datos para imprimir, “Hola Mundo”. Su computadora no sabe qué hacer con esto por sí misma. Por lo tanto, hay dos formas principales de ejecutar su software. Puede compilarse o interpretarse, y cada uno necesita un tipo diferente de software (segunda capa). Un compilador es una pieza de software que procesa su comando en total y lo convierte en información más legible por máquina que se puede ejecutar llamada código de máquina. Un intérprete es algo similar a un compilador, pero usted “interactúa” con él, línea por línea de programa, y procesa su programa poco a poco.
Los compiladores e intérpretes procesan sus comandos utilizando funciones, sintaxis o reglas predefinidas que juntas forman un lenguaje de computadora. Algunos lenguajes están diseñados para ser compilados, como C ++, Fortran y Ada. Muchos otros lenguajes están hechos para ser interpretados, como Perl, Python, R, Matlab, Javascript, etc. Java, un lenguaje muy popular, es realmente un híbrido. Los programas Java se compilan en una forma intermedia llamada código de bytes, que está mucho más cerca de lo que la máquina puede procesar. Ese código de bytes se interpreta utilizando una “Máquina virtual Java” o JVM. JVM maneja las diferencias de su hardware subyacente, por lo que Java es popular como lenguaje de desarrollo web: el programador no necesita preocuparse por la computadora que lo ejecutará. Los diferentes idiomas están diseñados para diferentes propósitos, por lo que un programador elige un idioma como elige una herramienta.
Por lo tanto, el compilador o el intérprete procesa su programa “Imprimir” Hello World “y lo enviará a código de bytes o código de máquina. (capa tres). Bueno, ese código necesita saber cómo acceder a su pantalla para imprimir las letras “Hola Mundo”. Eso requiere que el software llame a otro software llamado sistema operativo (capa 4). El sistema operativo sabe cómo escribir en la pantalla. El compilador o intérprete también ha agregado muchos otros comandos a su programa de los que no tuvo que preocuparse. Por ejemplo, las palabras “Hola Mundo” tuvieron que ser traducidas a un formulario que puede almacenarse en la computadora llamada binario – 0 y 1. Ese código para letras es usualmente ASCII. También podría ser unicode. Cada letra que conoces debe traducirse a un código binario. Una vez traducido, debe haber comandos para guardarlo en la memoria, obtenerlo de la memoria y enviarlo a la pantalla. Su sistema operativo debe llevar el código de Hello World a la pantalla a través de todos los fragmentos de su computadora. Ahí es donde su sistema operativo habla con el BIOS de su computadora para obtener información de muy bajo nivel sobre cómo trabajar dentro de su computadora.
Su computadora necesitará convertir sus caracteres de “Hello World” en letras que aparecerán en su pantalla. Eso es más software en ejecución. Además, hay un software dentro de su pantalla que recibe lo que envía su computadora.
Ah, y por cierto, el “código de máquina” que tiene las instrucciones que los cerebros (unidad central de procesamiento o CPU) saben cómo procesar, muchas veces tiene otra capa de software dentro de la CPU llamada microcódigo que le dice a la CPU qué puertas enciéndalo y desactívelo para que los electrones puedan fluir correctamente para darle la respuesta que usted, el desarrollador del compilador, el desarrollador del sistema operativo, los desarrolladores del BIOS y los desarrolladores de periféricos (como pantallas) están esperando.
En pocas palabras: a los desarrolladores de hardware y software les ha llevado décadas trabajar duro para construir todas las capas de hardware y software necesarias para trabajar juntas, de modo que nosotros, como humanos, podamos desarrollar un software que comprendamos y que necesite traducirse varias veces a un formulario El hardware se ejecuta.