terça-feira, 16 de agosto de 2011

O modelo OSI

O modelo OSI da ISO

Objetivo: Uniformizar e universalizar os padrões e modelos adotados pelos protocolos de rede de modo a permitir a interconexão de sistemas abertos.
 
Definição: Modelo abstrato que relaciona funções e serviços de comunicação em sete camadas.
 
OSI: Open Systems Interconnection.

ISO: International Standards Organization.

1. As redes industriais seguem as mesmas premissas de qualquer sistema de interconexão de dispositivos microprocessados.
2. Há algumas décadas a interligação dos primeiros computadores, sejam eles de uso corporativo ou industrial, levaram ao desenvolvimento de soluções proprietárias, isto é, somente o fabricante detinha o conhecimento da tecnologia envolvida. Isso dificultava, e muitas vezes, impossibilitava a interconexão de dispositivos de fabricantes diferentes.
3. Para facilitar a interconexão de sistemas de diferentes fornecedores, a ISO (International Standards Organization) desenvolveu um modelo de referência chamado de modelo OSI publicado em 1978 e revisado em 1984.
4. Muitos protocolos hoje usados não seguem fielmente este modelo ou foram criados antes dele (ex.: TCP/IP), mas com ele é mais fácil comparar e classificar os diversos protocolos existentes.

As 7 Camadas do Modelo OSI

Cada camada oferece serviços à camada superior. Uma camada N “conversa” com seu par no outro lado, através do protocolo da camada N.

1. Cada camada do modelo lida com uma porção diferente do processo de comunicação.
2. Ao separar a comunicação em camadas, o modelo OSI simplificou o modo como o hardware e software de rede trabalham juntos, assim como facilitou o diagnóstico e resolução de problemas fornecendo um método específico de como os componentes envolvidos devem funcionar.
3. A camada de aplicação disponibiliza um conjunto de interfaces para as aplicações usarem e terem acesso aos serviços de rede.
4. A camada de apresentação converte dados em um formato genérico para transmissão. Nas mensagens recebidas ele converte os dados para um formato que a aplicação de destino possa entender.
5. A camada de sessão habilita duas aplicações manterem comunicações ativas simultaneamente através da rede.
6. A camada de transporte gerencia a transmissão de dados através da rede.
7. A camada de rede lida com o endereçamento das mensagens e a sua rota de entrega, assim como traduz os endereços de rede em seus endereços físicos.
8. A camada de enlace envia quadros de dados da camada de rede para a camada física.
9. A camada física converte bits em sinais elétricos para as mensagens enviadas e sinais elétricos em bits para mensagens recebidas.

Encapsulamento de Dados

1. Na transmissão de um dado, cada camada recebe as informações passadas pela camada superior, acrescenta informações pelas quais ela seja responsável e passa os dados para a camada imediatamente inferior. Isto é chamado de Encapsulamento.
2. Na recepção de um dado, a situação se reverte, uma camada ao receber os dados retira a sua parte e envia o restante para a camada superior, permitindo que os dados sejam recuperados.
3. A informação manipulada pelos protocolos de cada camada é chamada de PDU (Protocol Data Unit) ou Unidade de Dados do Protocolo ou simplesmente PACOTE.
4. Na camada de enlace o pacote é chamado de frame ou QUADRO.
5. Na camada de rede a PDU é chamada de DATAGRAMA.
6. Na camada de transporte a PDU é chamada de SEGMENTO.
7. Uma camada de protocolo pode ser implementada em software e hardware ou em uma combinação dos dois.

Protocolos da Camada Física

Trata da transmissão de bits (PDU) brutos através de um canal de comunicação. Estabelece os níveis de tensão, duração dos bits, modo de operação, forma de início e fim da transmissão, pinagem e tipo de cabo.
Exemplo: EIA RS 232, RS 485, Ethernet

Protocolos da Camada de Enlace

Transmissão de Quadros (PDU). Converte um canal de transmissão físico não confiável em um canal confiável. Enquadramento. Endereçamento Físico. Detecção e recuperação de erros. Controle de fluxo. Possui uma subcamada de acesso ao meio, para controle de um canal de comunicação compartilhado.
Exemplos: Ethernet, PPP, CSMA/CD e Token Ring.

1. Esta camada estabelece os protocolos ou regras para transferir dados através da camada física da rede.
2. Ela forma quadros de bits de acordo com regras específicas e garante uma seqüência adequada para transmissão dos dados.

Protocolos da Camada de Rede

Transmissão de Datagramas (PDU). Endereçamento. Roteamento. Controle e prevenção de congestionamento. Determinação do melhor caminho de um pacote através de sub-redes. Não necessária em enlaces diretos.
Exemplo: Protocolos IP (Internet Protocol), DDP (Delivery Datagram Protocol), IPX (Internetwork
Packet Exchange), NetBEUI.

1. Os protocolos desta camada tem dois componentes principais: O endereçamento de redes e o roteamento entre elas.
2. Nesta camada temos também a tradução dos endereços lógicos em seus endereços físicos equivalentes.
3. Os protocolos desta camada também decidem como será roteada a comunicação entre dois computadores.
4. Para decidir como os pacotes de dados irão de um ponto a outro, os protocolos levam em consideração fatores como qualidade de serviço, rotas alternativas e prioridades de entrega.
5. Na maioria das redes industriais, esta camada não está presente, pois estas redes foram concebidas como redes locais sem segmentação e, portanto não há necessidade de definição de rotas de entrega como observado em redes corporativas.

Protocolos da Camada de Transporte

Promove a transferência de dados entre a máquina de origem e de destino, de forma confiável e econômica, independente da rede física. Efetua a divisão da informação em segmentos (PDU) de dados. Multiplexação a nível de aplicações. Tratamento de retardo e espera de pacotes de dados. Controle da retransmissão de dados.
Exemplos: Protocolos TCP, UDP, ATP e SPX.

1. Os protocolos da camada de transporte gerenciam o fluxo de dados entre os dispositivos em rede.
2. Estes protocolos segmentam longas cadeias de dados em segmentos com tamanhos adequados para transmissão.
3. Podem também efetuar uma verificação de erro para garantir a entrega dos segmentos de uma forma íntegra, efetuando um reconhecimento de sucesso nas transmissões e solicitando o reenvio de segmentos perdidos.
4. São responsáveis pelo re-sequenciamento dos segmentos recebidos para remontar a cadeia de dados no formato original antes da transmissão.
5. ATP (AppleTalk Transaction Protocol).
6. SPX (Sequenced Packet Exchange): Redes Novell.
7. TCP (Transmission Control Protocol).
8. UDP (User Datagram Protocol).

Protocolos da Camada de Sessão

Permite estabelecer conexões de diferentes aplicações entre máquinas. Sincronismo. Tipo de comunicação (Half-Duplex ou Full-Duplex). Marcação dos dados transmitidos.

1. Esta camada não é evidenciada na pilha de protocolos TCP/IP, tendo as suas funções absorvidas pela camada de transporte.

Protocolos da Camada de Apresentação

