15
Concurso Mainframe IBM 2011 - Brasil Parte 2 Tempo para conclusão – aproximadamente 10 horas Ajuda Você poderá achar as referências abaixo úteis para a conclusão das tarefas: z/OS v1.11 Information Center: http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp IBM LookAt – z/OS Message Help: http://www-03.ibm.com/systems/z/os/zos/bkserv/lookat/index.html ABCs of z/OS System Programming: http://www.redbooks.ibm.com/redbooks/pdfs/sg246989.pdf Introduction to the New Mainframe – z/OS Basics: http://www.redbooks.ibm.com/redbooks/pdfs/sg246366.pdf Nesta etapa, vamos testar seus novos conhecimentos de z/OS. Serão várias tarefas a serem executadas, cada uma mostrando uma funcionalidade do z/OS. Ao final, você deverá ter um dataset com os membros necessários para avaliação. Para acompanhar seu aprendizado, preparamos também algumas perguntas que deverão ser respondidas ao final desta fase.

Concurso Mainframe Ibm2011 Parte2

Embed Size (px)

DESCRIPTION

Concurso Mainframe Ibm2011 Parte2

Citation preview

Page 1: Concurso Mainframe Ibm2011 Parte2

Concurso Mainframe IBM 2011 - BrasilParte 2

Tempo para conclusão – aproximadamente 10 horas

Ajuda

Você poderá achar as referências abaixo úteis para a conclusão das tarefas:

– z/OS v1.11 Information Center:

http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp

– IBM LookAt – z/OS Message Help:

http://www-03.ibm.com/systems/z/os/zos/bkserv/lookat/index.html

– ABCs of z/OS System Programming:

http://www.redbooks.ibm.com/redbooks/pdfs/sg246989.pdf

– Introduction to the New Mainframe – z/OS Basics:

http://www.redbooks.ibm.com/redbooks/pdfs/sg246366.pdf

Nesta etapa, vamos testar seus novos conhecimentos de z/OS. Serão várias

tarefas a serem executadas, cada uma mostrando uma funcionalidade do z/OS. Ao final,

você deverá ter um dataset com os membros necessários para avaliação. Para acompanhar

seu aprendizado, preparamos também algumas perguntas que deverão ser respondidas

ao final desta fase.

Page 2: Concurso Mainframe Ibm2011 Parte2

INTRODUÇÃO À PROGRAMAÇÃO DE SISTEMAS

Sistemas de mainframe são criados para serem usados por um grande número de pessoas. Boa parte

daqueles que interagem com o mainframe são usuários finais – pessoas que usam as aplicações que

estão no sistema.

No entanto, graças à complexidade dos softwares que suportam essa grande quantidade de usuários e

aplicações, uma grande variedade de profissionais é necessária para operar o próprio mainframe.

O z/OS fornece muitos comandos e facilidades para ajudar o Programador de Sistemas a fazer isso.

Vamos ver algumas delas?

Para responder as perguntas relacionadas ao sistema, ao final da Parte 2, você poderá achar o livro

MVS, disponível no z/OS Information Center, útil para compreender as sintaxes dos comandos, por que

são usados e o output que geram.

Você poderá encontrar o Information Center no link:

http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp

Um desses profissionais é o programador de sistemas - sou eu! Sou responsável

pela instalação, customização e manutençãodo z/OS no nosso mainframe.

Page 3: Concurso Mainframe Ibm2011 Parte2

INTRODUÇÃO AO IPL

Quando você liga seu desktop ou notebook em casa o sistema operacional inicia através de um

processo conhecido como “booting”. Este processo usa um registro boot no disco para localizar o

sistema operacional e iniciar. No z/OS isso é conhecido como “IPLing”, e o equivalente a um registro

boot é conhecido como load member.

No menu do ISPF, entre no SDSF e escolha a opção ULOG, para entrar na User Session Log, para

visualizar o output dos comandos que você utiliza.

Para visualizar a informação do IPL para o sistema z/OS, há o comando /DISPLAY IPLINFO, ou se

você preferir, /D IPLINFO. A resposta será o output do log de sua sessão.

