Processo (computação) - Process (computing)

Na computação , um processo é a instância de um programa de computador que está sendo executado por um ou vários threads . Ele contém o código do programa e sua atividade. Dependendo do sistema operacional (SO), um processo pode ser composto de vários threads de execução que executam instruções simultaneamente .

Enquanto um programa de computador é uma coleção passiva de instruções normalmente armazenadas em um arquivo no disco, um processo é a execução dessas instruções após serem carregadas do disco para a memória. Vários processos podem estar associados ao mesmo programa; por exemplo, abrir várias instâncias do mesmo programa geralmente resulta na execução de mais de um processo.

Multitarefa é um método que permite que vários processos compartilhem processadores (CPUs) e outros recursos do sistema. Cada CPU (núcleo) executa uma única tarefa por vez. No entanto, a multitarefa permite que cada processador alterne entre as tarefas que estão sendo executadas sem ter que esperar a conclusão de cada tarefa ( preempção ). Dependendo da implementação do sistema operacional, as mudanças podem ser realizadas quando as tarefas são iniciadas e aguardam a conclusão das operações de entrada / saída , quando uma tarefa cede voluntariamente a CPU, nas interrupções de hardware e quando o planejador do sistema operacional decide que um processo expirou seu justo compartilhamento de tempo de CPU (por exemplo, pelo Completely Fair Scheduler do kernel Linux ).

Uma forma comum de multitarefa é fornecida pelo compartilhamento de tempo da CPU, que é um método para intercalar a execução de processos e threads dos usuários, e até mesmo de tarefas de kernel independentes - embora o último recurso seja viável apenas em kernels preemptivos como o Linux . A preempção tem um efeito colateral importante para processos interativos que recebem prioridade mais alta em relação aos processos vinculados à CPU, portanto, os usuários recebem recursos de computação imediatamente com o simples pressionar de uma tecla ou ao mover um mouse. Além disso, aplicativos como reprodução de vídeo e música recebem algum tipo de prioridade em tempo real, antecipando qualquer outro processo de prioridade mais baixa. Em sistemas de compartilhamento de tempo, as trocas de contexto são realizadas rapidamente, o que faz parecer que vários processos estão sendo executados simultaneamente no mesmo processador. Essa execução simultânea de vários processos é chamada de simultaneidade .

Para segurança e confiabilidade, a maioria dos sistemas operacionais modernos evita a comunicação direta entre processos independentes, fornecendo funcionalidade de comunicação entre processos estritamente mediada e controlada.

Representação

Uma lista de processos conforme exibida pelo htop
Uma tabela de processos conforme exibida pelo KDE System Guard
Uma tabela de processos conforme exibida pelo KDE System Guard

Em geral, um processo de sistema de computador consiste (ou diz-se que possui ) os seguintes recursos:

  • Uma imagem do código de máquina executável associado a um programa.
  • Memória (normalmente alguma região da memória virtual ); que inclui o código executável, dados específicos do processo (entrada e saída), uma pilha de chamadas (para controlar as sub - rotinas ativas e / ou outros eventos) e um heap para conter os dados de computação intermediários gerados durante o tempo de execução.
  • Descritores do sistema operacional de recursos que são alocados para o processo, como descritores de arquivo ( terminologia Unix ) ou identificadores ( Windows ) e fontes de dados e coletores.
  • Atributos de segurança , como o proprietário do processo e o conjunto de permissões do processo (operações permitidas).
  • Estado do processador ( contexto ), como o conteúdo dos registros e o endereçamento da memória física. O estado é normalmente armazenado nos registros do computador quando o processo está em execução e, caso contrário, na memória.

O sistema operacional mantém a maior parte dessas informações sobre os processos ativos em estruturas de dados chamadas de blocos de controle de processos . Qualquer subconjunto dos recursos, normalmente pelo menos o estado do processador, pode ser associado a cada um dos threads do processo em sistemas operacionais que suportam threads ou processos filho .

O sistema operacional mantém seus processos separados e aloca os recursos de que precisam, de forma que haja menos probabilidade de interferir uns nos outros e causar falhas no sistema (por exemplo, deadlock ou thrashing ). O sistema operacional também pode fornecer mecanismos para comunicação entre processos para permitir que os processos interajam de maneiras seguras e previsíveis.

Multitarefa e gerenciamento de processos

Um sistema operacional multitarefa pode apenas alternar entre os processos para dar a aparência de muitos processos em execução simultaneamente (ou seja, em paralelo ), embora na verdade apenas um processo possa ser executado a qualquer momento em uma única CPU (a menos que a CPU tenha vários núcleos , então multithreading ou outras tecnologias semelhantes podem ser usadas).

É comum associar um único processo a um programa principal e os processos filho a quaisquer processos paralelos derivados de spin-off, que se comportam como sub-rotinas assíncronas . Diz-se que um processo possui recursos próprios , dos quais uma imagem do seu programa (na memória) é um desses recursos. No entanto, em sistemas de multiprocessamento, muitos processos podem ser executados ou compartilhar o mesmo programa reentrante no mesmo local na memória, mas diz-se que cada processo possui sua própria imagem do programa.