A informação recebida pela camada de aplicação é traduzida usando uma determinada codificação. Código ASCII ou EBCDIC. Inclui os protocolos de compressão de dados e criptografia.

1. Esta camada não é evidenciada na pilha de protocolos TCP/IP.

Protocolos da Camada de Aplicação

Efetua a interface entre o protocolo de comunicação e o aplicativo que pediu ou receberá a informação
através da rede. Disponibiliza serviços para as aplicações dos usuários. Transferência de arquivos. Serviço de correio. Emulação de terminais. Gerenciamento de redes. Banco de dados.
Exemplos: Protocolos HTTP, FTP, SMTP, SNMP, DNS.

1. Protocolo HTTP (Hiper Text Transfer Protocol) define as regras para trocas de páginas web entre um servidor web e um navegador cliente. É considerado um dos motivos do sucesso da WEB pela maneira amigável de transferência de arquivos através de hiperlinks.
2. Protocolo FTP (File Transfer Protocol) define regras para transferência de arquivos binários ou texto entre máquinas.
3. Protocolo SMTP (Send Mail Transfer Protocol) define regras para envio de mensagens eletrônicas (e-mail). O protocolo não se preocupa com o conteúdo e o formato das mensagems transferidas. Todavia, as mensagens devem estar no padrão ASCII, e o SMTP adiciona uma informação de controle, indicando o caminho pelo qual a mensagem foi enviada.
4. Protocolo SNMP (Simple Network Management Protocol) define regras para gerenciamento e monitoramento remoto de dispositivos de rede.
5. Protocolo DNS (Domain Name Service) efetua a conversão dos URLs (Uniform Resource Locator) em endereços IP. Por exemplo converte “http://www.cefetrn.br” em “200.137.1.15”.

sexta-feira, 12 de agosto de 2011

Princípios de sistemas operacionais

Um sistema operacional é uma camada de software que atua entre o hardware e os diversos aplicativos existentes em um sistema computacional, executando diversas atividades, de modo a garantir a disponibilidade de recursos entre todos os programas em execução.

TIPOS DE SISTEMAS OPERACIONAIS

- Em relação a arquitetura do sistema operacional:
Sistema Monolítico: o kernel consiste em um único processo executando numa memória protegida (espaço do kernel). Ex: Windows, Linux, FreeBsD;
Sistema em Camadas: funções do kernel irão executar em camadas distintas de acordo com o nível de privilégio. Ex. Multics;
Modelo cliente/servidor ou microkernel: o kernel consiste apenas no essencial (comunicação e gerenciamento de processos) e funções como sistemas de arquivos e gereciamento de memória são executadas no espaço do usuário como serviço: as aplicações (programas) são os clientes. Ex: GNU Hurd, Mach;
Monitor de máquinas virtuais: fornece uma abstração do hardware para vários sistemas operacionais. Ex: VM/370, VMware, Xen.

- Quanto a capacidade de processamento, pode usar as seguintes classificações:
Monotarefa: pode-se executar apenas um processo por vez. Ex: DOS;
Multitarefa: além do próprio sistema operacional, vários processos de utilizador (tarefas) estão carregados em memória, sendo que um pode estar ocupando o processador e outros ficam enfileirados, aguardando a sua vez. O compartilhamento de tempo no processador é distribuído de modo que o usuário tenha a impressão de que vários processos estão sendo executados simultaneamente. Ex: Windows, Linux, FreeBSD.

- Multiprocessamento ou multiprogramação: o SO pode distribuir as tarefas entre vários processadores. Alguns autores utilizam o termo multiprocessamento como se fosse multitarefa.

- Sistemas operacionais para computadores de pequenos e grandes dividem-se em quatro categorias, que se diferenciam pelo tempo de resposta e pela forma de entrada de dados no sistema: em lotes (batch), interativa, em tempo real e sistemas híbridos;

- Os sistemas em lotes (batch): existem desde o tempo dos primeiros computadores, os quais trabalhavam com cartões perfurados ou fita magnética para a entrada de dados. Os sistemas em lotes de hoje não trabalham mais com cartões perfurados ou com fitas magnéticas, mas as tarefas ainda são processadas em série, sem interação com o usuário;

- Os sistemas interativos: também conhecidos como  sistemas de tempo compartilhado, produzem um tempo de resposta mais rápido do que os sistemas em lotes, mas são mais lentos do que os sistemas em tempo real. Foram criados para atender a necessidade do usuário, que necessitava de tempo de resposta mais rápido na depuração dos programas. O sistema operacional exigiu a criação de programas de tempo compartilhado, permitindo o usuário interagir diretamente com o sistema de computação;

- Os sistemas em tempo real: os mais rápidos de todos, são utilizados em ambientes onde o tempo é um fator crítico: vôos espaciais, controle de tráfego aéreo etc; 

- Os sistemas híbridos: são uma combinação entre os sistemas em lotes e os sistemas interativos. Executa os programas em lotes em segundo plano. Um sistema híbrido se beneficia do tempo livre entre demandas de processamento para executar programas que não precisam da interferência do operador.

BASE DO SISTEMA OPERACIONAL

- Base que forma o sistema operacional:
Gerenciador de memória: responsável pela alocação de memória;
Gerenciador de unidade de processamento: responsável pela alocação de recursos da CPU;
Gerenciador de dispositivos: Sua tarefa é escolher a forma mais adequada para alocação de todos os dispositivos;
Gerenciador de arquivos: monitora todos os arquivos no sistema. Faz cumprir as restrições de acesso a cada arquivo.

INFORMAÇÃO ADICIONAL

- Módulos do sistema operacional residentes em disco, que são carregados para a memória somente quando são necessários, chamam-se módulos transientes.

GERENCIADOR DE MEMÓRIA

- O gerenciador de memória trabalha com tabelas geradas para controlar os programas em execução. Existem 3 ou 4 tabelas, dependendo do tipo de gerenciamento adotado;
- A memória é dividida logicamente em tamanhos iguais (páginas de memória) ou diferentes (segmentos de memória), para acomodar os diversos programas residentes em memória.

- Esquemas de gerenciamento de memória:
Alocação de memória com paginação;
Alocação de memória com paginação sob demanda;
Alocação de memória com segmentação;
Alocação de memória com segmentação / paginação sob demanda.

ALOCAÇÃO DE MEMÓRIA COM PAGINAÇÃO

- Divisão da memória em páginas de igual tamanho;
- A paginação funciona muito bem quando as páginas, os setores e os quadros de páginas possuem o mesmo tamanho;
- Não faz uso da memória virtual;
- Gerenciador de memória prepara o programa da seguinte forma: determina o número de páginas do programa; localiza quadro de páginas suficientes na memória principal; carrega todas as páginas do programa nesses quadros de memória;
- As páginas de um programa, quando forem carregadas para a memória, não precisam ser carregadas em blocos contíguos;
- Dois programas não podem usar a mesma página de memória ao mesmo tempo, porque causaria a fragmentação interna da memória;
- Esse método requer que o programa inteiro seja alojado na memória na hora da execução.

ALOCAÇÃO DE MEMÓRIA COM PAGINAÇÃO SOB DEMANDA

- O gerenciador de memória trabalha com tabelas para monitorar o uso dos quadros de memória. Essencialmente três tabelas executam essa função: a Tabela de Programas (TP), a Tabela de Mapa de Páginas (TMP) e a Tabela de Mapa de Memória (TMM). Todas residem na parte da memória principal;
- Cada programa possui sua própria TMP, contendo informações como número da página, endereço de memória do quadro da página correspondente etc;
- A TMM possui uma entrada para cada quadro de página, no qual está a localização e o status (livre/ocupada);
- A partir desse gerenciamento se começou a trabalhar com memória virtual;
- A memória continua sendo dividida em tamanhos iguais (páginas).

ALOCAÇÃO DE MEMÓRIA SOB DEMANDA

- Conjunto de trabalho: é o conjunto de páginas residentes em memória que podem ser acessadas diretamente sem implicar erro de página. Essa técnica é utilizada para evitar o thrashing (troca excessiva de páginas entre a memória RAM e a virtual). 

- Conceitos e critérios para substituição de páginas:
A política que rege a escolha da página que deve sair da memória, ou seja, o critério de substituição das páginas, é crucial para a eficiência do sistema;
Duas técnicas mais conhecidas são: “primeiro a entrar, primeiro a sair (FIFO, ou first-in first-out)” e “página usada menos recentemente (UMR)”;
Nas duas técnicas tem que se observar se não houve alteração dos dados antes de retirar da memória principal;
O algoritmo FIFO consulta apenas os bits de status e de página modificada antes de fazer as substituições, mas o algoritmo UMR consulta os três bits.

ALOCAÇÃO DE MEMÓRIA COM SEGMENTAÇÃO

- O conceito de segmentação baseia-se em uma prática comum entre os programadores: a estruturação dos seus programas em módulos (agrupamento lógico de códigos). Segundo esse esquema cada programa é dividido em vários segmentos de tamanhos diferentes;
- Este esquema difere fundamentalmente da paginação, onde um programa é dividido em páginas de igual tamanho que muitas vezes contém instruções de mais de um módulo de programa;
- Uma outra diferença importante é que a memória não é mais dividida em quadros de página, pois o tamanho de cada segmento varia, ou seja, a memória é alocada de maneira dinâmica;
- Esse esquema reduz a segmentação da memória (aproveita melhor a memória).

- Monitoramento da memória:
Quando um programa é compilado ou montado, os segmentos são definidos de acordo com os módulos estruturais do programa. Cada segmento é numerado e uma Tabela de Mapa de Segmentos (TMS) é gerada para cada programa;
A TMS inclui os números de segmentos, o tamanho, os direitos de acesso, o status e, quando um segmento é carregado em memória, o endereço de memória.

- O gerenciador de memória monitora os segmentos em memória através de 3 tabelas:
Tabela de Programas (TP): exibe todos os programas em processameto (uma para todo o sistema);
Tabela de Mapa de Segmentos (TMS): exibe detalhes sobre cada segmento (uma para cada programa);
Tabela de Mapa de Memória (TMM): monitora a alocação de memória principal (uma para todo o sistema).

ALOCAÇÃO DE MEMÓRIA COM SEGMENTAÇÃO / PAGINAÇÃO SOB DEMANDA

- É uma combinação entre a segmentação e a paginação sob demanda que alia os benefícios lógicos da segmentação aos benefícios físicos da paginação;
- Os segmentos são divididos em páginas de igual tamanho, menores do que a maioria dos segmentos e mais facilmente manipuladas; Assim sendo, muitos dos problemas da segmentação (compactação, fragmentação externa e necessidade de armazenagem secundária) são eliminados, pois as páginas são de tamanho fixo;
- A maior desvantagem desse esquema são a sobrecarga gerada pelas tabelas adicionais.

- Monitoramento da memória:
Tabela de Programa (TP): exibe todos os programas em processamento (uma para todo o sistema);
Tabela de Mapa de Segmentos (TMS): exibe detalhes sobre cada segmento (uma para cada programa);
Tabela de Mapa de Páginas (TMP): exibe detalhes sobre cada página (uma para cada segmento);
Tabela de Mapa de Memória (TMM): monitora a alocação de quadros de página na memória principal (uma para todo o sistema).

Ligue a vontade para qualquer celular ou fixo em todo o Brasil, EUA e Canadá, através do 99TelexFREE. Teste nosso serviço por 1 hora gratuitamente: http://www.telexfree.com/ad/marcelmesmo 

terça-feira, 9 de agosto de 2011

Aritmética computacional

As palavras de um computador são compostas por bits e podem representar números armazenados na memória. Estes números podem ter diferentes significados, como inteiros ou reais, serem positivos ou negativos. A manipulação dos números inclui operações de soma, subtração, multiplicação e divisão.

O objetivo deste texto é mostrar como o hardware implementa a representação dos números, os algoritmos adequados para operações aritméticas e sua implicação no conjunto de instruções da máquina.

Números com Sinal e Números sem Sinal

Os números podem ser representados em qualquer base. Porém, a base 2 é a mais adequada para os computadores porque tratam com somente dois valores: 0 e 1. Estes valores são implementados facilmente através de circuitos elétricos.

Da aritmética temos que, em qualquer base, o valor do i-ésimo dígito d de um número é dado por: d x basei, onde i começa em 0 e cresce da direita para a esquerda, de acordo com a posição ocupada pelo dígito. Por exemplo, o número 1011 na base dois é igual a:

(1x23) + (0x22) + (1x21) + (1x20) = (1x8) + (0x4) + (1x2) + (1x0) = 8 + 0 + 2 + 1 = 11

Portanto, os bits são numerados como 0,1,2,3,... da direita para a esquerda em uma palavra. Utilizamos a expressão bit menos significativo para designar o bit 0, e a expressão bit mais significativo para designar o bit de mais alta ordem, como por exemplo o bit 31 numa palavra de 32 bits.

Como o tamanho de uma palavra manipulada por um computador tem tamanho limitado, os números que podem ser representados também tem tamanho limitado. Se o tamanho de uma palavra é igual a n bits, o maior número possível de ser representado é igual a 2n. Se ao realizarmos operações sobre os números, elas gerarem resultados que não podem ser representados na quantidade de bits reservados ocorre o que denominados de overflow (números muito grandes) ou underflow (números muito pequenos). Tanto o overflow quanto o underflow geram exceções e são tratados pelo sistema operacional.

Os computadores manipulam tanto números positivos quanto números negativos, que são representados em complemento a 2. Nesta convenção os números que possuem zeros à esquerda são considerados positivos e os números com uns à esquerda são considerados negativos. O complemento a 2 é obtido invertendo-se o número binário e depois somando 1 a este valor. Porém, uma regra simples para transformar um número binário em sua representação em complemento a 2 é a seguinte:

1) copie da direita para a esquerda todos os bits até encontrar o primeiro bit 1 inclusive e
2) inverta todos os demais bits.

