¿Cómo funciona el software?

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.

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.

Gracias por el A2A

Ya hay muchas buenas respuestas sobre los detalles del software, así que permítanme ser un poco abstracto (broma de software para aquellos que lo conocen)

Yo diría que todo el software se trata de formalizar causa y efecto. Cuando se ejecuta un programa de software, las cosas solo suceden por una razón. Un ejemplo básico sería cuando un usuario hace clic en un botón: ejecuta un conjunto de comandos.

Puede haber muchos desencadenantes ocultos que serían difíciles de encontrar para alguien que no sabe programar. Por ejemplo, en el código de Excel se ejecuta cuando una celda pierde lo que llamamos ‘foco’ (se selecciona cualquier cosa menos la celda actual), este código actualizará todos los valores a las fórmulas en la hoja de cálculo.

Ahora alguien mencionará qué ocurre con los eventos aleatorios, no se activan … pero son … como un bloqueo de la computadora.

Cuando ejecuta una instancia de código, usa los recursos de la computadora, use todos los recursos de la computadora y la computadora falla. Si un humano tuviera la paciencia, probablemente podría trabajar exactamente cuando una computadora se estrellaría … pero ¿cuál sería el punto?

Para redondear, el software funciona formalizando y anotando causas y efectos.

Ahora tengo sed (causa), así que iré y me prepararé una taza de té (efecto)

En realidad, hacer la taza de té es lo que hace la programación

El software es un conjunto de instrucciones que conducen a la realización de una determinada tarea cuando se ejecuta por una computadora. El software de la computadora procesa información, datos y programas, e incluye: programas de computadora, bibliotecas y datos no ejecutables como medios digitales o en línea.

El propósito de esta pregunta es probablemente entender cómo el software interactúa con el hardware para obtener ciertos resultados. En el nivel más bajo, tenemos un código ejecutable que en realidad son instrucciones en lenguaje de máquina que son compatibles con un procesador específico, como la CPU (unidad central de procesamiento). El lenguaje de máquina consiste en grupos de valores binarios que actúan como instrucciones del procesador que determinan que la computadora cambie su estado. Algunos de estos cambios son visibles para el usuario, como cuando aparece algo en la pantalla de la computadora, mientras que otros tienen efectos que el usuario no puede observar directamente. Sin embargo, la mayoría del software está escrito en lenguajes de programación de alto nivel, lo cual es fácil de usar. Estos idiomas accesibles se traducen al lenguaje de máquina utilizando un compilador o un intérprete.

El software es básicamente un conjunto de instrucciones. Cuando se ejecutan, estas instrucciones se transmiten al procesador que las lleva a cabo y devuelve un resultado. Todo el software se divide en tres partes básicas:

Entrada. Este es el conjunto de instrucciones, generalmente del usuario, que se pueden recibir desde el teclado, el mouse, el micrófono o la cámara.

Tratamiento. Esto tiene lugar en el procesador, que procesa la entrada recibida; hace cálculos, comparaciones, etc.

Salida. Una vez que se procesan los datos, se devolverán y se pueden mostrar en un monitor, salir de los altavoces o algo así.

Esta es información muy básica. Si quieres más, mira este artículo. ¡Espero haber respondido tu pregunta!

La forma más básica de software es el lenguaje de máquina. Las CPU entienden un conjunto de instrucciones. A menudo son muy básicos, como cargar un número en un registro de CPU o agregar un número a un registro de CPU. Tienen la capacidad de probar una condición específica y saltar a un lugar diferente en un programa en función de ese resultado. Al usar estas sencillas instrucciones de CPU, se pueden crear programas complejos.

El tiempo del programador es valioso, y la programación en lenguaje de máquina es monótona. Entonces, las personas inventaron lenguajes de nivel superior para facilitar la programación. De vez en cuando, un nuevo lenguaje de programación se vuelve popular, ofreciendo ventajas sobre otros. Pero no hay un lenguaje todo poderoso. Diferentes idiomas se adaptan a diferentes necesidades. Por ejemplo, las personas que programan páginas web y las personas que programan súper computadoras para predecir el clima tienen diferentes necesidades.

