Mainframe e Distribuída - parte 1 - Ambiente
Tags: mainframe, programming
Published: 2022-01-01 14:50:59

&nbsp; 

Desenvolvedores que trabalham exclusivamente com mainframe podem sentir alguns impactos quando começam a explorar o universo da computação distribuída.

Este post é o primeiro de uma série para auxiliar os devs nesta transição e perceberem que muitos dos conceitos conhecidos no mainframe estão presentes na distribuída: mudam-se a panela e o fogão, mas o sabor da comida continua o mesmo.

---

## Sobre esta série de posts

O objetivo final destes posts é tentar ajudar quem já conhece o ambiente mainframe e quer explorar o ambiente distribuído, também conhecido como baixa plataforma.

*Este texto não tem a intenção de ser um guia exaustivo, ele tem o objetivo de dar algumas noções iniciais e incentivar nos estudos. Nos comentários abaixo, fiquem à vontade para sugerir correções e complementar com mais informações.*

*No final existe um glossário e também um índice com os tópicos da série. Esta série está em evolução e novos tópicos surgirão.*

---

## Ambiente

&nbsp; 

### Sistema Operacional

Todo hardware precisa de um sistema operacional que possa gerir os recursos disponíveis. No mainframe são conhecidos o MVS, OS/390 e atualmente um dos mais predominante é o z/OS.

Na distribuída, atualmente, os mais conhecidos são o Windows, Linux e macOS.

A grande diferença é a arquitetura: no mainframe os usuários interagem com o sistema operacional em `sessões virtuais` através de terminais como os emuladores de terminais 3270. Já na distribuída os usuários interagem diretamente com o sistema operacional.

Existem funcionalidades comuns entre os sistemas operacionais, por exemplo da mesma maneira que o z/OS possui o RACF que gerencia permissões de autenticação e acesso, os sistemas operacionais da distribuída também possuem a implementação desta funcionalidade. Este mesmo conceito de segurança também existe nas plataformas de cloud, como o IAM da AWS.

&nbsp; 

### Interface gráfica e não tão gráfica

No mainframe, assim que o desenvolvedor faz login no `TSO`, ele pode invocar linhas de comando como `CLIST` e `REXX` ou então pode chamar uma interface como o `ISPF` (ou `PDF`). Outra interface conhecida no mainframe é o `ROSCOE`.

```
Menu Utilities Compilers Options  Status  Help
------------------------------------------------------------------------------
                           ISPF Primary Option Menu
Option ===>

0  Settings      Terminal and user parameters            User ID .: USER
1  View          Display source data or listings         Time. . .: 00:00
2  Edit          Create or change source data            Terminal.: 3278
3  Utilities     Perform utility functions               Screen. .: 1
4  Foreground    Interactive language processing         Language.: ENGLISH
5  Batch         Submit job for language processing      Appl ID .: PDF
6  Command       Enter TSO or Workstation commands       TSO logon: ACCT
7  Dialog Test   Perform dialog testing                  TSOprefix: USER
8  LM Facility   Library administrator functions         System ID: SC04
9  IBM Products  IBM program development products        MVS acct.: ACCNT#
10 SCLM          SW Configuration Library Manager        Release .: ISPF 5.2
11 Workplace     ISPF Object/Action Workplace
M  More          Additional IBM Products
 
Enter X to Terminate using log/list defaults
 
F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap F10=Actions F12=Cancel
```

Ao fazer um paralelo com a distribuída, existem as interfaces conhecidas por `terminais` que permitem interagir por linha de comando da mesma maneira que o `TSO` faz
E paralelo ao ISPF existem as interfaces gráficas, também conhecidas como GUI (Graphical User Interface), que são as telas em "janelas" que estamos acostumados a utilizar no dia-a-dia no Windows, Mac ou Linux.

Exemplos de `terminais` de linha de comando são: bash, sh, powershell, entre outros.
![bash example](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wc4o5pa6jek2ppwtj2ag.png)

Exemplo de interface gráfica:
![macOS graphical interface example](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8y5cye5ensuololemq7y.png)
 
Existem outras funcionalidades semelhantes entre os dois mundos. Tanto o sistema operacional do mainframe quanto os da distribuída possuem gerenciadores de arquivos ou, no caso do mainframe, datasets. No `ISPF` os datasets podem ser visualizados na opção 1 (View) ou então na opção 3.4 (Utilities > DSLIST)

