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