Compartir tecnología

Cómo funcionan las computadoras (Conocimientos básicos para programadores)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Historia del desarrollo informático.

La necesidad de la informática está muy extendida en la historia de la humanidad y su desarrollo generalmente ha pasado por el proceso de desarrollo desde herramientas informáticas generales hasta computadoras mecánicas y las computadoras electrónicas actuales.
La necesidad de la humanidad por la informática nos impulsa a inventar y mejorar continuamente las computadoras. La era actual es la era de las "computadoras electrónicas" y la tendencia de desarrollo es: más rápida, más estable y más pequeña.
Libros recomendados: "Una breve historia de las computadoras"

2. Arquitectura von Neumann

Punto 1
Las computadoras modernas, la mayoría cumplen conArquitectura von Neumann
Insertar descripción de la imagen aquí

  • Unidad central de procesamiento de CPU: realiza operaciones aritméticas y juicios lógicos
  • Memoria: dividida en memoria externa y memoria interna, utilizada para almacenar datos (usando almacenamiento binario)
  • Dispositivo de entrada: dispositivo utilizado por el usuario para dar comandos a la computadora.
  • Dispositivo de salida: un dispositivo utilizado por la computadora para informar los resultados al usuario.
    Para espacio de almacenamiento
    Disco duro>Memoria>>CPU
    Para velocidad de acceso a datos
    CPU>>Memoria>Disco duro

Introducción a von Neumann (el padre de las computadoras)

John von Neumann (28 de diciembre de 1903 - 8 de febrero de 1957), matemático e informático húngaro-estadounidense
Científico, físico y uno de los matemáticos más importantes del siglo XX. Von Neumann es doctor en matemáticas por la Universidad de Budapest. Es una de las mentes científicas más versátiles en los campos de la informática moderna, la teoría de juegos y las armas nucleares y biológicas. padre de las computadoras modernas” y “el padre de la teoría de juegos”.
Insertar descripción de la imagen aquí

3. Flujo de trabajo básico de la CPU

A continuación, utilizamos un proceso desde cero para construir una CPU paso a paso. Podemos utilizar este proceso para comprender los principios de funcionamiento de los componentes principales de la computadora, como la CPU y la memoria.

3.1 Puertas lógicas

Interruptor electrónico – Relé mecánico
Insertar descripción de la imagen aquí
A través de interruptores electrónicos podemos implementar operaciones lógicas de 1 bit (bit) aparentemente inútiles, pero al menos funciona, ¿verdad?
Aprenderemos más sobre cómo utilizar interruptores electrónicos para combinar componentes lógicos realmente útiles.
La esencia de los futuros tubos de vacío y transistores es completar un trabajo similar, pero los principios físicos son más complejos, por lo que no lo explicaremos en profundidad.

3.2 Circuito de puerta

A continuación, aprenderemos a utilizar interruptores electrónicos para construir algunos componentes útiles: se pueden realizar operaciones lógicas básicas de 1 bit.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

3.3 Unidad aritmética y lógica ALU (Unidad aritmética y lógica)

ALU es el componente central para las operaciones aritméticas y lógicas en las computadoras, y es el cerebro matemático de la computadora. A continuación, utilizamos las puertas lógicas construidas anteriormente para completar una ALU propia, para aprender y comprender su modo de funcionamiento, a fin de aprender y comprender su modo de funcionamiento. ampliar nuestra comprensión de los principios modernos de la informática.
Insertar descripción de la imagen aquí

3.3.1 Comprensión del sistema hexadecimal

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

3.3.2 Unidad Aritmética

La unidad aritmética es responsable de todas las operaciones digitales en la computadora, como las cuatro operaciones aritméticas. Por supuesto, puede hacer mucho más que eso. A continuación, le mostraré cómo implementar un sumador de 8 bits para cubrir. Explicaré todo el proceso y otras operaciones. No explicaré más el dispositivo.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
En este punto, hemos creado un sumador de 8 bits desde cero. Las operaciones de la unidad aritmética son, por supuesto, mucho más que estas. Al continuar combinando puertas lógicas, la unidad aritmética puede realizar sumas, restas, multiplicaciones, divisiones e incluso más operaciones aritméticas, pero un sumador es suficiente como demostración. De hecho, la dificultad de hacer multiplicadores y divisores es mayor que la de sumadores y restadores. Si estás interesado, puedes intentar aprender más.

3.3.3 Unidad lógica

Las unidades lógicas se utilizan principalmente para realizar operaciones lógicas. Las operaciones más básicas son operaciones Y, O y NO, pero no son solo la comparación de números de un bit.
Insertar descripción de la imagen aquí