IPL significa “Initial Program Load”.“Dar um IPL” significa inicializar oo mainframe. Uma boa forma de

aprender é dando uma olhada na informaçãofornecida pelo sistema quando foi dado IPL.

Page 4: Concurso Mainframe Ibm2011 Parte2

Adicionalmente ao load member, o sistema também requer um ou mais datasets que são coletivamente

conhecidos como System Parameter Library (PARMLIB). Estes datasets contém vários membros que

detalham adicionalmente informações para diferentes aspectos no sistema.

Comandos de display estão listados no documento MVS – System Commands no z/OS

Infocenter

A configuração da PARMLIB no z/OS é dividida entre diferentes membros para diferentes aspectos do

sistema. z/OS define os nomes destes membros usando prefixos específicos combinados com sufixos

customizáveis. A maioria destes sufixos são definidos na lista de parâmetros do sistema, que pode ser

encontrada em um ou mais membros cujo nome comece com IEASYS.

Se você está mais familiarizado com Linux ou UNIX,o PARMLIB no z/OS é um pouco parecido com o

diretório /etc/.

Page 5: Concurso Mainframe Ibm2011 Parte2

O uso dos sufixos permite que o operador dê um IPL no sistema z/OS com diferentes configurações

simplesmente por definir os diferentes sufixos para os membros IEASYS. Por padrão, os sufixos de

IEASYS são geralmente especificados no load member, porém um operador pode anular isso quando

um IPL é iniciado.

Você verá que o topo da lista contém uma entrada para o sufixo 00; o (OP) em seguida, se presente,

indica que ela foi especificada pelo operador e não pelo load member. A partir disso podemos

determinar que quando for feito um IPL no sistema, ele deverá ler um membro chamado IEASYS00.

➔ Localize e visualize este membro no dataset PARMLIB – pesquise pelos comandos

DISPLAY e descubra onde os datasets PARMLIB estão localizados.

Você deverá poder ver como estes sufixos para a outra configuração são definidos.

O comando DISPLAY IPLINFO que você usourecentemente disponibilizou a lista de

sufixos este sistema utilizou.Procure o output no topo do ULOG, você

deverá visualizar uma linha para IEASYS LIST

Page 6: Concurso Mainframe Ibm2011 Parte2

Recursos de Sistema

Ao comprar um computador pessoal, a maioria das pessoas gosta de olhar as especificações, como quanta memória ele possui. O z/OS se refere à memória como armazenamento central ou real. Uma máquina System z pode rodar um número grande de sistemas z/OS, conhecidos como partições lógicas (ou LPARs). Cada LPAR possui um subconjunto dos recursos físicos alocados à ela, tanto exclusivamente quanto de forma compartilhada com outras LPAR.

Para visualizar a quantidade de armazenamento real que temos disponível para o LPAR do sistema z/OS

que você está usando, é possível usar o comando /D M=STOR.

O z/OS também fornece um ambiente UNIX, conhecido como UNIX System Services (USS) ou OMVS.

Você terá a oportunidade de conhecer o OMVS mais tarde nesta parte do concurso.

Assim como no UNIX, é possível configurar muitas opções, como quantos processos podem ocorrer

concorrentemente, qual não está relacionado aos jobs que foram identificados antes. Estes podem ser

encontrados em um membro PARMLIB, porém é muito mais simples usar o comando DISPLAY OMVS,L

para visualizar os limites configurados.

Há muito mais no dia-a-dia de um programador de sistemas, mas

eu acho que por enquanto já está suficiente.Vou deixá-lo com a sua mentora e você poderá executar seus próprios jobs. Não quebre nada!

Até agora você só viu alguns comandos.Grave bem eles, você poderá precisar

mais tarde!

Page 7: Concurso Mainframe Ibm2011 Parte2

CRIANDO UMA MACRO NO ISPF

Execute corretamente uma macro no ISPF. Para executar esta macro, vamos utilizar algo chamado

CLIST, que significa Command List. A CLIST já foi escrita para você, porém precisa ser debugada. Você

também deverá executar uma declaração ALTLIB.

