PROGRAMAÇÃO - 0001

 

Programação - 0001

Binário & Memória 

z/OS

 



 

Valtinho IBM- z/OS


INTRODUÇÃO

A programação de computadores continua, independente da linguagem utilizada, utilizando os mesmos princípios desde antes da primeira máquina eletrônica. Esses princípios têm como base o código binário e a álgebra booleana que se adequam perfeitamente ao padrão exclusivamente binário dos processadores.

Ao longo de décadas muitas linguagens de programação foram desenvolvidas para tornar mais fácil a interação entre ser humano e máquina, porém os princípios de programação foram sendo retirados das grades do ensino acadêmico para profissionais de TI, causando considerável vazio de conhecimento. 

Conhecer estes princípios permite ao programador entender os recursos da máquina e fazer melhor uso, criando programas mais eficientes e com menor uso de recursos. 

Nota do autor

Para os já experientes na plataforma z/OS e na infraestrutura z System, quero deixar claro que algumas analogias e explicações carecem de melhor detalhamento, porém, saliento que este material visa o público menos experiente e estou procurando passar as informações da forma mais simples ainda possua algum pecado original. Comentários e sugestões são bem vindos.

Sistemas Numéricos

Para entender os princípios da programação, é necessário entender como o processador armazena as informações. Esse entendimento passa necessariamente pela formação de sistemas numéricos, os quais suportam todas as operações internas do computador a partir da base mais simples possível, a binária.



Representação Gráfica

A representação gráfica dos números que usamos atualmente é denominada “Arábica” ou “Indo-Arábica” { 1 2 3 4 5 6 7 8 9 0}, tem base decimal, por sua facilidade de uso virou padrão mundial. Se alguém tem alguma dúvida das facilidades em usar essa representação gráfica para realizar cálculos, sugiro tentar resolver a multiplicação de 1234 por 7 utilizando algarismos romanos que seria “MCCXXXIV” por “VII” .

 

Bases numéricas

Bases são as possíveis combinações de algarismos para representar um conjunto máximo de unidades suportado por um determinado sistema, temos como exemplo no nosso dia a dia:

Decimal, base 10, por exemplo a quantidade máxima suportada para contar nos dedos,

Duodecimal, base 12, o número 12 pode ser divido por (1, 2, 3, 4, 6 e 12), essa característica tornou essa base muito utilizada no comercio de consumo alimentar por facilitar a divisão equalitária para famílias com diferentes número de indivíduos.

Binário, base 2, muito utilizado em eletrônica, os transistores são os elementos que determinam justamente a passagem ou não de corrente ou o estado ligado/desligado em um circuito.

Hexadecimal, base 16, seu principal uso atual está associado à forma de funcionamento de memória e processadores em máquinas digitais.

Bases numéricas - geral

De início é necessário esclarecer que a representação gráfica de um valor em base não pode ser confundida na leitura e interpretação com representação decimal, haja vista que pelo aprendizado desde o início da vida nos é natural.

Temos somente “n-1” símbolos para representar os valores de uma base, mais o símbolo “0 (zero)”.

Por exemplo, base decimal teremos 9 símbolos mais o “0 zero”, base binária teremos 1 símbolo mais o “0 zero”

Na prática, não se aplica um símbolo para a valor quantitativo representado pela base, tomando como exemplos as bases decimal e binária.

Decimal, quando é adicionado 1 elemento a 9 elementos, desloca-se o símbolo 1 para a direita e acrescenta o zero, resultado = 10 (total de elementos representados, dez)

Binários, quando é adicionado 1 elemento a 1 elemento, desloca-se o símbolo 1 para a direita e acrescenta o zero, resultado =10 (total de elementos representados, dois)

Base Decimal

Pode-se dizer que a utilização dos dedos da mão para quantificação é quase um consenso entre historiadores da matemática, há relatos históricos sobre utilização de pedras para contagem de ovelhas por pastores cada pedra representava um conjunto de dedos das mãos, pedras menores representavam apenas um dedo. Quando saia para pastorear colocava-se as pedras em um saco, quando voltava, as retiravam conforme as ovelhas entravam no cercado. Pode não ser verdade, mas é lúdico para memorizar.

