quinta-feira, 16 de julho de 2009

Aplicativos

Software aplicativo (ou aplicativo ou ainda aplicação) é um programa de computador que tem por objetivo o desempenho de tarefas de índole prática, em geral ligadas ao processamento de dados, como o trabalho em escritório ou empresarial. Tem como foco o usuário. A sua natureza é, portanto, diferente da de outros tipos de software, como sistemas operacionais e ferramentas a eles ligadas, jogos e outros softwares lúdicos, entre outros.


Classificação
Cálculo de estruturas, planejamento e controle de projetos, pesquisas operacionais, problemas de engenharia de software.
Automação industrial - ativação, programação e controle de máquinas e equipamentos, controle de processos, calibração.
Automação comercial - reserva de passagens, contas correntes, pontos de venda, caixas automáticos.
Apoio educacional - assistência a instruções, ensino auxiliado pelo computador.
Especiais e científicos - teleprocessamento, comunicações, militares, pesquisas espaciais, pesquisas meteorológicas.
Artístico - composição de imagens, sons, músicas, vídeos.
Entretenimento - execução de jogos, músicas.
CAD/CAM - Softwares específicos para simular e otimizar projetos de peças, engenharia, chapas de metal ou roupas.

Exemplos
Navegador web (Internet Explorer, Mozilla Firefox, Opera, etc.);
Correio eletrônico;
Bate-papo ou chat;
Aplicativos de comunicação e mensagens;
Aplicativos para desenvolvimentos de páginas web;
Aplicativos para telefonia e videoconferência;
Aplicativos CAD/CAM Solid/Works, AutoCAD, Rz CAD Textil, Audaces, Lectra, Gerber.

Sistema operacional


Um sistema sistema operacional é um programa ou um conjunto de programas cuja função é servir de interface entre um computador e o usuário.
Segundo alguns autores (Silberschatz et al, 2005; Stallings, 2004; Tanenbaum, 1999), existem dois modos distintos de conceituar um sistema operacional:
pela perspectiva do usuário ou programador (visão top-down): é uma abstração do hardware, fazendo o papel de intermediário entre o aplicativo (programa) e os componentes físicos do computador (hardware); ou
numa visão bottom-up, de baixo para cima: é um gerenciador de recursos, i.e., controla quais aplicações (processos) podem ser executadas, quando, que recursos (memória, disco, periféricos) podem ser utilizados.
A sigla usual para designar esta classe de programas é SO (em português) ou OS (do inglês Operating System).


Funcionamento

Um sistema operacional possui as seguintes funções:
gerenciamento de processos;
gerenciamento de memória;
sistema de arquivos;
entrada e saída de dados.

Gerenciamento de processos

O sistema operacional multitarefa é preparado para dar ao usuário a ilusão que o número de processos em execução simultânea no computador é maior que o número de processadores instalados. Cada processo recebe uma fatia do tempo e a alternância entre vários processos é tão rápida que o usuário pensa que sua execução é simultânea.
São utilizados algoritmos para determinar qual processo será executado em determinado momento e por quanto tempo.
Os processos podem comunicar-se, isto é conhecido como IPC (Inter-Process Communication). Os mecanismos geralmente utilizados são:
sinais,
pipes,
named pipes,
memória compartilhada,
soquetes (sockets),
semáforos,
trocas de mensagens.
O sistema operacional, normalmente, deve possibilitar o multiprocessamento (SMP ou NUMA). Neste caso, processos diferentes e threads podem ser executados em diferentes processadores. Para essa tarefa, ele deve ser reentrante e interrompível, o que significa que pode ser interrompido no meio da execução de uma tarefa.


Gerenciamento de memória

