Translate

Mostrar mensagens com a etiqueta Metal C. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Metal C. Mostrar todas as mensagens

terça-feira, 9 de julho de 2024

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM Z – O Padawan Avançado - Parte IV

 

Bellacosa Mainframe e os ponteiros de memoria em cobol Parte IV

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM Z

Parte 4 – O Padawan Avançado

COBOL, Metal C, APIs, Buffers Compartilhados, JSON, MQ e as Técnicas Jedi de Alto Desempenho no IBM Z

Por Bellacosa Mainframe


"O Padawan aprende MOVE. O Cavaleiro aprende BASED. O Mestre aprende que um ponteiro pode conectar universos inteiros."

Mestre Bellacosa Sysprog Jedi


Introdução

Chegamos ao último módulo do Holocron dos Ponteiros COBOL.

Nas partes anteriores aprendemos:

Parte 1

  • USAGE POINTER

  • ADDRESS OF

  • SET

  • AMODE

  • Heap

  • Stack

Parte 2

  • BASED

  • ALLOCATE

  • FREE

  • CEEGTST

  • Estruturas dinâmicas

Parte 3

  • SOC4

  • Memory Leak

  • Overlay

  • CEEDUMP

  • IPCS

  • Fault Analyzer

O jovem Padawan então pergunta:

Mestre...

Eu entendi os ponteiros.

Mas onde eles realmente são usados?

O mestre aponta para um gigantesco IBM z17.

E responde.

Em praticamente todos os lugares importantes.


O grande segredo

Poucos desenvolvedores percebem.

Mas produtos IBM utilizam ponteiros intensivamente.

Exemplos.

CICS

DB2

MQ

LE

z/OS

TCP/IP

JES2

JES3

RACF

SMF

VSAM

IMS

Todos.


O COBOL moderno

COBOL não vive sozinho.

Ele conversa.

Com:

C

Metal C

Assembler

Java

MQ

JSON

REST

Sockets


E o idioma dessa conversa é.

Ponteiros.


COBOL e C

Talvez seja o casamento mais comum.


C

Produz buffer.


COBOL

Consome.


Arquitetura.

C


↓

malloc()


↓

PTR



↓

COBOL


BASED

Exemplo conceitual

Programa C.

malloc(1024);

Retorna.

Endereço.


COBOL.

01 WS-PTR POINTER.

Recebe.


Associa.

SET ADDRESS OF BUFFER

TO WS-PTR

Pronto.


COBOL agora enxerga.

Memória criada em C.


Metal C

Mais interessante.


Executa próximo do hardware.


Pode usar.

64 bits.

Storage Keys.


Compartilhar.

Buffers.


Muito utilizado.

Middleware.


Shared Memory

Outro uso avançado.


Vários programas.

Mesmo buffer.


Visualmente.

Programa A


↓

Shared Buffer


↑


Programa B

Sem cópia.


Muito rápido.


MQ

Excelente exemplo.


MQGET

MQPUT


Mensagem.


Buffer.


COBOL.

Ponteiro.


Estrutura BASED.


Visualmente.

MQ


↓

Buffer


↓

PTR


↓

BASED

Processamento.

Zero cópia.


JSON

Muito utilizado hoje.


Imagine.

{
"name":"Bellacosa",

"idade":52
}

Parser.

Cria árvore.


Cada nó.

Possui ponteiros.


Pai.

Filho.

Irmão.


Exemplo.

JSON ROOT


↓


name


↓


idade

XML

Mesma ideia.


DOM.


Tree.


Ponteiros ligam.

Nós.


APIs

z/OS Connect.


Buffers.


Payload.


Parser.


Muito comum.


Sockets

TCP/IP.


Recebe.

4096 bytes.


Ponteiro.


COBOL lê.


Mais eficiente.


Cache

Outro caso.


Tabela gigante.


Ponteiro.

Evita copiar.


Exemplo.

100 MB.


Mover.

Custa.


Apontar.

8 bytes.


Quase instantâneo.


Tabelas in-memory

Excelente.


DB local.


Lookup rápido.


Hash.


B-tree.


Implementável.


Estruturas avançadas

Lista Duplamente Encadeada

NODE


PREV


NEXT

Árvore AVL


Balanceada.


Ponteiros.


B-tree

Muito utilizada.

Banco dados.


Grafo

Exemplo.

A


/ \


B  C


\ /


D

Tudo possível.


Comparação com outras linguagens

LinguagemPonteiros
COBOLSim
CSim
C++Sim
RustControlado
JavaReferências
GoSim
PythonOculto

Curiosidade

Java.

Esconde.


COBOL.

Mostra.


C.

Expõe totalmente.


Rust.

Protege.


Quando usar?

Bellacosa recomenda.