```
--------------------------  UTILITY SELECTION MENU  ----------------------------
OPTION ===> 4

    1  LIBRARY     - Compress or print data set.  Print index listing.
                       Print, rename, delete, or browse members
    2  DATASET     - Allocate, rename, delete, catalog, uncatalog, or
                       display information of an entire data set
    3  MOVE/COPY   - Move, copy, or promote members or data sets
    4  DSLIST      - Print or display (to process) list of data set names
                       Print or display VTOC information
    5  RESET       - Reset statistics for members of ISPF library
    6  HARDCOPY    - Initiate hardcopy output
    8  OUTLIST     - Display, delete or print held job output
    9  COMMANDS    - Create/change an application command table
   10  CONVERT     - Convert old format messages/menu panels to new format
   11  FORMAT      - Format definition for formatted data Edit/Browse
   12  SUPERC      - Compare data sets (Standard dialog)
   13  SUPERCE     - Compare data sets (Extended dialog)
   14  SEARCH-FOR  - Search data sets for strings of data
```
```
-----------------------------  DATA SET LIST UTILITY  --------------------------
OPTION ===>

  blank - Display data set list *              P  - Print data set list
  V     - Display VTOC information only        PV - Print VTOC information only

Enter one or both of the parameters below:
  DSNAME LEVEL  ===>  PREFIX
  VOLUME        ===>


  INITIAL DISPLAY VIEW   ===>  VOLUME  (VOLUME,SPACE,ATTRIB,TOTAL)
  CONFIRM DELETE REQUEST ===>  YES    (YES or NO)

* The following line commands will be available when the list is displayed

B - Browse data set        C - Catalog data set        F - Free unused space
E - Edit data set          U - Uncatalog data set      = - Repeat last command
D - Delete data set        P - Print entire data set
R - Rename data set        X - Print index listing
I - Data set information   M - Display member list
S - Information (short)    Z - Compress data set       TSO command or CLIST
```
```
DSLIST - DATA SETS BEGINNING WITH PREFIX ---------------------------  ROW 1 OF 9
COMMAND ===>                                                    SCROLL ===> PAGE
COMMAND      NAME                                      MESSAGE            VOLUME
-------------------------------------------------------------------------------
         PREFIX.$10$09$5                                                  MAR87B
         PREFIX.$15$38$5                                                  OCT87A
         PREFIX.ABDRVR7.ISPPLIB                                           FEB87B
         PREFIX.CURRENT.BILLS                                             TSO007
         PREFIX.MEMO.TEXT                                                 NOV87C
         PREFIX.MY.CLIST                                                  TSO005
         PREFIX.SAMPLE.TEXT                                               MIGRAT
         PREFIX.TEST.COBOL                                                MIGRAT
         PREFIX.TEST.DATA                                                 NOV87C
*************************** END OF DATA SET LIST *******************************
```
De forma semelhante podemos visualizar os arquivos na distribuída tanto pela linha de comando (bash) ...
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5qz2p71pmk3yr81075bc.png)

... quanto pela interface gráfica

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbvixqmmrd58cotdamqc.png)

*Spoiler: não se preocupe com os comandos do terminal por enquanto, voltaremos nele futuramente*

Aqui vale destacar a diferença estrutural entre datasets (mainframe) e arquivos (distribuída):
> **datasets:** são formado por qualificadores de no máximo 8 caracteres e separados por "." (ponto) e o tamanho máximo do nome não pode exceder 44 caracteres. Exemplo: `USERZOS.ARQUIVO.TESTE.EXEMPLO`. Os datasets ainda podem ser `PARTITIONED` e permitem ter `MEMBERS` dentro deles, na distribuída, é como se fossem arquivos dentro de uma pasta

&nbsp; 

> **arquivos:** são estruturados em pastas e sub-pastas. Os nomes dos arquivos geralmente são compostos por um prefixo e um sufixo (extensão), onde este sufixo indica o tipo de arquivo (.exe, .txt, .sh, .jpeg, .mp3). 
>
> Não é obrigatório que um arquivo tenha prefixo ou um sufixo, mas precisa pelo menos ter um deles. Exemplo: `/pasta/sub-pasta/arquivo.txt`, `/pasta/sub-pasta/.gitignore`, `/pasta/sub-pasta/config`

---

Como podemos ver, existem muitas similaridades entre as plataformas alta e baixa. Explore e faça este exercício.

Esta primeira parte da série é apenas para quebrar o gelo e abrir caminho para conhecermos outros conceitos em comum. 

Nos próximos posts veremos que ferramentas de terceiros ou built-in do mainframe também possuem um similar na distribuída. Exemplos destas ferramentas são o `CHANGEMAN`, `ENDEVOR`, `TSO EDITOR`, `DFSORT`, `FILE-AID`, `IEFBR14`, `ICEGENER`, `EASYTRIEVE`, entre outras.

*Mudam-se a panela e o fogão, mas o sabor da comida continua o mesmo.*

---

### Glossário

> **baixa plataforma:** computação distribuída
> **alta plataforma:** mainframe