O sistema operacional tem acesso completo à memória do sistema e deve permitir que os processos dos usuários tenham acesso seguro à memória quando o requisitam.
Vários sistemas operacionais usam memória virtual, que possui 3 funções básicas:
assegurar que cada processo tenha seu próprio espaço de endereçamento, começando em zero, para evitar ou resolver o problema de relocação (Tanenbaum, 1999);
prover proteção da memória para impedir que um processo utilize um endereço de memória que não lhe pertença;
possibilitar que uma aplicação utilize mais memória do que a fisicamente existente.

Sistema de arquivos

A memória principal do computador é volátil, e seu tamanho é limitado pelo custo do hardware. Assim, os usuários necessitam de algum método para armazenar e recuperar informações de modo permanente.
Um arquivo é um conjunto de bytes, normalmente armazenado em um dispositivo periférico não volátil (p.ex., disco), que pode ser lido e gravado por um ou mais processos.
O sistema de arquivos é a estrutura que permite o gerenciamento de arquivos -- criação, destruição, leitura, gravação, controle de acesso, etc.


Interface de uso

Os sistemas operacionais fornecem abstração de hardware para que o computador possa se tornar útil, mas para o poder ser utilizado, é necessário fornecer também uma interface para que o usuário possa desfrutar dos recursos do sistema. Atualmente existem dois tipos de interface que são usados: o GUI (graphical user interface) e o CUI (command line interface).

Nesse tipo de interface, o usuário tem a disposição um ambiente de trabalho composto por menus, ícones, janelas e outros itens disponíveis. O usuário interage com esse tipo de interface usando o mouse, podendo também usar o teclado e teclas de atalho. É possível fazer todo tipo de tarefa usando interface gráfica, como edição de vídeos e imagens, sendo somente alguns tipos muito específicos de tarefas que se saem melhor em linha de comando. Acrescentar facilidade de uso e agilidade é o objetivo da GUI, tendo a desvantagem de consumir muito mais memória que interfaces CUI. Em sistemas unix-likes, existe a possibilidade de escolher o gerenciador de janelas a utilizar, aumentando em muito a liberdade de escolha do ambiente.

Classificações

Em relação ao seu projeto (arquitetura), segundo Tanenbaum (1999):
Kernel monolítico ou monobloco: o kernel consiste em um único processo executando numa memória protegida (espaço do kernel) executando as principais funções. Ex.: OS/2, Windows, Linux, FreeBSD.
Microkernel ou modelo cliente-servidor: o kernel consiste de funções mínimas (comunicação e gerenciamento de processos), e outras funções, como sistemas de arquivos e gerenciamento de memória, são executadas no espaço do usuário como serviços; as aplicações (programas) são os clientes. Ex.: GNU Hurd, Mach.
Sistema em camadas: funções do kernel irão executar em camadas distintas, de acordo com seu nível de privilégio. Ex.: Multics.
Monitor de máquinas virtuais: fornece uma abstração do hardware para vários sistemas operacionais. Ex.: VM/370, VMware, Xen.
Quanto à capacidade de processamento, pode-se usar a seguinte classificação:
Monotarefa: pode-se executar apenas um processo de cada vez Ex.: MS-DOS.
Multitarefa: além do próprio SO, 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 que vários processos estão sendo executados simultaneamente. Ex: OS/2, Windows, Linux, FreeBSD e o Mac OS X.
Multiprocessamento: o SO distribui as tarefas entre dois ou mais processadores.
Multiprogramação: o SO divide o tempo de processamento entre vários processos mantendo o processador sempre ocupado.


Exemplos de sistemas operacionais ativos
Windows
Mac OS X
Linux
Solaris
FreeBSD
Haiku
eComStation
FreeDOS
Unix System V
AmigaOS
Minix
Eset

Exemplos de sistemas operacionais importantes que foram descontinuados
MS-DOS
OS/2
BeOS
NeXTStep
CP/M

segunda-feira, 13 de julho de 2009

Evolucão dos Computadores


