1 00:00:00,560 --> 00:00:18,960 Hola de nuevo. Bueno, pues en este segundo vídeo vamos a ver la otra parte que quería explicar con detenimiento y que tuviera bien bien clara, que sería el funcionamiento del procesador y la estructura de Von Neumann, que es importante recordarla, ¿de acuerdo? 2 00:00:18,960 --> 00:00:23,820 pero sobre todo como contribución a este genio de la informática y de las matemáticas 3 00:00:23,820 --> 00:00:31,859 que es uno de los padres de la informática, junto con Alan Turing, del que ya habréis oído hablar 4 00:00:31,859 --> 00:00:34,719 en el documental que vimos de la informática. 5 00:00:35,240 --> 00:00:41,640 Este señor von Neumann describió esta estructura que estáis viendo aquí ahora mismo 6 00:00:41,640 --> 00:00:48,899 y lo importante del asunto es que fue una descripción teórica. 7 00:00:48,960 --> 00:01:00,579 o sea, él no llegó a construir ningún ordenador, sino que aventuró, describió, como digo, que los ordenadores se iban a hacer de esta forma, ¿vale? 8 00:01:01,140 --> 00:01:11,879 ¿Y cuál es esta arquitectura? Pues la que vosotros conocéis y la que se mantiene a día de hoy, porque básicamente es la misma que consiste en una CPU, 9 00:01:11,879 --> 00:01:22,640 una unidad central de proceso, que es la que tenemos aquí abajo, formada por la unidad de control y la unidad aritmético-lógica, de las que vamos a hablar ahora mismo con detalle. 10 00:01:23,239 --> 00:01:31,379 Una memoria principal, que es la memoria RAM de la que hemos hablado en el vídeo anterior, que es la que va a guardar datos e instrucciones en diferentes direcciones de memoria 11 00:01:31,379 --> 00:01:36,340 para que en todo momento el procesador acceda a ellos y a ellas para utilizarlas. 12 00:01:37,120 --> 00:01:43,959 Una serie de dispositivos de entrada o periféricos de entrada y unos periféricos de salida que conocéis perfectamente 13 00:01:43,959 --> 00:01:55,620 y además una memoria masiva que sería lo que es hoy en día el disco duro magnético y ahora ya el disco duro de estado sólido. 14 00:01:55,620 --> 00:02:12,379 Bueno, pues esta estructura efectivamente se mantiene a día de hoy porque a día de hoy los ordenadores tienen una CPU, tienen una memoria RAM, tienen periféricos de entrada y de salida y tienen un disco duro exactamente así, ¿de acuerdo? Luego, fijaos si es importante. 15 00:02:12,379 --> 00:02:37,659 Pues ahora basándose en esta arquitectura precisamente vamos a describir un procesador y vamos a estudiar el ciclo de trabajo tanto de la carga de una instrucción como de la ejecución de una instrucción con dos ejemplos diferentes para que lo tengáis claro. 16 00:02:37,659 --> 00:03:07,520 Y de nuevo intentemos entrar hasta un cierto detalle para poder entender lo más importante quizá es la comunicación entre la RAM y el procesador y qué está ocurriendo, dónde van y además para rescatar otros componentes, circuitos electrónicos en este caso que estudiamos a la hora de ir viendo los diferentes niveles de estudio de los ordenadores. 17 00:03:07,659 --> 00:03:15,960 que eran los registros, los biestables y el contador de programa, que al fin y al cabo es un registro. 18 00:03:16,139 --> 00:03:21,960 Bien, pues fijaos, voy a revisar aquí todos los elementos que hay y después nos ponemos a trabajar con ellos. 19 00:03:22,419 --> 00:03:29,560 Del puntero de pila vamos a prescindir, no digo nada para no confundirnos, de los biestables, de los flip-flops, el de acarreo, el de paridad, 20 00:03:29,680 --> 00:03:33,360 también vamos a prescindir porque no lo vamos a utilizar y nos vamos a centrar en lo siguiente. 21 00:03:33,360 --> 00:03:50,960 Aquí tenemos la unidad de control con su lógica de control, su circuitería, el reloj que marca la velocidad de trabajo del ordenador, que ya sabéis que hoy en día está en el orden de 10 elevado a 9 ciclos por segundo, 22 00:03:50,960 --> 00:04:02,139 dice 9 Hz, porque tenemos 3,2 o 2,4 o lo que sea gigahertz. Bien, pues reloj, lógica y control, y aquí los dos registros que nos interesan. 23 00:04:02,520 --> 00:04:13,159 El registro de instrucciones y un registro especial que es el contador de programa, que es el que va a tener la dirección de memoria de la siguiente instrucción a ejecutar. 24 00:04:13,159 --> 00:04:17,300 Aquí lo vamos a ver en este ejemplo de forma consecutiva, secuencial 25 00:04:17,300 --> 00:04:19,459 Primero una instrucción, luego la siguiente, luego la siguiente 26 00:04:19,459 --> 00:04:21,660 Por eso prescindimos del puntero de pila 27 00:04:21,660 --> 00:04:23,579 Bueno, pues entonces aquí tenemos dos registros 28 00:04:23,579 --> 00:04:26,199 Recordad que un registro es más que una serie de vía estables 29 00:04:26,199 --> 00:04:28,839 Un circuito electrónico formado por varios vía estables 30 00:04:28,839 --> 00:04:32,259 En este caso van a ser 16 porque vamos a trabajar con 2 bytes 31 00:04:32,259 --> 00:04:37,639 Y que un vía estable es un circuito electrónico que puede almacenar un bit 32 00:04:37,639 --> 00:04:40,639 Y se llama vía estable porque tiene dos estados 33 00:04:40,639 --> 00:04:44,279 el estado en el que almacena un 0 y el estado en el que almacena un 1. 34 00:04:44,600 --> 00:04:48,000 Los biestables, aquí los tenemos de ejemplo, pero como digo, no los vamos a utilizar. 35 00:04:48,439 --> 00:04:51,899 Sin embargo, los registros sí, vamos a trabajar para ver el flujo de información 36 00:04:51,899 --> 00:04:55,980 y vamos a ver dónde se van almacenando en cada registro correspondiente. 37 00:04:56,279 --> 00:05:01,600 Bueno, pues registros, recordad, en este caso serían 16 biestables en serie 38 00:05:01,600 --> 00:05:05,019 sobre los que se puede escribir, porque todos pueden valer, 39 00:05:05,120 --> 00:05:09,579 cada una de las posiciones de ese registro, cada uno de los biestables de ese registro 40 00:05:09,579 --> 00:05:12,959 podría valer 0 o 1. Y así es como grabamos la información aquí. 41 00:05:13,300 --> 00:05:16,379 Bueno, pues, registro de instrucciones, contador del programa. 42 00:05:16,879 --> 00:05:20,540 Aquí, ¿qué tenemos? Fijaos, ALU es la unidad aritmético-lógica. 43 00:05:21,019 --> 00:05:24,360 Mirad que tiene aquí representado, esto es una representación esquemática, 44 00:05:24,740 --> 00:05:26,620 dos entradas, ¿verdad? Y aquí una salida. 45 00:05:27,019 --> 00:05:30,819 Bien podría ser que aquí tenemos la entrada de un dato, aquí la entrada de otro dato, 46 00:05:30,980 --> 00:05:34,639 y aquí la salida del resultado de la operación. Imaginad, una suma. 47 00:05:34,980 --> 00:05:38,120 Y ese resultado se guardaría aquí. ¿Qué es esto? 48 00:05:38,120 --> 00:05:54,259 Pues esto es un banco de registros que van numerados del registro 0 al registro F, numerados en hexadecimal, es decir, que serían 16. No es que tenga que haber 16, es como digo, una representación esquemática para entender el funcionamiento de un procesador, ¿vale? 49 00:05:54,259 --> 00:05:59,879 Pues aquí tenemos registros, ¿para qué? Para guardar datos o para guardar direcciones de memoria, ¿vale? 50 00:06:00,339 --> 00:06:09,939 Aquí tenemos otro registro, registro temporal, y aquí dos muy importantes, el registro de direcciones, que por tanto va a guardar direcciones de memoria RAM, 51 00:06:10,300 --> 00:06:14,860 y el registro de datos, que va a guardar datos o instrucciones, ¿vale? 52 00:06:15,079 --> 00:06:21,139 Si son datos, generalmente irán para acá, y si son instrucciones, pues irán finalmente al registro de instrucciones, ¿vale? 53 00:06:21,139 --> 00:06:26,839 Bueno, pues estas son las diferentes partes en este esquema que tenemos que tener claras. 54 00:06:26,839 --> 00:06:39,240 La repito, registro de instrucciones, contador de programa, registro de direcciones, registro de datos, banco de registros y aquí la unidad de metodología que es la que voy a hacer el trabajo. 55 00:06:39,819 --> 00:06:50,579 Bueno, aquí tenemos un esquema de la unidad de metodología y lo que acabo de comentar, esto me lo voy a saltar y aquí está la presentación describiendo lo que yo acabo de explicar, me lo voy a saltar. 56 00:06:50,579 --> 00:06:55,379 todo esto, esto es una diapositiva que puse de repaso para que lo tengáis claro antes de empezar 57 00:06:55,379 --> 00:06:58,279 y ahora sí vamos a ver cómo se ejecuta un programa 58 00:06:58,279 --> 00:07:03,819 y la primera fase es la carga de la primera instrucción 59 00:07:03,819 --> 00:07:08,819 vamos a suponer que esto es un programa cuya primera instrucción es A73C 60 00:07:08,819 --> 00:07:15,420 que está en la dirección 100A, esta es una dirección en hexadecimal y esto es una instrucción en hexadecimal 61 00:07:15,420 --> 00:07:31,480 Vale, pues el primer paso del proceso es cargar desde la memoria RAM esta dirección de inicio 100A aquí en el contador de programa, porque el contador de programa me va a decir cuál es la instrucción que hay que ejecutar. 62 00:07:31,579 --> 00:07:39,120 Pues lo primero que hacemos es que esto tiene que ir al contador de programa y sería lo que tenemos aquí. 63 00:07:39,120 --> 00:07:52,720 Aquí empieza el proceso de nuevo explicado. Paso a paso, quiero decir, las diapositivas. Entonces, se carga en el contador de programa la dirección de la primera instrucción. 64 00:07:53,100 --> 00:08:05,060 El siguiente paso es que, como esto es una dirección, tiene que ir desde el contador de programa al registro de direcciones. Todo esto es el procesador, luego es una comunicación interna. 65 00:08:05,060 --> 00:08:15,899 No necesitamos un bus, sin embargo, sí que necesitamos un bus para que esta dirección, a través del bus de direcciones, me permita localizar en la memoria RAM qué instrucción hay. 66 00:08:16,060 --> 00:08:26,980 ¿De acuerdo? ¿Para qué? Para que esa instrucción A73T venga después a través del bus de datos y se almacene aquí en este registro que, si recordáis bien, es el registro de datos. 67 00:08:27,399 --> 00:08:33,259 ¿Cuál sería el último paso? Registro de datos y de instrucciones se podría llamar porque esto es una instrucción, ¿verdad? 68 00:08:33,259 --> 00:08:40,440 pues el último paso es que esa instrucción que está en el registro de datos se lleve hasta el registro de instrucciones 69 00:08:40,440 --> 00:08:45,000 y ahora ya una vez que está en el registro de instrucciones se ejecutaría. 70 00:08:45,720 --> 00:08:51,100 Así que aquí arriba si veis viene todo el proceso de esta forma. 71 00:08:51,779 --> 00:08:57,080 La dirección de inicio o la que sea, en este caso comenzamos por el inicio, se carga en el contador de programa 72 00:08:57,080 --> 00:09:01,899 luego ya el contador de programa va a ir uno a uno, uno a uno, uno a uno avanzando de uno a uno 73 00:09:01,899 --> 00:09:11,080 que es lo que hace el contador de programa, almacenar bytes que van en orden consecutivo, salvo cuando se los tenga que saltar y entonces intervendría el puntero de pila. 74 00:09:11,080 --> 00:09:23,840 Bueno, después la dirección va del contador de programa al registro de direcciones. El registro de direcciones va a hacer o nos va a servir para que a través del bus de direcciones 75 00:09:23,840 --> 00:09:32,000 vayamos a la memoria a buscar qué es lo que hay en esa dirección y lo vamos a llevar a través del bus de datos hasta el registro de datos 76 00:09:32,000 --> 00:09:39,940 y por último del registro de datos al registro de instrucciones. Esto que viene aquí no lo he explicado, se me ha olvidado comentarlo, 77 00:09:40,360 --> 00:09:47,159 sería lo que va a ocurrir en el contador del programa, se va a incrementar en 1, ya no hace falta que se cargue de la siguiente dirección, 78 00:09:47,159 --> 00:09:51,879 simplemente se incrementa en 1. ¿Para qué? Pues para coger la siguiente instrucción. 79 00:09:52,159 --> 00:09:58,700 La siguiente instrucción sería la que está en 1.0.0.b y es la instrucción 7.c.4.d y se repetiría el proceso. 80 00:09:59,200 --> 00:10:03,399 Bueno, pues esto es el proceso de carga de una instrucción en el registro de instrucciones. 81 00:10:03,399 --> 00:10:13,440 Y ahora vamos a ver el siguiente ejemplo, que sería, o perdón, el siguiente proceso, que sería la ejecución de la instrucción, de una instrucción. 82 00:10:13,440 --> 00:10:32,720 ¿Vale? Entonces suponemos ahora que vamos a ver cómo se ejecuta la instrucción 0700 que está en la dirección 0039. ¿De acuerdo? Entonces ya se ha cargado, ¿verdad? Ya se ha realizado el proceso que acabo de explicar antes y por eso el contador de programas se ha incrementado en 1 y ya está la siguiente 003A. 83 00:10:32,720 --> 00:10:50,740 Pero ahora la dirección 0700, veis que estuvo aquí y se ha cargado en el registro de instrucciones, se va a ejecutar. ¿Vale? Pues ¿en qué consiste esta instrucción? Pues en llevar un dato cuya dirección está indicada en el registro del banco de registros RD, ¿vale? 84 00:10:50,740 --> 00:11:17,519 que sería el equivalente al registro 14, si lo numeramos de 1 en 1 hasta llegar a 16, entonces en este registro, en RD, tenemos una dirección de memoria y la instrucción, como digo, 0700 consiste en llevar un dato cuya dirección está indicada aquí a este registro, al R7, 85 00:11:17,519 --> 00:11:23,899 es decir, buscar en la memoria RAM un dato cuya dirección se indica en uno de los registros del banco de registro 86 00:11:23,899 --> 00:11:28,960 para coger lo que hay en esa dirección de memoria, ese dato, y llevarlo a otro registro 87 00:11:28,960 --> 00:11:32,539 en este caso los registros RD y R7, ¿de acuerdo? 88 00:11:32,919 --> 00:11:38,139 bueno, pues entonces, ¿cuál sería el primer paso de ejecución de esta instrucción 0700? 89 00:11:38,840 --> 00:11:46,580 pues si la dirección está aquí en el registro RD, el primer paso va a ser cargar esa dirección en el registro de direcciones 90 00:11:46,580 --> 00:11:59,179 obviamente hacia aquí abajo, ¿de acuerdo? Se carga la dirección 54C2. El siguiente paso sería que a través del bus de direcciones vamos a la RAM a buscar qué es lo que hay en esa dirección, 91 00:11:59,320 --> 00:12:12,019 en la 54C2, y lo que hay es el dato de 7A2, este dato. Este dato de 7A2 va a volver a través del bus de datos y se va a conectar, perdón, se va a grabar en el registro de datos, 92 00:12:12,019 --> 00:12:42,000 que para eso está claro, ¿y cuál sería el último paso? Muy sencillo, pues tenemos que llevarlo aquí, ¿verdad?, al registro R7, porque es en lo que consiste la instrucción 0700, pues entonces, del registro de datos al registro R7, ¿para qué?, pues no lo sabemos, probablemente, para ejecutar una operación con él, podría ir después de aquí al registro temporal, y la siguiente instrucción es coger otro dato, y la siguiente instrucción es realizar la suma, y claro, imaginar que aquí hablamos de una instrucción tan sencilla como cargar un dato en un registro, 93 00:12:42,019 --> 00:13:01,580 Pero imaginad la de miles de millones de operaciones que puede realizar un procesador. Es una simplificación de un proceso, de una microinstrucción. Sería en realidad una microoperación, lo tenemos indicado en las diapositivas, que es la parte que podemos ver más fácilmente. 94 00:13:01,580 --> 00:13:19,700 ¿De acuerdo? Anteriormente, efectivamente, en estas diapositivas tenéis explicado lo que es una microoperación y las microoperaciones básicas que podrían ser estas, ¿verdad? El movimiento de datos y instrucciones de la RAM al procesador. 95 00:13:19,700 --> 00:13:35,720 Bueno, pues estas dos cosas, lo que expliqué en el anterior vídeo de la RAM y ahora el procesador, son muy importantes para que podamos entender un poquito, atisbar un poco, cuál es el funcionamiento de estos dos componentes que son los más importantes del ordenador. 96 00:13:36,440 --> 00:13:41,500 Muy bien, pues eso es todo respecto al procesador. Muchas gracias.