aula 1 reorganização

This commit is contained in:
Blau Araujo 2025-05-14 11:36:15 -03:00
parent e1eda0dd44
commit 52d1a2afbd

View file

@ -1,13 +1,17 @@
* Aula 1 Arquitetura de Computadores #+title: Aula 1 -- Arquitetura de computadores
#+author: Blau Araujo
#+email: cursos@blauaraujo.com
** Objetivos #+options: toc:3
* Objetivos
- Compreender os principais componentes de um computador sob o modelo de von Neumann. - Compreender os principais componentes de um computador sob o modelo de von Neumann.
- Reconhecer os registradores da arquitetura x86_64. - Reconhecer os registradores da arquitetura x86_64.
- Entender a relação entre hardware e código Assembly. - Entender a relação entre hardware e código Assembly.
- Executar o primeiro programa Assembly com uma chamada de sistema. - Executar o primeiro programa Assembly com uma chamada de sistema.
** Modelo de von Neumann * Modelo de von Neumann
Um computador possui: Um computador possui:
@ -32,7 +36,7 @@ Como era antes:
- A CPU executa o ciclo: busca → decodifica → executa, mas pode realizar a busca - A CPU executa o ciclo: busca → decodifica → executa, mas pode realizar a busca
de dados e instruções em paralelo. de dados e instruções em paralelo.
*** Influência nas arquiteturas modernas ** Influência nas arquiteturas modernas
O modelo de Von Neumann influenciou profundamente as arquiteturas modernas de O modelo de Von Neumann influenciou profundamente as arquiteturas modernas de
computadores, estabelecendo a base para a maioria dos designs de sistemas computadores, estabelecendo a base para a maioria dos designs de sistemas
@ -74,7 +78,7 @@ computacionais atuais. Algumas das principais influências incluem:
não estágios do processamento, são executadas simultaneamente. não estágios do processamento, são executadas simultaneamente.
#+end_quote #+end_quote
*** Gargalo de Von Neumann ** Gargalo de Von Neumann
O gargalo de Von Neumann é uma limitação de desempenho causada pelo fato de que O gargalo de Von Neumann é uma limitação de desempenho causada pelo fato de que
a CPU e a memória compartilham o mesmo barramento para acessar instruções e a CPU e a memória compartilham o mesmo barramento para acessar instruções e
@ -99,7 +103,7 @@ que usa memórias separadas internamente (como em caches) para dados e instruç
mantendo um espaço de memória unificado do ponto de vista do programador. mantendo um espaço de memória unificado do ponto de vista do programador.
#+end_quote #+end_quote
** Arquiteturas x86 * Arquiteturas x86
A arquitetura x86 é uma família de conjuntos de instruções (ISA /Instruction A arquitetura x86 é uma família de conjuntos de instruções (ISA /Instruction
Set Architecture/) baseada no modelo de Von Neumann e desenvolvida originalmente Set Architecture/) baseada no modelo de Von Neumann e desenvolvida originalmente
@ -121,7 +125,7 @@ com AMD64. Assim, AMD64 é a origem técnica da arquitetura x86 de 64 bits utili
na maioria dos sistemas modernos. na maioria dos sistemas modernos.
#+end_quote #+end_quote
*** Características ** Características
- ISA complexa (CISC /Complex Instruction Set Computing/), com centenas de - ISA complexa (CISC /Complex Instruction Set Computing/), com centenas de
instruções e modos de endereçamento. instruções e modos de endereçamento.
@ -140,7 +144,7 @@ da arquitetura (como troca de contexto e proteção básica), mas a segmentaçã
como era usada no MS-DOS, é totalmente evitada. como era usada no MS-DOS, é totalmente evitada.
#+end_quote #+end_quote
*** Otimizações em relação ao modelo de Von Neumann ** Otimizações em relação ao modelo de Von Neumann
A arquitetura x86 é uma evolução prática do modelo de Von Neumann, com A arquitetura x86 é uma evolução prática do modelo de Von Neumann, com
otimizações como: otimizações como:
@ -149,7 +153,7 @@ otimizações como:
- Execução fora de ordem (/out-of-order execution/). - Execução fora de ordem (/out-of-order execution/).
- /Pipelines/ e paralelismo interno. - /Pipelines/ e paralelismo interno.
*** Comparativo com outras arquiteturas ** Comparativo com outras arquiteturas
Todas as arquiteturas modernas seguem, em maior ou menor grau, os princípios Todas as arquiteturas modernas seguem, em maior ou menor grau, os princípios
do modelo de Von Neumann. No entanto, diferem na forma como organizam e executam do modelo de Von Neumann. No entanto, diferem na forma como organizam e executam
@ -186,7 +190,7 @@ instruções. Veja o comparativo:
| ARM | RISC | Média | Baixo | Celulares, IoT, Apple M1+ | | ARM | RISC | Média | Baixo | Celulares, IoT, Apple M1+ |
| RISC-V | RISC | Baixa | Baixo | Pesquisa, sistemas embarcados | | RISC-V | RISC | Baixa | Baixo | Pesquisa, sistemas embarcados |
** Componentes de uma CPU x86_64 * Componentes de uma CPU x86_64
- Unidade de Controle (/Control Unit/ - CU) :: - Unidade de Controle (/Control Unit/ - CU) ::
@ -248,7 +252,7 @@ instruções. Veja o comparativo:
Responsável por lidar com interrupções externas e internas, gerenciando a Responsável por lidar com interrupções externas e internas, gerenciando a
prioridade e o tratamento adequado das interrupções no sistema. prioridade e o tratamento adequado das interrupções no sistema.
** Principais registradores e seus propósitos (64 bits) * Principais registradores e seus propósitos (64 bits)
- =RAX=: acumulador/propósito geral - =RAX=: acumulador/propósito geral
- =RBX=: base/propósito geral - =RBX=: base/propósito geral
@ -264,7 +268,7 @@ instruções. Veja o comparativo:
A arquitetura x86_64 ainda inclui oito registradores de propósito geral, de =R8= A arquitetura x86_64 ainda inclui oito registradores de propósito geral, de =R8=
a =R15=. a =R15=.
** Primeiro exemplo em Assembly x86_64 * Primeiro exemplo em Assembly x86_64
#+begin_src asm #+begin_src asm
; Retorna 42 como estado de término ; Retorna 42 como estado de término
@ -278,7 +282,7 @@ _start:
syscall syscall
#+end_src #+end_src
*** Compilação e execução (no terminal) ** Compilação e execução (no terminal)
#+begin_example #+begin_example
:~$ nasm -f elf64 -o exit42.o exit42.asm :~$ nasm -f elf64 -o exit42.o exit42.asm
@ -288,13 +292,13 @@ _start:
42 42
#+end_example #+end_example
** Exercícios sugeridos * Exercícios sugeridos
1. Modifique o programa Assembly para retornar "sucesso". 1. Modifique o programa Assembly para retornar "sucesso".
2. Desmonte (=objdump -d=) os binários gerados e compare os códigos de máquina. 2. Desmonte (=objdump -d=) os binários gerados e compare os códigos de máquina.
3. Use =strace ./exit42= para verificar a chamada de sistema realizada. 3. Use =strace ./exit42= para verificar a chamada de sistema realizada.
** Referências * Referências
- [[https://namazso.github.io/x86/][Intel® 64 and IA-32 Instruction Set Reference]] - [[https://namazso.github.io/x86/][Intel® 64 and IA-32 Instruction Set Reference]]
- [[https://wiki.osdev.org/CPU_Registers_x86-64][OS Dev: CPU Registers x86-64]] - [[https://wiki.osdev.org/CPU_Registers_x86-64][OS Dev: CPU Registers x86-64]]