Uma breve explicação dos membros que você irá usar:

ALTLIB – Um membro executável escrito na linguagem REXX

ISRBOX – Uma macro CLIST

BOXOUT – Um membro através do qual você irá rodar sua macro

RESETBOX – Um programa que reseta o membro BOXOUT para o seu estado original.

➔ Comece alocando o dataset 'IBMxxxx.PARTE2.CLIST'

Agora defina os seguintes atributos para o seu dataset:

Alocar em tracks (TRKS)

Primary quantity : 1

Secondary quantity: 2Directory Blocks: 0Record format: FBRecord Length: 80Block size: 32000Data set name: LIBRARY

➔ Copie o membro 'ZOS.BR.PARTE2.CLIST(ALTLIB)' para 'IBMxxxx.PARTE2.CLIST(ALTLIB)'

➔ Copie os membros restantes (ISRBOX, BOXOUT e RESETBOX) para o seu dataset

'IBMxxxx.PARTE2.CLIST', mantendo os nomes originais destes membros.

Nesta etapa, vamos aprender a criar uma macro.A macro permite aos profissionais de mainframe executarem uma série de comandos em apenas

um passo. A macro com a qual você vai trabalhar irá imprimir um verso na tela. Legal, hum?

Page 8: Concurso Mainframe Ibm2011 Parte2

Agora abra o seu membro ALTLIB. Você perceberá que ele é apenas uma declaração padrão, portanto

será necessário alterar alguns parâmetros.

A primeira linha do membro informa ao sistema que o membro é um arquivo REXX. Este comentário é

necessário, sem ele o sistema pode assumir que o arquivo é uma CLIST.

A segunda linha informa ao interpretador REXX o que fazer com comandos não-REXX. Se o

interpretador encontrar uma declaração que ele não reconhece, irá passá-la adiante. Neste caso,

estamos dizendo ao interpretador que passe adiante todas as declarações não-REXX para o TSO. Estas

declarações precisam estar em aspas duplas.

A terceira linha é um comando TSO ALTLIB. Você irá precisar alterar os parâmetros desta declaração

para executá-la corretamente. Na linha de comando, digite:

C USERID IBMxxxx ALL

Como você provavelmente se lembra, este comando irá alterar todas as instâncias USERID por seu

usuário, IBMxxxx. Abra o seu membro RESETBOX e faça o mesmo. Feito isto, você poderá futuramente

poderá executar o RESETBOX para resetar o membro BOXOUT, caso alguma coisa saia errado.

Muito bem! Agora que você já tem os membros ALTLIB e RESETBOX prontos, é hora de executar o

programa ALTLIB. Volte para a sua lista de membros e digite EXEC na linha ao lado do membro

ALTLIB.

Você não verá resultados ainda, a não ser que algo dê errado e retorne uma mensagem de erro.

Observação: se você está usando a sua tela divida em duas com o F2, será necessário executar a

macro na outra tela também.

Agora edite o seu membro BOXOUT. Na linha de comando, digite ISRBOX.

Algo não deu certo... Ao invés de uma caixinha com um verso, você tem apenas algumas linhas.

Existem erros na ISRBOX que estão impedindo o verso de imprimir corretamente. Abra este membro e

corrija o seu erro. Se estiver se sentindo criativo, altere o verso e escreva um poema de sua escolha!

Observação: Não se esqueça, talvez seja necessário resetar seu BOXOUT a cada nova tentativa.

Com o seu CLIST corrigido, entre no seu membro BOXOUT e dê o comando ISRBOX e pressione enter.

Se der certo, sua macro irá desenhar uma caixa com o verso dentro.

Você completou mais uma etapa da Parte 2!

Page 9: Concurso Mainframe Ibm2011 Parte2

ASCII VS. EBCDIC

Na época em que surgiu, o EBCDIC tornava a tarefa de entrar dados no mainframe usando cartões de

ponto mais fácil. Desde o tempo em que os cartões de ponto surgiram (entenda isso como a época dos

dinossauros), uma grande quantidade de dados já era armazenada usando o formato EBCDIC. Com a

