PROGRAMAÇÃO - 0010

PROGRAMAÇÃO - 0010

Memória e Endereçamento

Apresentação

Para poder usar de forma adequada os recursos de programação em qualquer linguagem é necessário conhecer como as informações são armazenadas e como são acessadas na memória da máquina.

Um programa eficiente deve ser construído considerando os recursos disponíveis nas máquinas com lógica e codificação objetivando o melhor desempenho com o menor consumo dos recursos disponíveis como memória e processador.

A linguagem COBOL será a usada preferencialmente como exemplo e base por este blogue, por sua facilidade de programação, por sua estrutura em divisões que fazem sentido com os recursos de quaisquer máquinas que se enquadrem em processamento comercial, utilizando os recursos de forma eficiente e racional.

As representações binárias e hexadecimais deste material são todas em EBCDIC. 


Bits e Bytes

Na pagina "PROGRAMAÇÃO - 0001" foi apresentado o bit como o "apelido digital" para um transistor e o byte sendo o conjunto de oito bits ou oito transistores. Todos os computadores são montados com uma determinada quantidade de memória, os domésticos geralmente entre 4Gb e 32Gb. 

Entendendo memória 

Para representar a memória graficamente serão usadas oito circunferências representando os bits dentro de um retângulo representando o byte. As circunferências poderão ser vermelhas representando bit ligado ou pretas representando bit desligado.

 

representação para 11110000

 

Um byte pode representar uma Letra, um número, um símbolo ou uma instrução dependendo da área de memória em que estiver. Para registrar (escrever) " IBM " seguem as representações em hexadecimal, binário e gráfica (simulando leds acessos e apagados).


É possível verificar no editor TSO/ISPF, colocando no modo de edição "HEX ON" a representação em hexadecimal da área de memória alocada para a edição (abaixo). O valor em hexa deve ser lido na vertical. Cada byte terá seu endereço na memória, é um numero sequencial que inicia com 1 e segue a quantidade disponível, nesta representação até o endereço 4.


Para "ler" o nome que está na memória é necessário passar o endereço do inicio da informação e o tamanho da informação. Neste caso para "ler" o nome IBM o programa tem que posicionar a leitura no endereço 2 e recuperar 3 posições. Colocando em uma memória maior de 40 bytes:


Com essa representação para recuperar o nome "IBM" o programa deve posicionar o ponteiro de leitura no endereço 12 e recuperar 3 posições, ou seja, até o endereço 14.

Utilizando endereço hexadecimal

Para facilitar a leitura de relatórios de memória, também chamados de DUMP, esses apresentam os endereços em base hexadecimal 

Representação dos endereços em hexa e conteúdos binários


Trecho de um DUMP de Memória do CICS

Utilizando endereço binário

O binário muito raramente é "visualmente" utilizado mas é sempre importante lembrar que a "máquina" não só entende composição binária portanto o endereço na memória também é uma representação binária como segue
 

Tamanho Memória

Nos equipamentos domésticos é muito comum a escolha do equipamento pelo tamanho da memória RAM, como 8Gb, 16Gb, 32Gb etc., mais popularmente "gigas", as medidas são:

Kb (kilobytes)= 2^10 = 1.024 (bytes)

Mb (megabytes)= 2^20  = 1.048.576 (bytes)

Gb (Gigabytes)= 2^30  1,073,741,824 (bytes)

Tb (Terabytes)= 2^40  1,099,511,627,776 (bytes)

Nota: A título de curiosidade, a Bíblia Cristã em formato txt possui aproximadamente 4Mb, portanto em 1Gb de memória é possível gravar aproximadamente 250 Bíblias.

Relação Memória x sistema operacional

O sistema operacional z/OS é 64bits. Sistemas operacionais podem suportar endereçamento de 16bits, 31bits, 32bits e 64bits, esses valores indicam qual o tamanho máximo de memória um sistema operacional vai conseguir endereçar. 

Se uma máquina possui possui um sistema operacional de 32 bits (será explicado mais adiante) o máximo de memória que vai conseguir endereçar será 4.294.967.296 bytes ou 4Gb, se este sistema operacional for instalado em uma máquina com 8Gb ou mais, todo o excedente de 4Gb não será usado pois o Sistema Operacional não "enxerga" esses endereços.

Relação Memória x Programas

Os programas COBOL no z/OS podem ser 24bits, 31bits ou 64bits, que representam o tamanho da memória que poderá ser utilizado ou a quantidade de informações que poderão ser armazenadas na memória durante a execução do programa. 

COBOL 24bits pode armazenar ~4 Bíblias na memória.

COBOL 31bits pode armazenar ~500 Bíblias na memória.



Quantidade de bytes

Abaixo a lista com a quantidade de bytes possíveis de serem endereçados por bits de endereçamento.


Se o Planeta Terra fosse todo dividido em cm², seriam necessários colocar ~4 bytes por cm² ou 32 transistores por cm² para atender a toda a capacidade de endereçamento com 64bits.

Área da Terra em cm² 5,100,000,000,000,000,000, a divisão correta seria 3,617


Comentários

Postagens mais visitadas deste blog

zSystem IBM (mainframe) - Arquitetura - 1

PROGRAMAÇÃO - 0001

VSAM KSDS - Key-Sequenced Data Set