# Arquitetura de Hardware

### Hierarquia de Abstração

```mermaid
graph TD
    A[Física Transistores] --> B[Lógica Digital]
    B --> C[Microarquitetura]
    C --> D[Conjunto de Instruções ISA]
    D --> E[Sistema Operacional]
    E --> F[Aplicações]
```

### Arquitetura de Von Neumann

{% stepper %}
{% step %}

### Unidade de Processamento (CPU)

* ULA (Unidade Lógica Aritmética)
* UC (Unidade de Controle)
* Registradores
  {% endstep %}

{% step %}

### Sistema de Memória

* Hierarquia: Registradores → Cache → RAM → Armazenamento
  {% endstep %}

{% step %}

### Mecanismos de E/S

* Barramentos
* Controladores de dispositivos
  {% endstep %}
  {% endstepper %}

***

## ⚙️ Componentes Principais

{% stepper %}
{% step %}

### Unidade Central de Processamento (CPU)

**Fluxo de Execução:**

```plaintext
FETCH → DECODE → EXECUTE → MEMORY ACCESS → WRITEBACK
```

**Elementos Críticos:**

* **Pipeline**: Paralelismo de instruções
* **Branch Prediction**: Previsão de desvios
* **Caches L1/L2/L3**: Redução de latência
  {% endstep %}

{% step %}

### Sistema de Memória

**Princípios de Operação:**

* **Localidade Temporal**: Reuso de dados
* **Localidade Espacial**: Acesso sequencial
* **Políticas de Substituição**: LRU, FIFO

**Hierarquia Típica:**

| Nível         | Latência | Capacidade | Tecnologia     |
| ------------- | -------- | ---------- | -------------- |
| Registradores | 0.3ns    | KB         | SRAM           |
| Cache L1      | 1ns      | 32-64KB    | SRAM           |
| RAM           | 80ns     | GB         | DRAM           |
| Armazenamento | 5ms      | TB         | NAND Flash/HDD |
| {% endstep %} |          |            |                |

{% step %}

### Sistemas de Interconexão

**Barramentos Principais:**

1. **Dados**: Largura de banda variável (32/64 bits)
2. **Endereços**: Tamanho define espaço endereçável
3. **Controle**: Sincronização de operações

**Protocolos Modernos:**

* PCIe (Peripheral Component Interconnect Express)
* USB (Universal Serial Bus)
* NVLink (Interconexão de alta velocidade)
  {% endstep %}
  {% endstepper %}

***

## 🔍 Aplicações Práticas

{% stepper %}
{% step %}

### Otimização de Desempenho

**Exemplo de Código Cache-Friendly:**

```c
// Acesso não-sequencial (ineficiente)
for(int i=0; i<1000; i+=8) 
    process(data[i]);

// Acesso sequencial (otimizado)
for(int i=0; i<1000; i++)
    process(data[i]);
```

{% endstep %}

{% step %}

### Considerações de Segurança

**Vulnerabilidades Comuns:**

* **Spectre/Meltdown**: Exploração de execução especulativa
* **RowHammer**: Indução de bit-flips na DRAM
* **Buffer Overflow**: Corrupção de estruturas de memória

**Mitigações:**

* ASLR (Address Space Layout Randomization)
* DEP (Data Execution Prevention)
* Isolamento de processos
  {% endstep %}
  {% endstepper %}

***

## 🛠️ Ferramentas de Análise

{% tabs %}
{% tab title="Linux" %}

```bash
# Monitoramento de desempenho
perf stat -e cache-misses,cpu-cycles ./programa

# Mapeamento de topologia
lstopo --of png > topology.png
```

{% endtab %}

{% tab title="Windows" %}

```powershell
# Informações do processador
Get-WmiObject Win32_Processor | Select-Object Name, NumberOfCores, L2CacheSize

# Diagnóstico de memória
mdsched.exe
```

{% endtab %}
{% endtabs %}

***

## 📊 Relevância por Área de Atuação

| Área Profissional   | Aplicações Típicas                     | Benefícios                       |
| ------------------- | -------------------------------------- | -------------------------------- |
| Desenvolvimento     | Otimização de algoritmos               | Código mais eficiente            |
| Segurança           | Análise de vulnerabilidades            | Exploração/proteção de sistemas  |
| Ciência de Dados    | Processamento de grandes datasets      | Uso eficiente de cache           |
| Sistemas Embarcados | Projeto de hardware/software integrado | Seleção de componentes adequados |

> "Compreender a arquitetura de sistemas é como possuir um mapa detalhado do território computacional - permite navegar desde o nível físico até o lógico com precisão estratégica."


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/arquitetura-de-hardware.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