padronização da maioria dos sistemas com ASCII, o mainframe passou a suportar dados em ambos os

formatos. Muitas aplicações, no entanto, ainda esperam que os dados estejam no formato EBCDIC.

Quando isso pode se tornar um problema? Talvez você queira trabalhar com algo localmente e então

subir ele para o mainframe. Ocasiões em que a conversão de códigos será necessária podem se tornar

frequentes, portanto esta é uma técnica importante para economizar tempo.

Seu desafio será converter um membro de dataset que está em ASCII.

Existem diversos métodos para trabalhar com o z/OS UNIX System Services e o z/OS UNIX shell

prompt. Neste desafio, você usará o OMVS, disponível através do ISPF. OMVS significa Open MVS, que

é o nome original concedido ao z/OS UNIX quando a IBM habilitou o mainframe para operar aplicações

UNIX.

Porém, antes de acessar o shell do OMVS, siga estas instruções:

➔ Comece alocando o dataset 'IBMxxxx.PARTE2.DATA'

Agora defina os seguintes atributos para o seu dataset:

Alocar em tracks (TRKS)

Primary quantity : 1

Secondary quantity: 2Directory Blocks: 0Record format: FBRecord Length: 255Block size: 32640Data set name: LIBRARY

Uma diferença entre os mainframes e quase todos os outros computadores é o uso da

codificação EBCDIC ao invés de ASCII.Mas qual é a diferença entre EBCDIC e ASCII afinal?

Page 10: Concurso Mainframe Ibm2011 Parte2

➔ Copie o membro 'ZOS.BR.PARTE2.DATA(ASCII)' para 'IBMxxxx.PARTE2.DATA(ASCII)'

Para chegar ao shell do OMVS, acesse a opção 6 do menu ISPF. Na linha de comando, digite OMVS e

dê enter. Espere até o prompt IBMxxxx:/z/ibmxxxx:>.

No prompt de comando UNIX digite o comando:

cp '//parte2.data(ascii)' ascii

Isto irá copiar o seu membro ASCII para um arquivo chamado ASCII no diretório. Se você entrar o

comando ls para listar os arquivos do seu diretório, ASCII deverá estar ali. Vamos abri-lo! Digite o

comando:

oedit ascii

Epa! O que é isso? O motivo pelo qual o texto não pode ser lido é porque ele está codificado em ASCII.

Precisa ser convertido em EBCDIC para ser interpretado pelo editor ISPF do mainframe. Pressione F3

para voltar ao OMVS e corrigir tudo.

Abra o Google – ou o seu buscador favorito – e procure por “ibm ascii ebcdic conversion”. Um dos

primeiros resultados será uma página do domínio ibm.com. Entendeu? Ótimo!

Nesta página, procure pelo comando “iconv”. O exemplo desta página lhe mostrará como converter de

EBCDIC para ASCII. Precisa editar o comando para que ele converta de forma inversa, de ASCII para

EBCDIC (dica: isso significa que os parâmetros f e t devem ser trocados). O arquivo que receberá o

código convertido deverá se chamar EBCDIC. Execute o comando correto no OMVS.

Observação: cuidado para não confundir o O de ISO com um 0!

Use o oedit para olhar o arquivo que você acabou de criar:

oedit ebcdic

Agora parece bem melhor, não?

Seu último passo será copiar o arquivo EBCDIC para o seu dataset 'IBMxxxx.PARTE2.DATA'. Faça isso

alterando o comando cp usado no começo.

Após terminar tudo, você poderá digitar o comando exit e apertar enter para sair do OMVS. Ah, de

volta ao ISPF... Acesse o seu data set 'IBMxxxx.PARTE2.DATA' e visualize o membro EBCDIC. Está

ali? Ótima notícia! Você acaba de completar mais uma tarefa da Parte 2!

Page 11: Concurso Mainframe Ibm2011 Parte2

UM ODIOSO E MALVADO PROGRAMA EM C

Brincadeiras à parte, de fato existe um conjunto de números chamado Odious (de odd – paridade

ímpar), cuja conversão binária possui um número ímpar de 1s. Qualquer número que não é

