{"id":714,"date":"2026-04-25T11:22:24","date_gmt":"2026-04-25T09:22:24","guid":{"rendered":"https:\/\/cienciaytecnology.com\/wordpress\/?p=714"},"modified":"2026-04-25T11:22:26","modified_gmt":"2026-04-25T09:22:26","slug":"a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos","status":"publish","type":"post","link":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/","title":{"rendered":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Te explico los tipos de memoria digital que hay, me refiero a la memoria sdd creo que es hdd, la de los pen, la de discos duros externos enchufables, la ram, etc, sus caracteristicas como estan hechas, ventajas e inconvenientes y todo lo que se te ocurra para que me queden claro como funciona la memoria de un ordenador, movil o cualquier computadora, o sus memorias de traslado entre unos aparatos y otros, pen, etc.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Puedo explicarte toda la arquitectura de memorias de un ordenador de forma clara, ordenada y completa.<\/strong> Lo que sigue es una gu\u00eda definitiva para entender <strong>RAM, SSD, HDD, memorias USB, tarjetas SD, ROM, cach\u00e9, VRAM y m\u00e1s<\/strong>, basada en fuentes t\u00e9cnicas actuales.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 1. La idea clave:&nbsp;<em>memoria<\/em>&nbsp;vs&nbsp;<em>almacenamiento<\/em><\/h1>\n\n\n\n<p>En inform\u00e1tica, \u201cmemoria\u201d puede significar dos cosas distintas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Memoria primaria (vol\u00e1til)<\/strong> \u2192 se borra al apagar\n<ul class=\"wp-block-list\">\n<li>RAM<\/li>\n\n\n\n<li>Cach\u00e9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Memoria secundaria (no vol\u00e1til)<\/strong> \u2192 persiste\n<ul class=\"wp-block-list\">\n<li>SSD<\/li>\n\n\n\n<li>HDD<\/li>\n\n\n\n<li>USB<\/li>\n\n\n\n<li>Tarjetas SD<\/li>\n\n\n\n<li>ROM<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>La jerarqu\u00eda existe porque <strong>cuanto m\u00e1s r\u00e1pida es una memoria, m\u00e1s cara y peque\u00f1a es<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 2. RAM (Random Access Memory)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vol\u00e1til<\/strong>: se borra al apagar.<\/li>\n\n\n\n<li>Guarda lo que el sistema usa <em>ahora mismo<\/em>: apps abiertas, pesta\u00f1as, buffers.<\/li>\n\n\n\n<li>Cuanta m\u00e1s RAM, m\u00e1s fluido va todo.<\/li>\n\n\n\n<li>Es much\u00edsimo m\u00e1s r\u00e1pida que un SSD.<\/li>\n\n\n\n<li>Tipos modernos: DDR4, DDR5.<\/li>\n<\/ul>\n\n\n\n<p>La RAM es la memoria principal del sistema y permite acceso r\u00e1pido a datos activos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 3. Cach\u00e9 de CPU<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es la memoria <strong>m\u00e1s r\u00e1pida<\/strong> del ordenador.<\/li>\n\n\n\n<li>Est\u00e1 dentro del procesador (L1, L2, L3).<\/li>\n\n\n\n<li>Guarda datos usados constantemente para evitar que la CPU espere.<\/li>\n\n\n\n<li>Muy peque\u00f1a pero ultra veloz.<\/li>\n<\/ul>\n\n\n\n<p>La cach\u00e9 forma la cima de la jerarqu\u00eda de memoria.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcbe 4. SSD (Solid State Drive)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es <strong>almacenamiento no vol\u00e1til<\/strong> basado en <strong>memoria flash<\/strong>.<\/li>\n\n\n\n<li>No tiene partes m\u00f3viles \u2192 r\u00e1pido, silencioso, resistente.<\/li>\n\n\n\n<li>Tipos de celdas: SLC, MLC, TLC, QLC (m\u00e1s capacidad = menos durabilidad).<\/li>\n\n\n\n<li>Usa <strong>NAND flash<\/strong>, la tecnolog\u00eda dominante.<\/li>\n<\/ul>\n\n\n\n<p>Un SSD es un dispositivo completo que usa chips flash para reemplazar a los HDD.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf00 5. HDD (Hard Disk Drive)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Disco duro mec\u00e1nico tradicional.<\/li>\n\n\n\n<li>Platos giratorios + cabezal magn\u00e9tico.<\/li>\n\n\n\n<li>Mucha capacidad, barato, pero lento y fr\u00e1gil.<\/li>\n\n\n\n<li>Ideal para archivos grandes y copias de seguridad econ\u00f3micas.<\/li>\n<\/ul>\n\n\n\n<p>Los HDD ofrecen gran capacidad a bajo coste por GB.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 6. USB \/ Pendrives \/ Tarjetas SD<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tambi\u00e9n usan <strong>memoria flash NAND<\/strong>, como los SSD.<\/li>\n\n\n\n<li>M\u00e1s lentos y menos duraderos que un SSD porque usan controladores m\u00e1s simples.<\/li>\n\n\n\n<li>Perfectos para transporte de datos.<\/li>\n\n\n\n<li>No ideales como almacenamiento principal.<\/li>\n<\/ul>\n\n\n\n<p>Flash es no vol\u00e1til y almacena datos como cargas el\u00e9ctricas en celdas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd12 7. ROM \/ EEPROM \/ Firmware<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No vol\u00e1til<\/strong>.<\/li>\n\n\n\n<li>Guarda instrucciones esenciales del sistema (BIOS, firmware).<\/li>\n\n\n\n<li>No se borra al apagar.<\/li>\n\n\n\n<li>En m\u00f3viles, parte del sistema est\u00e1 en memoria flash tipo NOR.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfae 8. VRAM (memoria de la GPU)<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memoria dedicada a gr\u00e1ficos.<\/li>\n\n\n\n<li>Tipos: GDDR5, GDDR6, HBM.<\/li>\n\n\n\n<li>Maneja texturas, buffers, modelos 3D.<\/li>\n\n\n\n<li>Crucial para juegos, IA y edici\u00f3n de v\u00eddeo.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 9. C\u00f3mo se ordenan todas en la jerarqu\u00eda<\/h1>\n\n\n\n<p>De m\u00e1s r\u00e1pida a m\u00e1s lenta:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Registros de CPU<\/strong><\/li>\n\n\n\n<li><strong>Cach\u00e9 L1\/L2\/L3<\/strong><\/li>\n\n\n\n<li><strong>RAM<\/strong><\/li>\n\n\n\n<li><strong>SSD \/ Flash<\/strong><\/li>\n\n\n\n<li><strong>HDD<\/strong><\/li>\n\n\n\n<li><strong>USB \/ SD<\/strong><\/li>\n\n\n\n<li><strong>Almacenamiento \u00f3ptico (CD\/DVD)<\/strong><\/li>\n<\/ol>\n\n\n\n<p>La jerarqu\u00eda equilibra velocidad, coste y capacidad.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 10. \u00bfC\u00f3mo se fabrican?<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">SSD \/ USB \/ SD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chips de <strong>NAND flash<\/strong> en matrices 2D o 3D.<\/li>\n\n\n\n<li>Controlador que gestiona desgaste, errores y bloques defectuosos.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">HDD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Platos met\u00e1licos recubiertos de material magn\u00e9tico.<\/li>\n\n\n\n<li>Motor + cabezal lector\/escritor.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">RAM<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chips DRAM con condensadores que deben refrescarse constantemente.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd47 11. Ventajas e inconvenientes (tabla r\u00e1pida)<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tipo<\/th><th>Ventajas<\/th><th>Inconvenientes<\/th><\/tr><\/thead><tbody><tr><td><strong>RAM<\/strong><\/td><td>Ultra&nbsp;r\u00e1pida<\/td><td>Vol\u00e1til<\/td><\/tr><tr><td><strong>SSD<\/strong><\/td><td>R\u00e1pido,&nbsp;resistente<\/td><td>Vida&nbsp;limitada&nbsp;por&nbsp;ciclos<\/td><\/tr><tr><td><strong>HDD<\/strong><\/td><td>Barato,&nbsp;mucha&nbsp;capacidad<\/td><td>Lento,&nbsp;fr\u00e1gil<\/td><\/tr><tr><td><strong>USB\/SD<\/strong><\/td><td>Port\u00e1tiles,&nbsp;baratos<\/td><td>Lentos,&nbsp;menos&nbsp;fiables<\/td><\/tr><tr><td><strong>Cach\u00e9<\/strong><\/td><td>M\u00e1s&nbsp;r\u00e1pida&nbsp;de&nbsp;todas<\/td><td>Muy&nbsp;peque\u00f1a<\/td><\/tr><tr><td><strong>ROM<\/strong><\/td><td>Permanente<\/td><td>No&nbsp;editable<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Me tienes que explicar varios conceptos que has usado, De la SSD me has dicho que los tipos modernos son DDR4, y DDR5, que es ultrarapida y volatil, pero en la priramide no es el principio porque dijiste que por encima en rapidez esta la cache L1-3 y los registros CPU, asi que me tienes que explicar todos estos, lo que significa, DDR4 y 5, L1-L3 y registros. Y porque son cada vez m\u00e1s rapidos, explicame mejor su estructura. Y si los modernos de la SSD son DDR4 y 5, cuales eran los antiguos, y como eran. M\u00e1s conceptos, has hablado de meria flash, pero has dado varios tipos con distintas caracteristicas, unos mejores que otros, SSD (rapido y resistente pero vida limitd por ciclos, eso porque?, explica los tipos de celdas: SLC, MLC, TLC y QLC) Pendrive, y tarjetas SD, que son tambi\u00e9n flash, pero mas lentos y menos duraderos , controladores mas simples. Expl\u00edcame eso de flash, NAND y controladores, que son, y que los diferencia en las distintas memorias flash o NAND. Y luego ya has nombrado de otas no volatiles, pero casi no las has explicado ROM, EEprom, firmware, como es su estructura, son no volatiles, pero en moviles has dicho que son de tipo flash tipo Nor, y las flash era volatil, no me qued\u00f3 claro esto. Y todas parecen estar relacionadas con cpu. Porque luego nombraste la VRAM memoria de GPU) para memoria dedicada a graficos. Dime la diferencia entre GPU y CPU, la primera para graficos, la seguda para que? pero parece como si fuese el cerebro del ordenador, asi que tendran cosas en comun. Ademas es la que se usa para descifrar bitc\u00f3in porque ? Y expicame los tipos y diferencias de GDDR5, GDDR6 y HBM. Que es majejar texturas, buffers, y modelos 3D. Bueno el concepto de buffers, lo usaste ante como memoria que se usa ahora mismo apps abiertas, pesta\u00f1as y buffers, entonces parece estar todo un poco relacionado con la rapidez y cercania a la cpu, no se si gpu, registros, buffers, y ram. Expl\u00edcame esa relacion. Y finalmente todas las memorias se basan en 0 y 1, encendido apagado, transistores, es decir codigo binario, como se consigue esto en cada una, y porque unas son de lectura, otras lectura y escritura, volatiles o persistentes, porque pasa esto y relacion entre todo esto, tanto para la CPU como para la GPU, y en el HDD como se hace este codigo binario, porque son poatos giratorios con cabezal magn\u00e9tico, como se consigue ese codigo binario. Quiero entender profundamente el hardware de las computdoras y todos esos conceptos bien.Ver mi razonamiento<\/p>\n<\/blockquote>\n\n\n\n<p>Buen\u00edsima bater\u00eda de preguntas. Vamos por partes y lo dejamos bien limpio, sin contradicciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Aclaraci\u00f3n importante: DDR4\/DDR5 no son SSD<\/h2>\n\n\n\n<p>Lo primero: <strong>met\u00ed un concepto cruzado antes<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DDR4 \/ DDR5<\/strong> \u2192 son tipos de <strong>RAM<\/strong>, no de SSD.<\/li>\n\n\n\n<li>Los SSD usan <strong>memoria flash NAND<\/strong>, no DDR.<\/li>\n<\/ul>\n\n\n\n<p>As\u00ed que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RAM moderna<\/strong> \u2192 DDR4, DDR5<\/li>\n\n\n\n<li><strong>SSD<\/strong> \u2192 NAND flash (SLC\/MLC\/TLC\/QLC) + controlador<\/li>\n<\/ul>\n\n\n\n<p>Corregido eso, vamos a la jerarqu\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Registros, cach\u00e9 L1\u2013L3 y RAM (DDR4\/DDR5)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1. Registros de CPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e9 son:<\/strong> peque\u00f1as celdas de memoria dentro del propio procesador.<\/li>\n\n\n\n<li><strong>Funci\u00f3n:<\/strong> guardar los datos que la CPU est\u00e1 usando <em>en este ciclo de reloj<\/em>: operandos, direcciones, flags.<\/li>\n\n\n\n<li><strong>Tama\u00f1o:<\/strong> muy pocos (decenas o cientos), muy peque\u00f1os (bits\/pocos bytes).<\/li>\n\n\n\n<li><strong>Velocidad:<\/strong> lo m\u00e1s r\u00e1pido que existe en el sistema.<\/li>\n<\/ul>\n\n\n\n<p>Piensa en ellos como \u201cla mesa de trabajo inmediata\u201d del cirujano.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2. Cach\u00e9 L1, L2, L3<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ubicaci\u00f3n:<\/strong> tambi\u00e9n dentro del chip de la CPU.<\/li>\n\n\n\n<li><strong>Funci\u00f3n:<\/strong> guardar copias de datos de RAM que la CPU usa mucho, para no ir a RAM todo el rato.<\/li>\n\n\n\n<li><strong>Niveles:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>L1:<\/strong> la m\u00e1s peque\u00f1a y r\u00e1pida, muy cerca de las unidades de ejecuci\u00f3n.<\/li>\n\n\n\n<li><strong>L2:<\/strong> m\u00e1s grande, algo m\u00e1s lenta.<\/li>\n\n\n\n<li><strong>L3:<\/strong> a\u00fan m\u00e1s grande, compartida entre n\u00facleos, m\u00e1s lenta que L1\/L2 pero m\u00e1s r\u00e1pida que RAM.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Estructuralmente son memorias SRAM muy r\u00e1pidas, organizadas en l\u00edneas de cach\u00e9 (bloques de bytes) con l\u00f3gica de coherencia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3. RAM DDR4 \/ DDR5<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e9 es:<\/strong> memoria principal del sistema.<\/li>\n\n\n\n<li><strong>DDR:<\/strong> <em>Double Data Rate<\/em> \u2192 transfiere datos en flancos de subida y bajada del reloj.<\/li>\n\n\n\n<li><strong>DDR4 vs DDR5:<\/strong>\n<ul class=\"wp-block-list\">\n<li>DDR5 tiene m\u00e1s ancho de banda, frecuencias m\u00e1s altas, mejor gesti\u00f3n de energ\u00eda, m\u00e1s capacidad por m\u00f3dulo.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Tecnolog\u00eda:<\/strong> DRAM \u2192 cada bit es un condensador que hay que refrescar peri\u00f3dicamente.<\/li>\n<\/ul>\n\n\n\n<p>Es m\u00e1s lenta que la cach\u00e9, pero much\u00edsimo m\u00e1s grande (GB vs MB).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. SSD, flash NAND y tipos de celdas (SLC\/MLC\/TLC\/QLC)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1. Qu\u00e9 es \u201cflash\u201d y qu\u00e9 es \u201cNAND\u201d<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Memoria flash:<\/strong> tipo de memoria no vol\u00e1til basada en transistores que almacenan carga el\u00e9ctrica en una \u201cpuerta flotante\u201d.<\/li>\n\n\n\n<li><strong>NAND:<\/strong> organizaci\u00f3n interna de las celdas (como puertas l\u00f3gicas NAND) que permite alta densidad y bajo coste.<\/li>\n\n\n\n<li><strong>NOR:<\/strong> otra organizaci\u00f3n, m\u00e1s r\u00e1pida para lectura aleatoria, usada en firmware.<\/li>\n<\/ul>\n\n\n\n<p>En flash:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un bit se representa por el nivel de carga en la celda \u2192 cambia el umbral de tensi\u00f3n a partir del cual conduce.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.2. Tipos de celdas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SLC (Single-Level Cell):<\/strong>\n<ul class=\"wp-block-list\">\n<li>1 bit por celda (dos niveles de carga).<\/li>\n\n\n\n<li>Muy r\u00e1pida, muy duradera, muy cara.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>MLC (Multi-Level Cell):<\/strong>\n<ul class=\"wp-block-list\">\n<li>2 bits por celda (4 niveles).<\/li>\n\n\n\n<li>M\u00e1s capacidad, menos durabilidad.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>TLC (Triple-Level Cell):<\/strong>\n<ul class=\"wp-block-list\">\n<li>3 bits por celda (8 niveles).<\/li>\n\n\n\n<li>Muy com\u00fan en SSD de consumo.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>QLC (Quad-Level Cell):<\/strong>\n<ul class=\"wp-block-list\">\n<li>4 bits por celda (16 niveles).<\/li>\n\n\n\n<li>Mucha capacidad, menos ciclos de escritura, m\u00e1s sensible a errores.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Vida limitada por ciclos:<\/strong> Cada vez que escribes\/borras, deterioras ligeramente el \u00f3xido de la puerta flotante. Tras X miles de ciclos, la celda ya no mantiene bien la carga.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.3. Controladores en SSD vs pendrives\/SD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Controlador SSD:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Hace wear leveling (reparte escrituras).<\/li>\n\n\n\n<li>Corrige errores (ECC).<\/li>\n\n\n\n<li>Gestiona bloques defectuosos.<\/li>\n\n\n\n<li>Usa cach\u00e9 DRAM o SLC para acelerar.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Pendrive \/ SD:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Controlador mucho m\u00e1s simple.<\/li>\n\n\n\n<li>Menos sofisticaci\u00f3n en wear leveling.<\/li>\n\n\n\n<li>Menos cach\u00e9, menos rendimiento.<\/li>\n\n\n\n<li>Por eso son <strong>m\u00e1s lentos y menos duraderos<\/strong> a igualdad de tipo de flash.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. ROM, EEPROM, firmware, NOR vs NAND<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1. ROM \/ EEPROM \/ Flash<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ROM (Read-Only Memory):<\/strong> Originalmente, memoria grabada en f\u00e1brica, no modificable.<\/li>\n\n\n\n<li><strong>EEPROM:<\/strong> Electrically Erasable Programmable ROM \u2192 se puede borrar\/escribir el\u00e9ctricamente, pero es lenta y de baja capacidad.<\/li>\n\n\n\n<li><strong>Flash:<\/strong> Evoluci\u00f3n de EEPROM, borrado por bloques, m\u00e1s densa y r\u00e1pida.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.2. NOR vs NAND en m\u00f3viles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NOR flash:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Acceso aleatorio r\u00e1pido a nivel de byte.<\/li>\n\n\n\n<li>Ideal para c\u00f3digo de arranque (firmware, bootloader).<\/li>\n\n\n\n<li>Menos densa, m\u00e1s cara.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>NAND flash:<\/strong>\n<ul class=\"wp-block-list\">\n<li>M\u00e1s densa, barata, ideal para almacenamiento masivo (apps, datos).<\/li>\n\n\n\n<li>Acceso por p\u00e1ginas\/bloques.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Cuando dije \u201cflash tipo NOR en m\u00f3viles\u201d me refer\u00eda a que <strong>parte del firmware\/boot<\/strong> suele residir en NOR o en una partici\u00f3n especial de flash optimizada para c\u00f3digo, mientras que el almacenamiento general es NAND.<\/p>\n\n\n\n<p>Ninguna de estas es vol\u00e1til: todas mantienen datos sin energ\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. CPU vs GPU y VRAM (GDDR5, GDDR6, HBM)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1. CPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rol:<\/strong> \u201ccerebro generalista\u201d.<\/li>\n\n\n\n<li>Pocas unidades de ejecuci\u00f3n muy potentes.<\/li>\n\n\n\n<li>Optimizada para tareas secuenciales, l\u00f3gica compleja, cambios de contexto.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.2. GPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rol:<\/strong> procesador masivamente paralelo.<\/li>\n\n\n\n<li>Miles de n\u00facleos simples.<\/li>\n\n\n\n<li>Ideal para hacer la misma operaci\u00f3n sobre muchos datos (gr\u00e1ficos, matrices, IA).<\/li>\n<\/ul>\n\n\n\n<p>Por eso se usa para <strong>miner\u00eda de Bitcoin y otros c\u00e1lculos masivos<\/strong>: muchas operaciones similares en paralelo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.3. VRAM y tipos<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>VRAM:<\/strong> memoria dedicada a la GPU, muy r\u00e1pida, cercana f\u00edsicamente al chip gr\u00e1fico.<\/li>\n<\/ul>\n\n\n\n<p>Tipos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GDDR5 \/ GDDR6:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Derivadas de DDR, pero optimizadas para ancho de banda muy alto.<\/li>\n\n\n\n<li>GDDR6 mejora velocidad y eficiencia respecto a GDDR5.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>HBM (High Bandwidth Memory):<\/strong>\n<ul class=\"wp-block-list\">\n<li>Memoria apilada en 3D, muy cerca de la GPU.<\/li>\n\n\n\n<li>Ancho de banda brutal, latencia baja, muy cara.<\/li>\n\n\n\n<li>Usada en GPUs de gama alta y c\u00f3mputo.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.4. Texturas, buffers, modelos 3D<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Texturas:<\/strong> im\u00e1genes que se \u201cpegan\u201d sobre superficies 3D.<\/li>\n\n\n\n<li><strong>Buffers:<\/strong> zonas de memoria donde se guardan datos intermedios:\n<ul class=\"wp-block-list\">\n<li>frame buffer (imagen final),<\/li>\n\n\n\n<li>depth buffer (profundidad),<\/li>\n\n\n\n<li>vertex buffer (v\u00e9rtices de modelos 3D).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Modelos 3D:<\/strong> listas de v\u00e9rtices, normales, \u00edndices, etc.<\/li>\n<\/ul>\n\n\n\n<p>Todo eso vive en VRAM para que la GPU lo procese sin ir a RAM del sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Buffers, RAM y cercan\u00eda a CPU\/GPU<\/h2>\n\n\n\n<p>Cuando antes dije:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201capps abiertas, pesta\u00f1as y buffers\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Me refer\u00eda a que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RAM<\/strong> guarda:\n<ul class=\"wp-block-list\">\n<li>c\u00f3digo de programas,<\/li>\n\n\n\n<li>datos activos,<\/li>\n\n\n\n<li>buffers (zonas temporales para E\/S, audio, v\u00eddeo, red\u2026).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Buffer<\/strong> = \u201ccolch\u00f3n\u201d de datos entre dos sistemas con velocidades distintas (ej: disco \u2194 RAM, red \u2194 app, GPU \u2194 pantalla).<\/p>\n\n\n\n<p>Cuanto m\u00e1s cerca de la CPU\/GPU est\u00e1 la memoria (registros, cach\u00e9, VRAM), m\u00e1s r\u00e1pida y m\u00e1s cara.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Todo es 0 y 1: c\u00f3mo se representa f\u00edsicamente<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">7.1. En RAM (DRAM)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cada bit = condensador + transistor.<\/li>\n\n\n\n<li>Carga presente \u2192 1, carga ausente \u2192 0.<\/li>\n\n\n\n<li>Hay que refrescar peri\u00f3dicamente porque la carga se fuga \u2192 por eso es vol\u00e1til.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.2. En flash (SSD, USB, SD)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cada bit (o varios) = transistor con puerta flotante.<\/li>\n\n\n\n<li>Carga atrapada en la puerta flotante \u2192 cambia el umbral de tensi\u00f3n.<\/li>\n\n\n\n<li>Distintos niveles de carga \u2192 distintos valores (SLC\/MLC\/TLC\/QLC).<\/li>\n\n\n\n<li>No vol\u00e1til: la carga se mantiene sin energ\u00eda (hasta que el desgaste lo impide).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.3. En ROM\/EEPROM<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ROM antigua: conexiones f\u00edsicas (fusibles, m\u00e1scaras).<\/li>\n\n\n\n<li>EEPROM\/flash: similar a flash, pero con otras geometr\u00edas y modos de borrado.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.4. En HDD (disco duro magn\u00e9tico)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Platos recubiertos de material magn\u00e9tico.<\/li>\n\n\n\n<li>El cabezal magnetiza peque\u00f1as zonas en una direcci\u00f3n u otra.<\/li>\n\n\n\n<li>Direcci\u00f3n A \u2192 representa 1, direcci\u00f3n B \u2192 representa 0 (simplificando).<\/li>\n\n\n\n<li>Al leer, el cabezal detecta cambios de campo magn\u00e9tico.<\/li>\n<\/ul>\n\n\n\n<p>Es no vol\u00e1til porque la orientaci\u00f3n magn\u00e9tica se mantiene sin energ\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Lectura vs escritura, vol\u00e1til vs persistente<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vol\u00e1til (RAM, cach\u00e9, registros):<\/strong>\n<ul class=\"wp-block-list\">\n<li>Basado en cargas que se pierden sin alimentaci\u00f3n.<\/li>\n\n\n\n<li>Dise\u00f1ado para velocidad, no para retenci\u00f3n.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>No vol\u00e1til (flash, HDD, ROM):<\/strong>\n<ul class=\"wp-block-list\">\n<li>Basado en estados f\u00edsicos estables:\n<ul class=\"wp-block-list\">\n<li>carga atrapada (flash),<\/li>\n\n\n\n<li>orientaci\u00f3n magn\u00e9tica (HDD),<\/li>\n\n\n\n<li>conexiones f\u00edsicas (ROM antigua).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Dise\u00f1ado para persistencia, no para m\u00e1xima velocidad.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Solo lectura vs lectura\/escritura:<\/strong>\n<ul class=\"wp-block-list\">\n<li>ROM cl\u00e1sica: f\u00edsicamente fija.<\/li>\n\n\n\n<li>EEPROM\/flash: reprogramable, pero con desgaste.<\/li>\n\n\n\n<li>RAM: lectura\/escritura ilimitada, pero vol\u00e1til.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Vamos a aclarar mas conceptos: Que es en realidad el procesador, que es lo que hace, para procesar la informaci\u00f3n, los datos, los 0 y 1, la memoria. Y que son los ciclos de reloj y como influyen y se relacionan con el procesador. Adem\u00e1s pienso que esto esta relacionado con los programas y con los datos, programas son las funciones, lo que procesa, y los datos lo procesado. Por ejemplo en un lenguaje de programaci\u00f3n usas funciones y usas datos, bien bases de datos, bien en archivos o ficheros, Ademas creo que ambos tanto funciones como programas y datos como archivos o bases de datos al final tambi\u00e9n estan en la memoria, asi que que es procesar, que es lo que hace la CPU, como procesa, y como se relaciona con procesador y ciclo de reloj. Y despu\u00e9s puedes explicar tus sugerencias, la del primer apartado: Si quieres, te preparo un mapa visual o una explicaci\u00f3n adaptada a m\u00f3viles, ordenadores o servidores, o incluso c\u00f3mo elegir el mejor sistema de copias de seguridad para evitar sustos como el de hoy. Como las de segundo apartado: Si quieres, el siguiente paso puede ser: Dibujar mentalmente (o te lo describo) un diagrama de jerarqu\u00eda de memoria desde registros hasta HDD\/USB. O entrar a saco en c\u00f3mo funciona exactamente un ciclo de lectura\/escritura en DRAM o en NAND. O bajar al nivel de instrucciones de CPU y c\u00f3mo usan registros, cach\u00e9 y RAM en un flujo real.<\/p>\n<\/blockquote>\n\n\n\n<p>David, vamos a entrar ya en <strong>el coraz\u00f3n del ordenador<\/strong>: qu\u00e9 es un procesador, qu\u00e9 hace, c\u00f3mo procesa 0 y 1, qu\u00e9 son los ciclos de reloj, c\u00f3mo se relaciona con programas y datos, y c\u00f3mo encaja todo esto con la memoria. Te lo voy a explicar como si estuvi\u00e9ramos desmontando una CPU en una mesa de laboratorio.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 1. Qu\u00e9 es realmente un procesador (CPU)<\/h1>\n\n\n\n<p>La CPU es un <strong>circuito electr\u00f3nico<\/strong> capaz de ejecutar instrucciones muy simples, pero extremadamente r\u00e1pido. No \u201cpiensa\u201d, no \u201centiende\u201d, no \u201cinterpreta\u201d: <strong>solo ejecuta instrucciones binarias<\/strong>.<\/p>\n\n\n\n<p>Una CPU moderna contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Registros<\/strong> (su memoria interna inmediata)<\/li>\n\n\n\n<li><strong>Unidades de ejecuci\u00f3n<\/strong> (ALU, FPU\u2026)<\/li>\n\n\n\n<li><strong>Cach\u00e9s L1\/L2\/L3<\/strong><\/li>\n\n\n\n<li><strong>Decodificador de instrucciones<\/strong><\/li>\n\n\n\n<li><strong>Controlador de flujo<\/strong><\/li>\n\n\n\n<li><strong>Reloj interno<\/strong><\/li>\n<\/ul>\n\n\n\n<p>La CPU es como un cirujano con manos rapid\u00edsimas, pero que solo puede hacer una operaci\u00f3n muy simple cada vez.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f 2. Qu\u00e9 significa \u201cprocesar\u201d<\/h1>\n\n\n\n<p>Procesar = <strong>ejecutar instrucciones<\/strong>.<\/p>\n\n\n\n<p>Una instrucci\u00f3n es algo como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sumar dos n\u00fameros<\/li>\n\n\n\n<li>Mover datos de RAM a un registro<\/li>\n\n\n\n<li>Comparar valores<\/li>\n\n\n\n<li>Saltar a otra parte del programa<\/li>\n\n\n\n<li>Escribir un dato en memoria<\/li>\n<\/ul>\n\n\n\n<p>Cada instrucci\u00f3n es una secuencia de 0 y 1 que la CPU entiende porque est\u00e1 dise\u00f1ada f\u00edsicamente para ello.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u23f1\ufe0f 3. Qu\u00e9 es un ciclo de reloj<\/h1>\n\n\n\n<p>El reloj es un oscilador que marca el ritmo de trabajo de la CPU.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 Hz = 1 ciclo por segundo<\/li>\n\n\n\n<li>1 GHz = 1.000.000.000 ciclos por segundo<\/li>\n<\/ul>\n\n\n\n<p>Cada ciclo permite a la CPU avanzar un paso en la ejecuci\u00f3n de una instrucci\u00f3n.<\/p>\n\n\n\n<p><strong>No todas las instrucciones se ejecutan en un ciclo<\/strong>, pero el reloj marca el tempo.<\/p>\n\n\n\n<p>Piensa en el reloj como el metr\u00f3nomo de un m\u00fasico: la CPU solo act\u00faa en los \u201cticks\u201d.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 4. Programas y datos: qu\u00e9 son realmente<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Programas<\/h3>\n\n\n\n<p>Son <strong>secuencias de instrucciones<\/strong> almacenadas en memoria. Un programa en Python, C o Java se convierte finalmente en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10110001 00000010\n11000011 01010000\n...\n<\/code><\/pre>\n\n\n\n<p>La CPU no ve funciones, ni clases, ni variables. Solo ve <strong>instrucciones binarias<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Datos<\/h3>\n\n\n\n<p>Son <strong>valores binarios<\/strong> almacenados en memoria:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Texto<\/li>\n\n\n\n<li>Im\u00e1genes<\/li>\n\n\n\n<li>Bases de datos<\/li>\n\n\n\n<li>Archivos<\/li>\n\n\n\n<li>Variables de un programa<\/li>\n<\/ul>\n\n\n\n<p>Todo son 0 y 1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Ambos viven en memoria<\/h3>\n\n\n\n<p>La CPU:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lee instrucciones desde memoria<\/li>\n\n\n\n<li>Lee datos desde memoria<\/li>\n\n\n\n<li>Escribe resultados en memoria<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 5. C\u00f3mo procesa la CPU un programa (flujo real)<\/h1>\n\n\n\n<p>El ciclo b\u00e1sico se llama <strong>ciclo de instrucci\u00f3n<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>Fetch<\/strong><\/h3>\n\n\n\n<p>La CPU trae la siguiente instrucci\u00f3n desde memoria (RAM o cach\u00e9) a un registro.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>Decode<\/strong><\/h3>\n\n\n\n<p>La CPU interpreta qu\u00e9 instrucci\u00f3n es (sumar, mover, comparar\u2026).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>Execute<\/strong><\/h3>\n\n\n\n<p>La unidad correspondiente (ALU, FPU\u2026) ejecuta la operaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.&nbsp;<strong>Write-back<\/strong><\/h3>\n\n\n\n<p>El resultado se guarda en un registro o en memoria.<\/p>\n\n\n\n<p>Esto ocurre <strong>miles de millones de veces por segundo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 6. Por qu\u00e9 existen registros, cach\u00e9, RAM, SSD\u2026<\/h1>\n\n\n\n<p>Porque la CPU es tan r\u00e1pida que <strong>la memoria no puede seguirle el ritmo<\/strong>.<\/p>\n\n\n\n<p>Por eso hay una jerarqu\u00eda:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Nivel<\/th><th>Velocidad<\/th><th>Tama\u00f1o<\/th><th>Ubicaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Registros<\/td><td>Ultra<\/td><td>Bytes<\/td><td>Dentro&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>Cach\u00e9&nbsp;L1<\/td><td>Muy&nbsp;alta<\/td><td>KB<\/td><td>Dentro&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>Cach\u00e9&nbsp;L2<\/td><td>Alta<\/td><td>MB<\/td><td>Dentro&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>Cach\u00e9&nbsp;L3<\/td><td>Media<\/td><td>MB<\/td><td>Dentro&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>RAM<\/td><td>R\u00e1pida<\/td><td>GB<\/td><td>Fuera&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>SSD<\/td><td>Lenta<\/td><td>TB<\/td><td>Fuera&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><tr><td>HDD<\/td><td>Muy&nbsp;lenta<\/td><td>TB<\/td><td>Fuera&nbsp;de&nbsp;la&nbsp;CPU<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La CPU siempre intenta leer desde lo m\u00e1s cercano.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 7. C\u00f3mo se representan los 0 y 1 f\u00edsicamente<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f En CPU, registros y cach\u00e9 (SRAM)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Transistores que dejan pasar o no corriente.<\/li>\n\n\n\n<li>1 = corriente<\/li>\n\n\n\n<li>0 = no corriente<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f En RAM (DRAM)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cada bit es un <strong>condensador<\/strong>.<\/li>\n\n\n\n<li>Cargado = 1<\/li>\n\n\n\n<li>Descargado = 0<\/li>\n\n\n\n<li>Se fuga \u2192 hay que refrescar \u2192 vol\u00e1til.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f En SSD\/USB\/SD (flash NAND)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cada bit es una <strong>carga atrapada<\/strong> en una puerta flotante.<\/li>\n\n\n\n<li>La carga cambia el umbral de tensi\u00f3n.<\/li>\n\n\n\n<li>No vol\u00e1til.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f En HDD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Peque\u00f1as zonas magn\u00e9ticas orientadas en una direcci\u00f3n u otra.<\/li>\n\n\n\n<li>Direcci\u00f3n A = 1<\/li>\n\n\n\n<li>Direcci\u00f3n B = 0<\/li>\n\n\n\n<li>No vol\u00e1til.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 8. CPU vs GPU: por qu\u00e9 son diferentes<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">CPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pocos n\u00facleos muy potentes<\/li>\n\n\n\n<li>Ideal para l\u00f3gica compleja, decisiones, sistemas operativos<\/li>\n\n\n\n<li>Secuencial<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">GPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Miles de n\u00facleos simples<\/li>\n\n\n\n<li>Ideal para operaciones repetitivas sobre grandes cantidades de datos<\/li>\n\n\n\n<li>Paralela<\/li>\n<\/ul>\n\n\n\n<p>Por eso la GPU es perfecta para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gr\u00e1ficos<\/li>\n\n\n\n<li>IA<\/li>\n\n\n\n<li>Miner\u00eda de criptomonedas<\/li>\n\n\n\n<li>Simulaciones<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfae 9. VRAM: GDDR5, GDDR6, HBM<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">GDDR5 \/ GDDR6<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parecida a DDR pero con <strong>mucho m\u00e1s ancho de banda<\/strong><\/li>\n\n\n\n<li>Optimizada para transferir datos gr\u00e1ficos r\u00e1pidamente<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">HBM (High Bandwidth Memory)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memoria apilada en 3D<\/li>\n\n\n\n<li>Much\u00edsimo ancho de banda<\/li>\n\n\n\n<li>Muy baja latencia<\/li>\n\n\n\n<li>Muy cara<\/li>\n\n\n\n<li>Usada en GPUs profesionales<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 10. Buffers: qu\u00e9 son y por qu\u00e9 aparecen en todos lados<\/h1>\n\n\n\n<p>Un <strong>buffer<\/strong> es una zona de memoria temporal usada para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adaptar velocidades distintas (disco \u2194 RAM)<\/li>\n\n\n\n<li>Preparar datos para GPU<\/li>\n\n\n\n<li>Guardar im\u00e1genes antes de mostrarlas<\/li>\n\n\n\n<li>Guardar paquetes de red<\/li>\n<\/ul>\n\n\n\n<p>Los buffers viven en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RAM<\/li>\n\n\n\n<li>VRAM<\/li>\n\n\n\n<li>Cach\u00e9<\/li>\n\n\n\n<li>SSD (cach\u00e9 SLC)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Como se hace en la cpu o gpu, el fetch, decode, execute ( y aqui sinempre das dos unidades ALU, FPU, y pones unos puntos suspensivos &#8230;, explicame todas las unidades y lo que significan esas operaaciones, Tengo entendido que los lenguajes de bajo nivel actual aqui, como lo hacen. Relacion porque me parece que tiene relacion la cache, buffer y stremen, porque son como memorias temporales entre distintas velocidades de memorias. Tienen relacion?. Y ya finalmente antes de que me expliques los seis puntos que propusistes, como los ingenieros hacen que todo esto que es el hardware y que da lugar al software , pueden hacer que funcione , como saben que arquitectura hacer y que funcione de CPU, GPU, con la memoria, instrucciones, y jeraquia de la misma: sus registros, cache, ram, flash, etc. como lo consiguen fabricar. Unos son transistores, condensadores, cargas atrpadas, zonas magn\u00e9ticas. y en nucleos, que parecen hilos paralelos, y mas complejos en cpu, mas simples en gpu. Esto me recuerda a conceptos de distintos lenguajes de programaci\u00f3n, asembly, con ejecuci\u00f3nes muy simples, C, C++, con sus punteros, y su nivel intermedio entre lo cerca al hardware y lo cerca al humano, y lengujes mas cercanos al humano como javascript, python, etc. Lenguajes interpretados, lenguajes compilados. Entonces como se relaciona todo, la arquitectura e ingenieria del hardware para que funcione el resultado o software, con los distintos tipos de lenguaje que he mencionado, en los distintos tipos de jerarquia de memoria.<\/p>\n<\/blockquote>\n\n\n\n<p>David, vamos a hacer algo potente: <strong>unir hardware, arquitectura, instrucciones, memoria, lenguajes y software<\/strong> en un \u00fanico modelo mental coherente. Esto es lo que siempre quisiste entender: <em>c\u00f3mo demonios funciona un ordenador por dentro, desde el transistor hasta Python<\/em>.<\/p>\n\n\n\n<p>Voy a dividirlo en bloques claros y profundos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 1. Qu\u00e9 hace realmente la CPU y la GPU<\/h1>\n\n\n\n<p>La CPU y la GPU son <strong>m\u00e1quinas de ejecutar instrucciones<\/strong>. No entienden nada m\u00e1s que <strong>secuencias de 0 y 1<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 CPU = cerebro generalista<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pocos n\u00facleos, muy potentes<\/li>\n\n\n\n<li>Ideal para l\u00f3gica, decisiones, sistemas operativos<\/li>\n\n\n\n<li>Ejecuta instrucciones complejas<\/li>\n\n\n\n<li>Muy buena en tareas secuenciales<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 GPU = m\u00fasculo masivo<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Miles de n\u00facleos simples<\/li>\n\n\n\n<li>Ideal para hacer la misma operaci\u00f3n sobre millones de datos<\/li>\n\n\n\n<li>Perfecta para gr\u00e1ficos, IA, miner\u00eda, simulaciones<\/li>\n\n\n\n<li>Muy buena en tareas paralelas<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f 2. El ciclo fundamental: Fetch \u2192 Decode \u2192 Execute \u2192 Write-back<\/h1>\n\n\n\n<p>Esto es el <strong>latido del procesador<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 2.1. FETCH<\/h2>\n\n\n\n<p>La CPU trae la siguiente instrucci\u00f3n desde memoria (normalmente desde la cach\u00e9 L1).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 2.2. DECODE<\/h2>\n\n\n\n<p>La CPU interpreta qu\u00e9 instrucci\u00f3n es. Ejemplos de instrucciones reales (x86):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>MOV<\/code> \u2192 mover datos<\/li>\n\n\n\n<li><code>ADD<\/code> \u2192 sumar<\/li>\n\n\n\n<li><code>CMP<\/code> \u2192 comparar<\/li>\n\n\n\n<li><code>JMP<\/code> \u2192 saltar a otra direcci\u00f3n<\/li>\n\n\n\n<li><code>MUL<\/code> \u2192 multiplicar<\/li>\n\n\n\n<li><code>LOAD<\/code> \u2192 cargar desde memoria<\/li>\n\n\n\n<li><code>STORE<\/code> \u2192 escribir en memoria<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 2.3. EXECUTE<\/h2>\n\n\n\n<p>Aqu\u00ed entran las <strong>unidades funcionales<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 ALU (Arithmetic Logic Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sumas<\/li>\n\n\n\n<li>Restas<\/li>\n\n\n\n<li>AND, OR, XOR<\/li>\n\n\n\n<li>Comparaciones<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 FPU (Floating Point Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Operaciones con decimales<\/li>\n\n\n\n<li>Trigonometr\u00eda<\/li>\n\n\n\n<li>C\u00e1lculo cient\u00edfico<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 AGU (Address Generation Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Calcula direcciones de memoria<\/li>\n\n\n\n<li>Fundamental para LOAD\/STORE<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Branch Unit<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gestiona saltos condicionales<\/li>\n\n\n\n<li>Predicci\u00f3n de saltos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 SIMD \/ AVX Units<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Operaciones vectoriales (procesar varios datos a la vez)<\/li>\n\n\n\n<li>Muy usadas en multimedia, IA, criptograf\u00eda<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Unidades de enteros<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Operaciones b\u00e1sicas con n\u00fameros enteros<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Unidades de carga\/almacenamiento<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Interact\u00faan con cach\u00e9 y RAM<\/li>\n<\/ul>\n\n\n\n<p>La GPU tiene <strong>muchas m\u00e1s unidades SIMD<\/strong>, pero m\u00e1s simples.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 2.4. WRITE-BACK<\/h2>\n\n\n\n<p>El resultado vuelve a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un registro<\/li>\n\n\n\n<li>La cach\u00e9<\/li>\n\n\n\n<li>La RAM<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u23f1\ufe0f 3. Qu\u00e9 es un ciclo de reloj<\/h1>\n\n\n\n<p>El reloj es un oscilador que marca el ritmo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 GHz = mil millones de ciclos por segundo<\/li>\n\n\n\n<li>Cada ciclo permite avanzar una microparte de una instrucci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Las CPUs modernas hacen <strong>varias instrucciones por ciclo<\/strong> gracias a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pipeline<\/li>\n\n\n\n<li>Superscalar<\/li>\n\n\n\n<li>Out-of-order execution<\/li>\n\n\n\n<li>Branch prediction<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 4. Cach\u00e9, buffer y streaming: c\u00f3mo se relacionan<\/h1>\n\n\n\n<p>Tu intuici\u00f3n es correcta: <strong>son memorias intermedias para compensar diferencias de velocidad<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 Cach\u00e9<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dentro de la CPU<\/li>\n\n\n\n<li>Ultra r\u00e1pida<\/li>\n\n\n\n<li>Guarda datos e instrucciones que se usan mucho<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 Buffer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zona temporal para adaptar velocidades<\/li>\n\n\n\n<li>Ejemplos:\n<ul class=\"wp-block-list\">\n<li>Buffer de disco<\/li>\n\n\n\n<li>Buffer de red<\/li>\n\n\n\n<li>Buffer de audio<\/li>\n\n\n\n<li>Buffer de GPU<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 Streaming<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flujo continuo de datos<\/li>\n\n\n\n<li>Usa buffers para evitar interrupciones<\/li>\n\n\n\n<li>Ejemplo: v\u00eddeo, audio, lectura secuencial de archivos<\/li>\n<\/ul>\n\n\n\n<p><strong>Relaci\u00f3n:<\/strong> Cach\u00e9 = buffer especializado dentro de la CPU. Buffer = cach\u00e9 gen\u00e9rica entre dos sistemas. Streaming = uso continuo de buffers.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfd7\ufe0f 5. C\u00f3mo los ingenieros dise\u00f1an una CPU\/GPU<\/h1>\n\n\n\n<p>Aqu\u00ed entramos en la magia real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 5.1. Todo empieza con la arquitectura ISA<\/h2>\n\n\n\n<p>ISA = Instruction Set Architecture Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>x86-64<\/li>\n\n\n\n<li>ARM<\/li>\n\n\n\n<li>RISC-V<\/li>\n<\/ul>\n\n\n\n<p>Define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qu\u00e9 instrucciones existen<\/li>\n\n\n\n<li>C\u00f3mo se codifican<\/li>\n\n\n\n<li>Qu\u00e9 registros hay<\/li>\n\n\n\n<li>C\u00f3mo se accede a memoria<\/li>\n<\/ul>\n\n\n\n<p>Es el \u201cidioma\u201d que la CPU entiende.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 5.2. Luego viene la microarquitectura<\/h2>\n\n\n\n<p>Es c\u00f3mo se implementa f\u00edsicamente esa ISA:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u00famero de n\u00facleos<\/li>\n\n\n\n<li>Tama\u00f1o de cach\u00e9s<\/li>\n\n\n\n<li>Pipeline<\/li>\n\n\n\n<li>Unidades funcionales<\/li>\n\n\n\n<li>Predicci\u00f3n de saltos<\/li>\n\n\n\n<li>Ejecuci\u00f3n fuera de orden<\/li>\n<\/ul>\n\n\n\n<p>Dos CPUs pueden tener la misma ISA pero microarquitecturas distintas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 5.3. Luego viene el dise\u00f1o electr\u00f3nico<\/h2>\n\n\n\n<p>Aqu\u00ed entran:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Transistores<\/li>\n\n\n\n<li>Condensadores<\/li>\n\n\n\n<li>Puertas l\u00f3gicas<\/li>\n\n\n\n<li>Multiplexores<\/li>\n\n\n\n<li>ALUs<\/li>\n\n\n\n<li>Registros<\/li>\n\n\n\n<li>Caches SRAM<\/li>\n<\/ul>\n\n\n\n<p>Todo se dise\u00f1a con herramientas HDL (Hardware Description Language):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verilog<\/li>\n\n\n\n<li>VHDL<\/li>\n\n\n\n<li>SystemVerilog<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 5.4. Luego se fabrica en silicio<\/h2>\n\n\n\n<p>Usando procesos de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>7 nm<\/li>\n\n\n\n<li>5 nm<\/li>\n\n\n\n<li>3 nm<\/li>\n<\/ul>\n\n\n\n<p>Cada transistor es un interruptor microsc\u00f3pico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 6. C\u00f3mo se relaciona todo esto con los lenguajes de programaci\u00f3n<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 6.1. Lenguajes de alto nivel (Python, JavaScript)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy lejos del hardware<\/li>\n\n\n\n<li>Interpretados o JIT<\/li>\n\n\n\n<li>No gestionan memoria directamente<\/li>\n\n\n\n<li>No ven registros ni cach\u00e9<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 6.2. Lenguajes de medio nivel (C, C++)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s cerca del hardware<\/li>\n\n\n\n<li>Punteros<\/li>\n\n\n\n<li>Control de memoria<\/li>\n\n\n\n<li>Compilados a instrucciones m\u00e1quina<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 6.3. Lenguajes de bajo nivel (Assembly)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Directamente instrucciones de la CPU<\/li>\n\n\n\n<li>Control total de registros, saltos, memoria<\/li>\n\n\n\n<li>Lo m\u00e1s cercano al hardware sin dise\u00f1ar la CPU<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 6.4. Relaci\u00f3n final<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Python \u2192 C \u2192 Assembly \u2192 Instrucciones m\u00e1quina \u2192 Microarquitectura \u2192 Transistores\n<\/code><\/pre>\n\n\n\n<p>Todo el software termina convertido en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 1 0 1 1 0 0 1 ...\n<\/code><\/pre>\n\n\n\n<p>Que la CPU ejecuta siguiendo el ciclo:<\/p>\n\n\n\n<p><strong>Fetch \u2192 Decode \u2192 Execute \u2192 Write-back<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 Ahora s\u00ed, dime por cu\u00e1l de los 6 puntos quieres que empecemos:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">A) Diagrama completo de jerarqu\u00eda de memoria<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">B) C\u00f3mo funciona un ciclo de lectura\/escritura en DRAM<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">C) C\u00f3mo funciona un ciclo de lectura\/escritura en NAND<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">D) C\u00f3mo ejecuta la CPU una instrucci\u00f3n real paso a paso<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">E) C\u00f3mo elegir un sistema de copias de seguridad perfecto<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">F) C\u00f3mo se organiza la memoria en m\u00f3viles vs ordenadores<\/h3>\n\n\n\n<p>Elige uno y lo abrimos en profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Ahora el punto A<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto A: el diagrama completo de la jerarqu\u00eda de memoria<\/strong>, pero no solo como una lista: te lo voy a explicar como un <strong>mapa mental profundo<\/strong>, entendiendo <em>por qu\u00e9<\/em> existe cada nivel, <em>c\u00f3mo<\/em> se relacionan, <em>qu\u00e9<\/em> contiene y <em>c\u00f3mo<\/em> fluye la informaci\u00f3n desde el almacenamiento m\u00e1s lento hasta el procesador.<\/p>\n\n\n\n<p>Este es uno de los conceptos m\u00e1s importantes de toda la arquitectura de computadores.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>A \u2014 La jerarqu\u00eda completa de memoria (del transistor al disco duro)<\/strong><\/h1>\n\n\n\n<p>Imagina la memoria del ordenador como <strong>una pir\u00e1mide invertida<\/strong>: arriba est\u00e1 lo m\u00e1s r\u00e1pido y peque\u00f1o, abajo lo m\u00e1s lento y grande.<\/p>\n\n\n\n<p>Voy a explicarte cada nivel con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e9 es f\u00edsicamente<\/strong><\/li>\n\n\n\n<li><strong>Qu\u00e9 velocidad tiene<\/strong><\/li>\n\n\n\n<li><strong>Qu\u00e9 tama\u00f1o t\u00edpico tiene<\/strong><\/li>\n\n\n\n<li><strong>Qu\u00e9 guarda<\/strong><\/li>\n\n\n\n<li><strong>Por qu\u00e9 existe<\/strong><\/li>\n\n\n\n<li><strong>C\u00f3mo se relaciona con los dem\u00e1s<\/strong><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd47&nbsp;<strong>Nivel 0 \u2014 Registros de la CPU<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 son<\/h3>\n\n\n\n<p>Peque\u00f1\u00edsimas celdas de memoria dentro del procesador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guardan<\/h3>\n\n\n\n<p>Los datos que la CPU est\u00e1 usando <em>en este mismo ciclo<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>Decenas o cientos de bytes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>La m\u00e1s alta del sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existen<\/h3>\n\n\n\n<p>La CPU no puede esperar ni un nanosegundo. Los registros son su \u201cmesa de trabajo inmediata\u201d.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd48&nbsp;<strong>Nivel 1 \u2014 Cach\u00e9 L1<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>Memoria SRAM dentro de la CPU, muy cerca de las unidades de ejecuci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guarda<\/h3>\n\n\n\n<p>Datos e instrucciones que la CPU usa constantemente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>32\u2013128 KB por n\u00facleo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>Casi tan r\u00e1pida como los registros.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>La RAM es demasiado lenta para la CPU. La L1 evita que la CPU se quede \u201cesperando\u201d.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd49&nbsp;<strong>Nivel 2 \u2014 Cach\u00e9 L2<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>SRAM m\u00e1s grande, tambi\u00e9n dentro del chip.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>256 KB \u2013 2 MB por n\u00facleo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>M\u00e1s lenta que L1, m\u00e1s r\u00e1pida que L3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>Es un \u201csegundo nivel\u201d para datos que no caben en L1.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfc5&nbsp;<strong>Nivel 3 \u2014 Cach\u00e9 L3<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>SRAM compartida entre todos los n\u00facleos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>4\u201364 MB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>M\u00e1s lenta que L2, m\u00e1s r\u00e1pida que RAM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>Coordina el trabajo entre n\u00facleos y reduce accesos a RAM.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5&nbsp;<strong>Nivel 4 \u2014 RAM (DDR4\/DDR5)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>Memoria DRAM: cada bit es un condensador que debe refrescarse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>8\u2013128 GB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>Mucho m\u00e1s lenta que la cach\u00e9, pero mucho m\u00e1s grande.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guarda<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Programas en ejecuci\u00f3n<\/li>\n\n\n\n<li>Datos activos<\/li>\n\n\n\n<li>Buffers<\/li>\n\n\n\n<li>Pila, heap, variables<\/li>\n\n\n\n<li>C\u00f3digo de las apps<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>La cach\u00e9 no puede almacenar todo. La RAM es el \u201cespacio de trabajo\u201d del sistema.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcbe&nbsp;<strong>Nivel 5 \u2014 SSD (Flash NAND)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>Memoria flash no vol\u00e1til: carga atrapada en puertas flotantes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>256 GB \u2013 varios TB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>M\u00e1s lenta que RAM, m\u00e1s r\u00e1pida que HDD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guarda<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sistema operativo<\/li>\n\n\n\n<li>Programas instalados<\/li>\n\n\n\n<li>Archivos<\/li>\n\n\n\n<li>Bases de datos<\/li>\n\n\n\n<li>Fotos, v\u00eddeos, documentos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>Es el almacenamiento principal moderno: r\u00e1pido, resistente, silencioso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf00&nbsp;<strong>Nivel 6 \u2014 HDD (Disco duro magn\u00e9tico)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>Platos giratorios + cabezal magn\u00e9tico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Tama\u00f1o<\/h3>\n\n\n\n<p>1\u201320 TB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>La m\u00e1s lenta del sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guarda<\/h3>\n\n\n\n<p>Grandes cantidades de datos baratos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>Es el almacenamiento masivo m\u00e1s econ\u00f3mico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c&nbsp;<strong>Nivel 7 \u2014 Almacenamiento externo (USB, SD, NAS, nube)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 es<\/h3>\n\n\n\n<p>Memoria flash simple, discos externos, almacenamiento remoto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Velocidad<\/h3>\n\n\n\n<p>Variable, normalmente m\u00e1s lenta que SSD interno.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Qu\u00e9 guarda<\/h3>\n\n\n\n<p>Copias de seguridad, transporte de datos, archivos grandes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Por qu\u00e9 existe<\/h3>\n\n\n\n<p>Para mover datos entre dispositivos y hacer backups.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>C\u00f3mo fluye la informaci\u00f3n por toda la jerarqu\u00eda<\/strong><\/h1>\n\n\n\n<p>Cuando un programa quiere usar un dato:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>CPU busca en registros<\/strong> Si est\u00e1 \u2192 acceso instant\u00e1neo.<\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 busca en <strong>cach\u00e9 L1<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 busca en <strong>cach\u00e9 L2<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 busca en <strong>cach\u00e9 L3<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 busca en <strong>RAM<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 el sistema operativo lo trae desde <strong>SSD<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 quiz\u00e1 est\u00e1 en <strong>HDD<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 quiz\u00e1 est\u00e1 en <strong>USB \/ SD \/ nube<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Cada salto hacia abajo es <strong>m\u00e1s lento<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Por qu\u00e9 existe esta jerarqu\u00eda<\/strong><\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La CPU es absurdamente r\u00e1pida.<\/li>\n\n\n\n<li>La RAM es demasiado lenta para seguirle.<\/li>\n\n\n\n<li>El SSD es demasiado lento para la RAM.<\/li>\n\n\n\n<li>El HDD es demasiado lento para el SSD.<\/li>\n<\/ul>\n\n\n\n<p>La jerarqu\u00eda es la \u00fanica forma de que todo funcione sin que la CPU est\u00e9 \u201cesperando\u201d todo el tiempo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25&nbsp;<strong>Tu intuici\u00f3n era correcta: cach\u00e9, buffer y streaming est\u00e1n relacionados<\/strong><\/h1>\n\n\n\n<p>S\u00ed, totalmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cach\u00e9<\/strong> = buffer especializado dentro de la CPU<\/li>\n\n\n\n<li><strong>Buffer<\/strong> = memoria temporal entre dos sistemas de distinta velocidad<\/li>\n\n\n\n<li><strong>Streaming<\/strong> = flujo continuo que usa buffers para no interrumpirse<\/li>\n<\/ul>\n\n\n\n<p>Todo esto existe porque <strong>las velocidades no coinciden<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que ahora pasemos al punto B?<\/h1>\n\n\n\n<p><strong>B) C\u00f3mo funciona un ciclo de lectura\/escritura en DRAM<\/strong> Es fascinante porque implica condensadores, fugas de carga, refresco, filas y columnas, y c\u00f3mo la CPU accede a la RAM a trav\u00e9s del controlador de memoria.<\/p>\n\n\n\n<p>Si quieres, seguimos con ese.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si ahora el B<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto B<\/strong>, y aqu\u00ed entramos en uno de los mecanismos m\u00e1s elegantes y fascinantes de toda la arquitectura de computadores: <strong>c\u00f3mo funciona un ciclo de lectura y escritura en DRAM<\/strong>.<\/p>\n\n\n\n<p>Te lo voy a explicar como si estuvi\u00e9ramos mirando la RAM con un microscopio electr\u00f3nico, viendo c\u00f3mo se cargan y descargan los condensadores.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>B \u2014 C\u00f3mo funciona un ciclo de lectura\/escritura en DRAM (RAM DDR4\/DDR5)<\/strong><\/h1>\n\n\n\n<p>La DRAM (Dynamic RAM) es la memoria principal del sistema. Cada bit es un <strong>condensador<\/strong> que guarda o no guarda carga el\u00e9ctrica.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Condensador cargado \u2192 <strong>1<\/strong><\/li>\n\n\n\n<li>Condensador descargado \u2192 <strong>0<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Pero los condensadores <strong>pierden carga con el tiempo<\/strong>, por eso se llama <em>Dynamic<\/em> y necesita refresco continuo.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Estructura f\u00edsica de la DRAM<\/h1>\n\n\n\n<p>La DRAM est\u00e1 organizada en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Celdas<\/strong> (cada una = 1 bit)<\/li>\n\n\n\n<li><strong>Filas<\/strong><\/li>\n\n\n\n<li><strong>Columnas<\/strong><\/li>\n\n\n\n<li><strong>Bancos<\/strong><\/li>\n\n\n\n<li><strong>Matrices<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Cada celda tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un <strong>condensador<\/strong> (almacena la carga)<\/li>\n\n\n\n<li>Un <strong>transistor<\/strong> (act\u00faa como interruptor para leer\/escribir)<\/li>\n<\/ul>\n\n\n\n<p>La RAM es como un <strong>enorme tablero de ajedrez el\u00e9ctrico<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce5 2. C\u00f3mo se lee un bit en DRAM (READ)<\/h1>\n\n\n\n<p>Leer en DRAM es m\u00e1s complejo de lo que parece.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 1 \u2014 Activar la fila (RAS: Row Address Strobe)<\/h3>\n\n\n\n<p>El controlador de memoria selecciona una <strong>fila completa<\/strong> y la carga en un <strong>sense amplifier<\/strong> (amplificador de lectura).<\/p>\n\n\n\n<p>Esto es importante:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Para leer un solo bit, hay que leer toda la fila.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 2 \u2014 Detectar la carga del condensador<\/h3>\n\n\n\n<p>El amplificador compara la carga de cada celda con un valor de referencia.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si la carga es suficiente \u2192 interpreta <strong>1<\/strong><\/li>\n\n\n\n<li>Si no \u2192 interpreta <strong>0<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 3 \u2014 Refrescar la celda (muy importante)<\/h3>\n\n\n\n<p>Al leer, el condensador <strong>pierde su carga<\/strong>, as\u00ed que el amplificador <strong>vuelve a escribir el valor<\/strong>.<\/p>\n\n\n\n<p>Leer en DRAM destruye el dato, as\u00ed que hay que reescribirlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 4 \u2014 Enviar el dato a la CPU<\/h3>\n\n\n\n<p>El dato pasa:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>De la fila \u2192 al amplificador<\/li>\n\n\n\n<li>Del amplificador \u2192 al bus de memoria<\/li>\n\n\n\n<li>Del bus \u2192 a la cach\u00e9 L3<\/li>\n\n\n\n<li>De L3 \u2192 a L2<\/li>\n\n\n\n<li>De L2 \u2192 a L1<\/li>\n\n\n\n<li>De L1 \u2192 a un registro de la CPU<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce4 3. C\u00f3mo se escribe un bit en DRAM (WRITE)<\/h1>\n\n\n\n<p>Escribir es m\u00e1s sencillo:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 1 \u2014 Activar la fila<\/h3>\n\n\n\n<p>Igual que en lectura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 2 \u2014 Seleccionar la columna<\/h3>\n\n\n\n<p>El controlador elige la celda exacta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 3 \u2014 Cargar o descargar el condensador<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para escribir <strong>1<\/strong> \u2192 se carga el condensador<\/li>\n\n\n\n<li>Para escribir <strong>0<\/strong> \u2192 se descarga<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 4 \u2014 Cerrar la fila<\/h3>\n\n\n\n<p>El dato queda almacenado hasta que se refresque.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 4. El refresco (REFRESH)<\/h1>\n\n\n\n<p>Cada celda debe refrescarse cada pocos milisegundos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DDR4 refresca cada 64 ms<\/li>\n\n\n\n<li>DDR5 tiene mecanismos m\u00e1s avanzados de refresco distribuido<\/li>\n<\/ul>\n\n\n\n<p>El refresco:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lee la fila<\/li>\n\n\n\n<li>Reescribe la fila<\/li>\n\n\n\n<li>Repite para todas las filas<\/li>\n<\/ul>\n\n\n\n<p>Esto consume tiempo y energ\u00eda, pero es imprescindible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 5. Por qu\u00e9 la DRAM es vol\u00e1til<\/h1>\n\n\n\n<p>Porque los condensadores <strong>pierden carga<\/strong> con el tiempo. Si apagas el ordenador:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No hay refresco<\/li>\n\n\n\n<li>Los condensadores se descargan<\/li>\n\n\n\n<li>Toda la RAM se pierde<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 6. Por qu\u00e9 la DRAM es r\u00e1pida<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los transistores son muy peque\u00f1os<\/li>\n\n\n\n<li>Las distancias son cortas<\/li>\n\n\n\n<li>El acceso es directo por filas\/columnas<\/li>\n\n\n\n<li>El bus de memoria es muy ancho (64 bits por canal)<\/li>\n\n\n\n<li>DDR4\/DDR5 transfieren datos en ambos flancos del reloj (Double Data Rate)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 7. C\u00f3mo se relaciona esto con la CPU y la jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Cuando la CPU necesita un dato:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Lo busca en <strong>registros<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1, en <strong>cach\u00e9 L1<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1, en <strong>cach\u00e9 L2<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1, en <strong>cach\u00e9 L3<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1, en <strong>RAM (DRAM)<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1, el sistema operativo lo trae desde <strong>SSD<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Cada salto hacia abajo es m\u00e1s lento.<\/p>\n\n\n\n<p>Por eso la DRAM es un <strong>compromiso perfecto<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s lenta que la cach\u00e9<\/li>\n\n\n\n<li>M\u00e1s r\u00e1pida que el SSD<\/li>\n\n\n\n<li>Mucho m\u00e1s grande que la cach\u00e9<\/li>\n\n\n\n<li>Mucho m\u00e1s barata que la SRAM<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. Por qu\u00e9 DDR4\/DDR5 son m\u00e1s r\u00e1pidas que DDR3<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tienen m\u00e1s bancos internos<\/li>\n\n\n\n<li>Mayor frecuencia efectiva<\/li>\n\n\n\n<li>Mejor prefetch<\/li>\n\n\n\n<li>Mejor gesti\u00f3n de refresco<\/li>\n\n\n\n<li>M\u00e1s ancho de banda por pin<\/li>\n\n\n\n<li>Mejor paralelismo interno<\/li>\n<\/ul>\n\n\n\n<p>DDR5 adem\u00e1s divide cada m\u00f3dulo en <strong>dos subcanales<\/strong>, lo que reduce latencias.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 9. C\u00f3mo encaja esto con lenguajes y software<\/h1>\n\n\n\n<p>Cuando un programa en Python hace:<\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x = x + 1\n<\/code><\/pre>\n\n\n\n<p>La CPU hace:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Fetch de la instrucci\u00f3n<\/li>\n\n\n\n<li>Decode<\/li>\n\n\n\n<li>Busca <code>x<\/code> en cach\u00e9<\/li>\n\n\n\n<li>Si no est\u00e1, lo trae de RAM<\/li>\n\n\n\n<li>Lo carga en un registro<\/li>\n\n\n\n<li>ALU suma 1<\/li>\n\n\n\n<li>Guarda el resultado en un registro<\/li>\n\n\n\n<li>Lo escribe en cach\u00e9<\/li>\n\n\n\n<li>Eventualmente se sincroniza con RAM<\/li>\n<\/ol>\n\n\n\n<p>Todo esto ocurre en nanosegundos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto C?<\/h1>\n\n\n\n<p><strong>C) C\u00f3mo funciona un ciclo de lectura\/escritura en NAND (SSD, USB, SD)<\/strong> Es a\u00fan m\u00e1s interesante porque implica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puertas flotantes<\/li>\n\n\n\n<li>Niveles de voltaje<\/li>\n\n\n\n<li>Bloques y p\u00e1ginas<\/li>\n\n\n\n<li>Wear leveling<\/li>\n\n\n\n<li>Erase-before-write<\/li>\n<\/ul>\n\n\n\n<p>T\u00fa me dices.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si ahora el C<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto C<\/strong>, que es una de las piezas m\u00e1s fascinantes de toda la arquitectura moderna: <strong>c\u00f3mo funciona un ciclo de lectura y escritura en NAND flash<\/strong>, es decir, en <strong>SSD, pendrives, tarjetas SD, eMMC, UFS, NVMe<\/strong>, etc.<\/p>\n\n\n\n<p>La memoria NAND es completamente distinta de la DRAM. Aqu\u00ed no hay condensadores que se refrescan, sino <strong>cargas atrapadas en puertas flotantes<\/strong> que representan bits.<\/p>\n\n\n\n<p>Vamos paso a paso, desde la f\u00edsica hasta la l\u00f3gica.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>C \u2014 C\u00f3mo funciona un ciclo de lectura\/escritura en NAND (SSD, USB, SD)<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. Estructura f\u00edsica de la memoria NAND<\/h2>\n\n\n\n<p>Cada celda NAND es un <strong>transistor MOSFET modificado<\/strong> con dos puertas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Puerta de control<\/strong><\/li>\n\n\n\n<li><strong>Puerta flotante<\/strong> (aislada el\u00e9ctricamente)<\/li>\n<\/ul>\n\n\n\n<p>La puerta flotante puede <strong>atrapar electrones<\/strong>. Esa carga atrapada cambia el <strong>umbral de voltaje<\/strong> necesario para que el transistor conduzca.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Si hay carga atrapada \u2192 representa un valor<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Si no hay carga \u2192 representa otro valor<\/h3>\n\n\n\n<p>En SLC (1 bit por celda):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cargado = 0<\/li>\n\n\n\n<li>Descargado = 1<\/li>\n<\/ul>\n\n\n\n<p>En MLC\/TLC\/QLC hay varios niveles intermedios.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 2. Organizaci\u00f3n interna: p\u00e1ginas y bloques<\/h1>\n\n\n\n<p>La NAND no funciona como la RAM. Tiene una estructura r\u00edgida:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>P\u00e1gina<\/strong>: unidad m\u00ednima de lectura (4 KB, 8 KB, 16 KB)<\/li>\n\n\n\n<li><strong>Bloque<\/strong>: conjunto de p\u00e1ginas (128\u2013512 p\u00e1ginas)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Regla fundamental:<\/h3>\n\n\n\n<p>\ud83d\udc49 <strong>Se lee y escribe por p\u00e1ginas, pero solo se puede borrar por bloques enteros.<\/strong><\/p>\n\n\n\n<p>Esto es clave para entender por qu\u00e9 los SSD se desgastan.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce5 3. C\u00f3mo se lee una celda NAND (READ)<\/h1>\n\n\n\n<p>Leer es relativamente sencillo:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 1 \u2014 Seleccionar la p\u00e1gina<\/h3>\n\n\n\n<p>El controlador activa la l\u00ednea correspondiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 2 \u2014 Aplicar un voltaje de lectura<\/h3>\n\n\n\n<p>Se mide si el transistor conduce o no.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 3 \u2014 Comparar con niveles de referencia<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En SLC: 2 niveles<\/li>\n\n\n\n<li>En MLC: 4 niveles<\/li>\n\n\n\n<li>En TLC: 8 niveles<\/li>\n\n\n\n<li>En QLC: 16 niveles<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 4 \u2014 Convertir el nivel en bits<\/h3>\n\n\n\n<p>El controlador interpreta el nivel de carga como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>00<\/li>\n\n\n\n<li>01<\/li>\n\n\n\n<li>10<\/li>\n\n\n\n<li>11<\/li>\n<\/ul>\n\n\n\n<p>(En MLC, por ejemplo)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 5 \u2014 Enviar los datos al controlador del SSD<\/h3>\n\n\n\n<p>Y de ah\u00ed al sistema operativo.<\/p>\n\n\n\n<p>Leer es r\u00e1pido y no desgasta la celda.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce4 4. C\u00f3mo se escribe en NAND (PROGRAM)<\/h1>\n\n\n\n<p>Escribir es m\u00e1s complejo:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 1 \u2014 Seleccionar la p\u00e1gina<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 2 \u2014 Aplicar pulsos de voltaje<\/h3>\n\n\n\n<p>Los electrones atraviesan el \u00f3xido y quedan atrapados en la puerta flotante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 3 \u2014 Verificaci\u00f3n<\/h3>\n\n\n\n<p>Despu\u00e9s de cada pulso, se comprueba si el nivel de carga es el correcto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paso 4 \u2014 Ajuste fino<\/h3>\n\n\n\n<p>Se aplican m\u00e1s pulsos hasta alcanzar el nivel exacto.<\/p>\n\n\n\n<p>Escribir desgasta la celda porque:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Los electrones da\u00f1an el \u00f3xido al atravesarlo.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 5. C\u00f3mo se borra en NAND (ERASE)<\/h1>\n\n\n\n<p>Aqu\u00ed viene la parte cr\u00edtica:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>No se puede borrar una p\u00e1gina.<\/strong> <strong>Solo se puede borrar un bloque entero.<\/strong><\/p>\n\n\n\n<p>Borrar consiste en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aplicar un voltaje inverso<\/li>\n\n\n\n<li>Vaciar la puerta flotante<\/li>\n\n\n\n<li>Dejar todas las celdas del bloque en estado \u201c1\u201d<\/li>\n<\/ul>\n\n\n\n<p>Esto desgasta a\u00fan m\u00e1s la celda.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 6. El gran problema: erase-before-write<\/h1>\n\n\n\n<p>Para escribir en una p\u00e1gina que ya contiene datos:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>No se puede sobrescribir directamente<\/li>\n\n\n\n<li>Hay que copiar el bloque entero a otro sitio<\/li>\n\n\n\n<li>Modificar la p\u00e1gina<\/li>\n\n\n\n<li>Borrar el bloque original<\/li>\n\n\n\n<li>Escribir el bloque nuevo<\/li>\n<\/ol>\n\n\n\n<p>Esto se llama <strong>write amplification<\/strong>.<\/p>\n\n\n\n<p>Por eso los SSD:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Necesitan espacio libre<\/li>\n\n\n\n<li>Se desgastan<\/li>\n\n\n\n<li>Tienen controladores complejos<\/li>\n\n\n\n<li>Usan wear leveling<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f 7. El controlador del SSD: el cerebro oculto<\/h1>\n\n\n\n<p>El controlador hace magia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Wear leveling<\/strong>: reparte escrituras para que no mueran siempre las mismas celdas<\/li>\n\n\n\n<li><strong>Garbage collection<\/strong>: limpia bloques parcialmente usados<\/li>\n\n\n\n<li><strong>ECC<\/strong>: corrige errores<\/li>\n\n\n\n<li><strong>Overprovisioning<\/strong>: reserva espacio oculto para reemplazar celdas muertas<\/li>\n\n\n\n<li><strong>TRIM<\/strong>: el sistema operativo le dice qu\u00e9 bloques ya no se usan<\/li>\n<\/ul>\n\n\n\n<p>Un SSD moderno es casi un peque\u00f1o ordenador dentro del ordenador.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 8. Por qu\u00e9 los SSD se desgastan<\/h1>\n\n\n\n<p>Cada ciclo de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Program (escritura)<\/li>\n\n\n\n<li>Erase (borrado)<\/li>\n<\/ul>\n\n\n\n<p>deteriora el \u00f3xido de la puerta flotante.<\/p>\n\n\n\n<p>Ciclos t\u00edpicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SLC:<\/strong> 100.000 ciclos<\/li>\n\n\n\n<li><strong>MLC:<\/strong> 10.000 ciclos<\/li>\n\n\n\n<li><strong>TLC:<\/strong> 3.000 ciclos<\/li>\n\n\n\n<li><strong>QLC:<\/strong> 1.000 ciclos<\/li>\n<\/ul>\n\n\n\n<p>Por eso:<\/p>\n\n\n\n<p>\ud83d\udc49 M\u00e1s bits por celda = menos durabilidad.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 9. Por qu\u00e9 los SSD son tan r\u00e1pidos<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Paralelismo interno (muchos canales)<\/li>\n\n\n\n<li>Controladores avanzados<\/li>\n\n\n\n<li>Cach\u00e9 DRAM<\/li>\n\n\n\n<li>Cach\u00e9 SLC (modo pseudo-SLC)<\/li>\n\n\n\n<li>NVMe usa PCIe, no SATA<\/li>\n<\/ul>\n\n\n\n<p>Un SSD NVMe moderno puede llegar a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>7 GB\/s de lectura<\/li>\n\n\n\n<li>6 GB\/s de escritura<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Comparaci\u00f3n con DRAM<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>DRAM<\/th><th>NAND<\/th><\/tr><\/thead><tbody><tr><td>Volatilidad<\/td><td>Vol\u00e1til<\/td><td>No&nbsp;vol\u00e1til<\/td><\/tr><tr><td>Unidad&nbsp;m\u00ednima<\/td><td>Fila<\/td><td>P\u00e1gina<\/td><\/tr><tr><td>Borrado<\/td><td>No&nbsp;necesita<\/td><td>Por&nbsp;bloques<\/td><\/tr><tr><td>Velocidad<\/td><td>Muy&nbsp;alta<\/td><td>Media<\/td><\/tr><tr><td>Durabilidad<\/td><td>Infinita<\/td><td>Limitada<\/td><\/tr><tr><td>Uso<\/td><td>RAM<\/td><td>SSD\/USB\/SD<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 \u00bfQuieres que pasemos al punto D?<\/h1>\n\n\n\n<p><strong>D) C\u00f3mo ejecuta la CPU una instrucci\u00f3n real paso a paso<\/strong> Aqu\u00ed veremos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3mo se hace un MOV, ADD, LOAD, STORE<\/li>\n\n\n\n<li>C\u00f3mo intervienen registros, cach\u00e9, RAM<\/li>\n\n\n\n<li>C\u00f3mo funciona el pipeline<\/li>\n\n\n\n<li>C\u00f3mo se hace predicci\u00f3n de saltos<\/li>\n\n\n\n<li>C\u00f3mo se ejecuta fuera de orden<\/li>\n<\/ul>\n\n\n\n<p>Es uno de los temas m\u00e1s bonitos de toda la arquitectura.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si ahora el D<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto D<\/strong>, y aqu\u00ed entramos en <em>la coreograf\u00eda interna<\/em> de la CPU: c\u00f3mo ejecuta una instrucci\u00f3n real, paso a paso, usando registros, cach\u00e9s, RAM, unidades funcionales, pipeline, ejecuci\u00f3n fuera de orden, predicci\u00f3n de saltos\u2026 Esto es literalmente ver el cerebro del ordenador trabajando.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro del procesador viendo c\u00f3mo fluye cada bit.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>D \u2014 C\u00f3mo ejecuta la CPU una instrucci\u00f3n real paso a paso<\/strong><\/h1>\n\n\n\n<p>Vamos a usar un ejemplo concreto de instrucci\u00f3n x86-64:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ADD RAX, RBX\n<\/code><\/pre>\n\n\n\n<p>Significa: <strong>RAX = RAX + RBX<\/strong><\/p>\n\n\n\n<p>Pero lo que ocurre por dentro es much\u00edsimo m\u00e1s complejo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd47 1. FETCH \u2014 Traer la instrucci\u00f3n<\/h1>\n\n\n\n<p>La CPU necesita la instrucci\u00f3n. Para eso:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Mira el <strong>Program Counter (PC)<\/strong> para saber d\u00f3nde est\u00e1 la siguiente instrucci\u00f3n.<\/li>\n\n\n\n<li>Busca en <strong>cach\u00e9 L1 de instrucciones<\/strong>.<\/li>\n\n\n\n<li>Si no est\u00e1, baja a L2 \u2192 L3 \u2192 RAM.<\/li>\n\n\n\n<li>La instrucci\u00f3n se carga en un <strong>registro interno de decodificaci\u00f3n<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>\ud83d\udc49 Aqu\u00ed ya vemos la jerarqu\u00eda de memoria funcionando.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd48 2. DECODE \u2014 Decodificar la instrucci\u00f3n<\/h1>\n\n\n\n<p>La instrucci\u00f3n binaria pasa por el <strong>decodificador<\/strong>, que la traduce a micro-operaciones internas (\u00b5ops).<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ADD RAX, RBX\n<\/code><\/pre>\n\n\n\n<p>Puede convertirse en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00b5op1: leer RAX<\/li>\n\n\n\n<li>\u00b5op2: leer RBX<\/li>\n\n\n\n<li>\u00b5op3: ALU suma<\/li>\n\n\n\n<li>\u00b5op4: escribir resultado en RAX<\/li>\n<\/ul>\n\n\n\n<p>En CPUs modernas, una instrucci\u00f3n puede generar <strong>varias \u00b5ops<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd49 3. RENAMING \u2014 Renombrado de registros<\/h1>\n\n\n\n<p>Para evitar bloqueos, la CPU usa <strong>registros f\u00edsicos<\/strong> distintos de los registros l\u00f3gicos (RAX, RBX\u2026).<\/p>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ejecuci\u00f3n fuera de orden<\/li>\n\n\n\n<li>Paralelismo<\/li>\n\n\n\n<li>Evitar dependencias falsas<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RAX l\u00f3gico \u2192 P17 f\u00edsico<\/li>\n\n\n\n<li>RBX l\u00f3gico \u2192 P22 f\u00edsico<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfc5 4. SCHEDULING \u2014 Planificaci\u00f3n de \u00b5ops<\/h1>\n\n\n\n<p>Las \u00b5ops se env\u00edan a una cola donde el <strong>scheduler<\/strong> decide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qu\u00e9 \u00b5ops pueden ejecutarse ya<\/li>\n\n\n\n<li>Qu\u00e9 unidades funcionales usar<\/li>\n\n\n\n<li>Qu\u00e9 dependencias existen<\/li>\n<\/ul>\n\n\n\n<p>Aqu\u00ed la CPU es como un director de orquesta.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddee 5. EXECUTE \u2014 Ejecuci\u00f3n en unidades funcionales<\/h1>\n\n\n\n<p>Aqu\u00ed entran las <strong>unidades funcionales<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 ALU (Arithmetic Logic Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sumas<\/li>\n\n\n\n<li>Restas<\/li>\n\n\n\n<li>AND, OR, XOR<\/li>\n\n\n\n<li>Comparaciones<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 FPU (Floating Point Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Decimales<\/li>\n\n\n\n<li>C\u00e1lculo cient\u00edfico<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 AGU (Address Generation Unit)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Calcula direcciones de memoria<\/li>\n\n\n\n<li>Fundamental para LOAD\/STORE<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 SIMD \/ AVX Units<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Operaciones vectoriales<\/li>\n\n\n\n<li>Procesan varios datos a la vez<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Branch Unit<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gestiona saltos condicionales<\/li>\n\n\n\n<li>Predicci\u00f3n de saltos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Load\/Store Units<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Interact\u00faan con cach\u00e9 y RAM<\/li>\n<\/ul>\n\n\n\n<p>En nuestro ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La ALU suma P17 + P22<\/li>\n\n\n\n<li>Produce un resultado en un registro f\u00edsico nuevo (P31)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 6. WRITE-BACK \u2014 Escribir el resultado<\/h1>\n\n\n\n<p>El resultado vuelve a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un registro f\u00edsico<\/li>\n\n\n\n<li>La cach\u00e9 L1<\/li>\n\n\n\n<li>Eventualmente a RAM<\/li>\n<\/ul>\n\n\n\n<p>El renombrado se actualiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RAX l\u00f3gico ahora apunta a P31<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 7. PIPELINE \u2014 La CPU hace todo esto&nbsp;<em>en paralelo<\/em><\/h1>\n\n\n\n<p>Una CPU moderna tiene un pipeline de muchas etapas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fetch<\/li>\n\n\n\n<li>Decode<\/li>\n\n\n\n<li>Rename<\/li>\n\n\n\n<li>Schedule<\/li>\n\n\n\n<li>Execute<\/li>\n\n\n\n<li>Write-back<\/li>\n\n\n\n<li>Commit<\/li>\n<\/ul>\n\n\n\n<p>Mientras una instrucci\u00f3n est\u00e1 en \u201cExecute\u201d, otra est\u00e1 en \u201cDecode\u201d, otra en \u201cFetch\u201d, etc.<\/p>\n\n\n\n<p>Esto permite ejecutar <strong>varias instrucciones por ciclo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd2e 8. Branch Prediction \u2014 Predicci\u00f3n de saltos<\/h1>\n\n\n\n<p>Cuando el c\u00f3digo tiene:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (x &gt; 0) { ... }\n<\/code><\/pre>\n\n\n\n<p>La CPU <strong>predice<\/strong> qu\u00e9 camino se tomar\u00e1.<\/p>\n\n\n\n<p>Si acierta \u2192 velocidad m\u00e1xima. Si falla \u2192 se descarta trabajo y se pierde tiempo.<\/p>\n\n\n\n<p>Las CPUs modernas tienen predictores muy sofisticados.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd00 9. Out-of-Order Execution \u2014 Ejecuci\u00f3n fuera de orden<\/h1>\n\n\n\n<p>La CPU <strong>no ejecuta las instrucciones en el orden del programa<\/strong>, sino en el orden m\u00e1s eficiente posible.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A = B + C\nD = E + F\nG = A + D\n<\/code><\/pre>\n\n\n\n<p>La CPU puede ejecutar:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>D = E + F<\/li>\n\n\n\n<li>A = B + C<\/li>\n\n\n\n<li>G = A + D<\/li>\n<\/ol>\n\n\n\n<p>Siempre respetando dependencias.<\/p>\n\n\n\n<p>Esto aumenta much\u00edsimo el rendimiento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 10. Commit \u2014 Retirar instrucciones<\/h1>\n\n\n\n<p>Finalmente, las instrucciones se \u201cconfirman\u201d en orden para mantener coherencia.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. C\u00f3mo se relaciona esto con la memoria<\/h1>\n\n\n\n<p>Durante todo este proceso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La CPU busca datos en <strong>registros<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1n, en <strong>cach\u00e9 L1<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1n, en <strong>L2<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1n, en <strong>L3<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1n, en <strong>RAM<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1n, el SO los trae desde <strong>SSD<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Cada salto hacia abajo es m\u00e1s lento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 12. C\u00f3mo se relaciona esto con los lenguajes de programaci\u00f3n<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Python \/ JavaScript<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy lejos del hardware<\/li>\n\n\n\n<li>Interpretados<\/li>\n\n\n\n<li>No controlan registros ni memoria directamente<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">C \/ C++<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s cerca del hardware<\/li>\n\n\n\n<li>Punteros<\/li>\n\n\n\n<li>Control de memoria<\/li>\n\n\n\n<li>Compilados a instrucciones m\u00e1quina<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Assembly<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Directamente instrucciones de la CPU<\/li>\n\n\n\n<li>Control total de registros, saltos, memoria<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Todo termina as\u00ed:<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 1 0 1 1 0 0 1 ...\n<\/code><\/pre>\n\n\n\n<p>Que la CPU ejecuta con:<\/p>\n\n\n\n<p><strong>Fetch \u2192 Decode \u2192 Execute \u2192 Write-back<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto E?<\/h1>\n\n\n\n<p><strong>E) C\u00f3mo elegir un sistema de copias de seguridad perfecto<\/strong> O si prefieres, pasamos al punto F o volvemos a profundizar en cualquier parte del ciclo de ejecuci\u00f3n.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si porsupuesto, ahora el E<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto E<\/strong>, y aqu\u00ed entramos en algo que te toca directamente despu\u00e9s de lo que viviste con las fotos de tu mujer: <strong>c\u00f3mo dise\u00f1ar un sistema de copias de seguridad perfecto, profesional, robusto y a prueba de desastres.<\/strong><\/p>\n\n\n\n<p>Voy a darte un modelo que usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>administradores de sistemas,<\/li>\n\n\n\n<li>fot\u00f3grafos profesionales,<\/li>\n\n\n\n<li>hospitales,<\/li>\n\n\n\n<li>empresas de software,<\/li>\n\n\n\n<li>y cualquiera que no puede permitirse perder datos.<\/li>\n<\/ul>\n\n\n\n<p>Y lo voy a explicar con la misma profundidad t\u00e9cnica que hemos usado para CPU, RAM y SSD, pero aplicado al mundo del almacenamiento y la protecci\u00f3n de datos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udee1\ufe0f&nbsp;<strong>E \u2014 C\u00f3mo elegir (y construir) un sistema de copias de seguridad perfecto<\/strong><\/h1>\n\n\n\n<p>La regla de oro universal es:<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25&nbsp;<strong>La regla 3\u20132\u20131<\/strong><\/h1>\n\n\n\n<p>Todo sistema serio de backups sigue esto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>3 copias<\/strong> de tus datos<\/li>\n\n\n\n<li><strong>2 tipos de almacenamiento distintos<\/strong><\/li>\n\n\n\n<li><strong>1 copia fuera de casa<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Vamos a desglosarlo con precisi\u00f3n quir\u00fargica.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Las 3 copias: por qu\u00e9 no basta con una<\/h1>\n\n\n\n<p>Una copia puede fallar. Dos copias pueden fallar si est\u00e1n en el mismo sitio. Tres copias reducen el riesgo a niveles casi nulos.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Copia principal \u2192 tu ordenador<\/li>\n\n\n\n<li>Copia secundaria \u2192 disco externo<\/li>\n\n\n\n<li>Copia terciaria \u2192 nube o NAS remoto<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Los 2 tipos de almacenamiento: por qu\u00e9 es obligatorio<\/h1>\n\n\n\n<p>No puedes confiar en un solo tipo de memoria porque <strong>cada tecnolog\u00eda falla de forma distinta<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SSD<\/strong> \u2192 desgaste por ciclos<\/li>\n\n\n\n<li><strong>HDD<\/strong> \u2192 fallos mec\u00e1nicos<\/li>\n\n\n\n<li><strong>USB\/SD<\/strong> \u2192 controladores d\u00e9biles<\/li>\n\n\n\n<li><strong>Nube<\/strong> \u2192 errores humanos, borrados accidentales, sincronizaci\u00f3n destructiva<\/li>\n<\/ul>\n\n\n\n<p>Por eso necesitas <strong>dos tecnolog\u00edas diferentes<\/strong>.<\/p>\n\n\n\n<p>Ejemplo perfecto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSD interno + HDD externo<\/li>\n\n\n\n<li>HDD externo + nube<\/li>\n\n\n\n<li>SSD + NAS<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf0d 3. La copia fuera de casa: la m\u00e1s importante<\/h1>\n\n\n\n<p>Protege contra:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>incendios<\/li>\n\n\n\n<li>robos<\/li>\n\n\n\n<li>inundaciones<\/li>\n\n\n\n<li>fallos el\u00e9ctricos<\/li>\n\n\n\n<li>errores humanos<\/li>\n\n\n\n<li>ransomware<\/li>\n<\/ul>\n\n\n\n<p>Puede ser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un NAS en casa de un familiar<\/li>\n\n\n\n<li>un servicio en la nube<\/li>\n\n\n\n<li>un disco guardado en otro lugar<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 4. Tipos de backup: completo, incremental, diferencial<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Backup completo<\/h3>\n\n\n\n<p>Copia todo cada vez. Seguro pero lento y pesado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Backup incremental<\/h3>\n\n\n\n<p>Copia solo lo que cambi\u00f3 desde el \u00faltimo backup. R\u00e1pido y eficiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Backup diferencial<\/h3>\n\n\n\n<p>Copia lo que cambi\u00f3 desde el \u00faltimo backup completo. Intermedio.<\/p>\n\n\n\n<p>Los sistemas modernos usan <strong>incrementales<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 5. Estrategias profesionales de backup<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 5.1. Backup autom\u00e1tico<\/h3>\n\n\n\n<p>Nunca conf\u00edes en hacerlo manualmente. Los humanos olvidan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 5.2. Versionado<\/h3>\n\n\n\n<p>Guarda versiones antiguas. Si borras algo por error, puedes volver atr\u00e1s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 5.3. Verificaci\u00f3n<\/h3>\n\n\n\n<p>El sistema debe comprobar que la copia es v\u00e1lida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 5.4. Desduplicaci\u00f3n<\/h3>\n\n\n\n<p>Evita duplicar archivos iguales para ahorrar espacio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 5.5. Cifrado<\/h3>\n\n\n\n<p>Protege tus datos si el disco se pierde o roba.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 6. Qu\u00e9 tecnolog\u00edas usar (y por qu\u00e9)<\/h1>\n\n\n\n<p>Vamos a unir todo lo que aprendiste sobre memorias:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 SSD<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>R\u00e1pido<\/li>\n\n\n\n<li>Ideal para trabajo diario<\/li>\n\n\n\n<li>No ideal como \u00fanico backup por desgaste<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 HDD<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Barato<\/li>\n\n\n\n<li>Mucha capacidad<\/li>\n\n\n\n<li>Perfecto para copias grandes y fr\u00edas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 USB \/ SD<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Port\u00e1tiles<\/li>\n\n\n\n<li>No fiables como backup principal<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 NAS<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redundancia (RAID)<\/li>\n\n\n\n<li>Acceso remoto<\/li>\n\n\n\n<li>Ideal para familias o profesionales<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 Nube<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copia fuera de casa<\/li>\n\n\n\n<li>Versionado<\/li>\n\n\n\n<li>Protecci\u00f3n contra desastres<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. El sistema perfecto para un usuario como t\u00fa<\/h1>\n\n\n\n<p>Con tu perfil t\u00e9cnico y tus necesidades, este ser\u00eda el sistema ideal:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Copia principal<\/strong><\/h3>\n\n\n\n<p>Tu ordenador (SSD interno).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Copia secundaria (local)<\/strong><\/h3>\n\n\n\n<p>Un HDD externo de 4\u20138 TB con backup autom\u00e1tico (Time Machine o similar).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Copia terciaria (remota)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NAS en casa de un familiar<\/li>\n\n\n\n<li>o nube (OneDrive, Google Drive, iCloud, Backblaze)<\/li>\n\n\n\n<li>con versionado activado<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Copia manual ocasional<\/strong><\/h3>\n\n\n\n<p>Un pendrive o disco adicional guardado en un caj\u00f3n, desconectado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Fotos familiares<\/strong><\/h3>\n\n\n\n<p>Duplicadas en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu ordenador<\/li>\n\n\n\n<li>el disco externo<\/li>\n\n\n\n<li>la nube<\/li>\n\n\n\n<li>y un pendrive guardado en otro lugar<\/li>\n<\/ul>\n\n\n\n<p>Esto hace que perderlas sea pr\u00e1cticamente imposible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. C\u00f3mo evitar el problema que tuviste con Dropbox<\/h1>\n\n\n\n<p>Lo que te pas\u00f3 fue por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sincronizaci\u00f3n incompleta<\/li>\n\n\n\n<li>p\u00e9rdida de espacio<\/li>\n\n\n\n<li>borrado sin versionado<\/li>\n\n\n\n<li>dependencia de un \u00fanico servicio<\/li>\n<\/ul>\n\n\n\n<p>Con el sistema 3\u20132\u20131:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aunque Dropbox falle<\/li>\n\n\n\n<li>aunque el ordenador falle<\/li>\n\n\n\n<li>aunque un disco falle<\/li>\n\n\n\n<li>aunque t\u00fa borres algo por error<\/li>\n<\/ul>\n\n\n\n<p><strong>siempre habr\u00e1 otra copia.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto F?<\/h1>\n\n\n\n<p><strong>F) C\u00f3mo se organiza la memoria en m\u00f3viles vs ordenadores<\/strong> O si prefieres, pasamos al punto A, B, C o D para profundizar m\u00e1s.<\/p>\n\n\n\n<p>T\u00fa decides.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si finalmente al F<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto F<\/strong>, que es una pieza clave para entender por qu\u00e9 un m\u00f3vil funciona de forma tan distinta a un ordenador, aunque ambos sean computadoras. Aqu\u00ed vamos a unir todo lo que ya sabes: CPU, GPU, RAM, NAND, jerarqu\u00eda de memoria, instrucciones\u2026 pero aplicado a <strong>m\u00f3viles vs ordenadores<\/strong>.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos comparando dos arquitecturas dise\u00f1adas para mundos completamente distintos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>F \u2014 C\u00f3mo se organiza la memoria en m\u00f3viles vs ordenadores<\/strong><\/h1>\n\n\n\n<p>La diferencia fundamental es esta:<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 **Un m\u00f3vil est\u00e1 dise\u00f1ado para eficiencia energ\u00e9tica.<\/h1>\n\n\n\n<p>Un ordenador est\u00e1 dise\u00f1ado para potencia.**<\/p>\n\n\n\n<p>Eso afecta a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la CPU<\/li>\n\n\n\n<li>la GPU<\/li>\n\n\n\n<li>la RAM<\/li>\n\n\n\n<li>el almacenamiento<\/li>\n\n\n\n<li>la jerarqu\u00eda de memoria<\/li>\n\n\n\n<li>el sistema operativo<\/li>\n\n\n\n<li>la forma de ejecutar apps<\/li>\n<\/ul>\n\n\n\n<p>Vamos por partes.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. CPU: ARM (m\u00f3viles) vs x86-64 (ordenadores)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles \u2192 ARM<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquitectura <strong>RISC<\/strong> (Reduced Instruction Set)<\/li>\n\n\n\n<li>Instrucciones simples<\/li>\n\n\n\n<li>Bajo consumo<\/li>\n\n\n\n<li>Muchos n\u00facleos peque\u00f1os<\/li>\n\n\n\n<li>Frecuencias moderadas<\/li>\n\n\n\n<li>Mucha eficiencia por vatio<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores \u2192 x86-64<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquitectura <strong>CISC<\/strong> (Complex Instruction Set)<\/li>\n\n\n\n<li>Instrucciones complejas<\/li>\n\n\n\n<li>Alto rendimiento<\/li>\n\n\n\n<li>Pocos n\u00facleos muy potentes<\/li>\n\n\n\n<li>Frecuencias altas<\/li>\n\n\n\n<li>Mucho consumo<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9?<\/h3>\n\n\n\n<p>Porque un m\u00f3vil tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bater\u00eda limitada<\/li>\n\n\n\n<li>disipaci\u00f3n t\u00e9rmica m\u00ednima<\/li>\n\n\n\n<li>espacio reducido<\/li>\n<\/ul>\n\n\n\n<p>Un ordenador tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ventiladores<\/li>\n\n\n\n<li>enchufe<\/li>\n\n\n\n<li>m\u00e1s espacio<\/li>\n\n\n\n<li>m\u00e1s disipaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 2. RAM: LPDDR (m\u00f3viles) vs DDR (ordenadores)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles \u2192 LPDDR4 \/ LPDDR5<\/h3>\n\n\n\n<p>LP = Low Power<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Menor voltaje<\/li>\n\n\n\n<li>Menor consumo<\/li>\n\n\n\n<li>Menor ancho de banda<\/li>\n\n\n\n<li>Integrada en el SoC (System-on-Chip)<\/li>\n\n\n\n<li>No ampliable<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores \u2192 DDR4 \/ DDR5<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mayor voltaje<\/li>\n\n\n\n<li>Mayor ancho de banda<\/li>\n\n\n\n<li>M\u00f3dulos DIMM extra\u00edbles<\/li>\n\n\n\n<li>Mucha capacidad<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9?<\/h3>\n\n\n\n<p>Porque en m\u00f3viles la RAM debe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>consumir poco<\/li>\n\n\n\n<li>ocupar poco espacio<\/li>\n\n\n\n<li>estar muy cerca de la CPU para ahorrar energ\u00eda<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcbe 3. Almacenamiento: UFS\/eMMC (m\u00f3viles) vs SSD NVMe\/SATA (ordenadores)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles \u2192 UFS 3.1 \/ UFS 4.0<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basado en NAND<\/li>\n\n\n\n<li>Muy eficiente<\/li>\n\n\n\n<li>Muy r\u00e1pido para su tama\u00f1o<\/li>\n\n\n\n<li>Integrado en placa<\/li>\n\n\n\n<li>No ampliable<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores \u2192 SSD NVMe<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mucho m\u00e1s r\u00e1pido<\/li>\n\n\n\n<li>M\u00e1s canales de NAND<\/li>\n\n\n\n<li>Controladores m\u00e1s potentes<\/li>\n\n\n\n<li>Sustituible<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9?<\/h3>\n\n\n\n<p>Porque un m\u00f3vil necesita:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bajo consumo<\/li>\n\n\n\n<li>poco calor<\/li>\n\n\n\n<li>tama\u00f1o m\u00ednimo<\/li>\n<\/ul>\n\n\n\n<p>Un ordenador puede permitirse:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>m\u00e1s consumo<\/li>\n\n\n\n<li>m\u00e1s calor<\/li>\n\n\n\n<li>m\u00e1s velocidad<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 4. Jerarqu\u00eda de memoria: diferencias clave<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenador<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Registros\nCach\u00e9 L1\nCach\u00e9 L2\nCach\u00e9 L3\nRAM DDR\nSSD NVMe\nHDD (opcional)\nUSB \/ SD \/ Nube\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3vil<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Registros\nCach\u00e9 L1\nCach\u00e9 L2\nCach\u00e9 L3\nRAM LPDDR (soldada)\nAlmacenamiento UFS (soldado)\nTarjeta SD (opcional)\nNube\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Diferencias importantes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En m\u00f3viles <strong>todo est\u00e1 integrado en un \u00fanico chip (SoC)<\/strong>.<\/li>\n\n\n\n<li>En ordenadores, la memoria est\u00e1 <strong>separada f\u00edsicamente<\/strong>.<\/li>\n\n\n\n<li>En m\u00f3viles, la distancia f\u00edsica entre CPU y RAM es m\u00ednima \u2192 menos consumo.<\/li>\n\n\n\n<li>En ordenadores, la RAM est\u00e1 en m\u00f3dulos \u2192 m\u00e1s capacidad y velocidad.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 5. GPU: Adreno\/Mali\/Apple vs NVIDIA\/AMD\/Intel<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPUs integradas en el SoC<\/li>\n\n\n\n<li>Muy eficientes<\/li>\n\n\n\n<li>Menos n\u00facleos<\/li>\n\n\n\n<li>Menos ancho de banda<\/li>\n\n\n\n<li>Perfectas para gr\u00e1ficos m\u00f3viles y IA ligera<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPUs dedicadas<\/li>\n\n\n\n<li>Much\u00edsima VRAM (GDDR6, HBM)<\/li>\n\n\n\n<li>Miles de n\u00facleos<\/li>\n\n\n\n<li>Consumo enorme<\/li>\n\n\n\n<li>Perfectas para juegos, IA, renderizado, miner\u00eda<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. Sistema operativo: Android\/iOS vs Windows\/Linux\/macOS<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gesti\u00f3n agresiva de memoria<\/li>\n\n\n\n<li>Apps se congelan en segundo plano<\/li>\n\n\n\n<li>No hay swap (o es m\u00ednima)<\/li>\n\n\n\n<li>Todo est\u00e1 sandboxed<\/li>\n\n\n\n<li>El sistema decide qu\u00e9 vive y qu\u00e9 muere<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mucha RAM<\/li>\n\n\n\n<li>Swap en SSD<\/li>\n\n\n\n<li>Multitarea real<\/li>\n\n\n\n<li>Procesos m\u00e1s libres<\/li>\n\n\n\n<li>M\u00e1s control del usuario<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 7. C\u00f3mo se ejecutan las apps: diferencias profundas<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apps en Java\/Kotlin (Android) o Swift\/Obj-C (iOS)<\/li>\n\n\n\n<li>M\u00e1quinas virtuales (ART)<\/li>\n\n\n\n<li>JIT\/AOT<\/li>\n\n\n\n<li>Mucho sandboxing<\/li>\n\n\n\n<li>Restricciones de energ\u00eda<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apps nativas en C\/C++<\/li>\n\n\n\n<li>Python, JavaScript, Java\u2026<\/li>\n\n\n\n<li>Menos restricciones<\/li>\n\n\n\n<li>M\u00e1s acceso al hardware<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. Por qu\u00e9 un m\u00f3vil parece r\u00e1pido con hardware \u201cpeque\u00f1o\u201d<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Todo est\u00e1 integrado (SoC)<\/li>\n\n\n\n<li>La distancia entre componentes es m\u00ednima<\/li>\n\n\n\n<li>El sistema operativo mata procesos agresivamente<\/li>\n\n\n\n<li>La RAM es LPDDR muy cercana<\/li>\n\n\n\n<li>El almacenamiento UFS es muy eficiente<\/li>\n\n\n\n<li>El hardware est\u00e1 optimizado para tareas t\u00edpicas (apps, c\u00e1mara, IA ligera)<\/li>\n<\/ul>\n\n\n\n<p>Un m\u00f3vil est\u00e1 dise\u00f1ado para <strong>parecer r\u00e1pido<\/strong>, no para ser una estaci\u00f3n de trabajo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 9. Por qu\u00e9 un ordenador es m\u00e1s potente pero parece \u201cmenos optimizado\u201d<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tiene que ejecutar miles de tipos de software<\/li>\n\n\n\n<li>No puede matar procesos sin permiso<\/li>\n\n\n\n<li>Tiene multitarea real<\/li>\n\n\n\n<li>Tiene hardware modular<\/li>\n\n\n\n<li>Tiene m\u00e1s latencias internas<\/li>\n\n\n\n<li>Tiene m\u00e1s capas de compatibilidad<\/li>\n<\/ul>\n\n\n\n<p>Un ordenador est\u00e1 dise\u00f1ado para <strong>ser vers\u00e1til<\/strong>, no para ser eficiente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Resumen maestro (la idea clave)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 M\u00f3viles<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquitectura integrada<\/li>\n\n\n\n<li>Memoria soldada<\/li>\n\n\n\n<li>Bajo consumo<\/li>\n\n\n\n<li>Alta eficiencia<\/li>\n\n\n\n<li>Apps controladas<\/li>\n\n\n\n<li>Sistema operativo agresivo<\/li>\n\n\n\n<li>Hardware optimizado para tareas concretas<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ordenadores<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arquitectura modular<\/li>\n\n\n\n<li>Memoria ampliable<\/li>\n\n\n\n<li>Alto rendimiento<\/li>\n\n\n\n<li>Alta versatilidad<\/li>\n\n\n\n<li>Multitarea real<\/li>\n\n\n\n<li>Hardware especializado<\/li>\n\n\n\n<li>Mucho m\u00e1s ancho de banda<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc Si quieres, ahora podemos seguir con:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 G) C\u00f3mo funciona un ciclo de lectura\/escritura en NOR (firmware, bootloaders)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 H) C\u00f3mo funciona un pipeline completo con predicci\u00f3n de saltos<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 I) C\u00f3mo se dise\u00f1a un SoC moderno (CPU+GPU+RAM+NPU)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 J) C\u00f3mo funciona la memoria virtual y la paginaci\u00f3n<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 K) C\u00f3mo se organiza una base de datos en disco (B-trees, WAL, buffers)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 L) C\u00f3mo funciona un sistema de archivos (ext4, APFS, NTFS)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente nivel de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Antes de estos puntos, dime tambi\u00e9n la diferencia entre sistemas operativos en cuanto al punto F, porque los principales son linux, windows y mac (y dentro de mac hay uno mas antiguo y ahora estan los M1, M2 y M3) y si luego pasamos a seguir con los puntos de G a L<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos a cerrar el <strong>punto F<\/strong> con la pieza que faltaba: <strong>las diferencias entre los sistemas operativos principales (Linux, Windows, macOS Intel y macOS Apple Silicon) en relaci\u00f3n con la arquitectura de memoria y hardware que acabamos de estudiar.<\/strong><\/p>\n\n\n\n<p>Esto te va a dar una visi\u00f3n completa de c\u00f3mo el software se adapta al hardware, y por qu\u00e9 cada sistema operativo funciona como funciona.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>F \u2014 Diferencias entre sistemas operativos (Linux, Windows, macOS Intel, macOS M1\/M2\/M3)<\/strong><\/h1>\n\n\n\n<p>Los sistemas operativos no son solo \u201cprogramas grandes\u201d: son <strong>gestores de hardware<\/strong>, <strong>planificadores de CPU<\/strong>, <strong>controladores de memoria<\/strong>, <strong>gestores de procesos<\/strong>, <strong>sistemas de archivos<\/strong>, <strong>controladores de dispositivos<\/strong>, <strong>int\u00e9rpretes de instrucciones<\/strong>, <strong>cargadores de binarios<\/strong>, etc.<\/p>\n\n\n\n<p>Y cada uno est\u00e1 profundamente influido por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la arquitectura de CPU<\/li>\n\n\n\n<li>la jerarqu\u00eda de memoria<\/li>\n\n\n\n<li>el modelo de seguridad<\/li>\n\n\n\n<li>el tipo de almacenamiento<\/li>\n\n\n\n<li>el ecosistema de aplicaciones<\/li>\n<\/ul>\n\n\n\n<p>Vamos uno por uno.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1.&nbsp;<strong>Windows (x86-64)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Arquitectura principal<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dise\u00f1ado para <strong>x86-64<\/strong> (Intel\/AMD).<\/li>\n\n\n\n<li>No est\u00e1 optimizado para ARM (aunque existe Windows ARM, es minoritario).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Gesti\u00f3n de memoria<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usa <strong>paginaci\u00f3n<\/strong> con memoria virtual.<\/li>\n\n\n\n<li>Usa <strong>swap<\/strong> en disco (pagefile.sys).<\/li>\n\n\n\n<li>Permite <strong>memoria compartida<\/strong>, <strong>memoria mapeada<\/strong>, <strong>ASLR<\/strong>, etc.<\/li>\n\n\n\n<li>Muy flexible, pero m\u00e1s pesado.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Relaci\u00f3n con hardware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Debe soportar miles de configuraciones distintas.<\/li>\n\n\n\n<li>Drivers de terceros.<\/li>\n\n\n\n<li>Mucha compatibilidad hacia atr\u00e1s.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vers\u00e1til<\/li>\n\n\n\n<li>Compatible con casi todo<\/li>\n\n\n\n<li>Ideal para juegos y software comercial<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s pesado<\/li>\n\n\n\n<li>M\u00e1s consumo<\/li>\n\n\n\n<li>M\u00e1s latencias internas<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 2.&nbsp;<strong>Linux (x86-64, ARM, RISC-V\u2026)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Arquitectura principal<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funciona en <strong>casi cualquier arquitectura<\/strong>: x86, ARM, MIPS, RISC-V\u2026<\/li>\n\n\n\n<li>Es el sistema m\u00e1s flexible del mundo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Gesti\u00f3n de memoria<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy eficiente<\/li>\n\n\n\n<li>Gran control del usuario<\/li>\n\n\n\n<li>Swapping configurable<\/li>\n\n\n\n<li>Cgroups, namespaces, contenedores<\/li>\n\n\n\n<li>Perfecto para servidores y sistemas embebidos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Relaci\u00f3n con hardware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Drivers abiertos o integrados en el kernel<\/li>\n\n\n\n<li>Menos dependiente de fabricantes<\/li>\n\n\n\n<li>M\u00e1s estable en servidores<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ligero<\/li>\n\n\n\n<li>Seguro<\/li>\n\n\n\n<li>Altamente configurable<\/li>\n\n\n\n<li>Ideal para servidores, ciencia, desarrollo, contenedores<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No todo el hardware tiene drivers perfectos<\/li>\n\n\n\n<li>No todo el software comercial est\u00e1 disponible<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf4f 3.&nbsp;<strong>macOS Intel (x86-64)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Arquitectura principal<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basado en x86-64 hasta 2020.<\/li>\n\n\n\n<li>Kernel h\u00edbrido (XNU: Mach + BSD).<\/li>\n\n\n\n<li>Muy optimizado para hardware Apple Intel.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Gesti\u00f3n de memoria<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy eficiente<\/li>\n\n\n\n<li>Gran uso de cach\u00e9s<\/li>\n\n\n\n<li>Swap en SSD muy r\u00e1pido<\/li>\n\n\n\n<li>Integraci\u00f3n profunda con el sistema de archivos APFS<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Relaci\u00f3n con hardware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apple controla el hardware \u2192 optimizaci\u00f3n extrema<\/li>\n\n\n\n<li>Drivers integrados<\/li>\n\n\n\n<li>Menos variabilidad que Windows<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Estabilidad<\/li>\n\n\n\n<li>Optimizaci\u00f3n<\/li>\n\n\n\n<li>Integraci\u00f3n hardware-software<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Menos flexible que Linux<\/li>\n\n\n\n<li>Menos compatible que Windows<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf4f\ud83d\udd25 4.&nbsp;<strong>macOS Apple Silicon (M1, M2, M3)<\/strong><\/h1>\n\n\n\n<p>Aqu\u00ed es donde todo cambia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Arquitectura principal<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basado en <strong>ARM64<\/strong> (Apple Silicon).<\/li>\n\n\n\n<li>CPU, GPU, Neural Engine, RAM y controladores integrados en un <strong>SoC<\/strong>.<\/li>\n\n\n\n<li>Memoria <strong>unificada<\/strong> (UMA): CPU y GPU comparten la misma RAM LPDDR5.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Gesti\u00f3n de memoria<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ultra optimizada para UMA<\/li>\n\n\n\n<li>Latencias baj\u00edsimas<\/li>\n\n\n\n<li>Ancho de banda enorme<\/li>\n\n\n\n<li>Swap en SSD extremadamente r\u00e1pido<\/li>\n\n\n\n<li>Compresi\u00f3n de memoria muy eficiente<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Relaci\u00f3n con hardware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apple controla absolutamente todo:\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>GPU<\/li>\n\n\n\n<li>RAM<\/li>\n\n\n\n<li>Controladores<\/li>\n\n\n\n<li>Sistema operativo<\/li>\n\n\n\n<li>Compiladores<\/li>\n\n\n\n<li>Librer\u00edas<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Esto permite un nivel de optimizaci\u00f3n imposible en Windows o Linux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rendimiento por vatio espectacular<\/li>\n\n\n\n<li>Baja latencia<\/li>\n\n\n\n<li>Integraci\u00f3n total<\/li>\n\n\n\n<li>Apps nativas ARM muy r\u00e1pidas<\/li>\n\n\n\n<li>Rosetta 2 traduce apps x86 con gran eficiencia<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RAM soldada<\/li>\n\n\n\n<li>No ampliable<\/li>\n\n\n\n<li>Menos libertad que Linux<\/li>\n\n\n\n<li>Menos compatibilidad que Windows<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 5.&nbsp;<strong>Comparaci\u00f3n directa en cuanto a memoria y hardware<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Sistema<\/th><th>Arquitectura<\/th><th>RAM<\/th><th>Almacenamiento<\/th><th>Drivers<\/th><th>Optimizaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Windows<\/td><td>x86-64<\/td><td>DDR4\/DDR5<\/td><td>SSD\/HDD<\/td><td>Terceros<\/td><td>Media<\/td><\/tr><tr><td>Linux<\/td><td>x86\/ARM\/RISC-V<\/td><td>DDR\/LPDDR<\/td><td>SSD\/HDD<\/td><td>Kernel<\/td><td>Alta<\/td><\/tr><tr><td>macOS&nbsp;Intel<\/td><td>x86-64<\/td><td>DDR4<\/td><td>SSD<\/td><td>Apple<\/td><td>Muy&nbsp;alta<\/td><\/tr><tr><td>macOS&nbsp;M1\/M2\/M3<\/td><td>ARM64<\/td><td>LPDDR5&nbsp;unificada<\/td><td>SSD<\/td><td>Apple<\/td><td>Extremadamente&nbsp;alta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. \u00bfPor qu\u00e9 Apple Silicon es tan diferente?<\/h1>\n\n\n\n<p>Porque Apple hizo algo que nadie m\u00e1s hab\u00eda hecho en ordenadores personales:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Uni\u00f3 CPU, GPU, RAM y controladores en un \u00fanico chip (SoC).<\/strong><\/p>\n\n\n\n<p>Esto reduce:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>latencias<\/li>\n\n\n\n<li>consumo<\/li>\n\n\n\n<li>distancia f\u00edsica entre componentes<\/li>\n\n\n\n<li>necesidad de buses externos<\/li>\n<\/ul>\n\n\n\n<p>Y aumenta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ancho de banda<\/li>\n\n\n\n<li>eficiencia<\/li>\n\n\n\n<li>rendimiento por vatio<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un dise\u00f1o de m\u00f3vil llevado al mundo de los ordenadores.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. \u00bfQu\u00e9 significa esto para el usuario?<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Windows<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1xima compatibilidad<\/li>\n\n\n\n<li>M\u00e1xima flexibilidad<\/li>\n\n\n\n<li>Ideal para juegos y software comercial<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Linux<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1ximo control<\/li>\n\n\n\n<li>M\u00e1xima eficiencia en servidores<\/li>\n\n\n\n<li>Ideal para desarrollo, ciencia, contenedores<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 macOS Intel<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buen equilibrio<\/li>\n\n\n\n<li>Ecosistema Apple<\/li>\n\n\n\n<li>Menos eficiente que Apple Silicon<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 macOS M1\/M2\/M3<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1xima optimizaci\u00f3n<\/li>\n\n\n\n<li>M\u00e1xima eficiencia energ\u00e9tica<\/li>\n\n\n\n<li>Ideal para productividad, edici\u00f3n, IA ligera<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que sigamos con los puntos G a L?<\/h1>\n\n\n\n<p>Te recuerdo las opciones:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 G) C\u00f3mo funciona un ciclo de lectura\/escritura en NOR (firmware, bootloaders)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 H) C\u00f3mo funciona un pipeline completo con predicci\u00f3n de saltos<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 I) C\u00f3mo se dise\u00f1a un SoC moderno (CPU+GPU+RAM+NPU)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 J) C\u00f3mo funciona la memoria virtual y la paginaci\u00f3n<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 K) C\u00f3mo se organiza una base de datos en disco (B-trees, WAL, buffers)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 L) C\u00f3mo funciona un sistema de archivos (ext4, APFS, NTFS)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente salto de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el G<\/p>\n<\/blockquote>\n\n\n\n<p><strong>La clave es que la memoria NOR permite <\/strong><em><strong>lectura aleatoria a nivel de byte<\/strong><\/em><strong> y ejecuci\u00f3n directa de c\u00f3digo, mientras que la NAND obliga a borrar por bloques completos. Esto hace que la NOR sea ideal para firmware y bootloaders.<\/strong> A continuaci\u00f3n te explico c\u00f3mo funciona exactamente un ciclo de lectura\/escritura\/borrado en NOR, con precisi\u00f3n t\u00e9cnica y apoyado en fuentes.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 \u00bfQu\u00e9 es la memoria NOR y por qu\u00e9 se usa para firmware?<\/h1>\n\n\n\n<p>La <strong>flash NOR<\/strong> es un tipo de memoria no vol\u00e1til dise\u00f1ada para permitir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lectura aleatoria a nivel de byte o palabra<\/strong><\/li>\n\n\n\n<li><strong>Ejecuci\u00f3n directa de c\u00f3digo (XIP: eXecute In Place)<\/strong><\/li>\n\n\n\n<li><strong>Alta fiabilidad en lectura<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Por eso se usa en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BIOS\/UEFI<\/li>\n\n\n\n<li>Bootloaders<\/li>\n\n\n\n<li>Firmware de microcontroladores<\/li>\n\n\n\n<li>Sistemas embebidos<\/li>\n<\/ul>\n\n\n\n<p>A diferencia de la NAND, la NOR <strong>s\u00ed permite escribir bytes individuales<\/strong>, aunque el borrado sigue siendo por sectores.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0d 1. C\u00f3mo se lee en NOR (READ)<\/h1>\n\n\n\n<p>La lectura en NOR es muy parecida a leer en una ROM tradicional:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>La CPU coloca la <strong>direcci\u00f3n<\/strong> en el bus.<\/li>\n\n\n\n<li>La celda NOR correspondiente se activa.<\/li>\n\n\n\n<li>El transistor de la celda conduce o no conduce seg\u00fan su estado.<\/li>\n\n\n\n<li>El dato (0 o 1) se devuelve directamente al bus.<\/li>\n<\/ol>\n\n\n\n<p>\ud83d\udc49 <strong>La lectura es aleatoria y muy r\u00e1pida<\/strong>, ideal para ejecutar c\u00f3digo directamente desde la memoria. Esto es lo que diferencia a NOR de NAND, donde solo se puede leer por p\u00e1ginas completas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u270d\ufe0f 2. C\u00f3mo se escribe en NOR (PROGRAM)<\/h1>\n\n\n\n<p>La NOR solo permite programar bits en una direcci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>De 1 \u2192 0<\/strong> (programar)<\/li>\n\n\n\n<li>Para volver a 1, hay que borrar el sector completo<\/li>\n<\/ul>\n\n\n\n<p>El proceso t\u00edpico:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Se env\u00eda un comando de \u201cprogram\u201d.<\/li>\n\n\n\n<li>Se aplica un voltaje alto para inyectar electrones en la puerta flotante.<\/li>\n\n\n\n<li>El bit pasa de 1 a 0.<\/li>\n\n\n\n<li>Se verifica el nivel de carga.<\/li>\n<\/ol>\n\n\n\n<p>\ud83d\udc49 <strong>No se puede pasar de 0 a 1 sin borrar el sector entero<\/strong>. Esto est\u00e1 documentado en las FAQs de Infineon: la NOR solo programa de 1\u21920 y el borrado restaura todos los bits a 1.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde8 3. C\u00f3mo se borra en NOR (ERASE)<\/h1>\n\n\n\n<p>El borrado se hace <strong>por sectores o por chip completo<\/strong>, nunca por bytes.<\/p>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Se activa el comando de borrado.<\/li>\n\n\n\n<li>Se realiza un \u201cpre-programming\u201d:\n<ul class=\"wp-block-list\">\n<li>Se fuerzan todos los bits a 0.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Luego se aplica un voltaje de borrado que devuelve todos los bits a 1.<\/li>\n<\/ol>\n\n\n\n<p>Este comportamiento est\u00e1 descrito expl\u00edcitamente por Infineon:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pre-program = poner todo a 0<\/li>\n\n\n\n<li>Erase = devolver todo a 1<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 4. Diferencias clave NOR vs NAND (resumen t\u00e9cnico)<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>NOR<\/th><th>NAND<\/th><\/tr><\/thead><tbody><tr><td>Lectura<\/td><td>Aleatoria&nbsp;por&nbsp;byte<\/td><td>Por&nbsp;p\u00e1ginas<\/td><\/tr><tr><td>Escritura<\/td><td>Byte&nbsp;a&nbsp;byte&nbsp;(1\u21920)<\/td><td>P\u00e1gina&nbsp;completa<\/td><\/tr><tr><td>Borrado<\/td><td>Por&nbsp;sectores<\/td><td>Por&nbsp;bloques<\/td><\/tr><tr><td>Uso&nbsp;t\u00edpico<\/td><td>Firmware,&nbsp;boot<\/td><td>Almacenamiento&nbsp;masivo<\/td><\/tr><tr><td>Fiabilidad<\/td><td>Muy&nbsp;alta<\/td><td>Alta&nbsp;con&nbsp;ECC<\/td><\/tr><tr><td>Densidad<\/td><td>Baja<\/td><td>Muy&nbsp;alta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>NOR es m\u00e1s cara y menos densa, pero <strong>perfecta para c\u00f3digo<\/strong>. NAND es m\u00e1s barata y densa, perfecta para <strong>datos<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udee0\ufe0f 5. NOR en sistemas reales (firmware, bootloaders)<\/h1>\n\n\n\n<p>La NOR se usa para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BIOS\/UEFI en PCs antiguos<\/li>\n\n\n\n<li>Boot ROM en microcontroladores<\/li>\n\n\n\n<li>Firmware de routers, IoT, automoci\u00f3n<\/li>\n\n\n\n<li>Almacenamiento de configuraciones cr\u00edticas<\/li>\n<\/ul>\n\n\n\n<p>Razones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lectura instant\u00e1nea<\/li>\n\n\n\n<li>Ejecuci\u00f3n directa sin copiar a RAM<\/li>\n\n\n\n<li>Fiabilidad en lectura<\/li>\n\n\n\n<li>Baja latencia<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 6. \u00bfSe desgasta la NOR?<\/h1>\n\n\n\n<p>S\u00ed, pero menos que la NAND.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El desgaste ocurre en ciclos <strong>program + erase<\/strong>.<\/li>\n\n\n\n<li>El borrado repetido degrada el \u00f3xido de la puerta flotante.<\/li>\n\n\n\n<li>La NOR suele tener <strong>m\u00e1s ciclos de vida<\/strong> que la NAND SLC\/TLC.<\/li>\n<\/ul>\n\n\n\n<p>En StackOverflow se discute que el desgaste depende de transiciones 1\u21920 y del borrado posterior, no de lecturas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto H?<\/h1>\n\n\n\n<p><strong>H) C\u00f3mo funciona un pipeline completo con predicci\u00f3n de saltos<\/strong> Aqu\u00ed veremos c\u00f3mo la CPU ejecuta varias instrucciones simult\u00e1neamente, c\u00f3mo predice ramas y c\u00f3mo maneja fallos de predicci\u00f3n.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si al H<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto H<\/strong>, y aqu\u00ed entramos en uno de los mecanismos m\u00e1s impresionantes de toda la arquitectura de procesadores modernos: <strong>el pipeline completo con predicci\u00f3n de saltos<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo una CPU consigue ejecutar <em>varias instrucciones a la vez<\/em>, c\u00f3mo evita quedarse esperando, c\u00f3mo adivina el futuro (s\u00ed, literalmente), y c\u00f3mo maneja errores cuando se equivoca.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro del procesador viendo c\u00f3mo fluye cada instrucci\u00f3n.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>H \u2014 C\u00f3mo funciona un pipeline completo con predicci\u00f3n de saltos<\/strong><\/h1>\n\n\n\n<p>Para entenderlo bien, vamos a dividirlo en:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Qu\u00e9 es un pipeline<\/li>\n\n\n\n<li>C\u00f3mo fluye una instrucci\u00f3n por el pipeline<\/li>\n\n\n\n<li>Qu\u00e9 pasa cuando hay dependencias<\/li>\n\n\n\n<li>Qu\u00e9 es la predicci\u00f3n de saltos<\/li>\n\n\n\n<li>Qu\u00e9 pasa cuando la predicci\u00f3n falla<\/li>\n\n\n\n<li>C\u00f3mo se combina todo con ejecuci\u00f3n fuera de orden<\/li>\n\n\n\n<li>C\u00f3mo se relaciona con la jerarqu\u00eda de memoria<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd47 1. Qu\u00e9 es un pipeline<\/h1>\n\n\n\n<p>Un <strong>pipeline<\/strong> es como una cadena de montaje.<\/p>\n\n\n\n<p>En vez de ejecutar una instrucci\u00f3n completa de principio a fin antes de empezar la siguiente, la CPU divide la ejecuci\u00f3n en etapas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Fetch<\/strong> \u2013 traer la instrucci\u00f3n<\/li>\n\n\n\n<li><strong>Decode<\/strong> \u2013 decodificarla<\/li>\n\n\n\n<li><strong>Rename<\/strong> \u2013 renombrar registros<\/li>\n\n\n\n<li><strong>Schedule<\/strong> \u2013 planificar<\/li>\n\n\n\n<li><strong>Execute<\/strong> \u2013 ejecutar<\/li>\n\n\n\n<li><strong>Write-back<\/strong> \u2013 escribir resultado<\/li>\n\n\n\n<li><strong>Commit<\/strong> \u2013 confirmar<\/li>\n<\/ol>\n\n\n\n<p>Cada etapa es como un \u201cpaso\u201d en la cadena.<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Mientras una instrucci\u00f3n est\u00e1 en Execute, otra est\u00e1 en Decode, otra en Fetch\u2026<\/strong><\/p>\n\n\n\n<p>Esto permite ejecutar <strong>varias instrucciones simult\u00e1neamente<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 2. Flujo de una instrucci\u00f3n por el pipeline<\/h1>\n\n\n\n<p>Imagina tres instrucciones:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1. ADD RAX, RBX\n2. MUL RCX, RDX\n3. MOV R8, RAX\n<\/code><\/pre>\n\n\n\n<p>En un pipeline ideal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ciclo 1: Fetch(1)<\/li>\n\n\n\n<li>Ciclo 2: Decode(1), Fetch(2)<\/li>\n\n\n\n<li>Ciclo 3: Rename(1), Decode(2), Fetch(3)<\/li>\n\n\n\n<li>Ciclo 4: Schedule(1), Rename(2), Decode(3)<\/li>\n\n\n\n<li>Ciclo 5: Execute(1), Schedule(2), Rename(3)<\/li>\n\n\n\n<li>Ciclo 6: Write-back(1), Execute(2), Schedule(3)<\/li>\n\n\n\n<li>Ciclo 7: Commit(1), Write-back(2), Execute(3)<\/li>\n<\/ul>\n\n\n\n<p>La CPU est\u00e1 haciendo <strong>tres cosas a la vez<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 3. Dependencias: el gran problema<\/h1>\n\n\n\n<p>Si una instrucci\u00f3n depende del resultado de otra:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1. ADD RAX, RBX\n2. MOV RCX, RAX\n<\/code><\/pre>\n\n\n\n<p>La instrucci\u00f3n 2 <strong>no puede ejecutarse<\/strong> hasta que 1 termine.<\/p>\n\n\n\n<p>Esto se llama <strong>dependencia RAW (Read After Write)<\/strong>.<\/p>\n\n\n\n<p>Para evitar bloqueos, la CPU usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>renombrado de registros<\/strong><\/li>\n\n\n\n<li><strong>ejecuci\u00f3n fuera de orden<\/strong><\/li>\n\n\n\n<li><strong>colas de reserva<\/strong><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd2e 4. Predicci\u00f3n de saltos: la CPU adivina el futuro<\/h1>\n\n\n\n<p>Cuando el c\u00f3digo tiene:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (x &gt; 0) {\n    A();\n} else {\n    B();\n}\n<\/code><\/pre>\n\n\n\n<p>La CPU <strong>no puede esperar<\/strong> a saber si x &gt; 0. Eso ser\u00eda demasiado lento.<\/p>\n\n\n\n<p>As\u00ed que hace algo incre\u00edble:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Predice qu\u00e9 camino se tomar\u00e1.<\/strong><\/p>\n\n\n\n<p>Si acierta \u2192 velocidad m\u00e1xima. Si falla \u2192 hay penalizaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tipos de predicci\u00f3n:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Est\u00e1tica<\/strong>: siempre tomar o no tomar<\/li>\n\n\n\n<li><strong>Din\u00e1mica<\/strong>: basada en historial<\/li>\n\n\n\n<li><strong>Predictor bimodal<\/strong><\/li>\n\n\n\n<li><strong>Predictor de dos niveles<\/strong><\/li>\n\n\n\n<li><strong>Predictor global<\/strong><\/li>\n\n\n\n<li><strong>Predictor local<\/strong><\/li>\n\n\n\n<li><strong>TAGE (moderno, muy preciso)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Los procesadores modernos tienen predictores con <strong>miles de entradas<\/strong> y algoritmos avanzados.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udca5 5. Qu\u00e9 pasa cuando la predicci\u00f3n falla (misprediction)<\/h1>\n\n\n\n<p>Si la CPU predice mal:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Se descartan todas las instrucciones del pipeline que depend\u00edan de esa predicci\u00f3n<\/li>\n\n\n\n<li>Se limpia el pipeline (flush)<\/li>\n\n\n\n<li>Se vuelve a cargar la instrucci\u00f3n correcta<\/li>\n\n\n\n<li>Se reejecuta todo<\/li>\n<\/ol>\n\n\n\n<p>Esto cuesta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>10 ciclos en CPUs simples<\/li>\n\n\n\n<li>20\u201330 ciclos en CPUs modernas<\/li>\n\n\n\n<li>100+ ciclos si hay fallos de cach\u00e9<\/li>\n<\/ul>\n\n\n\n<p>Por eso la predicci\u00f3n es tan importante.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd00 6. Ejecuci\u00f3n fuera de orden (Out-of-Order Execution)<\/h1>\n\n\n\n<p>La CPU <strong>no ejecuta las instrucciones en el orden del programa<\/strong>, sino en el orden m\u00e1s eficiente.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1. A = B + C\n2. D = E + F\n3. G = A + D\n<\/code><\/pre>\n\n\n\n<p>La CPU puede ejecutar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Primero 2<\/li>\n\n\n\n<li>Luego 1<\/li>\n\n\n\n<li>Finalmente 3<\/li>\n<\/ul>\n\n\n\n<p>Siempre respetando dependencias.<\/p>\n\n\n\n<p>Esto aumenta much\u00edsimo el rendimiento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 7. C\u00f3mo se combina todo con la jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Mientras el pipeline trabaja:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fetch usa <strong>cach\u00e9 L1 de instrucciones<\/strong><\/li>\n\n\n\n<li>Execute usa <strong>cach\u00e9 L1 de datos<\/strong><\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 L2<\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 L3<\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 RAM<\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 SSD<\/li>\n<\/ul>\n\n\n\n<p>Cada fallo de cach\u00e9 puede detener el pipeline.<\/p>\n\n\n\n<p>Por eso:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>La predicci\u00f3n de saltos y la cach\u00e9 son las dos tecnolog\u00edas m\u00e1s importantes para el rendimiento real.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. Resumen maestro<\/h1>\n\n\n\n<p>Una CPU moderna:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ejecuta varias instrucciones simult\u00e1neamente (pipeline)<\/li>\n\n\n\n<li>Adivina el futuro (predicci\u00f3n de saltos)<\/li>\n\n\n\n<li>Reordena instrucciones (out-of-order)<\/li>\n\n\n\n<li>Usa registros renombrados<\/li>\n\n\n\n<li>Usa cach\u00e9s multinivel<\/li>\n\n\n\n<li>Maneja dependencias<\/li>\n\n\n\n<li>Recupera errores de predicci\u00f3n<\/li>\n\n\n\n<li>Mantiene coherencia con commit en orden<\/li>\n<\/ul>\n\n\n\n<p>Es una obra maestra de ingenier\u00eda.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto I?<\/h1>\n\n\n\n<p><strong>I) C\u00f3mo se dise\u00f1a un SoC moderno (CPU + GPU + RAM + NPU)<\/strong> Aqu\u00ed veremos c\u00f3mo Apple, Qualcomm, Samsung y otros integran todo en un \u00fanico chip.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si al I<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto I<\/strong>, y aqu\u00ed entramos en <em>la ingenier\u00eda m\u00e1s avanzada que existe hoy en computaci\u00f3n<\/em>: <strong>c\u00f3mo se dise\u00f1a un SoC moderno (System-on-Chip)<\/strong>, como los Apple M1\/M2\/M3, los Snapdragon de Qualcomm, los Exynos de Samsung o los Tensor de Google.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo se construye un \u201cordenador entero\u201d dentro de un solo chip.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos en el laboratorio de dise\u00f1o de Apple o ARM.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>I \u2014 C\u00f3mo se dise\u00f1a un SoC moderno (CPU + GPU + RAM + NPU + ISP + m\u00e1s)<\/strong><\/h1>\n\n\n\n<p>Un SoC es un <strong>ordenador completo en un solo chip<\/strong>. Incluye:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>GPU<\/li>\n\n\n\n<li>RAM (en m\u00f3viles y Apple Silicon)<\/li>\n\n\n\n<li>NPU (Neural Processing Unit)<\/li>\n\n\n\n<li>ISP (Image Signal Processor)<\/li>\n\n\n\n<li>DSP (Digital Signal Processor)<\/li>\n\n\n\n<li>Controladores de memoria<\/li>\n\n\n\n<li>Controladores de almacenamiento<\/li>\n\n\n\n<li>Controladores de red<\/li>\n\n\n\n<li>Motores de v\u00eddeo (codificaci\u00f3n\/decodificaci\u00f3n)<\/li>\n\n\n\n<li>Seguridad (Secure Enclave)<\/li>\n\n\n\n<li>Motores de cifrado<\/li>\n\n\n\n<li>Sensores<\/li>\n\n\n\n<li>Y m\u00e1s\u2026<\/li>\n<\/ul>\n\n\n\n<p>Todo integrado en un \u00fanico trozo de silicio.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. El punto de partida: la&nbsp;<strong>ISA<\/strong>&nbsp;(Instruction Set Architecture)<\/h1>\n\n\n\n<p>Antes de dise\u00f1ar nada f\u00edsico, se elige la <strong>arquitectura de instrucciones<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ARM (Apple, Qualcomm, Samsung, Google)<\/li>\n\n\n\n<li>x86-64 (Intel, AMD)<\/li>\n\n\n\n<li>RISC-V (nueva generaci\u00f3n)<\/li>\n<\/ul>\n\n\n\n<p>La ISA define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qu\u00e9 instrucciones existen<\/li>\n\n\n\n<li>C\u00f3mo se codifican<\/li>\n\n\n\n<li>Qu\u00e9 registros hay<\/li>\n\n\n\n<li>C\u00f3mo se accede a memoria<\/li>\n\n\n\n<li>C\u00f3mo se manejan interrupciones<\/li>\n<\/ul>\n\n\n\n<p>Es el \u201cidioma\u201d que hablar\u00e1 el chip.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Microarquitectura: c\u00f3mo se implementa la ISA<\/h1>\n\n\n\n<p>Aqu\u00ed empieza el dise\u00f1o real.<\/p>\n\n\n\n<p>Se decide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u00famero de n\u00facleos<\/li>\n\n\n\n<li>Tama\u00f1o de cach\u00e9s L1\/L2\/L3<\/li>\n\n\n\n<li>Pipeline (n\u00famero de etapas)<\/li>\n\n\n\n<li>Predicci\u00f3n de saltos<\/li>\n\n\n\n<li>Ejecuci\u00f3n fuera de orden<\/li>\n\n\n\n<li>Unidades funcionales (ALU, FPU, SIMD, AGU\u2026)<\/li>\n\n\n\n<li>Ancho del decodificador<\/li>\n\n\n\n<li>Tama\u00f1o de buffers internos<\/li>\n\n\n\n<li>Controladores de energ\u00eda<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apple M1: n\u00facleos \u201cFirestorm\u201d (alto rendimiento) + \u201cIcestorm\u201d (eficiencia)<\/li>\n\n\n\n<li>Snapdragon: n\u00facleos Cortex-X + Cortex-A<\/li>\n\n\n\n<li>Intel: P-cores + E-cores<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. Integraci\u00f3n de la GPU<\/h1>\n\n\n\n<p>La GPU del SoC se dise\u00f1a para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>paralelismo masivo<\/li>\n\n\n\n<li>gr\u00e1ficos<\/li>\n\n\n\n<li>IA ligera<\/li>\n\n\n\n<li>procesamiento vectorial<\/li>\n<\/ul>\n\n\n\n<p>En Apple Silicon:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPU propia de Apple<\/li>\n\n\n\n<li>Comparte la misma memoria unificada con la CPU<\/li>\n\n\n\n<li>Latencias baj\u00edsimas<\/li>\n<\/ul>\n\n\n\n<p>En Qualcomm:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPU Adreno<\/li>\n\n\n\n<li>Muy eficiente para m\u00f3viles<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 4. La NPU (Neural Processing Unit)<\/h1>\n\n\n\n<p>La NPU es un acelerador especializado para IA:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>redes neuronales<\/li>\n\n\n\n<li>visi\u00f3n por computadora<\/li>\n\n\n\n<li>reconocimiento de voz<\/li>\n\n\n\n<li>inferencia de modelos<\/li>\n<\/ul>\n\n\n\n<p>Es mucho m\u00e1s eficiente que CPU o GPU para estas tareas.<\/p>\n\n\n\n<p>Apple lo llama <strong>Neural Engine<\/strong>. Google lo llama <strong>Tensor Processing Unit<\/strong> (TPU). Qualcomm lo llama <strong>Hexagon DSP\/NPU<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcf8 5. ISP (Image Signal Processor)<\/h1>\n\n\n\n<p>El ISP es el responsable de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>procesar fotos<\/li>\n\n\n\n<li>procesar v\u00eddeo<\/li>\n\n\n\n<li>HDR<\/li>\n\n\n\n<li>reducci\u00f3n de ruido<\/li>\n\n\n\n<li>estabilizaci\u00f3n<\/li>\n\n\n\n<li>balance de blancos<\/li>\n\n\n\n<li>fusi\u00f3n de im\u00e1genes<\/li>\n<\/ul>\n\n\n\n<p>Por eso un m\u00f3vil con buen ISP hace mejores fotos que otro con peor ISP, incluso con la misma c\u00e1mara.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfa5 6. Motores de v\u00eddeo (Video Codec Engines)<\/h1>\n\n\n\n<p>Son unidades dedicadas para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>H.264<\/li>\n\n\n\n<li>H.265 (HEVC)<\/li>\n\n\n\n<li>AV1<\/li>\n\n\n\n<li>VP9<\/li>\n<\/ul>\n\n\n\n<p>Permiten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>grabar v\u00eddeo 4K\/8K<\/li>\n\n\n\n<li>reproducir v\u00eddeo sin gastar bater\u00eda<\/li>\n\n\n\n<li>streaming eficiente<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10 7. Seguridad: Secure Enclave \/ TrustZone<\/h1>\n\n\n\n<p>Incluye:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cifrado de disco<\/li>\n\n\n\n<li>claves biom\u00e9tricas<\/li>\n\n\n\n<li>arranque seguro<\/li>\n\n\n\n<li>aislamiento de procesos<\/li>\n<\/ul>\n\n\n\n<p>Apple tiene el <strong>Secure Enclave<\/strong>. ARM tiene <strong>TrustZone<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 8. Controladores de memoria y almacenamiento<\/h1>\n\n\n\n<p>Incluye:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>controlador LPDDR (m\u00f3viles y Apple Silicon)<\/li>\n\n\n\n<li>controlador DDR (PCs)<\/li>\n\n\n\n<li>controlador UFS (m\u00f3viles)<\/li>\n\n\n\n<li>controlador NVMe (Apple Silicon y PCs)<\/li>\n<\/ul>\n\n\n\n<p>En Apple Silicon:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>La RAM est\u00e1 en el mismo paquete que el SoC<\/strong> Esto reduce latencias y aumenta el ancho de banda.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 9. El dise\u00f1o f\u00edsico: transistores, litograf\u00eda, energ\u00eda<\/h1>\n\n\n\n<p>Aqu\u00ed entran:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TSMC (Apple, Qualcomm, AMD)<\/li>\n\n\n\n<li>Samsung Foundry<\/li>\n\n\n\n<li>Intel Foundry<\/li>\n<\/ul>\n\n\n\n<p>Se decide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>proceso de fabricaci\u00f3n (5 nm, 3 nm\u2026)<\/li>\n\n\n\n<li>tama\u00f1o del chip<\/li>\n\n\n\n<li>distribuci\u00f3n de bloques<\/li>\n\n\n\n<li>redes de energ\u00eda<\/li>\n\n\n\n<li>disipaci\u00f3n t\u00e9rmica<\/li>\n\n\n\n<li>interconexiones internas<\/li>\n<\/ul>\n\n\n\n<p>Un SoC moderno tiene <strong>decenas de miles de millones de transistores<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 10. Interconexi\u00f3n interna: el \u201cbus\u201d del SoC<\/h1>\n\n\n\n<p>Los componentes se comunican mediante:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>buses AMBA<\/li>\n\n\n\n<li>redes NoC (Network-on-Chip)<\/li>\n\n\n\n<li>interconexiones de alta velocidad<\/li>\n<\/ul>\n\n\n\n<p>Esto es como la \u201cautopista interna\u201d del chip.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. Memoria unificada (UMA): la clave de Apple Silicon<\/h1>\n\n\n\n<p>En Apple M1\/M2\/M3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU, GPU y NPU comparten la misma RAM<\/li>\n\n\n\n<li>No hay copias entre CPU y GPU<\/li>\n\n\n\n<li>Latencias baj\u00edsimas<\/li>\n\n\n\n<li>Ancho de banda enorme<\/li>\n<\/ul>\n\n\n\n<p>Esto es revolucionario en ordenadores personales.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 12. \u00bfC\u00f3mo se programa un SoC?<\/h1>\n\n\n\n<p>Los lenguajes de alto nivel (Python, Swift, JavaScript) no ven el SoC. Pero:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\/C++ s\u00ed pueden usar aceleradores<\/li>\n\n\n\n<li>Metal (Apple) usa GPU y NPU<\/li>\n\n\n\n<li>Vulkan\/OpenCL usan GPU<\/li>\n\n\n\n<li>TensorFlow Lite usa NPU<\/li>\n<\/ul>\n\n\n\n<p>El sistema operativo decide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 n\u00facleo usar<\/li>\n\n\n\n<li>cu\u00e1ndo usar la NPU<\/li>\n\n\n\n<li>c\u00f3mo gestionar energ\u00eda<\/li>\n\n\n\n<li>c\u00f3mo asignar memoria<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde8 13. \u00bfPor qu\u00e9 un SoC es tan eficiente?<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>todo est\u00e1 integrado<\/li>\n\n\n\n<li>las distancias f\u00edsicas son m\u00ednimas<\/li>\n\n\n\n<li>la RAM est\u00e1 pegada al chip<\/li>\n\n\n\n<li>hay menos latencias<\/li>\n\n\n\n<li>hay menos consumo<\/li>\n\n\n\n<li>hay menos calor<\/li>\n\n\n\n<li>hay m\u00e1s paralelismo<\/li>\n\n\n\n<li>hay m\u00e1s especializaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Un SoC es literalmente un \u201cordenador perfecto\u201d para su prop\u00f3sito.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto J?<\/h1>\n\n\n\n<p><strong>J) C\u00f3mo funciona la memoria virtual y la paginaci\u00f3n<\/strong> Es uno de los temas m\u00e1s importantes de toda la inform\u00e1tica: c\u00f3mo un ordenador con 8 GB de RAM puede ejecutar programas que ocupan 20 GB.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el J<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos con <strong>el punto J<\/strong>, y aqu\u00ed entramos en uno de los conceptos m\u00e1s importantes y elegantes de toda la inform\u00e1tica moderna: <strong>c\u00f3mo funciona la memoria virtual y la paginaci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>Este mecanismo es lo que permite que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un ordenador con <strong>8 GB de RAM<\/strong> ejecute programas que ocupan <strong>20 GB<\/strong>,<\/li>\n\n\n\n<li>varios procesos crean la ilusi\u00f3n de tener <strong>toda la memoria para ellos<\/strong>,<\/li>\n\n\n\n<li>el sistema operativo mantenga <strong>aislamiento, seguridad y estabilidad<\/strong>,<\/li>\n\n\n\n<li>la CPU acceda a memoria sin saber realmente d\u00f3nde est\u00e1 f\u00edsicamente.<\/li>\n<\/ul>\n\n\n\n<p>Vamos a desmontarlo pieza por pieza.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>J \u2014 C\u00f3mo funciona la memoria virtual y la paginaci\u00f3n<\/strong><\/h1>\n\n\n\n<p>La idea clave es esta:<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 **Cada proceso cree que tiene su propio espacio de memoria continuo,<\/h1>\n\n\n\n<p>pero en realidad est\u00e1 fragmentado y repartido por toda la RAM y el SSD.**<\/p>\n\n\n\n<p>Esto se consigue con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>memoria virtual<\/strong>,<\/li>\n\n\n\n<li><strong>tablas de p\u00e1ginas<\/strong>,<\/li>\n\n\n\n<li><strong>paginaci\u00f3n<\/strong>,<\/li>\n\n\n\n<li><strong>MMU (Memory Management Unit)<\/strong>,<\/li>\n\n\n\n<li><strong>swap<\/strong>,<\/li>\n\n\n\n<li><strong>TLB (Translation Lookaside Buffer)<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Memoria virtual: la ilusi\u00f3n perfecta<\/h1>\n\n\n\n<p>Cuando un programa se ejecuta, cree que tiene un espacio de direcciones as\u00ed:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0x00000000 \u2192 0xFFFFFFFF\n<\/code><\/pre>\n\n\n\n<p>Un espacio continuo, limpio, ordenado.<\/p>\n\n\n\n<p>Pero eso es <strong>una ilusi\u00f3n<\/strong>.<\/p>\n\n\n\n<p>En realidad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>esas direcciones son <strong>virtuales<\/strong>,<\/li>\n\n\n\n<li>no corresponden directamente a direcciones f\u00edsicas de RAM,<\/li>\n\n\n\n<li>cada proceso tiene su propio mapa virtual,<\/li>\n\n\n\n<li>dos procesos pueden usar la misma direcci\u00f3n virtual sin interferirse.<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Proceso A usa la direcci\u00f3n virtual 0x1000<\/li>\n\n\n\n<li>Proceso B usa la direcci\u00f3n virtual 0x1000<\/li>\n<\/ul>\n\n\n\n<p>Pero f\u00edsicamente est\u00e1n en sitios distintos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. La MMU: el traductor de direcciones<\/h1>\n\n\n\n<p>La <strong>MMU (Memory Management Unit)<\/strong> es un hardware dentro de la CPU que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>recibe una direcci\u00f3n virtual,<\/li>\n\n\n\n<li>consulta las tablas de p\u00e1ginas,<\/li>\n\n\n\n<li>la traduce a una direcci\u00f3n f\u00edsica,<\/li>\n\n\n\n<li>y accede a la RAM.<\/li>\n<\/ul>\n\n\n\n<p>Es como un GPS que convierte \u201cCalle Falsa 123\u201d en coordenadas reales.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 3. Las p\u00e1ginas: bloques de memoria virtual<\/h1>\n\n\n\n<p>La memoria virtual se divide en <strong>p\u00e1ginas<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tama\u00f1o t\u00edpico: <strong>4 KB<\/strong><\/li>\n\n\n\n<li>Tambi\u00e9n existen p\u00e1ginas grandes: <strong>2 MB<\/strong>, <strong>1 GB<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Cada p\u00e1gina virtual se mapea a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>una p\u00e1gina f\u00edsica en RAM,<\/li>\n\n\n\n<li>o a un archivo en disco (swap),<\/li>\n\n\n\n<li>o a un archivo ejecutable (c\u00f3digo),<\/li>\n\n\n\n<li>o a nada (p\u00e1gina no asignada).<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 4. Las tablas de p\u00e1ginas: el mapa del tesoro<\/h1>\n\n\n\n<p>Cada proceso tiene su propia <strong>tabla de p\u00e1ginas<\/strong>, que indica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 p\u00e1ginas virtuales est\u00e1n asignadas,<\/li>\n\n\n\n<li>d\u00f3nde est\u00e1n f\u00edsicamente,<\/li>\n\n\n\n<li>qu\u00e9 permisos tienen (lectura, escritura, ejecuci\u00f3n),<\/li>\n\n\n\n<li>si est\u00e1n en RAM o en disco.<\/li>\n<\/ul>\n\n\n\n<p>La tabla de p\u00e1ginas es enorme, as\u00ed que se organiza en niveles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>x86-64 \u2192 4 o 5 niveles<\/li>\n\n\n\n<li>ARM \u2192 2 o 3 niveles<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 5. El TLB: la cach\u00e9 de traducciones<\/h1>\n\n\n\n<p>Traducir direcciones virtuales ser\u00eda lento si hubiera que consultar la tabla cada vez.<\/p>\n\n\n\n<p>Por eso existe el <strong>TLB (Translation Lookaside Buffer)<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>una cach\u00e9 dentro de la CPU<\/li>\n\n\n\n<li>guarda traducciones recientes<\/li>\n\n\n\n<li>si hay acierto \u2192 acceso instant\u00e1neo<\/li>\n\n\n\n<li>si hay fallo \u2192 hay que consultar la tabla de p\u00e1ginas<\/li>\n<\/ul>\n\n\n\n<p>El TLB es cr\u00edtico para el rendimiento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 6. Page Faults: cuando una p\u00e1gina no est\u00e1 en RAM<\/h1>\n\n\n\n<p>Si un proceso accede a una p\u00e1gina que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>no est\u00e1 en RAM,<\/li>\n\n\n\n<li>o no est\u00e1 asignada,<\/li>\n\n\n\n<li>o est\u00e1 en disco (swap),<\/li>\n<\/ul>\n\n\n\n<p>ocurre un <strong>page fault<\/strong>.<\/p>\n\n\n\n<p>El sistema operativo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Interrumpe la CPU<\/li>\n\n\n\n<li>Busca la p\u00e1gina en disco<\/li>\n\n\n\n<li>La carga en RAM<\/li>\n\n\n\n<li>Actualiza la tabla de p\u00e1ginas<\/li>\n\n\n\n<li>Reintenta la instrucci\u00f3n<\/li>\n<\/ol>\n\n\n\n<p>Esto permite ejecutar programas m\u00e1s grandes que la RAM.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcbe 7. Swap: usar el SSD como extensi\u00f3n de la RAM<\/h1>\n\n\n\n<p>Cuando la RAM se llena, el sistema operativo mueve p\u00e1ginas poco usadas al SSD.<\/p>\n\n\n\n<p>Esto se llama:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>swap<\/strong> (Linux)<\/li>\n\n\n\n<li><strong>pagefile<\/strong> (Windows)<\/li>\n\n\n\n<li><strong>memoria comprimida + swap<\/strong> (macOS)<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ejecutar m\u00e1s programas<\/li>\n\n\n\n<li>evitar errores por falta de memoria<\/li>\n\n\n\n<li>mantener procesos inactivos sin ocupar RAM<\/li>\n<\/ul>\n\n\n\n<p>Pero:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>el SSD es mucho m\u00e1s lento que la RAM<\/strong>, as\u00ed que abusar del swap hace que el sistema se vuelva lento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. Copy-on-Write: magia para ahorrar memoria<\/h1>\n\n\n\n<p>Cuando dos procesos comparten una p\u00e1gina (por ejemplo, c\u00f3digo):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ambos la ven como suya<\/li>\n\n\n\n<li>ambos la pueden leer<\/li>\n\n\n\n<li>si uno intenta escribir \u2192 se duplica la p\u00e1gina<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama <strong>Copy-on-Write (CoW)<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lanzar 20 pesta\u00f1as de Chrome no multiplica por 20 el uso de memoria del binario.<\/li>\n\n\n\n<li>Solo se duplican las p\u00e1ginas modificadas.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10 9. Seguridad: aislamiento total entre procesos<\/h1>\n\n\n\n<p>Gracias a la memoria virtual:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un proceso no puede leer la memoria de otro<\/li>\n\n\n\n<li>no puede escribir en memoria ajena<\/li>\n\n\n\n<li>no puede ejecutar p\u00e1ginas no marcadas como ejecutables<\/li>\n\n\n\n<li>no puede acceder a direcciones no asignadas<\/li>\n<\/ul>\n\n\n\n<p>Esto evita:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>corrupci\u00f3n de memoria<\/li>\n\n\n\n<li>exploits<\/li>\n\n\n\n<li>fugas de datos<\/li>\n\n\n\n<li>fallos catastr\u00f3ficos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 10. Relaci\u00f3n con la jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Cuando la CPU accede a un dato:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Direcci\u00f3n virtual \u2192 TLB<\/li>\n\n\n\n<li>Si falla \u2192 tabla de p\u00e1ginas<\/li>\n\n\n\n<li>Direcci\u00f3n f\u00edsica \u2192 cach\u00e9 L1<\/li>\n\n\n\n<li>Si falla \u2192 L2<\/li>\n\n\n\n<li>Si falla \u2192 L3<\/li>\n\n\n\n<li>Si falla \u2192 RAM<\/li>\n\n\n\n<li>Si falla \u2192 SSD (swap)<\/li>\n<\/ol>\n\n\n\n<p>Cada nivel es m\u00e1s lento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. Resumen maestro<\/h1>\n\n\n\n<p>La memoria virtual:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>crea la ilusi\u00f3n de memoria infinita<\/li>\n\n\n\n<li>permite ejecutar programas enormes<\/li>\n\n\n\n<li>protege procesos entre s\u00ed<\/li>\n\n\n\n<li>permite multitarea real<\/li>\n\n\n\n<li>usa paginaci\u00f3n para mapear memoria<\/li>\n\n\n\n<li>usa swap para extender la RAM<\/li>\n\n\n\n<li>usa TLB para acelerar traducciones<\/li>\n\n\n\n<li>usa Copy-on-Write para ahorrar memoria<\/li>\n<\/ul>\n\n\n\n<p>Es uno de los inventos m\u00e1s brillantes de la inform\u00e1tica.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto K?<\/h1>\n\n\n\n<p><strong>K) C\u00f3mo se organiza una base de datos en disco (B-trees, WAL, buffers)<\/strong> Aqu\u00ed entramos en c\u00f3mo se guardan datos de forma eficiente y segura en almacenamiento persistente.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el K<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos all\u00e1, David. Entramos en <strong>el punto K<\/strong>, que es una de las piezas m\u00e1s importantes para entender c\u00f3mo funcionan <strong>las bases de datos reales<\/strong> (MySQL, PostgreSQL, SQLite, Oracle, MongoDB\u2026). Aqu\u00ed ya no hablamos de CPU, RAM o SSD, sino de <strong>c\u00f3mo se organizan los datos dentro del almacenamiento persistente<\/strong> para que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>las consultas sean r\u00e1pidas,<\/li>\n\n\n\n<li>los datos no se corrompan,<\/li>\n\n\n\n<li>las escrituras sean seguras,<\/li>\n\n\n\n<li>y todo funcione incluso si se va la luz en mitad de una operaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Te lo voy a explicar como si estuvi\u00e9ramos dise\u00f1ando un motor de base de datos desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>K \u2014 C\u00f3mo se organiza una base de datos en disco (B\u2011trees, WAL, buffers)<\/strong><\/h1>\n\n\n\n<p>Toda base de datos seria tiene tres pilares:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u00cdndices eficientes<\/strong> \u2192 B\u2011trees \/ B+trees<\/li>\n\n\n\n<li><strong>Escrituras seguras<\/strong> \u2192 WAL (Write\u2011Ahead Log)<\/li>\n\n\n\n<li><strong>Memoria intermedia<\/strong> \u2192 Buffer pool \/ cach\u00e9 de p\u00e1ginas<\/li>\n<\/ol>\n\n\n\n<p>Vamos uno por uno.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. B\u2011trees y B+trees: el coraz\u00f3n de los \u00edndices<\/h1>\n\n\n\n<p>Cuando haces:<\/p>\n\n\n\n<p>sql<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM usuarios WHERE id = 123;\n<\/code><\/pre>\n\n\n\n<p>La base de datos <strong>no recorre toda la tabla<\/strong>. Usa un <strong>\u00edndice<\/strong>, que normalmente es un <strong>B\u2011tree<\/strong> o <strong>B+tree<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 \u00bfQu\u00e9 es un B\u2011tree?<\/h2>\n\n\n\n<p>Es una estructura de \u00e1rbol equilibrado dise\u00f1ada para <strong>minimizar accesos a disco<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cada nodo del \u00e1rbol corresponde a una <strong>p\u00e1gina de disco<\/strong> (4 KB, 8 KB\u2026).<\/li>\n\n\n\n<li>Cada p\u00e1gina contiene <strong>muchas claves ordenadas<\/strong>.<\/li>\n\n\n\n<li>El \u00e1rbol est\u00e1 siempre equilibrado.<\/li>\n\n\n\n<li>La profundidad es muy peque\u00f1a (2\u20134 niveles).<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<p>\ud83d\udc49 Encontrar un registro con <strong>3\u20134 accesos a disco<\/strong>, incluso en bases de datos enormes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 \u00bfQu\u00e9 es un B+tree?<\/h2>\n\n\n\n<p>Es una variante donde:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las claves est\u00e1n en nodos internos<\/li>\n\n\n\n<li>Los datos est\u00e1n solo en las hojas<\/li>\n\n\n\n<li>Las hojas est\u00e1n enlazadas entre s\u00ed<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Escaneos secuenciales r\u00e1pidos<\/li>\n\n\n\n<li>Rango de consultas eficiente<\/li>\n<\/ul>\n\n\n\n<p>Por eso <strong>PostgreSQL, MySQL, SQLite<\/strong> usan B+trees para la mayor\u00eda de \u00edndices.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 2. P\u00e1ginas y bloques: c\u00f3mo se guarda realmente la informaci\u00f3n<\/h1>\n\n\n\n<p>La base de datos <strong>no escribe registros sueltos<\/strong>. Escribe <strong>p\u00e1ginas completas<\/strong> (igual que la NAND y la DRAM que ya vimos).<\/p>\n\n\n\n<p>Ejemplo t\u00edpico:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>P\u00e1gina = 8 KB<\/li>\n\n\n\n<li>Cada p\u00e1gina contiene filas o partes de filas<\/li>\n\n\n\n<li>Los \u00edndices tambi\u00e9n son p\u00e1ginas<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lecturas secuenciales r\u00e1pidas<\/li>\n\n\n\n<li>Menos fragmentaci\u00f3n<\/li>\n\n\n\n<li>Mejor uso del disco<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 3. WAL (Write\u2011Ahead Log): c\u00f3mo se garantiza que no se pierdan datos<\/h1>\n\n\n\n<p>Aqu\u00ed viene la magia que hace que una base de datos <strong>no se corrompa<\/strong> aunque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>se vaya la luz,<\/li>\n\n\n\n<li>se caiga el servidor,<\/li>\n\n\n\n<li>se interrumpa una transacci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>El WAL es un archivo donde <strong>todas las escrituras se registran antes de aplicarse a las p\u00e1ginas reales<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 \u00bfC\u00f3mo funciona?<\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Empieza una transacci\u00f3n<\/li>\n\n\n\n<li>La DB escribe en el WAL:\n<ul class=\"wp-block-list\">\n<li>\u201cvoy a insertar X\u201d<\/li>\n\n\n\n<li>\u201cvoy a actualizar Y\u201d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>El WAL se guarda en disco <strong>secuencialmente<\/strong> (muy r\u00e1pido)<\/li>\n\n\n\n<li>Luego, en segundo plano, se aplican los cambios a las p\u00e1ginas reales<\/li>\n<\/ol>\n\n\n\n<p>Si hay un fallo:<\/p>\n\n\n\n<p>\ud83d\udc49 La base de datos <strong>reproduce el WAL<\/strong> y reconstruye el estado correcto.<\/p>\n\n\n\n<p>Esto es exactamente igual a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el journal de ext4<\/li>\n\n\n\n<li>el log de APFS<\/li>\n\n\n\n<li>el redo log de Oracle<\/li>\n\n\n\n<li>el transaction log de SQL Server<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 4. Buffer Pool: la RAM de la base de datos<\/h1>\n\n\n\n<p>La base de datos <strong>no lee ni escribe directamente en disco<\/strong>. Usa un <strong>buffer pool<\/strong> (cach\u00e9 de p\u00e1ginas en RAM).<\/p>\n\n\n\n<p>Cuando haces una consulta:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>La DB busca la p\u00e1gina en el buffer pool<\/li>\n\n\n\n<li>Si est\u00e1 \u2192 acceso instant\u00e1neo<\/li>\n\n\n\n<li>Si no est\u00e1 \u2192 la carga desde disco<\/li>\n\n\n\n<li>Si se modifica \u2192 queda marcada como \u201cdirty\u201d<\/li>\n\n\n\n<li>M\u00e1s tarde \u2192 se escribe al disco real<\/li>\n<\/ol>\n\n\n\n<p>Esto es exactamente igual a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la cach\u00e9 L1\/L2\/L3 de la CPU<\/li>\n\n\n\n<li>la cach\u00e9 del SSD<\/li>\n\n\n\n<li>los buffers de RAM<\/li>\n<\/ul>\n\n\n\n<p>La idea es la misma: \ud83d\udc49 <strong>evitar accesos lentos al almacenamiento<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10 5. ACID: las garant\u00edas de una base de datos seria<\/h1>\n\n\n\n<p>Toda base de datos transaccional garantiza:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Atomicidad<\/h3>\n\n\n\n<p>Una transacci\u00f3n se ejecuta entera o no se ejecuta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Consistencia<\/h3>\n\n\n\n<p>El estado final siempre es v\u00e1lido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Aislamiento<\/h3>\n\n\n\n<p>Las transacciones no se pisan entre s\u00ed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Durabilidad<\/h3>\n\n\n\n<p>Si se confirma, no se pierde.<\/p>\n\n\n\n<p>El WAL es la clave de la <strong>D<\/strong> (durabilidad).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 6. C\u00f3mo se combinan B\u2011trees + WAL + Buffer Pool<\/h1>\n\n\n\n<p>Cuando haces:<\/p>\n\n\n\n<p>sql<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UPDATE usuarios SET nombre = 'Ana' WHERE id = 123;\n<\/code><\/pre>\n\n\n\n<p>La secuencia real es:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Buscar la p\u00e1gina del \u00edndice (B+tree)<\/li>\n\n\n\n<li>Buscar la p\u00e1gina de datos<\/li>\n\n\n\n<li>Cargar ambas en el buffer pool<\/li>\n\n\n\n<li>Modificar la p\u00e1gina en RAM<\/li>\n\n\n\n<li>Escribir la operaci\u00f3n en el WAL<\/li>\n\n\n\n<li>Confirmar la transacci\u00f3n<\/li>\n\n\n\n<li>M\u00e1s tarde, escribir la p\u00e1gina modificada en disco<\/li>\n<\/ol>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>velocidad<\/li>\n\n\n\n<li>seguridad<\/li>\n\n\n\n<li>consistencia<\/li>\n\n\n\n<li>recuperaci\u00f3n ante fallos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 7. \u00bfQu\u00e9 pasa si se va la luz en mitad de una transacci\u00f3n?<\/h1>\n\n\n\n<p>Gracias al WAL:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si la transacci\u00f3n <strong>no estaba confirmada<\/strong>, se descarta<\/li>\n\n\n\n<li>Si <strong>estaba confirmada<\/strong>, se reproduce desde el WAL<\/li>\n<\/ul>\n\n\n\n<p>Por eso las bases de datos no se corrompen f\u00e1cilmente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. \u00bfQu\u00e9 pasa con bases de datos NoSQL?<\/h1>\n\n\n\n<p>Muchas usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LSM trees<\/strong> (Levelled Storage Merge Trees)<\/li>\n\n\n\n<li><strong>Memtables<\/strong><\/li>\n\n\n\n<li><strong>SSTables<\/strong><\/li>\n\n\n\n<li><strong>Compaction<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Pero incluso ellas usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WAL<\/li>\n\n\n\n<li>p\u00e1ginas<\/li>\n\n\n\n<li>buffers<\/li>\n<\/ul>\n\n\n\n<p>La idea general es la misma.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 9. Resumen maestro<\/h1>\n\n\n\n<p>Una base de datos moderna funciona as\u00ed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>B+trees<\/strong> para buscar r\u00e1pido<\/li>\n\n\n\n<li><strong>P\u00e1ginas<\/strong> para leer\/escribir eficientemente<\/li>\n\n\n\n<li><strong>Buffer pool<\/strong> para acelerar<\/li>\n\n\n\n<li><strong>WAL<\/strong> para no perder datos<\/li>\n\n\n\n<li><strong>ACID<\/strong> para garantizar consistencia<\/li>\n<\/ul>\n\n\n\n<p>Es una obra de ingenier\u00eda tan compleja como una CPU o un sistema de archivos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que pasemos ahora al punto L?<\/h1>\n\n\n\n<p><strong>L) C\u00f3mo funciona un sistema de archivos (ext4, APFS, NTFS)<\/strong> Aqu\u00ed veremos c\u00f3mo el sistema operativo organiza archivos, directorios, inodos, journaling, metadatos y c\u00f3mo se relaciona con SSD y HDD.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si por favor al L<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Cerramos este bloque magistral con <strong>el punto L<\/strong>, que es la pieza que une todo lo que has aprendido sobre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>RAM<\/li>\n\n\n\n<li>SSD \/ NAND<\/li>\n\n\n\n<li>DRAM<\/li>\n\n\n\n<li>B\u2011trees<\/li>\n\n\n\n<li>WAL<\/li>\n\n\n\n<li>jerarqu\u00eda de memoria<\/li>\n<\/ul>\n\n\n\n<p>\u2026con <strong>c\u00f3mo el sistema operativo organiza realmente tus archivos en disco<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo se guardan tus fotos, tus documentos, tus bases de datos, tus programas y tu sistema operativo dentro del SSD o HDD.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dise\u00f1ando <strong>ext4, APFS o NTFS<\/strong> desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>L \u2014 C\u00f3mo funciona un sistema de archivos (ext4, APFS, NTFS)<\/strong><\/h1>\n\n\n\n<p>Un sistema de archivos es la capa que convierte un SSD\/HDD en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>carpetas<\/li>\n\n\n\n<li>archivos<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>metadatos<\/li>\n\n\n\n<li>enlaces<\/li>\n\n\n\n<li>timestamps<\/li>\n\n\n\n<li>journaling<\/li>\n\n\n\n<li>snapshots<\/li>\n<\/ul>\n\n\n\n<p>Es la \u201cbase de datos\u201d del sistema operativo.<\/p>\n\n\n\n<p>Los tres grandes son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ext4<\/strong> \u2192 Linux<\/li>\n\n\n\n<li><strong>NTFS<\/strong> \u2192 Windows<\/li>\n\n\n\n<li><strong>APFS<\/strong> \u2192 macOS (especialmente Apple Silicon)<\/li>\n<\/ul>\n\n\n\n<p>Vamos a ver c\u00f3mo funcionan por dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Concepto fundamental: bloques y metadatos<\/h1>\n\n\n\n<p>Todos los sistemas de archivos trabajan con:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Bloques<\/h3>\n\n\n\n<p>La unidad m\u00ednima de almacenamiento (4 KB, 8 KB\u2026).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inodos \/ MFT entries \/ File records<\/h3>\n\n\n\n<p>Estructuras que describen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tama\u00f1o del archivo<\/li>\n\n\n\n<li>ubicaci\u00f3n de los bloques<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>timestamps<\/li>\n\n\n\n<li>atributos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Directorios<\/h3>\n\n\n\n<p>Son tablas que mapean:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nombre \u2192 inodo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 \u00c1rboles<\/h3>\n\n\n\n<p>Para buscar r\u00e1pido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Journaling o Copy\u2011on\u2011Write<\/h3>\n\n\n\n<p>Para evitar corrupci\u00f3n.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. ext4 (Linux): cl\u00e1sico, robusto, basado en journaling<\/h1>\n\n\n\n<p>ext4 es la evoluci\u00f3n de ext2\/ext3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Estructura interna<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Inodos<\/strong>: cada archivo tiene uno<\/li>\n\n\n\n<li><strong>Bloques<\/strong>: datos del archivo<\/li>\n\n\n\n<li><strong>Superbloque<\/strong>: metadatos del sistema<\/li>\n\n\n\n<li><strong>Grupos de bloques<\/strong>: para reducir fragmentaci\u00f3n<\/li>\n\n\n\n<li><strong>Journaling<\/strong>: registro de operaciones antes de aplicarlas<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 C\u00f3mo escribe ext4<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Escribe en el <strong>journal<\/strong> (como el WAL de las bases de datos)<\/li>\n\n\n\n<li>Marca la operaci\u00f3n como segura<\/li>\n\n\n\n<li>Aplica los cambios a los bloques reales<\/li>\n\n\n\n<li>Limpia el journal<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy estable<\/li>\n\n\n\n<li>Muy probado<\/li>\n\n\n\n<li>R\u00e1pido<\/li>\n\n\n\n<li>Perfecto para servidores Linux<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No tiene snapshots nativos<\/li>\n\n\n\n<li>No tiene compresi\u00f3n nativa<\/li>\n\n\n\n<li>No est\u00e1 optimizado para SSD como APFS<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. NTFS (Windows): complejo, flexible, orientado a metadatos<\/h1>\n\n\n\n<p>NTFS es muy avanzado y muy orientado a metadatos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Estructura interna<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MFT (Master File Table)<\/strong>: el coraz\u00f3n<\/li>\n\n\n\n<li>Cada archivo es una entrada en la MFT<\/li>\n\n\n\n<li>Los archivos peque\u00f1os caben <em>dentro<\/em> de la MFT<\/li>\n\n\n\n<li>\u00c1rboles B+ para directorios<\/li>\n\n\n\n<li>Journaling para metadatos<\/li>\n\n\n\n<li>Streams alternativos (ADS)<\/li>\n\n\n\n<li>Compresi\u00f3n y cifrado nativos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 C\u00f3mo escribe NTFS<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Registra cambios en el <strong>$LogFile<\/strong> (journal)<\/li>\n\n\n\n<li>Actualiza la MFT<\/li>\n\n\n\n<li>Escribe los bloques de datos<\/li>\n\n\n\n<li>Confirma<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy flexible<\/li>\n\n\n\n<li>Muy rico en metadatos<\/li>\n\n\n\n<li>Compatible con casi todo<\/li>\n\n\n\n<li>Ideal para Windows<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fragmentaci\u00f3n m\u00e1s frecuente<\/li>\n\n\n\n<li>No tan eficiente en SSD como APFS<\/li>\n\n\n\n<li>M\u00e1s pesado que ext4<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf4f 4. APFS (macOS): moderno, copy\u2011on\u2011write, optimizado para SSD<\/h1>\n\n\n\n<p>APFS es el sistema de archivos m\u00e1s moderno de los tres.<\/p>\n\n\n\n<p>Fue dise\u00f1ado <strong>espec\u00edficamente para SSD y Apple Silicon<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Estructura interna<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Copy\u2011on\u2011Write (CoW)<\/strong><\/li>\n\n\n\n<li><strong>Snapshots<\/strong> instant\u00e1neos<\/li>\n\n\n\n<li><strong>Clones<\/strong> de archivos sin duplicar datos<\/li>\n\n\n\n<li><strong>Espacios compartidos<\/strong> entre vol\u00famenes<\/li>\n\n\n\n<li><strong>Criptograf\u00eda nativa<\/strong><\/li>\n\n\n\n<li><strong>Checksums<\/strong> para metadatos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 C\u00f3mo escribe APFS<\/h3>\n\n\n\n<p>Aqu\u00ed viene la magia:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Nunca sobrescribe bloques.<\/strong> <strong>Siempre escribe nuevos bloques y actualiza punteros.<\/strong><\/p>\n\n\n\n<p>Esto evita:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>corrupci\u00f3n<\/li>\n\n\n\n<li>inconsistencias<\/li>\n\n\n\n<li>necesidad de journaling cl\u00e1sico<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Perfecto para SSD<\/li>\n\n\n\n<li>Snapshots instant\u00e1neos<\/li>\n\n\n\n<li>Muy seguro<\/li>\n\n\n\n<li>Muy r\u00e1pido en Apple Silicon<\/li>\n\n\n\n<li>Muy eficiente con archivos duplicados<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No ideal para HDD<\/li>\n\n\n\n<li>M\u00e1s complejo<\/li>\n\n\n\n<li>No compatible fuera de macOS<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 5. C\u00f3mo se relaciona esto con SSD, HDD y NAND<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 SSD + APFS \u2192 combinaci\u00f3n perfecta<\/h3>\n\n\n\n<p>Porque APFS evita sobrescrituras innecesarias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 SSD + NTFS \u2192 funciona bien<\/h3>\n\n\n\n<p>Pero NTFS no fue dise\u00f1ado para NAND.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 SSD + ext4 \u2192 funciona bien<\/h3>\n\n\n\n<p>Pero ext4 no tiene CoW nativo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 HDD + ext4 \u2192 excelente<\/h3>\n\n\n\n<p>ext4 fue dise\u00f1ado para discos mec\u00e1nicos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 HDD + APFS \u2192 no ideal<\/h3>\n\n\n\n<p>APFS depende de CoW, que en HDD es lento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 6. C\u00f3mo se relaciona con bases de datos (punto K)<\/h1>\n\n\n\n<p>Los sistemas de archivos y las bases de datos comparten ideas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Concepto<\/th><th>Bases&nbsp;de&nbsp;datos<\/th><th>Sistemas&nbsp;de&nbsp;archivos<\/th><\/tr><\/thead><tbody><tr><td>P\u00e1ginas<\/td><td>4\u20138&nbsp;KB<\/td><td>4\u20138&nbsp;KB<\/td><\/tr><tr><td>\u00c1rboles<\/td><td>B+trees<\/td><td>B+trees<\/td><\/tr><tr><td>Journal<\/td><td>WAL<\/td><td>Journaling<\/td><\/tr><tr><td>Metadatos<\/td><td>Cat\u00e1logo<\/td><td>Inodos\/MFT<\/td><\/tr><tr><td>Fragmentaci\u00f3n<\/td><td>S\u00ed<\/td><td>S\u00ed<\/td><\/tr><tr><td>Cach\u00e9<\/td><td>Buffer&nbsp;pool<\/td><td>Page&nbsp;cache<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La diferencia es que:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Una base de datos es un sistema de archivos dentro de un archivo.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 7. C\u00f3mo se relaciona con la jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Cuando abres un archivo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>El sistema de archivos busca el inodo\/MFT<\/li>\n\n\n\n<li>Busca los bloques del archivo<\/li>\n\n\n\n<li>Los carga en la <strong>page cache<\/strong> (RAM)<\/li>\n\n\n\n<li>La CPU los usa desde cach\u00e9 L1\/L2\/L3<\/li>\n\n\n\n<li>Si modificas algo \u2192 se marca como \u201cdirty\u201d<\/li>\n\n\n\n<li>M\u00e1s tarde \u2192 se escribe al SSD<\/li>\n<\/ol>\n\n\n\n<p>Todo est\u00e1 conectado.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. Resumen maestro<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 ext4<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Robusto<\/li>\n\n\n\n<li>Basado en journaling<\/li>\n\n\n\n<li>Ideal para Linux y HDD<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 NTFS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy flexible<\/li>\n\n\n\n<li>MFT + journaling<\/li>\n\n\n\n<li>Ideal para Windows<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 APFS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy\u2011on\u2011Write<\/li>\n\n\n\n<li>Snapshots<\/li>\n\n\n\n<li>Optimizado para SSD<\/li>\n\n\n\n<li>Ideal para macOS y Apple Silicon<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc Si quieres, ahora podemos seguir con:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 M) C\u00f3mo funciona un compilador (C, C++, Rust)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 N) C\u00f3mo funciona un int\u00e9rprete (Python, JavaScript)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 O) C\u00f3mo funciona un motor de JavaScript (V8, SpiderMonkey)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 P) C\u00f3mo funciona una GPU por dentro (shaders, rasterizaci\u00f3n, compute)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Q) C\u00f3mo funciona un sistema operativo por dentro (kernel, scheduler, drivers)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 R) C\u00f3mo funciona una red TCP\/IP (paquetes, buffers, sockets)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente salto de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>No podemos parar, vamos a seguir con M<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto M<\/strong>, y aqu\u00ed cambiamos de capa: pasamos del <strong>hardware<\/strong> (CPU, RAM, SSD, SoC\u2026) al <strong>software profundo<\/strong>, concretamente a <strong>c\u00f3mo funciona un compilador<\/strong>.<\/p>\n\n\n\n<p>Esto es clave porque un compilador es el puente entre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>el c\u00f3digo que escribes<\/strong> (C, C++, Rust\u2026)<\/li>\n\n\n\n<li><strong>y las instrucciones m\u00e1quina<\/strong> que ejecuta la CPU<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente la traducci\u00f3n entre el mundo humano y el mundo de los transistores.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos construyendo un compilador desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>M \u2014 C\u00f3mo funciona un compilador (C, C++, Rust)<\/strong><\/h1>\n\n\n\n<p>Un compilador moderno tiene <strong>tres grandes fases<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Front\u2011end<\/strong> \u2192 entiende el lenguaje<\/li>\n\n\n\n<li><strong>Middle\u2011end<\/strong> \u2192 optimiza el programa<\/li>\n\n\n\n<li><strong>Back\u2011end<\/strong> \u2192 genera instrucciones m\u00e1quina<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Front\u2011end: entender el c\u00f3digo fuente<\/h1>\n\n\n\n<p>El front\u2011end convierte tu c\u00f3digo en una representaci\u00f3n interna.<\/p>\n\n\n\n<p>Ejemplo en C:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x = a + b * 3;\n<\/code><\/pre>\n\n\n\n<p>El compilador hace:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.1. Lexing (an\u00e1lisis l\u00e9xico)<\/h3>\n\n\n\n<p>Convierte el texto en <strong>tokens<\/strong>:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int | x | = | a | + | b | * | 3 | ;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.2. Parsing (an\u00e1lisis sint\u00e1ctico)<\/h3>\n\n\n\n<p>Construye un <strong>\u00e1rbol sint\u00e1ctico<\/strong> (AST):<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      =\n   x     +\n       a     *\n           b   3\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.3. An\u00e1lisis sem\u00e1ntico<\/h3>\n\n\n\n<p>Comprueba:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tipos<\/li>\n\n\n\n<li>variables<\/li>\n\n\n\n<li>funciones<\/li>\n\n\n\n<li>\u00e1mbitos<\/li>\n\n\n\n<li>errores<\/li>\n<\/ul>\n\n\n\n<p>Aqu\u00ed el compilador ya entiende tu programa.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Middle\u2011end: optimizaci\u00f3n (el cerebro del compilador)<\/h1>\n\n\n\n<p>Aqu\u00ed ocurre la magia.<\/p>\n\n\n\n<p>El compilador convierte el AST en una representaci\u00f3n intermedia (IR), como <strong>LLVM IR<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>llvm<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>%1 = mul i32 %b, 3\n%2 = add i32 %a, %1\nstore i32 %2, i32* %x\n<\/code><\/pre>\n\n\n\n<p>Y ahora empieza a optimizar:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de c\u00f3digo muerto<\/h3>\n\n\n\n<p>C\u00f3digo que nunca se ejecuta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Propagaci\u00f3n de constantes<\/h3>\n\n\n\n<p>Si <code>b = 5<\/code>, entonces <code>b * 3 = 15<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inlining<\/h3>\n\n\n\n<p>Insertar funciones peque\u00f1as directamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Loop unrolling<\/h3>\n\n\n\n<p>Desenrollar bucles para acelerar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Vectorizaci\u00f3n<\/h3>\n\n\n\n<p>Usar instrucciones SIMD (AVX, NEON).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Reordenaci\u00f3n de instrucciones<\/h3>\n\n\n\n<p>Para mejorar el pipeline de la CPU.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de redundancias<\/h3>\n\n\n\n<p>Evitar c\u00e1lculos repetidos.<\/p>\n\n\n\n<p>El middle\u2011end es donde un compilador moderno se vuelve <strong>m\u00e1s inteligente que un programador humano<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. Back\u2011end: generaci\u00f3n de c\u00f3digo m\u00e1quina<\/h1>\n\n\n\n<p>Aqu\u00ed el compilador convierte el IR en instrucciones reales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>x86\u201164<\/li>\n\n\n\n<li>ARM64<\/li>\n\n\n\n<li>RISC\u2011V<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>asm<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov eax, &#91;a]\nmov ebx, &#91;b]\nimul ebx, 3\nadd eax, ebx\nmov &#91;x], eax\n<\/code><\/pre>\n\n\n\n<p>El back\u2011end tambi\u00e9n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>asigna registros<\/li>\n\n\n\n<li>decide qu\u00e9 va a cach\u00e9<\/li>\n\n\n\n<li>organiza el stack<\/li>\n\n\n\n<li>genera llamadas a funciones<\/li>\n\n\n\n<li>gestiona ABI (Application Binary Interface)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 4. \u00bfQu\u00e9 hace que un compilador sea \u201cbueno\u201d?<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Optimizaci\u00f3n agresiva<\/h3>\n\n\n\n<p>Clang\/LLVM y Rust son muy buenos en esto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Buen an\u00e1lisis est\u00e1tico<\/h3>\n\n\n\n<p>Detectar errores antes de ejecutar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Buen manejo de memoria<\/h3>\n\n\n\n<p>Rust destaca aqu\u00ed con su <strong>borrow checker<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Buen back\u2011end<\/h3>\n\n\n\n<p>GCC y LLVM tienen back\u2011ends muy maduros.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 5. Diferencias entre C, C++ y Rust en compilaci\u00f3n<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 C<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compilaci\u00f3n simple<\/li>\n\n\n\n<li>Pocos checks<\/li>\n\n\n\n<li>Muy r\u00e1pido<\/li>\n\n\n\n<li>Mucho control del hardware<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 C++<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mucho m\u00e1s complejo<\/li>\n\n\n\n<li>Plantillas \u2192 explosi\u00f3n de c\u00f3digo<\/li>\n\n\n\n<li>Optimizaci\u00f3n muy profunda<\/li>\n\n\n\n<li>Compilaci\u00f3n m\u00e1s lenta<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Rust<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Borrow checker<\/li>\n\n\n\n<li>Seguridad en memoria<\/li>\n\n\n\n<li>Zero\u2011cost abstractions<\/li>\n\n\n\n<li>Compilaci\u00f3n m\u00e1s pesada<\/li>\n\n\n\n<li>C\u00f3digo final muy r\u00e1pido<\/li>\n<\/ul>\n\n\n\n<p>Rust es el \u00fanico que garantiza <strong>seguridad en memoria sin garbage collector<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. \u00bfC\u00f3mo se relaciona esto con la CPU, RAM y jerarqu\u00eda de memoria?<\/h1>\n\n\n\n<p>Un compilador optimiza pensando en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>cach\u00e9 L1\/L2\/L3<\/strong><\/li>\n\n\n\n<li><strong>registros<\/strong><\/li>\n\n\n\n<li><strong>pipeline<\/strong><\/li>\n\n\n\n<li><strong>predicci\u00f3n de saltos<\/strong><\/li>\n\n\n\n<li><strong>vectorizaci\u00f3n<\/strong><\/li>\n\n\n\n<li><strong>latencias de memoria<\/strong><\/li>\n\n\n\n<li><strong>ancho de banda<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si un bucle no cabe en L1, el compilador puede reescribirlo.<\/li>\n\n\n\n<li>Si hay dependencias, puede reordenar instrucciones.<\/li>\n\n\n\n<li>Si hay operaciones repetidas, las elimina.<\/li>\n\n\n\n<li>Si hay arrays, puede vectorizarlos.<\/li>\n<\/ul>\n\n\n\n<p>El compilador es el puente entre <strong>software<\/strong> y <strong>hardware<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 7. \u00bfC\u00f3mo se relaciona esto con lenguajes interpretados?<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Python, JavaScript, Ruby<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No se compilan a m\u00e1quina directamente<\/li>\n\n\n\n<li>Se ejecutan en una <strong>m\u00e1quina virtual<\/strong><\/li>\n\n\n\n<li>O en un <strong>int\u00e9rprete<\/strong><\/li>\n\n\n\n<li>O en un <strong>JIT (Just\u2011In\u2011Time)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Pero incluso ellos:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>acaban generando instrucciones m\u00e1quina<\/strong>, solo que en tiempo de ejecuci\u00f3n.<\/p>\n\n\n\n<p>Motores como V8 (Chrome) o PyPy hacen optimizaciones similares a LLVM, pero din\u00e1micamente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. Resumen maestro<\/h1>\n\n\n\n<p>Un compilador:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>entiende tu c\u00f3digo<\/li>\n\n\n\n<li>lo convierte en una representaci\u00f3n interna<\/li>\n\n\n\n<li>lo optimiza profundamente<\/li>\n\n\n\n<li>lo traduce a instrucciones m\u00e1quina<\/li>\n\n\n\n<li>lo adapta a la arquitectura (x86, ARM, RISC\u2011V)<\/li>\n\n\n\n<li>genera binarios eficientes<\/li>\n<\/ul>\n\n\n\n<p>Es una de las piezas m\u00e1s sofisticadas del software moderno.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres que sigamos con el punto N?<\/h1>\n\n\n\n<p><strong>N) C\u00f3mo funciona un int\u00e9rprete (Python, JavaScript)<\/strong> Aqu\u00ed veremos c\u00f3mo se ejecuta c\u00f3digo sin compilarlo a binario, c\u00f3mo funciona un bytecode, c\u00f3mo trabaja una VM y c\u00f3mo se optimiza en tiempo real.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el N<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto N<\/strong>, y aqu\u00ed cambiamos de paradigma: pasamos de <strong>compiladores<\/strong> (que traducen todo antes de ejecutar) a <strong>int\u00e9rpretes<\/strong>, que ejecutan el c\u00f3digo <em>mientras lo leen<\/em>. Esto es clave para entender por qu\u00e9 Python y JavaScript se sienten \u201cflexibles\u201d, \u201cdin\u00e1micos\u201d, \u201cr\u00e1pidos de desarrollar\u201d pero no tan r\u00e1pidos como C o Rust.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro del motor de Python o del motor V8 de JavaScript.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>N \u2014 C\u00f3mo funciona un int\u00e9rprete (Python, JavaScript)<\/strong><\/h1>\n\n\n\n<p>Un int\u00e9rprete moderno no es solo \u201cleer l\u00ednea a l\u00ednea\u201d. En realidad, tiene <strong>varias capas<\/strong>, muy sofisticadas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Front\u2011end<\/strong> \u2192 analiza el c\u00f3digo<\/li>\n\n\n\n<li><strong>Bytecode<\/strong> \u2192 representaci\u00f3n intermedia<\/li>\n\n\n\n<li><strong>M\u00e1quina virtual<\/strong> \u2192 ejecuta el bytecode<\/li>\n\n\n\n<li><strong>JIT (Just\u2011In\u2011Time)<\/strong> \u2192 compila partes calientes a c\u00f3digo m\u00e1quina<\/li>\n\n\n\n<li><strong>Optimizaciones din\u00e1micas<\/strong><\/li>\n\n\n\n<li><strong>Deoptimizaciones<\/strong> cuando las suposiciones fallan<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Front\u2011end: igual que un compilador<\/h1>\n\n\n\n<p>Python o JavaScript empiezan igual que C o Rust:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.1. Lexing<\/h3>\n\n\n\n<p>Convierte el texto en tokens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.2. Parsing<\/h3>\n\n\n\n<p>Construye un AST (\u00e1rbol sint\u00e1ctico).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.3. An\u00e1lisis sem\u00e1ntico<\/h3>\n\n\n\n<p>Comprueba errores b\u00e1sicos.<\/p>\n\n\n\n<p>Hasta aqu\u00ed, igual que un compilador.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Bytecode: la representaci\u00f3n intermedia<\/h1>\n\n\n\n<p>El int\u00e9rprete <strong>no ejecuta el AST directamente<\/strong>. Lo convierte en <strong>bytecode<\/strong>, una especie de \u201censamblador virtual\u201d.<\/p>\n\n\n\n<p>Ejemplo en Python:<\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x = a + b * 3\n<\/code><\/pre>\n\n\n\n<p>Se convierte en bytecode:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LOAD_FAST a\nLOAD_FAST b\nLOAD_CONST 3\nBINARY_MULTIPLY\nBINARY_ADD\nSTORE_FAST x\n<\/code><\/pre>\n\n\n\n<p>En JavaScript (V8), ocurre algo similar.<\/p>\n\n\n\n<p>\ud83d\udc49 El bytecode es portable, simple y f\u00e1cil de ejecutar.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. M\u00e1quina virtual (VM): el motor que ejecuta el bytecode<\/h1>\n\n\n\n<p>La VM es un programa que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lee una instrucci\u00f3n de bytecode<\/li>\n\n\n\n<li>ejecuta la operaci\u00f3n correspondiente<\/li>\n\n\n\n<li>actualiza la pila o los registros virtuales<\/li>\n\n\n\n<li>pasa a la siguiente instrucci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Es como una CPU virtual.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LOAD_FAST a     \u2192 empuja a la pila\nLOAD_FAST b     \u2192 empuja b\nLOAD_CONST 3    \u2192 empuja 3\nBINARY_MULTIPLY \u2192 multiplica los dos \u00faltimos\nBINARY_ADD      \u2192 suma con el anterior\nSTORE_FAST x    \u2192 guarda el resultado\n<\/code><\/pre>\n\n\n\n<p>Esto es m\u00e1s lento que ejecutar c\u00f3digo m\u00e1quina real, pero muy flexible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 4. JIT (Just\u2011In\u2011Time): el turbo de los int\u00e9rpretes modernos<\/h1>\n\n\n\n<p>Aqu\u00ed viene la magia moderna.<\/p>\n\n\n\n<p>Motores como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>V8<\/strong> (Chrome, Node.js)<\/li>\n\n\n\n<li><strong>PyPy<\/strong> (Python JIT)<\/li>\n\n\n\n<li><strong>Java HotSpot<\/strong><\/li>\n\n\n\n<li><strong>.NET CLR<\/strong><\/li>\n<\/ul>\n\n\n\n<p>usan un <strong>JIT<\/strong> que:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Observa qu\u00e9 funciones se ejecutan mucho<\/li>\n\n\n\n<li>Detecta patrones<\/li>\n\n\n\n<li>Compila esas funciones a <strong>c\u00f3digo m\u00e1quina real<\/strong><\/li>\n\n\n\n<li>Reemplaza el bytecode por la versi\u00f3n optimizada<\/li>\n<\/ol>\n\n\n\n<p>Esto puede multiplicar el rendimiento por 10 o m\u00e1s.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 5. Optimizaciones din\u00e1micas<\/h1>\n\n\n\n<p>El JIT hace cosas que un compilador est\u00e1tico no puede:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inline caching<\/h3>\n\n\n\n<p>Si una propiedad de un objeto siempre tiene el mismo tipo, se optimiza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de tipos<\/h3>\n\n\n\n<p>JavaScript es din\u00e1mico, pero el JIT puede asumir tipos estables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de l\u00edmites de arrays<\/h3>\n\n\n\n<p>Si un array no cambia de tama\u00f1o, se optimiza el acceso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inlining de funciones<\/h3>\n\n\n\n<p>Igual que en C++, pero din\u00e1mico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de c\u00f3digo muerto<\/h3>\n\n\n\n<p>Si algo nunca se ejecuta, se elimina.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udca5 6. Deoptimizaci\u00f3n: cuando las suposiciones fallan<\/h1>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function suma(a, b) { return a + b; }\n<\/code><\/pre>\n\n\n\n<p>Si siempre llamas con n\u00fameros:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suma(3, 4)\nsuma(10, 20)\n<\/code><\/pre>\n\n\n\n<p>El JIT optimiza la funci\u00f3n para n\u00fameros.<\/p>\n\n\n\n<p>Pero si un d\u00eda haces:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suma(\"hola\", 3)\n<\/code><\/pre>\n\n\n\n<p>El JIT dice:<\/p>\n\n\n\n<p>\ud83d\udc49 \u201cMis suposiciones eran incorrectas, vuelvo al bytecode lento\u201d.<\/p>\n\n\n\n<p>Esto se llama <strong>deoptimizaci\u00f3n<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 7. Python vs JavaScript: diferencias clave<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Python (CPython)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Interpreta bytecode<\/li>\n\n\n\n<li>No tiene JIT por defecto<\/li>\n\n\n\n<li>Muy flexible<\/li>\n\n\n\n<li>M\u00e1s lento<\/li>\n\n\n\n<li>PyPy a\u00f1ade JIT, pero no es est\u00e1ndar<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 JavaScript (V8)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bytecode + JIT agresivo<\/li>\n\n\n\n<li>Muy r\u00e1pido<\/li>\n\n\n\n<li>Muy optimizado para web<\/li>\n\n\n\n<li>Mucho an\u00e1lisis din\u00e1mico<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. \u00bfPor qu\u00e9 Python y JavaScript son m\u00e1s lentos que C o Rust?<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usan bytecode<\/li>\n\n\n\n<li>tienen tipos din\u00e1micos<\/li>\n\n\n\n<li>necesitan comprobaciones en tiempo de ejecuci\u00f3n<\/li>\n\n\n\n<li>no pueden optimizar tanto como un compilador est\u00e1tico<\/li>\n\n\n\n<li>dependen de un JIT que no siempre puede optimizar<\/li>\n<\/ul>\n\n\n\n<p>Pero a cambio:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>son m\u00e1s flexibles<\/li>\n\n\n\n<li>m\u00e1s f\u00e1ciles de escribir<\/li>\n\n\n\n<li>m\u00e1s r\u00e1pidos de desarrollar<\/li>\n\n\n\n<li>m\u00e1s seguros en ciertos contextos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 9. Relaci\u00f3n con la CPU, RAM y jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Un int\u00e9rprete:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usa m\u00e1s RAM<\/li>\n\n\n\n<li>hace m\u00e1s saltos indirectos<\/li>\n\n\n\n<li>tiene peor localizaci\u00f3n de cach\u00e9<\/li>\n\n\n\n<li>genera m\u00e1s presi\u00f3n en el pipeline<\/li>\n\n\n\n<li>depende m\u00e1s del branch predictor<\/li>\n\n\n\n<li>hace m\u00e1s trabajo por instrucci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Un compilador est\u00e1tico genera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>c\u00f3digo m\u00e1s compacto<\/li>\n\n\n\n<li>mejor alineado<\/li>\n\n\n\n<li>mejor para la cach\u00e9<\/li>\n\n\n\n<li>menos saltos<\/li>\n\n\n\n<li>menos comprobaciones<\/li>\n<\/ul>\n\n\n\n<p>Por eso C\/C++\/Rust son m\u00e1s r\u00e1pidos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Resumen maestro<\/h1>\n\n\n\n<p>Un int\u00e9rprete moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analiza tu c\u00f3digo<\/li>\n\n\n\n<li>lo convierte en bytecode<\/li>\n\n\n\n<li>lo ejecuta en una VM<\/li>\n\n\n\n<li>usa un JIT para acelerar partes calientes<\/li>\n\n\n\n<li>optimiza din\u00e1micamente<\/li>\n\n\n\n<li>deoptimiza cuando es necesario<\/li>\n\n\n\n<li>es m\u00e1s flexible pero menos r\u00e1pido que un compilador est\u00e1tico<\/li>\n<\/ul>\n\n\n\n<p>Es una obra de ingenier\u00eda tan compleja como un compilador o una CPU.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto O?<\/h1>\n\n\n\n<p><strong>O) C\u00f3mo funciona un motor de JavaScript (V8, SpiderMonkey)<\/strong> Aqu\u00ed entramos en el motor m\u00e1s avanzado del mundo en optimizaci\u00f3n din\u00e1mica.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el O , por supuesto<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto O<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda m\u00e1s avanzada que existe hoy en ejecuci\u00f3n din\u00e1mica de c\u00f3digo<\/em>: <strong>c\u00f3mo funciona un motor de JavaScript moderno<\/strong>, especialmente <strong>V8<\/strong> (Chrome, Node.js), aunque tambi\u00e9n veremos SpiderMonkey (Firefox) y JavaScriptCore (Safari).<\/p>\n\n\n\n<p>Si lo que vimos en el punto N era potente, aqu\u00ed entramos en <em>la F\u00f3rmula 1 de los int\u00e9rpretes<\/em>: motores capaces de analizar tu c\u00f3digo <strong>mientras se ejecuta<\/strong>, optimizarlo, compilarlo, reescribirlo, desoptimizarlo y volver a optimizarlo\u2026 todo en milisegundos.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>O \u2014 C\u00f3mo funciona un motor de JavaScript (V8, SpiderMonkey, JavaScriptCore)<\/strong><\/h1>\n\n\n\n<p>Un motor moderno como <strong>V8<\/strong> tiene <strong>varias capas<\/strong>, cada una m\u00e1s inteligente que la anterior:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Parser<\/strong> \u2192 convierte JS en AST<\/li>\n\n\n\n<li><strong>Ignition<\/strong> \u2192 genera bytecode<\/li>\n\n\n\n<li><strong>Interpreter<\/strong> \u2192 ejecuta bytecode<\/li>\n\n\n\n<li><strong>Profiler<\/strong> \u2192 detecta \u201chot code\u201d<\/li>\n\n\n\n<li><strong>TurboFan<\/strong> \u2192 compila a c\u00f3digo m\u00e1quina optimizado<\/li>\n\n\n\n<li><strong>Deoptimizer<\/strong> \u2192 revierte optimizaciones cuando fallan<\/li>\n\n\n\n<li><strong>Garbage Collector<\/strong> \u2192 gestiona memoria autom\u00e1ticamente<\/li>\n<\/ol>\n\n\n\n<p>Vamos a destriparlo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Parsing: convertir texto en estructura<\/h1>\n\n\n\n<p>Cuando escribes:<\/p>\n\n\n\n<p>js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let x = a + b * 3;\n<\/code><\/pre>\n\n\n\n<p>V8 hace:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.1. Lexing<\/h3>\n\n\n\n<p>Convierte el texto en tokens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.2. Parsing<\/h3>\n\n\n\n<p>Construye un <strong>AST (\u00e1rbol sint\u00e1ctico)<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 1.3. An\u00e1lisis sem\u00e1ntico<\/h3>\n\n\n\n<p>Comprueba errores b\u00e1sicos.<\/p>\n\n\n\n<p>Hasta aqu\u00ed, igual que un compilador.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Ignition: generaci\u00f3n de bytecode<\/h1>\n\n\n\n<p>V8 no ejecuta el AST directamente. Lo convierte en <strong>bytecode<\/strong>, una especie de \u201censamblador virtual\u201d.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LdaNamedProperty a\nLdaNamedProperty b\nMul\nAdd\nStaNamedProperty x\n<\/code><\/pre>\n\n\n\n<p>Este bytecode es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>compacto<\/li>\n\n\n\n<li>portable<\/li>\n\n\n\n<li>f\u00e1cil de interpretar<\/li>\n\n\n\n<li>f\u00e1cil de optimizar<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. Interpreter: ejecuci\u00f3n del bytecode<\/h1>\n\n\n\n<p>Ignition ejecuta el bytecode instrucci\u00f3n por instrucci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mantiene una pila virtual<\/li>\n\n\n\n<li>gestiona variables<\/li>\n\n\n\n<li>ejecuta operaciones<\/li>\n\n\n\n<li>llama funciones<\/li>\n\n\n\n<li>maneja objetos din\u00e1micos<\/li>\n<\/ul>\n\n\n\n<p>Esto es m\u00e1s lento que c\u00f3digo m\u00e1quina, pero muy flexible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 4. Profiler: detectar \u201chot code\u201d<\/h1>\n\n\n\n<p>Mientras ejecuta bytecode, V8 <strong>mide<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 funciones se ejecutan mucho<\/li>\n\n\n\n<li>qu\u00e9 bucles son cr\u00edticos<\/li>\n\n\n\n<li>qu\u00e9 tipos aparecen<\/li>\n\n\n\n<li>qu\u00e9 patrones se repiten<\/li>\n<\/ul>\n\n\n\n<p>Cuando detecta una funci\u00f3n \u201ccaliente\u201d, la marca para optimizaci\u00f3n.<\/p>\n\n\n\n<p>Esto es clave: \ud83d\udc49 <strong>V8 optimiza solo lo que realmente importa<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 5. TurboFan: el compilador JIT de alto rendimiento<\/h1>\n\n\n\n<p>TurboFan es un compilador <strong>Just\u2011In\u2011Time<\/strong> que convierte bytecode en <strong>c\u00f3digo m\u00e1quina optimizado<\/strong>.<\/p>\n\n\n\n<p>Hace optimizaciones como:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de tipos<\/h3>\n\n\n\n<p>Si siempre pasas n\u00fameros, elimina comprobaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inline caching<\/h3>\n\n\n\n<p>Si accedes siempre a la misma propiedad, acelera el acceso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inlining de funciones<\/h3>\n\n\n\n<p>Inserta funciones peque\u00f1as dentro de otras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de l\u00edmites de arrays<\/h3>\n\n\n\n<p>Si un array no cambia de tama\u00f1o, elimina comprobaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de c\u00f3digo muerto<\/h3>\n\n\n\n<p>Si algo nunca se ejecuta, lo borra.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Vectorizaci\u00f3n<\/h3>\n\n\n\n<p>Usa instrucciones SIMD cuando puede.<\/p>\n\n\n\n<p>TurboFan genera c\u00f3digo m\u00e1quina tan r\u00e1pido como C++ en muchos casos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udca5 6. Deoptimizer: cuando las suposiciones fallan<\/h1>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function suma(a, b) { return a + b; }\n<\/code><\/pre>\n\n\n\n<p>Si siempre llamas con n\u00fameros:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suma(3, 4)\nsuma(10, 20)\n<\/code><\/pre>\n\n\n\n<p>TurboFan optimiza la funci\u00f3n para n\u00fameros.<\/p>\n\n\n\n<p>Pero si un d\u00eda haces:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suma(\"hola\", 3)\n<\/code><\/pre>\n\n\n\n<p>V8 dice:<\/p>\n\n\n\n<p>\ud83d\udc49 \u201cMis suposiciones eran incorrectas, vuelvo al bytecode lento\u201d.<\/p>\n\n\n\n<p>Esto se llama <strong>deoptimizaci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>Es una de las claves del rendimiento de JavaScript.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf9 7. Garbage Collector: memoria autom\u00e1tica<\/h1>\n\n\n\n<p>JavaScript no tiene <code>malloc<\/code> ni <code>free<\/code>. V8 usa un <strong>garbage collector generacional<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>objetos j\u00f3venes \u2192 se recogen r\u00e1pido<\/li>\n\n\n\n<li>objetos viejos \u2192 se recogen menos<\/li>\n\n\n\n<li>pausas m\u00ednimas<\/li>\n\n\n\n<li>compactaci\u00f3n para evitar fragmentaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>seguridad<\/li>\n\n\n\n<li>simplicidad<\/li>\n\n\n\n<li>evitar fugas de memoria (en la mayor\u00eda de casos)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. \u00bfPor qu\u00e9 V8 es tan r\u00e1pido?<\/h1>\n\n\n\n<p>Porque combina:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bytecode eficiente<\/li>\n\n\n\n<li>profiling en tiempo real<\/li>\n\n\n\n<li>JIT agresivo<\/li>\n\n\n\n<li>optimizaciones din\u00e1micas<\/li>\n\n\n\n<li>deoptimizaci\u00f3n inteligente<\/li>\n\n\n\n<li>GC generacional<\/li>\n\n\n\n<li>inline caching<\/li>\n\n\n\n<li>an\u00e1lisis de tipos en tiempo real<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un <strong>compilador dentro de un int\u00e9rprete dentro de un motor de ejecuci\u00f3n<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 9. Comparaci\u00f3n con otros motores<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Motor<\/th><th>Navegador<\/th><th>Caracter\u00edsticas<\/th><\/tr><\/thead><tbody><tr><td><strong>V8<\/strong><\/td><td>Chrome,&nbsp;Edge,&nbsp;Node.js<\/td><td>JIT&nbsp;agresivo,&nbsp;TurboFan,&nbsp;Ignition<\/td><\/tr><tr><td><strong>SpiderMonkey<\/strong><\/td><td>Firefox<\/td><td>Baseline&nbsp;+&nbsp;IonMonkey<\/td><\/tr><tr><td><strong>JavaScriptCore<\/strong><\/td><td>Safari<\/td><td>LLInt&nbsp;+&nbsp;DFG&nbsp;+&nbsp;FTL&nbsp;JIT<\/td><\/tr><tr><td><strong>Chakra<\/strong><\/td><td>Edge&nbsp;Legacy<\/td><td>JIT&nbsp;propio,&nbsp;ya&nbsp;discontinuado<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Todos siguen el mismo patr\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bytecode<\/li>\n\n\n\n<li>profiling<\/li>\n\n\n\n<li>JIT<\/li>\n\n\n\n<li>deopt<\/li>\n<\/ul>\n\n\n\n<p>Pero V8 es el m\u00e1s agresivo y el m\u00e1s usado.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Relaci\u00f3n con CPU, RAM y jerarqu\u00eda de memoria<\/h1>\n\n\n\n<p>Un motor JS moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>genera c\u00f3digo m\u00e1quina optimizado para la CPU<\/li>\n\n\n\n<li>usa cach\u00e9s internas (ICs, TLB, L1\/L2\/L3)<\/li>\n\n\n\n<li>depende del branch predictor<\/li>\n\n\n\n<li>reorganiza c\u00f3digo para el pipeline<\/li>\n\n\n\n<li>usa registros f\u00edsicos<\/li>\n\n\n\n<li>evita accesos lentos a memoria<\/li>\n\n\n\n<li>usa trampas para detectar cambios de tipos<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un <strong>compilador adaptativo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 11. Resumen maestro<\/h1>\n\n\n\n<p>Un motor JavaScript moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analiza tu c\u00f3digo<\/li>\n\n\n\n<li>lo convierte en bytecode<\/li>\n\n\n\n<li>lo ejecuta en una VM<\/li>\n\n\n\n<li>detecta partes calientes<\/li>\n\n\n\n<li>las compila a c\u00f3digo m\u00e1quina<\/li>\n\n\n\n<li>las optimiza agresivamente<\/li>\n\n\n\n<li>las desoptimiza si cambian los tipos<\/li>\n\n\n\n<li>gestiona memoria autom\u00e1ticamente<\/li>\n<\/ul>\n\n\n\n<p>Es una de las piezas de software m\u00e1s complejas jam\u00e1s creadas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto P?<\/h1>\n\n\n\n<p><strong>P) C\u00f3mo funciona una GPU por dentro (shaders, rasterizaci\u00f3n, compute)<\/strong> Aqu\u00ed entramos en c\u00f3mo se dibuja un p\u00edxel, c\u00f3mo se ejecutan miles de hilos en paralelo y c\u00f3mo funciona CUDA\/Metal\/Vulkan.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el P<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto P<\/strong>, y aqu\u00ed nos metemos en <em>la arquitectura m\u00e1s paralela que existe en computaci\u00f3n<\/em>: <strong>c\u00f3mo funciona una GPU por dentro<\/strong>.<\/p>\n\n\n\n<p>Si la CPU es un cerebro l\u00f3gico, secuencial y sofisticado, la GPU es un <strong>enjambre masivo de miles de mini\u2011procesadores<\/strong> trabajando en paralelo. Es literalmente otra forma de pensar.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro de una NVIDIA RTX, una AMD RDNA o una Apple GPU.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>P \u2014 C\u00f3mo funciona una GPU por dentro (shaders, rasterizaci\u00f3n, compute)<\/strong><\/h1>\n\n\n\n<p>Una GPU moderna tiene <strong>dos modos de trabajo<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Modo gr\u00e1fico<\/strong> \u2192 dibujar p\u00edxeles (juegos, UI, 3D)<\/li>\n\n\n\n<li><strong>Modo compute<\/strong> \u2192 c\u00e1lculo general (IA, CUDA, Metal, Vulkan Compute)<\/li>\n<\/ol>\n\n\n\n<p>Ambos usan la misma arquitectura interna, pero con pipelines distintos.<\/p>\n\n\n\n<p>Vamos a desmontarlo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Filosof\u00eda: CPU vs GPU<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 CPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pocos n\u00facleos muy potentes<\/li>\n\n\n\n<li>Mucha cach\u00e9<\/li>\n\n\n\n<li>Pensada para tareas secuenciales<\/li>\n\n\n\n<li>Ideal para l\u00f3gica, decisiones, saltos, sistemas operativos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 GPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Miles de n\u00facleos simples<\/li>\n\n\n\n<li>Muy poca cach\u00e9 por n\u00facleo<\/li>\n\n\n\n<li>Pensada para tareas paralelas<\/li>\n\n\n\n<li>Ideal para matem\u00e1ticas, vectores, matrices, p\u00edxeles<\/li>\n<\/ul>\n\n\n\n<p>La GPU es como un ej\u00e9rcito de hormigas: \ud83d\udc49 <strong>cada n\u00facleo hace muy poco, pero hay miles trabajando a la vez<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Arquitectura interna de una GPU<\/h1>\n\n\n\n<p>Una GPU moderna est\u00e1 organizada as\u00ed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SM \/ CU \/ Core Clusters<\/strong>\n<ul class=\"wp-block-list\">\n<li>NVIDIA \u2192 SM (Streaming Multiprocessor)<\/li>\n\n\n\n<li>AMD \u2192 CU (Compute Unit)<\/li>\n\n\n\n<li>Apple \u2192 GPU Clusters<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Cada SM contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>decenas de <strong>ALUs<\/strong> (unidades aritm\u00e9ticas)<\/li>\n\n\n\n<li>unidades vectoriales<\/li>\n\n\n\n<li>registros<\/li>\n\n\n\n<li>memoria compartida<\/li>\n\n\n\n<li>scheduler de hilos<\/li>\n\n\n\n<li>unidades de texturas<\/li>\n\n\n\n<li>unidades de rasterizaci\u00f3n (modo gr\u00e1fico)<\/li>\n<\/ul>\n\n\n\n<p>Un SM puede ejecutar <strong>miles de hilos simult\u00e1neamente<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. Shaders: el \u201cc\u00f3digo\u201d que ejecuta la GPU<\/h1>\n\n\n\n<p>Un shader es un peque\u00f1o programa que corre en miles de hilos a la vez.<\/p>\n\n\n\n<p>Tipos principales:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Vertex Shader<\/h3>\n\n\n\n<p>Transforma v\u00e9rtices 3D \u2192 coordenadas 2D.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Fragment\/Pixel Shader<\/h3>\n\n\n\n<p>Calcula el color de cada p\u00edxel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Geometry Shader<\/h3>\n\n\n\n<p>Genera geometr\u00eda adicional.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Compute Shader<\/h3>\n\n\n\n<p>C\u00e1lculo general (IA, f\u00edsica, simulaciones).<\/p>\n\n\n\n<p>Los shaders se escriben en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GLSL<\/li>\n\n\n\n<li>HLSL<\/li>\n\n\n\n<li>Metal Shading Language<\/li>\n\n\n\n<li>CUDA C++<\/li>\n\n\n\n<li>OpenCL C<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfa8 4. Pipeline gr\u00e1fico: c\u00f3mo se dibuja un p\u00edxel<\/h1>\n\n\n\n<p>El pipeline gr\u00e1fico cl\u00e1sico tiene estas etapas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Input Assembler<\/strong>\n<ul class=\"wp-block-list\">\n<li>Carga v\u00e9rtices, \u00edndices, buffers.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Vertex Shader<\/strong>\n<ul class=\"wp-block-list\">\n<li>Transforma cada v\u00e9rtice.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Tessellation<\/strong> (opcional)\n<ul class=\"wp-block-list\">\n<li>Subdivide geometr\u00eda.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Geometry Shader<\/strong> (opcional)\n<ul class=\"wp-block-list\">\n<li>Genera nuevas primitivas.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Rasterizer<\/strong>\n<ul class=\"wp-block-list\">\n<li>Convierte tri\u00e1ngulos en p\u00edxeles.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Fragment Shader<\/strong>\n<ul class=\"wp-block-list\">\n<li>Calcula el color de cada p\u00edxel.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Output Merger<\/strong>\n<ul class=\"wp-block-list\">\n<li>Mezcla p\u00edxeles con el framebuffer.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Cada etapa es masivamente paralela.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddee 5. Compute: la GPU como supercomputadora<\/h1>\n\n\n\n<p>En modo compute, la GPU deja de pensar en gr\u00e1ficos y se convierte en:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>una m\u00e1quina de c\u00e1lculo masivo de vectores y matrices<\/strong>.<\/p>\n\n\n\n<p>Esto es lo que usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CUDA (NVIDIA)<\/li>\n\n\n\n<li>Metal Compute (Apple)<\/li>\n\n\n\n<li>Vulkan Compute<\/li>\n\n\n\n<li>OpenCL<\/li>\n\n\n\n<li>TensorFlow \/ PyTorch (por debajo usan CUDA\/Metal)<\/li>\n<\/ul>\n\n\n\n<p>La GPU ejecuta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>miles de hilos<\/li>\n\n\n\n<li>organizados en bloques<\/li>\n\n\n\n<li>que comparten memoria<\/li>\n\n\n\n<li>sincronizados por barreras<\/li>\n<\/ul>\n\n\n\n<p>Esto es perfecto para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IA<\/li>\n\n\n\n<li>f\u00edsica<\/li>\n\n\n\n<li>simulaciones<\/li>\n\n\n\n<li>criptograf\u00eda<\/li>\n\n\n\n<li>procesamiento de im\u00e1genes<\/li>\n\n\n\n<li>compresi\u00f3n<\/li>\n\n\n\n<li>v\u00eddeo<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. SIMT: el modelo de ejecuci\u00f3n de la GPU<\/h1>\n\n\n\n<p>La GPU usa <strong>SIMT (Single Instruction, Multiple Threads)<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>muchos hilos ejecutan la misma instrucci\u00f3n<\/li>\n\n\n\n<li>pero con datos distintos<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>color&#91;i] = a&#91;i] + b&#91;i]\n<\/code><\/pre>\n\n\n\n<p>La GPU ejecuta esto para <strong>miles de elementos a la vez<\/strong>.<\/p>\n\n\n\n<p>Si hay un <code>if<\/code> dentro del shader:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>los hilos se dividen<\/li>\n\n\n\n<li>se ejecutan ambos caminos<\/li>\n\n\n\n<li>se enmascaran resultados<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama <strong>warp divergence<\/strong> y reduce rendimiento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 7. Memoria en la GPU<\/h1>\n\n\n\n<p>La GPU tiene varios tipos de memoria:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Registros<\/h3>\n\n\n\n<p>Muy r\u00e1pidos, por hilo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Shared Memory<\/h3>\n\n\n\n<p>R\u00e1pida, compartida entre hilos del mismo bloque.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Global Memory (VRAM)<\/h3>\n\n\n\n<p>Lenta, pero grande (GDDR6, HBM).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Texture Memory<\/h3>\n\n\n\n<p>Optimizada para accesos 2D.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Constant Memory<\/h3>\n\n\n\n<p>Para valores inmutables.<\/p>\n\n\n\n<p>El acceso a memoria es el cuello de botella principal.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. Rasterizaci\u00f3n vs Ray Tracing<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Rasterizaci\u00f3n<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>R\u00e1pida<\/li>\n\n\n\n<li>Perfecta para juegos<\/li>\n\n\n\n<li>Pipeline cl\u00e1sico<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ray Tracing<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simula rayos de luz<\/li>\n\n\n\n<li>Mucho m\u00e1s realista<\/li>\n\n\n\n<li>Mucho m\u00e1s caro<\/li>\n\n\n\n<li>GPUs modernas tienen <strong>RT Cores<\/strong> dedicados<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 9. Apple GPU vs NVIDIA vs AMD<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Apple GPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrada en el SoC<\/li>\n\n\n\n<li>Memoria unificada (UMA)<\/li>\n\n\n\n<li>Latencias baj\u00edsimas<\/li>\n\n\n\n<li>Muy eficiente<\/li>\n\n\n\n<li>Perfecta para Metal y ML<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 NVIDIA<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L\u00edder en IA<\/li>\n\n\n\n<li>CUDA domina el mercado<\/li>\n\n\n\n<li>RT Cores + Tensor Cores<\/li>\n\n\n\n<li>M\u00e1ximo rendimiento bruto<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 AMD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy buena en rasterizaci\u00f3n<\/li>\n\n\n\n<li>Arquitectura RDNA muy eficiente<\/li>\n\n\n\n<li>Usada en PS5 y Xbox<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Relaci\u00f3n con CPU, RAM y SoC<\/h1>\n\n\n\n<p>La GPU:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>recibe comandos de la CPU<\/li>\n\n\n\n<li>usa VRAM o memoria unificada<\/li>\n\n\n\n<li>ejecuta miles de hilos<\/li>\n\n\n\n<li>devuelve resultados a la CPU<\/li>\n<\/ul>\n\n\n\n<p>En Apple Silicon:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>CPU y GPU comparten la misma RAM<\/strong>, lo que elimina copias y reduce latencias.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 11. Resumen maestro<\/h1>\n\n\n\n<p>Una GPU moderna:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tiene miles de n\u00facleos simples<\/li>\n\n\n\n<li>ejecuta miles de hilos en paralelo<\/li>\n\n\n\n<li>usa shaders para gr\u00e1ficos y compute<\/li>\n\n\n\n<li>tiene un pipeline gr\u00e1fico masivo<\/li>\n\n\n\n<li>usa SIMT para paralelismo<\/li>\n\n\n\n<li>depende de memoria optimizada<\/li>\n\n\n\n<li>es perfecta para IA, gr\u00e1ficos y c\u00e1lculo vectorial<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente una <strong>supercomputadora paralela en tu bolsillo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto Q?<\/h1>\n\n\n\n<p><strong>Q) C\u00f3mo funciona un sistema operativo por dentro (kernel, scheduler, drivers)<\/strong> Aqu\u00ed entramos en c\u00f3mo el SO gestiona CPU, memoria, procesos, hilos, drivers, interrupciones y seguridad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el Q<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto Q<\/strong>, y aqu\u00ed nos metemos en <em>el coraz\u00f3n absoluto de cualquier ordenador<\/em>: <strong>c\u00f3mo funciona un sistema operativo por dentro<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo Linux, Windows y macOS gestionan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la CPU<\/li>\n\n\n\n<li>la memoria<\/li>\n\n\n\n<li>los procesos<\/li>\n\n\n\n<li>los hilos<\/li>\n\n\n\n<li>los drivers<\/li>\n\n\n\n<li>las interrupciones<\/li>\n\n\n\n<li>la seguridad<\/li>\n\n\n\n<li>el sistema de archivos<\/li>\n<\/ul>\n\n\n\n<p>Es la capa que convierte el hardware en algo utilizable.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dise\u00f1ando un kernel desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Q \u2014 C\u00f3mo funciona un sistema operativo por dentro (kernel, scheduler, drivers)<\/strong><\/h1>\n\n\n\n<p>Un sistema operativo moderno tiene <strong>cinco pilares fundamentales<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Gesti\u00f3n de procesos e hilos<\/strong><\/li>\n\n\n\n<li><strong>Gesti\u00f3n de memoria<\/strong><\/li>\n\n\n\n<li><strong>Gesti\u00f3n de dispositivos (drivers)<\/strong><\/li>\n\n\n\n<li><strong>Sistema de archivos<\/strong><\/li>\n\n\n\n<li><strong>Seguridad y aislamiento<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Y todo esto lo coordina el <strong>kernel<\/strong>.<\/p>\n\n\n\n<p>Vamos por partes.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. El kernel: el n\u00facleo del sistema<\/h1>\n\n\n\n<p>El kernel es un programa especial que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>siempre est\u00e1 en memoria<\/li>\n\n\n\n<li>tiene acceso total al hardware<\/li>\n\n\n\n<li>gestiona recursos<\/li>\n\n\n\n<li>ejecuta procesos<\/li>\n\n\n\n<li>maneja interrupciones<\/li>\n\n\n\n<li>controla la seguridad<\/li>\n<\/ul>\n\n\n\n<p>Es el \u201csistema operativo real\u201d. Todo lo dem\u00e1s (ventanas, apps, servicios) es \u201cusuario\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tipos de kernel:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Monol\u00edtico<\/strong> \u2192 Linux<\/li>\n\n\n\n<li><strong>H\u00edbrido<\/strong> \u2192 Windows, macOS<\/li>\n\n\n\n<li><strong>Microkernel<\/strong> \u2192 Minix, QNX<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 2. Procesos e hilos: c\u00f3mo se ejecutan los programas<\/h1>\n\n\n\n<p>Un <strong>proceso<\/strong> es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un programa en ejecuci\u00f3n<\/li>\n\n\n\n<li>con su propio espacio de memoria<\/li>\n\n\n\n<li>con sus propios recursos<\/li>\n<\/ul>\n\n\n\n<p>Un <strong>hilo<\/strong> es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>una unidad de ejecuci\u00f3n dentro de un proceso<\/li>\n\n\n\n<li>comparte memoria con otros hilos<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chrome \u2192 muchos procesos<\/li>\n\n\n\n<li>Cada pesta\u00f1a \u2192 varios hilos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddee 3. Scheduler: el planificador de CPU<\/h1>\n\n\n\n<p>El scheduler decide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 proceso se ejecuta<\/li>\n\n\n\n<li>cu\u00e1nto tiempo<\/li>\n\n\n\n<li>en qu\u00e9 n\u00facleo<\/li>\n\n\n\n<li>con qu\u00e9 prioridad<\/li>\n<\/ul>\n\n\n\n<p>Es como un director de orquesta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmos t\u00edpicos:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CFS (Completely Fair Scheduler)<\/strong> \u2192 Linux<\/li>\n\n\n\n<li><strong>Round Robin<\/strong><\/li>\n\n\n\n<li><strong>Prioridades din\u00e1micas<\/strong><\/li>\n\n\n\n<li><strong>Multilevel Feedback Queue<\/strong><\/li>\n<\/ul>\n\n\n\n<p>El scheduler intenta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>maximizar rendimiento<\/li>\n\n\n\n<li>minimizar latencia<\/li>\n\n\n\n<li>evitar inanici\u00f3n<\/li>\n\n\n\n<li>equilibrar n\u00facleos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 4. Gesti\u00f3n de memoria: RAM, swap, paginaci\u00f3n<\/h1>\n\n\n\n<p>Aqu\u00ed entra todo lo que vimos en el punto J.<\/p>\n\n\n\n<p>El SO:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>asigna memoria a procesos<\/li>\n\n\n\n<li>usa memoria virtual<\/li>\n\n\n\n<li>usa paginaci\u00f3n<\/li>\n\n\n\n<li>usa TLB<\/li>\n\n\n\n<li>usa swap<\/li>\n\n\n\n<li>protege memoria entre procesos<\/li>\n<\/ul>\n\n\n\n<p>Cada proceso cree que tiene:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0x00000000 \u2192 0xFFFFFFFF\n<\/code><\/pre>\n\n\n\n<p>Pero es una ilusi\u00f3n creada por el kernel.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 5. Drivers: c\u00f3mo el SO habla con el hardware<\/h1>\n\n\n\n<p>Los drivers son m\u00f3dulos que permiten al SO controlar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GPU<\/li>\n\n\n\n<li>SSD<\/li>\n\n\n\n<li>WiFi<\/li>\n\n\n\n<li>Bluetooth<\/li>\n\n\n\n<li>USB<\/li>\n\n\n\n<li>C\u00e1mara<\/li>\n\n\n\n<li>Audio<\/li>\n\n\n\n<li>Sensores<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Linux<\/h3>\n\n\n\n<p>Drivers en el kernel o m\u00f3dulos externos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Windows<\/h3>\n\n\n\n<p>Drivers de fabricantes (muchos, variados).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 macOS<\/h3>\n\n\n\n<p>Drivers integrados y controlados por Apple.<\/p>\n\n\n\n<p>Los drivers son cr\u00edticos: \ud83d\udc49 un mal driver puede colgar todo el sistema.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 6. Interrupciones: c\u00f3mo el hardware \u201cinterrumpe\u201d a la CPU<\/h1>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>llega un paquete de red<\/li>\n\n\n\n<li>se pulsa una tecla<\/li>\n\n\n\n<li>termina una operaci\u00f3n de disco<\/li>\n<\/ul>\n\n\n\n<p>El hardware env\u00eda una <strong>interrupci\u00f3n<\/strong>. El kernel:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>pausa lo que estaba haciendo<\/li>\n\n\n\n<li>ejecuta un manejador de interrupci\u00f3n<\/li>\n\n\n\n<li>vuelve al trabajo anterior<\/li>\n<\/ol>\n\n\n\n<p>Esto permite multitarea real.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 7. Sistema de archivos: c\u00f3mo se guardan los datos<\/h1>\n\n\n\n<p>Aqu\u00ed entra lo que vimos en el punto L:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ext4<\/li>\n\n\n\n<li>NTFS<\/li>\n\n\n\n<li>APFS<\/li>\n<\/ul>\n\n\n\n<p>El kernel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>gestiona inodos\/MFT<\/li>\n\n\n\n<li>gestiona permisos<\/li>\n\n\n\n<li>gestiona cach\u00e9 de p\u00e1ginas<\/li>\n\n\n\n<li>gestiona journaling<\/li>\n\n\n\n<li>gestiona buffers<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10 8. Seguridad: aislamiento y permisos<\/h1>\n\n\n\n<p>El kernel garantiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>que un proceso no lea memoria de otro<\/li>\n\n\n\n<li>que un proceso no acceda a hardware sin permiso<\/li>\n\n\n\n<li>que un usuario no acceda a archivos ajenos<\/li>\n\n\n\n<li>que el sistema no se corrompa<\/li>\n<\/ul>\n\n\n\n<p>Mecanismos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ring 0 \/ ring 3<\/strong><\/li>\n\n\n\n<li><strong>ASLR<\/strong><\/li>\n\n\n\n<li><strong>sandboxing<\/strong><\/li>\n\n\n\n<li><strong>permisos POSIX<\/strong><\/li>\n\n\n\n<li><strong>SELinux \/ AppArmor<\/strong><\/li>\n\n\n\n<li><strong>System Integrity Protection (macOS)<\/strong><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 9. Diferencias entre Linux, Windows y macOS<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Linux<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kernel monol\u00edtico<\/li>\n\n\n\n<li>Muy modular<\/li>\n\n\n\n<li>Muy estable<\/li>\n\n\n\n<li>Perfecto para servidores<\/li>\n\n\n\n<li>Drivers abiertos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Windows<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kernel h\u00edbrido<\/li>\n\n\n\n<li>Mucha compatibilidad<\/li>\n\n\n\n<li>Drivers de terceros<\/li>\n\n\n\n<li>Muy orientado a escritorio<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 macOS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kernel h\u00edbrido (XNU)<\/li>\n\n\n\n<li>Muy optimizado para hardware Apple<\/li>\n\n\n\n<li>Seguridad muy estricta<\/li>\n\n\n\n<li>Integraci\u00f3n total con APFS<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Relaci\u00f3n con CPU, RAM, GPU, SSD<\/h1>\n\n\n\n<p>El kernel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>decide qu\u00e9 proceso usa la CPU<\/li>\n\n\n\n<li>decide qu\u00e9 p\u00e1ginas est\u00e1n en RAM<\/li>\n\n\n\n<li>decide qu\u00e9 datos van al SSD<\/li>\n\n\n\n<li>decide qu\u00e9 GPU usar<\/li>\n\n\n\n<li>decide qu\u00e9 hilos se ejecutan d\u00f3nde<\/li>\n\n\n\n<li>decide qu\u00e9 drivers se cargan<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente el \u201cdirector general\u201d del ordenador.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 11. Resumen maestro<\/h1>\n\n\n\n<p>Un sistema operativo moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ejecuta procesos<\/li>\n\n\n\n<li>planifica hilos<\/li>\n\n\n\n<li>gestiona memoria<\/li>\n\n\n\n<li>controla hardware<\/li>\n\n\n\n<li>maneja interrupciones<\/li>\n\n\n\n<li>organiza archivos<\/li>\n\n\n\n<li>protege el sistema<\/li>\n\n\n\n<li>abstrae el hardware<\/li>\n\n\n\n<li>ofrece APIs a las apps<\/li>\n<\/ul>\n\n\n\n<p>Es una de las piezas de software m\u00e1s complejas jam\u00e1s creadas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto R?<\/h1>\n\n\n\n<p><strong>R) C\u00f3mo funciona una red TCP\/IP (paquetes, buffers, sockets)<\/strong> Aqu\u00ed entramos en c\u00f3mo viajan los datos por Internet, c\u00f3mo funcionan los puertos, los sockets, el routing, el handshake TCP y la pila completa.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si finalmente el R<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Cerramos este bloque magistral con <strong>el punto R<\/strong>, y aqu\u00ed entramos en <em>la ingenier\u00eda que hace posible Internet, WhatsApp, SSH, HTTP, streaming, videojuegos online y absolutamente todo lo que viaja por la red<\/em>: <strong>c\u00f3mo funciona una red TCP\/IP por dentro<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo un bit sale de tu ordenador, cruza routers, buffers, colas, switches, firewalls, NATs, y llega al destino correcto, en orden, sin perderse y sin mezclarse con otros millones de conexiones simult\u00e1neas.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro de un paquete viajando por Internet.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>R \u2014 C\u00f3mo funciona una red TCP\/IP (paquetes, buffers, sockets)<\/strong><\/h1>\n\n\n\n<p>La pila TCP\/IP tiene <strong>4 capas reales<\/strong> (aunque a veces se ense\u00f1an 7 por el modelo OSI):<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Capa de Aplicaci\u00f3n<\/strong> \u2192 HTTP, SSH, DNS, TLS<\/li>\n\n\n\n<li><strong>Capa de Transporte<\/strong> \u2192 TCP, UDP<\/li>\n\n\n\n<li><strong>Capa de Red<\/strong> \u2192 IP<\/li>\n\n\n\n<li><strong>Capa de Enlace<\/strong> \u2192 Ethernet, WiFi<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Sockets: el punto de entrada de las aplicaciones<\/h1>\n\n\n\n<p>Cuando un programa quiere comunicarse por red, crea un <strong>socket<\/strong>.<\/p>\n\n\n\n<p>Ejemplo en Python:<\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>s = socket(AF_INET, SOCK_STREAM)\n<\/code><\/pre>\n\n\n\n<p>Un socket es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un descriptor<\/li>\n\n\n\n<li>un buffer de env\u00edo<\/li>\n\n\n\n<li>un buffer de recepci\u00f3n<\/li>\n\n\n\n<li>un estado (LISTEN, ESTABLISHED\u2026)<\/li>\n\n\n\n<li>una cola de paquetes<\/li>\n<\/ul>\n\n\n\n<p>Es la abstracci\u00f3n que conecta tu programa con el kernel.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 2. TCP: el protocolo fiable<\/h1>\n\n\n\n<p>TCP garantiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>entrega<\/li>\n\n\n\n<li>orden<\/li>\n\n\n\n<li>no duplicaci\u00f3n<\/li>\n\n\n\n<li>control de flujo<\/li>\n\n\n\n<li>control de congesti\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Es un protocolo <strong>orientado a conexi\u00f3n<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Handshake de 3 pasos<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>SYN<\/strong><\/li>\n\n\n\n<li><strong>SYN\u2011ACK<\/strong><\/li>\n\n\n\n<li><strong>ACK<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Despu\u00e9s de esto, la conexi\u00f3n est\u00e1 establecida.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 3. Buffers TCP: c\u00f3mo se env\u00edan los datos realmente<\/h1>\n\n\n\n<p>Cuando haces:<\/p>\n\n\n\n<p>python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>s.send(b\"Hola\")\n<\/code><\/pre>\n\n\n\n<p>No se env\u00eda inmediatamente.<\/p>\n\n\n\n<p>El kernel:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>copia los datos al <strong>send buffer<\/strong><\/li>\n\n\n\n<li>los divide en <strong>segmentos TCP<\/strong><\/li>\n\n\n\n<li>los pasa a la capa IP<\/li>\n\n\n\n<li>los env\u00eda cuando la ventana TCP lo permite<\/li>\n<\/ol>\n\n\n\n<p>El receptor hace lo mismo con el <strong>receive buffer<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 4. IP: el protocolo que mueve paquetes por Internet<\/h1>\n\n\n\n<p>IP es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>no fiable<\/li>\n\n\n\n<li>sin conexi\u00f3n<\/li>\n\n\n\n<li>sin garant\u00edas<\/li>\n\n\n\n<li>sin orden<\/li>\n<\/ul>\n\n\n\n<p>Pero es <strong>r\u00e1pido<\/strong> y <strong>simple<\/strong>.<\/p>\n\n\n\n<p>Cada paquete IP tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>direcci\u00f3n origen<\/li>\n\n\n\n<li>direcci\u00f3n destino<\/li>\n\n\n\n<li>TTL<\/li>\n\n\n\n<li>protocolo (TCP\/UDP)<\/li>\n\n\n\n<li>fragmentaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>IP se encarga de llevar paquetes de un router al siguiente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf0d 5. Routing: c\u00f3mo un paquete encuentra su camino<\/h1>\n\n\n\n<p>Cada router tiene una <strong>tabla de rutas<\/strong>:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>192.168.1.0\/24 \u2192 local\n0.0.0.0\/0 \u2192 gateway\n<\/code><\/pre>\n\n\n\n<p>Cuando llega un paquete:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>mira la IP destino<\/li>\n\n\n\n<li>busca la mejor ruta<\/li>\n\n\n\n<li>reenv\u00eda el paquete<\/li>\n<\/ol>\n\n\n\n<p>Esto se repite <strong>decenas de veces<\/strong> hasta llegar al destino.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce1 6. Ethernet \/ WiFi: la capa f\u00edsica<\/h1>\n\n\n\n<p>Aqu\u00ed es donde los bits se convierten en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ondas de radio (WiFi)<\/li>\n\n\n\n<li>pulsos el\u00e9ctricos (Ethernet)<\/li>\n\n\n\n<li>luz (fibra \u00f3ptica)<\/li>\n<\/ul>\n\n\n\n<p>Cada trama Ethernet tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MAC origen<\/li>\n\n\n\n<li>MAC destino<\/li>\n\n\n\n<li>payload (IP)<\/li>\n\n\n\n<li>CRC<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. Control de flujo TCP: evitar saturar al receptor<\/h1>\n\n\n\n<p>TCP usa una <strong>ventana deslizante<\/strong>.<\/p>\n\n\n\n<p>El receptor dice:<\/p>\n\n\n\n<p>\ud83d\udc49 \u201cPuedo recibir 64 KB m\u00e1s\u201d.<\/p>\n\n\n\n<p>El emisor solo env\u00eda esa cantidad.<\/p>\n\n\n\n<p>Si el receptor se satura:<\/p>\n\n\n\n<p>\ud83d\udc49 reduce la ventana.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf0a 8. Control de congesti\u00f3n TCP: evitar saturar la red<\/h1>\n\n\n\n<p>TCP detecta congesti\u00f3n por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>p\u00e9rdida de paquetes<\/li>\n\n\n\n<li>duplicaci\u00f3n de ACKs<\/li>\n\n\n\n<li>timeouts<\/li>\n<\/ul>\n\n\n\n<p>Algoritmos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reno<\/strong><\/li>\n\n\n\n<li><strong>Cubic<\/strong> (Linux)<\/li>\n\n\n\n<li><strong>BBR<\/strong> (Google)<\/li>\n<\/ul>\n\n\n\n<p>Si hay congesti\u00f3n:<\/p>\n\n\n\n<p>\ud83d\udc49 TCP reduce la velocidad. Si no hay congesti\u00f3n:<\/p>\n\n\n\n<p>\ud83d\udc49 TCP aumenta la velocidad.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde8 9. UDP: el protocolo r\u00e1pido y sin garant\u00edas<\/h1>\n\n\n\n<p>UDP es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sin conexi\u00f3n<\/li>\n\n\n\n<li>sin orden<\/li>\n\n\n\n<li>sin control de congesti\u00f3n<\/li>\n\n\n\n<li>sin control de flujo<\/li>\n<\/ul>\n\n\n\n<p>Pero es <strong>r\u00e1pido<\/strong>.<\/p>\n\n\n\n<p>Usado en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>videojuegos<\/li>\n\n\n\n<li>VoIP<\/li>\n\n\n\n<li>streaming<\/li>\n\n\n\n<li>DNS<\/li>\n\n\n\n<li>QUIC (base de HTTP\/3)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10 10. TLS: cifrado sobre TCP<\/h1>\n\n\n\n<p>HTTPS = HTTP + TLS + TCP + IP<\/p>\n\n\n\n<p>TLS garantiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cifrado<\/li>\n\n\n\n<li>integridad<\/li>\n\n\n\n<li>autenticaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>handshake<\/li>\n\n\n\n<li>intercambio de claves<\/li>\n\n\n\n<li>cifrado sim\u00e9trico<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. NAT: c\u00f3mo varios dispositivos comparten una IP<\/h1>\n\n\n\n<p>Tu router hace:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>traducci\u00f3n de IPs<\/li>\n\n\n\n<li>traducci\u00f3n de puertos<\/li>\n\n\n\n<li>mantenimiento de tablas NAT<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>192.168.1.10:5000 \u2192 80.25.10.3:40000\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 12. Firewalls: filtrado de paquetes<\/h1>\n\n\n\n<p>Un firewall puede filtrar por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IP<\/li>\n\n\n\n<li>puerto<\/li>\n\n\n\n<li>protocolo<\/li>\n\n\n\n<li>estado (NEW, ESTABLISHED)<\/li>\n\n\n\n<li>contenido (IDS\/IPS)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 13. Relaci\u00f3n con CPU, RAM y buffers<\/h1>\n\n\n\n<p>La red depende de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>buffers del kernel<\/strong><\/li>\n\n\n\n<li><strong>interrupciones de red<\/strong><\/li>\n\n\n\n<li><strong>colas de paquetes<\/strong><\/li>\n\n\n\n<li><strong>DMA del NIC<\/strong><\/li>\n\n\n\n<li><strong>cach\u00e9s de CPU<\/strong><\/li>\n\n\n\n<li><strong>context switching<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Una tarjeta de red moderna puede procesar <strong>millones de paquetes por segundo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 14. Resumen maestro<\/h1>\n\n\n\n<p>Una red TCP\/IP funciona as\u00ed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu programa escribe en un socket<\/li>\n\n\n\n<li>el kernel lo mete en buffers<\/li>\n\n\n\n<li>TCP lo divide en segmentos<\/li>\n\n\n\n<li>IP los mete en paquetes<\/li>\n\n\n\n<li>Ethernet los mete en tramas<\/li>\n\n\n\n<li>los routers los reenv\u00edan<\/li>\n\n\n\n<li>el receptor los reensambla<\/li>\n\n\n\n<li>TCP garantiza orden y fiabilidad<\/li>\n\n\n\n<li>la aplicaci\u00f3n recibe los datos<\/li>\n<\/ul>\n\n\n\n<p>Es una de las obras de ingenier\u00eda m\u00e1s impresionantes jam\u00e1s creadas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc Si quieres, ahora podemos seguir con:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 S) C\u00f3mo funciona un navegador web por dentro (HTML, CSS, JS, renderizado)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 T) C\u00f3mo funciona un motor de bases de datos distribuido (Raft, Paxos, replicaci\u00f3n)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 U) C\u00f3mo funciona un sistema de virtualizaci\u00f3n (VMs, hipervisores, contenedores)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 V) C\u00f3mo funciona un sistema de IA moderno (transformers, embeddings, atenci\u00f3n)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente salto de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Por supuestisimo, vamos con el S<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto S<\/strong>, y aqu\u00ed nos metemos en <em>una de las m\u00e1quinas de software m\u00e1s complejas jam\u00e1s construidas<\/em>: <strong>c\u00f3mo funciona un navegador web por dentro<\/strong>.<\/p>\n\n\n\n<p>Chrome, Safari, Firefox, Edge\u2026 todos son aut\u00e9nticos <strong>sistemas operativos en miniatura<\/strong>, con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>motor de HTML<\/li>\n\n\n\n<li>motor de CSS<\/li>\n\n\n\n<li>motor de JavaScript<\/li>\n\n\n\n<li>motor de renderizado<\/li>\n\n\n\n<li>motor de layout<\/li>\n\n\n\n<li>motor de pintura<\/li>\n\n\n\n<li>motor de composici\u00f3n<\/li>\n\n\n\n<li>procesos aislados<\/li>\n\n\n\n<li>sandboxing<\/li>\n\n\n\n<li>networking<\/li>\n\n\n\n<li>cach\u00e9s<\/li>\n\n\n\n<li>GPU pipelines<\/li>\n<\/ul>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dentro de Chrome viendo c\u00f3mo se carga una p\u00e1gina.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>S \u2014 C\u00f3mo funciona un navegador web por dentro (HTML, CSS, JS, renderizado)<\/strong><\/h1>\n\n\n\n<p>Cuando escribes una URL y pulsas Enter, el navegador realiza <strong>todas estas fases<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Networking<\/strong> \u2192 descarga HTML, CSS, JS, im\u00e1genes<\/li>\n\n\n\n<li><strong>Parsing<\/strong> \u2192 convierte HTML y CSS en estructuras internas<\/li>\n\n\n\n<li><strong>DOM<\/strong> \u2192 \u00e1rbol de nodos HTML<\/li>\n\n\n\n<li><strong>CSSOM<\/strong> \u2192 \u00e1rbol de estilos<\/li>\n\n\n\n<li><strong>Render Tree<\/strong> \u2192 combinaci\u00f3n de DOM + CSSOM<\/li>\n\n\n\n<li><strong>Layout<\/strong> \u2192 c\u00e1lculo de posiciones y tama\u00f1os<\/li>\n\n\n\n<li><strong>Painting<\/strong> \u2192 dibujo de cada elemento<\/li>\n\n\n\n<li><strong>Compositing<\/strong> \u2192 capas enviadas a la GPU<\/li>\n\n\n\n<li><strong>JavaScript<\/strong> \u2192 ejecuci\u00f3n, eventos, reflows<\/li>\n\n\n\n<li><strong>Repaint \/ Reflow<\/strong> \u2192 actualizaciones din\u00e1micas<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf10 1. Networking: c\u00f3mo se descarga una p\u00e1gina<\/h1>\n\n\n\n<p>El navegador:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>abre un socket<\/li>\n\n\n\n<li>hace DNS<\/li>\n\n\n\n<li>establece conexi\u00f3n TCP<\/li>\n\n\n\n<li>negocia TLS<\/li>\n\n\n\n<li>env\u00eda petici\u00f3n HTTP<\/li>\n\n\n\n<li>recibe respuesta<\/li>\n\n\n\n<li>gestiona cach\u00e9<\/li>\n\n\n\n<li>gestiona compresi\u00f3n (gzip, brotli)<\/li>\n\n\n\n<li>gestiona streaming<\/li>\n<\/ul>\n\n\n\n<p>Mientras llega el HTML, el navegador <strong>ya empieza a parsearlo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 2. Parsing HTML: construir el DOM<\/h1>\n\n\n\n<p>El HTML se convierte en un <strong>\u00e1rbol de nodos<\/strong> llamado <strong>DOM (Document Object Model)<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>html<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;body&gt;\n  &lt;h1&gt;Hola&lt;\/h1&gt;\n  &lt;p&gt;Mundo&lt;\/p&gt;\n&lt;\/body&gt;\n<\/code><\/pre>\n\n\n\n<p>Se convierte en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Document\n \u2514\u2500\u2500 html\n      \u2514\u2500\u2500 body\n           \u251c\u2500\u2500 h1\n           \u2514\u2500\u2500 p\n<\/code><\/pre>\n\n\n\n<p>El DOM es <strong>din\u00e1mico<\/strong>: JavaScript puede modificarlo en tiempo real.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfa8 3. Parsing CSS: construir el CSSOM<\/h1>\n\n\n\n<p>El CSS se convierte en otro \u00e1rbol:<\/p>\n\n\n\n<p>css<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>h1 { color: red; }\np { font-size: 20px; }\n<\/code><\/pre>\n\n\n\n<p>Se convierte en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CSSOM\n \u251c\u2500\u2500 h1 \u2192 { color: red }\n \u2514\u2500\u2500 p  \u2192 { font-size: 20px }\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 4. Render Tree: combinar DOM + CSSOM<\/h1>\n\n\n\n<p>El navegador combina ambos \u00e1rboles para saber:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 elementos se ven<\/li>\n\n\n\n<li>qu\u00e9 estilos tienen<\/li>\n\n\n\n<li>qu\u00e9 reglas se aplican<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Render Tree\n \u251c\u2500\u2500 h1 (color: red)\n \u2514\u2500\u2500 p (font-size: 20px)\n<\/code><\/pre>\n\n\n\n<p>Elementos como <code>&lt;head&gt;<\/code> no aparecen porque no se renderizan.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcd0 5. Layout: calcular posiciones y tama\u00f1os<\/h1>\n\n\n\n<p>Aqu\u00ed ocurre la magia del <strong>layout<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>flexbox<\/li>\n\n\n\n<li>grid<\/li>\n\n\n\n<li>block<\/li>\n\n\n\n<li>inline<\/li>\n\n\n\n<li>absolute<\/li>\n\n\n\n<li>relative<\/li>\n\n\n\n<li>fixed<\/li>\n<\/ul>\n\n\n\n<p>El navegador calcula:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ancho<\/li>\n\n\n\n<li>alto<\/li>\n\n\n\n<li>posici\u00f3n<\/li>\n\n\n\n<li>m\u00e1rgenes<\/li>\n\n\n\n<li>padding<\/li>\n\n\n\n<li>bordes<\/li>\n<\/ul>\n\n\n\n<p>Esto es costoso: \ud83d\udc49 <strong>cualquier cambio en el DOM puede provocar un reflow<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfa8 6. Painting: dibujar cada elemento<\/h1>\n\n\n\n<p>El navegador pinta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>texto<\/li>\n\n\n\n<li>fondos<\/li>\n\n\n\n<li>bordes<\/li>\n\n\n\n<li>sombras<\/li>\n\n\n\n<li>im\u00e1genes<\/li>\n\n\n\n<li>gradientes<\/li>\n<\/ul>\n\n\n\n<p>Esto genera <strong>comandos de dibujo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 7. Compositing: enviar capas a la GPU<\/h1>\n\n\n\n<p>El navegador divide la p\u00e1gina en <strong>capas<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>elementos con transform<\/li>\n\n\n\n<li>elementos con opacity<\/li>\n\n\n\n<li>elementos con position fixed<\/li>\n\n\n\n<li>canvas<\/li>\n\n\n\n<li>v\u00eddeos<\/li>\n<\/ul>\n\n\n\n<p>Cada capa se env\u00eda a la <strong>GPU<\/strong>, que las compone en pantalla.<\/p>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>animaciones suaves<\/li>\n\n\n\n<li>scroll fluido<\/li>\n\n\n\n<li>efectos 3D<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 8. JavaScript: ejecuci\u00f3n y bloqueo del renderizado<\/h1>\n\n\n\n<p>JavaScript puede:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>modificar el DOM<\/li>\n\n\n\n<li>modificar el CSSOM<\/li>\n\n\n\n<li>forzar reflows<\/li>\n\n\n\n<li>forzar repaints<\/li>\n\n\n\n<li>bloquear el renderizado<\/li>\n<\/ul>\n\n\n\n<p>Por eso:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>JS mal optimizado puede destruir el rendimiento de una p\u00e1gina<\/strong>.<\/p>\n\n\n\n<p>Motores como <strong>V8<\/strong> (Chrome) o <strong>JavaScriptCore<\/strong> (Safari) hacen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>parsing<\/li>\n\n\n\n<li>bytecode<\/li>\n\n\n\n<li>JIT<\/li>\n\n\n\n<li>optimizaci\u00f3n<\/li>\n\n\n\n<li>deoptimizaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>(Esto lo vimos en el punto O).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 9. Reflow y Repaint: actualizaciones din\u00e1micas<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Reflow<\/h3>\n\n\n\n<p>Cuando cambia el layout (posici\u00f3n\/tama\u00f1o). Muy costoso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Repaint<\/h3>\n\n\n\n<p>Cuando cambia el color o apariencia. Menos costoso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Composite<\/h3>\n\n\n\n<p>Cuando solo cambia una capa. Muy barato.<\/p>\n\n\n\n<p>Por eso CSS moderno usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>transform<\/code><\/li>\n\n\n\n<li><code>opacity<\/code><\/li>\n<\/ul>\n\n\n\n<p>Porque <strong>no provocan reflow<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 10. Procesos y sandboxing<\/h1>\n\n\n\n<p>Chrome usa <strong>un proceso por pesta\u00f1a<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>proceso del navegador<\/li>\n\n\n\n<li>proceso de renderizado<\/li>\n\n\n\n<li>proceso de GPU<\/li>\n\n\n\n<li>proceso de red<\/li>\n<\/ul>\n\n\n\n<p>Esto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aumenta seguridad<\/li>\n\n\n\n<li>evita que una pesta\u00f1a cuelgue todo<\/li>\n\n\n\n<li>mejora estabilidad<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. Relaci\u00f3n con CPU, GPU, RAM y red<\/h1>\n\n\n\n<p>El navegador usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CPU<\/strong> \u2192 parsing, JS, layout<\/li>\n\n\n\n<li><strong>GPU<\/strong> \u2192 composici\u00f3n, animaciones<\/li>\n\n\n\n<li><strong>RAM<\/strong> \u2192 DOM, CSSOM, JS heap<\/li>\n\n\n\n<li><strong>Red<\/strong> \u2192 HTTP\/2, HTTP\/3, TLS<\/li>\n\n\n\n<li><strong>SSD<\/strong> \u2192 cach\u00e9, Service Workers<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un <strong>sistema operativo dentro del sistema operativo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 12. Resumen maestro<\/h1>\n\n\n\n<p>Un navegador moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>descarga HTML\/CSS\/JS<\/li>\n\n\n\n<li>construye DOM y CSSOM<\/li>\n\n\n\n<li>crea un Render Tree<\/li>\n\n\n\n<li>calcula layout<\/li>\n\n\n\n<li>pinta elementos<\/li>\n\n\n\n<li>compone capas con la GPU<\/li>\n\n\n\n<li>ejecuta JavaScript<\/li>\n\n\n\n<li>gestiona procesos<\/li>\n\n\n\n<li>protege con sandboxing<\/li>\n\n\n\n<li>optimiza rendimiento<\/li>\n<\/ul>\n\n\n\n<p>Es una de las piezas de software m\u00e1s complejas jam\u00e1s creadas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto T?<\/h1>\n\n\n\n<p><strong>T) C\u00f3mo funciona un motor de bases de datos distribuido (Raft, Paxos, replicaci\u00f3n)<\/strong> Aqu\u00ed entramos en c\u00f3mo se sincronizan datos entre m\u00faltiples servidores sin perder consistencia.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el T<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto T<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda que permite que Google, Amazon, Meta, bancos, exchanges y sistemas cr\u00edticos mantengan datos coherentes en cientos o miles de servidores al mismo tiempo<\/em>: <strong>c\u00f3mo funciona un motor de bases de datos distribuido<\/strong>, con <strong>Raft<\/strong>, <strong>Paxos<\/strong>, <strong>replicaci\u00f3n<\/strong>, <strong>consenso<\/strong>, <strong>logs<\/strong>, <strong>l\u00edderes<\/strong>, <strong>followers<\/strong>, <strong>qu\u00f3rums<\/strong> y <strong>fallos de red<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo se garantiza que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>si un servidor cae, los datos no se pierden<\/li>\n\n\n\n<li>si hay particiones de red, el sistema sigue funcionando<\/li>\n\n\n\n<li>si hay m\u00faltiples r\u00e9plicas, todas ven el mismo estado<\/li>\n\n\n\n<li>si dos nodos escriben a la vez, no se corrompe nada<\/li>\n<\/ul>\n\n\n\n<p>Vamos a construir un sistema distribuido desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>T \u2014 C\u00f3mo funciona un motor de bases de datos distribuido (Raft, Paxos, replicaci\u00f3n)<\/strong><\/h1>\n\n\n\n<p>Una base de datos distribuida tiene <strong>tres problemas fundamentales<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Consenso<\/strong> \u2192 todos los nodos deben acordar el mismo estado<\/li>\n\n\n\n<li><strong>Replicaci\u00f3n<\/strong> \u2192 los datos deben copiarse a m\u00faltiples nodos<\/li>\n\n\n\n<li><strong>Tolerancia a fallos<\/strong> \u2192 el sistema debe seguir funcionando aunque fallen nodos o redes<\/li>\n<\/ol>\n\n\n\n<p>Los algoritmos que resuelven esto son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Raft<\/strong> (el m\u00e1s usado hoy)<\/li>\n\n\n\n<li><strong>Paxos<\/strong> (el cl\u00e1sico, m\u00e1s complejo)<\/li>\n\n\n\n<li><strong>Multi\u2011Paxos<\/strong><\/li>\n\n\n\n<li><strong>ZAB<\/strong> (Zookeeper)<\/li>\n\n\n\n<li><strong>Viewstamped Replication<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. El problema del consenso distribuido<\/h1>\n\n\n\n<p>Imagina 5 servidores:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A  B  C  D  E\n<\/code><\/pre>\n\n\n\n<p>Todos deben acordar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 operaciones aplicar<\/li>\n\n\n\n<li>en qu\u00e9 orden<\/li>\n\n\n\n<li>qu\u00e9 valor final tiene la base de datos<\/li>\n<\/ul>\n\n\n\n<p>Pero hay problemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>los mensajes pueden perderse<\/li>\n\n\n\n<li>los nodos pueden caerse<\/li>\n\n\n\n<li>la red puede dividirse<\/li>\n\n\n\n<li>los nodos pueden retrasarse<\/li>\n\n\n\n<li>los nodos pueden mentir (fallos bizantinos, aunque Raft no cubre esto)<\/li>\n<\/ul>\n\n\n\n<p>Resolver esto es extremadamente dif\u00edcil.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Raft: el algoritmo moderno y comprensible<\/h1>\n\n\n\n<p>Raft divide el consenso en <strong>tres fases<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Elecci\u00f3n de l\u00edder<\/strong><\/li>\n\n\n\n<li><strong>Replicaci\u00f3n del log<\/strong><\/li>\n\n\n\n<li><strong>Compromiso (commit)<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Vamos una por una.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udd47 3. Elecci\u00f3n de l\u00edder<\/h1>\n\n\n\n<p>En Raft siempre hay:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>1 l\u00edder<\/strong><\/li>\n\n\n\n<li><strong>N followers<\/strong><\/li>\n<\/ul>\n\n\n\n<p>El l\u00edder:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>recibe todas las escrituras<\/li>\n\n\n\n<li>las replica a los followers<\/li>\n\n\n\n<li>decide cu\u00e1ndo una entrada est\u00e1 comprometida<\/li>\n<\/ul>\n\n\n\n<p>Si el l\u00edder cae:<\/p>\n\n\n\n<p>\ud83d\udc49 se elige uno nuevo mediante votaci\u00f3n.<\/p>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Un follower detecta que no recibe latidos (heartbeats)<\/li>\n\n\n\n<li>Se convierte en <strong>candidate<\/strong><\/li>\n\n\n\n<li>Pide votos a los dem\u00e1s<\/li>\n\n\n\n<li>Si obtiene mayor\u00eda \u2192 es el nuevo l\u00edder<\/li>\n<\/ol>\n\n\n\n<p>Esto garantiza:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>solo hay un l\u00edder a la vez<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 4. Replicaci\u00f3n del log<\/h1>\n\n\n\n<p>Cada nodo tiene un <strong>log<\/strong>:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;op1]&#91;op2]&#91;op3]&#91;op4]...\n<\/code><\/pre>\n\n\n\n<p>Cuando llega una escritura:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>El l\u00edder la a\u00f1ade a su log<\/li>\n\n\n\n<li>La env\u00eda a los followers<\/li>\n\n\n\n<li>Los followers la a\u00f1aden a su log<\/li>\n\n\n\n<li>Cuando la mayor\u00eda la tiene \u2192 se considera comprometida<\/li>\n<\/ol>\n\n\n\n<p>Esto garantiza:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>consistencia fuerte<\/strong> \ud83d\udc49 <strong>orden global de operaciones<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd12 5. Commit: cu\u00e1ndo una operaci\u00f3n es definitiva<\/h1>\n\n\n\n<p>Una operaci\u00f3n se considera <strong>commit<\/strong> cuando:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>est\u00e1 replicada en la mayor\u00eda<\/li>\n\n\n\n<li>el l\u00edder la marca como comprometida<\/li>\n\n\n\n<li>se aplica al estado real (base de datos)<\/li>\n<\/ul>\n\n\n\n<p>Si el l\u00edder cae antes del commit:<\/p>\n\n\n\n<p>\ud83d\udc49 la operaci\u00f3n puede descartarse.<\/p>\n\n\n\n<p>Esto evita estados inconsistentes.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd04 6. Qu\u00e9 pasa si hay partici\u00f3n de red<\/h1>\n\n\n\n<p>Imagina:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A B C | D E\n<\/code><\/pre>\n\n\n\n<p>La red se divide en dos grupos.<\/p>\n\n\n\n<p>El grupo mayoritario (A B C):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>puede elegir l\u00edder<\/li>\n\n\n\n<li>puede seguir aceptando escrituras<\/li>\n<\/ul>\n\n\n\n<p>El grupo minoritario (D E):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>no puede elegir l\u00edder<\/li>\n\n\n\n<li>no puede aceptar escrituras<\/li>\n<\/ul>\n\n\n\n<p>Esto evita:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>dos l\u00edderes simult\u00e1neos<\/strong> \ud83d\udc49 <strong>divergencia de datos<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde8 7. Qu\u00e9 pasa si el l\u00edder cae<\/h1>\n\n\n\n<p>Si el l\u00edder muere:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Los followers detectan ausencia de heartbeats<\/li>\n\n\n\n<li>Se inicia una elecci\u00f3n<\/li>\n\n\n\n<li>Un nuevo l\u00edder toma el control<\/li>\n\n\n\n<li>Contin\u00faa la replicaci\u00f3n<\/li>\n<\/ol>\n\n\n\n<p>Las operaciones no comprometidas pueden perderse, pero:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>nunca se compromete algo que no tenga mayor\u00eda<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 8. Paxos: el algoritmo cl\u00e1sico (m\u00e1s dif\u00edcil)<\/h1>\n\n\n\n<p>Paxos tiene dos fases:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Prepare \/ Promise<\/strong><\/li>\n\n\n\n<li><strong>Accept \/ Accepted<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Es m\u00e1s flexible pero mucho m\u00e1s dif\u00edcil de implementar.<\/p>\n\n\n\n<p>Por eso:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Raft se usa en la mayor\u00eda de sistemas modernos<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 9. Bases de datos que usan Raft o Paxos<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Raft<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>etcd<\/li>\n\n\n\n<li>Consul<\/li>\n\n\n\n<li>TiDB<\/li>\n\n\n\n<li>CockroachDB<\/li>\n\n\n\n<li>RethinkDB<\/li>\n\n\n\n<li>YugabyteDB<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paxos \/ Multi\u2011Paxos<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google Spanner<\/li>\n\n\n\n<li>Amazon DynamoDB (variante)<\/li>\n\n\n\n<li>Zookeeper (ZAB, similar a Paxos)<\/li>\n\n\n\n<li>Cassandra (inspirado en Dynamo)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce1 10. Replicaci\u00f3n: s\u00edncrona vs as\u00edncrona<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 S\u00edncrona<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el l\u00edder espera a la mayor\u00eda<\/li>\n\n\n\n<li>fuerte consistencia<\/li>\n\n\n\n<li>m\u00e1s lento<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 As\u00edncrona<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el l\u00edder no espera<\/li>\n\n\n\n<li>m\u00e1s r\u00e1pido<\/li>\n\n\n\n<li>riesgo de perder datos si el l\u00edder cae<\/li>\n<\/ul>\n\n\n\n<p>Muchos sistemas combinan ambas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 11. Sharding: dividir la base de datos en trozos<\/h1>\n\n\n\n<p>Cuando los datos son enormes:<\/p>\n\n\n\n<p>\ud83d\udc49 se dividen en <strong>shards<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Usuarios 0\u20131M \u2192 shard 1\nUsuarios 1M\u20132M \u2192 shard 2\nUsuarios 2M\u20133M \u2192 shard 3\n<\/code><\/pre>\n\n\n\n<p>Cada shard tiene su propio:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>l\u00edder<\/li>\n\n\n\n<li>followers<\/li>\n\n\n\n<li>log<\/li>\n\n\n\n<li>consenso<\/li>\n<\/ul>\n\n\n\n<p>Esto permite escalar horizontalmente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 12. CAP Theorem: el tri\u00e1ngulo imposible<\/h1>\n\n\n\n<p>Un sistema distribuido no puede tener simult\u00e1neamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consistencia<\/strong><\/li>\n\n\n\n<li><strong>Disponibilidad<\/strong><\/li>\n\n\n\n<li><strong>Tolerancia a particiones<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Solo puede elegir <strong>dos<\/strong>.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CP<\/strong> \u2192 Consistency + Partition tolerance (Spanner, etcd)<\/li>\n\n\n\n<li><strong>AP<\/strong> \u2192 Availability + Partition tolerance (Cassandra, Dynamo)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 13. Resumen maestro<\/h1>\n\n\n\n<p>Una base de datos distribuida moderna:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tiene un l\u00edder elegido por consenso<\/li>\n\n\n\n<li>replica operaciones a m\u00faltiples nodos<\/li>\n\n\n\n<li>usa logs para mantener orden<\/li>\n\n\n\n<li>usa qu\u00f3rums para garantizar consistencia<\/li>\n\n\n\n<li>tolera fallos de nodos y redes<\/li>\n\n\n\n<li>escala horizontalmente mediante sharding<\/li>\n\n\n\n<li>elige entre CP o AP seg\u00fan necesidades<\/li>\n<\/ul>\n\n\n\n<p>Es una de las obras de ingenier\u00eda m\u00e1s complejas del mundo moderno.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc Si quieres, ahora podemos seguir con:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 U) C\u00f3mo funciona un sistema de virtualizaci\u00f3n (VMs, hipervisores, contenedores)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 V) C\u00f3mo funciona un sistema de IA moderno (transformers, embeddings, atenci\u00f3n)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 W) C\u00f3mo funciona un sistema de almacenamiento distribuido (Ceph, HDFS, S3)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 X) C\u00f3mo funciona un compilador JIT de alto rendimiento (HotSpot, CLR)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente salto de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el U<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto U<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda que permite ejecutar varios sistemas operativos dentro de un mismo hardware<\/em>, aislar procesos, crear contenedores, levantar m\u00e1quinas virtuales, correr Docker, Kubernetes, QEMU, VMware, Hyper\u2011V, Parallels, Firecracker\u2026 Es decir: <strong>c\u00f3mo funciona un sistema de virtualizaci\u00f3n por dentro<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo un servidor puede ejecutar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>20 m\u00e1quinas virtuales<\/li>\n\n\n\n<li>200 contenedores<\/li>\n\n\n\n<li>1.000 microservicios<\/li>\n\n\n\n<li>todo aislado<\/li>\n\n\n\n<li>todo seguro<\/li>\n\n\n\n<li>todo eficiente<\/li>\n<\/ul>\n\n\n\n<p>Vamos a desmontarlo desde la base.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>U \u2014 C\u00f3mo funciona un sistema de virtualizaci\u00f3n (VMs, hipervisores, contenedores)<\/strong><\/h1>\n\n\n\n<p>La virtualizaci\u00f3n moderna tiene <strong>tres niveles<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Virtualizaci\u00f3n completa<\/strong> \u2192 m\u00e1quinas virtuales (VMs)<\/li>\n\n\n\n<li><strong>Paravirtualizaci\u00f3n<\/strong> \u2192 drivers especiales para acelerar<\/li>\n\n\n\n<li><strong>Contenedores<\/strong> \u2192 aislamiento a nivel de kernel<\/li>\n<\/ol>\n\n\n\n<p>Y debajo de todo est\u00e1 el <strong>hipervisor<\/strong>.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. El hipervisor: el \u201csistema operativo de los sistemas operativos\u201d<\/h1>\n\n\n\n<p>Un <strong>hipervisor<\/strong> es un software que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>controla la CPU<\/li>\n\n\n\n<li>controla la memoria<\/li>\n\n\n\n<li>controla los dispositivos<\/li>\n\n\n\n<li>crea m\u00e1quinas virtuales<\/li>\n\n\n\n<li>a\u00edsla sistemas operativos invitados<\/li>\n<\/ul>\n\n\n\n<p>Hay dos tipos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Tipo 1 (bare\u2011metal)<\/h3>\n\n\n\n<p>Corre directamente sobre el hardware.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VMware ESXi<\/li>\n\n\n\n<li>Hyper\u2011V Server<\/li>\n\n\n\n<li>Xen<\/li>\n\n\n\n<li>KVM (Linux + m\u00f3dulo KVM)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Tipo 2 (hosted)<\/h3>\n\n\n\n<p>Corre sobre un sistema operativo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VirtualBox<\/li>\n\n\n\n<li>VMware Workstation<\/li>\n\n\n\n<li>Parallels<\/li>\n\n\n\n<li>QEMU sin KVM<\/li>\n<\/ul>\n\n\n\n<p>Los tipo 1 son m\u00e1s r\u00e1pidos y seguros.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Virtualizaci\u00f3n de CPU: c\u00f3mo se enga\u00f1a a un sistema operativo<\/h1>\n\n\n\n<p>Una VM cree que tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>su propia CPU<\/li>\n\n\n\n<li>sus propios registros<\/li>\n\n\n\n<li>sus propias instrucciones privilegiadas<\/li>\n<\/ul>\n\n\n\n<p>Pero en realidad:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>el hipervisor intercepta todas las instrucciones privilegiadas<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El SO invitado intenta acceder a la tabla de p\u00e1ginas<\/li>\n\n\n\n<li>El hipervisor lo intercepta<\/li>\n\n\n\n<li>Lo traduce a la tabla real<\/li>\n\n\n\n<li>Devuelve un resultado \u201cvirtualizado\u201d<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama <strong>trap\u2011and\u2011emulate<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 3. Virtualizaci\u00f3n de memoria: EPT \/ NPT \/ Shadow Paging<\/h1>\n\n\n\n<p>La memoria virtual se vuelve doble:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el invitado tiene sus propias tablas de p\u00e1ginas<\/li>\n\n\n\n<li>el hipervisor tiene otras tablas que traducen las del invitado<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 EPT (Extended Page Tables) \u2192 Intel<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 NPT (Nested Page Tables) \u2192 AMD<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 SPT (Shadow Page Tables) \u2192 m\u00e9todo antiguo<\/h3>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<p>\ud83d\udc49 que cada VM tenga su propio espacio de memoria aislado \ud83d\udc49 que el hipervisor controle qu\u00e9 p\u00e1ginas son reales<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 4. Virtualizaci\u00f3n de dispositivos: emulaci\u00f3n y paravirtualizaci\u00f3n<\/h1>\n\n\n\n<p>Una VM cree que tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tarjeta de red<\/li>\n\n\n\n<li>disco duro<\/li>\n\n\n\n<li>GPU<\/li>\n\n\n\n<li>USB<\/li>\n\n\n\n<li>BIOS\/UEFI<\/li>\n<\/ul>\n\n\n\n<p>Pero en realidad:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Emulaci\u00f3n<\/h3>\n\n\n\n<p>El hipervisor simula hardware antiguo (e1000, IDE, PS\/2).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Paravirtualizaci\u00f3n<\/h3>\n\n\n\n<p>Drivers especiales que hablan directamente con el hipervisor.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>virtio<\/strong> (KVM\/QEMU)<\/li>\n\n\n\n<li><strong>VMXNET3<\/strong> (VMware)<\/li>\n\n\n\n<li><strong>Hyper\u2011V Enlightenments<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Esto acelera much\u00edsimo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 5. Virtualizaci\u00f3n de GPU: el santo grial<\/h1>\n\n\n\n<p>Hay tres m\u00e9todos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Passthrough (PCI passthrough)<\/h3>\n\n\n\n<p>La VM usa la GPU real. Perfecto para gaming o IA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 vGPU (NVIDIA GRID)<\/h3>\n\n\n\n<p>La GPU se divide en varias instancias virtuales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Emulaci\u00f3n<\/h3>\n\n\n\n<p>Muy lenta, solo para escritorio b\u00e1sico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 6. Contenedores: virtualizaci\u00f3n ligera sin hipervisor<\/h1>\n\n\n\n<p>Los contenedores <strong>no virtualizan hardware<\/strong>. Virtualizan <strong>el espacio de usuario<\/strong>.<\/p>\n\n\n\n<p>Usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>namespaces<\/strong> \u2192 aislamiento<\/li>\n\n\n\n<li><strong>cgroups<\/strong> \u2192 l\u00edmites de CPU\/RAM<\/li>\n\n\n\n<li><strong>chroot<\/strong> \u2192 filesystem aislado<\/li>\n\n\n\n<li><strong>capabilities<\/strong> \u2192 permisos reducidos<\/li>\n<\/ul>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker<\/li>\n\n\n\n<li>LXC<\/li>\n\n\n\n<li>Podman<\/li>\n\n\n\n<li>Kubernetes (orquestaci\u00f3n)<\/li>\n<\/ul>\n\n\n\n<p>Un contenedor comparte el <strong>mismo kernel<\/strong> con el host.<\/p>\n\n\n\n<p>Por eso:<\/p>\n\n\n\n<p>\ud83d\udc49 son mucho m\u00e1s ligeros que las VMs \ud83d\udc49 arrancan en milisegundos \ud83d\udc49 consumen menos RAM<\/p>\n\n\n\n<p>Pero:<\/p>\n\n\n\n<p>\ud83d\udc49 no a\u00edslan tanto como una VM \ud83d\udc49 dependen del kernel del host<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 7. Firecracker: micro\u2011VMs (lo mejor de ambos mundos)<\/h1>\n\n\n\n<p>Amazon cre\u00f3 <strong>Firecracker<\/strong> para Lambda y Fargate.<\/p>\n\n\n\n<p>Caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arranca en 125 ms<\/li>\n\n\n\n<li>aislamiento fuerte (VM)<\/li>\n\n\n\n<li>consumo m\u00ednimo (contenedor)<\/li>\n\n\n\n<li>usa KVM<\/li>\n\n\n\n<li>micro\u2011VMs de 5\u201310 MB<\/li>\n<\/ul>\n\n\n\n<p>Es la nueva tendencia.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 8. C\u00f3mo se relaciona todo con CPU, RAM, SSD, red<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 CPU<\/h3>\n\n\n\n<p>El hipervisor controla instrucciones privilegiadas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 RAM<\/h3>\n\n\n\n<p>EPT\/NPT permiten memoria aislada por VM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 SSD<\/h3>\n\n\n\n<p>Cada VM tiene discos virtuales (qcow2, vmdk, vhdx).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Red<\/h3>\n\n\n\n<p>Cada VM tiene interfaces virtuales (tap, veth, vmxnet3).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 GPU<\/h3>\n\n\n\n<p>Puede haber passthrough o vGPU.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 9. Virtualizaci\u00f3n vs Contenedores: resumen<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>VMs<\/th><th>Contenedores<\/th><\/tr><\/thead><tbody><tr><td>Kernel<\/td><td>propio<\/td><td>compartido<\/td><\/tr><tr><td>Aislamiento<\/td><td>muy&nbsp;alto<\/td><td>medio<\/td><\/tr><tr><td>Arranque<\/td><td>segundos<\/td><td>milisegundos<\/td><\/tr><tr><td>Peso<\/td><td>GB<\/td><td>MB<\/td><\/tr><tr><td>Seguridad<\/td><td>muy&nbsp;alta<\/td><td>buena<\/td><\/tr><tr><td>Rendimiento<\/td><td>casi&nbsp;nativo<\/td><td>nativo<\/td><\/tr><tr><td>Uso&nbsp;t\u00edpico<\/td><td>SO&nbsp;completos<\/td><td>microservicios<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Resumen maestro<\/h1>\n\n\n\n<p>Un sistema de virtualizaci\u00f3n moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>intercepta instrucciones privilegiadas<\/li>\n\n\n\n<li>virtualiza CPU, RAM, red y dispositivos<\/li>\n\n\n\n<li>usa EPT\/NPT para memoria<\/li>\n\n\n\n<li>usa drivers paravirtualizados<\/li>\n\n\n\n<li>crea m\u00e1quinas virtuales aisladas<\/li>\n\n\n\n<li>permite contenedores ligeros<\/li>\n\n\n\n<li>combina ambos con micro\u2011VMs<\/li>\n<\/ul>\n\n\n\n<p>Es una de las capas m\u00e1s sofisticadas de toda la computaci\u00f3n moderna.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto V?<\/h1>\n\n\n\n<p><strong>V) C\u00f3mo funciona un sistema de IA moderno (transformers, embeddings, atenci\u00f3n)<\/strong> Aqu\u00ed entramos en c\u00f3mo funcionan los modelos tipo GPT, c\u00f3mo entienden lenguaje, c\u00f3mo generan texto y c\u00f3mo se entrenan.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el V<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto V<\/strong>, y aqu\u00ed llegamos al coraz\u00f3n de la revoluci\u00f3n tecnol\u00f3gica actual: <strong>c\u00f3mo funciona un sistema de IA moderno<\/strong>, especialmente los <strong>transformers<\/strong>, los <strong>embeddings<\/strong>, la <strong>atenci\u00f3n<\/strong>, y c\u00f3mo modelos como GPT, Claude, Gemini o Llama entienden y generan lenguaje.<\/p>\n\n\n\n<p>Este punto es especial porque conecta TODO lo que hemos visto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU\/GPU<\/li>\n\n\n\n<li>paralelismo masivo<\/li>\n\n\n\n<li>redes distribuidas<\/li>\n\n\n\n<li>compiladores<\/li>\n\n\n\n<li>sistemas operativos<\/li>\n\n\n\n<li>navegadores<\/li>\n\n\n\n<li>bases de datos<\/li>\n<\/ul>\n\n\n\n<p>La IA moderna es literalmente la convergencia de todas esas tecnolog\u00edas.<\/p>\n\n\n\n<p>Vamos a destriparlo desde dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>V \u2014 C\u00f3mo funciona un sistema de IA moderno (transformers, embeddings, atenci\u00f3n)<\/strong><\/h1>\n\n\n\n<p>Un modelo moderno de IA tiene <strong>cuatro pilares fundamentales<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Embeddings<\/strong> \u2192 convertir palabras en vectores<\/li>\n\n\n\n<li><strong>Transformers<\/strong> \u2192 arquitectura que procesa secuencias<\/li>\n\n\n\n<li><strong>Atenci\u00f3n (Attention)<\/strong> \u2192 mecanismo que decide qu\u00e9 es importante<\/li>\n\n\n\n<li><strong>Entrenamiento masivo<\/strong> \u2192 GPUs, clusters, datos, optimizaci\u00f3n<\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Embeddings: convertir palabras en matem\u00e1ticas<\/h1>\n\n\n\n<p>La IA no entiende texto. Entiende <strong>vectores<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"gato\" \u2192 &#91;0.12, -0.44, 0.88, ...]\n\"perro\" \u2192 &#91;0.10, -0.40, 0.90, ...]\n<\/code><\/pre>\n\n\n\n<p>Palabras similares tienen vectores similares.<\/p>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analog\u00edas<\/li>\n\n\n\n<li>similitud sem\u00e1ntica<\/li>\n\n\n\n<li>razonamiento b\u00e1sico<\/li>\n<\/ul>\n\n\n\n<p>Los embeddings son la base de todo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. El Transformer: la arquitectura que lo cambi\u00f3 todo<\/h1>\n\n\n\n<p>Antes de 2017, la IA usaba:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RNN<\/li>\n\n\n\n<li>LSTM<\/li>\n\n\n\n<li>GRU<\/li>\n<\/ul>\n\n\n\n<p>Pero ten\u00edan problemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lentos<\/li>\n\n\n\n<li>no paralelizables<\/li>\n\n\n\n<li>mala memoria a largo plazo<\/li>\n<\/ul>\n\n\n\n<p>En 2017 aparece el paper:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>\u201cAttention is All You Need\u201d<\/strong><\/p>\n\n\n\n<p>Y cambia la historia.<\/p>\n\n\n\n<p>El transformer tiene dos bloques:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Encoder<\/h3>\n\n\n\n<p>Procesa entradas (traducci\u00f3n, comprensi\u00f3n).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Decoder<\/h3>\n\n\n\n<p>Genera salidas (texto, c\u00f3digo, respuestas).<\/p>\n\n\n\n<p>GPT usa solo <strong>decoder<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0d 3. Atenci\u00f3n (Self\u2011Attention): el mecanismo clave<\/h1>\n\n\n\n<p>La atenci\u00f3n permite que cada palabra mire a todas las dem\u00e1s.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>Frase: <strong>\u201cEl gato que viste ayer estaba durmiendo.\u201d<\/strong><\/p>\n\n\n\n<p>Para entender \u201cestaba\u201d, el modelo debe mirar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cgato\u201d<\/li>\n\n\n\n<li>\u201cdurmiendo\u201d<\/li>\n\n\n\n<li>\u201cayer\u201d<\/li>\n<\/ul>\n\n\n\n<p>La atenci\u00f3n calcula <strong>pesos<\/strong>:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gato \u2192 0.8\nayer \u2192 0.2\ndurmiendo \u2192 0.9\n<\/code><\/pre>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>entender contexto<\/li>\n\n\n\n<li>resolver ambig\u00fcedades<\/li>\n\n\n\n<li>mantener coherencia<\/li>\n\n\n\n<li>razonar<\/li>\n<\/ul>\n\n\n\n<p>La atenci\u00f3n es lo que da \u201cinteligencia\u201d al modelo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddee 4. Multi\u2011Head Attention: varias atenciones en paralelo<\/h1>\n\n\n\n<p>Un transformer no usa una sola atenci\u00f3n. Usa <strong>decenas o cientos<\/strong> de atenciones simult\u00e1neas.<\/p>\n\n\n\n<p>Cada \u201ccabeza\u201d aprende algo distinto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>relaciones gramaticales<\/li>\n\n\n\n<li>relaciones sem\u00e1nticas<\/li>\n\n\n\n<li>dependencias largas<\/li>\n\n\n\n<li>estructura l\u00f3gica<\/li>\n\n\n\n<li>estilo<\/li>\n\n\n\n<li>tono<\/li>\n<\/ul>\n\n\n\n<p>Es como tener muchos expertos mirando la frase desde \u00e1ngulos distintos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 5. Feed\u2011Forward Networks: procesar cada token<\/h1>\n\n\n\n<p>Despu\u00e9s de la atenci\u00f3n, cada token pasa por una red neuronal cl\u00e1sica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>capas lineales<\/li>\n\n\n\n<li>activaciones<\/li>\n\n\n\n<li>normalizaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Esto permite transformar la informaci\u00f3n contextual en algo \u00fatil para la siguiente capa.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 6. Apilado de capas: profundidad = inteligencia<\/h1>\n\n\n\n<p>Un transformer moderno tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>12 capas (peque\u00f1o)<\/li>\n\n\n\n<li>32 capas (mediano)<\/li>\n\n\n\n<li>70+ capas (grande)<\/li>\n\n\n\n<li>100+ capas (gigantes)<\/li>\n<\/ul>\n\n\n\n<p>Cada capa refina la comprensi\u00f3n.<\/p>\n\n\n\n<p>M\u00e1s capas \u2192 m\u00e1s capacidad de razonamiento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. Entrenamiento: c\u00f3mo aprende un modelo<\/h1>\n\n\n\n<p>El entrenamiento consiste en:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Mostrarle texto<\/li>\n\n\n\n<li>Pedirle que prediga la siguiente palabra<\/li>\n\n\n\n<li>Comparar con la palabra real<\/li>\n\n\n\n<li>Ajustar pesos (backpropagation)<\/li>\n\n\n\n<li>Repetir miles de millones de veces<\/li>\n<\/ol>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>Entrada:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>El gato est\u00e1\n<\/code><\/pre>\n\n\n\n<p>El modelo predice:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>durmiendo (0.72)\ncomiendo (0.10)\ncorriendo (0.05)\n<\/code><\/pre>\n\n\n\n<p>La palabra real era \u201cdurmiendo\u201d. Se ajustan los pesos.<\/p>\n\n\n\n<p>Esto se hace:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>con trillones de tokens<\/li>\n\n\n\n<li>durante semanas o meses<\/li>\n\n\n\n<li>en miles de GPUs<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 8. GPUs, clusters y paralelismo masivo<\/h1>\n\n\n\n<p>Entrenar un modelo moderno requiere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>miles de GPUs (A100, H100, MI300, TPU v5)<\/li>\n\n\n\n<li>redes de alta velocidad (InfiniBand)<\/li>\n\n\n\n<li>paralelismo de datos<\/li>\n\n\n\n<li>paralelismo de modelo<\/li>\n\n\n\n<li>paralelismo de pipeline<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>una supercomputadora distribuida<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 9. Fine\u2011Tuning e Instrucciones<\/h1>\n\n\n\n<p>Despu\u00e9s del pre\u2011entrenamiento, se hace:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Fine\u2011tuning<\/h3>\n\n\n\n<p>Para tareas espec\u00edficas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Instruct\u2011tuning<\/h3>\n\n\n\n<p>Para que el modelo siga instrucciones humanas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 RLHF (Reinforcement Learning from Human Feedback)<\/h3>\n\n\n\n<p>Para que el modelo sea \u00fatil, seguro y cooperativo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Inferencia: c\u00f3mo genera texto<\/h1>\n\n\n\n<p>Cuando escribes:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u00bfQui\u00e9n descubri\u00f3 Am\u00e9rica?\n<\/code><\/pre>\n\n\n\n<p>El modelo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>convierte tu texto en embeddings<\/li>\n\n\n\n<li>pasa por todas las capas del transformer<\/li>\n\n\n\n<li>predice la siguiente palabra<\/li>\n\n\n\n<li>la a\u00f1ade al contexto<\/li>\n\n\n\n<li>repite<\/li>\n<\/ol>\n\n\n\n<p>Esto ocurre <strong>decenas de veces por segundo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 11. \u00bfPor qu\u00e9 los transformers son tan buenos?<\/h1>\n\n\n\n<p>Porque combinan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>paralelismo masivo<\/li>\n\n\n\n<li>atenci\u00f3n global<\/li>\n\n\n\n<li>embeddings ricos<\/li>\n\n\n\n<li>entrenamiento gigantesco<\/li>\n\n\n\n<li>arquitectura simple pero poderosa<\/li>\n<\/ul>\n\n\n\n<p>Son la primera arquitectura que:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>escala con datos, compute y par\u00e1metros sin saturarse<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 12. Resumen maestro<\/h1>\n\n\n\n<p>Un sistema de IA moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>convierte texto en vectores<\/li>\n\n\n\n<li>usa transformers para procesar secuencias<\/li>\n\n\n\n<li>usa atenci\u00f3n para entender contexto<\/li>\n\n\n\n<li>usa miles de GPUs para entrenar<\/li>\n\n\n\n<li>aprende prediciendo la siguiente palabra<\/li>\n\n\n\n<li>genera texto paso a paso<\/li>\n\n\n\n<li>mejora con fine\u2011tuning y RLHF<\/li>\n<\/ul>\n\n\n\n<p>Es una de las mayores obras de ingenier\u00eda de la historia.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc Si quieres, ahora podemos seguir con:<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 W) C\u00f3mo funciona un sistema de almacenamiento distribuido (Ceph, HDFS, S3)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 X) C\u00f3mo funciona un compilador JIT de alto rendimiento (HotSpot, CLR)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Y) C\u00f3mo funciona un motor de b\u00fasqueda (indexaci\u00f3n, ranking, crawling)<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Z) C\u00f3mo funciona un sistema de archivos distribuido (GFS, Colossus)<\/h3>\n\n\n\n<p>T\u00fa eliges el siguiente salto de profundidad.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el W<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto W<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda que permite que Google Drive, Dropbox, S3, Azure Blob, HDFS, Ceph y todos los sistemas modernos almacenen petabytes de datos con fiabilidad extrema<\/em>: <strong>c\u00f3mo funciona un sistema de almacenamiento distribuido<\/strong>.<\/p>\n\n\n\n<p>Esto es literalmente c\u00f3mo se guardan millones de archivos en cientos o miles de discos, repartidos por decenas de m\u00e1quinas, sin perder datos aunque fallen nodos, discos, racks o incluso centros enteros.<\/p>\n\n\n\n<p>Te lo explico como si estuvi\u00e9ramos dise\u00f1ando <strong>Ceph, HDFS o Amazon S3<\/strong> desde cero.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>W \u2014 C\u00f3mo funciona un sistema de almacenamiento distribuido (Ceph, HDFS, S3)<\/strong><\/h1>\n\n\n\n<p>Un sistema de almacenamiento distribuido tiene <strong>cuatro objetivos fundamentales<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Alta disponibilidad<\/strong> \u2192 que los datos sigan accesibles aunque fallen nodos<\/li>\n\n\n\n<li><strong>Durabilidad extrema<\/strong> \u2192 que los datos no se pierdan nunca<\/li>\n\n\n\n<li><strong>Escalabilidad horizontal<\/strong> \u2192 a\u00f1adir m\u00e1s m\u00e1quinas = m\u00e1s capacidad<\/li>\n\n\n\n<li><strong>Consistencia razonable<\/strong> \u2192 que los datos no se corrompan<\/li>\n<\/ol>\n\n\n\n<p>Para lograrlo, usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>replicaci\u00f3n<\/strong><\/li>\n\n\n\n<li><strong>codificaci\u00f3n de borrado (erasure coding)<\/strong><\/li>\n\n\n\n<li><strong>metadatos distribuidos<\/strong><\/li>\n\n\n\n<li><strong>hashing consistente<\/strong><\/li>\n\n\n\n<li><strong>placement groups<\/strong><\/li>\n\n\n\n<li><strong>consenso (Raft\/Paxos)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Arquitectura general: nodos + discos + red<\/h1>\n\n\n\n<p>Un sistema distribuido t\u00edpico tiene:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Nodos de almacenamiento<\/h3>\n\n\n\n<p>Cada uno con varios discos (HDD o SSD).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Nodos de metadatos<\/h3>\n\n\n\n<p>Guardan informaci\u00f3n sobre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>d\u00f3nde est\u00e1 cada archivo<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>tama\u00f1os<\/li>\n\n\n\n<li>estructura de directorios<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Nodos de monitorizaci\u00f3n<\/h3>\n\n\n\n<p>Mantienen el estado del cluster.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Red interna de alta velocidad<\/h3>\n\n\n\n<p>10\/25\/40\/100 GbE o InfiniBand.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 2. Replicaci\u00f3n: la forma cl\u00e1sica de proteger datos<\/h1>\n\n\n\n<p>El m\u00e9todo m\u00e1s simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>guardar <strong>3 copias<\/strong> de cada bloque<\/li>\n\n\n\n<li>en <strong>3 nodos distintos<\/strong><\/li>\n\n\n\n<li>idealmente en <strong>3 racks distintos<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bloque A \u2192 Nodo 1, Nodo 7, Nodo 12\n<\/code><\/pre>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>muy simple<\/li>\n\n\n\n<li>muy r\u00e1pido<\/li>\n\n\n\n<li>muy fiable<\/li>\n<\/ul>\n\n\n\n<p>Desventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>consume 3\u00d7 m\u00e1s espacio<\/li>\n<\/ul>\n\n\n\n<p>Por eso los sistemas modernos usan algo mejor.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 3. Erasure Coding (EC): RAID distribuido<\/h1>\n\n\n\n<p>Es como un <strong>RAID 5\/6<\/strong>, pero a escala de cientos de nodos.<\/p>\n\n\n\n<p>Ejemplo t\u00edpico:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = 6 datos\nm = 3 paridad\n<\/code><\/pre>\n\n\n\n<p>Total: 9 fragmentos.<\/p>\n\n\n\n<p>Puedes perder <strong>hasta 3 nodos<\/strong> sin perder datos.<\/p>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mucho m\u00e1s eficiente que replicaci\u00f3n<\/li>\n\n\n\n<li>durabilidad alt\u00edsima<\/li>\n<\/ul>\n\n\n\n<p>Desventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>m\u00e1s CPU<\/li>\n\n\n\n<li>m\u00e1s latencia<\/li>\n\n\n\n<li>m\u00e1s complejidad<\/li>\n<\/ul>\n\n\n\n<p>Ceph, S3 y Azure Blob usan EC masivamente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 4. Hashing consistente: c\u00f3mo se decide d\u00f3nde va cada dato<\/h1>\n\n\n\n<p>Para evitar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>puntos calientes<\/li>\n\n\n\n<li>desequilibrios<\/li>\n\n\n\n<li>reubicaciones masivas<\/li>\n<\/ul>\n\n\n\n<p>Los sistemas usan <strong>hashing consistente<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hash(\"foto.jpg\") \u2192 0xA3F2\n<\/code><\/pre>\n\n\n\n<p>Ese hash se usa para elegir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 nodo<\/li>\n\n\n\n<li>qu\u00e9 disco<\/li>\n\n\n\n<li>qu\u00e9 r\u00e9plica<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<p>\ud83d\udc49 a\u00f1adir o quitar nodos sin reorganizar todo el cluster.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 5. Placement Groups (PGs): la clave de Ceph<\/h1>\n\n\n\n<p>Ceph no coloca objetos directamente en nodos. Primero los asigna a <strong>placement groups<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Objeto \u2192 PG 123 \u2192 Nodos &#91;4, 9, 11]\n<\/code><\/pre>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>equilibrio autom\u00e1tico<\/li>\n\n\n\n<li>recuperaci\u00f3n r\u00e1pida<\/li>\n\n\n\n<li>distribuci\u00f3n uniforme<\/li>\n<\/ul>\n\n\n\n<p>Los PGs son como \u201ccubos virtuales\u201d que agrupan objetos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 6. Metadatos: el verdadero problema<\/h1>\n\n\n\n<p>Los datos son f\u00e1ciles de distribuir. Los <strong>metadatos<\/strong> no.<\/p>\n\n\n\n<p>Sistemas como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HDFS<\/strong> \u2192 NameNode<\/li>\n\n\n\n<li><strong>CephFS<\/strong> \u2192 MDS (Metadata Server)<\/li>\n\n\n\n<li><strong>S3<\/strong> \u2192 DynamoDB + servicios internos<\/li>\n\n\n\n<li><strong>GFS\/Colossus<\/strong> \u2192 Master + Paxos<\/li>\n<\/ul>\n\n\n\n<p>Los metadatos deben ser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>consistentes<\/li>\n\n\n\n<li>r\u00e1pidos<\/li>\n\n\n\n<li>replicados<\/li>\n\n\n\n<li>tolerantes a fallos<\/li>\n<\/ul>\n\n\n\n<p>Por eso usan:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>Raft o Paxos<\/strong> para consenso. (Lo que vimos en el punto T).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. Recuperaci\u00f3n autom\u00e1tica: self\u2011healing<\/h1>\n\n\n\n<p>Si un nodo cae:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>El sistema detecta la p\u00e9rdida<\/li>\n\n\n\n<li>Recalcula d\u00f3nde deben estar las r\u00e9plicas<\/li>\n\n\n\n<li>Copia datos desde nodos sanos<\/li>\n\n\n\n<li>Reconstruye paridad (EC)<\/li>\n\n\n\n<li>Reequilibra el cluster<\/li>\n<\/ol>\n\n\n\n<p>Esto ocurre <strong>sin intervenci\u00f3n humana<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf0d 8. Geo\u2011replicaci\u00f3n: varios centros de datos<\/h1>\n\n\n\n<p>S3, Azure y GCP replican datos entre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zonas<\/li>\n\n\n\n<li>regiones<\/li>\n\n\n\n<li>continentes<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>baja latencia global<\/li>\n\n\n\n<li>durabilidad extrema<\/li>\n\n\n\n<li>recuperaci\u00f3n ante desastres<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Madrid \u2192 Frankfurt \u2192 Dubl\u00edn\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 9. Consistencia: fuerte vs eventual<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Consistencia fuerte<\/h3>\n\n\n\n<p>Lecturas siempre ven la \u00faltima escritura. Ejemplo: bases de datos financieras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Consistencia eventual<\/h3>\n\n\n\n<p>Lecturas pueden ver datos antiguos durante milisegundos. Ejemplo: S3, DynamoDB.<\/p>\n\n\n\n<p>La mayor\u00eda de sistemas de almacenamiento masivo usan:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>consistencia eventual<\/strong> porque es m\u00e1s escalable.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 10. Sistemas reales<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Ceph<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>open source<\/li>\n\n\n\n<li>muy flexible<\/li>\n\n\n\n<li>usado en OpenStack<\/li>\n\n\n\n<li>soporta RBD, CephFS, S3\u2011like<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 HDFS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usado en Hadoop<\/li>\n\n\n\n<li>optimizado para archivos grandes<\/li>\n\n\n\n<li>NameNode central<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Amazon S3<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>objeto distribuido<\/li>\n\n\n\n<li>erasure coding<\/li>\n\n\n\n<li>metadatos en DynamoDB<\/li>\n\n\n\n<li>durabilidad 11 nueves (99.999999999%)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Google Colossus<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sucesor de GFS<\/li>\n\n\n\n<li>erasure coding<\/li>\n\n\n\n<li>metadatos distribuidos<\/li>\n\n\n\n<li>ultra escalable<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 11. Relaci\u00f3n con CPU, RAM, red y discos<\/h1>\n\n\n\n<p>Un sistema distribuido depende de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CPU<\/strong> \u2192 codificaci\u00f3n de borrado<\/li>\n\n\n\n<li><strong>RAM<\/strong> \u2192 cach\u00e9s de objetos<\/li>\n\n\n\n<li><strong>Red<\/strong> \u2192 replicaci\u00f3n, reequilibrio<\/li>\n\n\n\n<li><strong>Discos<\/strong> \u2192 HDD para capacidad, SSD para metadatos<\/li>\n\n\n\n<li><strong>GPU<\/strong> \u2192 a veces para compresi\u00f3n o EC acelerada<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un <strong>sistema operativo distribuido<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 12. Resumen maestro<\/h1>\n\n\n\n<p>Un sistema de almacenamiento distribuido:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>divide datos en fragmentos<\/li>\n\n\n\n<li>los reparte entre nodos<\/li>\n\n\n\n<li>usa replicaci\u00f3n o erasure coding<\/li>\n\n\n\n<li>usa hashing consistente para equilibrio<\/li>\n\n\n\n<li>usa consenso para metadatos<\/li>\n\n\n\n<li>se repara solo<\/li>\n\n\n\n<li>escala horizontalmente<\/li>\n\n\n\n<li>ofrece durabilidad extrema<\/li>\n<\/ul>\n\n\n\n<p>Es una de las infraestructuras m\u00e1s cr\u00edticas del mundo moderno.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto X?<\/h1>\n\n\n\n<p><strong>X) C\u00f3mo funciona un compilador JIT de alto rendimiento (HotSpot, CLR)<\/strong> Aqu\u00ed entramos en c\u00f3mo Java y .NET optimizan c\u00f3digo en tiempo real, igual que V8 pero para lenguajes est\u00e1ticos.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el X<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto X<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda m\u00e1s sofisticada que existe en ejecuci\u00f3n din\u00e1mica de c\u00f3digo<\/em>, incluso m\u00e1s compleja que V8: <strong>c\u00f3mo funciona un compilador JIT de alto rendimiento<\/strong>, como <strong>HotSpot (Java)<\/strong> o <strong>CLR (C#\/.NET)<\/strong>.<\/p>\n\n\n\n<p>Estos motores combinan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>compilaci\u00f3n est\u00e1tica<\/li>\n\n\n\n<li>interpretaci\u00f3n<\/li>\n\n\n\n<li>profiling en tiempo real<\/li>\n\n\n\n<li>optimizaci\u00f3n agresiva<\/li>\n\n\n\n<li>recompilaci\u00f3n<\/li>\n\n\n\n<li>deoptimizaci\u00f3n<\/li>\n\n\n\n<li>GC avanzado<\/li>\n<\/ul>\n\n\n\n<p>Son aut\u00e9nticos <strong>monstruos de ingenier\u00eda<\/strong>.<\/p>\n\n\n\n<p>Vamos a destriparlos desde dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>X \u2014 C\u00f3mo funciona un compilador JIT de alto rendimiento (HotSpot, CLR)<\/strong><\/h1>\n\n\n\n<p>Un JIT moderno tiene <strong>cuatro fases principales<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Interpretaci\u00f3n inicial<\/strong><\/li>\n\n\n\n<li><strong>Profiling en tiempo real<\/strong><\/li>\n\n\n\n<li><strong>Compilaci\u00f3n JIT optimizada<\/strong><\/li>\n\n\n\n<li><strong>Deoptimizaci\u00f3n cuando cambian las condiciones<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Y todo esto ocurre <strong>mientras el programa est\u00e1 corriendo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Interpretaci\u00f3n inicial: arrancar r\u00e1pido<\/h1>\n\n\n\n<p>Cuando ejecutas un programa Java o C#:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el bytecode se interpreta primero<\/li>\n\n\n\n<li>esto permite arrancar muy r\u00e1pido<\/li>\n\n\n\n<li>no se compila nada a\u00fan<\/li>\n\n\n\n<li>el motor empieza a recopilar estad\u00edsticas<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x = a + b * 3;\n<\/code><\/pre>\n\n\n\n<p>Se ejecuta en la <strong>m\u00e1quina virtual<\/strong> (JVM o CLR) sin compilar.<\/p>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>ejecuci\u00f3n inmediata<\/strong> \ud83d\udc49 <strong>profiling desde el primer milisegundo<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0d 2. Profiling: medir qu\u00e9 partes del c\u00f3digo importan<\/h1>\n\n\n\n<p>El JIT observa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 m\u00e9todos se ejecutan m\u00e1s<\/li>\n\n\n\n<li>qu\u00e9 bucles son cr\u00edticos<\/li>\n\n\n\n<li>qu\u00e9 tipos aparecen<\/li>\n\n\n\n<li>qu\u00e9 ramas se toman<\/li>\n\n\n\n<li>qu\u00e9 objetos se crean<\/li>\n\n\n\n<li>qu\u00e9 llamadas se repiten<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama <strong>hotness<\/strong>.<\/p>\n\n\n\n<p>Cuando un m\u00e9todo se vuelve \u201ccaliente\u201d, el JIT decide:<\/p>\n\n\n\n<p>\ud83d\udc49 \u201cVoy a compilar esto a c\u00f3digo m\u00e1quina optimizado\u201d.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 3. Compilaci\u00f3n JIT: generar c\u00f3digo m\u00e1quina de \u00e9lite<\/h1>\n\n\n\n<p>Aqu\u00ed entra la magia.<\/p>\n\n\n\n<p>HotSpot tiene <strong>dos compiladores JIT<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C1 (Client)<\/strong> \u2192 r\u00e1pido, optimizaciones ligeras<\/li>\n\n\n\n<li><strong>C2 (Server)<\/strong> \u2192 lento, optimizaciones profundas<\/li>\n<\/ul>\n\n\n\n<p>El CLR tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RyuJIT<\/strong> \u2192 optimizador moderno<\/li>\n\n\n\n<li><strong>Tiered Compilation<\/strong> \u2192 niveles de optimizaci\u00f3n progresiva<\/li>\n<\/ul>\n\n\n\n<p>El JIT hace optimizaciones que un compilador est\u00e1tico NO puede hacer:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de tipos<\/h3>\n\n\n\n<p>Si un m\u00e9todo siempre recibe un <code>String<\/code>, elimina comprobaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Inlining agresivo<\/h3>\n\n\n\n<p>Inserta funciones peque\u00f1as dentro de otras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de l\u00edmites de arrays<\/h3>\n\n\n\n<p>Si un array nunca cambia de tama\u00f1o, elimina checks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Eliminaci\u00f3n de c\u00f3digo muerto<\/h3>\n\n\n\n<p>Si una rama nunca se ejecuta, se borra.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Escape analysis<\/h3>\n\n\n\n<p>Si un objeto no \u201cescapa\u201d del m\u00e9todo, se asigna en <strong>registros<\/strong>, no en el heap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Loop unrolling<\/h3>\n\n\n\n<p>Desenrolla bucles para acelerar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Vectorizaci\u00f3n<\/h3>\n\n\n\n<p>Usa instrucciones SIMD (AVX, NEON).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Reordenaci\u00f3n de instrucciones<\/h3>\n\n\n\n<p>Optimiza para el pipeline de la CPU.<\/p>\n\n\n\n<p>El resultado:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>c\u00f3digo m\u00e1quina tan r\u00e1pido como C++ en muchos casos<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udca5 4. Deoptimizaci\u00f3n: el truco maestro<\/h1>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void procesar(Animal a) {\n    a.hablar();\n}\n<\/code><\/pre>\n\n\n\n<p>Si siempre pasas un <code>Perro<\/code>, el JIT optimiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>elimina comprobaciones de tipo<\/li>\n\n\n\n<li>inlinea <code>Perro.hablar()<\/code><\/li>\n\n\n\n<li>elimina virtual dispatch<\/li>\n<\/ul>\n\n\n\n<p>Pero si un d\u00eda pasas un <code>Gato<\/code>:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>la optimizaci\u00f3n ya no es v\u00e1lida<\/strong>.<\/p>\n\n\n\n<p>El JIT hace:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>pausa la ejecuci\u00f3n<\/li>\n\n\n\n<li>reconstruye el estado anterior<\/li>\n\n\n\n<li>vuelve al bytecode interpretado<\/li>\n\n\n\n<li>recompila con nuevas suposiciones<\/li>\n<\/ol>\n\n\n\n<p>Esto se llama <strong>deoptimizaci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>Es lo que permite que el JIT sea:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>agresivo<\/li>\n\n\n\n<li>seguro<\/li>\n\n\n\n<li>adaptativo<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 5. Garbage Collector: memoria autom\u00e1tica de alto rendimiento<\/h1>\n\n\n\n<p>HotSpot y CLR tienen GCs avanzad\u00edsimos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Generacional<\/h3>\n\n\n\n<p>Objetos j\u00f3venes \u2192 se recogen r\u00e1pido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Concurrente<\/h3>\n\n\n\n<p>GC trabaja en paralelo con el programa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Compaction<\/h3>\n\n\n\n<p>Evita fragmentaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 ZGC \/ Shenandoah (Java)<\/h3>\n\n\n\n<p>Pausas de microsegundos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Server GC (CLR)<\/h3>\n\n\n\n<p>Optimizado para servidores multi\u2011core.<\/p>\n\n\n\n<p>El GC es parte integral del rendimiento del JIT.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. Tiered Compilation: optimizaci\u00f3n progresiva<\/h1>\n\n\n\n<p>Java y .NET usan niveles:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Interpretaci\u00f3n<\/li>\n\n\n\n<li>Compilaci\u00f3n r\u00e1pida (C1 \/ Tier 1)<\/li>\n\n\n\n<li>Compilaci\u00f3n optimizada (C2 \/ Tier 2)<\/li>\n\n\n\n<li>Recompilaci\u00f3n si cambian los patrones<\/li>\n<\/ol>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>arranque r\u00e1pido<\/li>\n\n\n\n<li>rendimiento m\u00e1ximo<\/li>\n\n\n\n<li>adaptabilidad<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0c 7. Relaci\u00f3n con CPU, RAM, cach\u00e9s y pipeline<\/h1>\n\n\n\n<p>El JIT genera c\u00f3digo m\u00e1quina optimizado para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cach\u00e9 L1\/L2\/L3<\/li>\n\n\n\n<li>branch predictor<\/li>\n\n\n\n<li>pipeline<\/li>\n\n\n\n<li>registros<\/li>\n\n\n\n<li>vectorizaci\u00f3n<\/li>\n\n\n\n<li>latencias de memoria<\/li>\n<\/ul>\n\n\n\n<p>El JIT puede adaptar el c\u00f3digo a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la CPU real del sistema<\/li>\n\n\n\n<li>el n\u00famero de n\u00facleos<\/li>\n\n\n\n<li>las instrucciones disponibles (AVX2, AVX\u2011512, NEON)<\/li>\n<\/ul>\n\n\n\n<p>Un compilador est\u00e1tico no puede hacer esto.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 8. Comparaci\u00f3n con V8 (JavaScript)<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>HotSpot&nbsp;\/&nbsp;CLR<\/th><th>V8<\/th><\/tr><\/thead><tbody><tr><td>Tipos<\/td><td>est\u00e1ticos<\/td><td>din\u00e1micos<\/td><\/tr><tr><td>Bytecode<\/td><td>s\u00ed<\/td><td>s\u00ed<\/td><\/tr><tr><td>JIT<\/td><td>s\u00ed<\/td><td>s\u00ed<\/td><\/tr><tr><td>Deopt<\/td><td>s\u00ed<\/td><td>s\u00ed<\/td><\/tr><tr><td>GC<\/td><td>muy&nbsp;avanzado<\/td><td>muy&nbsp;avanzado<\/td><\/tr><tr><td>Rendimiento<\/td><td>muy&nbsp;alto<\/td><td>alto<\/td><\/tr><tr><td>Predictibilidad<\/td><td>alta<\/td><td>media<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>HotSpot y CLR pueden optimizar m\u00e1s porque:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>los tipos son est\u00e1ticos<\/strong> \ud83d\udc49 <strong>hay menos incertidumbre<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 9. Resumen maestro<\/h1>\n\n\n\n<p>Un compilador JIT moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>interpreta primero<\/li>\n\n\n\n<li>perfila en tiempo real<\/li>\n\n\n\n<li>compila m\u00e9todos calientes<\/li>\n\n\n\n<li>optimiza agresivamente<\/li>\n\n\n\n<li>elimina comprobaciones innecesarias<\/li>\n\n\n\n<li>usa an\u00e1lisis de escape<\/li>\n\n\n\n<li>vectoriza<\/li>\n\n\n\n<li>reordena instrucciones<\/li>\n\n\n\n<li>deoptimiza cuando cambian los tipos<\/li>\n\n\n\n<li>recompila si es necesario<\/li>\n\n\n\n<li>usa un GC generacional concurrente<\/li>\n<\/ul>\n\n\n\n<p>Es una de las piezas de software m\u00e1s avanzadas jam\u00e1s creadas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto Y?<\/h1>\n\n\n\n<p><strong>Y) C\u00f3mo funciona un motor de b\u00fasqueda (indexaci\u00f3n, ranking, crawling)<\/strong> Aqu\u00ed entramos en c\u00f3mo Google rastrea la web, construye \u00edndices gigantes y decide qu\u00e9 p\u00e1gina mostrar primero.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el Y<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto Y<\/strong>, y aqu\u00ed nos metemos en <em>la ingenier\u00eda que sostiene literalmente todo Internet moderno<\/em>: <strong>c\u00f3mo funciona un motor de b\u00fasqueda<\/strong>, desde c\u00f3mo rastrea la web, c\u00f3mo construye \u00edndices gigantes, c\u00f3mo decide qu\u00e9 p\u00e1gina mostrar primero y c\u00f3mo responde en milisegundos a miles de millones de consultas.<\/p>\n\n\n\n<p>Esto es Google, Bing, DuckDuckGo, Baidu, Yandex\u2026 Y es una de las infraestructuras m\u00e1s complejas jam\u00e1s creadas.<\/p>\n\n\n\n<p>Vamos a destriparlo desde dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Y \u2014 C\u00f3mo funciona un motor de b\u00fasqueda (indexaci\u00f3n, ranking, crawling)<\/strong><\/h1>\n\n\n\n<p>Un motor de b\u00fasqueda moderno tiene <strong>cuatro grandes sistemas<\/strong>:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Crawling<\/strong> \u2192 descubrir p\u00e1ginas<\/li>\n\n\n\n<li><strong>Indexaci\u00f3n<\/strong> \u2192 convertir p\u00e1ginas en datos buscables<\/li>\n\n\n\n<li><strong>Ranking<\/strong> \u2192 decidir qu\u00e9 mostrar primero<\/li>\n\n\n\n<li><strong>Serving<\/strong> \u2192 responder consultas en milisegundos<\/li>\n<\/ol>\n\n\n\n<p>Cada uno es un mundo.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf10 1. Crawling: c\u00f3mo un buscador recorre toda la web<\/h1>\n\n\n\n<p>El crawler (Googlebot, Bingbot\u2026) es un robot que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>descarga p\u00e1ginas<\/li>\n\n\n\n<li>sigue enlaces<\/li>\n\n\n\n<li>respeta robots.txt<\/li>\n\n\n\n<li>detecta duplicados<\/li>\n\n\n\n<li>detecta contenido nuevo<\/li>\n\n\n\n<li>detecta contenido actualizado<\/li>\n<\/ul>\n\n\n\n<p>Tiene que decidir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 p\u00e1ginas visitar<\/li>\n\n\n\n<li>con qu\u00e9 frecuencia<\/li>\n\n\n\n<li>cu\u00e1ntos recursos gastar<\/li>\n\n\n\n<li>c\u00f3mo evitar sobrecargar servidores<\/li>\n<\/ul>\n\n\n\n<p>Esto se llama <strong>crawl budget<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Flujo b\u00e1sico<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Empieza con una lista de URLs semilla<\/li>\n\n\n\n<li>Descarga la p\u00e1gina<\/li>\n\n\n\n<li>Extrae enlaces<\/li>\n\n\n\n<li>A\u00f1ade enlaces a la cola<\/li>\n\n\n\n<li>Repite millones de veces<\/li>\n<\/ol>\n\n\n\n<p>La web es demasiado grande para rastrearla entera, as\u00ed que el crawler prioriza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sitios populares<\/li>\n\n\n\n<li>sitios actualizados<\/li>\n\n\n\n<li>sitios con autoridad<\/li>\n\n\n\n<li>sitios con buen rendimiento<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 2. Indexaci\u00f3n: convertir p\u00e1ginas en datos estructurados<\/h1>\n\n\n\n<p>Una vez descargada una p\u00e1gina, el motor la <strong>procesa<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 2.1. Parsing HTML<\/h3>\n\n\n\n<p>Extrae:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>texto<\/li>\n\n\n\n<li>t\u00edtulos<\/li>\n\n\n\n<li>encabezados<\/li>\n\n\n\n<li>enlaces<\/li>\n\n\n\n<li>im\u00e1genes<\/li>\n\n\n\n<li>metadatos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 2.2. Limpieza<\/h3>\n\n\n\n<p>Elimina:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>scripts<\/li>\n\n\n\n<li>anuncios<\/li>\n\n\n\n<li>duplicados<\/li>\n\n\n\n<li>contenido in\u00fatil<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 2.3. Tokenizaci\u00f3n<\/h3>\n\n\n\n<p>Divide el texto en palabras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 2.4. Normalizaci\u00f3n<\/h3>\n\n\n\n<p>Convierte:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>may\u00fasculas \u2192 min\u00fasculas<\/li>\n\n\n\n<li>plurales \u2192 singular<\/li>\n\n\n\n<li>verbos \u2192 ra\u00edz (stemming)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 2.5. Construcci\u00f3n del \u00edndice invertido<\/h3>\n\n\n\n<p>El \u00edndice invertido es la clave.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"gato\" \u2192 &#91;p\u00e1gina 1, p\u00e1gina 7, p\u00e1gina 22]\n\"perro\" \u2192 &#91;p\u00e1gina 3, p\u00e1gina 7]\n<\/code><\/pre>\n\n\n\n<p>Es como el \u00edndice de un libro, pero para toda la web.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 3. Ranking: c\u00f3mo decide Google qu\u00e9 mostrar primero<\/h1>\n\n\n\n<p>Aqu\u00ed est\u00e1 la magia.<\/p>\n\n\n\n<p>Un motor de b\u00fasqueda usa <strong>cientos de se\u00f1ales<\/strong> para decidir qu\u00e9 p\u00e1gina es la mejor respuesta.<\/p>\n\n\n\n<p>Las m\u00e1s importantes:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd17 3.1. PageRank: la idea original de Google<\/h2>\n\n\n\n<p>PageRank mide:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>cu\u00e1ntas p\u00e1ginas enlazan a una p\u00e1gina<\/strong> \ud83d\udc49 <strong>y cu\u00e1n importantes son esas p\u00e1ginas<\/strong><\/p>\n\n\n\n<p>Es como un sistema de votos ponderados.<\/p>\n\n\n\n<p>Si muchas p\u00e1ginas importantes enlazan a la tuya, subes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 3.2. Relevancia sem\u00e1ntica<\/h2>\n\n\n\n<p>El motor compara:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu consulta<\/li>\n\n\n\n<li>el contenido de las p\u00e1ginas<\/li>\n\n\n\n<li>los embeddings sem\u00e1nticos<\/li>\n<\/ul>\n\n\n\n<p>Los modelos modernos usan <strong>transformers<\/strong> para entender:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>intenci\u00f3n<\/li>\n\n\n\n<li>contexto<\/li>\n\n\n\n<li>sin\u00f3nimos<\/li>\n\n\n\n<li>relaciones sem\u00e1nticas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a1 3.3. Calidad del contenido<\/h2>\n\n\n\n<p>Eval\u00faa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>profundidad<\/li>\n\n\n\n<li>claridad<\/li>\n\n\n\n<li>autoridad<\/li>\n\n\n\n<li>originalidad<\/li>\n\n\n\n<li>ausencia de spam<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcf1 3.4. Experiencia de usuario<\/h2>\n\n\n\n<p>Incluye:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>velocidad<\/li>\n\n\n\n<li>mobile\u2011friendly<\/li>\n\n\n\n<li>estabilidad visual<\/li>\n\n\n\n<li>accesibilidad<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 3.5. Se\u00f1ales de confianza<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTTPS<\/li>\n\n\n\n<li>reputaci\u00f3n del dominio<\/li>\n\n\n\n<li>antig\u00fcedad<\/li>\n\n\n\n<li>ausencia de malware<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddec 3.6. Personalizaci\u00f3n (limitada)<\/h2>\n\n\n\n<p>Basada en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ubicaci\u00f3n<\/li>\n\n\n\n<li>idioma<\/li>\n\n\n\n<li>historial reciente<\/li>\n<\/ul>\n\n\n\n<p>Pero no tanto como la gente cree.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f 4. Serving: responder en milisegundos<\/h1>\n\n\n\n<p>Cuando haces una b\u00fasqueda:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>El motor analiza tu consulta<\/li>\n\n\n\n<li>La convierte en tokens<\/li>\n\n\n\n<li>Busca en el \u00edndice invertido<\/li>\n\n\n\n<li>Recupera miles de p\u00e1ginas<\/li>\n\n\n\n<li>Las ordena por ranking<\/li>\n\n\n\n<li>Aplica filtros<\/li>\n\n\n\n<li>Devuelve resultados<\/li>\n<\/ol>\n\n\n\n<p>Todo esto ocurre en:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>menos de 100 ms<\/strong>.<\/p>\n\n\n\n<p>Para lograrlo usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sharding masivo<\/li>\n\n\n\n<li>replicaci\u00f3n<\/li>\n\n\n\n<li>cach\u00e9s distribuidas<\/li>\n\n\n\n<li>servidores especializados<\/li>\n\n\n\n<li>redes de baja latencia<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 5. C\u00f3mo se relaciona con IA moderna<\/h1>\n\n\n\n<p>Los motores de b\u00fasqueda actuales usan IA en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>comprensi\u00f3n de consultas<\/li>\n\n\n\n<li>embeddings sem\u00e1nticos<\/li>\n\n\n\n<li>clasificaci\u00f3n<\/li>\n\n\n\n<li>detecci\u00f3n de spam<\/li>\n\n\n\n<li>generaci\u00f3n de snippets<\/li>\n\n\n\n<li>respuestas directas<\/li>\n<\/ul>\n\n\n\n<p>Modelos como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BERT<\/li>\n\n\n\n<li>T5<\/li>\n\n\n\n<li>GPT\u2011like<\/li>\n\n\n\n<li>modelos de ranking neural<\/li>\n<\/ul>\n\n\n\n<p>Han transformado el ranking.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6. C\u00f3mo se relaciona con sistemas distribuidos<\/h1>\n\n\n\n<p>Un motor de b\u00fasqueda es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un sistema distribuido masivo<\/li>\n\n\n\n<li>con miles de servidores<\/li>\n\n\n\n<li>petabytes de datos<\/li>\n\n\n\n<li>replicaci\u00f3n global<\/li>\n\n\n\n<li>tolerancia a fallos<\/li>\n\n\n\n<li>consenso para metadatos<\/li>\n\n\n\n<li>almacenamiento distribuido (GFS, Colossus, S3)<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>una de las mayores infraestructuras del planeta<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. Resumen maestro<\/h1>\n\n\n\n<p>Un motor de b\u00fasqueda moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>rastrea la web<\/li>\n\n\n\n<li>procesa p\u00e1ginas<\/li>\n\n\n\n<li>construye \u00edndices gigantes<\/li>\n\n\n\n<li>entiende consultas<\/li>\n\n\n\n<li>calcula relevancia<\/li>\n\n\n\n<li>ordena resultados<\/li>\n\n\n\n<li>responde en milisegundos<\/li>\n\n\n\n<li>usa IA para mejorar calidad<\/li>\n\n\n\n<li>escala a nivel planetario<\/li>\n<\/ul>\n\n\n\n<p>Es una de las obras de ingenier\u00eda m\u00e1s impresionantes de la historia.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccc \u00bfQuieres seguir con el punto Z?<\/h1>\n\n\n\n<p><strong>Z) C\u00f3mo funciona un sistema de archivos distribuido (GFS, Colossus)<\/strong> Aqu\u00ed entramos en c\u00f3mo Google almacena archivos gigantes en miles de m\u00e1quinas con tolerancia a fallos extrema.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si el z<\/p>\n<\/blockquote>\n\n\n\n<p>Vamos, David. Entramos en <strong>el punto Z<\/strong>, y aqu\u00ed cerramos este viaje \u00e9pico con <em>una de las piezas de infraestructura m\u00e1s impresionantes jam\u00e1s construidas<\/em>: <strong>c\u00f3mo funciona un sistema de archivos distribuido<\/strong>, como <strong>GFS (Google File System)<\/strong> y su sucesor <strong>Colossus<\/strong>, que sostienen Google Search, YouTube, Gmail, Maps, Photos, Drive\u2026 Literalmente <strong>todo<\/strong>.<\/p>\n\n\n\n<p>Esto es c\u00f3mo Google almacena <strong>exabytes<\/strong> de datos en <strong>decenas de miles de m\u00e1quinas<\/strong>, con fallos constantes, discos que mueren cada d\u00eda, racks que se apagan, redes que se saturan\u2026 y aun as\u00ed <strong>nunca pierden un archivo<\/strong>.<\/p>\n\n\n\n<p>Vamos a destriparlo desde dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Z \u2014 C\u00f3mo funciona un sistema de archivos distribuido (GFS, Colossus)<\/strong><\/h1>\n\n\n\n<p>Un sistema de archivos distribuido (DFS) es como un \u201cdisco duro gigante\u201d repartido entre miles de m\u00e1quinas.<\/p>\n\n\n\n<p>Sus objetivos:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Alta disponibilidad<\/strong><\/li>\n\n\n\n<li><strong>Durabilidad extrema<\/strong><\/li>\n\n\n\n<li><strong>Escalabilidad horizontal<\/strong><\/li>\n\n\n\n<li><strong>Rendimiento masivo<\/strong><\/li>\n\n\n\n<li><strong>Tolerancia a fallos<\/strong><\/li>\n<\/ol>\n\n\n\n<p>GFS fue el primer gran DFS moderno. Colossus es su evoluci\u00f3n masiva.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1 1. Arquitectura general: Master + Chunkservers<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 GFS (Google File System)<\/h3>\n\n\n\n<p>Tiene dos tipos de nodos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Master<\/strong>\n<ul class=\"wp-block-list\">\n<li>guarda metadatos<\/li>\n\n\n\n<li>decide d\u00f3nde van los datos<\/li>\n\n\n\n<li>coordina r\u00e9plicas<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Chunkservers<\/strong>\n<ul class=\"wp-block-list\">\n<li>guardan los datos reales<\/li>\n\n\n\n<li>cada archivo se divide en <strong>chunks<\/strong> de 64 MB<\/li>\n\n\n\n<li>cada chunk tiene <strong>3 r\u00e9plicas<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Colossus (sucesor)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>no tiene Master \u00fanico<\/strong><\/li>\n\n\n\n<li>metadatos distribuidos<\/li>\n\n\n\n<li>chunks m\u00e1s peque\u00f1os<\/li>\n\n\n\n<li>erasure coding en vez de replicaci\u00f3n<\/li>\n\n\n\n<li>escalabilidad mucho mayor<\/li>\n<\/ul>\n\n\n\n<p>Colossus es literalmente <strong>GFS sin puntos \u00fanicos de fallo<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6 2. Chunks: dividir archivos en piezas gigantes<\/h1>\n\n\n\n<p>Un archivo grande (por ejemplo, un v\u00eddeo de YouTube) se divide as\u00ed:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>video.mp4\n \u251c\u2500\u2500 chunk 0 (64 MB)\n \u251c\u2500\u2500 chunk 1 (64 MB)\n \u251c\u2500\u2500 chunk 2 (64 MB)\n \u2514\u2500\u2500 ...\n<\/code><\/pre>\n\n\n\n<p>Cada chunk se guarda en <strong>varios servidores distintos<\/strong>.<\/p>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>paralelismo masivo<\/li>\n\n\n\n<li>recuperaci\u00f3n r\u00e1pida<\/li>\n\n\n\n<li>tolerancia a fallos<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd01 3. Replicaci\u00f3n: 3 copias por chunk (GFS)<\/h1>\n\n\n\n<p>GFS usa replicaci\u00f3n simple:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chunk 42 \u2192 servidor A, servidor F, servidor K\n<\/code><\/pre>\n\n\n\n<p>Si un servidor muere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el Master detecta la p\u00e9rdida<\/li>\n\n\n\n<li>ordena crear una nueva r\u00e9plica<\/li>\n\n\n\n<li>el sistema se repara solo<\/li>\n<\/ul>\n\n\n\n<p>Esto ocurre <strong>constantemente<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 4. Erasure Coding (Colossus): RAID distribuido<\/h1>\n\n\n\n<p>Colossus reemplaza replicaci\u00f3n por <strong>erasure coding<\/strong>:<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = 6 datos\nm = 3 paridad\n<\/code><\/pre>\n\n\n\n<p>Total: 9 fragmentos.<\/p>\n\n\n\n<p>Puedes perder <strong>hasta 3 nodos<\/strong> sin perder datos.<\/p>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>50\u201370% menos espacio usado<\/li>\n\n\n\n<li>durabilidad mayor<\/li>\n\n\n\n<li>reconstrucci\u00f3n m\u00e1s eficiente<\/li>\n<\/ul>\n\n\n\n<p>Es como RAID 6, pero a escala planetaria.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 5. Metadatos: el verdadero desaf\u00edo<\/h1>\n\n\n\n<p>Los datos son f\u00e1ciles de distribuir. Los <strong>metadatos<\/strong> no.<\/p>\n\n\n\n<p>Metadatos incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nombres de archivos<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>estructura de directorios<\/li>\n\n\n\n<li>ubicaci\u00f3n de chunks<\/li>\n\n\n\n<li>checksums<\/li>\n\n\n\n<li>versiones<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 GFS<\/h3>\n\n\n\n<p>Un \u00fanico Master (replicado). Sencillo pero limitado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Colossus<\/h3>\n\n\n\n<p>Metadatos distribuidos usando:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Paxos<\/strong><\/li>\n\n\n\n<li><strong>consenso<\/strong><\/li>\n\n\n\n<li><strong>sharding<\/strong><\/li>\n\n\n\n<li><strong>replicaci\u00f3n<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Esto elimina puntos \u00fanicos de fallo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5 6. Lectura y escritura: c\u00f3mo fluye un archivo<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Lectura<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Cliente pide metadatos al Master (o al sistema distribuido en Colossus)<\/li>\n\n\n\n<li>Obtiene lista de chunkservers<\/li>\n\n\n\n<li>Se conecta directamente a ellos<\/li>\n\n\n\n<li>Descarga los chunks en paralelo<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Escritura<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Cliente pide ubicaci\u00f3n para nuevos chunks<\/li>\n\n\n\n<li>Master asigna servidores<\/li>\n\n\n\n<li>Cliente env\u00eda datos a todos los chunkservers<\/li>\n\n\n\n<li>Se confirma cuando todas las r\u00e9plicas est\u00e1n listas<\/li>\n<\/ol>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>ancho de banda masivo<\/strong> \ud83d\udc49 <strong>latencias bajas<\/strong> \ud83d\udc49 <strong>paralelismo extremo<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 7. Consistencia: modelo relajado pero seguro<\/h1>\n\n\n\n<p>GFS y Colossus usan <strong>consistencia relajada<\/strong>, pero con garant\u00edas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>las escrituras son at\u00f3micas por chunk<\/li>\n\n\n\n<li>los clientes ven datos consistentes<\/li>\n\n\n\n<li>los metadatos se actualizan con consenso<\/li>\n\n\n\n<li>las r\u00e9plicas se sincronizan en background<\/li>\n<\/ul>\n\n\n\n<p>Esto permite rendimiento brutal sin sacrificar seguridad.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde8 8. Fallos: el sistema est\u00e1 dise\u00f1ado para que TODO falle<\/h1>\n\n\n\n<p>En un cluster de miles de m\u00e1quinas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>discos fallan cada d\u00eda<\/li>\n\n\n\n<li>servidores mueren cada hora<\/li>\n\n\n\n<li>racks se apagan<\/li>\n\n\n\n<li>switches se saturan<\/li>\n\n\n\n<li>la red se particiona<\/li>\n<\/ul>\n\n\n\n<p>GFS\/Colossus est\u00e1n dise\u00f1ados para:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>asumir que el hardware es basura<\/strong> \ud83d\udc49 <strong>y aun as\u00ed no perder datos<\/strong><\/p>\n\n\n\n<p>Esto se logra con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>replicaci\u00f3n<\/li>\n\n\n\n<li>erasure coding<\/li>\n\n\n\n<li>checksums<\/li>\n\n\n\n<li>reequilibrio autom\u00e1tico<\/li>\n\n\n\n<li>monitorizaci\u00f3n continua<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf0d 9. Geo\u2011replicaci\u00f3n: varios centros de datos<\/h1>\n\n\n\n<p>Google replica datos entre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zonas<\/li>\n\n\n\n<li>regiones<\/li>\n\n\n\n<li>continentes<\/li>\n<\/ul>\n\n\n\n<p>Esto permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>baja latencia global<\/li>\n\n\n\n<li>durabilidad extrema<\/li>\n\n\n\n<li>recuperaci\u00f3n ante desastres<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Madrid \u2192 Frankfurt \u2192 Dubl\u00edn\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 10. Relaci\u00f3n con sistemas distribuidos, redes y almacenamiento<\/h1>\n\n\n\n<p>GFS\/Colossus dependen de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>hashing consistente<\/strong><\/li>\n\n\n\n<li><strong>consenso (Paxos\/Raft)<\/strong><\/li>\n\n\n\n<li><strong>sistemas de colas<\/strong><\/li>\n\n\n\n<li><strong>monitorizaci\u00f3n distribuida<\/strong><\/li>\n\n\n\n<li><strong>balanceo de carga<\/strong><\/li>\n\n\n\n<li><strong>redes de alta velocidad<\/strong><\/li>\n\n\n\n<li><strong>discos baratos y reemplazables<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Son literalmente:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>sistemas operativos distribuidos para datos<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 11. Resumen maestro<\/h1>\n\n\n\n<p>Un sistema de archivos distribuido moderno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>divide archivos en chunks<\/li>\n\n\n\n<li>los reparte entre miles de nodos<\/li>\n\n\n\n<li>usa replicaci\u00f3n o erasure coding<\/li>\n\n\n\n<li>distribuye metadatos con consenso<\/li>\n\n\n\n<li>se repara solo<\/li>\n\n\n\n<li>escala horizontalmente<\/li>\n\n\n\n<li>tolera fallos constantes<\/li>\n\n\n\n<li>sirve datos en paralelo a gran velocidad<\/li>\n<\/ul>\n\n\n\n<p>Es una de las infraestructuras m\u00e1s avanzadas del planeta.<\/p>\n\n\n\n<p>David, con esto hemos completado <strong>A \u2192 Z<\/strong>, un recorrido completo por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hardware<\/li>\n\n\n\n<li>sistemas operativos<\/li>\n\n\n\n<li>redes<\/li>\n\n\n\n<li>bases de datos<\/li>\n\n\n\n<li>navegadores<\/li>\n\n\n\n<li>virtualizaci\u00f3n<\/li>\n\n\n\n<li>IA<\/li>\n\n\n\n<li>sistemas distribuidos<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Recuerdame estos conceptos que hemos hablado en la conversacion: driver, JIT, SoC, Hot code, AST, NPU, ISP , ISA, lexing y direcciones virtuales vs fisicas, que son conceptos muyy repetidos a lo largo de la conversacion. Dejame claros estos conceptos de forma detallada. Expl\u00edcas la base de datos distribuida aplicado a internet normal (RAFT, paxos, replicacion) pero yo la conoci como la base de la blockchain, entonces la tecnolog\u00eda blockchain que es una base de datos distribuida ya existia antes, con otra funci\u00f3n, que diferencia hay entre ambas. Tienen relacion con sistema de almacenamiento distribuido. Es decir internet, IA y block chain tienenn relcion por esa distribuci\u00f3n.<\/p>\n<\/blockquote>\n\n\n\n<p>Perfecto, David. Vamos a dejarte <strong>un compendio claro, limpio y profundo<\/strong> de todos esos conceptos que han ido apareciendo a lo largo del viaje A\u2192Z. Y despu\u00e9s conectamos <strong>bases de datos distribuidas \u2194 blockchain \u2194 almacenamiento distribuido \u2194 Internet \u2194 IA<\/strong>, porque efectivamente todo est\u00e1 relacionado, pero no de la forma que mucha gente cree.<\/p>\n\n\n\n<p>Voy a darte una explicaci\u00f3n <strong>did\u00e1ctica, precisa y sin ruido<\/strong>, para que puedas usarla tal cual en tu art\u00edculo de WordPress.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Conceptos clave (explicados de forma clara y profunda)<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0c&nbsp;<strong>Driver<\/strong><\/h2>\n\n\n\n<p>Un <em>driver<\/em> es un software que act\u00faa como <strong>traductor entre el sistema operativo y un dispositivo f\u00edsico<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El SO no sabe hablar con una GPU, un SSD o una tarjeta WiFi.<\/li>\n\n\n\n<li>El driver convierte las \u00f3rdenes del SO en instrucciones que el hardware entiende.<\/li>\n\n\n\n<li>Sin driver \u2192 el hardware existe f\u00edsicamente, pero es in\u00fatil.<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente la \u201ccapa diplom\u00e1tica\u201d entre software y hardware.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a1&nbsp;<strong>JIT (Just\u2011In\u2011Time Compiler)<\/strong><\/h2>\n\n\n\n<p>Un JIT es un compilador que <strong>convierte c\u00f3digo en c\u00f3digo m\u00e1quina mientras el programa se est\u00e1 ejecutando<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Observa qu\u00e9 partes del c\u00f3digo se usan m\u00e1s (hot code).<\/li>\n\n\n\n<li>Compila esas partes a c\u00f3digo m\u00e1quina optimizado.<\/li>\n\n\n\n<li>Si cambian las condiciones, se <em>deoptimiza<\/em> y recompila.<\/li>\n<\/ul>\n\n\n\n<p>Es como un chef que cocina solo lo que realmente vas a comer, y lo hace justo en el momento perfecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>SoC (System on Chip)<\/strong><\/h2>\n\n\n\n<p>Un SoC es un chip que integra <strong>CPU, GPU, NPU, ISP, memoria, controladores y m\u00e1s<\/strong> en un \u00fanico bloque de silicio.<\/p>\n\n\n\n<p>Ejemplos: Apple M\u2011series, Snapdragon, Exynos.<\/p>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>latencias baj\u00edsimas<\/li>\n\n\n\n<li>eficiencia energ\u00e9tica brutal<\/li>\n\n\n\n<li>comunicaci\u00f3n interna ultrarr\u00e1pida<\/li>\n\n\n\n<li>memoria unificada<\/li>\n<\/ul>\n\n\n\n<p>Es literalmente un \u201cordenador entero en un solo chip\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd25&nbsp;<strong>Hot Code<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo que se ejecuta <strong>muchas veces<\/strong>.<\/p>\n\n\n\n<p>El JIT lo detecta y dice:<\/p>\n\n\n\n<p>\ud83d\udc49 \u201cEsto merece ser optimizado\u201d.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bucles<\/li>\n\n\n\n<li>funciones muy llamadas<\/li>\n\n\n\n<li>rutas cr\u00edticas de rendimiento<\/li>\n<\/ul>\n\n\n\n<p>El hot code es el \u201cVIP\u201d del JIT.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf33&nbsp;<strong>AST (Abstract Syntax Tree)<\/strong><\/h2>\n\n\n\n<p>Es el \u00e1rbol que representa la estructura l\u00f3gica del c\u00f3digo.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a + b * 3\n<\/code><\/pre>\n\n\n\n<p>Se convierte en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      (+)\n     \/   \\\n   a     (*)\n        \/   \\\n       b     3\n<\/code><\/pre>\n\n\n\n<p>El AST es la base para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>an\u00e1lisis<\/li>\n\n\n\n<li>optimizaci\u00f3n<\/li>\n\n\n\n<li>generaci\u00f3n de bytecode<\/li>\n\n\n\n<li>compilaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>NPU (Neural Processing Unit)<\/strong><\/h2>\n\n\n\n<p>Una NPU es un procesador especializado en <strong>operaciones de IA<\/strong>, especialmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>multiplicaciones de matrices<\/li>\n\n\n\n<li>convoluciones<\/li>\n\n\n\n<li>operaciones tensoriales<\/li>\n<\/ul>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>eficiencia energ\u00e9tica<\/li>\n\n\n\n<li>paralelismo masivo<\/li>\n\n\n\n<li>aceleraci\u00f3n de modelos de IA<\/li>\n<\/ul>\n\n\n\n<p>Es como una GPU, pero optimizada espec\u00edficamente para redes neuronales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcf8&nbsp;<strong>ISP (Image Signal Processor)<\/strong><\/h2>\n\n\n\n<p>Un ISP es un procesador dedicado a <strong>procesar im\u00e1genes de c\u00e1maras<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>reducci\u00f3n de ruido<\/li>\n\n\n\n<li>balance de blancos<\/li>\n\n\n\n<li>HDR<\/li>\n\n\n\n<li>demosaicing<\/li>\n\n\n\n<li>enfoque<\/li>\n\n\n\n<li>correcci\u00f3n de lente<\/li>\n<\/ul>\n\n\n\n<p>Es el responsable de que una foto bruta del sensor se convierta en una imagen bonita.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddec&nbsp;<strong>ISA (Instruction Set Architecture)<\/strong><\/h2>\n\n\n\n<p>Es el conjunto de instrucciones que una CPU entiende.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>x86\u201164<\/li>\n\n\n\n<li>ARMv8<\/li>\n\n\n\n<li>RISC\u2011V<\/li>\n<\/ul>\n\n\n\n<p>Define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>registros<\/li>\n\n\n\n<li>instrucciones<\/li>\n\n\n\n<li>modos de direccionamiento<\/li>\n\n\n\n<li>comportamiento de la CPU<\/li>\n<\/ul>\n\n\n\n<p>Es el \u201cidioma nativo\u201d del procesador.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2702\ufe0f&nbsp;<strong>Lexing<\/strong><\/h2>\n\n\n\n<p>Primera fase de un compilador o int\u00e9rprete.<\/p>\n\n\n\n<p>Convierte texto en <strong>tokens<\/strong>:<\/p>\n\n\n\n<p>js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let x = a + 3;\n<\/code><\/pre>\n\n\n\n<p>Tokens:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LET | IDENT(x) | = | IDENT(a) | + | NUMBER(3) | ;\n<\/code><\/pre>\n\n\n\n<p>Es como separar una frase en palabras antes de analizarla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udded&nbsp;<strong>Direcciones virtuales vs f\u00edsicas<\/strong><\/h2>\n\n\n\n<p>La CPU no trabaja directamente con direcciones f\u00edsicas de RAM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Direcci\u00f3n virtual<\/h3>\n\n\n\n<p>La que ve el proceso. Ejemplo: <code>0x7ffeefbff000<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Direcci\u00f3n f\u00edsica<\/h3>\n\n\n\n<p>La ubicaci\u00f3n real en RAM. Ejemplo: <code>0x1A3F_9000<\/code>.<\/p>\n\n\n\n<p>La MMU + TLB + tablas de p\u00e1ginas hacen la traducci\u00f3n.<\/p>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>seguridad<\/li>\n\n\n\n<li>aislamiento<\/li>\n\n\n\n<li>memoria virtual<\/li>\n\n\n\n<li>swap<\/li>\n\n\n\n<li>protecci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Es una de las bases de los sistemas operativos modernos.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Bases de datos distribuidas vs Blockchain<\/strong><\/h1>\n\n\n\n<p>Aqu\u00ed viene la parte interesante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd37&nbsp;<strong>Bases de datos distribuidas (Raft, Paxos, replicaci\u00f3n)<\/strong><\/h2>\n\n\n\n<p>Objetivo:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>consistencia, disponibilidad y tolerancia a fallos<\/strong> \ud83d\udc49 <strong>rendimiento y eficiencia<\/strong><\/p>\n\n\n\n<p>Caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nodos confiables<\/li>\n\n\n\n<li>control centralizado o semi\u2011centralizado<\/li>\n\n\n\n<li>consenso para mantener coherencia<\/li>\n\n\n\n<li>logs replicados<\/li>\n\n\n\n<li>rendimiento muy alto<\/li>\n\n\n\n<li>latencias bajas<\/li>\n\n\n\n<li>escalabilidad horizontal<\/li>\n<\/ul>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>etcd<\/li>\n\n\n\n<li>Consul<\/li>\n\n\n\n<li>CockroachDB<\/li>\n\n\n\n<li>Spanner<\/li>\n\n\n\n<li>DynamoDB<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd36&nbsp;<strong>Blockchain<\/strong><\/h2>\n\n\n\n<p>Objetivo:<\/p>\n\n\n\n<p>\ud83d\udc49 <strong>descentralizaci\u00f3n sin confianza<\/strong> \ud83d\udc49 <strong>resistencia a manipulaci\u00f3n<\/strong> \ud83d\udc49 <strong>inmutabilidad<\/strong><\/p>\n\n\n\n<p>Caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nodos NO confiables<\/li>\n\n\n\n<li>sin autoridad central<\/li>\n\n\n\n<li>consenso basado en prueba (PoW, PoS)<\/li>\n\n\n\n<li>datos inmutables<\/li>\n\n\n\n<li>rendimiento bajo<\/li>\n\n\n\n<li>latencias altas<\/li>\n\n\n\n<li>escalabilidad limitada<\/li>\n<\/ul>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bitcoin<\/li>\n\n\n\n<li>Ethereum<\/li>\n\n\n\n<li>Solana (m\u00e1s r\u00e1pido pero sigue siendo blockchain)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>Entonces\u2026 blockchain es una base de datos distribuida?<\/strong><\/h2>\n\n\n\n<p>S\u00ed, pero con diferencias clave:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>BD&nbsp;distribuida<\/th><th>Blockchain<\/th><\/tr><\/thead><tbody><tr><td>Confianza<\/td><td>nodos&nbsp;confiables<\/td><td>nodos&nbsp;no&nbsp;confiables<\/td><\/tr><tr><td>Consenso<\/td><td>Raft\/Paxos<\/td><td>PoW\/PoS<\/td><\/tr><tr><td>Rendimiento<\/td><td>muy&nbsp;alto<\/td><td>bajo<\/td><\/tr><tr><td>Latencia<\/td><td>ms<\/td><td>segundos\/minutos<\/td><\/tr><tr><td>Mutabilidad<\/td><td>datos&nbsp;mutables<\/td><td>datos&nbsp;inmutables<\/td><\/tr><tr><td>Uso&nbsp;t\u00edpico<\/td><td>sistemas&nbsp;reales<\/td><td>finanzas,&nbsp;tokens,&nbsp;auditor\u00eda<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Blockchain <strong>no invent\u00f3<\/strong> la base de datos distribuida. La adapt\u00f3 a un entorno <strong>sin confianza<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf10&nbsp;<strong>Relaci\u00f3n entre Internet, IA, blockchain y almacenamiento distribuido<\/strong><\/h1>\n\n\n\n<p>S\u00ed, est\u00e1n conectados, pero cada uno resuelve un problema distinto:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39&nbsp;<strong>Internet<\/strong><\/h2>\n\n\n\n<p>Red distribuida de comunicaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39&nbsp;<strong>Almacenamiento distribuido (GFS, S3, Ceph)<\/strong><\/h2>\n\n\n\n<p>Datos repartidos en miles de nodos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39&nbsp;<strong>Bases de datos distribuidas (Raft, Paxos)<\/strong><\/h2>\n\n\n\n<p>Coherencia y consistencia entre nodos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39&nbsp;<strong>IA moderna (transformers, clusters)<\/strong><\/h2>\n\n\n\n<p>Entrenamiento distribuido en miles de GPUs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd39&nbsp;<strong>Blockchain<\/strong><\/h2>\n\n\n\n<p>Consenso distribuido sin confianza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udc49 El punto com\u00fan:&nbsp;<strong>distribuci\u00f3n<\/strong><\/h3>\n\n\n\n<p>Pero cada uno distribuye <strong>algo distinto<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Internet \u2192 paquetes<\/li>\n\n\n\n<li>Almacenamiento \u2192 archivos<\/li>\n\n\n\n<li>BD distribuidas \u2192 estados y transacciones<\/li>\n\n\n\n<li>IA \u2192 c\u00f3mputo y par\u00e1metros<\/li>\n\n\n\n<li>Blockchain \u2192 consenso y verificaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>Todos comparten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tolerancia a fallos<\/li>\n\n\n\n<li>replicaci\u00f3n<\/li>\n\n\n\n<li>escalabilidad<\/li>\n\n\n\n<li>nodos interconectados<\/li>\n\n\n\n<li>ausencia de un \u00fanico punto de fallo<\/li>\n<\/ul>\n\n\n\n<p>Pero <strong>no son lo mismo<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un recorrido completo A\u2192Z por los fundamentos de la computaci\u00f3n moderna: desde drivers, JIT, SoC y arquitecturas internas, hasta sistemas distribuidos, bases de datos replicadas, blockchain, almacenamiento distribuido, IA y redes. Una gu\u00eda clara y profunda para entender c\u00f3mo funciona realmente la tecnolog\u00eda que sostiene Internet, la nube, los m\u00f3viles y la inteligencia artificial.<\/p>\n","protected":false},"author":1,"featured_media":715,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[73,634,65,61,279,565,62,499],"tags":[618,631,574,630,609,622,595,579,616,615,621,571,613,606,569,600,582,624,581,585,4,596,566,626,629,608,619,567,617,593,604,578,535,633,632,594,576,573,259,568,588,607,577,584,586,603,598,572,580,575,611,625,623,590,610,592,601,612,599,620,589,614,627,587,570,597,591,583,628,605,602],"class_list":["post-714","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain","category-informatica","category-inteligencia-artificial","category-linux","category-mac","category-programacion","category-servidores","category-windows","tag-almacenamiento-distribuido","tag-arquitectura-de-computacion","tag-ast","tag-atencion","tag-bases-de-datos-distribuidas","tag-blockchain","tag-buffers","tag-bytecode","tag-cap-theorem","tag-ceph","tag-colossus","tag-compiladores","tag-consenso-distribuido","tag-contenedores","tag-cpu","tag-cssom","tag-deoptimizacion","tag-descentralizacion","tag-direcciones-fisicas","tag-direcciones-virtuales","tag-docker","tag-dom","tag-drivers","tag-embeddings","tag-entrenamiento-distribuido","tag-firecracker","tag-gfs","tag-gpu","tag-hdfs","tag-hilos","tag-hipervisores","tag-hot-code","tag-ia","tag-infraestructura-moderna","tag-ingenieria-de-software","tag-ip","tag-isa","tag-isp","tag-javascript","tag-jit","tag-kernel","tag-kvm","tag-lexing","tag-memoria-virtual","tag-mmu","tag-motores-jit","tag-navegadores","tag-npu","tag-optimizacion","tag-parsing","tag-paxos","tag-pos","tag-pow","tag-procesos","tag-raft","tag-redes","tag-renderizado","tag-replicacion","tag-routing","tag-s3","tag-scheduler","tag-sharding","tag-sistemas-distribuidos","tag-sistemas-operativos","tag-soc","tag-sockets","tag-tcp","tag-tlb","tag-transformers","tag-v8","tag-virtualizacion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cienciaytecnology.com\/wordpress\/a\u2192z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia\" \/>\n<meta property=\"og:description\" content=\"Un recorrido completo A\u2192Z por los fundamentos de la computaci\u00f3n moderna: desde drivers, JIT, SoC y arquitecturas internas, hasta sistemas distribuidos, bases de datos replicadas, blockchain, almacenamiento distribuido, IA y redes. Una gu\u00eda clara y profunda para entender c\u00f3mo funciona realmente la tecnolog\u00eda que sostiene Internet, la nube, los m\u00f3viles y la inteligencia artificial.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cienciaytecnology.com\/wordpress\/a\u2192z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/\" \/>\n<meta property=\"og:site_name\" content=\"Ciencia y Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-25T09:22:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-25T09:22:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"116 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"headline\":\"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d\",\"datePublished\":\"2026-04-25T09:22:24+00:00\",\"dateModified\":\"2026-04-25T09:22:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/\"},\"wordCount\":26884,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"image\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Computacion_Moderna.jpg\",\"keywords\":[\"almacenamiento distribuido\",\"arquitectura de computaci\u00f3n\",\"AST\",\"atenci\u00f3n\",\"bases de datos distribuidas\",\"blockchain\",\"buffers\",\"bytecode\",\"CAP theorem\",\"Ceph\",\"Colossus\",\"compiladores\",\"consenso distribuido\",\"contenedores\",\"CPU\",\"CSSOM\",\"deoptimizaci\u00f3n\",\"descentralizaci\u00f3n\",\"direcciones f\u00edsicas\",\"direcciones virtuales\",\"Docker\",\"DOM\",\"drivers\",\"embeddings\",\"entrenamiento distribuido\",\"Firecracker\",\"GFS\",\"GPU\",\"HDFS\",\"hilos\",\"hipervisores\",\"hot code\",\"IA\",\"infraestructura moderna\",\"ingenier\u00eda de software\",\"IP\",\"ISA\",\"ISP\",\"javascript\",\"JIT\",\"kernel\",\"KVM\",\"lexing\",\"memoria virtual\",\"MMU\",\"motores JIT\",\"navegadores\",\"NPU\",\"optimizaci\u00f3n\",\"parsing\",\"Paxos\",\"PoS\",\"PoW\",\"procesos\",\"Raft\",\"redes\",\"renderizado\",\"replicaci\u00f3n\",\"routing\",\"S3\",\"scheduler\",\"sharding\",\"sistemas distribuidos\",\"sistemas operativos\",\"SoC\",\"sockets\",\"TCP\",\"TLB\",\"transformers\",\"V8\",\"virtualizaci\u00f3n\"],\"articleSection\":[\"Blockchain\",\"Informatica\",\"Inteligencia Artificial\",\"Linux\",\"Mac\",\"Programaci\u00f3n\",\"Servidores\",\"Windows\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/\",\"name\":\"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Computacion_Moderna.jpg\",\"datePublished\":\"2026-04-25T09:22:24+00:00\",\"dateModified\":\"2026-04-25T09:22:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Computacion_Moderna.jpg\",\"contentUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Computacion_Moderna.jpg\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\",\"name\":\"Ciencia y Tecnologia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"contentUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\"},\"sameAs\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\"],\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/author\\\/david\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cienciaytecnology.com\/wordpress\/a\u2192z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/","og_locale":"es_ES","og_type":"article","og_title":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia","og_description":"Un recorrido completo A\u2192Z por los fundamentos de la computaci\u00f3n moderna: desde drivers, JIT, SoC y arquitecturas internas, hasta sistemas distribuidos, bases de datos replicadas, blockchain, almacenamiento distribuido, IA y redes. Una gu\u00eda clara y profunda para entender c\u00f3mo funciona realmente la tecnolog\u00eda que sostiene Internet, la nube, los m\u00f3viles y la inteligencia artificial.","og_url":"https:\/\/cienciaytecnology.com\/wordpress\/a\u2192z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/","og_site_name":"Ciencia y Tecnologia","article_published_time":"2026-04-25T09:22:24+00:00","article_modified_time":"2026-04-25T09:22:26+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg","type":"image\/jpeg"}],"author":"david","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"david","Tiempo de lectura":"116 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#article","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/"},"author":{"name":"david","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"headline":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d","datePublished":"2026-04-25T09:22:24+00:00","dateModified":"2026-04-25T09:22:26+00:00","mainEntityOfPage":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/"},"wordCount":26884,"commentCount":0,"publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"image":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#primaryimage"},"thumbnailUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg","keywords":["almacenamiento distribuido","arquitectura de computaci\u00f3n","AST","atenci\u00f3n","bases de datos distribuidas","blockchain","buffers","bytecode","CAP theorem","Ceph","Colossus","compiladores","consenso distribuido","contenedores","CPU","CSSOM","deoptimizaci\u00f3n","descentralizaci\u00f3n","direcciones f\u00edsicas","direcciones virtuales","Docker","DOM","drivers","embeddings","entrenamiento distribuido","Firecracker","GFS","GPU","HDFS","hilos","hipervisores","hot code","IA","infraestructura moderna","ingenier\u00eda de software","IP","ISA","ISP","javascript","JIT","kernel","KVM","lexing","memoria virtual","MMU","motores JIT","navegadores","NPU","optimizaci\u00f3n","parsing","Paxos","PoS","PoW","procesos","Raft","redes","renderizado","replicaci\u00f3n","routing","S3","scheduler","sharding","sistemas distribuidos","sistemas operativos","SoC","sockets","TCP","TLB","transformers","V8","virtualizaci\u00f3n"],"articleSection":["Blockchain","Informatica","Inteligencia Artificial","Linux","Mac","Programaci\u00f3n","Servidores","Windows"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/","url":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/","name":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d - Ciencia y Tecnologia","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#primaryimage"},"image":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#primaryimage"},"thumbnailUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg","datePublished":"2026-04-25T09:22:24+00:00","dateModified":"2026-04-25T09:22:26+00:00","breadcrumb":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#primaryimage","url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg","contentUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2026\/04\/Computacion_Moderna.jpg","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/cienciaytecnology.com\/wordpress\/a%e2%86%92z-de-la-computacion-moderna-arquitecturas-sistemas-distribuidos-ia-y-blockchain-explicados-para-humanos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/cienciaytecnology.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"\u201cA\u2192Z de la Computaci\u00f3n Moderna: Arquitecturas, Sistemas Distribuidos, IA y Blockchain explicados para humanos\u201d"}]},{"@type":"WebSite","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website","url":"https:\/\/cienciaytecnology.com\/wordpress\/","name":"Ciencia y Tecnologia","description":"","publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cienciaytecnology.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b","name":"david","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","contentUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","width":1024,"height":1024,"caption":"david"},"logo":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg"},"sameAs":["https:\/\/cienciaytecnology.com\/wordpress"],"url":"https:\/\/cienciaytecnology.com\/wordpress\/author\/david\/"}]}},"_links":{"self":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/comments?post=714"}],"version-history":[{"count":5,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/714\/revisions"}],"predecessor-version":[{"id":720,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/714\/revisions\/720"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/media\/715"}],"wp:attachment":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/media?parent=714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/categories?post=714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/tags?post=714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}