quinta-feira, 22 de setembro de 2011

Vídeo - Comando fork() no Linux

Bem pessoal, segue abaixo uma vídeo-aula que fiz explicando como se cria processos no ambiente linux usando o comando fork().


domingo, 11 de setembro de 2011

O que são Microcontroladores?


Alguém já ouviu falar em microcontrolador e ficou se perguntando o que é e para que serve? Pois é, imagine um computador em miniatura que possui um conjunto reduzido de instruções mas que é capaz de controlar inúmeras coisas como a temperatura do seu forno microondas, a temperatura de um dado ambiente e até acionar motores! O objetivo é criar um dispositivo que seja semelhante ao chip de processador usado em seu notebook ou desktop mas seja projetado para aplicações específicas e que exija bem menos potência para funcionar. Foi então que surgiu o PIC (Programmable Interface Controller ou controlador de interface programável) fabricado pela Microchip. Dentro desta "pastilha" preta cheia de pinos acima, há inúmeros módulos, por assim dizer, que possuem características importantes para o funcionamento do conjunto.

Aí dentro encontramos diversos dispositivos de entrada e saída e periféricos. Ou seja, encontramos um conversor Analógico/Digital, memória, uma CPU para processar os dados, dentre outros. O conversor serve para obter dados provenientes de sensores e convertê-lo para um sistema que seja fácil do computador interpretar. Os dados que estão na natureza possuem muitas vezes natureza analógica, ou seja, sinais contínuos no tempo. Os computadores só entendem 0 e 1, então é preciso converter esse sinal contínuo em uma sequência de zeros e uns!!
A memória é usada para guardar o programa que a gente faz usando a linguagem C, por exemplo, dentro do chip para ele poder ser executado, e, ao ser desligado, o seu conteúdo não seja perdido!
E também uma memória volátil, aquela que os dados são perdidos quando tiramos a alimentação (energia).

O uso desses componentes pequenos está cada vez mais comum hoje em dia já que sistemas específicos e projetos direcionados são cada vez mais necessários. Você aí, se tiver uma fazendo e quer que a sua irrigação seja monitorada 24horas por dia para que não haja prejuízos, com certeza você pode "encomendar" um sistema desse de um Engenheiro por exemplo. Ele vai desenvolver o programa e adquirir os sensores corretos para monitorar e quem sabe, se for preciso, acionar alguma coisa. Ele vai fazer uma plaquinha que vai conter lá o elemento principal para fazer todo o gerenciamento do sistema, o Microcontrolador! Um sistema desses você pode encontrar por aí, garanto que não vai ser fácil, e pior, talvez não seja 100% adequado para o seu problema. Então é por isso que sua aplicabilidade é muito grande. Já que cada situação possui suas características que precisam ser desenvolvidas especificamente para cada cliente.

Esse chip também possuem pinos usados para enviar sinais para serem interpretados por um computador via comunicação usb ou serial. Então além de monitorar a sua fazenda, ele ainda pode enviar os dados para serem salvos em HD e analisados depois, e por aí a imaginação ajuda bastante nessas horas, colocar tudo em banco de dados, criar gráficos, analisar em qual época do ano tal fenômeno é mais presente, onde é preciso aumentar ou diminuir a quantidade de água e etc!
Bem é isso, espero que tenham entendido um pouco do que expliquei!

quinta-feira, 8 de setembro de 2011

Comando fork() - Sistemas Operacionais

Pessoal, resolvi postar algo sobre o uso do comando fork() em ambiente Linux de programação.
Quando damos o comando fork() em um programa escrito em C no Linux, ele vai criar uma cópia exata a partir do ponto em que o comando é executado e dois processos executam ao mesmo tempo, o processo pai (aquele que chama o comando fork() ) e o processo filho (o que foi gerada pela chamada do fork() ).
Um programa simples que usa o fork() pode ser visto logo abaixo:

#include < stdio.h >
#include < stdlib.h >
#include < sys/types.h >
#include < sys/wait.h >
#include < unistd.h >

int main ()
{
pid_t filho;
filho = fork(); //aqui criamos o processo filho
if ( filho == 0 ) { //execução do filho
printf ("Sou o filho executando...\n");
_exit(0);
}
else { //execução do pai
printf ("Sou o pai executando.\n");
}
exit(0);
}

Uma maior explicação dos cabeçalhos incluídos nesse programa pode ser encontrado nas entradas de manual do linux, como "man fork". Você pode encontrar descrições detalhadas de cada função.
Podemos ver que quando damos um comando fork() um valor de retorno é atribuído à variável filho. No processo pai, esse valor é diferente de zero, no processo filho, é igual a zero. Observe que o que estiver abaixo do comando fork() é replicado para outro processo, então tanto o processo pai quanto o filho irão executar o que vier abaixo, por isso precisamos testar com o "if" o que cada um deve executar. Então se o valor da variável filho é igual a zero, então quer dizer que é o trecho de código que o filho deve executar, caso contrário, será o do pai. Dessa forma, temos dois processos executando, sendo que um foi gerado pelo outro! A ideia é fazer com que os dois executem e realizem tarefas de modo mais rápido, sendo que cada tarefa é atribuída para cada um realizar separadamente, com isso pode-se obter ganho de desempenho!
Espero que tenham gostado!

domingo, 4 de setembro de 2011

Sistemas Operacionais

Recentemente comprei um livro de Sistemas Operacionais para poder acompanhar melhor as aulas, já que estou cursando essa disciplina nesse semestre, e gostaria de compartilhar o que estou achando dele.
É esse aqui: Sistemas Operacionais Modernos - Ed. 2010 - Tanenbaum, Andrew S. Por enquanto estou gostando muito de sua abordagem sobre a teoria em que se baseia um S.O. (Abreviação de Sistemas operacionais). Para quem não sabe, esse Tanenbaum desenvolveu um S.O. para fins didáticos, baseado no UNIX, o pai da família de Linux que vemos por aí e BSD's da vida, como o da Apple que acompanha seus notebooks. O nome desse sistema didático é MINIX, já que era uma versão menor do Unix (confira aqui: www.minix3.org). No site encontramos o seu código-fonte e um monte de documentação ensinando a instalar e usar.
Na minha opinião nada melhor para estudar S.O. do que no linux, ainda mais quando dispomos de um material inicial, como o Minix, para podermos praticar um pouco daquilo que estudamos. Ele possui um conjunto reduzido de instruções, o que permite um maior entendimento e facilidade para poder usar os comandos e quem sabe até estudar realmente a implementação já que podemos abrir o código fonte, na sua maioria escrito em C.
Pretendo em breve postar mais alguns conceitos importantes como processos e threads!
Um abraço!

domingo, 28 de agosto de 2011

Falha boot ubuntu 10.04

Iae galera, depois de tanto tempo sem postagem resolvi voltar para mostrar uma solução simples para um "bug" que aconteceu em meu notebook quando instalei a versão 10.04 (stable) do ubuntu.
Toda vez quando inicio o sistema a mensagem aparece logo após a escolha do sistema operacinal no grub:

"udevd [308] open /dev/null failed: no such file or directory"

Pesquisei e não achei uma solução. Então resolvi fazer um teste, atualizei a versão do kernel para a 2.6.32-33-generic e essa mensagem deixou de aparecer.
Provavelmente era alguma tentativa de leitura de algum dispositivo que o sistema não estava tratando corretamente!

Por enquanto é isso. Em breve irei preparar umas boas postagens!