Importante! Este material foi elaborado para ser lido em terminais e acompanhado (e praticado) em dispositivos de desktop!
Por que precisamos saber o que são programas?
Conjunto de componentes eletrônicos (hardware) destinado ao processamento de informações de acordo com as instruções e os dados de um programa (software).
Hardware é o que você chuta; software é o que você xinga.
Arquitetura de Von Neumann:
+--------------+ +-----------------+ +------------+
| DISPOSITIVOS | | UNIDADE | | |
| DE ENTRADA |<-->| CENTRAL DE |<-->| MEMÓRA |
| E SAÍDA | | PROCESSAMENTO | | |
+--------------+ +-----------------+ +------------+
O que circula pelas “setas” (barramentos) são pulsos
elétricos correspondendo a sequências de valores numéricos escritos com
os dígitos 0
e 1
.
Como o hardware só consegue processar números, todo programa é, na sua essência, um grande número.
Os números de um programa podem ser divididos em duas categorias:
É possível escrever programas escrevendo apenas números, mas é um processo tedioso, demorado e muito sujeito a erros. Para facilitar a escrita de programas, foram criadas as linguagens de programação.
Sistemas de escrita de programas que abstraem, em algum nível, os códigos numéricos que o hardware, efetivamente, é capaz de processar.
Embora seja muito comum associarmos o nível de uma linguagem à proximidade ou à distância das formas humanas de expressão, o verdadeiro referencial é a abstração na escrita dos procedimentos que o hardware deverá executar.
O shell é um programa interpretador!
Processos são estruturas de dados na memória associadas à execução de um programa.
PROGRAMA PROCESSO
+-----------------+ +--------------------+
| ARQUIVO BINÁRIO | +--------+ | ÁREA DO KERNEL |
| COM PERMISSÃO |--->| LOADER |--+ |--------------------|
| DE EXECUÇÃO | +--------+ | | PILHA |
+-----------------+ | |--------------------|
| | |
| |--------------------|
| | HEAP |
| |--------------------|
| | DADOS DO PROGRAMA |
+-->|--------------------|
| CÓDIGO DO PROGRAMA |
+--------------------+
O kernel Linux implementa uma visão dos processos em execução no
diretório virtual montado em /proc
.