Semana 6: Programas e processos

Importante! Este material foi elaborado para ser lido em terminais e acompanhado (e praticado) em dispositivos de desktop!

Perguntas-chave

Programas

Por que precisamos saber o que são programas?

Sistemas computacionais

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.

Componentes do hardware

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.

Todo programa é um grande número

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.

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.

Linguagens compiladas e interpretadas

O shell é um programa interpretador!

Processos

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 |
                                         +--------------------+

Diretório /proc

O kernel Linux implementa uma visão dos processos em execução no diretório virtual montado em /proc.