Excelente.

Buffers

MQ

JSON

XML

APIs

Cache

LE

Middleware

Parsers

Estruturas dinâmicas


Quando evitar?

Cadastro.


Folha pagamento.


VSAM simples.


DB2 comum.


Relatórios.


Performance

Muito alta.


Sem MOVE.


Sem COPY.


Sem serialização.


Muito usada.

Em produtos IBM.


Segurança

Ainda importante.


Ponteiro errado.

Continua.

SOC4.


Heap inválido.


Overlay.


Corrompe.


Documentação

Obrigatória.


Desenhe.

Diagramas.


Exemplo.

PTR1


↓

NODE1


↓

NODE2


↓

NODE3

Ajuda manutenção.


Bellacosa Best Practices

Regra 1

Inicialize.

Sempre.

SET PTR TO NULL

Regra 2

Documente.


Regra 3

Libere.


Regra 4

Nunca reutilize.

Após FREE.


Regra 5

BASED bem definido.


Regra 6

Evite engenharia excessiva.


O Teste do Mestre

Pergunta ao Padawan.

Você precisa.

Criar.

Lista encadeada?


Não?


Use OCCURS.


Sim?


Use ponteiros.


Curiosidades Finais

A maioria dos desenvolvedores COBOL jamais precisará escrever uma árvore AVL.

Ou um parser XML próprio.

Ou um cache compartilhado.

Ou uma estrutura dinâmica baseada em CEEGTST.

Mas os profissionais que sabem fazer isso normalmente pertencem a grupos bastante especializados:

  • Sysprogs

  • Middleware Engineers

  • Desenvolvedores CICS

  • Equipes MQ

  • Produtos IBM

  • Desenvolvedores de Frameworks

  • Especialistas em LE

  • Equipes de Modernização IBM Z


O Conselho Final do Mestre Bellacosa

Os ponteiros em COBOL são quase como cristais Kyber escondidos em uma antiga câmara do templo IBM Z.

Durante décadas, muitos desenvolvedores passaram por eles sem percebê-los.

Outros ouviram histórias assustadoras sobre SOC4, overlays e memory leaks e decidiram nunca tocá-los.

E alguns poucos escolheram estudá-los profundamente.

Esses poucos descobriram algo fascinante.

Ponteiros não servem apenas para criar problemas.

Eles são a base invisível que sustenta grande parte das tecnologias modernas do ecossistema IBM Z.

São eles que permitem compartilhar buffers entre linguagens.

São eles que fazem parsers navegarem por documentos JSON gigantescos.

São eles que ajudam produtos IBM a movimentar milhões de mensagens MQ por segundo.

São eles que transformam estruturas estáticas em sistemas vivos, capazes de crescer, adaptar-se e responder dinamicamente às necessidades do negócio.

Mas existe uma última lição.

Talvez a mais importante.

Um ponteiro não possui moral.

Ele não distingue sabedoria de imprudência.

Ele apenas aponta.

E cabe ao desenvolvedor decidir se está usando esse poder para construir um elegante mecanismo de alto desempenho ou para abrir um portal direto para um CEEDUMP de 500 páginas às três horas da manhã de um fechamento bancário.


Fim do Holocron Bellacosa Mainframe

COBOL Ponteiros de Memória: Os Cristais Kyber Escondidos do IBM ZParte 1 a Parte 4 concluídas.


sábado, 3 de agosto de 2019

☕💥 A Jornada do Padawan COBOL – Parte 8 Desvendando o Universo dos CALLs no Mainframe

 

Bellacosa Mainframe apresenta o call em COBOL parte VIII

☕💥 A Jornada do Padawan COBOL – Parte 8

Desvendando o Universo dos CALLs no Mainframe

Metal C, DLLs Avançadas, SAF, RACF, APF, Dataspaces, Hiperspaces, Coupling Facility e os Segredos dos Arquitetos Supremos do IBM Z

Ou como descobrir que existe um mundo tão profundo no z/OS que até alguns desenvolvedores COBOL veteranos preferem fingir que ele não existe

Por Vagner Bellacosa – Bellacosa Mainframe


O dia em que o Padawan percebe que ainda estava na entrada da caverna

Depois de sete capítulos aprendendo:

✔ CALL

✔ CICS

✔ Binder

✔ LE

✔ Assembler

✔ SVC

✔ SRB

✔ zIIP

O Padawan acredita ter dominado o Mainframe.

Então um Sysprog aparece.

Abre um membro.

E mostra:

__asm("MODESET KEY=ZERO");

E diz:

Bem-vindo ao mundo dos Arquitetos.


Metal C

Metal C é praticamente uma mistura de:

C

Assembler

z/OS Internals


É C.

Sem Runtime.