A figura abaixo ilustra um exemplo da obtenção de representação em complemento a 2 de um número binário com 4 dígitos.
Representação em complemento a 2

A respresentação em complento a 2 tem a vantagem de representar números negativos sempre com o bit 1 em sua posição mais significativa. Assim, o hardware só precisa testar este bit para verificar se o número é positivo ou negativo. Este bit é conhecido como bit de sinal. Na figura abaixo está representada uma sequência de números binários (8 dígitos) representados em complemento 2.
Sequência de números binários representados em complemento a 2

Conversão entre Diferentes Bases

As bases octal e hexadecimal também são muito úteis em computação. A base octal é representada com 8 dígitos que variam entre 0 e 7. A base hexadecimal é composta por dígitos e letras da seguinte forma: 0 a 9 e as letras a, b, c, d, e e f. Na figura abaixo ilustramos como realizar a mudaça da base binária para as demais bases de forma simples. Lembre-se de que precisamos de 3 ou 4 dígitos binários para a mudança de base octal e hexadecimal, respectivamente.
Mudança de base

Adição e Subtração

Numa soma os bits são somados um a um da direita para a esquerda, com os carries sendo passados para o próximo bit à esquerda. A operação de subtração usa a adição. O subtraendo é simplesmente negado antes de ser somado ao minuendo. Lembre-se que a máquina trata com números representados em complemento a 2. A figura abaixo mostra as operações de soma (6+7) e subtração (7-6) bit a bit entre dois números representados com 4 dígitos binários.
Operações de soma e subtração (complemento a 2) com representção binária
Como citado anteriormente, tanto a soma como a subtração podem gerar overflow ou underflow, se o resultado obtido não puder ser representado pela quantidade de bits que formam uma palavra. Se somarmos ou subtrairmos dois números com sinais contrários, nunca ocorrerá overflow ou underflow. Isto porque operandos com sinais contrários nunca podem ser maior do que qualquer dos operandos.

O overflow ocorre quando somamos dois operandos positivos e obtemos um resultado negativo, ou vice-versa. Isto significa que utilizamos o bit de sinal, gerando um carry, para armazenar um valor pertencente ao resultado da operação. Raciocínio semelhante é realizado para detectar a ocorrência do underflow numa subtração. Neste caso, o bit de sinal também é usado para armazenar um valor pertencente ao resultado da operação.

Os projetistas de um sistema devem decidir onde tratar a ocorrência de overflow ou de underflow em operações aritméticas. Elas podem ser tratadas tanto por hardware quanto por software. Pode existir a detecção por hardware que gera uma exceção, e que depois é tratada por software.

Operações Lógicas

Os computadores manipulam palavras, mas é muito útil, também, manipular campos de bits dentro de uma palavra ou mesmo bits individuais. O exame de caracteres individuais (8 bits) dentro de uma palavra é um bom exemplo dessa necessidade. Assim, as arquiteturas de conjuntos de intruções incluem instruções para manipulação de bits.

Um dos tipos de instrução utilizados são as de deslocamento de bits. As instruções podem deslocar bits tanto à direita quanto à esquerda. Todos os bits são movidos para o lado determinado e os bits que ficam vazios são preenchidos com zeros. Outras instruções lógicas muito úteis que são implementadas na unidade lógica e aritmética de um processador são as operações NOT, AND, OR e XOR. A figura abaixo mostra as operações lógicas, bit a bit, de deslocamento à direita, à esquerda, NOT, AND, OR e XOR.
Operações lógicas

Construção de uma Unidade Lógica Aritmética

A unidade lógica aritmética (ALU – Arithmetic Logic Unit) é o dispositivo que realiza as operações lógicas e aritméticas, definidas pelo conjunto de instruções, dentro do processador.

A ALU é construída basicamente por quatro blocos básicos de hardware: portas AND, portas OR, NOT (inversores) e multiplexadores.

As implementações de operações lógicas são as mais simples de serem realizadas, pois elas são mapeadas diretamente com componentes do hardware.

A próxima função a ser incluída é a adição. Supondo que temos apenas um bit para ser somado, necessitamos de um circuito com duas entradas para os operandos, uma saída para a soma resultante, uma entrada relativa ao carry in e uma saída para o carry out. A figura abaixo mostra este somador.
Somador de um bit

Podemos especificar as saídas soma e carry out através de equações lógicas, que podem ser implementadas a partir dos blocos de hardware mencionados anteriormente. A equação lógica para gerar o bit carry out é dada por:

CarryOut = (b.CarryIn) + (a.CarryIn) + (a.b)

E, a equação lógica para gerar o bit soma é dada por:

Soma = (a . b . CarryIn) + (a . b . CarryIn) + (a . b . CarryIn) + (a . b . CarryIn)

Para completar o projeto de uma ALU de n bits podemos conectar n somadores de um bit. Os carry outs gerados pelos bits menos significativos da operação podem ser propagados por toda a extensão do somador, gerando um carry out no bit mais significativo do resultado da operação. Este somador é denominado somador de carry propagado.

A operação de subtração pode ser realizada somando-se o minuendo com a negação do subtraendo. Este efeito é realizado acrescentando uma entrada complementada de b ao somador e ativando o carry in do bit menos significativo para um. O somador então calcula a + b + 1. Ao escolhermos a versão invertida de b obtemos:

a + b + 1 = a + ( b + 1) = a + (-b) = a - b

A simplicidade do projeto do hardware de um somador para números de complemento a 2 demonstra porque esta representação tornou-se um padrão para operações aritméticas inteiras em computadores.

O problema com o somador de carry propagado está relacionado a velocidade de propagação do carry, que é realizada sequencialmente. Num projeto de hardware a velocidade é um fator crítico. Para solucionar este problema existem diversos esquemas para antecipar o carry. Porém, nestes esquemas são utilizadas mais portas lógicas, o que provoca um aumento no custo.

Um dos esquema para antecipar o carry é denominado carry lookahead. Os somadores que utilizam o esquema de carry lookahead baseiam sua implementação em vários níveis de abstração. Utilizando a abreviação ci para representar o i-ésimo bit de carry, podemos escrever a equação do carry como:

ci = (bi . ci) + (ai . ci) + (ai . bi) = (ai . bi) + (ai + bi) . ci

Os termos (ai . bi) e (ai + bi) são tradicionamente chamados de gerador (gi) e propagador (pi), respectivamente. Usando estas relações para definir ci + 1, obtemos:

ci + 1 = gi + pi . ci

Qualquer equação lógica pode ser implementada com uma lógica de dois níveis. Mesmo esta formulação mais simplificada pode gerar equações muito grandes e, portanto levar a circuitos lógicos relativamente grandes e caros, dependendo do número de bits a serem somados.

Multiplicação

Para realizar a multiplicação são necessários dois operandos, um multiplicando e um multiplicador, para gerar um operando produto. O algoritmo da multiplicação diz que os dígitos do multiplicando devem ser multiplicados pelos dígitos do multiplicador um de cada vez, da direita para a esquerda, deslocando os produtos intermedários um dígito à esquerda em relação ao imediatamente anterior.