Os processos são freqüentemente chamados de "tarefas" em sistemas operacionais incorporados . O sentido de "processo" (ou tarefa) é "algo que ocupa tempo", ao contrário de "memória", que é "algo que ocupa espaço".

A descrição acima se aplica aos processos gerenciados por um sistema operacional e aos processos definidos por cálculos de processo .

Se um processo solicitar algo pelo qual deve aguardar, ele será bloqueado. Quando o processo está no estado bloqueado , é elegível para troca para o disco, mas isso é transparente em um sistema de memória virtual , onde regiões da memória de um processo podem estar realmente no disco e não na memória principal a qualquer momento. Observe que mesmo partes dos processos / tarefas ativos (programas em execução) são elegíveis para troca para o disco, se as partes não tiverem sido usadas recentemente. Nem todas as partes de um programa em execução e seus dados precisam estar na memória física para que o processo associado esteja ativo.

Estados do processo

Os vários estados do processo, exibidos em um diagrama de estado , com setas indicando possíveis transições entre os estados.

Um kernel do sistema operacional que permite a multitarefa precisa de processos para ter determinados estados . Os nomes desses estados não são padronizados, mas têm funcionalidades semelhantes.

  • Primeiro, o processo é "criado" sendo carregado de um dispositivo de armazenamento secundário ( unidade de disco rígido , CD-ROM , etc.) na memória principal . Depois disso, o escalonador de processo atribui a ele o estado de "espera".
  • Enquanto o processo está "esperando", ele espera que o planejador faça uma chamada troca de contexto . A troca de contexto carrega o processo no processador e altera o estado para "em execução", enquanto o processo "em execução" anterior é armazenado em um estado de "espera".
  • Se um processo no estado "em execução" precisar aguardar um recurso (aguardar a entrada do usuário ou o arquivo abrir, por exemplo), ele será atribuído ao estado "bloqueado". O estado do processo é alterado de volta para "aguardando" quando o processo não precisa mais esperar (em um estado bloqueado).
  • Depois que o processo termina a execução ou é encerrado pelo sistema operacional, ele não é mais necessário. O processo é removido instantaneamente ou é movido para o estado "encerrado". Quando removido, ele apenas espera para ser removido da memória principal.

Comunicação entre processos

Quando os processos precisam se comunicar uns com os outros, eles devem compartilhar partes de seus espaços de endereço ou usar outras formas de comunicação entre processos (IPC). Por exemplo, em um pipeline de shell, a saída do primeiro processo precisa passar para o segundo e assim por diante; outro exemplo é uma tarefa que pode ser decomposta em processos cooperativos, mas parcialmente independentes, que podem ser executados de uma vez (ou seja, usando simultaneidade ou verdadeiro paralelismo - o último modelo é um caso particular de execução simultânea e é viável sempre que núcleos de CPU suficientes estiverem disponíveis para todos os processos que estão prontos para serem executados).

É ainda possível que dois ou mais processos sejam executados em máquinas diferentes que podem executar sistemas operacionais (SO) diferentes, portanto, alguns mecanismos de comunicação e sincronização (chamados de protocolos de comunicação para computação distribuída) são necessários (por exemplo, a Interface de passagem de mensagem, muitas vezes chamado simplesmente de MPI ).

História

No início dos anos 1960, o software de controle de computador evoluiu de software de controle de monitor , por exemplo IBSYS , para software de controle executivo . Com o tempo, os computadores ficaram mais rápidos, enquanto o tempo do computador ainda não era barato nem totalmente utilizado; tal ambiente tornou a multiprogramação possível e necessária. Multiprogramação significa que vários programas são executados simultaneamente . No início, mais de um programa rodava em um único processador, como resultado da arquitetura de computador uniprocessador subjacente , e eles compartilhavam recursos de hardware escassos e limitados; consequentemente, a simultaneidade era de natureza serial . Em sistemas posteriores com vários processadores , vários programas podem ser executados simultaneamente em paralelo .

Os programas consistem em sequências de instruções para processadores. Um único processador pode executar apenas uma instrução por vez: é impossível executar mais programas ao mesmo tempo. Um programa pode precisar de algum recurso , como um dispositivo de entrada, que tem um grande atraso, ou um programa pode iniciar alguma operação lenta, como enviar saída para uma impressora. Isso faria com que o processador ficasse "ocioso" (não utilizado). Para manter o processador sempre ocupado, a execução de tal programa é interrompida e o sistema operacional troca o processador para executar outro programa. Para o usuário, parecerá que os programas são executados ao mesmo tempo (daí o termo "paralelo").

Pouco depois, a noção de "programa" foi expandida para a noção de "programa em execução e seu contexto". Nasceu o conceito de processo, que também se tornou necessário com a invenção do código reentrante . Os tópicos vieram um pouco mais tarde. No entanto, com o advento de conceitos como compartilhamento de tempo , redes de computadores e computadores com memória compartilhada de múltiplas CPUs , a velha "multiprogramação" deu lugar à verdadeira multitarefa , multiprocessamento e, posteriormente, multithreading .

Veja também

Notas

Referências

Leitura adicional

links externos