Processo (computação)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Programa vs. Processo vs. Thread
Programação, Preemption, Comutação de Contexto

Na computação, um processo é a instância de um programa de computador que está sendo executado por um ou mais threads. Existem muitos modelos de processos diferentes, alguns dos quais são leves, mas quase todos os processos (até mesmo máquinas virtuais inteiras) estão enraizados em um processo de sistema operacional (SO) que compreende o código do programa, recursos de sistema atribuídos, permissões de acesso físico e lógico, e estruturas de dados para iniciar, controlar e coordenar atividades de execução. Dependendo do sistema operacional, 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 um único processo por vez. No entanto, a multitarefa permite que cada processador alterne entre as tarefas que estão sendo executadas sem ter que esperar o término de cada tarefa (preempção). Dependendo da implementação do sistema operacional, as alternâncias podem ser executadas quando as tarefas iniciam e aguardam a conclusão das operações de entrada/saída, quando uma tarefa cede voluntariamente a CPU, em interrupções de hardware e quando o escalonador do sistema operacional decide que um processo expirou seu tempo justo. parcela do 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 das tarefas dos usuários. processos e threads, 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 maior prioridade 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 o mouse. Além disso, aplicações como reprodução de vídeo e música recebem algum tipo de prioridade em tempo real, anulando qualquer outro processo de prioridade mais baixa. Em sistemas de tempo compartilhado, as trocas de contexto são executadas rapidamente, o que faz parecer que vários processos estão sendo executados simultaneamente no mesmo processador. Essa execução aparentemente simultânea de vários processos é chamada de simultaneidade.

Para segurança e confiabilidade, a maioria dos sistemas operacionais modernos impedem a comunicação direta entre processos independentes, proporcionando comunicação entre processos estritamente mediada e controlada.

Representação

Uma lista de processos como mostrado por htop
A process table as displayed by KDE System Guard
Uma tabela de processo como mostrado pela KDE System Guard

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

  • Um imagem do código de máquina executável associado a um programa.
  • Memória (tipicamente alguma região de memória virtual); que inclui o código executável, dados específicos do processo (input and output), uma pilha de chamada (para manter o controle de subrotinas ativas e/ou outros eventos), e um heap para manter dados de computação intermediários gerados durante o tempo de execução.
  • Descritores do sistema operacional de recursos alocados ao processo, como descritores de arquivos (terminologia Unix) ou manipuladores (Windows), e fontes de dados e pias.
  • 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 de registros e endereçamento de memória física. O Estado normalmente é armazenado em registros de computador quando o processo está executando, e em memória de outra forma.

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

O sistema operacional mantém seus processos separados e aloca os recursos necessários, de modo que é menos provável que interfiram uns com os outros e causem 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 maneira segura e previsível.

Multitarefa e gestão de processos

Um sistema operacional multitarefa pode apenas alternar entre processos para dar a aparência de muitos processos executando simultaneamente (isto é, em paralelo), embora de fato apenas um processo pode ser executado a qualquer momento em uma única CPU (a menos que a CPU tenha múltiplos núcleos, então multithreading ou outras tecnologias semelhantes podem ser usadas).

É comum associar um único processo a um programa principal e processos filhos a quaisquer processos paralelos derivados, que se comportam como sub-rotinas assíncronas. Diz-se que um processo possui recursos, dos quais uma imagem de 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 da memória, mas diz-se que cada processo possui sua própria imagem. do programa.

Os processos são frequentemente chamados de "tarefas" em sistemas operacionais embarcados. A sensação de "processo" (ou tarefa) é “algo que ocupa tempo”, em oposição à “memória”, que é “algo que ocupa espaço”.

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

Se um processo solicitar algo pelo qual deve esperar, ele será bloqueado. Quando o processo está no estado bloqueado, ele é elegível para troca para 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. Mesmo partes de processos/tarefas ativos (programas em execução) são elegíveis para troca para 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 de processo, exibidos em um diagrama de estado, com setas indicando possíveis transições entre estados.

Um kernel de sistema operacional que permite multitarefa precisa que os processos tenham 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 programador de processo atribui-lhe o estado "esperando".
  • Enquanto o processo está "esperando", espera que o agendador faça um chamado switch de contexto. O interruptor de contexto carrega o processo no processador e muda o estado para "executar" enquanto o processo anteriormente "executar" é armazenado em um estado "esperar".
  • Se um processo no estado "running" precisa esperar por um recurso (esperar para entrada do usuário ou arquivo abrir, por exemplo), ele é atribuído o estado "bloqueado". O estado do processo é alterado de volta para "esperar" quando o processo não precisa mais esperar (em um estado bloqueado).
  • Uma vez que o processo termina a execução, ou é terminado pelo sistema operacional, não é mais necessário. O processo é removido instantaneamente ou é movido para o estado "terminado". Quando removido, apenas espera ser removido da memória principal.

Comunicação entre processos

Quando os processos precisam se comunicar entre si, 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 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 cooperantes, mas parcialmente independentes, que podem ser executados ao mesmo tempo (ou seja, usando simultaneidade ou paralelismo verdadeiro – 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).

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

Histórico

No início da década de 1960, o software de controle de computador evoluiu de um software de controle de monitor, por exemplo o IBSYS, para um software de controle executivo. Com o tempo, os computadores ficaram mais rápidos, enquanto o tempo de uso 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 compartilhavam recursos de hardware escassos e limitados; conseqüentemente, a simultaneidade era de natureza serial. Em sistemas posteriores com múltiplos 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 possui um grande atraso, ou um programa pode iniciar alguma operação lenta, como enviar a 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 tempo depois, a noção de um "programa" foi ampliado para a noção de um "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 com múltiplas CPUs, a velha "multiprogramação" deu lugar à verdadeira multitarefa, multiprocessamento e, mais tarde, multithreading.

Contenido relacionado

Míssil de cruzeiro

Um míssil de cruzeiro é um míssil guiado usado contra alvos terrestres ou navais que permanece na atmosfera e voa a maior parte de sua trajetória de vôo...

Common Lisp

Common Lisp é um dialeto da linguagem de programação Lisp, publicado no documento padrão ANSI ANSI INCITS 226-1994 (anteriormente X3.226-1994 (R1999)). O...

Cabala espinha dorsal

A cabala backbone era uma organização informal de administradores de servidores de notícias de grandes sites do sistema de discussão baseado em grupos de...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save