3.3.4 Símbolos ALU

经过我们的努力,通过基本的逻辑门电路,我们⼀步步地做出了⼀个 8 位(bits) ALU,甚至比 Intel 74181 还要强大,Intel 74181 只是⼀个 4 位(bits) ALU(😀)。当然现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位 甚至 64 位基本已经普及全球了。但无论如何,再复杂的ALU 也是芯片工程师像我们这样,一层又一层, 一步又一步地将其抽象出来的。ALU 是第⼀次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰.
Insertar descripción de la imagen aquí

3.4 Registro (Register) y Memoria (RAM)

La ALU por sí sola no es suficiente. No podemos proporcionar componentes de almacenamiento para la ALU, por lo que a continuación utilizamos circuitos de puerta para explicar brevemente la producción del almacenamiento. Tenga en cuenta que, aunque no se muestra claramente en la figura, estos requisitos de almacenamiento deben permanecer encendidos. , es decir, estos almacenamientos son volátiles (volátiles)
Insertar descripción de la imagen aquí
Ocultamos algunos detalles de implementación en el medio y el efecto final es: cuando se establece la línea de desactivación, la entrada es 1, y se guarda 1 cuando la entrada es 0, cuando la línea de habilitación no está en posición; , la escritura no es válida.
Podemos usar cerraduras de puertas para construir los registros y la memoria que necesitamos.
Insertar descripción de la imagen aquí
La construcción de la memoria es un poco más complicada que esto, pero los principios básicos son los mismos. La memoria construida de esta manera se llama RAM (Memoria de acceso aleatorio) y puede admitir una complejidad de tiempo O (1) para acceder a datos en cualquier ubicación. Esto significa que nuestra operación de acceso al subíndice de matriz es O (1).
soporte hardware.

Insertar descripción de la imagen aquí

3.5 Unidad de control CU (Unidad de control)

Ahora tenemos ALU y almacenamiento, pero esto aún no es suficiente para que nuestra computadora funcione. Necesitamos un componente para indicarle a la ALU que realice qué tipo de cálculos, y este componente es la unidad de control (CU).
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

3.6 Parámetros centrales de la CPU

Punto 2

3.6.1 Número de núcleos

Insertar descripción de la imagen aquí
La cantidad de cuadros en la imagen de arriba se puede considerar como la cantidad de núcleos. Como se muestra en la imagen, es una CPU de dieciséis núcleos.
Las primeras CPU tenían un solo núcleo. Con el desarrollo de los tiempos, tenemos requisitos cada vez mayores para la velocidad de procesamiento de la CPU. En este momento, necesitamos hacer que la CPU esté más integrada y contenga más unidades informáticas para calcular más rápido. La unidad informática es pequeña (proceso de fabricación de CPU, como 5 nm, etc.). En este momento, la mecánica clásica deja de ser válida y comienza a ingresar al campo de la mecánica cuántica. El desafío para el proceso se vuelve cada vez mayor.
En este momento se propone el concepto de multinúcleo.

3.6.2 Frecuencia

Insertar descripción de la imagen aquí

La velocidad de cálculo de la CPU se describe por frecuencia, que puede entenderse simplemente como cuántas instrucciones se pueden ejecutar en un segundo (no es riguroso. Por ejemplo, la velocidad anterior puede entenderse como los cálculos de la CPU aproximadamente 3,4 mil millones de veces por segundo). .
La frecuencia de la CPU cambia dinámicamente según la carga de trabajo. A medida que aumenta la frecuencia, consume más energía y genera más calor. Para proteger la CPU contra quemaduras debido al sobrecalentamiento, reducirá automáticamente la frecuencia.

3.7 Proceso de ejecución de instrucciones de la CPU (Instrucción)

Punto 3

3.7.1 Lista de instrucciones