Los lenguajes de programación solos son solo parte de la “imagen”. Junto con el lenguaje, los programadores necesitan acceso a rutinas que permitan el acceso y la actualización de los archivos almacenados en las unidades de las computadoras. Es posible que necesiten la hora actual, o para abrir una página web, o para mostrar gráficos. Estas rutinas son proporcionadas por las bibliotecas, de modo que el programador no tiene que recurrir a hablar directamente con el sistema operativo o volver a activar la rueda. A medida que pasa el tiempo, los programadores intentan confiar cada vez más en las bibliotecas existentes para simplificar sus trabajos. Pero debido a que los programas se vuelven más complejos, programar proyectos reales nunca es lo que yo llamaría fácil 🙂

Pidió respuesta (!) Gracias.

Creo que quizás se ha descuidado una idea importante en las otras (excelentes) respuestas a esta pregunta resbaladiza. Esto tiene que ver con el papel del software en la arquitectura fundamental de von Neumann de la mayoría de los equipos informáticos desde la década de 1950. Aquí hay una explicación breve (pero exhaustiva) de la arquitectura de la computadora que “permite” cómo funciona el software moderno:

Arquitectura de von Neumann – Wikipedia

La arquitectura de Von Neumann permite el almacenamiento de ambos programas (software) y datos en la misma memoria. A su vez, esto permite “tratar los programas como datos” y el desempeño de las operaciones que producen y modifican el código del programa. Esencialmente, esta es la esencia de “cómo funciona el software”. Para citar el artículo de Wikipedia citado anteriormente:

A gran escala, la capacidad de tratar las instrucciones como datos es lo que hace posible a los ensambladores, compiladores, enlazadores, cargadores y otras herramientas de programación automatizadas. Uno puede “escribir programas que escriben programas”.

Esto ha permitido que un sofisticado ecosistema informático de autohospedaje florezca alrededor de las máquinas de arquitectura von Neumann.

Algunos lenguajes de alto nivel, como LISP, aprovechan la arquitectura von Neumann al proporcionar una forma abstracta e independiente de la máquina para manipular el código ejecutable en tiempo de ejecución, o mediante el uso de información de tiempo de ejecución para ajustar la compilación justo a tiempo (por ejemplo, en el caso de los idiomas alojados en la máquina virtual Java o los idiomas integrados en los navegadores web).

En una escala más pequeña, algunas operaciones repetitivas como BITBLT o sombreadores de píxeles y vértices podrían acelerarse en procesadores de uso general con técnicas de compilación justo a tiempo

Por supuesto, el software y su funcionamiento podrían interpretarse fácilmente como análogos a la vieja parábola de los ciegos y el elefante:

Los ciegos y el elefante

De acuerdo con esto, lo que he dicho aquí es solo “mi visión del elefante”, por así decirlo.

Fundamentalmente, el software es solo una secuencia de estas operaciones simples

  • Recordando números
  • Haciendo matemática básica en esos números
  • Comparando esos números
  • Elección condicional de diferentes conjuntos de operaciones para realizar en función de los resultados de la comparación

La magia del software es que depende de nosotros elegir qué representan los números y qué operaciones realizar en ellos.

¡Esto hace que el software sea una hermosa pizarra en blanco donde casi todo es posible!

Cocinar (y hornear) es mi analogía favorita para explicar el software de una manera con la que la mayoría de las personas pueden identificarse.

  • Las recetas de cocina consisten en ingredientes y un conjunto de pasos bastante detallados que debes realizar en orden. El resultado que obtienes es un plato que en realidad son los ingredientes transformados en otra forma.
  • El software de la computadora consta de “entrada” (texto, números, datos, información, acciones del usuario, etc.) y un conjunto de pasos extremadamente detallados que la computadora tiene que realizar en orden. El resultado que obtiene es “salida”, que es una forma transformada de la entrada.

Una pregunta fantastica.

