Muitos usuários do AS/400, ao longo do tempo, consideraram a possibilidade de integrar um banco de dados relacional a seus sistemas, especialmente porque a maior parte dos computadores modernos, incluindo PCs, utiliza bancos de dados relacionais que precisam ser adquiridos separadamente e integrados ao sistema operacional. Esse pensamento estava alinhado com a ideia de que o AS/400, como qualquer outro sistema moderno, deveria incorporar um banco de dados relacional. Contudo, essa percepção estava longe de refletir a realidade do AS/400, pois seu banco de dados é integrado de forma tão profunda ao sistema que não pode ser comparado facilmente com as abordagens convencionais de banco de dados.
A grande diferença entre o banco de dados do AS/400 e as soluções tradicionais é a forma como ele está integrado ao sistema. Nos bancos de dados tradicionais, o banco é um componente independente que opera sobre o sistema operacional, ou seja, um programa precisa passar pelo sistema operacional ou usar uma interface separada para acessar o banco de dados. No AS/400, no entanto, o banco de dados está espalhado de maneira integrada entre os diferentes componentes do sistema. A integração com o sistema operacional é mais profunda, o que resulta em uma maior eficiência. Ao contrário das abordagens convencionais, o banco de dados do AS/400 não exige interfaces separadas ou sobrecarga adicional para acesso, sendo muito mais direto e eficaz.
Essa integração não é apenas uma questão de conveniência; ela também confere uma performance significativamente superior, pois os dados são processados de maneira mais próxima do núcleo do sistema, o que torna o processo de manipulação de dados muito mais rápido. Além disso, a comunicação entre o banco de dados e outros componentes do sistema é muito mais fluida e eficiente do que em sistemas convencionais, onde o banco de dados é tratado como um módulo à parte, muitas vezes com limitações em termos de comunicação direta.
De fato, a IBM levou algum tempo para abordar a ideia de um banco de dados integrado no AS/400 de maneira clara. A dificuldade estava em como descrever algo que não era um banco de dados tradicional, mas que, ao mesmo tempo, atendia de forma robusta a todas as necessidades dos usuários. Isso gerou confusão entre os clientes, muitos dos quais ainda associavam a ideia de um banco de dados relacional a uma solução externa, como as oferecidas por empresas como Oracle ou Sybase. Mesmo após a evolução do DB2/400, muitos questionavam por que o AS/400 não oferecia a possibilidade de usar essas outras soluções de banco de dados, como se fosse necessário ter a interface do Oracle ou do Sybase no sistema.
Essa questão gerou um debate interessante sobre as limitações e vantagens de se depender de um único banco de dados no AS/400. A principal desvantagem, que se refletia em alguns casos, estava nas ferramentas oferecidas para gerenciar e manipular o banco de dados. Embora o DB2/400 tenha evoluído consideravelmente, ainda havia uma percepção de que as ferramentas de administração de dados estavam um passo atrás em relação às ferramentas disponíveis para bancos de dados convencionais. Em outras palavras, as interfaces e ferramentas para interação com o banco de dados do AS/400 ainda não estavam no mesmo nível das disponíveis em outros bancos de dados.
O conceito de banco de dados relacional no AS/400 tem raízes no sistema System/38, que foi um dos primeiros a desenvolver um banco de dados relacional integrado. Antes disso, os sistemas como o System/3 trabalhavam com processamento de arquivos em lotes e os dados eram processados de maneira sequencial, usando cartões perfurados e arquivos ordenados. Esse modelo foi aprimorado com o System/34 e System/36, que introduziram um tipo de operação em que a busca por dados se tornou mais eficiente, eliminando a necessidade de acessar o índice no disco e melhorando a interação com o hardware do disco. Porém, o grande salto na evolução dos bancos de dados veio com o System/38, que adotou a abordagem de armazenar todos os arquivos e índices diretamente na memória, permitindo um acesso mais rápido e eficaz aos dados.
Essa evolução do processamento de dados, que começou com a necessidade de melhorar a eficiência das operações em sistemas como o System/3, culminou em uma arquitetura de banco de dados totalmente integrada no AS/400. Esse modelo de banco de dados é único, pois evita as limitações dos sistemas convencionais, como a necessidade de gerenciar múltiplos componentes separados e a complexidade de interações externas entre o sistema operacional e o banco de dados.
É fundamental entender que a verdadeira força do AS/400 não reside apenas no seu banco de dados, mas também na forma como ele se integra ao restante do sistema. Essa integração, que inicialmente pode ser difícil de perceber, oferece um desempenho e uma eficiência que os bancos de dados externos não podem alcançar facilmente. A concepção de um banco de dados como um componente independente, muitas vezes difícil de interagir diretamente com outras partes do sistema, já é uma prática ultrapassada, com cada vez mais sistemas operacionais reconhecendo as vantagens de uma abordagem integrada. Isso também é visível no Windows NT, que adotou o SQL Server como parte integrante do sistema, seguindo uma tendência que o AS/400 já implementava com sucesso.
A adaptação do AS/400 a uma era em que bancos de dados externos eram considerados essenciais teve um impacto direto na forma como os usuários viam e usavam o sistema. No entanto, esse impacto foi também uma oportunidade para refletir sobre a verdadeira natureza da tecnologia de bancos de dados e sobre como a integração pode melhorar a eficiência e reduzir a complexidade. Embora os sistemas tradicionais de banco de dados ainda sejam populares e amplamente utilizados, o modelo integrado do AS/400 se mostra uma solução mais eficiente e moderna, desafiando as convenções da época em que foi lançado.
O que é a single-level store no AS/400 e qual sua importância?
No AS/400, a single-level store é um conceito arquitetônico que, embora fundamental para o funcionamento do sistema, permanece invisível para a maioria dos usuários e até para os componentes do sistema operacional e compiladores. Ninguém além da camada MI (Machine Interface) tem contato direto com a single-level store, que não é acessada por endereços convencionais, mas sim por meio de objetos referenciados por nome. Essa abordagem redefine completamente como a memória e o armazenamento são percebidos internamente, pois, na prática, o que mais se aproxima de memória na camada MI é um “espaço”, que está longe de ser um armazenamento convencional.
Programadores de aplicação, como em qualquer sistema, não manipulam discos diretamente; essa responsabilidade está integrada ao sistema de arquivos, que no AS/400 é completamente integrado e se assemelha ao que se encontra em PCs ou sistemas Unix. O tempo prolongado no IPL (Initial Program Load) ocorre devido à necessidade de reconstruir caminhos de acesso, um processo não relacionado diretamente à single-level store. Objetos no AS/400 são distribuídos em múltiplos discos para otimizar o desempenho, permitindo que partes de um mesmo objeto sejam acessadas em paralelo, ampliando a eficiência do sistema — uma característica independente da single-level store.
Embora a single-level store não seja algo que o usuário comum perceba, seus benefícios são tangíveis, especialmente em termos de desempenho. Essa arquitetura reduz significativamente o número de instruções necessárias para muitas funções do sistema operacional, acelerando tanto o software acima quanto abaixo da camada MI. A single-level store vai muito além de um simples espaço de endereçamento de 64 bits.
Falando em 64 bits, o espaço de endereçamento que ela oferece equivale a impressionantes 16 exabytes, ou cerca de 18,4 quintilhões de bytes — uma quantidade quase inimaginável. Analogias ajudam a dimensionar essa magnitude: por exemplo, o número de bytes endereçáveis com 64 bits é aproximadamente duas vezes o número de milímetros em um ano-luz, e chega a cerca de metade da distância até a estrela Alpha Centauri, a mais próxima do sistema solar, medida em milímetros. Esse espaço colossal assegura que o AS/400 possa gerenciar grandes volumes de dados e objetos com extrema eficiência.
Historicamente, o conceito de single-level store remonta ao desenvolvimento do System/38 na década de 1970, uma revolução em relação aos sistemas convencionais da época. O desenvolvimento desse sistema enfrentou desafios logísticos, como a escassez de espaço físico para a equipe de engenharia e a necessidade de improvisar instalações temporárias, o que refletiu a magnitude e a importância do projeto.
É crucial entender que a single-level store representa uma abstração que unifica memória e armazenamento em um único espaço endereçável. Isso elimina a distinção tradicional entre memória volátil e armazenamento persistente para o programador, simplificando o desenvolvimento e melhorando a integridade dos dados. Além disso, o gerenciamento por objetos e a ausência da necessidade de manipulação direta de endereços tornam o sistema mais seguro e robusto.
A arquitetura também favorece a escalabilidade e o paralelismo, pois objetos podem ser espalhados em múltiplos discos e acessados simultaneamente, o que, somado à enorme capacidade de endereçamento, permite ao AS/400 lidar com cargas de trabalho intensas e crescentes sem perda significativa de desempenho.
A single-level store, portanto, não é apenas uma inovação técnica, mas uma filosofia de design que impacta profundamente como sistemas modernos podem ser construídos para oferecer alta performance, segurança e facilidade de uso. Para o leitor, compreender essa arquitetura é entender a base sobre a qual sistemas robustos e confiáveis são desenvolvidos, abrindo portas para uma visão mais ampla da evolução da computação corporativa.
Como Funciona a Atribuição de Tarefas em Processadores Multiprocessados e sua Relação com a Afinidade de Cache
Quando um sistema multiprocessado é usado, o processador que executa o despachante de tarefas (task dispatcher) tem acesso a todas as filas de tarefas, incluindo a TDQ (Task Dispatcher Queue). No entanto, os efeitos desse despachante não se limitam ao processador onde ele está executando. O despachante de tarefas pode provocar uma mudança de tarefa em outro processador, o que implica que as tarefas em execução em processadores distintos podem ser interdependentes. Em sistemas com múltiplos processadores, várias tarefas podem estar sendo executadas simultaneamente, uma para cada processador.
De forma simplificada, seria possível apenas despachar as n tarefas mais prioritárias na TDQ. Essas n tarefas são as que possuem as maiores prioridades entre as tarefas prontas para execução. Contudo, embora essa abordagem simples pareça ser a melhor escolha em teoria, na prática ela nem sempre é a mais eficiente.
Consideremos o cenário de um sistema com dois processadores. Suponhamos que duas tarefas, A e B, estejam sendo executadas nos processadores 1 e 2, respectivamente. Agora, imagine que uma terceira tarefa, C, que possui uma prioridade superior à tarefa A, mas inferior à tarefa B, saia do estado de espera e seja colocada na fila TDQ logo acima da tarefa A. O despachante de tarefas irá provocar uma mudança de tarefa no processador 1, fazendo com que a tarefa C seja executada.
Porém, caso a tarefa B no processador 2 termine ou entre em espera, seria natural que a tarefa A, agora a mais prioritária, fosse despachada para o processador 2. Isso parece lógico, mas há fatores que podem tornar essa escolha não tão vantajosa.
Se a tarefa A foi interrompida recentemente, há uma boa chance de que seu contexto, incluindo instruções e dados, ainda estejam presentes no cache do processador 1. Atribuir a tarefa A ao processador 2, portanto, exigiria que os dados fossem recarregados no cache do novo processador, o que acarretaria uma perda de desempenho. Nesse caso, pode ser mais vantajoso despachar uma tarefa de menor prioridade para o processador 2 e aguardar até que o processador 1 fique disponível para retomar a execução de A.
Este fenômeno é conhecido como afinidade de cache, um conceito crucial em sistemas multiprocessados. A afinidade de cache implica que uma tarefa pode ter uma preferência por um processador específico, dependendo do conteúdo do cache daquele processador. A atribuição de tarefas em sistemas multiprocessados como o AS/400 leva em consideração não apenas a prioridade das tarefas, mas também sua afinidade de cache e uma característica adicional chamada elegibilidade.
A elegibilidade é uma forma de restringir a execução de uma tarefa a um subconjunto de processadores. No entanto, a elegibilidade nunca é ignorada pelo despachante de tarefas. Se todos os processadores aos quais uma tarefa é elegível estão ocupados com tarefas de maior prioridade, a tarefa não será despachada. Ela só será atribuída a um processador se o processador com o qual ela tem afinidade de cache estiver disponível. Em casos excepcionais, se não despachar a tarefa fizer com que um processador permaneça ocioso ou se um número excessivo de tarefas de maior prioridade for ignorado, a afinidade é ignorada, e a tarefa pode ser atribuída a qualquer processador elegível.
Um mecanismo adicional que permite a flexibilidade na atribuição de tarefas é o limite de pulo (skip threshold). Este limite é ajustado dinamicamente, e a afinidade de cache é desconsiderada caso o número de tarefas ignoradas atinja o limite estabelecido, garantindo que os processadores não fiquem inativos por longos períodos. Quando o limite de pulo é alcançado, o despachante começa a atribuir tarefas a qualquer processador disponível.
Para gerenciar essas atribuições, o TDE (Task Descriptor Entry) contém três campos principais usados no despachamento de tarefas em sistemas multiprocessados:
-
Campo de Elegibilidade – Cada bit desse campo indica a elegibilidade de uma tarefa para ser executada em um processador específico.
-
Campo Ativo – Cada bit nesse campo indica o processador no qual a tarefa está atualmente ativa. No máximo, um bit pode estar ativado, indicando o processador no qual a tarefa está em execução.
-
Campo de Afinidade – Esse campo indica o processador no qual a tarefa foi executada por último, o que ajuda a determinar sua afinidade de cache com determinados processadores.
Além disso, sistemas AS/400 podem usar várias filas TDQ para o despacho de tarefas. Em sistemas com grande número de processadores, uma única fila pode se tornar um gargalo, o que leva à necessidade de usar múltiplas filas para distribuir as tarefas de maneira mais eficiente.
A evolução dos processadores SMP (Symmetric Multi-Processing) com memória compartilhada, onde todos os processadores operam a partir da mesma memória, é um aspecto fundamental do design do AS/400. A tarefa de despachar tarefas dentro desse sistema é complexa, envolvendo a combinação de prioridades, afinidade de cache e elegibilidade para determinar qual processador deve executar qual tarefa.
Em termos de arquitetura de multiprocessamento assimétrico (ASMP), esse modelo permite que diferentes processadores executem partes específicas do sistema operacional ou até sistemas operacionais distintos. No contexto do AS/400, isso pode significar que processadores dedicados à execução de funções de I/O ou outras funções específicas, como gerenciamento de banco de dados, possam trabalhar de forma independente. Este modelo, embora nunca tenha sido plenamente utilizado no System/38, foi implementado no AS/400 e serve de base para a execução de múltiplos sistemas operacionais e aplicações dentro de um único sistema.
Ao lidar com a atribuição de tarefas em sistemas multiprocessados, é importante entender como a afinidade de cache pode afetar o desempenho. No entanto, é igualmente crucial compreender que, embora a prioridade das tarefas seja uma consideração importante, outros fatores como a elegibilidade e a utilização eficaz dos recursos de processamento disponíveis podem ser mais determinantes para a performance geral do sistema. A decisão sobre qual tarefa despachar e em qual processador executá-la não é tão simples quanto seguir uma lista de prioridades. O contexto de execução e a dinâmica do sistema desempenham papéis igualmente críticos nesse processo.
Como Funciona o Gerenciamento de Processos no Sistema AS/400
O gerenciamento de processos no sistema AS/400 é uma área crucial para entender o funcionamento interno dessa plataforma, que é conhecida pela sua complexidade e eficiência. Dentro desse contexto, o conceito de "activation group" (grupo de ativação) é central. Este grupo não é um objeto do sistema MI, mas sim uma parte integrante de um objeto de processo MI. Cada objeto de processo MI contém dois ou mais activation groups, sendo que um deles é utilizado pelo sistema e o outro é destinado ao usuário. Quando um processo original criado em um sistema de processador IMPI é transferido para um sistema de processador RISC, esse processo é transformado em um processo ILE, contendo um único grupo de ativação de usuário.
O papel do activation group vai além de simplesmente dividir o armazenamento utilizado por um processo. Ele contém suas próprias informações de controle, o que permite que cada ativação tenha diferentes estados de proteção, controle de uso de arquivos e controle de compromisso. Isso oferece grande flexibilidade para os trabalhos que ocorrem acima do MI, permitindo que o sistema seja ajustado conforme as necessidades específicas de cada processo.
É importante observar que todos os grupos de ativação têm nomes, que podem ser explicitamente atribuídos pelo usuário ou implicitamente definidos pelo sistema. Programas e serviços podem especificar de forma explícita qual grupo de ativação nomeado eles devem executar, podendo até mesmo fazer com que o grupo de ativação seja implicitamente criado quando o objeto do programa é chamado.
O processo ILE, por sua vez, é estruturado de forma complexa, utilizando uma série de acrônimos e componentes que podem parecer enigmáticos até mesmo para especialistas da área. A estrutura do processo ILE é composta por vários elementos que trabalham juntos para garantir o funcionamento do sistema de forma eficiente. Abaixo, são definidos alguns dos componentes principais dessa estrutura:
-
Process Control Block (PCB): O PCB é uma estrutura contida no objeto do sistema que representa um processo MI. Ele contém, entre outras coisas, o TDE (Tabela de Definição de Execução) do processo e os endereços de outros componentes associados ao processo.
-
Process Activation Work Area (PAWA): A PAWA é uma área de memória usada para alocar estruturas de tempo de execução, como os grupos de ativação. Cada processo possui uma PAWA.
-
Parent Activation Group (PAGP): O PAGP é a estrutura raiz da subestrutura do processo. Ele contém uma lista de todos os grupos de ativação para o processo, mas não é um grupo de ativação em si.
-
Activation Group (ACTGRP): O ACTGRP fornece os recursos de armazenamento (pilha, armazenamento estático e heap) para as ativações de programas. Ele pode ser visto como um mini-processo, funcionando de forma independente dentro da estrutura maior do processo.
-
Tombstone Segments: Esses segmentos são usados para construir ponteiros de objetos de processo (POPs), que funcionam como "ganchos" para estruturas SLIC. Embora esses ponteiros não proporcionem acesso direto às estruturas SLIC, eles são vitais para o gerenciamento de memória e segurança do sistema.
Além desses componentes principais, há o Process Queue Space, que contém uma ou mais filas de envio/recebimento (SRQs) para armazenar mensagens. Cada processo possui seu próprio espaço de fila, facilitando a comunicação entre diferentes partes do sistema.
Dentro de um activation group, encontramos componentes adicionais que ajudam a gerenciar a execução dos programas. Entre esses componentes estão:
-
Program Activation Control Block (PACB): O PACB é uma estrutura de endereçamento usada durante a execução de um programa, permitindo localizar dados e procedimentos vinculados ao programa.
-
Module Binding Vector (MBV): O MBV contém os endereços de tempo de execução dos dados e procedimentos referenciados por um módulo.
-
Activation Group Directory: Este diretório simbólico permite o vínculo tardio entre dados e programas, facilitando o gerenciamento dinâmico da memória e a execução de processos.
-
Procedure Reference Table (PRT): Contém as entradas de procedimentos usados por chamadas entre grupos de ativação e ponteiros de procedimentos.
-
Heap List e Heap Spaces: Estes gerenciam o armazenamento dinâmico alocado para o grupo de ativação.
-
Auto Storage Segments e Static Storage Segments: Responsáveis pela alocação de armazenamento automático e estático, usados pelo grupo de ativação durante a execução dos programas.
Por fim, quando um processo não segue as regras estabelecidas, é necessário tratá-lo de maneira especial, o que é feito através de exceções, eventos e interrupções. Interrupções, em particular, são fundamentais para a mudança do fluxo normal de execução, podendo ser causadas por falhas no hardware ou pela finalização de uma operação de I/O, por exemplo. No nível do hardware, o PowerPC (usado pelo AS/400) implementa um mecanismo completo de interrupção, permitindo que o processador altere seu estado em resposta a sinais externos, erros ou condições incomuns no processamento de instruções.
Em suma, o gerenciamento de processos no AS/400 exige uma compreensão detalhada das suas estruturas internas e do papel dos grupos de ativação. Estes grupos não só garantem o armazenamento necessário para a execução dos processos, mas também permitem um controle dinâmico e flexível das suas características operacionais. Compreender como esses componentes interagem é essencial para otimizar o desempenho e a segurança do sistema.
O Papel do Conhecimento e da Compreensão nas Teorias Epistemológicas
Como Especificar e Validar Problemas em Programas de Computador: Garantindo a Correção das Especificações
Como o Discurso Público de Ódio de Trump Afeta as Comunidades Indígenas e as Minorias nos EUA
Como a Dose e o Mecanismo de Ação de Anticonvulsivantes Influenciam o Tratamento e a Tolerância

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский