19 de ago de 2012

Dica do dia : O tempo e a computação

Muitas vezes quando utilizamos um computador temos a noção de que tudo ocorre imediatamente quando mandamos uma tarefa ser executada, clicamos em um icone ou algo do genero (exceto quando o windows trava rsrsrs). Mas ao aprofundar no estudo sobre organização e arquitetura de computadores vemos a quantidade de ações que são realizadas para que uma tarefa seja executada. E neste artigo vou comentar um pouco sobre a relação sobre tempo e computador e ao final dar uma dica para quem ainda não sabe sobre o que deseja virar um especialista.


Inicialmente vamos pensar em um computador com apenas um processo e um processador, torna-se muito facil analisar o comportamento do sistema, que segue o seguinte fluxo:

 
Sempre que o processo necessite  ele tem o processador disponível. 

Mas como nem tudo é perfeito o cenário real é desta forma :

 
Quando temos mais de uma tarefa executando em um ou mais processadores, as tarefas devem ser escalonadas para que todas sejam executadas. Ao retirar uma tarefa que esta sendo executada o processador deve salvar o estado do processo e isso leva tempo. Ao falar tempo temos a noção de segundos como uma unidade pequena, no máximo centésimo de segundo, porém a unidade utilizada na computação é o milisegundo, ou seja, 1 segundo é igual a 1000 ms. O processador trabalha em ciclos, chamados de ciclo de clock e são muitos ciclos, por exemplo: 1Mhz = 1.000.000 de ciclos por segundo, 1 Ghz = 1.000.000.000 = 1 bilhão de ciclos por segundo. Uma instrução de maquina pode levar um ou mais de um ciclo para ser executada, dependendo da arquitetura do processador. 
Toda esta explicação foi para mostrar que quanto mais processos executam em um computador mais devemos nos preocupar no tempo de resposta de cada tarefa, principalmente em aplicações para dispositivos como Smartphones que devem dar uma noção de tempo real para o usuário.
Para melhorar esta noção geralmente são utilizados artifícios como animações, entre outros que melhoram a percepção do usuário para a ação, porém os processadores são melhorados a cada dia para dar melhor suporte a estas execuções. 
Mas ai surge a pergunta, e quando um sistema não tem interação com o usuário e necessita de uma resposta imediata real para as ações? Para isto surge o conceito de tempo real. Um sistema de tempo real significa que ele irá responder a uma determinada tarefa em um intervalo de tempo determinado. 
Este tipo de sistema é cada vez mais utilizado, principalmente em aplicações como de controle industrial, telefonia e operações que envolvem vidas humanas. Um sistema de tempo real pode ser baseado em compartamento ou em tempo, ou seja, as ações devem reagir a um comportamento externo como um sensor, ou devem responder a um intervalo de tempo determinado.
Ao começar a criar um sistema com este requisito a primeira atitude é pensar se existe um hardware que suporte o mesmo. Caso exista, devemos pensar em modelar este sistema, atualmente a modelagem de software nem sempre é bem vista, porém, para sistemas que não podem ter erros e provavelmente não serão refatorados a modelagem é um ponto base para o incio da tarefa. Para modelar um sistema de tempo real muitas vezes são utilizadas linguagens formais, como Alloy, método Z, Redes de Petri, entre outros. Linguagens como a UML não possuem recursos suficientes para representar os requisitos de tempo impostos por esta forma de sistema.
Ao modelar o sistema, tudo deve ser levado em consideração, por exemplo, a quantidade de ciclos por instrução, a quantidade de processos em média que o processador irá executar, entre outros.
As vezes um ms pode salvar uma vida, ou melhorar os lucros de uma empresa, ou diversas coisas, então por isso cada vez mais sistemas com um tempo de resposta máximo estão sendo criados, e fica a minha dica para alguem que queira se especializar em alguma área da computação.

Nenhum comentário:

Postar um comentário