# 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 - O que são programas? - O que são processos? ## Programas Por que precisamos saber o que são programas? - Embora tenha funções especiais no sistema operacional, o shell é um programa como outro qualuquer. - Ao serem executaos, os programas são copiados para estruturas de dados na memória chamadas de ***processos***. - É através dos processos que o kernel gerencia o acesso aos recursos de hardware utilizados pelos programas (CPU, memória e dispositivos). ### 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: - Os números que correspondem ao que queremos que seja feito (*instruções*). - Os números que correspondem às informações que serão processadas ou participarão do processamento (*dados*). É 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. - Linguagem de alto nível: maior nível de abstração. - Linguagem de médio nível: mesclam altos e baixos níveis de abstração. - Linguagem de baixo nível: menor nível de abstração. - Linguagem de máquina: dados e instruções escritos numericamente. > 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 - **Linguagem compilada:** as abstrações do código são transformadas em sequências numéricas binárias. - **Linguagem interpretada:** o código é executado por um programa interpretador. > 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`.