1. Organização Básica de Sistemas Computacionais
A arquitetura fundamental da esmagadora maioria dos computadores modernos baseia-se no modelo proposto por John von Neumann (1945). A principal característica desta arquitetura é o conceito de Programa Armazenado, onde dados de processamento e instruções de programas compartilham o mesmo espaço de memória física e barramentos.
O Modelo de Von Neumann vs. Arquitetura Harvard
Enquanto a arquitetura Von Neumann simplifica o hardware utilizando uma única memória para dados e instruções, ela sofre de um gargalo intrínseco conhecido como "Gargalo de Von Neumann": a CPU não pode ler uma instrução e ler/escrever dados simultaneamente. Em contrapartida, a Arquitetura Harvard resolve isso separando fisicamente o armazenamento e as vias de sinal para instruções e dados, técnica amplamente utilizada em processadores de sinal digital (DSP) e sistemas embarcados de alta performance.
- Unidade Central de Processamento (CPU): Onde o processamento ocorre de fato.
- Memória Principal: Armazena o programa em execução e os dados operacionais.
- Sistemas de Entrada/Saída (I/O): Interface entre o computador e o ambiente externo.
- Barramentos (Bus): Vias de comunicação divididas em Dados, Endereços e Controle.
2. Memórias: Tipos e Unidades de Armazenamento
Os sistemas computacionais utilizam uma infraestrutura hierárquica de memória para balancear três variáveis críticas e conflitantes: capacidade, velocidade e custo.
A Hierarquia de Memória
No topo da pirâmide estão os dispositivos mais rápidos, de menor capacidade e maior custo por bit. Na base, estão os dispositivos lentos, massivos e de baixo custo.
- Registradores (Internos à CPU, tempo de acesso menor que 1 ciclo de clock)
- Memória Cache (L1, L2, L3 - estática/SRAM, integrada ou próxima ao die da CPU)
- Memória Principal (DRAM - dinâmica, volátil)
- Memória Secundária (SSD, NVMe, HDDs - não volátil)
Tipos Tecnológicos
| Tipo de Memória | Tecnologia | Volatilidade | Velocidade Relativa | Função Principal |
|---|---|---|---|---|
| SRAM | Flip-Flops (Transistores) | Volátil | Ultra Rápida | Caches da CPU |
| DRAM | Capacitores (Necessita Refresh) | Volátil | Média/Alta | Memória RAM do sistema |
| ROM / Flash | Portas Flutuantes (EEPROM) | Não Volátil | Baixa/Média | Firmware (BIOS/UEFI), Armazenamento de massa |
Unidades de Armazenamento
A menor unidade de informação é o bit (0 ou 1). O agrupamento padrão da indústria é o Byte (8 bits), capaz de representar 256 valores distintos (28).
A computação utiliza prefixos binários baseados em potências de 2 (embora o mercado comercial adote o padrão decimal do SI):
- Kilobyte (KB): 210 = 1.024 Bytes
- Megabyte (MB): 220 = 1.048.576 Bytes
- Gigabyte (GB): 230 = 1.073.741.824 Bytes
- Terabyte (TB): 240 = 1.099.511.627.776 Bytes
3. CPU: Organização Interna e Arquiteturas de Conjunto de Instruções (ISA)
A Unidade Central de Processamento é responsável pela execução sequencial do ciclo de instrução: Busca (Fetch), Decodificação (Decode) e Execução (Execute).
Componentes Internos Estruturais
- ULA (Unidade Lógica e Aritmética): Executa operações matemáticas de adição, subtração, AND, OR, XOR e deslocamentos binários.
- UC (Unidade de Controle): Orquestra o fluxo de dados através do processador, gerando sinais de controle baseados nas instruções decodificadas.
- Registradores Especiais:
PC (Program Counter): Armazena o endereço da próxima instrução a ser buscada.IR (Instruction Register): Guarda a instrução que está sendo decodificada no momento.SP (Stack Pointer): Aponta para o topo da pilha de execução na memória RAM.
Filosofias de Arquitetura: RISC vs. CISC
A Interface entre o hardware e o software é governada pelo Conjunto de Instruções (ISA). Existem duas abordagens dominantes de design:
CISC (Complex Instruction Set Computer)
Instruções de tamanho variável, com alta complexidade interna. Uma única instrução pode realizar operações complexas de acesso à memória (ex: x86_64). Foco no compilador simplificado.
RISC (Reduced Instruction Set Computer)
Instruções de tamanho fixo, execução padronizada em um único ciclo de clock por instrução utilizando pipelines agressivos. Apenas instruções específicas de Load/Store acessam a memória (ex: ARM, RISC-V).
4. Dispositivos de Entrada e Saída (I/O)
Os módulos de I/O atuam como pontes de compatibilização de velocidade, nível de tensão e formato de dados entre o núcleo de processamento síncrono e a periferia do mundo físico.
Técnicas de Gerenciamento de I/O
- I/O Programado (Polling): A CPU verifica constantemente o estado do periférico por meio de loops de software ("polling"). É uma abordagem ineficiente que desperdiça ciclos de processamento valiosos.
- I/O Baseado em Interrupções: O periférico avisa a CPU quando está pronto para enviar ou receber dados gerando um sinal físico na linha de interrupção (IRQ). A CPU interrompe seu fluxo atual, salva o contexto e executa uma rotina de tratamento (ISR - Interrupt Service Routine).
- DMA (Direct Memory Access): Técnica que permite a controladores de hardware dedicados transferirem blocos inteiros de dados diretamente entre os periféricos e a memória principal sem a intervenção direta da CPU, liberando o processador para realizar tarefas computacionais puras.
5. Bases Numéricas
Sistemas computacionais operam intrinsecamente sob lógica binária devido às propriedades elétricas dos transistores (condução/corte). No entanto, engenheiros e cientistas de dados utilizam representações auxiliares como octal e hexadecimal para legibilidade.
Sistemas Posicionais
Qualquer número em uma base $b$ pode ser decomposto pelo somatório de seus dígitos multiplicados por potências da base:
- Binário (Base 2): Dígitos {0,1}
- Octal (Base 8): Dígitos {0,1,2,3,4,5,6,7}
- Decimal (Base 10): Dígitos {0,1,2,3,4,5,6,7,8,9}
- Hexadecimal (Base 16): Dígitos {0-9, A-F} (Onde A=10, F=15)
Conversões Exemplo
Para converter de Decimal para qualquer base, utiliza-se o método das divisões sucessivas pelo valor da base de destino até obter quociente zero, mapeando os restos de trás para frente.
6. Representação de Dados na Memória
Inteiros com Sinal
Para mapear números negativos e positivos em arquiteturas digitais, utiliza-se o sistema de Complemento de Dois, que simplifica o design de circuitos aritméticos eliminando a necessidade de lógica de subtração dedicada (subtrair torna-se somar um número negativo).
Para obter o complemento de dois de um número de n bits:
- Inverta todos os bits do número binário original (Complemento de Um).
- Some 1 ao resultado binário obtido.
Exemplo com 8 bits: +5(d) = 00000101(b). Inversão: 11111010(b). Somando 1: -5(d) = 11111011(b)).
Números Reais (Ponto Flutuante)
A representação de números fracionários segue estritamente a norma internacional IEEE 754, estruturada em três componentes fundamentais:
- Precisão Simples (32 bits): 1 bit de sinal, 8 bits para o expoente, 23 bits para a mantissa (fração).
- Precisão Dupla (64 bits): 1 bit de sinal, 11 bits para o expoente, 52 bits para a mantissa.
7. Sistemas Operacionais e Softwares de Sistema
O software de sistema atua como uma camada de abstração lógica que esconde as complexidades do hardware físico das aplicações do usuário.
O Núcleo (Kernel)
O Kernel é o componente central executado em modo privilegiado de hardware (Supervisor Mode/Ring 0). Suas responsabilidades incluem:
- Gerenciamento de Processos: Escalonamento de threads na CPU, sincronização e proteção mútua.
- Gerenciamento de Memória Virtual: Implementação de paginação e segmentação, permitindo que processos utilizem mais memória do que fisicamente disponível através da tradução via MMU (Memory Management Unit).
- Abstração de Sistemas de Arquivos: Tradução de requisições lógicas de leitura/escrita em blocos de comandos de hardware específicos para os drivers de armazenamento.
A Cadeia de Tradução de Software
Para que o código escrito por um programador seja compreendido pelo hardware, ele passa por uma pipeline rigorosa:
Código-Fonte (C/Rust) → Compilador → Código Assembly → Montador (Assembler) → Código de Máquina Puro (.obj) → Ligador (Linker) → Executável Final