Colocando o “Você” na CPU - guia sobre como a CPU executa programas, escrito por uma jovem de 17 anos
(github.com/hackclub)- Uma explicação técnica sobre como um computador executa um programa do começo ao fim, com foco em entender como ele funciona desde a inicialização até a execução de programas
- Parte de perguntas como: o que realmente acontece quando um programa é executado, se o programa é executado diretamente na CPU, o que são syscalls e como funcionam, e como vários programas conseguem rodar ao mesmo tempo
- O pano de fundo é a percepção de que, para quem não vai para a universidade, não há tantos materiais abrangentes sobre sistemas, e é preciso consultar várias fontes de qualidade desigual e às vezes contraditórias
- Com base em algumas semanas de pesquisa e em quase 40 páginas de anotações, o material tem como objetivo organizar o que foi aprendido em um texto único e sólido
- Para leitores que querem uma leitura rápida ou sentem que já conhecem o assunto, há um link separado para Chapter 3: How to Run a Program
1 comentários
Opiniões do Hacker News
Olá! Sou a Lexi, autora deste artigo/minilivro.
Existe aquela pergunta clássica: “o que acontece quando você abre um site?”, mas eu sempre tive mais curiosidade sobre “o que acontece quando você executa um programa?”. Há uns 3 meses, fiquei tão frustrada por não conseguir responder a essa pergunta que decidi estudar por conta própria.
Tudo que sei sobre programação aprendi sozinha, então achei que isso também seria fácil — mas não foi nem um pouco. A maior parte do material online sobre como sistemas operacionais e CPUs funcionam era péssima, e quase não havia material. Então, enquanto estudava, pensei que deveria criar um bom recurso eu mesma; ao organizar o que fui aprendendo, acabei com um Google Doc de 60 páginas, e foi a partir daí que comecei a escrever.
Só que, enquanto escrevia, percebi que uma parte considerável daquele documento gigantesco estava errada, então precisei pesquisar mais. Nesse ciclo de revisar e corrigir repetidamente, a qualidade do material na internet continuava ruim, e eu precisava tornar o texto melhor. Também precisava de ilustrações e diagramas, mas eu não sabia desenhar, então abri o Figma e fui experimentando; desenhei algumas partes com um tablet Wacom que ganhei em um hackathon.
Agora, uns 3 meses depois, cheguei a um resultado do qual realmente me orgulho. Fico feliz em compartilhar a versão final de Putting the "You" in CPU, incluindo até as ilustrações meio desajeitadas. Este trabalho foi criado como parte do Hack Club (https://hackclub.com), uma comunidade de estudantes do ensino médio que gostam de computadores.
Algumas semanas atrás, uma versão ainda em andamento acabou recebendo atenção no HN por acaso, e fiquei muito grata pelo feedback que recebi. Desde então, organizei bastante coisa, e só agora estou satisfeita o suficiente para compartilhá-la com o mundo por conta própria.
O site é um projeto estático em HTML/CSS, e escrevi tudo do zero. Gosto especialmente do componente de navegação. Espero que vocês se divirtam lendo e que ele se torne um recurso com o qual qualquer pessoa possa aprender.
Escrever um material assim quando você está aprendendo algo novo por conta própria é uma ótima abordagem. Isso deixa seu processo de pensamento mais claro e ajuda a encontrar partes que, no começo, você achava que tinha entendido, mas que ainda estavam nebulosas.
Também gostei desta frase no final: “Enquanto escrevia este texto, conversei bastante com o GPT-3.5 e o GPT-4. Eles mentiram muito e a maior parte das informações foi inútil, mas às vezes ajudaram bastante a destravar problemas. Se você conhece os limites dos LLMs e desconfia extremamente de tudo que eles dizem, a soma total da ajuda pode ser positiva. Mas eles escrevem muito mal. Não deixe que escrevam por você.” Projeto excelente.
Por exemplo, em um contexto como “A CPU é responsável por todos os cálculos. Ela é o chefão. Shazam alakablam...”, o texto flui muito melhor se você remover as frases brincalhonas e escrever algo como “A CPU é responsável por todos os cálculos. A partir do momento em que você liga o computador, ela começa a executar instruções uma por uma”.
Não sou uma pessoa tecnicamente muito profunda, mas, do ponto de vista de alguém que é pago para escrever, é assim que me parece. O trabalho em si é ótimo, então continue.
Esses temas costumam ser bem abordados em disciplinas de arquitetura de computadores e sistemas operacionais em nível de graduação. Hoje em dia, elas saíram de moda e, na maioria dos casos, viraram optativas.
Várias universidades publicaram aulas gratuitas, e também há livros escritos por professores da área. Se quiser algo mais próximo das tendências atuais, palestras de conferências técnicas relacionadas também são bastante úteis.
Ainda assim, ensinar é uma arte subestimada, e tornar informações mais acessíveis ou mais divertidas e interativas certamente tem muito valor.
No passado trabalhei como engenheiro de pesquisa; no meu caso, eu era engenheiro de software em um laboratório universitário que fazia pesquisa em segurança de computadores. Como outro comentário mencionou que aulas de sistemas operacionais são optativas, há até alunos de pós-graduação que não têm esse nível de compreensão de sistemas operacionais.
É difícil encontrar boas informações, mas elas certamente existem. O fato de você ter sintetizado informações difíceis de encontrar e transformado em uma forma melhor é prova disso. Minha formação é em matemática, mas aprendi computação por conta própria. A capacidade de aprender desse jeito e de comunicar informações altamente técnicas de forma acessível é realmente importante e não deve ser subestimada.
Vou compartilhar só dois links, senão isso pode se estender sem fim. Primeiro, https://git.lain.faith/sys64738/airs-notes.git e o índice da parte sobre linkers em https://lwn.net/Articles/276782/. Se você apenas arranhou a superfície de ELF e linking, a série de 20 posts do blog de Ian Lance Taylor, junto com tópicos adicionais, cobre tudo que você queria saber sobre ELF — e até coisas que fazem você duvidar de como os comandos sequer funcionam. Também aparece brevemente o DWARF, companheiro do ELF, que é também uma máquina virtual usada toda vez que ocorre uma exceção em C++.
Segundo, https://0xax.gitbooks.io/linux-insides/content/ também é um excelente projeto. Ele acompanha, de forma legível para humanos, como o kernel Linux faz várias coisas. Tenho quase certeza de que já foi compartilhado no HN.
Muito bem escrito, e parabéns por se aprofundar nesse tipo de assunto
Hoje em dia, uma pessoa de 17 anos consegue se virar até certo ponto “programando” ao juntar coisas que não entende, mas acho que, no fim, vai bater em um limite. Por isso, o que você está fazendo agora tem muito valor, não só para você, mas para todo mundo que vai aprender com este material
Mandou bem :) se ainda não fez isso, experimente usar um emulador agora. É divertido demais
Se “um dia vou bater em um limite”, fico curioso para saber se isso vai acontecer logo
Criei frameworks MVC do zero, fiz interpretadores e compiladores e, sem querer, também tentei reinventar machine learning e processamento de linguagem natural do zero. Fiz todo tipo de coisa legal e divertida
Aí descobri dinheiro e o estado da arte. Percebi que, se eu aceitasse quando outras pessoas diziam “é só usar isto aqui”, conseguia construir as coisas muito mais rápido. Frameworks também. Foi surpreendente ver como o jQuery facilitava a vida
Agora, alguns anos depois, coisas que antes pareciam “só juntar peças” passaram a ser vistas como “trabalho avançado de baixíssimo nível”. Porque construímos novas abstrações em cima daquelas abstrações
As coisas que um iniciante hoje consegue “levar mais ou menos” serão, para a próxima geração, áreas perigosas de baixo nível. Programação é excelente nesse sentido
Na verdade, alguém que abordou programação de forma acadêmica tem mais chance de ficar completamente sobrecarregado quando encontra um trabalho em que precisa entender várias tecnologias em nível básico e seguir em frente
Seria diferente se, em uma gigante de tecnologia, gerentes de projeto e designers estreitassem as especificações para você poder se concentrar só na execução, mas para a maioria das pessoas essa é uma situação rara
Eu só lembrava do dinossauro na capa, então tive que procurar o título de novo
Parabéns por concluir este guia
Se você não for para a universidade, dá para perceber o trecho em que foi preciso vasculhar um monte de materiais abrangentes sobre sistemas, que não são muitos, têm qualidade irregular e às vezes entram em conflito entre si
O melhor material que você pode encontrar é Code: The Hidden Language of Computer Hardware and Software, de Charles Petzold. A 2ª edição acabou de sair
https://codehiddenlanguage.com/
https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
https://www.nand2tetris.org/
Ele leva você muito bem de portas NAND até chamadas de função, em um formato interativo muito divertido. Em vez de ler e imaginar na cabeça como tudo funciona, você constrói diretamente
Eu cheguei a criar minha própria assembly de CPU e até uma pequena SIMD/GPU que aciona uma matriz de LEDs com uma linguagem de shader programável
Quando comprei, 15 anos atrás, meus olhos ficavam vidrados na parte de arquitetura de CPU, mas talvez agora eu esteja pronto. Também comprei recentemente a 2ª edição
É um texto que coloquei na minha lista de leitura. No passado, este pequeno detalhe específico me conquistou
“Coloquei margem na parte inferior de todas as páginas para permitir que o leitor mantenha uma altura de olhar consistente.”
É um detalhe muito pequeno e, em retrospecto, óbvio. Mas é surpreendentemente confortável. Quando percebi isso, soube que era um projeto movido por paixão
Ele parece ter pensado bastante em como representar um livro na web e criado novas convenções que se poderia esperar de uma nova geração. Por exemplo, acho que foi a primeira vez que vi o widget de navegação de capítulos no topo mostrar os capítulos anterior/seguinte levemente opacos
Tenho quase 40 anos e nunca consegui fazer algo assim. Eu estava justamente tentando acalmar minha síndrome do impostor, agora vou ter que acalmar mais ainda
Mandou muito bem :p
Ainda há bastante tempo, e há poucos motivos para correr. Escolha uma ideia que inspire você e vá fazendo aos poucos, no pequeno tempo livre que conseguir encontrar
Acho que o essencial é sentir orgulho de si mesmo por estar fazendo aquilo. O resultado final acaba vindo
OP, não use sua idade para justificar o trabalho. Este texto é melhor do que a maioria das pessoas conseguiria fazer na vida inteira. Trabalho excelente
new. Ele decidiu usar a idade como elemento de marketing, e claramente funcionouSe alguém cria um conteúdo desses aos 17 anos, nem consigo imaginar que coisas incríveis fará no futuro se escolher essa área como profissão. Realmente impressionante.
Espero que sua alma não seja esmagada por burocracias triviais, metas corporativas ainda mais triviais e crescimento de carreira sem sentido. Você já está fazendo um trabalho excelente; seria ótimo se existisse algo como uma bolsa/fellowship que permitisse continuar sem ter a alma moída na roda de hamster da indústria de tecnologia.
Acho que o OP deveria dar uma olhada no curso de Casey Muratori em computerenhance.com.
A tarefa da primeira parte do curso é criar um simulador do Intel 8086 de 1978. O assembly x86_64 moderno ainda se parece bastante com aquilo. Você aprende muito conhecimento sobre computadores que é realmente difícil de encontrar em outros lugares.
Como alguém que também tem quase 17 anos, mandou bem! :^)
Há apenas 20 minutos eu estava tentando descobrir como extrair o primeiro byte de um inteiro de 16 bits e acabei aprendendo sobre endianness, enquanto você está escrevendo um livro sobre CPUs.
Quando eu terminar Crafting Interpreters, com certeza vou ler. Mas, como muitos outros projetos, meu ritmo certamente desacelerou, então pode levar um tempo lol
Texto muito bom, e gostei do estilo. A combinação de texto com ilustrações/memes foi realmente divertida.
Quanto ao termo RISC/CISC, tenho algumas ressalvas, mas talvez isso seja questão de gosto de cada um >.>
Como alguém que já passou tempo tentando descobrir como partes do kernel funcionam, consigo imaginar o quanto o processo de criar este texto deve ter sido doloroso. Ainda assim, pelo resultado, valeu muito a pena.
Do lado do NT, Windows Internals cobre bastante do que você talvez queira saber, e a documentação da Microsoft também não é ruim. Para mim, é definitivamente melhor que a documentação do kernel Linux, e é um ótimo ponto de partida.
Se quiser saber mais sobre Windows, também recomendo fóruns/materiais de game hacking. Há muita coisa para filtrar, mas em tópicos de nicho às vezes eles são fontes de informação bem boas.
Por fim, ao visualizar no smartphone, alguns blocos de código estavam com a fonte bem grande e difíceis de ler. Por exemplo, o
main.cdo capítulo 6.Além disso, a frase “se você é adolescente, gosta de computadores e ainda não está no Slack do Hack Club, entre agora mesmo” me lembra muito bem que estou ficando velho lol