Uma observação importante é que o número de bits do produto final (n+m) é maior do que o número de bits do multiplicando (n) ou do multiplicador (m). Além disso, a multiplicação também precisa tratar a ocorrência de overflow.

Considerando os dígitos binários 0 e 1, temos apenas duas possibilidades de escolha, a cada passo da multiplicação:

1. coloque uma cópia do multiplicando (multiplicando x 1) no lugar apropriado, se o dígito do multiplicador for igual a 1, ou

2. coloque 0 (multiplicando x 0) no lugar apropriado, se o dígito do multiplicador for igual a 0.

Assim, é necessário desenvolver um algoritmo em hardware que seja eficiente para realizar a multiplicação.

Um método elegante de multiplicar números com sinal recebeu o nome de algoritmo de Booth. Ele foi elaborado a partir da constatação de que com a capacidade de somar e de subtrair números existem várias maneiras de se calcular um produto. Por exemplo, podemos substrituir um string de uns no multiplicador por uma subtração quando encontramos o primeiro 1, e por uma soma ao encontrarmos o último 1 do string.

Booth buscou atingir maior velocidade de processamento utilizando operações de deslocamento, que ainda hoje são operações mais rápidas do que operações de soma. Baseado nesta observação, se desejarmos maior velocidade na multiplicação de números inteiros por uma potência de 2, basta que utilizemos operações de deslocamento indicando a quantidade de deslocamentos igual ao expoente.

A grande vantagem do algoritmo de Booth é tratar com facilidade os números com sinal. O raciocínio de Booth foi classificar os grupos de bits como início, meio e fim de um string de uns. Naturalmente um string de zeros não precisa ser considerado.

Algoritmo da multiplicação

Este algoritmo precisa apenas de dois passos principais: o teste do produto e o seu deslocamento; pois os registradores Produto e Multiplicador podem ser combinados em um só. O algoritmo começa com o Multiplicador na metade à direta do registrador Produto, e 0 na metade à esquerda.

1. Testa se Produto é igual a 0 ou 1.

2. Produto = 0, passa ao item 4.

3. Produto = 1, soma o Multiplicando à metade esquerda do Produto e coloca o resultado na metade à esquerda do resgistrador Produto.

4. Desloca o registrador Produto 1 bit à direita.

5. Verifica se foram realizadas todas as repetições necessárias de acordo com o tamanho da palavra, se não volta ao item 1.

6. Fim.

Divisão

A divisão é a operação recíproca da multiplicação. Dentre as operações aritméticas é a que aparece menos frequentemente nos códigos dos programas.

No algoritmo da divisão são utilizados dois operandos, o dividendo e o divisor, e produzidos dois resultados o quociente e o resto. A relação entre os componentes da divisão pode ser expressa da seguinte forma:

dividendo = quociente x divisor + resto,

onde o resto é sempre menor que o divisor.

Às vezes, os programas usam a divisão simplesmente para obter o resto, ignorando o quociente. Além disso, é necessário que seja detectada a divisão por zero, que é matematicamente inválida.

Algoritmo da divisão

Da mesma forma que foram combinados registradores na multiplicação, também na divisão são combinados dois registradores, o Resto e o Quociente. O algoritmo começa com o Resto na metade à esquerda do registrador Resto, e o Quociente na metade à direita.

1. Desloca o registrador Resto 1 bit à esquerda.

2. Subtrai o registrador Divisor da metade à esquerda do registrador Resto e armazena o resultado na metade esquerda do registrador Resto.

3. Testa se Resto é menor do que 0.

4. Resto < 0, restaura valor original com Divisor + metade esquerda do Resto, armazenando na metade esquerda do registrador Resto e deslocando 1 bit à esquerda, inserindo 0 no novo bit menos signifiativo, passa ao item 6.

5. Resto ≥ 0, desloca o registrador Resto 1 bit à esquerda, inserindo 1 no novo bit mais à direita.

6. Verifica se foram realizadas todas as repetições necessárias de acordo com o tamanho da palavra, se não volta ao item 1.

7. Desloca a metade a esquerda do registrador Resto 1 bit à direita, Fim.

Ponto Flutuante

Assim como os números decimais podem ser representados em notação científica normalizada os números binários também podem. A aritmética computacional que manipula os números binários em notação científica normalizada é denominada de aritmética de ponto flutuante.

Os projetistas do hardware devem encontrar um compromisso entre a mantissa e o expoente dos números em ponto flutuante. A relação entre a mantissa e o expoente é expressa do seguinte modo: o aumento do número de bits reservados à mantissa aumenta a precisão do número, enquanto o aumento do número de bits reservados ao expoente aumenta o intervalo de variação dos números representados.

Deve ser observado que as interrupções relativas ao overflow e ao underflow também ocorrem na representação em ponto flutuante. Porém, neste caso, overflow e o underflow ocorrem quando o expoente é muito grande ou muito pequeno, respectivamente, para ser armazenado no espaço reservado a ele.

Outra questão que os projetistas devem decidir é se vão ser utilizados os mesmos registradores tanto para números inteiros quanto para números de ponto flutuante. A adoção de registradores diferentes aumenta ligeiramente o número de instruções necessárias a execução do programa. O impacto maior está na criação de um conjunto de instruções de transferência de dados para mover os dados entre os registradores de ponto flutuante e a memória. Os benefícios estão no fato de não precisar aumentar o tamanho do campo nas instruções para diferenciar os operandos e aumentar a banda passante dos registradores.

A partir de 1980 todos os computadores projetados adotam uma representação padrão para números em ponto flutuante denominada IEEE 754. A adoção deste padrão facilita a portabilidade de programas (precisão simples = 1 bit de sinal, 8 bits de expoente e 23 bits de mantissa + 1 implícito = 24, precisão dupla = 1 bit de sinal, 11 bits de expoente e 52 bits de mantissa + 1 implícito = 53).

A adição e a multiplicação com números de ponto flutuante, na sua essência, utilizam as operações inteiras correspondentes para operar as mantissas, mas é necessária uma manipulação extra nos expoentes e para a normalização do resultado.

Algoritmo da adição em ponto flutuante

1. Compare o expoente dos dois números. Desloque o menor número à direita até que seu expoente se iguale ao maior número.

2. Some as mantissas.

3. Normalize a soma, deslocando à direita e incrementando o expoente ou deslocando à esquerda e decrementando o expoente.

4. Teste se há overflow ou underflow.

5. Sim, gera exceção.

6. Não, arredonde a mantissa para o número de bits apropriado.

7. Testa se resultado está normalizado.

8. Sim, Fim.

9. Não, retorna ao passo 3.

Algoritmo da multiplicação em ponto flutuante

1. Soma os expoentes com peso dos dois números, subtraindo o valor do peso da soma para obter o novo expoente.

2. Multiplique as mantissas.

3. Normalize o produto se necessário, deslocando à direita e incrementando o expoente.

4. Teste se há overflow ou underflow.

5. Sim, gera exceção.

6. Não, arredonde a mantissa para o número de bits apropriado.

7. Teste se resultado está normalizado.

8. Não, retorna ao passo 3.