considerado “odious” é considerado Evil (de even – paridade ímpar), significando que sua conversão

binária possui um número par de 1s.

Seu desafio nesta etapa será modificar um programa em C para que ele atenda aos requisitos listados

abaixo, e então usar o JCL para compilar e rodar.

Siga os seguintes passos:

➔ Comece alocando o dataset 'IBMxxxx.PARTE2.SOURCE'.

Agora defina os seguintes atributos para o seu dataset:

Alocar em tracks (TRKS)

Primary quantity : 1

Secondary quantity: 2Directory Blocks: 0Record format: FBRecord Length: 80Block size: 32000Data set name: LIBRARY

➔ Agora crie o dataset 'IBMxxxx.PARTE2.LOAD'

Agora defina os seguintes atributos para o seu dataset:

Alocar em tracks (TRKS)

Primary quantity : 1

Secondary quantity: 2Directory Blocks: 0Record format: URecord Length: 80Block size: 32000Data set name: LIBRARY

➔ Copie os membros ODIOUSRC, ODIOCMP E ODIORUN do dataset 'ZOS.BR.PARTE2.SOURCE' para o seu.

Algumas explicações sobre o que esses membros são capazes!

ODIOUSRC – É o programa em C. Neste momento tudo que ele faz é listar números Odious e erros,

mas iremos mudar isso!

Page 12: Concurso Mainframe Ibm2011 Parte2

ODIOCMP – É o compilador, o JCL que irá compilar o seu ODIOUSRC.

ODIORUN – É o JCL que executa o seu programa recentemente compilado pelo ODIOCMP.

ODIOUS – É o arquivo de entrada com todos os números a serem verificados pelo programa.

Abra o seu membro ODIOCMP. Altere OCMPxxxx substituindo os 'x' pelo número do seu user ID. Dê um

submit em seu JCL e confira se está tudo ok. O programa terá compilado sem erros se retornar a

mensagem MAXCC=0. Qualquer número diferente deste indicará um erro no código. Neste caso, entre

no painel SDSF e tente identificar o erro.

Com o programa devidamente compilado, edite o membro ODIORUN, alterando ORUNxxxx trocando os

Xs pelo número do seu usuário. Feitas as alterações, submeta o JCL. Deverá retornar MAXCC=0, caso

retorne qualquer outra mensagem faça conforme foi instruído no parágrafo acima e corrija o erro.

Ok, tudo certo? Entre no seu dataset 'IBMxxxx.PARTE2.DATA' e visualize os dois membros que foram

criados, o ODIOUS e o OERROR.

1. Modifique o ODIOUSRC de forma a gerar um terceiro output. Seu programa já cria o ODIOUS e

OERROR, agora deverá gerar o membro OEVIL, que imprime números “evil”.

2. Modifique o ODIOUSRC de forma a incluir duas linhas de cabeçalho em cada output:

1. Seu nome - Odious/Evil/Error Number (ex: “Agatha – Odious Number” para um relatório de

número odious, e assim por diante).

2. Linha em branco

3. Modifique o JCL em ODIORUN de forma a enviar os dados de Evil para um membro OEVIL em seu

dataset 'IBMxxxx.PARTE2.DATA'.

Se quiser ler um pouco mais sobre programação em C, o z/OS V1R10 Information Center contém

algumas informações sobre programação em C/C++.

Compile o programa e submeta ODIORUN novamente. Se tudo ocorreu bem, seu programa terá criado

três membros em seu dataset 'IBMxxxx.PARTE2.DATA', cada um listando seu respectivo conjunto de

números.

Nota: Se seu membro OERROR repetir as linhas duas vezes, você não completou esta parte com

sucesso. Refaça seu código.

Agora vamos mudar as coisas um pouco!

Page 13: Concurso Mainframe Ibm2011 Parte2

PROVANDO QUE VOCÊ CHEGOU LÁ

Responda essas perguntas para terminar a Parte 2 e enviar os seus resultados!

