O Algoritmo Mãe

O Algoritmo Mãe

  • Em 18 de novembro de 2021

A Engenharia de Softwares é um dos ofícios que sustentam a revolução tecnológica moderna e ela foi idealizada com base no processo de desenvolvimento do algoritmo mais complexo da história da computação: O Algoritmo do Sistema Operacional para o Computador de Orientação da Apolo 11 (Apollo Guidance Computer – AGC).

A complexidade deste algoritmo não está no algoritmo propriamente dito, desenvolvido em Assemble no final da década de 1960, e sim na forma como foi desenvolvido, pois estava muito afrente de seu tempo, mesmo para a NASA ou o MIT, e deu origem a muitos dos conceitos atuais de desenvolvimento para a Engenharia de Software. Mas para entender isso, antes, precisamos entender como o algoritmo do AGC funcionava.

O Sistema Operacional do AGC

[IMAGEM 1: Apollo Guidance Computer – AGC]

Na época em que a missão da Apollo 11 rumo a Lua iniciou, o sistema operacional que executou a missão poderia ser alocado em um pequeno conjunto de núcleos magnéticos de somente leitura. Isso garantia que as informações fossem acessadas a qualquer momento e executadas quase simultaneamente, o que era de grande importância na época.

Considere o momento de pousar na Lua, por exemplo: O computador precisava receber vários pontos de dados, simultaneamente, para facilitar um bom pouso. Tinha que saber onde o módulo lunar estava, onde está e para onde se movia, informação chamada Vetor de Estado. Ele precisava manter a altitude correta com base nessa informações de posição, assim como velocidade, direção e dados de desempenho do motor. Ele também precisava ajustar a trajetória de retorno constantemente, pronto para colocar a tripulação de volta à órbita se algo forçasse uma interrupção.

[IMAGEM 2: Trajetória da Missão Apolo 11]

Agora pense em uma missão de pouso lunar completa por um segundo:

  1. Decolagem;
  2. Entrar na órbita da Terra;
  3. Traçar a trajetória para a Lua;
  4. Acionar os motores para viajar em direção à Lua;
  5. Posicionar o módulo lunar;
  6. Entrar em órbita da Lua;
  7. Aterrissar na superfície da Lua;
  8. Sair da superfície da Lua;
  9. Traçar a rota de retorno;
  10. Acionar os motores para retornar;
  11. Entrar na atmosfera da Terra
  12. Iniciar procedimentos de pouso e, finalmente,
  13. pousar em segurança.

[IMAGEM 3: Módulo Lunar Luminary099]

Você pode começar a avaliar quantas informações iriam passar por esse computador a qualquer momento da trajetória da missão.

Por uma questão de simplificação e organização, cada tarefa (uma tarefa neste caso seria um único evento de missão como o pouso lunar) foi dividida em partes. Essas partes ou programas eram módulos gerenciáveis que podiam ser executados individualmente, tornando todo o sistema mais confiável.

Modularizar com Orientação a Objetos parece um processo muito simples e eficiente atualmente, porém, para o final da década de 1960, isso originou um novo problema em potencial: O AGC era um computador de processador único, single-user e single-task. Então, como ele poderia executar vários programas, as partes que compõem um evento de missão inteiro, simultaneamente? Bom, isso não aconteceu. Na verdade não. Mas entre velocidade de processamento relativamente rápida e percepção humana relativamente lenta, foi "simultânea" o suficiente para executar a missão sem problemas. Os módulos do algoritmo, cada parte, também foram programados e executados com base em prioridades, com medidas em vigor para interromper qualquer programa, caso algo vital surgisse.

No caso do AGC, ele tinha uma área de dados de 12 códigos chamada Core Set. Isso continha todas as informações para executar uma determinada parte do programa. Havia seis desses conjuntos principais no Módulo de Comando (Comanche055) e sete no Módulo Lunar (Luminary099). Em cada conjunto principal de 12 códigos, as informações de processamento ocupavam cinco códigos, uma para a prioridade do programa, endereço do ponto de entrada, cópia do registro do BBANK, sinalizadores e a última apontada para a área do Acumulador de Vetores ou VAC. Os sete espaços de códigos restantes foram deixadas para variáveis temporárias ou armazenamento extra, fossem elas quais fossem. Estes são chamados de Acumuladores Multipurpose ou MPAC.

Então, resumindo: doze códigos no Core Set, cinco códigos de memória para executar um processo (módulo ou programa), e os sete MPACs lidam com as informações extras conforme necessário.

Quando o agendamento de um programa cai para a execução, ele começa examinando o endereço inicial da tarefa e sua prioridade e passa para a rotina do NOVAC. Isso varre o conjunto principal para ver se há algum espaço disponível para execução do programa e, em caso afirmativo, onde está esse espaço. Em seguida, ele agenda e executa o programa/processo.