9. Sim, faça o sinal do produto positivo se ambos os sinais dos operandos originais são os mesmos, caso contrário o sinal é negativo, Fim.

Sistemas de numeração decimal e binário, e transformações de base

Sistemas de Numeração:
    • Os computadores são formados por circuitos digitais;
    • A informação e os dados são codificados em zeros e uns (linguagem máquina).

Representação dos Dados no Computador:
    • Dados:
        - Memória do computador e mídia de armazenamento;
        - Códigos convencionados e expressos em um sistema de numeração adequado.

Exemplos:
    • Códigos: ASCII, EBCDIC;
    • Sistemas de Numeracão: Decimal, Binário, Octal, Hexadecimal.

Decimal (base 10)
    • Algarismos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9;
    • Sistema usual no cotidiano humano (fora do computador);
    • Embora o Sistema Decimal possua somente dez símbolos, qualquer número acima disso pode ser expresso usando o sistema de peso por posicionamento, conforme o exemplo a seguir:
        3 x 10 ⁿ (seria 10 elevado a 3)3 + 5 x 10(2 elevado) + 4 x 10(1 elevado) + 6 x 100 3000 + 500 + 40 + 6 = 3546

Binário (base 2)
    • Algarismos: 0 e 1;
    • Sistema de numeração empregado em sistemas computacionais;
    • Os dígitos binários chamam-se bits.

Octal (base 8)
    • Algarismos: 0 , 1 , 2 , 3 , 4 ,5 , 6 e 7;
    • O Sistema Octal foi criado com o propósito de minimizar a representação de um número binário e facilitar a manipulação humana.

Hexadecimal (base 16)
    • Algarismos: números 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9 letras A, B, C, D, E e F;
    • Empregado na representação de números grandes, e.g. endereços de memória.

bit - unidade mínima de informação com que os sistemas informáticos trabalham.
Binary Digit - BIT(0 1)
UNIDADE MÍNIMA DE INFORMAÇÃO
1 byte - 8 bits
1 Kbyte - 1024 bytes
1 Mbyte - 1024 Kbytes
1 Gbyte - 1024 Mbytes
1 Tbyte - 1024 Gbytes

SISTEMAS DE NUMERAÇÃO
    • Sistema de numeração binária utiliza combinações dos dígitos 0 e 1;
    • Toda a informação que circula dentro de um sistema informático é organizada em grupos de bits;
    • Os mais frequentes são os múltiplos de 8 bits: 8, 16, 32, etc;
    • 1 Byte - 8 bits - 256 combinações possíveis;
    • No sistema binário (0 e 1), para determinar o número de combinações com n bits, basta calcular 2n.
Exemplos:
    • 1 bit – 2(elevado1)=2 combinações possíveis (0 e 1);
    • 2 bit – 2(elevado2)=4 combinações possíveis:
        00
        01
        10
        11
    • 3 bit – 2(elevado3)=8 combinações possíveis:
        000
        001
        010
        011
        100
        101
        110
        111
    • 4 bit – 2(elevado4)=16 combinações possíveis:
        0000
        0001
        0010
        0011
        0100
        0101
        0110
        ....
        1111

Sistema de numeração decimal
1998 = 1x1000 + 9x100 + 9x10 + 8x1 = 1x10(elevado3) + 9x10(elevado2 + 9x10(elevado1) + 8x100

Mudança de base
Ou decomposição, é conversão de um número escrito em uma determinada base para uma outra qualquer, exemplo:
    • Base 10: (0 1 2 3 4 5 6 7 8 9)
        5.386 = 5 x 1000 + 3 x 100 + 8 x 10 + 6 = 5 x 10³ + 3 x 10² + 8 x 10¹ + 6 x 10º;
    • Base 8: (0 1 2 3 4 5 6 7 8)
        1234( base8) = 1 x 8³ + 2 x 8² + 3 x 8¹ + 4 x 8º;
        1234( base8) = 1 x 512 + 2 x 64 + 3 x 8 + 4 x 1;
        1234( base8) = 512 + 128 + 24 + 4;
        1234( base8) = 668( base10) Transformação para a base 10.
    • Base 16: (0 1 2 3 4 5 6 7 8 9 A B C D E F)
        1A2F(base16) = 1 x 16³ + A x 16² + 2 x 16¹ + F x 16º = 1 x 16³ + 10 x 16² + 2 x 16¹ + 15 x 16º = 4096 + 2560 + 32 + 15 = 6693(base10)

SISTEMAS DE NUMERAÇÃO
DECIMAL 0 1 2 3 4 5 6 7 8 9
    00000
    10001
    20010
    30011
    40100
    50101
    60110
    70111
    81000
    91001

BINÁRIO
    01

Conversão de decimal para binário
Efetuar divisões sucessivas por 2 até se obter o quociente 1;
Agrupar o último quociente e todos os restos da divisão encontrados por ordem inversa.
   
Conversão de binário para decimal
• Começando a ler o número da direita para a esquerda:
    - Primeiro digito representa a potência de base 2 e expoente 0;
    - Segundo digito representa a potência de base 2 e expoente 1;
    - Terceiro digito representa a potência de base 2 e expoente 2;
    - nésimo digito representa a potência de base 2 e expoente n-1;
• Somar as multiplicações parciais efectuadas entre o dígito e a potência a ele atribuída.

Conversão Decimal para Octal
• Valor: 714 - divisão 8

Conversão Decimal Hexadecimal
• Valor Decimal: 714 – divisão 16

Conversão Binário para Octal
• 101011002
• Separa em 3 casas (dígitos)
    010    101    100 (verifica a tabela)
     2    5    4
    Valor octal = 254 (base8)

Conversão Octal para Binário – Agrupamento 3 dígitos
• Valor: 123(base8)
    1    2    3
    001    010    011
    Valor: 001010011(base2)

Conversão Octal para Hexadecimal
• 1057(base8)
    1    0    5    7
    001    000    101    111    -octal para binário -tabela
   
    0010    0010    1111    – agrupamento 4 dígitos
    2    2    f    = 22f(base16)

Hexadecimal para Octal
• 1F4
    1    F    4
    0001    1111    0100    (converter binario)
    000    111    110    100    (3 digitos octal)
    0    7    6    4    = 764(base8)

Tabela de conversão de números
Decimal    Binário    Octal    Hexadecimal 
0    0000     0     0
1     0001     1     1
2     0010     2     2
3     0011     3     3
4     0100     4     4
5     0101     5     5
6     0110     6     6
7     0111     7     7
8     1000     10      8
9     1001    11     9
10    1010      12     A
11     1011     13     B
12     1100     14     C
13     1101     15     D
14     1110     16    E
15    1111       17     F

Códigos de Representação de Dados
ASCII (American Standard Code for Interchange Information):
    • Mais usado em microcomputadores;
    • Representação de 256 caracteres diferentes (e.g.em um teclado alfanumérico) codificação em 8 bits;
    • 128 símbolos universais;
    • 128 símbolos adicionais, passíveis de variações de país para país.
    Exemplo: Letra A.
        Representação: 41(base16) = 0100 0001(base2)
EBCDIC (Extended Binary Code Decimal Interchange Code):
    • Mais usado em mainframes.
    Exemplo: Algarismo 1.
        Representação: F1(base16) = 1111 0001(base2).

Ligue a vontade para qualquer celular ou fixo em todo o Brasil, EUA e Canadá, através do 99TelexFREE. Teste nosso serviço por 1 hora gratuitamente: http://www.telexfree.com/ad/marcelmesmo 

segunda-feira, 1 de agosto de 2011

O conceito de conjunto

Capítulo de livro sobre conjuntos numéricos.

Clique aqui para acessar

Análise combinatória

Excelente apostila de Análise Combinatória do professor Gerson Henrique, do Departamento de Matemática da Associação Pré-UFMG, com foco em vestibulares. Também pode ser útil na preparação para provas de concursos públicos.

Clique aqui para acessá-la

Raciocínio numérico (matemático e sequencial)

Definição: É a capacidade de compreender problemas que utilizam operações que envolvam números, bem como o domínio das operações aritméticas básicas. As questões relativas a raciocínio numérico são apresentadas sob a forma de sequência de números. Deve-se encontrar a lei de formação da sequência para dar continuidade a mesma.

Exemplos:

1) Escreva o próximo termo da sequência:
1 2 3 4 5 6 ?

