Skip to content

Commit 9601d07

Browse files
committed
Creating translate in portuguese
1 parent 10cffe7 commit 9601d07

File tree

1 file changed

+234
-0
lines changed

1 file changed

+234
-0
lines changed

README_pt.md

+234
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
* [Low-Level Programming University](#Low-Level-Programming-University)
2+
* [O que é?](#What-is-it)
3+
* [O que é "Low-Level?"](#What-Is-the-Low-Level)
4+
* [Teoria](#Theory)
5+
* [Linguagens](#Languages)
6+
* [Assembly](#Assembly)
7+
* [Linguagem C](#C-language)
8+
* [Aplicações](#Applications)
9+
* [Hardware && Firmware](#Hardware-Firmware)
10+
* [Kernel Linux e driver de dispositivos](#Linux-kernel-and-device-driver)
11+
* [Leia cuidadosamente](#Read-carefully)
12+
* [Referências](#References)
13+
* [Outras aplicações](#Other-applications)
14+
* [Futuro da programação "low-level"](#Future-of-low-level-programming)
15+
* [Trabalho](#Job)
16+
* [Tradução](#Translation)
17+
18+
# <a name="Low-Level-Programming-University"></a>Low-Level Programming University
19+
20+
## <a name="What-is-it"></a>O que é?
21+
22+
Esta página é para iniciantes que querem ser programadores de baixo nível (low-level).
23+
24+
Eu me inspirei no [google-interview-university](https://github.com/jwasham/google-interview-university). Gostaria de compartilhar minha experiência e mostrar um roteiro para se tornar um programador de baixo nível, pois descobri que essas habilidades não são tão comuns como eram antigamente. Além disso, muitos estudantes e principiantes me perguntam como poderiam se tornar programadores de baixo nível e engenheiros de kernel Linux.
25+
26+
Esta página pode não incluir todos links/livros/cursos. Por exemplo, esta página apresenta o Arduino, mas não há informações detalhadas sobre Arduino e sistemas embarcados. Você deve ir mais longe consigo. Você tem a palavra-chave "Arduino" no qual você pode iniciar. Então, o próximo passo é provavelmente pesquisar no google por Arduino, comprar um kit e ** fazer algo ** para si mesmo. Lembre-se que esta página é apenas um roteiro.
27+
28+
Para mais informações, Eu tenho mais de 10 anos de experiência como programador de baixo nível:
29+
* Programação de assembly 80x86
30+
* Dispositivo de hardware com chip Atmel e firmware
31+
* Programação de sistemas Unix com linguagem C
32+
* driver de dispositivos Linux
33+
* Kernel Linux: paginação
34+
* Kernel Linux: block device driver e módulo md
35+
36+
## <a name="What-Is-the-Low-Level"></a>O que é "Low-Level"?
37+
38+
Classifiquei a programação de baixo nível (low-level programming language) como uma programação muito próxima da máquina, usando uma linguagem de programação de nível inferior como C ou assembly. Isto está em contraste com a programação de alto nível, típica de aplicações de espaço de usuário (user space), usando linguagens de alto nível (por exemplo, Python, Java).
39+
* [Wikipedia: Low-level programming language](https://en.wikipedia.org/wiki/Low-level_programming_language)
40+
41+
Sim, a programação de sistemas (system programming) é um conceito muito próximo da programação de baixo nível. Esta página inclui o design de hardware e o desenvolvimento de firmware que não está incluído na programação do sistema.
42+
* [Wikipedia: System programming](https://en.wikipedia.org/wiki/System_programming)
43+
44+
Finalmente, esta página inclui tópicos que vão desde componentes de hardware até o kernel do Linux. Essa é uma enorme variedade de camadas. Um documento de uma página nunca pode cobrir os detalhes de todas as camadas, de modo que o objetivo deste documento é servir de ponto de partida para a programação de baixo nível.
45+
46+
## <a name="Theory"></a>Teoria
47+
48+
Existem duas áreas de estudo para programação de baixo nível:
49+
* Arquitetura de Computadores
50+
* Sistemas Operacionais
51+
52+
Você pode encontrar muitos bons cursos online de universidades, como por exemplo, Coursera.org e edx.org.
53+
Teoria é teoria. Eu não acho que você precisa tirar 10 (ou conceito A), você precisa apenas entender boa parte do curso.
54+
Você irá melhorar com tempo de experiência.
55+
56+
Deixe-me apresentar vários livros que eu li. Eles são normalmente usados como livro texto nas universidades. Se estes não forem indicados em suas aulas da universidade, vale a pena gastar algum tempo com eles. Recomendo a leitura em inglês desses livros.
57+
58+
* Arquitetura de Computadores
59+
* Computer Architecture, Fifth Edition: A Quantitative Approach
60+
* Computer Systems: A Programmer's Perspective
61+
* Computer Organization and Design, Fourth Edition: The Hardware/Software Interface
62+
* Sistema Operacionais
63+
* The Magic Garden Explained: The Internals of UNIX System V Release 4 an Open Systems Design
64+
* The Design of the UNIX Operating System
65+
* Operating Systems: Internals and Design Principles by William Stallings
66+
67+
Há uma lista infinita de bons livros. Eu não quero dizer que você deve ler muitos livros. Basta ler um livro cuidadosamente. Sempre que você aprender uma teoria, implemente o código de teste. ** Implementar é a melhor maneira de conhecer a fundo a teoria. **
68+
69+
## <a name="Languages"></a>Linguagens
70+
71+
### <a name="Assembly"></a>Assembly
72+
73+
Escolha entre x86 e ARM. No precisa saber os dois. Isso não importa para aprender linguagem assembly. O essencial é conhecer a arquitetura da CPU e do computador. Então você não precisa aprender o assembly da arquitetura de CPU mais recente que existe. Selecione a arqutetura 8086 ou Corex-M.
74+
75+
* [8086 assembly programming with emu8086](https://github.com/gurugio/book_assembly_8086)
76+
* Conceitos básicos de CPU e arquitetura de computadores
77+
* Conceitos básicos de linguagem de programação C
78+
* [64bit assembly programming(translation in progress)](https://github.com/gurugio/book_assembly_64bit)
79+
* Conceitos básicos de uma CPU moderna e arquitetura de computadores
80+
* Conceitos básicos de disassembling and debugging de código C
81+
* _need help for translation_
82+
* [ARM Architecture Reference Manual, 2nd Edition](http://www.mypearsonstore.ca/bookstore/arm-architecture-reference-manual-9780201737196)
83+
* Rerencência completa de programação em arquiteturas ARM
84+
* Computer Organization and Design
85+
* [MIPS Edition](https://www.amazon.ca/Computer-Organization-Design-MIPS-Interface/dp/0124077269/)
86+
* [ARM Edition](https://www.amazon.ca/Computer-Organization-Design-ARM-Interface/dp/0128017333/)
87+
* Livros acadêmicos que explicam como cada componente de um computador trabalha.
88+
* Explica com detalhes os diferentes conteitos que compõem a arquitetura de computadores.
89+
* Eles não são destinados a se tornar proficiente em uma linguagem assembly específico.
90+
* A edição MIPS e ARM cobrem os mesmos tópicos, mas aprofundando uma arquitetura diferente.
91+
* Ambas as edições contêm exemplos no mundo x86.
92+
93+
### <a name="C-language"></a>Linguagem C
94+
95+
Não há atalho. Basta ler os livros e resolver todos os exercícios.
96+
97+
* [C Programming: A Modern Approach, 2nd Edition](https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504)
98+
* [The C Programming Language 2nd Edition](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=pd_sbs_14_t_0?_encoding=UTF8&psc=1&refRID=60R1D2CHBA8DHYT6JNMN)
99+
* [Modern C](http://icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf)
100+
* Para o novo padrão C
101+
* [Is Parallel Programming Hard, And, If So, What Can You Do About It?](https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html)
102+
* Implementação de sincronização paralela com C
103+
* Essencial para programação C em larga escala (especialmente para programação de kernel)
104+
* [C programming challenge?](https://github.com/gurugio/lowlevelprogramming-university/blob/master/c-language-challenge.md)
105+
* Plano de estudos similar ao [The Eudyptula Challenge](http://eudyptula-challenge.org/)
106+
* Apenas uma ideia no momento...
107+
* Se você conseguir fazer todos os pequenos desafios dessa página, provavelmente você estará apto para começar projetos maiores.
108+
* [Michael Abrash’s Graphics Programming Black Book, Special Edition](http://www.jagregory.com/abrash-black-book/)
109+
* Referencia em otimização usando C e um pouco de assembly x86
110+
* Começa a partir de 8088 até hoje
111+
* Foco especial na otimização de gráficos de baixo nível
112+
113+
Se você quer ser um especialista em linguagem C, acesse https://leetcode.com/. Boa sorte!
114+
115+
## <a name="Applications"></a>Aplicações
116+
117+
### <a name="Hardware-Firmware"></a>Hardware && Firmware
118+
119+
Se você quiser ser um engenheiro de sistemas embarcados, seria melhor começar a partir de um kit de hardware simples, ao invés de começar com o mais recente chipset ARM.
120+
121+
* [Arduino Start Kit](https://www.arduino.cc/)
122+
* Existem várias séries de Arduino, mas o "Arduino Start Kit" tem o processador mais simples (Atmega328P) e guia de livros
123+
* Atmega328P tem um microcontrolador de 8bits que é o bom para ser usado como base de "design de circuitos digitais" e "desenvolvimento de firmware".
124+
* Você não precisa saber como desenhar esquemas e layout, e construir os chips.
125+
* Mas você precisa saber como ler esquemas e entender como os chips estão conectados.
126+
* Os desenvolvedores de firmware devem ser capazes de ler os esquemas e descobrir como enviar dados para o dispositivo de destino.
127+
* Firmware developers should be able to read the schematics and figure out how to send data to the target device.
128+
* Siga o "guide book"!
129+
* [8086 manual](https://edge.edx.org/c4x/BITSPilani/EEE231/asset/8086_family_Users_Manual_1_.pdf)
130+
* Se você é um novato para a arquitetura x86, 8086 também é muito bom para aprender a arquitetura do processador e assembly 80x86
131+
* [80386 manual](http://css.csail.mit.edu/6.858/2015/readings/i386.pdf)
132+
* Melhor guia para modo protegido e mecanismo de paginação do processador 80x86
133+
* Versão web: https://pdos.csail.mit.edu/6.828/2011/readings/i386/toc.htm
134+
135+
Este ponto, você deve ser bom para começar com uma versão mais recente de um processador ARM ou x86.
136+
* https://www.raspberrypi.org/
137+
* https://beagleboard.org/
138+
* https://www.arduino.cc/en/ArduinoCertified/IntelEdison
139+
140+
Por exemplo, a placa Raspberry Pi tem um processador Cortex-A53 que suporta um conjunto de instruções de 64 bits.
141+
Isso permite que você experimente uma arquitetura de processador moderna com rPi.
142+
Sim, você pode comprá-lo ... mas ... o que você vai fazer com ele?
143+
Se você não tem nenhum projeto em mente, você provavelmente jogaria a placa em uma gaveta e iria esquecê-la como outros gadgets que você comprou.
144+
145+
Então, eu recomendo um projeto para você
146+
* [Making your own kernel](http://wiki.osdev.org/Getting_Started)
147+
* Boas referências: https://www.reddit.com/r/osdev/
148+
149+
Eu fiz um ["toy kernel"](https://github.com/gurugio/caos) que suporta 64 bits long mode, paginação e comutação muito simples de contexto. Fazer um "toy kernel" é uma boa maneira de entender arquitetura de computadores moderna e controle de hardware.
150+
151+
Na verdade, você já possui o processador mais recente e os dispositivos de hardware mais recentes.
152+
Seu notebook! Seu PC! Você já tem tudo para começar!
153+
Você não precisa comprar nada mais.
154+
O emulador qemu pode simular a mais recente arquitetura de processadores ARM e Intel.
155+
Então tudo o que você precisa já está à mão.
156+
Existem muitos "toy kernel" e documentos que você pode consultar.
157+
Basta instalar o emulador qemu e criar um pequeno kernel que apenas inicialize e ative a paginação e imprima algumas mensagens.
158+
159+
Other toy kernels:
160+
* https://littleosbook.github.io/
161+
* https://tuhdo.github.io/os01/
162+
163+
### <a name="Linux-kernel-and-device-driver"></a>Kernel Linux e driver de dispositivos
164+
165+
Você não precisa fazer um sistema operacional completo.
166+
Junte-se à comunidade Linux e participe do desenvolvimento.
167+
168+
#### <a name="Read-carefully"></a>Leia cuidadosamente
169+
170+
* Livros: Leia os seguintes em ordem:
171+
* [The Design of the Unix Operating System](https://www.amazon.com/Design-UNIX-Operating-System/dp/0132017997)
172+
* Os conceitos básicos do Unix são aplicados em qualquer o sistema operacional.
173+
* Este livro é muito bom para obter os conceitos de sistema operacional.
174+
* [Linux Device Drivers](https://www.amazon.com/Linux-Device-Drivers-Jonathan-Corbet/dp/0596005903/ref=sr_1_4?ie=UTF8&qid=1483650712&sr=8-4&keywords=understanding+linux+kernel)
175+
* Faça todos os exemplos
176+
* [Linux Kernel Development](https://www.amazon.com/Linux-Kernel-Development-Robert-Love/dp/0672329468/ref=sr_1_2?ie=UTF8&qid=1483650712&sr=8-2&keywords=understanding+linux+kernel)
177+
* Compreenda a arquitetura do kernel do Linux
178+
* [Understanding the Linux Kernel](https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652/ref=sr_1_1?ie=UTF8&qid=1483650712&sr=8-1&keywords=understanding+linux+kernel)
179+
* Leia este livro e o código fonte do kernel v2.6 ao mesmo tempo
180+
* Nunca comece com a versão mais recente, v2.6 é suficiente!
181+
* Use qemu e gdb para executar a fonte do kernel linha por linha
182+
* http://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu
183+
* https://github.com/gurugio/linuxdeveloptip/blob/master/qemu-gdb-kdump.md
184+
* Use o busybox para fazer um sistema de arquivos mais simples que leva apenas 1 segundo para inicializar
185+
* https://github.com/gurugio/linuxdeveloptip/blob/master/minikernelwithbusybox.md
186+
* [The Eudyptula Challenge](http://eudyptula-challenge.org/)
187+
* Isto é como um excelente professor particular que te orienta no que fazer.
188+
* Se você não sabe o que fazer, basta iniciar isso.
189+
* [Block layer and device driver(translation in progress)](https://github.com/gurugio/book_linuxkernel_blockdrv)
190+
* Inicie a partir de um exemplo de block device driver (Ramdisk) com modo multi-queue
191+
* Avance para block layer
192+
* _need help for translation_
193+
* [md driver of Linux kernel(in progress)](https://github.com/gurugio/book_linuxkernel_md)
194+
* Como funciona a ferramenta mdadm e como ela chama o md driver
195+
* Como o md driver funciona
196+
* _need help for translation_
197+
198+
#### <a name="References"></a>Referências
199+
200+
Verifique quando precisar de algo
201+
202+
* [Free-electrons homepage](http://free-electrons.com/docs/)
203+
* Muitos arquivos de slides introduzindo bons tópicos, especialmente ARM-linux
204+
* [Julia Evans's posting: You can be a kernel hacker!](http://jvns.ca/blog/2014/09/18/you-can-be-a-kernel-hacker/)
205+
* Guia para iniciar a programação do kernel
206+
207+
### <a name="Other-applications"></a>Outras aplicações
208+
209+
Sim, talvez você não esteja interessado em desenvolvimento Linux ou firmware. Se não, você pode encontrar outras aplicações:
210+
* Programação do sistema Windows e driver de dispositivo
211+
* Segurança
212+
* Engenharia reversa
213+
214+
Eu não tenho nenhum conhecimento sobre essas aplicações. Por favor, me envie qualquer informação para iniciantes.
215+
216+
## <a name="Future-of-low-level-programming"></a>Futuro da programação "low-level"
217+
218+
Eu não sei o futuro, mas fico atento na linguagem RUST.
219+
* https://hacks.mozilla.org/2016/11/rust-and-the-future-of-systems-programming/
220+
221+
Se eu tivesse uma semana livre, sozinho, conseguiria aprenderia RUST.
222+
Isso é porque RUST é a linguagem de programação mais recente com que eu posso desenvolver um driver de dispositivo Linux.
223+
224+
IoT é uma nova tendência, por isso vale a pena verificar quais OSs são para IoT.
225+
ARM, Samsung e algumas empresas tem seu próprio sistema operacional em tempo real, mas infelizmente muitos deles proprietários.
226+
Entretanto, a Linux Foundation também tem uma solução: Zephyr
227+
* https://www.zephyrproject.org/
228+
229+
Um servidor de nuvem tem muitas camadas, como por exemplo, host OS, driver kvm, qemu process, guest OS e service application. Assim, o contêiner foi desenvolvido para fornecer uma virtualização mais leve. Em um futuro próximo, um novo conceito de SO, chamado de library OS ou Unikernel, poderá substituir a típica stack de SW para virtualização.
230+
* http://unikernel.org/
231+
232+
# <a name="Translation"></a>Tradução
233+
234+
Por favor, me envie um pull request se você quiser traduzir esta página. Vou listá-lo no documento em inglês.

0 commit comments

Comments
 (0)