| Bellacosa Mainframe apresenta o call em cobol parte V |
☕💥 A Jornada do Padawan COBOL – Parte 5
Desvendando o Universo dos CALLs no Mainframe
Binder, Link-Edit, FETCH, CANCEL, Program Objects, DLLs, LPA, LINKLIST e os Segredos dos Mestres do z/OS
Ou como descobrir que um CALL pode custar microssegundos, megabytes e algumas noites de sono se você não entender o que acontece depois do compilador
Por Vagner Bellacosa – Bellacosa Mainframe
O dia em que o Padawan descobre que COBOL não gera executáveis
Até agora aprendemos:
✔ Static CALL
✔ Dynamic CALL
✔ By Reference
✔ Reentrância
✔ LE
✔ Heap
✔ Stack
✔ CEEDUMP
Mas existe uma pergunta importante.
Quando fazemos:
CALL 'VALIDA01'
Como exatamente o z/OS encontra este programa?
Onde ele mora?
Quem o carrega?
Quem o remove?
Quem o deixa residente?
Prepare outro café.
Hoje vamos conhecer o Binder.
O Binder
Antigamente chamávamos de:
Link Edit
Linkage Editor
IEWL
Hoje chamamos simplesmente de:
Binder
Ele é o responsável por transformar:
Objeto
em
Programa executável
Visualmente
COBOL Source
↓
IGYCRCTL
↓
Object Module
↓
Binder
↓
Program Object
↓
PDMLIB
O que o Binder faz
Resolve símbolos
Resolve CALL estático
Organiza seções
Cria aliases
Define AMODE
Define RMODE
Otimiza carregamento
Static CALL revisitado
Exemplo
CALL 'CPFVAL'
Binder procura:
CPFVAL
Achou.
Inclui.
Executável cresce.
Visualmente
MAIN
+
CPFVAL
+
JUROS
+
PIX
=
MAINLOAD
Dynamic CALL
Binder ignora.
Não liga.
Não participa.
Em execução.
Sistema procura.
Onde procura?
STEPLIB
Primeiro.
JOBLIB
Depois.
TASKLIB
LPA
LINKLIST
LPDB
Dependendo ambiente
Fluxo
CALL CPFVAL
↓
STEPLIB
↓
JOBLIB
↓
LPA
↓
LINKLIST
↓
Achou
↓
Carrega
↓
Executa
Quanto custa?
Cada busca.
CPU.
I/O.
Tempo.
Pouco?
Sim.
Milhões de vezes?
Muito.
O segredo da LPA
Link Pack Area
Área compartilhada.
Programa carregado
uma vez.
Usado por todos.
Visualmente
LPA
CPFVAL
CLIENTE A
CLIENTE B
CLIENTE C
CLIENTE D
Excelente.
Quando usar?
Rotinas muito chamadas.
Segurança.
Conversão.
Data.
Utilitários.
FETCH
Poucos usam.
Poucos conhecem.
Muito poderoso.
Exemplo
CALL 'IGZCFCC'
Internamente.
Faz FETCH.
FETCH significa
Pré-carregar.
Antes da execução.
Benefício
Evita primeira carga.
Reduz latência.
CANCEL
Um comando subestimado.
Exemplo
CALL WS-PGM
...
CANCEL WS-PGM
O que faz?
Remove programa da memória.
Por que usar?
Liberar storage.
Reinicializar estado.
Exemplo
Subprograma mantém cache.
Quer limpar.
CANCEL 'CACHE001'
Nova chamada.
Programa recarregado.
Cuidado
CANCEL excessivo
mata performance.
DLL no zOS
Sim.
Existe.
Dynamic Link Library.
Program Objects.
LE suporta.
Exemplo
C
COBOL
PLI
Assembler
Compartilhando.
Program Objects
Evolução do antigo Load Module.
Vantagens
Maior tamanho
AMODE 64
Melhor performance
Mais símbolos
Debug
IBM recomenda.
Sempre.
AMODE
Já vimos.
Mas Binder controla.
Exemplo
AMODE(31)
RMODE(ANY)
RMODE
Onde carregar.
RMODE 24
Baixa memória.
RMODE ANY
Qualquer lugar.
Mais flexível.
Alias
Binder pode criar.
Exemplo
Programa
CLIENTE01
Alias
CL001
Mesmo executável.
Dois nomes.
Problemas clássicos
S806
Programa não encontrado.
Verificar
STEPLIB
LPA
LINKLIST
Binder
S0C1
Módulo inválido.
Compilação errada.
U4087
LE.
S878
Sem memória.
Como descobrir
LISTLOAD
AMBLIST
IEWL
IPCS
SDSF
AMBLIST
Ferramenta maravilhosa.
Pouco utilizada.
Permite ver
AMODE
RMODE
Alias
Entradas
Tamanho
Exemplo
AMBLIST LISTIDR
Dica Bellacosa
Sempre guardar map.
Compile
LIST
OFFSET
MAP
Futuro você agradece.
Microbenchmark Jedi
Método
Tempo
Static CALL
0,8 us
Dynamic
2 us
FETCH
1 us
LPA
0,5 us
CANCEL frequente
8 us
Easter Egg Mainframe
Existe em muitos bancos.
Programa chamado.
GENERICA
Dentro.
EVALUATE WS-TIPO
WHEN 001
CALL P001
WHEN 002
CALL P002
WHEN 003
CALL P003
...
WHEN 999
CALL P999
END-EVALUATE
Mais de 900 programas.
Autor
Aposentado.
Documentação
Nenhuma.
Produção
Executa bilhões.
Diariamente.
Ninguém toca.
Conhecido pelos veteranos como:
A Biblioteca de Alexandria do Mainframe™
Checklist Jedi do Binder
✅ Static apenas quando necessário
✅ Dynamic para produtos
✅ Evitar CANCEL excessivo
✅ Preferir Program Objects
✅ Verificar AMODE
✅ Verificar RMODE
✅ Utilizar LPA
✅ Medir CPU
✅ Guardar MAP
✅ Gerar OFFSET
✅ Conhecer AMBLIST
✅ Conhecer Binder
A Filosofia Jedi do CALL – Parte 5
O Padawan iniciante acredita:
O compilador cria o executável.
O desenvolvedor intermediário pensa:
O Binder junta módulos.
O Mestre Mainframe entende:
O Binder é um arquiteto invisível. Ele decide onde o programa viverá, como será carregado, quem poderá compartilhá-lo, quanto storage consumirá e quantos microssegundos serão economizados em milhões de transações.
E é exatamente por isso que alguns arquitetos IBM Z conseguem olhar para um simples:
CALL 'SUBPGM'
E enxergar imediatamente:
Binder
Program Objects
LPA
RMODE
AMODE
FETCH
CANCEL
LE
CPU
Storage
Cache
Concurrency
Escalabilidade
Porque no universo do Mainframe, um CALL nunca é apenas um CALL.
É uma decisão de arquitetura que pode continuar impactando sistemas críticos por décadas.
Na Parte 6, o Padawan poderá explorar o nível Mestre: CICS LINK/XCTL, COMMAREA, Channels & Containers, z/OS Connect, APIs REST, Java, JNI, Metal C, MQ, zIIP, SMF 110, Strobe, APA e como os arquitetos modernos integram COBOL com microsserviços e nuvem.
Sem comentários:
Enviar um comentário