Sem libc.

Sem proteção.


Exemplo


#pragma metal


int main()
{

/* acesso direto ao zOS */

}



Onde é usado?

JES

RACF

DFSMS

TCPIP

SAF

SMPE


DLLs no z/OS

Pouca gente sabe.

IBM possui suporte sofisticado.


Exemplo


CALL 'MINHADLL'

USING AREA.



Internamente

Program Objects

DLL Support

LE


Benefícios

Reuso.

Menor memória.

Atualizações independentes.


SAF

Security Authorization Facility


SAF é o porteiro.

Do z/OS.


Aplicação diz:

Posso fazer isso?

SAF responde.

Sim.

Não.

Talvez.


Visualmente



PROGRAMA


↓

SAF


↓

RACF


↓

DECISÃO



RACF

O mago da segurança.


Controla.

Usuários.

Perfis.

Datasets.

CICS.

DB2.

APIs.


Exemplo

PERMIT PROD.LOADLIB


CLASS DATASET



APF

Authorized Program Facility


Território perigoso.


Programa APF

Pode.

Trocar chave.

Executar SVC.

Acessar memória.


Programa comum

Não.


Storage Keys

IBM protege memória.


Keys

0

até

15


Aplicação comum

Key 8

Kernel

Key 0


Dataspaces

Área enorme.

Fora espaço tradicional.


Até GBs.


Muito usada.

SMF.

Analytics.

Sort.


Visualmente


Address Space


↓

Dataspace


↓

Milhões registros



Hiperspaces

Primo rico.

Do Dataspace.


Mais rápido.

Menos I/O.


Coupling Facility

Um dos segredos.

Do Sysplex.


Imagine

20 Mainframes.

Trabalhando juntos.


Coupling Facility

É a memória compartilhada.


Visualmente


LPAR1


↓

CF


↑


LPAR2




Estruturas

Cache

List

Lock


DB2 usa.

Muito.


MQ usa.


CICS usa.


XCF

Cross System Coupling Facility


Permite.

Comunicação.

Entre LPARs.


WLM

Workload Manager


Decide.

Quem recebe CPU.


Banco.

Prioridade alta.


Teste.

Baixa.


PC-Bit

Poucos conhecem.


Permite.

Troca protegida.

Entre espaços.


Muito usado.

RACF.

DB2.


Callable Services

IBM fornece centenas.


Exemplo

IGGCSI00

CSVQUERY

BPXWDYN

IRRSIM00


BPXWDYN

Favorito dos veteranos.


Alocação dinâmica.


Exemplo


CALL 'BPXWDYN'


USING CMD.



Substitui.

SVC99.

Em vários casos.


Segredos Bellacosa

Dica 1

Nunca APF sem necessidade.


Dica 2

Dataspaces são incríveis.


Dica 3

Aprenda SAF.


Dica 4

RACF é obrigatório.


Dica 5

CF é magia pura.


Easter Egg IBM

Existe uma categoria.

De profissionais.

Que consegue ler isto:


MODESET KEY=ZERO


PC 0,15


MODESET KEY=EIGHT


E compreender tudo.


São conhecidos.

Como.

Arquitetos Supremos IBM Z


Checklist Jedi

✅ Metal C

✅ SAF

✅ RACF

✅ APF

✅ Dataspaces

✅ Hiperspaces

✅ Coupling Facility

✅ WLM

✅ XCF

✅ Callable Services

✅ Storage Keys

✅ Program Objects


A Filosofia Jedi do CALL – Parte 8

O Padawan iniciante pensa:

CALL chama programas.

O desenvolvedor experiente pensa:

CALL movimenta dados.

O especialista compreende:

CALL é um mecanismo de integração entre módulos.

O Sysprog entende:

CALL é apenas uma abstração elegante construída sobre registradores, áreas de armazenamento, serviços do supervisor, segurança SAF, gerenciamento de workload, memória compartilhada e décadas de engenharia refinada do z/Architecture.

E o Arquiteto Supremo IBM Z sabe que, quando um desenvolvedor escreve:

CALL 'SUBPGM'
USING WS-AREA

ele está acionando silenciosamente uma cadeia tecnológica composta por compiladores, Binder, LE, Assembly, serviços do z/OS, mecanismos de proteção, subsistemas de segurança e otimizações de hardware capazes de manter funcionando, há décadas, alguns dos sistemas mais críticos do planeta.


Próxima aventura do Padawan COBOL – Parte 9

"As Runas Perdidas do Mainframe: JES2, SMF Internals, SRM, RMF, SRBs enclavados, Sysplex Distributor, HiperSockets, Crypto Express, Telum AI e os segredos dos Engenheiros IBM que poucos profissionais chegam a explorar."