Hay tantos niveles que puede abordar. Varias respuestas han abordado diferentes aspectos, iré al nivel inferior de cómo el software hace que el hardware haga las cosas. Cada instrucción de software se descompone en un conjunto más pequeño de instrucciones más detalladas. Esas instrucciones se descomponen en instrucciones aún más detalladas hasta que llegue al código del ensamblador (o código de máquina). Estos le dicen al procesador que mueva los datos de A a B o que realice una aritmética muy simple: agregue A a B, por ejemplo.

¿Cómo funciona? Cada instrucción de código de máquina se descompone una vez más para microcódigo, que es lo que se graba en el hardware del procesador. Puede pensarlo como una matriz de interruptores y cada instrucción de microcódigo opera un subconjunto de los interruptores, conectando un bit de datos a otro lugar, ya sea una celda de memoria o una unidad aritmética.

Por ejemplo, para agregar dos números, tenemos que cargar ambos números en ubicaciones de almacenamiento en el chip llamados registros. Luego necesitamos conectar cada registro a las conexiones de entrada del circuito sumador y conectar los pines de salida del sumador nuevamente a un registro. Cada uno de esos pasos implica varias aperturas y cierres de interruptores de microcódigo para que se procesen varias instrucciones de microcódigo a su vez, cada una conectando un bit de la sierra de calar. Al final del proceso, se activa el sumador y el hardware produce una salida en el registro de resultados.

Escribir microcódigo es una habilidad altamente especializada que muy pocas personas tienen, pero es la base sobre la cual se construyen lenguajes de nivel superior como código de máquina, ensamblador, C, Java y JavaScript, etc. Todo lo demás es solo descomposición de vuelta al microcódigo y algo de electrónica digital. En definitiva, todo lo que hace una computadora implica combinaciones de mover datos de A a B y sumar dos números. Eso es todo lo que realmente pueden hacer. El resto es matemática inteligente.

En resumen, el software es una forma de programar puertas lógicas para crear un circuito electrónico que tenga propiedades definidas por el programa.

Las primeras computadoras no tenían software, eran cables, puertas lógicas y líneas de retardo conectadas para ser el programa. En algún momento a mediados de la década de 1930, los ingenieros se dieron cuenta de que solo se podían construir pequeños pedazos de programa y activarlos / desactivarlos en el orden correcto. Ahorrado en la reconstrucción, produjo menos errores y permitió ejecutar muchos más programas en la misma pieza de hardware.

Hay dos tipos de software. Existe el tipo que la máquina realmente ejecuta y está el tipo en el que el programador se alimenta.

El tipo de máquina que ejecuta es simple.

Tiene un registro llamado Registro de dirección o Puntero de instrucción. Contiene la dirección de memoria de la siguiente instrucción que se procesará.

Tiene un cargador que intenta obtener esta instrucción del caché.

Si no está allí, el caché toma la dirección, programa el bus de datos para abrir un canal a esa dirección en la memoria y extrae el contenido. Esto se alimenta al decodificador de instrucciones.

El decodificador de instrucciones echa un vistazo a la operación a realizar y selecciona el circuito correcto en la unidad aritmética y lógica para realizarlo. Luego extrae los operandos. Si los operandos son indirectos, en otras palabras, apuntan a una dirección donde está el operando real, entonces vuelve y obtiene los valores correctos.

Los operandos se introducen en el circuito para procesar esa instrucción.

Si la operación requiere que los datos se vuelvan a guardar en la memoria, los resultados se envían a la ubicación en la memoria a la que apunta uno de los operandos o uno de los otros registros.

A menos que la instrucción cambie específicamente qué instrucción mirar a continuación, el puntero de la instrucción se incrementa para abarcar la instrucción más los operandos.

La CPU siempre comenzará en un lugar fijo en la memoria, cuando se inicie, y continuará hasta que se le dé una instrucción específica para detener.

El software que escriben los programadores generalmente está en un nivel más alto que el código de máquina. Aunque algunos de nosotros usamos código de máquina de vez en cuando.

