segunda-feira, 11 de abril de 2011

Sistemas Distribuídos - Threads

Threads

Definição: É uma unidade básica de utilização de CPU: ID de definição; Contador de programa; Um conjunto de registradores; Um pilha.

Além disso, compartilha com outras threads pertencentes ao mesmo processo sua seção de:
  • Código
  • Dados
  • E outros recursos S.O., como arquivo abertos e sinais. 
Benefícios da programação Multithread
  • Responsividade
  • Compartilhamento
  • Economia
  • utilização de arquitetura multiprocessadas

Categorias de threads

Threads de Kernel: Gerenciadas pelo sistema operacional
Threads de usuário: Gerenciadas pela aplicação

Modelos de threads

  • Modelo muitos para um
  • Modelo um para um
  • Modelo muitos para muitos

Threads em Sistemas Distribuídos

Implementação de threads: Basicamente existem 2 abordagem na criação de threads, sendo elas:

1)      Construir uma biblioteca de threads que é executada inteiramente em modo usuário
2)      Fazer com que o kernel fique ciente das threads e os escalone.

Conceito Cliente/Servidor

Cliente: Praticamente existe 2 modo que um cliente pode ser visto em um ambiente distribuídos, sendo elas:

1)      Para cada serviço remoto, a máquina cliente terá uma contraparte separada que pode contatar o serviço pela rede.
2)      Fornece acesso direto a serviços remotos, disponibilizando apenas uma interfaces de usuários conveniente.

Cliente Multithreads

Funcionamento

1)      Primeiramente é necessário que essa thread consiga realizar uma conexão de alta velocidade.
2)      Precisa controlar a latência entre a solicitação e a resposta que o servidor enviará;
3)      Enquanto o servidor não encaminha nada, o cliente pode realizar alguma tarefa;

Servidor

É um processo que implemento um serviço específico em nome de um conjunto de cliente

Funcionamento

Em essência, cada servidor é organizado do mesmo modo, ou seja:
  • Ele espera por uma requisição que vem de um cliente, e na sequência, assegura que ela seja atendida.
  • E depois fica aguardando pela próxima requisição

Modo de organização de um servidor:
  • Servidores Iterativo: O servidor manipula a requisição e, se necessário, retorna uma resposta ao cliente requisitante.
  • Servidores concorrente: O servidor manipula por si próprio a requisição mas passa para uma thread separada ou para outro processo, depois imediatamente espera pela próxima requisição

Característica

Um ponto importante em um servidor é como o cliente contatam um servidor; Em todos os casos os clientes enviam requisições a um terminal, também chamado de porta, na máquina em que o servidor esta executando.

Uma abordagem é designar globalmente portas para serviços bem conhecidos, por exemplo:

  • Servidores que manipulem requisições FTP sempre ouvem a porta TCP 21.
  • Servidores HTTP sempre ouvem a porta TCP 80

IANA ( Internet assigned numbers authortiy)

  • Outro ponto que precisamos analisar em um servidor é quando o cliente aborta uma operação.

Solução

1 ) Fora da banda: O cliente e o servidor enviam dados que serão processados antes de quaisquer outros dados daquele cliente. 
2 ) Porta de controle: O servidor abre uma outra porta (com prioridade mais baixa).


 Estado do Servidor

Sem estado: Significa que o servidor não mantém informações sobre o estado de seus clientes e pode mudar seu próprio estado sem ter de informar a nenhum cliente

Com estado: Significa que o servidor mantém informações persistente sobre seus cliente.

Servidores Multithread

Uma implementação em um servidor, possibilita realizar um processamento paralelo, esmo que este seja monoprocessado;

Isso porque, o servidor encaminha para vários clientes, tarefas, as quais serão processadas em recursos (processadores) diferentes;

No servidor, podemos ter duas estrutura possíveis, sendo elas:
1)      Servidores multithread
2)      Servidores monothread

Seu funcionamento é realizar as chamas Send e Receive, ou seja, enviar e receber.

terça-feira, 5 de abril de 2011

Afinal o que é Ciência da Computação?


Afinal o que é Ciência da Computação?

Hoje, vou dar uma dica e não dizer realmente o que é Ciência da Computação ou o seu significado. Para as pessoas que desejam cursar o curso de Ciência da Computação, ou até mesmo aquelas que estão em dúvida se faz ou não um curso de graduação na área de informatica, meu objetivo(aqui) é falar sobre ciência da computação, afinal é o que eu faço e que graças à Deus, termino este ano. (2011)

Para as pessoas que estão mal informadas sobre a grade do curso, ou até mesmo aquelas pessoas que pensam que vão entrar no curso, e aprender a mexer no Word, Excel, formatar máquinas, instalar Linux, estão TOTALMENTE enganadas, como o próprio nome do curso diz, Ciência!!!. Você meu chapa, será um cientista, e para isto acontecer, você irá aprender muita matemática, física, álgebra, resumindo tudo o que envolve matemática, você irá aprender, arquitetura de computação, que envolve desde a criação e funcionamento do hardware desde o ano 1900 (e bolinhas) até as tecnologias mais atuais, e é claro você irá aprender, o porque uma coisa é melhor do que a outra, porque aquilo é tem um preço mais acessível e uma capacidade maior de armazenamento, e outra contém a metade de armazenamento e é extremamente mais cara, etc.

Faço este post porque acredito que é comum, toda a faculdade que possui este curso, possuir uma certa dificuldade de manter seus alunos até o final do curso. Todos os anos formam turmas com muitos alunos, no meu caso 40 pessoas em uma sala (1 semestre), e logo no segundo semestre, a quantidade cair para 25 pessoas, e o motivo mais comum (obvio) é porque muitas das pessoas que entram neste curso, imaginam ou sei-lá, pensam que vão aprender Word, Excel, mas logo de cara, começam na terrível matemática (Cálculo I, Geometria Analítica, (velhos tempos, eee saudade!).

Então, você aí!. Que pensa que vai aprender "informática" em Ciência da Computação, esta totalmente enganado, para dar uma "luz", a grade de Ciência da computação costuma a ser mais ou menos esta:

1. Cálculo I
2. Geometria Analitica
3. Metodologia Ciêntifica
4. Inglês para computação
5. Física Experimental
6. Cálculo II
7. Álgebra Linear
8. Algoritmo e Introdução de Liguagem de programação
9. Estrutura de Dados I
10. Estrutura de Dados II
11. Circuitos Digitais
12. Sistemas Digitais
13. Assembly
14. Engenharia de Software
15. Banco de Dados I
16. Banco de Dados II
17. Paradigmas de Programação
18. Interface Homem Máquina

E por aí vai, são muitas matérias não citei todas, ou seja, você não irá aprender formatar micros, se quiser aprender isto, aconselho procurar uma instituição como a Microlins ou Microcamp, que são conceitudas nestes cursos extracurriculares.

O objetivo deste post, não é criticar quem já começou e parou o curso, mas sim alertar, afinal se você começar estudar e parar, estará perdendo o seu tempo e também o seu dinheiro!