Através de testes exaustivos, a equipe do Laboratório de Instrumentação do MIT projetou o computador de tal forma que ele nunca estaria cheio em qualquer ponto de uma missão. Sempre haveria espaço disponível para o próximo programa, regras em vigor para interromper um programa se algo precisasse ser executado imediatamente ou espaço para agendar o programa depois do que estava sendo executado no computador. Mas quando a Apollo 11 estava descendo em direção à superfície lunar, o computador ficou sem Core Sets. É aqui que entram os alarmes 1201 e 1202 do programa – Os alarmes mais famosos e mais citados nos livros e filmes sobre a missão da Apolo 11.

 

O Alarme 1202 da Apolo 11

[IMAGEM 4: Módulo de Comando Comanche055]

Durante o inicio do programa de pouso na superfície lunar as Unidades de Dados de Acoplamento do radar estavam ‘inundando’ o AGC com sinais de interrupção de contagem. Isso ocorreu por um descuido na estrutura de projeto da fonte de alimentação do computador. Esses sinais estavam ocupando apenas um pouco do tempo de processamento do computador, mas o processo continuava rodando em segundo plano como um processo zumbi, ocupando espaço de memória. Assim, esse sinal impediu que os programas vitais associados ao pouso fossem concluídos. Quando uma nova tarefa era enviada ao computador, não havia espaço para alocar. Os processos em execução e agendados mantinham as áreas no Core Set e VAC sobrecarregadas.

Por fim, não havia lugar para colocar novos programas na execução. Isso acionou a sinalização de alarme 1201 “Executive Overflow - No Core Sets” e a sinalização de alarme 1202 “Executive Overflow - No VAC Areas”. Estes, por sua vez, acionaram a reinicialização do sistema. Todos os processos foram cancelados independentemente da prioridade e, em seguida, reiniciados de acordo com a ordem da tabela com rapidez suficiente para que não houvesse perda de orientação ou dados de navegação. Mas isso não esclareceu a questão. O computador ainda estava sobrecarregado pelos mesmos dados dos censores do radar, impedindo a execução de novos processos. Ao todo, o SO do AGC acionou quatro alarmes de 1202 e um alarme de 1201.

Por sorte, no segundo alarme 1202, Buzz Aldrin identificou que o mesmo espaço de memória foi usado para exibir o intervalo do pouso e alocar o Vetor de Estado (16/68 up Code). O comando em si não sobrecarregava o computador, mas com a carga existente, um pouco mais de poder de processamento parecia acionar o alarme 1202 impedindo a execução de novos processos. Percebendo isso, a solução era simples: solicitar a base de Houston para adicionar os dados de execução manualmente em vez de esperar pelo computador.

A Mãe da Engenharia de Softwares

