EXECUTADOS E SE COMUNICAM AO MESMO TEMPO, COMO PODEMOS CONTROLÁ-LOS?
Por: Gabi Oliveira • 9/9/2018 • Dissertação • 5.936 Palavras (24 Páginas) • 269 Visualizações
SISTEMAS OPERACIONAIS
CAPÍTULO 3 - SE VÁRIOS PROCESSOS SÃO
EXECUTADOS E SE COMUNICAM AO MESMO TEMPO, COMO PODEMOS CONTROLÁ-LOS?
Osvaldo de Souza
Introdução
Se o SO está ativo, haverá processos em execução. Ou seja, enquanto estiver ligado, o microcomputador nunca está inativo, pois a CPU sempre está ativa.
Com a possibilidade de novas arquiteturas, os microcomputadores são dotados não apenas de uma, mas duas ou mais CPUs que operam conjuntamente, sob o controle de uma delas.
Significa que, em tais arquiteturas, mais de um processo é executado em um determinado momento. Aplicativos podem ser construídos para tirar vantagens desse tipo de estrutura, fazendo com que seja extraído o máximo de capacidade da CPU, minimizando, assim, o tempo total de processamento que venha a ser necessário.
Seja em microcomputadores com várias ou apenas uma CPU, o cenário é o mesmo: vários processos ativos e disputando a CPU, a memória e todos os outros tipos de recursos disponíveis.
Diante disso, surgem questões de como fazer o controle e a comunicação entre os processos e o SO e entre os próprios processos.
Em geral, a comunicação entre os processos e o SO se dá por meio das APIs, abstrações para as chamadas de sistemas providas pelo sistema operacional, para intermediar o acesso ao hardware, ou então para acesso a funcionalidades de software que o próprio SO oferece. Então como as comunicações acontecem? Como são controladas? Sob o intenso tráfego de dados entre a memória RAM, o disco e a CPU, quem gerencia esse volume de comunicações?
Você terá respostas para essas perguntas e mais outras informações com a leitura deste capítulo. Vamos lá? Bons estudos!
3.1 A comunicação de mensagens e a sincronização entre os processos
Percebe-se, facilmente, que os processos, enquanto executados, geram uma intensa comunicação interna, portanto, produzem uma enorme quantidade de mensagens que são trocadas entre eles, na forma das APIs, chamadas de sistema e até mesmo recursos compartilhados. Tal é a importância dessa intensa comunicação que qualquer erro leva a trágicas consequências, como o encerramento prematuro de processos e até falhas gerais do SO.
A comunicação ocorre e é necessária para que os processos utilizem os recursos que estão disponíveis no microcomputador por meio do sistema operacional. Mas você precisa compreender que as transferências de dados entre a unidade de processamento central, a memória RAM e o disco rígido também são tipos de comunicação.
Você pode se perguntar: como assim? Por exemplo, quando você edita uma imagem em seu microcomputador usando um aplicativo gráfico, para que a imagem seja exibida no display, foram necessárias diversas comunicações, que, inclusive, envolveram a transferência da imagem original para a memória RAM e também para a memória do display.
Portanto, a comunicação é caracterizada por mensagens curtas, médias e grandes. Ainda em nosso exemplo, considere que durante e após a edição da imagem, você precisa salvar o que foi feito. Esse processo de registrar o trabalho no disco rígido envolve um conjunto extenso de comunicações.
[pic 1]
Figura 1 - O encadeamento da comunicação no Binder do SO Android permite que um aplicativo do espaço do usuário (no topo da figura) acesse o espaço do núcleo. Fonte: TANENBAUM; BOS, 2016, p. 565.
A exemplo do entrelaçamento das comunicações entre os processos, observe a Figura anterior que apresenta a comunicação que ocorre (generalizada) para o uso do Binder no sistema operacional Android (TANENBAUM; BOS, 2016). O Binder é utilizado para que aplicações do espaço do usuário possam invocar e utilizar recursos que estejam disponíveis em equipamentos alcançados por intermédio da rede de dados. Trata-se, portanto, do uso de recursos compartilhados a distância. E esse compartilhamento requer o entrelaçamento das comunicações entre processos feito de forma correta. Além disso, devemos considerar os problemas relacionados à memória RAM, tais como: proteção, alocação e desalocação de trechos, localização e fragmentação das partes livres da memória.
Ou seja, tudo precisa ocorrer em sintonia entre os processos e os diversos hardwares que compõem o microcomputador, o que é trabalho do sistema operacional.
A comunicação entre os processos é estabelecida de uma maneira fortemente estruturada, normalmente chamada de protocolo. O protocolo pode ser muito simples, do tipo “quando um estiver falando, o outro apenas ouve”, mas há situações em que requer vários dados repassados do emissor para o receptor. Esses dados repassados são chamados de conteúdo da comunicação ou parâmetros.
VOCÊ SABIA?
[pic 2] | Embora a Internet seja bastante popular, a ideia de construir repositórios nos quais as pessoas possam ter acesso e interagirem com dados ou programas é muito antiga. Esses repositórios antigos eram chamados de BBS, do inglês bulletin board system, e foi a partir deles que provavelmente nasceu a ideia da WWW. O funcionamento dos BBS era totalmente dependente dos protocolos, que estabeleciam como você podia enviar uma mensagem ou um arquivo. Diferente de hoje, havia limites de download, então quando você acessava um BBS, tinha (nos bons casos) direito de baixar 300 kilobytes de dados, usando uma conexão de modem que transmitia, no máximo, 300 bytes por segundo. Outro mundo, não é mesmo? |
Tanenbaum e Bos (2016, p. 28) trazem que “processos relacionados que estão cooperando para finalizar alguma tarefa muitas vezes precisam comunicar-se entre si e sincronizar as atividades”. Isso estabelece uma das razões pelas quais os processos se comunicam. Outras razões incluem: solicitar algum tipo de serviço; a sincronização de alguma tarefa; o envio ou recebimento de dados; a notificação de resultado de processamento; e o erro ou sucesso nas tarefas. Portanto, como há diferentes motivos pelos quais os processos se comunicam, há também diferentes maneiras de estabelecer e realizar a comunicação. Mesmo assim, há previsibilidade quanto aos possíveis tipos de comunicação e dessa forma torna-se possível criar protocolos e/ou tipos padrões de mensagens que serão trocadas.
Suponha que exista um processo X que forneça os serviços de data e hora. Para atender uma demanda entre X e os outros processos que venham a se comunicar com ele, cria-se o seguinte padrão para a comunicação: para solicitar a data deve ser usada a mensagem obterData() e para obter a hora, a mensagem obterHora(). Como você percebeu, essas mensagens são parecidas com as APIs e o modo de usá-las estabelece o protocolo de comunicação. Suponha ainda que seja possível enviar uma mensagem para alterar a data e/ou a hora: definirData (valor) e definirHora(valor). O valor que surge dentro dos parênteses é um indicativo de que que junto à mensagem deve ser enviada nova data ou hora para a qual X deve alterar os valores anteriores. Assim, para alterar a data, por exemplo, para 22 de maio de 2018, usaríamos: definirData(“22/05/2018”).
...