Esto se alimenta a:

  1. Un compilador, que convierte la descripción abstracta de lo que quiere hacer en el código de máquina que representa cómo hacerlo realmente, O
  2. Un compilador de bytecode, que convierte la descripción abstracta en un pseudocódigo que se puede ejecutar en una computadora simulada, O
  3. Un intérprete, que es un programa generado por uno de los otros dos que puede tomar un programa como información que el intérprete sigue a la manera de una computadora simulada, excepto que no hay código de máquina. Cada palabra se procesa en el momento en que se ejecuta.

¿Cómo funciona el software? Sin pensar en la arquitectura, los sistemas operativos y los diversos niveles de instrucción informática, la respuesta es que todo el software implementa una serie de algoritmos. Un algoritmo es una secuencia finita de instrucciones que, dada toda la información necesaria, produce el resultado correcto y se detiene. Los algoritmos a su vez dependen de otros algoritmos, hasta llegar a las operaciones primitivas que manipulan los bits en la memoria y en el disco. Cada dato, ya sea un archivo de Word, un correo electrónico o una instrucción, se almacena como una serie de bits o dígitos binarios; Estas son unidades básicas que almacenan un 1 o 0 (o verdadero o falso, encendido o apagado, alto o bajo, dependiendo de cómo se implementen).

El software es creado por desarrolladores de software. Crean código (serie de instrucciones de computadora) en un lenguaje de programación. Tal lenguaje es un lenguaje en un nivel de abstracción mucho más alto que el que puede entender una computadora / dispositivo (imagínelo como una variante técnica de un subconjunto del idioma / gramática inglesa), pero lo que un desarrollador de software puede entender (como ser humano) .

Debido a que una computadora / máquina no puede entender el código de alta abstracción creado por el desarrollador del software, el código debe convertirse / traducir a un lenguaje que la máquina pueda entender. Ese código de nivel inferior se llama código de máquina. La traducción del código de lenguaje de programación de alto nivel al código de máquina se llama compilación, por lo que necesita un programa compilador para hacer esto. Cada lenguaje de programación tiene su propio compilador para compilar a un determinado código de máquina o plataforma.

El código compilado se puede ejecutar en la plataforma / máquina, como por ejemplo un procesador Intel, iPhone, plataforma Java Runtime, un automóvil o un sistema operativo como Windows, Linux, iOS, etc.

El software es un conjunto de instrucciones para manipular y almacenar datos en varias formas de memoria. Entrada, procesamiento, salida.

El hardware, por otro lado, describe los componentes físicos de una computadora que ejecuta las instrucciones, almacena / recupera datos y proporciona muchas otras funciones.

¿Podría ser más específico? Creo que algunos de los otros autores ayudaron a elaborar un poco, ¡pero esta es una pregunta abierta!

Mi respuesta simple:

  • El software es un conjunto de instrucciones enviadas a una máquina (una computadora) que solo puede actuar de manera predeterminada utilizando instrucciones predeterminadas
  • Cuando las instrucciones se ejecutan en orden, las computadoras pueden hacer cosas fantásticamente complejas, como ejecutar un videojuego o proporcionarle un reproductor de música.
  • Por lo tanto, el software puede considerarse como un conjunto de instrucciones enviadas a un procesador

Micro

Muchas máquinas eléctricas vienen con una sola configuración. Los enciendes y siempre hacen lo mismo.

Las máquinas un poco más complejas pueden tener varias funciones disponibles, por lo que vienen con un conjunto de interruptores y controles para modificar qué función proporcionan. Son efectivamente muchas máquinas de una sola función.

El software en ejecución es un conjunto de bits binarios (como los conmutadores de 2 estados) que pueden configurar una máquina diseñada para que una máquina de computación compleja de propósito general realice ‘cualquier computación’. Usted controla eso escribiendo en un lenguaje que los humanos puedan entender. Este es el código fuente que es traducido por algún software existente al software ejecutable que configura la máquina de cómputo para que haga lo que usted desea (si el “código” es correcto).

