Poniendo el "Tú" en la CPU - guía sobre cómo una CPU ejecuta programas, escrita por un joven de 17 años
(github.com/hackclub)- Una explicación técnica sobre cómo una computadora ejecuta un programa de principio a fin, centrada en entender cómo funciona la computadora desde el arranque hasta la ejecución del programa
- Parte de preguntas como qué ocurre realmente cuando se ejecuta un programa, si un programa se ejecuta directamente en la CPU, qué son las syscalls y cómo funcionan, y cómo se ejecutan varios programas al mismo tiempo
- El trasfondo es la preocupación de que, si no vas a la universidad, no hay muchos recursos integrales sobre sistemas, por lo que hay que revisar múltiples fuentes de calidad desigual y a veces contradictorias
- Basado en varias semanas de investigación y casi 40 páginas de apuntes, es un material cuyo objetivo es organizar lo aprendido en un solo texto sólido
- Para quienes quieran leer rápido o sientan que ya lo saben, se ofrece por separado el enlace a Chapter 3: How to Run a Program
1 comentarios
Opiniones de Hacker News
¡Hola! Soy Lexi, la autora de este artículo/minilibro.
Existe la pregunta clásica “¿qué pasa cuando abres un sitio web?”, pero a mí siempre me dio más curiosidad “¿qué pasa cuando ejecutas un programa?”. Hace unos tres meses me frustró muchísimo no poder responder esa pregunta, así que decidí estudiarlo por mi cuenta.
Todo lo que sé de programación lo aprendí de forma autodidacta, así que pensé que esto también sería fácil, pero para nada. La mayoría de los recursos en línea sobre cómo funcionan los sistemas operativos y las CPU eran pésimos, y además casi no había material. Así que, mientras estudiaba, pensé que debía crear yo misma un buen recurso; al organizar lo que iba aprendiendo terminé con un Google Doc de 60 páginas, y a partir de ahí empecé a escribir.
Pero mientras escribía me di cuenta de que gran parte de ese documento enorme estaba mal, así que tuve que investigar más. Seguí corrigiendo una y otra vez; la calidad de los recursos de internet seguía siendo mala, y tenía que mejorar el texto. También necesitaba ilustraciones y diagramas, pero no sabía dibujar, así que abrí Figma y experimenté, y dibujé algunas partes con una tableta Wacom que me habían dado en un hackathon.
Ahora, unos tres meses después, tengo un resultado del que estoy muy orgullosa. Me alegra compartir la versión final de Putting the "You" in CPU, incluso con sus ilustraciones torpes. Este trabajo lo hice como parte de Hack Club(https://hackclub.com), una comunidad de estudiantes de preparatoria/secundaria a quienes les gustan las computadoras.
Hace unas semanas, una versión todavía en proceso recibió atención por casualidad en HN, y agradecí muchísimo el feedback que recibí. Desde entonces lo pulí bastante, y recién ahora me siento lo bastante satisfecha como para compartirlo yo misma con el mundo.
El sitio web es un proyecto estático de HTML/CSS, y lo escribí todo desde cero. Me gusta especialmente el componente de navegación. Espero que disfruten la lectura y que se convierta en un recurso del que cualquiera pueda aprender.
Escribir este tipo de material cuando estás aprendiendo algo nuevo por tu cuenta es una muy buena forma de hacerlo. Te ayuda a aclarar tu proceso de pensamiento y a encontrar partes que al principio creías entender, pero que todavía estaban difusas.
También me gustó esta frase del final: “Mientras escribía este texto, hablé bastante con GPT-3.5 y GPT-4. Mintieron mucho y la mayor parte de la información no sirvió, pero a veces fueron de gran ayuda para resolver problemas. Si conoces las limitaciones de los LLM y dudas muchísimo de todo lo que dicen, la suma total de ayuda puede ser positiva. Eso sí, escriben horrible. No dejes que escriban por ti.” Gran proyecto.
Por ejemplo, en un contexto como “La CPU se encarga de todos los cálculos. Es el hermano mayor. Shazam alakablam…”, se leería mucho mejor quitando la frase en broma y escribiendo algo como: “La CPU se encarga de todos los cálculos. Desde el momento en que enciendes la computadora, empieza a ejecutar instrucciones una por una”.
No soy una persona extremadamente técnica, pero como alguien a quien le pagan por escribir, así es como lo veo. El trabajo en sí es excelente, así que sigue adelante.
Estos temas suelen cubrirse bien en cursos universitarios de arquitectura de computadoras y sistemas operativos. Hoy en día ya pasaron de moda y en la mayoría de los casos quedaron como materias optativas.
Varias universidades publicaron clases gratuitas, y también hay libros escritos por profesores del área. Si quieres algo más cercano a las tendencias recientes, las charlas de conferencias técnicas relacionadas también son bastante útiles.
Aun así, enseñar es un arte subestimado, y hacer que la información sea más accesible o más divertida e interactiva sin duda tiene mucho valor.
Antes trabajé como ingeniero de investigación; en mi caso, era ingeniero de software haciendo investigación en seguridad informática en un laboratorio universitario. Como mencionó otro comentario sobre que los cursos de sistemas operativos sean optativos, incluso entre estudiantes de posgrado hay personas que no tienen este nivel de comprensión de sistemas operativos.
Es difícil encontrar buena información, pero definitivamente existe. El hecho de que hayas reunido información difícil de encontrar y la hayas convertido en algo mejor es prueba de ello. Mi título es en matemáticas, pero aprendí computación por mi cuenta. Saber aprender de esta forma y poder comunicar información altamente técnica de manera accesible es muy importante y no debe subestimarse.
Comparto solo dos enlaces, porque si no esto podría seguir infinitamente. Primero, https://git.lain.faith/sys64738/airs-notes.git y el índice de la parte sobre linkers https://lwn.net/Articles/276782/. Si apenas rozaste la superficie de ELF y el linking, la serie de 20 posts de Ian Lance Taylor y los temas adicionales cubren todo lo que alguna vez quisiste saber sobre ELF, e incluso cosas que te harán cuestionar cómo demonios funcionan los comandos. También aparece brevemente DWARF, el compañero de ELF, que además es una máquina virtual usada cada vez que se produce una excepción en C++.
Segundo, https://0xax.gitbooks.io/linux-insides/content/ también es un proyecto excelente. Sigue de una forma legible para humanos cómo el kernel de Linux hace varias cosas. Es casi seguro que ya se compartió en HN.
Está muy bien escrito, y felicidades por haber profundizado tanto en este tema
Hoy en día, a los 17 años uno puede salirse con la suya hasta cierto punto “programando” pegando cosas que no entiende, pero creo que al final se va a topar con un límite. Por eso, lo que estás haciendo ahora es realmente valioso no solo para ti, sino para todos los que aprenderán con este material
¡Buen trabajo! :) Si todavía no lo hiciste, ahora prueba usar un emulador. Es divertidísimo
Si “algún día me voy a topar con un límite”, me pregunto si será pronto
Hice un framework MVC desde cero, también intérpretes y compiladores, e incluso intenté, por accidente, reinventar desde cero el aprendizaje automático y el procesamiento de lenguaje natural. Hice todo tipo de cosas geniales y divertidas
Luego descubrí el dinero y el trabajo previo. Si aceptas que otras personas te digan “solo usa esto”, puedes construir mucho más rápido. También con frameworks. Me sorprendió lo fácil que jQuery hacía la vida
Ahora, varios años después, cosas que antes parecían “solo pegar piezas” hoy se consideran “trabajo avanzado de muy bajo nivel”. Porque encima de esas abstracciones se construyeron nuevas abstracciones
Las cosas que un principiante hoy puede “más o menos sacar adelante” serán, para la próxima generación, zonas peligrosas de bajo nivel. La programación es genial en ese sentido
De hecho, alguien que abordó la programación de forma académica tiene más probabilidades de sentirse completamente abrumado cuando se encuentra con trabajo que requiere entender varias tecnologías a un nivel básico y seguir adelante
Sería distinto si en una gran empresa un project manager y un diseñador te acotaran las especificaciones para que pudieras concentrarte solo en ejecutar, pero para la mayoría de la gente esa es una situación poco común
Solo recordaba el dinosaurio de la portada, así que tuve que volver a buscar el título
Felicidades por haber terminado esta guía
Se nota esa parte de que, si no vas a la universidad, no hay mucho material integral sobre sistemas, y uno tiene que revisar un montón de recursos de calidad irregular que a veces incluso se contradicen entre sí
El mejor material que se puede encontrar es Code: The Hidden Language of Computer Hardware and Software, de Charles Petzold. La segunda edición acaba de salir
https://codehiddenlanguage.com/
https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
https://www.nand2tetris.org/
Te lleva de forma excelente desde compuertas NAND hasta llamadas a funciones, con una dinámica interactiva muy entretenida. En vez de leer e imaginar en tu cabeza cómo funcionaría, lo construyes directamente
Yo llegué a hacer una pequeña SIMD/GPU para manejar una matriz LED, con mi propio ensamblador de CPU y un lenguaje de shaders programable
Cuando lo compré hace 15 años, mis ojos se nublaron en la parte de arquitectura de CPU, pero tal vez ahora sí esté listo. También compré hace poco la segunda edición
Es un artículo que tengo en mi lista de lectura. En su momento, este pequeño detalle me conquistó
“Agregué espacio al final de todas las páginas para que el lector pueda mantener una altura de mirada consistente.”
Es un detalle realmente pequeño y, visto en retrospectiva, obvio. Pero resulta sorprendentemente cómodo. Cuando lo noté, supe que era un proyecto hecho con pasión
Se nota que pensó mucho en cómo representar un libro en la web, y parece haber creado convenciones nuevas como las que uno esperaría de una generación nueva. Por ejemplo, es la primera vez que veo ese widget de navegación de capítulos en la parte superior donde los capítulos anterior/siguiente se ven ligeramente opacos
Tengo casi 40 años y nunca he logrado algo así. Justo estaba intentando calmar mi síndrome del impostor, así que tendré que calmarlo un poco más
Excelente trabajo :p
Todavía queda mucho tiempo, y tampoco hay mucha razón para apurarse. Elige una idea que te inspire y avanza poco a poco en los pequeños ratos libres que puedas dedicarle
Creo que lo importante es sentir orgullo de ti mismo por hacerlo. El resultado final terminará llegando
OP, no uses tu edad como excusa para tu trabajo. Este texto es mejor que lo que la mayoría de la gente podría hacer en toda su vida. Gran trabajo
new. Decidió usar su edad como elemento de marketing, y claramente funcionóSi a los 17 años crea contenido como este, no puedo ni imaginar las cosas increíbles que hará si elige este campo como profesión. De verdad, impresionante.
Espero que su espíritu no termine aplastado por la administración trivial, objetivos corporativos aún más triviales y un crecimiento profesional sin sentido. Ya está haciendo un trabajo excelente, así que ojalá existiera algo como una beca que le permita seguir sin desgastarle el alma en la rueda de hámster de la industria tecnológica.
Al OP le vendría bien echarle un vistazo al curso de Casey Muratori en computerenhance.com.
La tarea de la primera parte del curso es crear un simulador del Intel 8086 de 1978. El ensamblador x86_64 moderno todavía se le parece bastante. Se aprende mucho conocimiento sobre computadoras que es realmente difícil encontrar en otros lugares.
Yo también tengo casi 17 años, ¡buen trabajo! :^)
Hace apenas 20 minutos estaba averiguando cómo extraer el primer byte de un entero de 16 bits y terminé aprendiendo sobre endianess, mientras tú estás escribiendo un libro sobre CPUs.
Cuando termine Crafting Interpreters definitivamente lo voy a leer. Aunque, como muchos otros proyectos, mi ritmo de avance claramente se ha vuelto más lento, así que puede que tarde un poco lol
Muy buen artículo, y también me gusta el estilo. Disfruté mucho la combinación de texto e ilustraciones/memes.
Sobre los términos RISC/CISC, tengo algunas reservas, pero quizá eso sea cuestión de gustos >.>
Como alguien que ha pasado tiempo intentando entender cómo funcionan algunas partes del kernel, empatizo con lo doloroso que debió de haber sido crear este artículo. Aun así, al verlo, claramente valió la pena.
Del lado de NT, Windows Internals cubre mucho de lo que uno quiere saber, y la documentación de Microsoft tampoco está mal. Para mí es claramente mejor que la documentación del kernel de Linux, y es un muy buen punto de partida.
Si quieres saber más sobre Windows, también recomiendo foros/recursos de hacking de juegos. Hay mucho que filtrar, pero para temas de nicho a veces pueden ser una fuente de información bastante buena.
Por último, al verlo en un smartphone, la fuente de algunos bloques de código era bastante grande y resultaba difícil de leer. Por ejemplo, el
main.cdel capítulo 6.Además, la frase “si eres un adolescente al que le gustan las computadoras y todavía no estás en el Slack de Hack Club, únete ahora mismo” me recuerda demasiado bien que me estoy volviendo viejo lol