A resposta é 7. Essa é a sequência dos números naturais.

2) Escreva o próximo termo da sequência:
2 4 6 8 10 12 14 ?

A resposta é 16. Essa é a sequência dos números pares.

3) Escreva o próximo termo da sequência:
1 2 4 8 16 32 ?

A resposta é 64. A lei de formação da sequência é dada pelo dobro do número anterior. Perceba que o segundo número é o dobro do primeiro, o terceiro é o dobro do segundo e assim por diante. Então o número seguinte é o dobro de 32, ou seja, 64.

4) Escreva o próximo termo da sequência:
0 1 4 9 25 36 ?

A resposta é 49. A lei de formação dessa sequência é a multiplicação do número por ele mesmo. Perceba:
0 x 0 = 0
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
Pode-se dizer também que a lei de formação é elevar o número ao quadrado. Aliás, elevar o número ao quadrado é o mesmo que multiplicá-lo por ele mesmo.

Ligue a vontade para qualquer celular ou fixo em todo o Brasil, EUA e Canadá, através do 99TelexFREE. Teste nosso serviço por 1 hora gratuitamente: http://www.telexfree.com/ad/marcelmesmo

quinta-feira, 28 de julho de 2011

Lógica de argumentação

Uma pequena apostila de Argumentação Lógica.

Clique aqui e acesse

Lógica Proposicional

Aula do professor Guilherme Esmeraldo, da UFPE, sobre Lógica Proposicional.

Clique aqui e acesse

sábado, 2 de julho de 2011

JEE e conceitos

Java EE (ou J2EE, ou Java 2 Enterprise Edition, ou em português Java Edição Empresarial) é uma plataforma de programação para servidores na linguagem de programação Java. A Plataforma Java(Enterprise Edition) difere-se da Plataforma Java Standard Edition (Java SE) pela adição de bibliotecas que fornecem funcionalidade para implementar software Java distribuído, tolerante a falhas e multi-camada, baseada amplamente em componentes modulares executando em um servidor de aplicações. Ela é voltada para aplicações multi-camadas, baseadas em componentes que são executados em um servidor de aplicações. A plataforma Java EE é considerada um padrão de desenvolvimento já que o fornecedor de software nesta plataforma deve seguir determinadas regras se quiser declarar os seus produtos como compatíveis com Java EE. Ela contém bibliotecas desenvolvidas para o acesso a base de dados, RPC, CORBA, etc. Devido a essas características a plataforma é utilizada principalmente para o desenvolvimento de aplicações corporativas.

A plataforma J2EE contém uma série de especificações, cada uma com funcionalidades distintas. Entre elas, tem-se:
  • JDBC (Java Database Connectivity), utilizado no acesso a bancos de dados;
  • Servlets, são utilizados para o desenvolvimento de aplicações WEB com conteúdo dinâmico. Ele contém uma API que abstrai e disponibiliza os recursos do servidor WEB de maneira simplificada para o programador.
  • JSP (Java Server Pages), uma especialização do servlet que permite que conteúdo dinâmico seja facilmente desenvolvido.
  • JTA (Java Transaction API), é uma API que padroniza o tratamento de transações dentro de uma aplicação Java.
  • EJBs (Enterprise Java Beans), utilizados no desenvolvimento de componentes de software. Eles permitem que o programador se concentre nas necessidades do negócio do cliente, enquanto questões de infra-estrutura, segurança, disponibilidade e escalabilidade são responsabilidade do servidor de aplicações.
  • JCA (Java Connector Architecture), é uma API que padroniza a ligação a aplicações legadas.
  • JPA (Java Persistence API), é uma API que padroniza o acesso a banco de dados através de mapeamento Objeto/Relacional dos Enterprise Java Beans.
Web service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis. Os Web services são componentes que permitem às aplicações enviar e receber dados em formato XML. Cada aplicação pode ter a sua própria “linguagem”, que é traduzida para uma linguagem universal, o formato XML.

SOA – arquitetura orientada a serviços, e é um estilo de arquitetura de software cujo princípio fundamental preconiza que as funcionalidades implementadas pelas aplicações devem ser disponibilizadas na forma de serviços. Freqüentemente estes serviços são organizados através de um “barramento de serviços” (enterprise service bus, em inglês) que disponibiliza interfaces, ou contratos, acessíveis através de web services ou outra forma de comunicação entre aplicações. A arquitetura SOA é baseada nos princípios da computação distribuída e utiliza o paradigma request/reply para estabelecer a comunicação entre os sistemas clientes e os sistemas que implementam os serviços.

SOAP (originado do acrônimo inglês Simple Object Access Protocol) é um protocolo para troca de informações estruturadas em uma plataforma descentralizada e distribuída, utilizando tecnologias baseadas em XML. Sua especificação define um framework que provê maneiras para se construir mensagens que podem trafegar através de diversos protocolos e que foi especificado de forma a ser independente de qualquer modelo de programação ou outra implementação específica. Por não se tratar de um protocolo de acesso a objetos, o acrônimo não é mais utilizado.

O termo Business Intelligence (BI), pode ser traduzido como Inteligência de negócios, refere-se ao processo de coleta, organização, análise, compartilhamento e monitoramento de informações que oferecem suporte a gestão de negócios.

Um data warehouse (ou armazém de dados, ou depósito de dados no Brasil) é um sistema de computação utilizado para armazenar informações relativas às atividades de uma organização em bancos de dados, de forma consolidada. O desenho da base de dados favorece os relatórios, a análise de grandes volumes de dados e a obtenção de informações estratégicas que podem facilitar a tomada de decisão.

Fluxo de Trabalho (em inglês: Workflow) é a seqüência de passos necessários para que se possa atingir a automação de processos de negócio, de acordo com um conjunto de regras definidas, envolvendo a noção de processos, permitindo que estes possam ser transmitidos de uma pessoa para outra de acordo com algumas regras.

