Podemos até pensar em um processo como um aplicativo, mas isso dá uma idéia incompleta de como os processos se relacionam com o sistema operacional e com o hardware. O aplicativo que você vê (processador de texto, planilha eletrônica ou jogo) é, de fato, um processo. Porém, os aplicativos podem ativar outros processos para se comunicarem com outros dispositivos ou computadores. Também existe uma série de processos que são executados sem que você perceba. O Windows e o UNIX podem executar, em background, dezenas de processos para lidar com a rede, gerenciar a memória e o disco rígido, verificar vírus etc.
Em resumo, um processo é um software que executa ações e pode ser controlado pelo usuário, por outros aplicativos ou pelo sistema operacional.
São os processos, e não os aplicativos, que o sistema operacional controla e faz sua escala para que a CPU os execute. Em um sistema monotarefa, este trabalho é bastante simples. O sistema operacional permite que o aplicativo seja iniciado, suspendendo sua execução somente para tratar as interrupções e inserções do usuário.
Interrupções são sinais especiais enviados pelo hardware ou software para a CPU. É como se alguma parte do computador levantasse a mão e chamasse a atenção da CPU em uma reunião animada. Algumas vezes, o sistema operacional vai priorizar alguns processos e ignorar as interrupções (mascarar as interrupções) para que uma tarefa seja cumprida o mais rápido possível. Entretanto, existem algumas interrupções (condições de erro ou problemas com a memória) que são tão importantes que não podem ser ignoradas. Essas interrupções não-mascaráveis (NMI - Non-maskable Interrupts) devem ser atendidas imediatamente.
As interrupções podem causar alguma complicação na execução dos processos em um sistema monotarefa. Porém, o trabalho do sistema operacional se torna muito mais complicado em um sistema multitarefa. Ele deve organizar a execução dos aplicativos para que você acredite que várias coisas estão acontecendo ao mesmo tempo. Isto é complicado porque a CPU só pode fazer uma coisa de cada vez. Para criar esta aparência de coisas acontecendo ao mesmo tempo, o sistema operacional precisa mudar de um processo para o outro milhares de vezes por segundo. Vamos ver o que acontece.
Todas as informações necessárias para controlar a mudança dos processos são armazenadas num pacote de dados chamado de bloco de controle de processo, que contém:
Essa troca de processo acontece sem a interferência direta do usuário e cada processo consegue ciclos de CPU suficientes para realizar suas tarefas em um período razoável de tempo. O problema acontece quando o usuário tenta executar muitos processos ao mesmo tempo. O próprio sistema operacional precisa de alguns ciclos de CPU para salvar todos os registradores, filas e pilhas dos processos e realizar a alternância entre eles. Se uma determinada quantidade de processos é iniciada, e se o sistema operacional não foi cuidadosamente planejado, o sistema pode começar a usar a maioria dos ciclos de CPU disponível para alternar os processos em vez de executá-los. Isso se chama thrashing e geralmente requer algum tipo de intervenção direta do usuário para interromper os processos e reorganizar o sistema.
Uma forma de reduzir o thrashing é diminuir a necessidade de criação de novos processos para realizar as tarefas. Alguns sistemas operacionais utilizam um processo mais "leve" chamado thread. Uma thread pode controlar o trabalho mas, geralmente, não lida com os vários tipos de entrada/saída e não estabelece estruturas que exijam o longo bloco de controle de processo de um processo regular. Um processo pode iniciar muitas threads ou outros processos, mas uma thread não pode iniciar um processo.
Até agora, tudo o que discutimos diz respeito a uma única CPU. Em um sistema com duas ou mais CPUs, o trabalho é dividido. O sistema operacional deve equacionar a demanda de cada processo para as diferentes CPUs. Os sistemas operacionais assimétricos utilizam uma CPU para suas próprias necessidades e dividem os processos dos aplicativos entre as outras CPUs. Os sistemas operacionais simétricos compartilham as várias CPUs e equacionam a demanda e a disponibilidade da CPU, mesmo quando o sistema operacional é o único aplicativo em execução.
A CPU não é o único recurso requisitado mesmo quando somente o sistema operacional está sendo executado. O gerenciamento da memória é um passo crucial para que todos os processos sejam executados de maneira tranqüila.
| FAVORITOS | |||||
| Faça do HowStuffWorks a sua página inicial | | | digg it! (?) | | | del.icio.us | |