➔ Copie o dataset 'ZOS.BR.PARTE2.ANSWER' para 'IBMxxxx.IBMxxxx.PARTE2.ANSWER'. A

configuração do seu dataset deverá estar igual ao dataset de origem.

➔ Edite seu membro e insira seu user ID no campo que é solicitado. Leia e responda as

perguntas com calma.

➔ Para que não restem dúvidas, leia as regras para preenchimento contidas no topo do

membro.

Depois de responder tudo, você estará pronto para solicitar seu acesso à Parte 3!

Muito bem! Você chegou até aqui! Está muito perto de completar a Parte 2!

Porém, ainda tenho algumas perguntas para avaliar o quanto você aprendeu.

Ficará surpreso com o quanto você já sabe!

Page 14: Concurso Mainframe Ibm2011 Parte2

FINALIZANDO A PARTE 2

Submeta seu Trabalho!

Pronto! Você conseguiu!

Mas espere! Agora você precisa submeter seus datasets! Siga as instruções abaixo com calma e faça

exatamente o que é solicitado para garantir que seu dataset chegue até nós:

➔ Crie o dataset 'IBMxxxx.IBMxxxx.PARTE2.CORRIGIR' (sim, os dois primeiros

identificadores DEVEM ser seu user ID) com as configurações abaixo:

Alocar em tracks (TRKS)

Definir a primary quantity como 1 e secondary quantity como 1.

Definir directory blocks como 0.

No campo record format, definir como FB (fixed block) e o campo record length deve ser

definido como 80. Definir o campo block size como 27920.

O data set name deverá ser LIBRARY.

➔ Copie os seguintes membros para o seu novo dataset CORRIGIR :

Parabéns, você já chegou longe!

Talvez você tenha que voltar e rever algumastarefas. Não se preocupe, está tudo aqui

na documentação da Parte 2!

Page 15: Concurso Mainframe Ibm2011 Parte2

'IBMxxxx.PARTE2.DATA(EBCDIC)' – ignore a mensagem de truncation

'IBMxxxx.PARTE2.DATA(OEVIL)' – ignore a mensagem de truncation

'IBMxxxx.PARTE2.DATA(ODIOUS)' – ignore a mensagem de truncation

'IBMxxxx.PARTE2.DATA(OERROR)' – ignore a mensagem de truncation

'IBMxxxx.PARTE2.CLIST(BOXOUT)'

Verifique se seus membros estão corretos e prontos para avaliação. Para ser qualificado para a parte 3

você deverá responder corretamente todas as perguntas, portanto não esqueça de revisar a sua folha

de respostas. Após copiá-los, volte para o menu principal do ISPF, entre na opção 6 – command, e

entre o seguinte comando:

XMIT N1.JUDGE9 DA('IBMxxxx.IBMxxxx.PARTE2.CORRIGIR')

e depois

XMIT N1.JUDGE9 DA('IBMxxxx.IBMxxxx.PARTE2.ANSWER')

Isso fará com que nossos juízes recebam apenas os datasets que devem ser avaliados. É importante

que seu dataset possua os dois primeiros identificadores com seu ID.

Para finalizar, é necessário que você envie um e-mail para [email protected] com o assunto

"CONCLUSÃO PARTE 2 – IBMxxxx". Assim que recebermos seu e-mail, iremos corrigir seus trabalhos e

informar se está qualificado para continuar na Parte 3.

Continue Seus Estudos!

A Parte 3 começará a partir do dia 17/09/2011. Se você terminar a Parte 2 após esta data, ainda

poderá concorrer para participar da etapa seguinte, portanto não desista e não deixe de enviar seu e-

mail.

Independente de você conseguir terminar esta Parte com sucesso ou não, você demonstrou que

realmente aprendeu bastante para chegar até aqui. Fique orgulhoso! Ponha seus novos conhecimentos

em seu currículo, os recrutadores estão procurando estudantes que tenham passado por experiências

que lhe tenham trazido algum aprendizado.

Obrigado por ter participado de mais uma etapa do Concurso Mainframe IBM 2011! Boa sorte e, se

tudo der certo, nos vemos na Parte 3! ;-)