Chamada Remota de Procedimento (ou RPC, acrônimo de Remote Procedure Call) é uma tecnologia de comunicação entre processos que permite a um programa de computador chamar um procedimento em outro espaço de endereçamento (geralmente em outro computador, conectado por uma rede). O programador não se preocupa com detalhes de implementação dessa interação remota: do ponto de vista do código, a chamada se assemelha a chamadas de procedimentos locais. RPC é uma tecnologia popular para a implementação do modelo cliente-servidor de computação distribuída. Uma chamada de procedimento remoto é iniciada pelo cliente enviando uma mensagem para um servidor remoto para executar um procedimento específico. Uma resposta é retornada ao cliente. Uma diferença importante entre chamadas de procedimento remotas e chamadas de procedimento locais é que, no primeiro caso, a chamada pode falhar por problemas da rede. Nesse caso, não há nem mesmo garantia de que o procedimento foi invocado. RMI = RPC para Java.

CORBA (abreviado de Common Object Request Broker Architecture) é a arquitetura padrão criada pelo Object Management Group para estabelecer e simplificar a troca de dados entre sistemas distribuídos heterogêneos. Em face da diversidade de hardware e software que encontramos atualmente, a CORBA atua de modo que os objetos (componentes dos softwares) possam se comunicar de forma transparente ao usuário, mesmo que para isso seja necessário interoperar com outro software, em outro sistema operacional e em outra ferramenta de desenvolvimento. CORBA é um dos modelos mais populares de objetos distribuídos, juntamente com o DCOM, formato proprietário da Microsoft.

DCOM (acrônimo para Distributed Component Object Model) é uma tecnologia proprietária da Microsoft para criação de componentes de software distribuídos em computadores interligados em rede. O DCOM é uma extensão do COM (também da Microsoft) para a comunicação entre objetos em sistemas distribuídos. A tecnologia foi substituída, na plataforma de desenvolvimento .NET, pela API .NET Remoting. O DCOM pode ser utilizado na construção de aplicações em três camadas, de forma a centralizar as regras de negócio e processos, obter escalabilidade e facilitar a manutenção.

Um servidor de aplicação ou em inglês, application server, é um software que disponibiliza um ambiente para a instalação e execução de certas aplicações. Os servidores de aplicação também são conhecidos como software de middleware. O objetivo do servidor de aplicações é disponibilizar uma plataforma que abstraia do desenvolvedor de software algumas das complexidades de um sistema computacional. No desenvolvimento de aplicações comerciais, por exemplo, o foco dos desenvolvedores deve ser a resolução de problemas relacionados ao negócio da empresa, e não de questões de infraestrutura da aplicação. O servidor de aplicações responde a algumas questões comuns à todas as aplicações, como segurança, garantia de disponibilidade, balanceamento de carga e tratamento de exceções.

FRAMEWORK é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica. Um framework pode atingir uma funcionalidade específica, por configuração, durante a programação de uma aplicação. Ao contrário das bibliotecas, é o framework quem dita o fluxo de controle da aplicação, chamado de Inversão de Controle. Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação.

Os padrões de projeto de software ou padrões de desenho de software, também muito conhecido pelo termo original em inglês: Design Patterns, descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências. Os padrões de projeto visam facilitar a reutilização de soluções de desenho – isto é, soluções na fase de projeto do software, sem considerar reutilização de código. Também acarretam um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de software.

JavaServer Pages (JSP) é uma tecnologia utilizada no desenvolvimento de aplicações para Web, similar às tecnologias Active Server Pages (ASP) da Microsoft ou PHP. Por ser baseada na linguagem de programação Java, tem a vantagem da portabilidade de plataforma, que permite a sua execução em diversos sistemas operacionais, como o Windows da Microsoft, Unix e Linux. Esta tecnologia permite ao desenvolvedor de páginas para Internet produzir aplicações que acessem o banco de dados, manipulem arquivos no formato texto, capturem informações a partir de formulários e captem informações sobre o visitante e sobre o servidor. Uma página criada com a tecnologia JSP, após instalada em um servidor de aplicação compatível com a tecnologia Java EE, é transformada em um Servlet. São exemplos de servidor compatível com a tecnologia JSP o Tomcat e o Glassfish.

Servlet é basicamente uma classe na linguagem de programação Java que dinamicamente processa requisições e respostas, proporcionando dessa maneira novos recursos aos servidores. A definição mais usada considera-os extensões de servidores. A Java Servlet API (no pacote javax.servlet) proporciona o desenvolvedor a adicionar conteúdo dinâmico em um servidor web usando a plataforma Java. Essa tecnologia disponibiliza ao programador da linguagem Java uma interface para o servidor web (ou servidor de aplicação), através de uma API. As aplicações baseadas no Servlet geram conteúdo dinâmico (normalmente HTML) e interagem com os clientes, utilizando o modelo request/response. Os servlets normalmente utilizam o protocolo HTTP, apesar de não serem restritos a ele. Um Servlet necessita de um container Web para ser executado.

Um Container, em programação orientada a objetos, é um objeto que contém outros objetos. Estes objetos podem ser incluídos ou removidos dinamicamente, em tempo de execução, diferentemente do que ocorre com uma composição onde este relacionamento é fixado em tempo de compilação. Container Java Enterprise Edition: Em Java EE, o container contém os componentes construídos como Servlets (container para aplicações Web) ou EJBs (container para componentes de negócio). Um exemplo de container para Web são o Tomcat e o Jetty. Quando uma aplicação web faz uma solicitação para um Servlet, o servidor não entrega a solicitação diretamente ao Servlet, mas sim para o container que contém o Servlet. O container gerencia o ciclo de vida, dá suporte ao multithread, segurança, e suporte para páginas JSP, no caso dos containers web.

EJB ou Enterprise JavaBeans é um dos principais componentes da plataforma J2EE (Java 2 Enterprise Edition). É um componente do tipo servidor que executa no container do servidor de aplicação. Os principais objectivos da tecnologia EJB são fornecer um rápido e simplificado desenvolvimento de aplicações Java baseado em componentes distribuídas, transacionais, seguras e portáveis.

Java Message Service, ou JMS, é uma API da linguagem Java para middleware orientado à mensagens. Através da API JMS duas ou mais aplicações podem se comunicar por mensagens.

Serviço de Autenticação e Autorização do Java (Java Authentication and Authorization Service), ou JAAS, é uma API que permite às aplicações escritas na plataforma J2EE usar serviços de controlo de autenticação e autorização sem necessidade de a eles (aos serviços) estarem fortemente dependentes.

Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que faz o envio de instruções SQL para qualquer banco de dados relacional; Api de baixo nível e base para api’s de alto nível; Amplia o que você pode fazer com Java; Possibilita o uso de bancos de dados já instalados; Para cada banco de dados há um driver JDBC que pode cair em quatro categorias.

Fonte: http://dookiers.wordpress.com/2010/11/19/jee-e-conceitos/