Base Binária

O binário já era utilizado antes da invenção do computador, pode ter sido pelo polinésios, egípcios, são muitas as histórias, contudo os registros históricos registram os matemáticos Leibniz (século 18) como precursor, Charles Babbage e George Boole (séculos 18/19) como desenvolvedores de modelos e logicas aplicando a base binária.

As memórias dos computadores são formadas exclusivamente por transistores (minúsculos) que só entendem dois estados de existência com ou sem energia, ligado ou desligado, 1 ou 0, portanto exclusivamente binário.

Base Hexadecimal

A representação binária de um transistor é denominada “bit”, cada transistor representa 1 bit. Para representar graficamente os caracteres ocidentais, matemáticos, numéricos expressões e sinais chegou-se à conclusão de que seriam necessários 8 bits (para cada caractere) permitindo representar 255 caracteres diferentes. O conjunto de 8 bits é denominado byte, para facilitar as representações o byte e dividido ao meio e denominado nibble, que pode representar até 16 elementos portanto faz uso da base Hexadecimal.

Por representar até 16 elementos a representação numérica indu-arábica não é suficiente, então são acrescidos as representações alfabéticas de A até F. {1 2 3 4 5 6 7 8 9 A B C D E F 0}

Valores numéricos em diferentes bases

Exemplos de valores numéricos em diferentes bases. Abaixo a soma de dois números em diferentes bases.


Códigos Binários

Os computadores têm como infraestrutura para todas as suas funções os transistores, cada transistor representa um bit e o conjunto de 8 bits forma um byte.

Existem duas representações binárias em uso atualmente, EBCDIC utilizada pelo z/OS e outros sistemas operacionais mainframe (z/OS, zVSE) da IBM e ASCII, utilizada nos sistemas operacionais Linux, Unix e Windows.



Representação Binária EBCDIC

Todas as informações necessárias para executar um processamento estão armazenadas na memória das máquinas de forma binária, essas informações podem ser:

·       Números com representação binária,

·       Caracteres alfanuméricos, símbolos e caracteres especiais

·       Instruções

É impossível cobrir toda necessidade de representação com apenas 8 bits ou 255 possibilidades, portanto a representatividade de um byte dependerá da atribuição dada a ele dentro da área de memória onde estiver alocado.  Utilizando o código EBCDIC como exemplo, extraindo de “yellow card” do mainframe

 




Utilizando a representação Decimal 213 do Yellow Card IBM, temos:

BIN=11010101 = número 213.

BIN=11010101 = Letra “N” maiúscula.

BIN=11010101 = Instrução “CLC” em um programa.


A área em azul claro representa os dados de uma área de memória com informações para serem processadas.

A área em verde claro representa o código do programa que será executado.

Essas áreas são definidas pelo sistema operacional, portanto a representação binária que está em cada uma delas é determinada pela posição de gravação na memória (endereço de memória)

Fazendo uma analogia entre as áreas de um programa, onde se encontra na memória e a interpretação do ponto de vista do sistema operacional.

Um programa COBOL é segmentado em “DIVISIONS”, “AREAS”, “SECTIONS”, “PARAGRAPHS” ...

11010101 na "WORK STORAGE SECTION", pode representar 

VARZ   PIC 9(1) COMP. 213

VARX   PIC X(1). “N”

      

Na "Procedure Division" o binário 11010101 representa


IF VARX = “N” (COBOL)

CLC VARX(1),CL1’N’ (ASSEMBLER)

 

CLC é uma instrução de máquina (Compare Logical Character *)    

* Detalhamento sobre as operações internas da máquina, durante o processamento de um programa serão realizados conforme a evolução do material e assuntos.

Comentários

Postagens mais visitadas deste blog

zSystem IBM (mainframe) - Arquitetura - 1

VSAM KSDS - Key-Sequenced Data Set