Primero, introduzcamos las instrucciones que necesitamos.
La llamada instrucción, es decir, el comando que guía a la CPU para realizar el trabajo, consta principalmente de código de operación + operando.
El código de operación se utiliza para indicar qué acción se va a realizar, y el operando son los datos sobre los que operará esta instrucción, que puede ser una dirección de memoria o un número de registro, etc.
La instrucción en sí también es un número almacenado en un área determinada de la memoria en forma binaria.
Los programas que escribimos en lenguajes de programación eventualmente deben traducirse a "instrucciones binarias ejecutadas en la CPU". Las instrucciones son la unidad básica de tareas completadas por la CPU.
Las instrucciones también son lenguaje de máquina (binario) y lenguaje ensamblador. El lenguaje de máquina y el lenguaje ensamblador tienen una correspondencia uno a uno.
Diferentes CPU admiten diferentes instrucciones a nivel micro, como instrucciones x86 e instrucciones arm, lo que provoca problemas de compatibilidad.
Insertar descripción de la imagen aquí
Se puede considerar que las instrucciones que puede ejecutar una CPU se estipularon cuando se diseñó originalmente la CPU. La imagen de arriba enumera algunas instrucciones simplificadas.
La instrucción de 8 bits se puede dividir en dos partes.
Los primeros 4 bits son el código de operación (código de operación) que indica lo que hace la instrucción.
Los últimos 4 bits son operandos (similares a los parámetros)
El nombre del registro AB en la tabla anterior es ficticio. El nombre del registro real de la CPU tiene la forma: eax, ebx, esp, ebp...)

3.7.2 Proceso básico de ejecución de instrucciones

Hay un registro especial en la CPU, el "contador de programa" (el sistema lo configurará automáticamente después de que el exe se cargue en la memoria), que guarda la ubicación de la memoria desde la cual se ejecutará la siguiente instrucción. Al mismo tiempo, a medida que se ejecuta la instrucción, el valor del "contador de programa" también se actualizará en consecuencia. De forma predeterminada, es un proceso de incremento automático de +1 (que ejecuta instrucciones en secuencia). como (si, mientras, para, llamada a función...), se establecerá en otro valor.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Dividimos la ejecución de instrucciones en tres etapas:
1) Obtención de instrucciones, la CPU lee el contenido de la instrucción de la memoria a la CPU (hay registros especiales para guardar las instrucciones leídas).
2) Analizar la instrucción e identificar su función, funciones correspondientes y operandos.
3) Ejecutar instrucciones
La ejecución de cada instrucción debe pasar por los tres pasos anteriores, y completar una tarea requiere la ejecución de varias instrucciones anteriores. Por ejemplo, un proceso de suma puede requerir tres instrucciones anteriores, lo que parece muy problemático, pero debido al cálculo de la CPU. muy rápido (las operaciones anteriores se pueden realizar más de mil millones de veces en un segundo) y una computadora no requiere mucho tiempo.

4. Idioma del programa

4.1 Programa

El llamado programa es un conjunto de instrucciones y los datos que este conjunto de instrucciones debe procesar. En sentido estricto, un programa suele aparecer como un conjunto de archivos.
Programa = instrucción + datos a procesar por la instrucción.
Insertar descripción de la imagen aquí

4.2 Programación temprana

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Esta es una pequeña historia interesante que circuló anteriormente, pero por supuesto no es cierta.Pero para las primeras computadoras, la programación realmente requería
Programado con 0 y 1 (Σ(っ°Д °;)っ)
La siguiente imagen muestra la computadora Altair 8800, una de las primeras microcomputadoras. El usuario necesita controlar el interruptor e ingresar el programa en la computadora poco a poco.
Insertar descripción de la imagen aquí
Si todos los usuarios de computadoras deben usar programación binaria, todos se volverán locos. Este es un umbral demasiado alto. Así surgieron los lenguajes de programación.

4.3 Desarrollo de lenguajes de programación

Para mejorar la eficiencia de la programación, se creó por primera vez el concepto de lenguaje ensamblador. De hecho, el lenguaje ensamblador y el lenguaje máquina (es decir, las instrucciones) están directamente en correspondencia uno a uno. Sólo que en relación con los números 0 y 1, se han inventado algunos símbolos para ayudar a los humanos a recordarlos y comprenderlos. es lo que tenemos arriba. Lo que ves es similar a LOAD_A, LOAD_B, etc. Una vez que los programadores completan la programación, necesitan utilizar un ensamblador para traducir el lenguaje ensamblador al lenguaje de máquina.
Aunque el ensamblaje reduce el costo de la memoria del programador, aún requiere que el programa domine todos los conocimientos del hardware de la computadora. Con el creciente número de fabricantes de computadoras, los programas escritos al mismo tiempo a menudo solo son adecuados para un tipo de computadora. Esto está lejos de ser suficiente, por lo que nacieron lenguajes más avanzados que protegen los detalles del hardware y permiten a los programadores pensar en su negocio a un nivel superior. Aquí tomamos el lenguaje C como ejemplo. Una vez que el programador termina de escribir el programa, necesita usar un compilador y un vinculador para traducir el programa al lenguaje ensamblador, y luego usar el ensamblador para convertirlo en el lenguaje de máquina final.
Con la ayuda de la idea de encapsulación, nos resulta cada vez más fácil aprender a programar. Sin embargo, existen ventajas y desventajas. El alto grado de abstracción hace que muchos programadores consideren la computadora como una caja negra y sean completamente incapaces de comprender cómo funcionan sus propios programas. Espero que ninguno de nosotros se convierta en ese tipo de programadores.
El lenguaje Java que utilizamos es un poco más avanzado que el lenguaje C, pero no hay mucha diferencia en los principios abstractos básicos, por lo que no daremos más detalles por ahora.
Insertar descripción de la imagen aquí
Nota: Una declaración en un lenguaje de alto nivel a menudo corresponde a muchas instrucciones para completar.

5. Sistema operativo

Punto 4
Sistema operativo es un nombre colectivo para un conjunto de software que administra los recursos de la computadora. Actualmente, los sistemas operativos comunes incluyen: serie Windows, serie Unix, serie Linux, serie OSX, serie Android, serie iOS, Hongmeng, etc.
Los programas que se ejecutan en diferentes sistemas son diferentes (los programas no son compatibles debido a diferentes kpi)

5.1 Posicionamiento del sistema operativo

Insertar descripción de la imagen aquí
Un sistema operativo tiene dos funciones básicas:
1) Evite que las aplicaciones espacio-temporales abusen del hardware; proporcione KPI a la aplicación y permita que la aplicación lo llame para completar diferentes funciones.
2) Proporcionar aplicaciones con mecanismos simples y consistentes para controlar dispositivos de hardware de bajo nivel complejos y, a menudo, muy dispares.

Un sistema operativo hace principalmente las dos cosas siguientes:
1) Administrar diferentes dispositivos de hardware. Las computadoras pueden acceder a muchos dispositivos, como escáneres de códigos, equipos médicos, máquinas de ultrasonido B...
2) Proporcionar un entorno operativo estable para el software. Los sistemas operativos modernos deben ejecutar muchos programas al mismo tiempo. Se espera que estos programas no puedan interferir entre sí. Si ocurre un error en un programa, no afectará a otros programas. .

6. Proceso/Tarea

Cuando cada aplicación se ejecuta en un sistema operativo moderno, el sistema operativo proporcionará una abstracción, como si solo este programa se estuviera ejecutando en el sistema y este programa utilizara todos los recursos de hardware. Esta ilusión se logra abstrayendo el concepto de proceso, posiblemente uno de los conceptos más importantes y exitosos en informática.
Un proceso es una abstracción de un programa en ejecución por parte del sistema operativo. En otras palabras, el proceso puede considerarse como un proceso en ejecución del programa. Al mismo tiempo, dentro del sistema operativo, el proceso es la unidad básica de asignación de recursos; por el sistema operativo.

6.1 El concepto de proceso

Punto 5
Los procesos son algunas aplicaciones que se están ejecutando en nuestras computadoras (Cuando se habla de una aplicación, hay dos estados. Cuando no se está ejecutando, es un archivo exe que se encuentra en el disco duro; cuando se está ejecutando, el exe estará. cargado en la memoria, y la CPU ejecuta las instrucciones dentro).
Insertar descripción de la imagen aquí
El proceso es la unidad básica de asignación de recursos por parte del sistema operativo.

6.2 Gestión de procesos

