Gerenciamento de Memória no Computador

Transcrição

Gerenciamento de Memória no Computador
Gerenciamento de
Memória no Computador
Introdução
Devido aos Sistemas Operacionais apresentarem características variadas,
determinados procedimentos tornam-se por vezes semelhantes ou próprios de cada
Sistema. O gerenciamento de memória é um procedimento fundamental na
objetividade de todos os Sistemas Operacionais.
É responsabilidade do Sistema Operacional executar inúmeras tarefas,
independente da quantidade de tarefas assim como o tamanho das mesmas.
Neste contexto parece complicado para o Sistema Operacional gerenciar tarefas que
exigem uma quantidade de memória superior ao que é disponibilizado pela máquina.
Cada Sistema possui suas características próprias para complementar estas tarefas
e principalmente gerenciar a memória disponível para estas execuções. No entanto,
é necessário garantir para elas além da possibilidade de execução um alto grau de
segurança.
Recursos do modo usuário
O gerenciador do memória virtual (VM) permite aos subsistemas do modo usuário
compartilhar memória eficientemente usando objetos que são protegidos,
denominados e manipulados como qualquer objeto do executivo. Os subsistemas
podem definir proteção a nível de página na memória privativa, bloquear páginas
selecionadas na memória, tirar proveito dos arquivos mapeados e gerenciar os
espaços de endereçamento virtual de outros processos.
Gerenciando a memória
O gerenciador VM fornece um conjunto de serviços nativos que um processo pode
usar para gerenciar diretamente sua memória virtual. Estes serviços permitem que
um processo faça o seguinte:
•
•
•
Alocar memória em um processo de dois estágios.
Ler e gravar na memória virtual.
Bloquear páginas virtuais na memória física.
•
•
Obter informações sobre páginas virtuais.
Descarregar páginas virtuais para o disco.
O gerenciador VM estabelece uma abordagem de duas fases para alocar memória,
reservá-la e depois comprometê-la. A memória reservada é um conjunto de
endereços virtuais que o gerenciador VM reservou para ser usado futuramente por
um processo. A reserva de memória é uma operação rápida e barata no Windows
NT. A memória comprometida é memória para qual o gerenciador VM separou
espaço no seu arquivo de paginação.
Outro serviço do gerenciador VM do Windows NT possibilitam ao chamador fornecer
uma alça de processos para indicar um processo cuja memória virtual será
manipulada. O chamador pode manipular sua própria memória virtual ou aquela de
um outro processo. Esta facilidade é poderosa porque permite que um processo do
modo usuário gerencie o espaço de endereçamento de um outro processo.
Seções, visões e arquivos mapeados
Assim como todos os outros componentes do Windows NT, o gerenciador VM é
totalmente paralelo. Ele roda simultaneamente em todos os processadores de um
computador multiprocessado e tem de compartilhar suas estruturas de dados com
as linhas que estão sendo executadas em processadores diferentes.
Memória compartilhada pode ser definida como a memória que é visível apartir de
mais de um processo ou que está presente em mais de um espaço de
endereçamento virtual. A abordagem do Windows NT ao compartilhamento de
recursos é implementá-los como objetos protegidos e a memória não é nenhuma
exceção. O objeto de seção representa um bloco de memória que dois ou mais
processos podem compartilhar. Uma linha de um processo cria um objeto de seção
e dá a ele um nome para que as linhas de outros processos possam abrir alças para
ele.
Um objeto de seção do NT pode ser muito grande, ocupando dezenas ou até
milhares de páginas, por isso um processo precisa mapear apenas as partes do
objeto de seção que lhes são necessárias. O mapeamento de visões de uma seção
permite a um processo acessar grandes blocos de memória que, caso contrário, ele
poderia não ter espaço de endereçamento virtual para mapear.
Da mesma forma que a memória privativa, o conteúdo da memória compartilhada é
paginado para o disco quando a demanda de memória esta alta. O gerenciador VM
também permite que os objetos de seção sejam paginados para um arquivo
mapeado. O executivo do NT usa os arquivos mapeados para carregar imagens
executáveis para a memória e o gerenciador de cache do sistema usa os arquivos
mapeados para ler e gravar em páginas do cachê.
Objeto de seção
Os objetos de seções são alocados e desalocados pelo gerenciador de objetos. O
gerenciador VM também implementa serviços que as linhas do modo usuário podem
chamar para recuperar e alterar os atributos armazenados no corpo dos objetos de
seção.
Dois processos podem mapear partes do mesmo objeto de seção em seus espaços
necessário que eles sincronizem seus acessos a memória para evitar alterações de
dados ao mesmo tempo
Protegendo a memória
A proteção de memória no Windows NT é oferecida em quatro formas:
1. um espaço de endereçamento separado para cada processo.
2. dois modos de operação: modo kernel e modo usuário.
3. um mecanismo de proteção baseado em páginas.
4. proteção de memória baseado em objetos.
Memória privativa do processo
Toda vez que uma linha usa um endereço, o gerenciador VM do executivo do NT,
juntamente com o hardware, intervém e traduz o endereço virtual em endereço
físico. O sistema de memória virtual através do controle da tradução dos endereços
virtuais consegue garantir que as linhas de um processo não acessarão uma
estrutura de página de memória que pertença a um outro processo.
O gerenciador VM oferece as proteções de página somente leitura e
leitura/gravação, e suplementa estas proteções de memória em alguns mecanismos
próprios:
* somente execução.
* guardar página.
* nenhum acesso.
* cópia na gravação.
Usando os serviços nativos de memória virtual, o subsistema de ambiente tem
condições de controlar a proteção a nível de página virtuais. O controle da proteção
a nível de páginas pode produzir programas mais confiáveis já que assegura que as
linhas não gravarão em páginas designadas como somente para leitura.
Bibliografia
http://www.hsw.uol.com.br/
http://pt.wikipedia.org
Compiladores
Compiladores
O que são compiladores?
Os computadores são máquinas que entendem apenas comandos, dados e
endereços escritos em linguagem binária (0’s e 1’s). Porém, desenvolver um
programa complexo em linguagem de máquina é muito complicado e
desgastante. Para resolver esse impasse, foram criadas as linguagens de
programação, que permitem a criação de programas utilizando comandos mais
fáceis e com funções já prontas. Os compiladores foram criados para que
possamos fazer as programações em alguma das inúmeras linguagens de
programação e os computadores recebam as informações em linguagem de
máquina.
Um compilador é um programa (ou um grupo de programas) que, a partir de
um código fonte escrito na linguagem de programação, cria um programa
equivalente escrito em uma outra linguagem, ou seja, traduz um programa
descrito para um programa equivalente em código de máquina.
Para que o compilador possa produzir um arquivo executável, é preciso que o
código fonte seja escrito de acordo com as regras da linguagem de
programação. Um compilador não reconhece programas escritos em uma
linguagem de programação diferente da reconhecida por ele, mesmo que
sejam parecidas.
Características Gerais
Normalmente, o código fonte é escrito em uma linguagem de programação de
alto nível, com grande capacidade de abstração, e o código objeto é escrito em
uma linguagem de baixo nível, como uma sequência de instruções a ser
executada pelo processador.
O processo de compilação é composto de análise e síntese. A análise tem
como objetivo entender o código fonte e representá-lo em uma estrutura
intermediária. A síntese constrói o código objeto a partir desta representação
intermediária.
A análise pode ser subdividida ainda em análise léxica, análise sintática e
análise semântica. A síntese é mais variada, podendo ser composta pelas
etapas de geração de código intermediário, otimização de código e geração de
código final (ou código de máquina), e somente esta última etapa é obrigatória.
Classicamente, um compilador traduz um programa de uma linguagem textual
facilmente entendida por um ser humano para uma linguagem de máquina,
específica para um processador e sistema operacional. Atualmente, porém, são
comuns compiladores que geram código para uma máquina virtual que é,
depois, interpretada por um interpretador.
Em linguagens híbridas, o compilador tem o papel de converter o código fonte
em um código chamado de byte code, que é uma linguagem de baixo nível. Um
exemplo deste comportamento é o do compilador da linguagem Java que, em
vez de gerar código da máquina hospedeira (onde se está executando o
compilador), gera código chamado Java Bytecode.
Um compilador é chamado de Just-in-time compiler (JIT) quando seu processo
de compilação acontece apenas quando o código é chamado. Normalmente, o
usuário tem a percepção que um compilador JIT é um interpretador.
Muitos compiladores incluem um pré-processador. Um pré-processador
normalmente é responsável por mudanças no código fonte destinadas de
acordo com decisões tomadas em tempo de compilação. Por exemplo, um
programa em C permite instruções condicionais para o pré-processador que
podem incluir ou não parte do código caso uma assertiva lógica seja verdadeira
ou falsa, ou simplesmente um termo esteja definido ou não. Tecnicamente, préprocessadores são muito mais simples que compiladores e são vistos, pelos
desenvolvedores, como programas à parte, apesar dessa visão não ser
necessariamente compartilhada pelo usuário.
E por último, outra parte separada do compilador que muitos usuários vêem
como integrada é o linker, cuja função é unir vários programas já compilados
de uma forma independente e unificá-los em um programa executável. Isso
inclui colocar o programa final em um formato compatível com as necessidades
do sistema operacional para carregá-lo em memória e colocá-lo em execução.
Compilador Dev-C++ Disponível para download grátis no baixaki.
Exemplos de compiladores
Existem diversos compiladores C / C++ disponíveis para os programadores. A
decisão sobre qual compilador utilizar pode ser baseada em vários fatores:
•
qualidade do compilador (é rápido; está conforme com a
padronização da linguagem; a interface com o usuário é agradável possui ou não um IDE (Integrated Development Enviroment); possui
diversas opções de compilação etc.);
•
sistema(s) operacional(is) que o compilador funciona (e gera
códigos);
•
custo do compilador;
•
documentação disponível e suporte.
Compilador GCC (GNU Compiler Collection)
Este é o compilador da GNU (Free Software Foundation). É sem dúvida um
"líder" no mercado de compiladores C atualmente, é o compilador padrão do
sistema operacional GNU/Linux e também foi adotado por (ou portado para)
vários outros sistemas operacionais (inclusive S.O.s comerciais pagos), tais
como HP-UX, MS-Windows, MS-DOS, IBM OS2, IBM AIX, SUN OS, SUN
Solaris etc.
No GNU/Linux, este compilador é utilizado no desenvolvimento do próprio
sistema operacional e de todas as ferramentas nele disponíveis (ou seja, é o
compilador 'nativo' do Linux). Outro detalhe importante é que todas as
distribuições Linux já vem com um compilador GCC disponível, ou seja, se
você tem um computador com Linux instalado, você tem um compilador GCC
pronto para ser utilizado.
Compilador Dev-C++
Compilador Free Software (GPL), para Windows, com um IDE 'respeitável'
(editor, compilador e debug integrados).
Compilador C++ Builder - Borland
Outro compilador C muito conhecido e utilizado é o da empresa Borland,
certamente uma das empresas mais conhecidas na área de linguagens de
programação (Delphi, Turbo Pacal, Turbo C, Kylix...).
Turbo C Borland
Este é um dos compiladores C mais conhecidos (e antigos) na microinformática.
Este compilador roda em "modo MS-DOS"... é muito simples mas funciona
perfeitamente em muitas versões de Windows.
Compilador Visual C# - Microsoft
O compilador C da Microsoft é outro
desenvolvimento leve, simples e integrado.
com
muitos
usuários,
com
Bibliografia
www.guiadohardware.net/termos/compilador
http://professores.faccat.br/azambuja/compiladores_c.html
http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html
http://www.guiadohardware.net/termos/compilador
apostila de compiladores
Http://www.icmsc.sc.usp.br/Ensino;
Introdução a Compilação. Maria G. V. Nunes, Alessandra A. Macedo, Daniel G.
Dosualdo e Tatiana Barbosa;
Analisadores léxicos e sintáticos
http://www.inf.ufes.br/~tavares/labcomp2000/.
Processamento Batch
Introdução
Processamento batch, no contexto de sistemas operacionais, é um termo referente a
um processamento de dados que ocorre através de um lote de tarefas enfileiradas,
de modo que o sistema operacional só processa a próxima tarefa após o término
completo da tarefa anterior.
É um modo de processamento de dados no qual os dados de entrada são coletados
em grupos, ou lotes, e periodicamente processados em seqüência por um ou mais
jobs. O processamento batch não permite a interação do usuário com o sistema
durante a execução dos jobs.
Sistemas Batch
Os sistemas batch foram os primeiros tipos de sistemas operacionais
multiprogramáveis a serem implementados na década de 1960. Os programas,
também chamados de jobs, eram submetidos para execução através de cartões
perfurados e armazenados em disco ou fita, onde aguardavam para ser
processados. Posteriormente, em função da disponibilidade de espaço na memória
principal, os jobs eram executados, produzindo uma saída em disco ou fita.
O processamento batch tem a característica de não exigir a interação do usuário
com a aplicação. Todas as entradas e saídas de dados da aplicação são
implementadas por algum tipo de memória secundária, geralmente arquivos em
disco. Alguns exemplos de aplicações originalmente processadas em batch são
programas envolvendo cálculos numéricos, compilações, ordenações, backups e
todos aqueles onde não é necessária a interação com o usuário.
Esses sistemas, quando bem projetados, podem ser bastante eficientes, devido à
melhor utilização do processador, entretanto, podem oferecer tempos de resposta
longos. Atualmente, os sistemas operacionais implementam ou simulam o
processamento batch, não existindo sistemas exclusivamente dedicados a este tipo
de processamento.
Figura 1: Sistema de Processamento Batch
Cada trabalho (job) podia corresponder a uma seqüência de passos (job steps).
Cada passo poderia envolver a compilação de um programa numa linguagem
(assembly ou FORTRAN) ou a execução de um programa já compilado. O utilizador
era responsável por especificar a descrição de cada trabalho, com base numa
linguagem de controle, devendo tipicamente codificar essa descrição sob a forma de
cartões perfurados, editados numa máquina perfuradora de cartões. Assim, a
descrição do trabalho pedido por cada utilizador constituía uma pilha de cartões, que
eram depois entregues ao operador, responsável pela supervisão da execução dos
trabalhos. Cartões especiais de controle indicavam, na descrição do trabalho,
informações tais como 'início de cartões de um trabalho', 'compilador de FORTRAN',
'início de seqüência de cartões do programa utilizador', 'início de seqüência de
cartões de dados para o trabalho', etc.
O operador do sistema era responsável por escalonar a ordem segunda a qual os
diversos trabalhos submetidos iriam ser executados. Uma vez decidida essa ordem,
colocava as pilhas de cartões na 'calha' de leitura de um periférico de entrada: o
leitor de cartões perfurados. Os cartões de cada trabalho iriam ser lidos para
memória e interpretados por um programa que antes tinha sido carregado em
memória (este programa era chamado monitor control program) e constituia o
embrião dos atuais interpretadores de comandos do terminal (shell).
Este sistema de processamento de trabalhos era estritamente seqüencial, isto é,
cada trabalho era executado completamente, até terminar e passar o controle ao
monitor de controle, para este processar o próximo trabalho do lote. Durante a
execução, o programa era responsável também pelas operações de entrada (leitura
de cartões de dados) e de saída (escrita dos resultados numa impressora). Uma
evolução introduzida nos primeiros sistemas foi a de disponibilizar as rotinas de
controlo das entradas e saídas, como rotinas auxiliares, que residiam em memória,
de modo a poupar o trabalho e diminuir a probabilidade de ocorrência de erros do
programador. Estas rotinas de entrada/saída, mais o interpretador de cartões de
controle, formavam o que se designava por monitor de controle ou programa
supervisor de trabalhos. Este programa residia numa zona de memória central.
Figura 2: Ocupação de Memória
Estes sistemas não ofereciam qualquer mecanismo de proteção contra erros
imprevistos dos programas utilizadores:
•
•
•
se o programa gerasse endereços que referissem a zona de memória do monitor,
poderia corromper o seu código ou dados;
o programa de um utilizador, em situações de erro, podia começar a ler os
cartões de entrada, do leitor de cartões, mas correspondentes aos utilizadores
seguintes, no lote de trabalhos submetidos;
se o programa tivesse um ciclo infinito, nunca terminaria e o controle nunca
retornaria ao monitor de controle, ficando o sistema completamente bloqueado
Para resolver os dois primeiros tipos de problemas, surgiram mecanismos de
proteção, suportados pelo hardware dos próprios processadores (CPU). No
registrador de flags de estado do processador passou a haver um bit adicional de
controle, indicando o modo de operação corrente do processador.
Se este bit indicar o modo supervisor ou protegido, então todas as ações são
permitidas na execução das instruções da máquina, incluindo o acesso a toda a
memória, sem restrições, o acesso aos registradores de controle do processador,
incluindo os que controlam o acesso às tabelas de páginas ou de segmentos dos
programas, bem como o acesso às interfaces dos periféricos e o controlo do
mecanismo de interrupções. Tipicamente, os programas que constituem o sistema
de operação, irão ser executados no modo supervisor.
O sistema de operação, antes de passar o controle da execução para um programa
utilizador, modifica o bit de modo para indicar o modo utilizador. Neste modo, o
programa só pode gerar endereços que refiram as zonas de memória às quais lhe
foi dado acesso, por exemplo, através da sua tabela de páginas (inicializada pelo
SO). Qualquer referência de memória fora dessas zonas é detectada pelo hardware
do processador, no processo de transformação do endereço virtual, o que, em modo
utilizador, origina uma interrupção do programa, por violação de memória. O mesmo
controle é exercido, de modo a impedir o programa em modo utilizador de aceder às
portas de interface dos periféricos, executar instruções máquina de entrada e saída
e efetuar ações de controle do processador, por exemplo, para o controle de
interrupções.
Figura 3: Modos de Operação do Processador
Como aquelas ações ficam proibidas e são impostas por hardware, os erros dos dois
primeiros tipos podem ser controlados pelo SO.
Se, em modo utilizador, o programa não pode executar instruções de entrada e
saída, como é que comunica com o exterior, isto é, recebe dados e produz
resultados, envolvendo os dispositivos periféricos, sejam de entrada, de saída ou de
arquivo de ficheiros? A resposta é: fazendo pedidos ao SO, através da invocação de
chamadas ao sistema.
Conclusão
O processamento batch costuma se mostrar mais eficiente nos casos de operações
rotineiras de alto volume. Muitos jobs batch costumam ser rodados à noite, nos
mainframes. Antes que as redes se tornassem economicamente viáveis, quase todo
o processamento de dados empresarial e científico era feito em batch. Os jobs batch
podem ser rodados por requisição específica ou dentro de um cronograma regular
de produção, sendo essa última modalidade mais comum nas empresas. A
freqüência em que os jobs regulares são executados (diária, semanal, mensal e
assim por diante) é determinada pelas exigências da aplicação.
Este tipo de arquivo pode ser muito perigoso, pois é capaz de danificar o sistema
operacional sem o conhecimento do usuário, enchendo o disco rígido,
desconfigurando a inicialização do sistema, dentre outros males. Por isso, é
recomendado executar jobs batch conhecidos.
Bibliografia
http://forum.imasters.uol.com.br/index.php?/topic/333787-tipos-de-sistemasoperacionais/
http://www-asc.di.fct.unl.pt/~jcc/ASC2/Teoricas/a2/node5.html
http://pt.wikipedia.org/wiki/Batch
Processamento
Time-Sharing
(Tempo Compartilhado)
Introdução
As redes de computadores habilitam os computadores a comunicar-se diretamente,
com o objetivo de trocar informações e serviços de uma forma mais prática e
otimizada. Na medida em que os computadores variam em tipo e localidade, a tarefa
de habilitar a interconexão pode tornar-se um tanto difícil.
Computação Centralizada (time-sharing)
Tempo compartilhado ou time sharing (em inglês) é um termo referente a sistemas
operacionais, que surgiu durante a 3ª geração dos sistemas operacionais,
atualmente em sua 4ª geração. Este conceito significa compartilhamento de tempo,
ou seja, o tempo ocioso entre os processos é compartilhado com outros processos
para dinamizar o sistema. Múltiplas tarefas são executados simultaneamente, sendo
que a CPU atende cada tarefa por um determinado tempo, em sequência. Os
tempos dedicados para cada tarefa são pequenos o suficiente para dar a ilusão de
que as tarefas estão sendo executadas simultaneamente. É também um termo
utilizado pelo mercado imobiliário para um imóvel vendido a mais de um proprietário,
que compartilham o uso alternadamente durante o ano, comum em locais muito
procurados para férias.
Sistemas time-sharing são diferentes, esta técnica é utilizada para aplicações
interativas a chave para se medir a eficiência de um sistema é o tempo de resposta.
Como o tempo entre duas transações consecutivas é usualmente longo o espaço de
memória pode ser gerenciado pela técnica do roll in/roll out
Computação Centralizada (time-sharing).
Roll In / Roll Out
Na maioria dos sistemas de time-sharing as técnicas do roll in/ roll out são utilizadas
para gerenciarem o espaço na memória principal.
Vejamos uma aplicação típica de time-sharing. As transações (um comando, uma
declaração de um programa) são digitadas em um teclado. Na maioria dos casos
muito poucos processamento é exigido, a digitação é lenta. Desta maneira, quando
uma transação é processada o sistema sabe que haverá um considerável intervalo
de tempo até que chegue a próxima transação do mesmo usuário. Então a área de
trabalho pode ser colocada em uma memória auxiliar (rolled-out) abrindo espaço
para outra aplicação na memória principal. Na próxima transação deste usuário seu
espaço será novamente colocado na memória principal (rolled-in).
Sistemas de time sharing
Os sistemas operacionais multiprogramados apareceram numa época em que os
usuários acessavam as máquinas através de "terminais burros" (sem capacidade de
processamento local). Todo o processamento era feito num computador central, cujo
tempo de processamento era então compartilhado pelos vários usuários. Os
sistemas de tempo compartilhado (time-sharing) permitem que diversos programas
sejam executados a partir da divisão do tempo do processador em pequenos
intervalos, denominados fatia de tempo (time-slice). Caso a fatia de tempo não seja
suficiente para a conclusão do programa, ele é interrompido pelo sistema
operacional e substituído por um outro, enquanto fica aguardando por uma nova
fatia de tempo. O sistema cria para cada usuário um ambiente de trabalho próprio,
dando a impressão de que todo o sistema está dedicado exclusivamente a ele.
Geralmente, sistemas de tempo compartilhado permitem a interação dos usuários
com o sistema, através de terminais que incluem vídeo, teclado e mouse. Esses
sistemas possuem uma linguagem de controle que permite ao usuário comunicar-se
diretamente com o sistema operacional, através de comandos. Desta forma, é
possível verificar arquivos armazenados em disco ou cancelar a execução de um
programa. O sistema, normalmente, responde em poucos segundos à maioria
desses comandos. Devido a esse tipo de interação, os sistemas de tempo
compartilhado também ficaram conhecidos como sistemas on-line. A maioria das
aplicações comerciais atualmente é processada em sistemas de tempo
compartilhado, pois elas oferecem tempos de respostas razoáveis a seus usuários e
custos mais baixos, em função da utilização compartilhada dos diversos recursos do
sistema.
Time-slicing
Imagine que um usuário se encontre a 30 minutos digitando dados para um
programa de análise estatística. Cada transação (digitação de dado) corresponde a
uma típica aplicação de time-sharing. Apesar disto, ao final de seu trabalho de
digitação, sua última transação é diferente. Ele solicitará o processamento dos
dados que poderá levar alguns minutos e todos os outros usuários deveriam esperar
este processamento terminar para voltarem a obter a atenção do processador
novamente, e isto seria intolerável. A fim de evitar este tipo de problema utiliza-se a
técnica do time-slicing onde cada programa tem o direito de utilizar-se do
processador por um certo período de tempo máximo, por exemplo 0.1 segundo.
Após o término deste período de tempo o próximo programa da fila recebe o
controle, e assim sucessivamente. Um determinado programa só perderá o controle
e entrará em regime de espera antes do seu tempo terminar se ele solicitar uma E/S.
Bibliografia
http://www.jsoares.net/UniverCidade/IN070/redes.pdf
http://www.google.com.br
http://www.dcc.unicamp.br
http://forum.imasters.uol.com.br/index.php?/topic/333787-tipos-de-sistemasoperacionais/
Processamento On-line
Processamento On-line
O processamento de dados online fornece cômputos interativos. Sempre que os
dados de entrada ou transações como ele introduz o sistema sejam processados
imediatamente. Não há nenhuma provisão para esperar por alguns outros dados
para entrar ou reunir dados durante o período do tempo e submeter-se de uma vez
em caso do Processamento de Lote. os computadores online processam cada
transação sobre a recepção e os resultados do processamento de dados podem ser
imediatamente informados ao usuário do sistema.
Os exemplos de sistemas de processamento de dados online incluem:
Reserva de companhia aérea, reserva de Ônibus, reserva Ferroviária. Os
passageiros que fazem reserva gostariam de saber imediatamente se o assento é
disponível ou não. Como o balcão de reserva de ônibus online computadorizado
aceita dos passageiros os dados da viagem, o tempo de viagem, número de ônibus,
número de via, distinção, classe da viagem, número de assentos necessitados etc.
Estes dados são processados imediatamente para informar os passageiros sobre a
posição de disponibilidade dos assentos de reserva do ônibus especificado e o
número de via, em passageiros é disposto agora a reservar os assentos, dados
online que processam sistema de computador que trata reservas, confirmar os
assentos reservados do passageiro reduzindo o número total de assentos
disponíveis naquele ônibus pelo número solicitado de assentos. Lá pelo
processamento online fornece a interação, uma espécie de gerência automática
quanto a continuam seguindo a pista dos assentos disponíveis reais e inquirição
online sobre a posição de reserva.
ATMs Computadorizado (Máquinas de Contador Automáticas) no banco permite aos
portadores de contas desenhar o dinheiro necessitado.
Referências Bibliográficas
www.ligaturesoft.com/.../Online-Processamento.html
http://www.wthreex.com/rup/portugues/process/activity/ac_distr.htm
robson.fjaunet.com.br/fundacao/delphi/pdf/aula_04_delphi.pdf
Processamento
Real-Time
(Tempo Real)
Processamento real time
Em um processamento em tempo real, há uma entrada contínua, processo e
saída de dados. Os dados precisam ser transformados em um pequeno período
de tempo estipulado (real time), caso contrário ele irá criar problemas para o
sistema. Por exemplo: montagem de robôs em linha e sistema de radar.
O que é o Real-Time?
Considere um sistema de software em que os insumos representam dados digitais
de hardware como dispositivos de imagem ou outro sistema de software e as
saídas são dados digitais que o hardware de controle externo, como displays. O
tempo entre a apresentação de um conjunto ofinputs e a aparência de todos as
saídas associadas é chamado de tempo de resposta. Um sistema em tempo real
é aquele que deve satisfazer explícitas limitações de tempo limitado de resposta
para evitar falha. Equivalentemente, um sistema em tempo real é uma correção,
cuja lógica é baseado tanto na exatidão dos resultados e a sua atualidade.
Observe que tempos de resposta, por exemplo, microssegundos não são
necessários para caracterizar um sistema em tempo real - ele simplesmente deve
ter tempos de resposta que são restritas e, portanto, previsível. Na verdade, o
equívoco de que os sistemas em tempo real deve ser "rápido" é porque na maioria
dos casos, os prazos são da ordem de microssegundos. Mas as restrições de
prazos ou prazos são geralmente uma reflexo do processo físico subjacente está
sendo controlado. Por exemplo, em processamento de imagens envolvendo
atualização de tela para visualização de movimento contínuo, os prazos são da
ordem de 30 microssegundos.
A principal diferença entre tempo real e não sistemas de tempo real é uma ênfase
na previsão de tempo de resposta e sua redução. Percebe-se que cada sistema
pode ser feita de conformidade com a definição em tempo real simplesmente ser o
estabelecimento de prazos (arbitrária ou não). Por exemplo, um tempo de um
algoritmo de filtragem de imagens para imagens médicas, que não pode ser
considerado como tempo-real, realmente é em tempo real se o procedimento está
relacionado com a anillness em que o diagnóstico e tratamento têm algum realista
prazo. Como todos os sistemas podem ser feitos para olhar como se fossem em
tempo real, nós refinamos a definição tanto em termos de tolerância do sistema
para não atendidos prazos. Por exemplo, sistemas tempo real, são aqueles onde
a falha para atender até mesmo um prazo resulta em falha total do sistema. Na
empresa em tempo real sistemas de número pequeno com prazos fixos podem
ser perdidos sem total falha do sistema. Finalmente, em suaves prazos de
sistemas em tempo real leva em falta para a degradação do desempenho, mas
não fracassam. Salvo disposição em contrário, quando dizemos "tempo real" ao
longo deste tutorial, vamos dizer rígido em tempo real.
Outro equívoco comum é que o estudo do processamento em tempo real não é
realmente um problema de hardware, porque é sempre mais rápido. Jogando
hardware mais rápido nos prazos problemas podem ser sempre respeitados.
Além disso, o hardware mais rápido é sempre disponível ou adequado para
determinados aplicações.
Alguns acham que o desempenho em tempo real é fácil de conseguir. E nem
sempre é assim, principalmente porque a maioria dos hardwares e linguagens de
programação não são adequados para as demandas em tempo real.
Características de Sistemas em Tempo Real
Real-Time Systems são freqüentemente reativos e / ou sistemas embarcados.
Reactive sistemas são aqueles em que a funcionalidade é impulsionada pela
contínua, esporádica interação com o meio ambiente, como na realidade virtual.
Embedded sistemas geralmente não têm uma interface de sistema operacional
generalizado e são utilizados explicitamente para controlar dispositivos de
hardware especializados. Por exemplo, sistemas de imagem muitos que residem
em plataformas de hardware especiais, como realidade virtual, multimídia e
imagens médicas, são incorporadas.
Um conceito importante em sistemas de tempo real é a noção de um evento, isto
é, qualquer ocorrência que resulta em uma mudança no fluxo seqüencial de
execução do programa. Os eventos podem ser divididos em duas categorias:
síncrono e assíncronas.
Acontecimentos síncronos são aqueles que ocorrem na previsível vezes como a
execução de uma instrução de ramificação condicional ou armadilha de hardware.
Eventos assíncronos ocorrem em pontos imprevisíveis no fluxo de controle e são
geralmente causadas por fontes externas, como um sinal de relógio. Ambos os
tipos de eventos pode ser um sinal para o processador de sinais de hardware.
Real-Time Design Issues
Por que estudar sistemas em tempo real? A concepção e implementação de
tempo real sistemas requer a consideração cuidadosa de uma variedade de
questões. Entre as tarefas atribuídas ao projetista do sistema em tempo real são:
1. Seleção de hardware e software necessário a combinação adequada para uma
solução de custo eficaz.
2. A decisão de tirar vantagem de uma operação comercial tempo real sistema ou
de conceber um sistema operacional especial.
3. Predição e medição de utilização da CPU e conseguir um seguro mas o nível
eficiente de utilização.
4. Seleção de um idioma do software apropriado para o desenvolvimento do
sistema.
5. Maximizando a tolerância a falhas e confiabilidade do sistema através de uma
cuidadosa assinar e testes rigorosos.
Ambientes de computação distribuídos estão a evoluir no sentido de sistemas em
tempo real. Por exemplo, os avanços na comunicação digital redes e estações de
trabalho no computador pessoal estão a começar a permitir que a geração,
comunicação e apresentação de voz em tempo real e mídia de vídeo
simultaneamente. Muitos não-sistemas em tempo real têm sido estripado para
estender seu uso para processamento em tempo real. Este tendência exige
distribuição e real funcionalidade de controle de tempo para serem elementos
intrínsecos do sistema. Existe uma grande demanda para oferecer real
funcionalidades do tempo como serviços do sistema normal, ao invés de adicionar
em especial recursos.
Exemplo de utilização do processamento real time.
A Análise Inteligente de Vídeo (IVA) da Bosch
Auxilia os operadores a manterem a atenção, introduzindo um novo nível de
automação no controle de CFTV. Baseado em “ilustrações virtuais” (metadados),
o processamento em tempo real identifica as condições de alerta, fornecendo as
informações necessárias à equipe de segurança para a tomada de ações
preventivas ou ações em situações de emergências.
Bibliografia
http://wiki.answers.com
http://en.wikipedia.org
http://media.wiley.com
http://citeseerx.ist.psu.edu
www.boschsecurity.com.br
Multiprocessamento
Multiprocessamento
São cada vez mais comuns os sistemas computacionais que contam com mais de
um processador, em comunicação ativa, compartilhando barramento, clock e até
mesmo memória e dispositivos periféricos. São denominados como sistemas
multiprocessador.
Multiprocessamento é a capacidade de um sistema operacional executar
simultaneamente dois ou mais processos. Pressupõe a existência de dois ou mais
processadores.
Difere da multitarefa, pois esta simula a simultaneidade, utilizando-se de vários
recursos, sendo o principal o compartilhamento de tempo de uso do processador
entre vários processos.
Diferenças entre Multiprocessamento e Multitarefa
Multitarefa é referente a software, mais precisamente a Sistema Operacional. Um
SO multitarefa é um SO que consegue realizar diversas tarefas em paralelo, ou seja,
você pode digitar no Word, enquanto escuta música no Musicmatch e baixa um
vídeo.
Logo o Windows é um sistema multitarefas, pois ele consegue organizar mais de
uma tarefa por vez. Ao contrário do antigo MS-DOS, onde não se conseguia nem
sequer abrir dois textos simultaneamente.
Multiprocessamento é referente a hardware, mais precisamente a processadores.
Nada mais é do que executar mais de um processo por vez. Quando o SO vai
realizar uma tarefa ele cria um Processo para esta tarefa (que você pode visualizar
no Gerenciador de Dispositivos do Windows) e envia ao processador.
Na verdade, o multiprocessamento só ocorre se houver mais de um processador no
micro, pois mesmo com as Máquinas Virtuais, o que ocorre é uma ilusão de
multiprocessos, pois na parte física um único processador só pode executar um
processo por vez.
Características de um multiprocessamento
Um multiprocessador ou sistema multiprocessado é um sistema integrado de
computação com as seguintes características:
•
Envolve dois ou mais processadores físicos (sejam processadores separados ou
múltiplos núcleos encapsulados no mesmo chip) ou lógicos (processador(es) com
a tecnologia HyperThreading da Intel) com o mesmo poder computacional e cada
um capaz de executar processos autonomamente. Isto implica que não há
nenhuma unidade central de controle; cada processador contém sua própria
unidade de controle. Assim, efetivamente, a lógica de controle é distribuida pelo
sistema.
•
Os processadores compartilham um único espaço de endereçamento de
memória.
•
O sistema de hardware é como um todo gerenciado por um único sistema
operacional.
O sistema operacional com suporte a multiprocessamento deve ser capaz de
suportar multitarefa e manter múltiplas filas de processos, uma para cada
processador.
Benefícios de um multiprocessamento
Estes sistemas geram economia pelo compartilhamento de periféricos, memória
primária e secundária e fontes de alimentação. São convenientes, pois possibilitam
armazenamento mais centralizado de dados. Além de fornecer maior disponibilidade
que é a probabilidade de um sistema estar operando corretamente e disponível para
uso em um dado instante de tempo, mesmo na ocorrência de falhas, defeitos físicos
ou imperfeições que ocorram em algum componente de hardware ou de software em
um dado sistema.
Outro benefício é a confiabilidade. A falha de um processador irá diminuir a
eficiência do sistema, mas não o interromperá. Esta capacidade é conhecida como
degradação normal e os sistemas que a implementam são conhecidos por ser
tolerantes a falhas. A operação contínua na presença de falhas requer mecanismos
que detectem, façam o diagnóstico e correção das falhas.
Arquitetura
São comuns os sistemas multiprocessadores utilizarem multiprocessamento
simétrico ou SMP (de Symmetric MultiProcessing). Nele, os processadores
compartilham a mesma memória, embora possam ter caches separadas. O sistema
operacional deve estar preparado para trabalhar com coerência de caches e,
principalmente, evitar condições de corrida na memória principal.
No SMP, cada processador executa uma cópia idêntica do sistema operacional, que
se comunicam entre si como for necessário e tem tempo uniforme de acesso à
memória.
Também é possível a arquitetura NUMA (Non-Uniform Memory Access), onde o
tempo de acesso à memória varia em função da localização física dos
processadores em relação à da memória.
Como o acesso à memória não é uniforme, cada processador é associado um banco
de memória. Nesse caso, o sistema operacional trata cada banco separadamente,
pois cada banco tem um custo de acesso diferente, dependendo de qual o
processador a que está associado e onde está sendo executado o processo que
tenta acessar a memória.
Outra forma de trabalho é a de multiprocessamento assimétrico, na qual cada
processador recebe uma tarefa específica. Um processador mestre controla o
sistema e os outros (escravos) recebem instruções dele. A distinção pode ser
implementada em hardware ou software.
Com o barateamento dos processadores, mais responsabilidades podem ser
atribuídas aos processadores escravos de um sistema com multiprocessamento
assimétrico. Por exemplo, um processador escravo com sua própria memória pode
gerenciar um sistema de disco (até implementando seus próprios algoritmos de
escalonamento e filas de disco) ou controlar interfaces gráficas.
É também comum que esta arquitetura não seja mais considerada como
multiprocessamento real.
Exemplos de Multiprocessamento
Placas mãe com dois ou mais processadores são normalmente usadas em
servidores e estações de trabalho de alto desempenho. Usam processadores como
o XEON e o Itanium (Intel) e o Opteron (AMD). O que os novos processadores duais
têm de interessante é o fato de trazerem o multiprocessamento para os micros
convencionais (desktop) e e para os notebooks.
Certos sistemas operacionais já oferecem suporte a múltiplos processadores há
bastante tempo. Citamos o Windows NT, Windows 2000, Windows XP Professional,
Windows 2003, Windows Vista e a maioria das implementações do Linux. Antes de
existirem processadores com mais de um núcleo, a única forma de ter
processamento dual era usando placas mãe com soquetes para vários
processadores. Essas placas são comuns em servidores, há bastante tempo.
A Figura 1 mostra uma placa mãe com soquetes para dois processadores Intel
Xeon, para uso em servidores. O multiprocessamento (uso de mais de um
processador) existe em servidores desde meados dos anos 90, com processadores
como o Pentium Pro, Pentium II Xeon e Pentium III Xeon, mas sempre com placas
mãe para 2 ou 4 processadores.
E para que é preciso usar multiprocessamento nos micros mais simples?
Todos os que acompanham a evolução recente dos processadores estão a par das
dificuldades dos fabricantes em produzirem modelos com clocks mais elevados.
A Intel atingiu a marca de 3 GHz no final de 2002, e no início de 2007 ainda estava
em 3,8 GHz. É uma contradição à Lei de Moore, que afirma empiricamente que os
processadores tendem a dobrar de desempenho a cada 18 meses. Se aumentar o
clock é difícil, por limitações tecnológicas, é menos difícil usar dois processadores
iguais e de menor velocidade, aumentando bastante a velocidade de
processamento.
Figura 1: Placa mãe para dois processadores Intel Xeon.
Multiprocessamento simétrico
O multiprocessamento simétrico ou SMP (Symmetric Multi-Processing) é uma
tecnologia que permite a um determinado sistema operacional distribuir tarefas entre
dois ou mais processadores. Este método, mais especificamente, permite que vários
processadores partilhem o processamento de instruções requisitadas pelo sistema.
O multiprocessamento simétrico oferece um aumento linear na capacidade de
processamento a cada processador adicionado. Não há necessariamente um
hardware que controle este recurso, cabe ao próprio sistema operacional suportá-lo.
Este método também é chamado de "processamento paralelo".
Funcionamento
Os processadores trabalham em conjunto compartilhando os recursos de hardware,
geralmente são processadores iguais, similares ou com capacidades parecidas.
Todos têm os mesmos privilégios de acesso ao hardware, ao contrário do que
acontece em sistemas multiprocessados assimétricos, onde um processador é
encarregado de gerenciar e coordenar as tarefas e ações dos demais, o que pode
proporcionar melhor controle sobre a sobrecarga ou a ociosidade dos processadores
subordinados. Por tratar todos os processadores de forma igualitária, no
multiprocessamento simétrico, qualquer processador pode assumir as tarefas
realizadas por qualquer outro processador, as tarefas são divididas e também
podem ser executadas de modo concorrente em qualquer processador que esteja
disponível. Os acessos dos processadores aos dispositivos de entrada e saída e a
memória são feitos por um mecanismo de intercomunicação constituído por um
barramento único.
A memória principal da máquina é compartilhada por todos os processadores
através de um único barramento que os interliga, de modo que esse acesso a
memória é nativo, não existe a necessidade de um mascaramento da memória real
em nível de aplicação. Por todo acesso à memória principal ser realizado através de
um único barramento, aqui temos um ponto de gargalo do sistema, pois o acesso é
serial, ou seja, o sistema fica limitado a passagem de apenas uma instrução de cada
vez pelo barramento, abrindo uma lacuna de tempo entre uma instrução e outra.
Memórias caches junto aos processadores diminuem o tempo de latência entre um
acesso e outro à memória principal e ajudam também a diminuir o tráfego no
barramento. Como estamos falando em mais de um processador, cada um com sua
memória cache é imprescindível garantir que os processadores sempre acessem a
cópia mais recente da memória cache, isso se chama coerência de cache
geralmente implementada diretamente por hardware. Um dos métodos de coerência
de cache mais conhecido é o snooping, quando um dado compartilhado nas caches
dos processadores é alterado, todas as cópias das caches são consideradas
inválidas e logo após atualizadas mantendo assim a integridade do dado.
Gerenciamento
O sistema operacional é quem se encarrega de realizar a interação entre os
processadores e as aplicações do sistema. Deixando a existência de múltiplos
processadores transparente para os usuários, pois o próprio sincroniza os processos
com os processadores.
Mesmo as arquiteturas de SMP já existirem há muitos anos no mercado, até pouco
tempo os sistemas não tinham uma padronização para as funções básicas de
operação, cada sistema implementava suas próprias funções. O que tornava
impossível que os sistemas operacionais fossem portáveis. Apartir dessa
necessidade foi criada a MPS (Específicações da Intel para Multiprocessadores ou
do inglês - Intel's Multiprocessor Specification), com o objetivo de padronizar o
desenvolvimento de SOs que suportassem essas arquiteturas. A criação da MPS fez
com que a Intel saísse na frente no desenvolvimento da tecnologia multicore.
Vantagens
Sistemas de multiprocessamento simétrico são considerados mais poderosos em
relação aos de multiprocessamento assimétricos, abaixo alguns descritivos de
comparação entre eles.
No multiprocesasmento simétrico muitos processos podem ser executados ao
mesmo tempo sem queda no desempenho, pois o sistema operacional delega as
instruções a cada processador;
Se um processador falhar o sistema não tranca pois qualquer outro processador
pode assumir as tarefas daquele que falhou, já no assimétrico por exemplo, se o
processador mestre falhar o sistema trava;
No SMP o usuário pode melhorar o desempenho da máquina simplesmente
adicionando um processador.
Tecnologias
Antigamente para utilizar SMP era necessário hardware específico, placas-mãe com
dois ou mais soquetes de CPU, grandes estruturas de servidores clusterizados. Hoje
em dia com a tecnologia multi-core, as fabricantes já integram tudo isso em apenas
um dispositivo físico, também conhecidos como processadores multi-core.
Alguns exemplos de processadores multi-core:
Intel Xeon;
Intel Pentium D;
Core Duo e Core 2 Duo;
Intel Itanium;
AMD Athlon 64 ou X2;
Opteron 200 e 2000 processadores da série;
UltraSPARC da Sun Microsystems;
Fujitsu SPARC64 III;
Hewlett Packard PA-RISC;
IBM POWER;
PowerPC Apple Computer(G4 e séries G5)
Bibliografia
http://pt.wikipedia.org/wiki/Multiprocessamento_sim%C3%A9trico
http://www.ligaturesoft.com/portuguese/cheap-computers/Multiprocessamento.html
http://pt.wikipedia.org/wiki/Multiprocessamento_sim%C3%A9trico
http://www.geek.com.br/forum/index.php?topic=8768.0
http://www.scribd.com/doc/276775/Aula02-TiposSO
Teleprocessamento
Teleprocessamento
Os primeiros sistemas de comunicações de dados remontam à metade dos
anos 60.
Os sistemas de comunicações de dados rudimentares eram conhecidos como
sistemas de teleprocessamento.
Os primeiros sistemas de teleprocessamento eram constituídos de terminais
conectados a um computador central por meio de linhas de comunicações.
O processamento dos dados enviados pelos terminais era realizado
remotamente pelo computador central e os resultados processados,
distribuídos posteriormente para os terminais.
Em sistemas de teleprocessamento mais modernos, o processamento dos
dados passou a ser realizado de forma distribuída (não mais centralizada em
um único computador).
Maior sistema de teleprocessamento existente:
Denominação:
Projeto SETI - Search for Extraterrestrial Intelligence.
Descrição:
Rede de PCs ao redor do mundo destinada a analisar e processar sinais
provenientes do espaço, captados por rádio-telescópios.
Objetivo:
Captar sinais que possam constituir comunicação inteligente, originada
de fora da Terra.
Integrantes:
Qualquer indivíduo ou entidade pode integrar esta rede, disponibilizando
seu PC como um terminal de processamento remoto gerenciado pelo
projeto SETI.
O processamento busca estabelecer a existência de algum processo
subjacente responsável pela geração dos sinais analisados.
Definição de Teleprocessamento
Técnica em que os dispositivos de entrada/saída de dados, por estarem
afastados do centro de processamento, utilizam os recursos de
telecomunicações para que o sinal (dados) seja transferido entre os pontos
distantes, promovendo, à distância, o processamento dos dados.
Aglutina tecnologias de telecomunicações + processamento.
Inicialmente → Denominação proprietária da IBM.
Hoje → Denominação de domínio público.
Definição de Comunicação de Dados
Conceito mais abrangente do que Teleprocessamento. Significa: técnica de
transferência confiável da informação contida no sinal (dados) entre pontos
distantes.
Inclui, além das funções de transmissão, funções adicionais como: detecção e
correção de erros, protocolos, etc.
Bibliografia
http://www.ee.pucrs.br/~decastro/TPI/TPI_Cap2.pdf
www.celepar.pr.gov.br/arquivos/File/.../celepar_informativo2.pdf
http://www.ic.unicamp.br/cg/catalogos-de-graduacao/mc822teleprocessamento-e-redes/
Linguagem de
Programação de
Robôs
Linguagem de programação de robôs
A concepção de um robô envolve a criação de um conjunto de algoritmos,
permitindo cada um deles realizar uma função específica. A dinâmica, o controlo, o
planejamento de trajetória, a utilização de sensores são algumas das funções que
estes algoritmos implementam. Este conjunto de algoritmos utilizados para
completar as tarefas estão normalmente incluídos em módulos de software. No
entanto, existem diversas formas de comunicar com o robô, sendo importante
destacar três delas: reconhecimento de palavras, a estratégia "teach and playback" e
as linguagens de alto nível. Será essencialmente sobre estas últimas que o nosso
estudo recairá.
Os sistemas de reconhecimento de palavras encontram-se ainda num estado
primitivo e dependentes do orador. Estes sistemas podem reconhecer um conjunto
de palavras discretas de entre um vocabulário bastante restrito sendo, na maioria
dos casos, necessário que o orador efetue pausas entre palavras.
A segunda estratégia referida anteriormente é muito comum nos robôs industriais
dos dias de hoje. Este método envolve o ensino ao robôs dos movimentos que o
utilizador pretende que ele realize e caracteriza-se essencialmente por três fases.
Numa primeira fase, o utilizador guia o robôs usando os comandos manuais por
todos as fases que constituem a tarefa a realizar registrando todos os ângulos e
localizações dos braços do robô e do próprio robô por forma a poder repetir o
processo. Numa segunda fase será necessário editar, inserir e recapitular os
movimentos ensinados ao robô. Finalmente, se os movimentos estiverem corretos é
possível passar para a utilização prática do robô. Em caso contrário será necessário
repetir todo o processo.
As linguagens de programação permitem uma abordagem mais geral para resolver o
problema das comunicações Homem-Máquina. A programação de robôs, no
entanto, difere de forma significativa da programação tradicional. Existem alguns
pormenores que devem ser considerados antes de iniciar a programação de um
robô. Por um lado, os objetos a manipular são tridimensionais e operam num espaço
físico complexo. Por outro lado, a descrição e representação do conhecimento são
imprecisas sendo necessário obter, tratar e utilizar um quantidade considerável de
informação proveniente dos diversos sensores.
As linguagens de programação podem ser divididas em duas categorias
fundamentais: linguagens nível robô e linguagens nível tarefa. Na programação
orientada ao robô, uma tarefa é explicitamente definida como uma seqüência de
movimentos do robô. O robô é guiado e controlado por um programa durante toda a
execução da tarefa existindo quase que uma correspondência entre cada linha de
código e a cada operação efetuada. Por outro lado, as linguagens orientadas à
tarefa, definem uma tarefa como um conjunto de objetivos posicionais dos objetos
em vez dos movimentos necessários para atingir esses mesmos objetivos. Estas
abordagens são discutidas em detalhe nos dois pontos seguintes.
Linguagens nível robô
A abordagem mais comum utilizada aquando da concepção de uma linguagem ao
nível do robô consiste em entender uma linguagem de alto nível já existente de
forma a satisfazer os requisitos da programação de robôs. A maioria destas
linguagens apresentam características chave que são comuns umas às outras.
Vejamos um exemplo que elucidará o funcionamento deste tipo de abordagem:
colocar uma rolha numa garrafa, estando a rolha numa caixa de rolhas. Os passos
utilizados para elaborar este programa seriam os seguintes. Numa primeira fase,
definir a área de operação. De seguida, seria necessário estabelecer a posição e
orientação dos objetos e das suas características numa estrutura de dados definida
pela linguagem utilizada. Numa terceira fase, dividir-se-ia a tarefa em seqüências de
ações (por exemplo mover o robô, pegar numa rolha da caixa, inserir rolha na
garrafa). Após o estabelecimento da referida seqüência seria necessário adicionar
comandos sensoriais para detectar situações anormais e para supervisionar a
evolução da tarefa. Finalmente dever-se-ia depurar todo o programa e refiná-lo
repetindo os passos anteriores à exceção do primeiro. Convém referir, que as duas
linguagens mais utilizadas são a AL desenvolvida na universidade de Standford e a
AML desenvolvida pela IBM. A preferência por estas duas linguagens não é
arbitrária. A AL influenciou o desenvolvimento de muitas linguagens orientadas ao
robô e ainda está a ser desenvolvida. Fornece um vasto conjunto de comandos para
fazer face aos requisitos da programação de robôs e suporta também programação
de alto nível. A linguagem AML está disponível como um produto da IBM para o
controlo dos se us robôs sendo a sua abordagem um pouco diferente da anterior. A
sua filosofia consiste em fornecer um ambiente onde diferentes interfaces de
programação de robôs possam ser construídas. Deste modo contém um vasto
conjunto de primitivas para operações em robôs que permitem aos utilizadores
definir comandos de alto nível de acordo com as suas necessidades. Estas duas
linguagens são a referência no mundo das linguagens de programação orientadas a
robôs.
Linguagens nível tarefa
Uma abordagem bem diferente na programação de robôs é a utilizada nas
linguagens nível tarefa. A forma natural para descrever uma tarefa é feita em termos
de objetos que são manipulados em vez de movimentos do robô. As linguagens
nível tarefa tiram partido deste fato e simplificam a tarefa de programação.
Um sistema de programação orientado à tarefa permite ao utilizador descrever uma
tarefa numa linguagem de alto nível (especificação da tarefa). De seguida, o
planejador de tarefas consulta a base de dados, que contém modelos de mundos, e
transforma a especificação da tarefa num programa nível robô que efetuara a tarefa.
Desta forma, podemos dividir o planejamento de tarefas em três fases: modelamento
do mundo, especificação de tarefas e síntese do programa.
O modelamento do mundo é necessário para descrever as propriedades
geométricas e físicas dos objetos (robô incluído) e para representar o estado dos
objetos, em termos de programação, na área de atuação. O modelo geométrico
fornece informação espacial, como a dimensão, o volume, a forma dos vários
objetos. As propriedades físicas como a inércia, a massa e a fricção podem limitar o
tipo de movimento que o robô pode efetuar.
A especificação de tarefas é feita com uma linguagem de alto nível. Ao nível mais
elevado teríamos uma linguagem natural como entrada não sendo necessário
especificar nenhum passo computacional. No entanto, o estado de desenvolvimento
das entradas encontra-se um pouco distante do estado descrito. A abordagem
utilizada consiste no uso de uma linguagem com uma sintaxe e semântica bem
definidas onde a seqüência computacional tem que ser fornecida sendo que cada
tarefa pode ser descrita como uma seqüência de estados no mundo real.A síntese
do programa para o robô a partir da especificação da tarefa é um dos passos mais
importantes e difíceis do planejamento de tarefas. Não será aqui discutido a
evolução de todo o programa que permitirá ao robô cumprir as tarefas que foram
especificadas, devido essencialmente à sua complexidade e extensão.
Bibliografia
http://paginas.fe.up.pt
Softwares para
Engenheiros
AutoCAD é um software do tipo CAD — computer aided design ou desenho
auxiliado por computador - criado e comercializado pela Autodesk, Inc. desde 1982.
É utilizado principalmente para a elaboração de peças de desenho técnico em duas
dimensões (2D) e para criação de modelos tridimensionais (3D). Além dos desenhos
técnicos, o software vem disponibilizando, em suas versões mais recentes, vários
recursos para visualização em diversos formatos. É amplamente utilizado em
arquitetura, design de interiores, engenharia mecânica, engenharia geográfica e em
vários outros ramos da indústria. O AutoCAD é atualmente disponibilizado apenas
em versões para o sistema operacional Microsoft Windows, embora já tenham sido
comercializadas versões para UNIX e Mac OS.
CATIA é um pacote integrado de programas que inclui todos os aspectos de
concepção de produtos, como são o CAD (desenho assistido por computador), a
CAE (engenharia assistida por computador) e o CAM (fabrico assistido por
computador), graças a funcionalidades que suportam todo o tipo de concepção de
produtos em colaboração e facilita a integração fácil, necessária para o apoio
integral dos processos da empresa.
SolidWorks baseia-se em computação paramétrica, criando formas tridimensionais
a partir de formas geométricas elementares. No ambiente do programa, a criação de
um sólido ou superfície tipicamente começa com a definição de topologia em um
esboço 2D ou 3D. A topologia define a conectividade e certos relacionamentos
geométricos entre vértices e curvas, no esboço e externos ao esboço.
Com Pro/ENGINEER, os modelos digitais de alta qualidade possuem
associatividade de forma que as modificações de produtos feitas em qualquer etapa
do desenvolvimento se disseminem e, imediatamente, atualizem todas as outras
etapas do projeto. Necessariamente, é o que há de mais importante para se poder
confiar no produto digital antes de se investir dinheiro em matéria-prima, capacidade
de fabricação e volume de produção. O poder de criar em alta qualidade, no menor
tempo, modelos digitais mais precisos - é isto que o Pro/ENGINEER faz.
MicroStation é uma poderosa plataforma de software para projetos de arquitetura,
engenharia, construção e operação. No início, o MicroStation foi usado nos campos
da engenharia e arquitectura sobretudo para criar desenhos de construções, no
entanto evoluiu ao longo das suas várias versões para incluir recursos avançados
nos campos da modelagem e rendering, incluindo sólidos booleanos, raytracing, e
animação por keyframe animation. Providencia ambientes especializados para
arquiectura, engenharia civil, cartografia, desenho arquitetônico e outros. Várias
extensões do MicroStation melhoram a usabilidade do modelo 3D para além de
mero desenho e apresentação. Eles podem providenciar listas de materiais incluídos
no desenho, uma sequência cronológica para a construção, controlo de
interferências entre objectos, publicação de todos os desenhos automaticamente
numa página de internet pública, ou oferecem um modelo privado da planta,
incluindo a sua operação virtual (simulação) para efeitos de treino e teste.
O Minitab é um programa de computador proprietário voltado para fins estatísticos.
É muito utilizado nas universidades nos cursos introdutórios de estatística. Também
é utilizado em empresas num nível mais avançado de utilização, tendo funções mais
específicas voltadas para gerenciamento. Sua interface é parecida com a de uma
planilha eletrônica como Microsoft Excel ou Calc do OpenOffice mas com a
capacidade de executar análises estatísticas complexas. O programa foi
desenvolvido em 1972. O Minitab geralmente é utilizado em conjunto com o Seis
Sigma, que é uma forma de aperfeiçoar processos rotineiros. Diferenciais Fácil de
usar e de aprender, o Minitab 15 oferece ferramentas de Controle da Qualidade,
Planejamento de Experimentos (DOE), Análise de Confiabilidade e Estatística Geral,
além de ser o software mais utilizado no desenvolvimento de projetos Seis Sigma.
Outros diferenciais:
MATLAB (MATrix LABoratory) é um software interativo de alta performance voltado
para o cálculo numérico e integra análise numérica, cálculo com matrizes,
processamento de sinais e construção de gráficos em ambiente fácil de usar onde
problemas e soluções são expressos somente como eles são escritos
matematicamente, ao contrário da programação tradicional.O MATLAB é um sistema
interativo cujo elemento básico de informação é uma matriz que não requer
dimensionamento. Esse sistema permite a resolução de muitos problemas
numéricos em apenas uma fração do tempo que se gastaria para escrever um
programa semelhante em linguagem Fortran, Basic ou C. Além disso, as soluções
dos problemas são expressas quase exatamente como elas são escritas
matematicamente.
Bibliografia
http://www.ecivilnet.com/softwares/cadnorma.htm

Documentos relacionados