El 386 fue un éxito de ventas incluso antes de que apareciera el software que exprimiera todo su potencial. ¿Era sólo hype o realmente supuso un cambio revolucionario? Curiosamente, IBM no fue el primero en participar en la generación de 32 bits del PC que él mismo había inventado, sino que Compaq y Zenith tomaron la delantera.
|
etiquetas: 386 , 1986 , pc , 32 bits , the computer chronicles
Es decir, en lugar de ejecutar una instrucción a la vez, como los anteriores procesadores hacían, el Pentium podía ejecutar múltiples instrucciones a la vez en paralelo. Antes de eso, era habitual hablar de "ciclos por instrucción" para referirse a la velocidad de una CPU. Pero a partir del Pentium, se pasó a hablar de "instrucciones por ciclo", puesto que en un mismo ciclo de reloj, la CPU podía ejecutar multiples instrucciones.
Recordemos, todo esto con un solo "core".
Si el procesador detecta que cierta instrucción B necesita el resultado de la anterior instrucción A, entonces lo que hace es meter instrucciones posteriores o anteriores C, D, E, que no necesitan de ese resultado y las ejecuta antes que B. Por ejemplo, si el programa originalmente era
A
B (depende de A)
C (no depende de A ni B)
D (no depende de A ni B)
E (no depende de A ni B)
el procesador las reordena "al vuelo" en algo como A, C, D, E, B.
Básicamente, mientras que espera a que termine A, adelanta trabajo que tiene que hacer después, y luego sigue con B, y ese trabajo que ha adelantado ya no tiene que hacerlo.
Pero la inmensísima mayoría de programas y rutinas son suficientemente largos en código máquina como para que haya instrucciones de sobra para rellenar huecos.
Un equipo con un 386 ya era un señor ordenador
El código CISC del programa se traducen en microcódigo RISC que es lo que realmente se ejecuta.
El programador tiene la certeza de que, haga lo que haga la CPU, el resultado del programa es idéntico, porque se garantiza la coherencia del mismo. Cuando se reordenan instrucciones, como las instrucciones que cambian de posición no usan resultados de las anteriores, el cálculo final es el mismo.
En situaciones donde el programador pudiera confundirse, como por ejemplo, al ejecutar un depurador paso por paso, toda esta reordenación y tal es desactivada.
De lo que si las CPUs tardan lo mismo en ejecutar cada instrucción pues no lo sé, pero en procesadores como el z80 no, cada instrucción utilizaba distinto número de ciclos de cpu, incluso recuerdo que ciertas instrucciones requerían una barbaridad de ciclos y se procuraba no usarlas nunca.
En RISC, todas las instrucciones duran exactamente lo mismo porque son sencillísimas: obtener instrucción, obtener valor que opera, hacer operación (suma, resta, comparación, cosas muy simples), almacenar el resultado.
La instrucción CISC de búsqueda de un valor en un array se traduciría por tropecientas instrucciones RISC.
El quid es que ejecutar instrucciones RISC nos permite hacer todos estos trucos de reordenar instrucciones, tener multiple pipelines, etc, con lo que merece la pena el esfuerzo de diseñar todo eso.
Y, en fin, el tiempo les dio la razón.
Se podría juntar con Bill Gates que dijo que nadie iba a necesitar más de 640Kb de RAM.
#93 ¿Se llamaba o la llamaban Baby AT para diferenciarla de la ATX? Me suena algo así
#112 No sé si el Pentium ya hacía esto, o fue algo posterior. Otra cosa es que como dice #117 sepas el número de ciclos que va a tardar una operación.
"nother point not addressed in the existing answers relates to the latency associated with accessing an external coprocessor.
The first math coprocessors, while much faster than doing the same work on a CPU, still took many clock cycles to complete each operation. The overhead (bus cycles) associated with transferring data between the two chips was "lost in the noise". In other words, there was no penalty for putting those functions in a separate chip.
However, as coprocessors got faster, this overhead became a significant bottleneck on throughput, and this is what drove integrating them directly into the CPU chip."
en el FP de sonido con el tema de los Macs era todo humo y un montón de hype
es.m.wikipedia.org/wiki/IBM_Personal_Computer/AT
El programa no era lento. Sí lo era para renderizar, claro.
No. El coprocesador más popular de aquella época era el 8087.
Aunque según he leído ahora también hubo otro llamado 8089.
#75 ¿Cómo que cierto?
#60 ¿Cómo que "incorrecto"?
No es incorrecto que después del XT saliera el AT... son modelos de PC de marca IBC.
Una cosa es el PC (ordenador, con su placa madre, su memoria, su fuente de alimentación... ) y otra cosa es el microprocesador, un chip, una piececita del ordenador... la más representativa / importante, pero solo una pieza.
#4 A mi también me sonaba el 386 bastante posterior a esa fecha... Pero antes la fecha de salida de un chip era muy anterior a los primeros ordenadores con ese chip. Intel sacaba un chip al mercado, normalmente caro ya que era una innovación, una novedad. Los fabricantes se ponían a diseñar el ordenador con ese chip, según las especificaciones y a veces también tardaba en adaptarse algún sistema operativo a ese chip.
Según he leído ahora, el 8086 salió en 1978 y el 8088 en 1979 pero el AT (PC de IBM con 8086) salió en 1984, coincidiendo cuando Apple hizo su anuncio (¿final de 1983? ¿1984?) aludiendo a la novela de Orwell, "1984". Los Apple llevaban otro chip, de Motorola, por eso no eran compatibles.
Pero vamos, que pasaron 5 años desde el chip hasta el PC con ese chip. Y el primer AT costaba un dineral, más de 1500 dólares, equivalentes a unos 4500 euros de 2021. A lo mejor los PC asequibles compatibles x86 (clónicos, etc) salieron hacia 1988, ¡unos 10 años después que el chip 8086! El primer PC de mi casa fue con chip 8088, por esa época, 1988 ó 1989.
El 386 es de finales de 1985 y quizá fue asequible en 1993... por eso nos suena posterior, 6 ó 7 años después de salir a la venta el chip, porque no comprábamos chips sino PCs asequibles.
Ahora la industria se ha acelerado y cuando sale un chip solo tardan a lo mejor 3 meses en sacar aparatos con ese nuevo chip.
Luego añade que la versión del Win95 era la OSR2, que ya venía con el iExplore, soporte para USB, AGP, FAT32 y demás, y lo mejor de todo era que el ordenador no tenía CD-ROM , con 15-16 años, a mediados de los 90, no me podía gastar casi 20.000 Ptas. en un CDROM.
Así que adivina como instalé el Win95..., 26 maravillosos disketes de 1.68Kb que me dejaron copiar en el instituto. 3 horitas y algo duraba de media la instalación.
La secuencia de la disquetera durante la instalación era maravillosa, se encendía el LED verde, leia un par de pistas, si había suerte quizá leía una tercera pista, "clac - clac", se apagaba el LED, entre 8 y 10 segundos de silencio mientras el ordenador descomprimía y almacenaba en la memoria las dos pistas que acababa de leer, se vuelve a encender el LED, lee otras dos pistas, "clac - clac", se apaga el LED, otros 8-10 segundos de silencio y así con los 26 disketes...
Cabe señalar que el programa de instalación no descomprimía los .CAB directamente en el disco duro sino en la memoria RAM, una vez llena ya sí volcaba todos los archivos descomprimidos al disco duro, con 4Mb de RAM esta operación la hacía cada 2-3 disketes, tardaba algo menos de 1 minuto en volcar al disco todo lo que había descomprimido en la memoria.
Peores chapuzas y menos funcionales hice un tiempo antes, con un 286 y un Windows 3.11 que no me dejaba instalar el MS Word 6.0
El sistema operativo no era el problema, el Word 6.0 si no recuerdo mal se podía instalar sin problema en un Win 3.x o un NT 4.5x, funcionaba sin problemas con sistemas operativos de 16 bits, el problema era el procesador del ordenador, el 286.
El 286 no está programado/diseñado a nivel interno, a nivel electrónico, para trabajar con una memoria virtual como ya si lo estaba el 386 y sucesivos, por lo que si se acaba la memoria física, si uno o varios programas te comen toda la memoria RAM, el procesador no puede utilizar el disco duro como si fuera memoria RAM y el ordenador o bien acaba por bloquearse o bien va tan lento que acabas apagándolo a la brava porque es imposible hacer nada.
La instalación del Word 6.0 ya me dio pistas de que no iba a ir nada bien el tema, se tiró casi 1 horita de nada para escupir el mensaje de error diciendo que no tenía memoria virtual suficiente para continuar con la instalación...
En resumidas cuentas, lo que hice fue descomprimir en un directorio del disco duro todos los archivos de los 10 disketes del Word.
Me tiré hora y algo descomprimiendo pero "mereció la pena", sí entre comillas , el Word se ejecutó sin problema, tardó así como 5 minutos en abrirse pero lo hizo, ahora bien, era del todo inutilizable ya que la memoria del ordenador estaba hasta arriba y cada dos por tres el word accedía al disco duro para leer otra vez el programa, el word y sus librerías, se tiraba varios minutos leyendo incluso cada vez que parpadeaba el cursor, y como este no para de parpadear tampoco paraba de leer el disco...
Para escribir una sola letra te podías tirar varios siglos.
El 386 mejoró muchas cosas de x86: introdujo la paginación, hizo mucho más ortogonal el juego de instrucciones,...
Quizás lo más parecido a algo así podría haber sido la gama M de Apple, pero viendo que llevan dos años, y todavía la competencia ni siquiera les haya intentado ni copiar/seguir, me dice que M no es para tanto
Mi otra esperanza es Nvidia/similares, donde el potencial de sus procesadores puedan pegar un empujón al mundo informático base, y no solo al minado y a los LLMs
En el caso del P6 (Pentium Pro, Pentium II, ...), hay una primera parte del procesador (frontend) que funciona en orden, al final de esta parte se asignan los registros de la instrucción a registros reales del procesador (que son muchos más), guardándose esta asociación en la RAT (Register Alias Table) (los registros que se usen como fuente se buscan en los que ya están en la RAT, los usados como destino se asocian a uno libre) y se guarda información sobre la instrucción en algo llamado Reorder Buffer (ROB). El ROB va enviando instrucciones que estén listas para ejecutarse (los registros de los que dependen ya tienen su valor válido) a unidades de ejecución que estén disponibles. Según las unidades de ejecución terminan de ejecutar las instrucciones, estas últimas se van retirando del ROB en orden.
Hay que conocer el modelo de (consistencia de) memoria del lenguaje, que típicamente se basa en relaciones de orden como happens-before, synchronizes-with,... para que las cosas cobren sentido.
Así acabé programando sistemas embedidos -era pre android/ios, pues ya arm existía... jtags...uclinux sin gestor de memoria- hasta que la vida me llevo a la tranquilidad del devops, la nube y esas movidas... que dan de comer, amplian el horizonte pero ni son tan complejos ni motivan tanto. Igual también es que uno se hace mayor. En fin.
Gracias x tu repsuesta
El Pentium no es internamente RISC. Su capacidad de ejecutar en paralelo se limita a determinados pares de instrucciones, en el caso de que las dos instrucciones no estén en conflicto.
Con monitor en color y tarjeta gráfica CGA se te ponía en los 2 Millones de Ptas.
Cuando salió en 1983 el IBM XT (5160) se puso prácticamente al mismo precio que el IBM PC aunque bajó rápido.
El IBM PC bajó bastánte de precio, llegando a costar sobre el millón de Ptas la versión con gráficos en color.
El XT ya venía de serie con un disco duro de 20Mb en su configuración más baja, procesador 8086, 128Kb de RAM, Bus ISA de 16 bits, monitor de fósforo verde o naranja y gráfica MDA.
En el año 85-86 te podías comprar de segunda mano un 5150 con gráficos en color por medio millón de Ptas. más o menos, y sobre las 200.000 - 300.000 el de fósforo verde, del XT no tengo referencias.
Los clónicos nuevos no bajaban de las 350.000 Ptas. con monitor monocromo y en color se podía ir la cosa a más de 500.000 Ptas.
Y ya si nos vamos a los IBM AT o los clónicos que montaban un 80286, estos últimos no bajaban de las 750.000 Ptas a mediados de los 80..., Y los AT no bajaban del millón y pico en su configuración más básica.
En muy poco tiempo también bajaron de precio estos últimos de precio ya que no tardó en salir al mercado el 80386 dejando en muy poco tiempo totalmente obsoletos los ordenador que montaban procesadores anteriores a este.
Por ejemplo, como saber si la condición de un salto condicional va a ser verdadera puede llevar su tiempo (especialmente si se fuerza a que dependa de algo que no esta en caché), los procesadores pueden seguir ejecutando especulativamente montones de instrucciones, y si la condición resulta ser diferente a lo que se esperaba, hay que revertir todo (¿seguro?) el estado cambiado por esas instrucciones.
Pero alguien con muy mala idea puede haber decidido usar la caché como un canal de comunicación oculto, y puede que pueda inferir el valor de cosas a las que no debería poder acceder según lo que tarde en acceder a un valor dummy, que estará o no en caché según ese código que en realidad no debería haberse ejecutado, y no debería haber cambiado ningún estado.
Para más información, buscar Spectre, Meltdown, y sus muchas variantes.
Vamos, que cada vez que autocad quería hacer una multiplicación, el emulador la transformaba en varias sumas y las mandaba al procesador. Todo sin que el Autocad se de cuenta, él piensa que está usando el copro.
Todo esto era para que se ocuparan los compiladores de optimizar el código. Cuando generabas el código podías elegir si sacarlo optimizado por tamaño, por velocidad, por plataforma (386, pentium,...)
No deberían aparecer bugs y si aparecieran, no es problema del código sino del compilador. Pero no recuerdo ningún problema al respecto. Si que recuerdo que un famoso compilador de intel generaba el código más rápido para chips Intel que para chips AMD...