Comencemos con un procesador, puede hacer circuitos eléctricos, estos responden a las entradas eléctricas, puede encadenarlos para hacer que las respuestas más complejas a las entradas más complejas produzcan salidas más complejas. Esto puede hacer que un grupo de 0 y 1 produzca otro conjunto de 0 y 1. Arme esto y darás el primer gran salto de abstracción. Puede poner estos 0 y 1 juntos y hacer que representen instrucciones y números. Al igual que puede hacer instrucciones como, agregue 1 y 5. Luego tiene varios medios para hacer el almacenamiento, para almacenar los 0 y 1 para su uso posterior. Ahora imagine que tiene algo así como una cinta con series de 0 y 1 sin fin una tras otra, donde cada conjunto de 32 0s y 1s y luego seguido de otro conjunto de 32 y otro, etc.

Continuando con las instrucciones como ‘sumar 1 y 5’, puede hacer abstracciones más altas y usar variables como ‘sumar x e y’. Puedes hacer abstracciones aún más altas como la multiplicación. Puede realizar múltiples abstracciones de nivel superior para representar operaciones más complejas, como ‘cifrar datos x’. Al final, todo lo que estamos haciendo con la programación de nivel superior es la abstracción para que sea más fácil poner nuevas instrucciones más complejas de nivel superior entre sí. No estoy realmente seguro de que eso responda a su pregunta, pero espero que aclare un poco cómo funciona.

Larga historia.

Obtenga un manual técnico para un procesador, cualquier procesador. Elija uno antiguo como Motorola 6809, o quizás Intel 8086. Debería poder encontrar sus conjuntos de instrucciones en Internet.

Los conjuntos de instrucciones para procesadores es donde el software adquiere su significado. Las computadoras ejecutan programas de software a través de sus conjuntos de instrucciones. El conjunto de instrucciones del procesador es donde se compone el lenguaje ensamblador y a qué lenguajes de nivel superior se convierten antes de transponerse a las instrucciones binarias del procesador.

Eso debería ayudarlo a comenzar.

Espero que esto ayude. Buena suerte.

En informática, si recuerdo bien, un software es un nombre general para todo tipo de programas. El software se utiliza para conducir, controlar y ejecutar computadoras, dispositivos electrónicos y todo tipo de dispositivos que contienen circuitos. Puede decir que se utiliza un software para agregar inteligencia a los dispositivos electrónicos. Los programas se escriben usando los lenguajes apropiados, los resultados de estos programas que finalmente son 0 y 1 en lenguaje de máquina o en forma binaria, se implementan ‘a veces’ por circuitos abiertos y cerrados, y se usan para pasar mensajes o enviar instrucciones, que controlan otras cosas como mostrar información en su monitor, controlar dispositivos electromecánicos o desarrollar juegos en los que participo.

Mi nombre es Daniel y soy estudiante de Informática de último año en la Universidad Nacional Abierta de Nigeria. Respondí tu pregunta de corazón. Mi sitio web es Ameritel.

Es una pregunta muy general y probablemente tenga demasiadas respuestas, pero intentaré explicarla brevemente.

Cualquier software tiene la interfaz de usuario con la que básicamente interactúa, la mayoría de los softwares también tienen una base de datos para agregar registros o eliminar registros, esta base de datos también es un software en sí misma.

Lo que hace que todo funcione y haga lo que espera que haga es el Código de programación escrito por el Desarrollador de software.

Una computadora sin software es solo una caja que contiene algunos componentes electrónicos que no hacen nada. Una analogía es un reproductor de DVD sin DVD. Puede verse bien, pero el único valor que tiene es como tope de puerta. Ponga un DVD en el reproductor, puede escuchar música o ver una película. Ponga algún software en la computadora, puede escribir cartas, buscar cosas en Internet, registrar la genealogía de su familia, jugar juegos y muchas cosas más. Eso cubre el propósito del software.

¿Como hace eso? Son muchos cientos, mil o millones de bytes de datos binarios que la CPU interpreta como trabajo útil. Algunos de esos bytes pueden indicarle a la CPU que grabe las pulsaciones de teclas que escribe el usuario y las almacene en un archivo en el HDD, algunas pueden ser un juego que el usuario puede jugar, pero todo se debe al hardware (la CPU y otros componentes). ), tal como se diseñó para responder de manera específica a un patrón específico de los bytes del software.