Punto 6
Dado que hay muchos procesos en el sistema, es necesario gestionarlos.
1) La descripción expresa varios atributos del proceso a través de estructuras/clases (los sistemas convencionales se implementan a través de C/C++)
2) La organización conecta las múltiples estructuras (descripciones) anteriores a través de la estructura de datos y además realiza varias adiciones, eliminaciones, modificaciones y verificaciones...
Por ejemplo, el sistema operativo Linux utiliza una estructura llamada "PCB" para describir la información del proceso (PCB significa bloque de control de procesos). En pocas palabras, los múltiples PCB mencionados anteriormente se unen a través de una lista vinculada para crear un proceso (doble). -hacer clic en exe, ejecutar el programa) es equivalente a crear una estructura de PCB. Destruir el proceso significa eliminar la PCB de la lista de conexiones y liberar la estructura de PCB. Ver la lista de procesos significa recorrer la lista de conexiones y mostrar la información correspondiente en secuencia. .
PCB es una estructura muy compleja que contiene muchos atributos. Aprendamos información clave a continuación.
1.Identificador de proceso PID
Al mismo tiempo, el PID es único entre múltiples procesos en una máquina y no se repetirá. Muchas operaciones internas del sistema encuentran el proceso correspondiente a través del PID.
Insertar descripción de la imagen aquí
2. Puntero de memoria (un conjunto)
Describe el área donde se almacenan las instrucciones y los datos que dependen del proceso.
Cuando el sistema operativo ejecuta el exe, leerá las instrucciones y los datos del exe y los cargará en la memoria (dirección de memoria).
Desde un lado, muestra que la ejecución del proceso requiere ciertos recursos de memoria.
3. Tabla de descripción de archivos (tabla/matriz de secuencia)
Describe qué archivos abre el proceso, correspondientes a los datos en el disco duro.
Cuando se abre un archivo en el proceso, se agregará un elemento a la tabla de secuencia para facilitar la lectura.
Los siguientes elementos determinan en conjunto la programación del proceso, el cual está íntimamente relacionado con nuestro desarrollo diario.
Punto 7
La clave para la programación de procesos del sistema operativoMultiplexación en tiempo compartido
Los sistemas operativos actuales son todos "sistemas multitarea" que pueden ejecutar múltiples procesos al mismo tiempo. Los sistemas operativos anteriores se llamaban "sistemas de tarea única" y solo podían ejecutar un proceso al mismo tiempo.
Comprensión de la multiplexación de tiempo compartido: en un momento determinado, la CPU ejecuta el proceso 1, se ejecuta por un tiempo, la CPU ejecuta el proceso 2 y ejecuta el proceso 3 después de un tiempo ... Debido a que la velocidad de cálculo y la velocidad de conmutación de la CPU son muy rápidas, no se nota a simple vista. Desde una perspectiva humana, equivale a una ejecución simultánea, "ejecución concurrente".
Ejecución paralela: Ahora con las CPU multinúcleo, cada núcleo y entre núcleos también pueden ejecutar diferentes procesos al mismo tiempo a nivel microscópico.
La concurrencia o la concurrencia están programadas de manera uniforme por el núcleo del sistema operativo y los programadores/usuarios comunes no pueden percibirlas. Por lo tanto, el paralelismo y la concurrencia generalmente se denominan colectivamente "concurrencia", y las técnicas de programación correspondientes también se denominan "programación concurrente".
4. Estado del proceso
Estado listo: el proceso se puede programar en la CPU para ejecutar instrucciones en cualquier momento
Estado bloqueado: el proceso no se puede programar para ejecutar instrucciones en la CPU. La razón por la que está bloqueado es que necesita realizar otras operaciones, como operaciones IO (lectura y escritura de discos duros o lectura y escritura de tarjetas de red, como). escanear entrada). Cuando se requiere la entrada del usuario, el proceso entra en estado de bloqueo)
Los dos anteriores son los dos estados principales del proceso. También hay otros estados, así que no entraré en demasiados detalles...
5. Prioridad del proceso
La prioridad es literalmente el orden de los procesos.
6. Contexto del proceso
Multiplexación de tiempo compartido. Después de que un proceso se ejecute durante un tiempo, se transferirá desde la CPU. Después de un tiempo, se programará nuevamente a la CPU. Continuará ejecutándose junto con los resultados de la última ejecución. Los resultados intermedios de la ejecución anterior (varios valores en el registro de la CPU) se guardan para su próximo uso.
7. Información contable del proceso
Con el apoyo de las prioridades, los recursos consumidos por diferentes procesos pueden volverse cada vez más diferentes...
Los atributos anteriores se utilizan para admitir la ejecución simultánea del proceso de programación.

7. Asignación de memoria⸺Administración de memoria (Administración de memoria)

El sistema operativo asigna recursos de memoria mediante un modelo espacial: diferentes procesos utilizan diferentes áreas de la memoria sin interferir entre sí.

8. Comunicación entre procesos

Como se mencionó anteriormente, el proceso es la unidad más pequeña de asignación de recursos por parte del sistema operativo, lo que significa que cada proceso no puede sentir la existencia del otro. Esta es la intención original del sistema operativo de abstraer el concepto de proceso, lo que genera. el proceso Están "aislados" unos de otros.
Sin embargo, las aplicaciones modernas a menudo no pueden completar un requisito comercial complejo a través de un proceso. Siempre requieren que el proceso y el proceso cooperen para lograr el propósito de la aplicación. La necesidad de comunicación entre procesos surgió en el momento histórico.
Actualmente solo existe un método principal de comunicación entre procesos en Java, a través de la red (socket)
La red es un mecanismo IPC relativamente especial. Además de admitir la comunicación entre dos procesos en el mismo host, también admite la comunicación entre procesos en diferentes hosts dentro de la misma red.