História e Evolução dos Computadore
Nos dias de hoje, quando se ouve falar num processadores de 1 GHz até nos dá sono, de tão comuns que eles já se tornaram. Pouca gente já ouviu falar no 8088, que foi o processador usado no PC XT, a quase 20 anos atrás, e muito menos no Intel 4004, o primeiro microprocessador, lançado em 71.
Na época dos nossos bisavós os computadores já existiam, apesar de extremamente rudimentares. Eram os computadores mecânicos, que realizavam cálculos através de um sistema de engrenagens, acionado por uma manivela ou outro sistema mecânico qualquer. Este tipo de sistema, comum na forma de caixas registradoras era bastante utilizado naquela época.
No final do século XIX surgiu o relê, um dispositivo eletromecânico, formado por um magneto móvel, que se desloca unindo dois contatos metálicos. O Relê foi muito usado no sistema telefônico, aliás algumas centrais analógicas ainda utilizam estes dispositivos até hoje. Os relês podem ser considerados uma espécie de antepassados dos transístores. Suas limitações eram o fato de serem relativamente caros, grandes demais e ao mesmo tempo muito lentos: um relê demora mais de um milésimo de segundo para fechar um circuito, mais de dez milhões de vezes mais lento que um transístor atual.
Também no final do século XIX, surgiram as primeiras válvulas. As válvulas foram usadas para criar os primeiros computadores eletrônicos, na década de 40.
As válvulas tem seu funcionamento baseado no fluxo de elétrons no vácuo. Tudo começou numa certa tarde quando Thomas Edison, inventor da lâmpada elétrica estava brincando com a sua invenção. Ele percebeu que ao ligar a lâmpada ao polo positivo de uma bateria e uma placa metálica ao polo negativo, era possível medir uma certa corrente fluindo do filamento da lâmpada à chapa metálica, mesmo que os dois estivessem isolados. Havia sido descoberto o efeito termoiônico, o princípio de funcionamento das válvulas.
As válvulas já eram bem mais rápidas que os relês, atingiam frequências de alguns Megahertz, o problema é que aqueciam muito, consumiam muita eletricidade e queimavam-se facilmente. Construir um computador, que usava milhares delas era extremamente complicado, e muito caro.
Apesar de tudo isso, os primeiros computadores começaram a surgir durante a década de 40, naturalmente com propósitos militares. Os principais usos eram a codificação e decodificação de mensagens e cálculos de artilharia.
Sem dúvida, o computador mais famoso daquela época foi o ENIAC (Electronic Numerical Integrator Analyzer and Computer), construído em 1945. O ENIAC era composto por nada menos do que 17,468 válvulas, ocupando um galpão imenso. Porém, apesar do tamanho, o poder de processamento do ENIAC é ridículo para os padrões atuais, suficiente para processar apenas 5.000 adições, 357 multiplicações e 38 divisões por segundo, bem menos até do que uma calculadora de bolso atual, das mais simples.
A idéia era construir um computador para realizar vários tipos de cálculos de artilharia para ajudar as tropas aliadas durante a segunda Guerra mundial. Porém, o ENIAC acabou sendo terminado exatos 3 meses depois do final da Guerra e acabou sendo usado durante a guerra fria, contribuindo por exemplo no projeto da bomba de Hidrogênio.
Parte do galpão que abrigava o ENIAC

Se você acha que programar em C ou em Assembly é complicado, imagine como era a vida dos programadores daquela época. A programação do ENIAC era feita através de 6.000 chaves manuais. A cada novo cálculo, era preciso reprogramar várias destas chaves. Isso sem falar no resultado, que era dado de forma binária através de um conjunto de luzes. Não é à toa que a maior parte dos programadores da época eram mulheres, só mesmo elas para ter a paciência necessária para programar e reprogramar esse emaranhado de chaves várias vezes ao dia.
Abaixo está a foto de uma válvula muito usada na década de 40:


Vendo essa foto é fácil imaginar por que as válvulas eram tão problemáticas e caras: elas eram simplesmente complexas demais.
Mesmo assim, na época a maior parte da indústria continuou trabalhando no aperfeiçoamento das válvulas, obtendo modelos menores e mais confiáveis. Porém, vários pesquisadores, começaram a procurar alternativas menos problemáticas.
Várias destas pesquisas tinha como objetivo a pesquisa de novos materiais, tanto condutores, quanto isolantes. Os pesquisadores começaram então a descobrir que alguns materiais não se enquadravam nem em um grupo nem no outro, pois de acordo com a circunstância, podiam atuar tanto quando isolantes quanto como condutores, formando uma espécie de grupo intermediário que foi logo apelidado de grupo dos semicondutores.
Haviam encontrado a chave para desenvolver o transístor. O primeiro projeto surgiu em 16 de Dezembro de 47, onde era usado um pequeno bloco de germânio (que na época era junto com o silício o semicondutor mais pesquisado) e três filamentos de ouro. Um filamento era o polo positivo, o outro o polo negativo, enquanto o terceiro tinha a função de controle. Tendo apenas uma carga elétrica no polo positivo, nada acontecia, o germânio atuava como um isolante, bloqueando a corrente. Porém, quando uma certa tensão elétrica era aplicada usando o filamento de controle, uma fenômeno acontecia e a carga elétrica passava a fluir para o polo negativo. Haviam criado um dispositivo que substituía a válvula, sem possuir partes móveis, gastando uma fração da eletricidade gasta por uma e, ao mesmo tempo, muito mais rápido.
O primeiro projeto de transístor

Este primeiro transístor era relativamente grande, mas não demorou muito para que este modelo inicial fosse aperfeiçoado. Durante a década de 50, o transístor foi gradualmente dominando a indústria, substituindo rapidamente as problemáticas válvulas. Os modelos foram diminuindo de tamanho, caindo de preço e tornando-se mais rápidos. Alguns transístores da época podiam operar a até 100 MHz. Claro que esta era a freqüência que podia ser alcançada por um transístor sozinho, nos computadores da época, a freqüência de operação era muito menor, já que em cada ciclo de processamento o sinal precisa passar por vários transístores.
Mas, o grande salto foi a substituição do germânio pelo silício. Isto permitiu miniaturizar ainda mais os transístores e baixar seu custo de produção. Os primeiros transístores de junção comerciais foram produzidos partir de 1960 pela Crystalonics.
A idéia do uso do silício para construir transístores é que adicionando certas substâncias em pequenas quantidades é possível alterar as propriedades elétricas do silício. As primeiras experiências usavam fósforo e boro, que transformavam o silício em condutor por cargas negativas ou condutor por cargas positivas, dependendo de qual dos dois materiais fosse usado. Estas substâncias adicionadas ao silício são chamadas de impurezas, e o silício “contaminado” por elas é chamado de silício dopado.
O funcionamento e um transístor é bastante simples, quase elementar. É como naquele velho ditado “as melhores invenções são as mais simples”. As válvulas eram muito mais complexas que os transístores e mesmo assim foram rapidamente substituídas por eles.
Um transístor é composto basicamente de três filamentos, chamados de base, emissor e coletor. O emissor é o polo positivo, o coletor o polo negativo, enquanto a base é quem controla o estado do transístor, que como vimos, pode estar ligado ou desligado. Veja como estes três componentes são agrupados num transístor moderno:



Quando o transístor está desligado, não existe carga elétrica na base, por isso, não existe corrente elétrica entre o emissor e o coletor. Quanto é aplicada uma certa tensão na base, o circuito é fechado e é estabelecida a corrente entre o emissor e o receptor.
Outro grande salto veio quando os fabricantes deram-se conta que era possível construir vários transístores sobre o mesmo waffer de silício. Havia surgido então o circuito integrado, vários transístores dentro do mesmo encapsulamento. Não demorou muito para surgirem os primeiros microchips.