[IMAGEM 5: Margaret Heafield Hamilton ao lado do código fonte do SO utilizado no AGC. O código fonte está disponível no GitHUB: https://github.com/chrislgarry/Apollo-11/]

O algoritmo do sistema operacional do AGC foi desenvolvido pelo 'Laboratório Stark' (Charles Stark Draper Laboratory - CSDL) nas dependências do Massachusetts Institute of Technology (MIT) sob direção e supervisão de Margaret Heafield Hamilton, considerada a mãe da Engenharia de Software.

Foi Margaret Hamilton a principal responsável pelos processos de desenvolvimento de softwares, pilares da Engenharia de Software moderna, os quais garantiram o sucesso na missão Apolo 11 em 1969. Foi ela, também, quem criou o termo 'Engenharia de Softwares' para o ofício.

Sobre Margaret Hamilton

Nascida em 17 de agosto de 1936, filha de Kenneth Heafield e Ruth Esther Heafield, Margaret Hamilton se formou na Hancock High School em 1954 e iniciou os estudos de Matemática na Universidade de Michigan. Formou-se em Matemática pelo Earlham College, no estado de Indiana (EUA), no ano de 1958, e fez pós-graduação em Meteorologia pelo Instituto de Tecnologia de Massachusetts. Posteriormente ela cursou pós-graduação em Matemática Pura na Universidade Brandeis.

Em 1960 assumiu uma posição interina no MIT para desenvolver programas de predição climatológica nos computadores LGP-30 e PDP-1 (no Project MAC de Marvin Minsky) para o professor Edward Norton Lorenz no Departamento de Meteorologia do MIT.

Naquela época, ciência da computação e engenharia de software não eram disciplinas universitárias. Em vez disso, entusiastas matemáticos aprendiam desenvolvendo projetos simples de forma a adquirir experiência e moldar a estrutura do conhecimento.

De 1961 a 1963 Hamilton trabalhou no Projeto SAGE no MIT, onde foi uma das primeiras programadoras a escrever software para o computador de interceptação AN/FSQ-7 Computer (the XD-1 computer) o qual procurava aeronaves "não-amigáveis" no espaço aéreo norte-americano. Foram seus esforços nesse projeto que a tornaram uma candidata para a posição na NASA como desenvolvedora líder do software de voo Apollo. Ela também escreveu software para o Air Force Cambridge Research Laboratories.

[IMAGEM 6: Margaret Hamilton durante seus testes no AGC para o projeto Apolo, no MIT]

Hamilton então se juntou ao Charles Stark Draper Laboratory, também no MIT, em 1964, que na época estava trabalhando na missão espacial Apollo, liderando e supervisionando a equipe de desenvolvimento do software para a Apollo e Skylab. A equipe de Hamilton foi responsável pelo desenvolvimento do SO do AGC como Software de Voo Interno responsável por controlar o módulo de comando da Apollo, o módulo lunar e o subseqüente Skylab, além do software de detecção e recuperação de erros, com reinícios e rotinas de interface de exibição (AKA the Priority Displays).

Margaret Hamilton produziu mais de 130 artigos, procedimentos e relatórios relacionados a ideias originais. 60 projetos e 6 programas principais nos quais esteve diretamente envolvida (cada programa com duração de aproximadamente 10 a 20 anos, compostos por uma infinidade de projetos sobrepostos, assíncronos e distribuídos, e muitas vezes se sobrepondo a outros programas).

Como experiência, Hamilton se destacou em Design de Sistemas e Técnicas de Desenvolvimento de Software; Modelagem de Empresas e Processos; Paradigma de Projeto e Desenvolvimento de Sistemas Preventivos; Linguagens de Modelagem de Sistemas Formais e Software; Sistemas Orientados a Objetos (OOS) para Modelagem e Desenvolvimento de Softwares; Ambientes Automatizados de Ciclo de Vida; Métodos para Maximizar a Confiabilidade do Software (minimizar o custo e o tempo); Métodos para Maximizar a Reutilização; Análise de Domínio; Correção por Propriedades de Linguagem Incorporadas; Técnicas de Arquitetura Aberta para Sistemas Robustos; Automação Completa do Ciclo de Vida; Garantia da Qualidade; Integração Perfeita (incluindo sistemas para software); Sistemas de Processamento Distribuídos Assíncronos; Detecção de Erros e Técnicas de Recuperação; Sistemas de Interface Homem/Máquina; Sistemas Operacionais; Técnicas de Teste; e Técnicas de Gerenciamento de Ciclo de Vida.

[IMAGEM 7: Margaret Hamilton e sua equipe de desenvolvimento atuando no Projeto Apolo pelo Charles Stark Draper Laboratory]

Entre as grandes realizações, Margaret Hamilton foi responsável pelo software de voo de bordo da Apollo (e Skylab), enquanto Diretora da Divisão de Engenharia de Software no Charles Stark Draper Laboratory. Isso envolvia projetos para várias versões, múltiplas missões, todas as fases de desenvolvimento, múltiplos componentes e funcionalidades para o software do Módulo Lunar (LM) e Módulo de Comando (CM); Projetos comuns de software e implementação (por exemplo, compartilhados entre LM e CM na missão Apollo para a Skylab); e desenvolvimento distribuído.

-“Durante esse período, criamos e desenvolvemos novos métodos para construir softwares de voo e aplicamos esses métodos ao desenvolvimento do software Apollo e Skylab e à definição dos requisitos de software do sistema Shuttle”.

Considerações Finais

Enquanto Diretora de Engenharia de Software na Charles Stark Draper Laboratory, Margaret Hamilton criou e desenvolveu a teoria matemática baseada em estudos empíricos do software de voo da Apollo, teoria a qual formou os pilares do Desenvolvimento de Sistemas e o Paradigma de Desenvolvimento de Software Development Before the Fact (DBtF).

[IMAGEM 8: Margaret Hamilton em 2018]

Atualmente Margaret Hamilton é Fundadora e CEO da Hamilton Technologies, Inc. - Empresa responsável pelo desenvolvimento do Paradigma de Design de Sistemas Development Before the Fact (DBtF), juntamente com sua linguagem de sistema formal, Universal Systems Lanuage (USL), e seu ambiente automatizado associado, o 001 Tool Suite, para definir Sistemas Orientados a Objetos (OOS), responsável pela linha de produtos 001 Tool Suite, que inclui componentes para o projeto completo de sistemas e ciclo de vida de desenvolvimento de softwares, além da teoria 001AXES e DBtF por trás dele.

 

Fontes

  • Sobre Margaret Hamilton: http://klabs.org/home_page/hamilton.htm
  • Sobre o Pioneirismo de Margaret Hamilton: https://publications.computer.org/software-magazine/2018/06/08/margaret-hamilton-software-engineering-pioneer-apollo-11/
  • Sobre o Alarme 1202 da Apolo 11: http://blogs.discovermagazine.com/vintagespace/2018/01/05/apollo-11s-1202-alarm-explained/#.W4VhAXVKiV5
  • Sobre o AGC: http://web.mit.edu/6.933/www/apollo.html
  • Introdução ao AGC: https://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/histintro.htm
Categoria:
    Tag:
      ASAAS Governo Federal AWS Governo Municipal HostDime ASAAS Governo Federal AWS Governo Municipal HostDime