Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2008, 09h35   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 3
Points : 0
Points : 0
Par défaut Programme résident avec mémoire permanente

J'ai mis en place un module d’accès aux données d’un référentiel (DB2) sous Z/OS 3.1

Le succès de ce module, utilisé par l’ensemble des programmes du SI par appel en call, nécessite des optimisations importantes.



Piste étudiée :

Optimiser la consommation CPU et les i/o de ce module en conservant en mémoire des données lues, pour éviter des accès à la base de données



Problématique :

1) Utilisation du buffer : à chaque appel TP en CICS, il est réinitialisé

2) Utilisation TS (tempory storage) : impossible de utiliser ce type de mémoire en batch


Je ne connais pas très bien ce type de Système. J’avais envisagé les solutions suivantes :

1) Utiliser une mémoire permanente (mémoire système ?) accessible en TP et batch et non ré-initialisée à chaque appel.

2) Développer un programme résident et permanent contenant les données lues et accessible par ce module et toujours avec une mémoire non réinitialisée.



Pouvez-vous me dire, si ces solutions sont possibles dans ce type d’environnement, comment les mettre en œuvre (par un exemple quel language ?) et les risques potentiels des solutions ?

Merci.

Avez-vous d’autres solutions ?
tdeveloppeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 10h52   #2
Membre habitué
 
Inscription : janvier 2008
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 124
Points : 145
Points : 145
bonjour,

tu pourrais biensur utiliser la mémoire en Extend CSA (developpement assembleur) ou les techniques de Dataspaces (assembleur aussi). Cela dit c'est peut etre un peu "sport" pour ton besoin.

personnellement j'utiliserais la methode suivante :

détermination si je suis en CICS ou autre (Batch..) : pour ça un petit assembleur chainant les blocs RB et CDE pour tester si un module DFH... est présent suffit (si oui, nous sommes sous CICS). si tu veux un exemple je peux te donner ça.

- Si en CICS : utilisation d'une TS
- Si en Batch : simple utilisation de la working; c'est CICS qui réinitialise ta working; en Batch pure, si aucun des appelants ne CANCEL ton programme il restera en mémoire et ta working ne sera pas initialisé..
xfanx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 11h10   #3
Invité de passage
 
Inscription : juillet 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 3
Points : 0
Points : 0
Merci xfanx,

Je vais étudier l'utilisation de la mémoire en Extend CSA et les techniques de Dataspaces.

Par contre, je ne peux pas déterminer si je suis en batch ou en CICS, car je ne peux pas maitriser les programmes appelants (trop nombreux) qui appelle se module en call uniquement. Aussi, l'utilisation d'une TS ou d'un working n'est pas possible... A moins de de pourvoir déterminer si le mode est CICS ou Batch dans ce contexte ?
tdeveloppeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 12h16   #4
Membre éclairé
 
Inscription : octobre 2007
Messages : 362
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 362
Points : 359
Points : 359
Citation:
Envoyé par tdeveloppeur Voir le message
Merci xfanx,

Par contre, je ne peux pas déterminer si je suis en batch ou en CICS, car je ne peux pas maitriser les programmes appelants (trop nombreux) qui appelle se module en call uniquement. Aussi, l'utilisation d'une TS ou d'un working n'est pas possible... A moins de de pourvoir déterminer si le mode est CICS ou Batch dans ce contexte ?
Pourquoi ne pas demander à l'appelant de positionner un paramètre qui indique s'il t'apelle en mode Batch ou TP, tout simplement ?
fremen167 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 13h51   #5
Invité de passage
 
Inscription : juillet 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par fremen167 Voir le message
Pourquoi ne pas demander à l'appelant de positionner un paramètre qui indique s'il t'apelle en mode Batch ou TP, tout simplement ?

Organisation de l'entreprise trop complexe et trop de programme non identifiés !
tdeveloppeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 14h10   #6
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Vérifier si on est batch ou CICS n'est pas un problème bloquant. Le plus simple est effectivement de demander l'info à l'appelant. En cas d'impossibilité fonctionnelle il suffit de vérifier et il y a de multiples moyens à commencer par vérifier les blocs de contrôles les MVS. Pointeurs CDE des programmes chargés comme déjà évoqué, vérif JOB ou STC, nom du JOB ou autre en s'appuyant sur les normes 'maison'. Peu importe, même en Cobol c'est directement faisable à condition de bien isoler la fonction pour se prémunir des risques liés à des montées de niveau z/OS.

Pour le reste, une remarque et une piste possible :

1 - L'utilisation hiperspace / dataspace est réservée à de l'Assembleur et loin d'être usuelle. C'est normalement les couches logicielles qui exploitent ça (DB2, CATALOG/VLF ...) Il me semble que c'est plus avec les DBA qu'il faut s'attacher aux perf. de DB2 qui est construit pour ça. Ajouter une couche gestion de cet ordre semble risquée, plus peut être en maintenance évolutive qu'en développement
2 - Pour une gestion optimisée des données fonctionnelles récurrentes (usuellement les contextes), on peut parfaitement émuler un fonctionnement CICS TS MAIN dans du COBOL BATCH. Ca m'a tenté à une époque mais je n'ai pas fait par manque d'opportunité/temps. L'idée est de s'appuyer sur Language Environnement, ce qui a le mérite de mutualiser les languages appelants pratiqués sous z/OS. Je pense évidemment à COBOL en premier lieu qui peut appeler simplement les routines de services L.E. A commencer pour des acquisitions et libérations mémoires haute, à l'instar du fonctionnement TS.
Ca permet aussi et surtout de s'affranchir de la responsabilité d'un des cas de gestion les plus difficiles à gérer en multi-tâches : le 'cleanup' de tout ce qui est en mémoire en cas d'abend. L.E prendra simplement en compte.

Il restera après ça à être vigilent sur l'optimisation du code. Par exemple pour CICS en gérant les RESP au niveau des EXEC CICS fonctions plutôt que dans des Handle Condition pour gagner deux appels au sous-système sur trois. L'optimisation au niveau du langage aussi. Cobol est peut être même un choix plus judicieux que de l'Assembleur. Plus portable et facile à maintenir, il a par ailleurs l'avantage de savoir dialoguer 'nativement' avec L.E.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 14h59   #7
Membre habitué
 
Inscription : janvier 2008
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 124
Points : 145
Points : 145
Si ton seul probleme est de savoir dans quel environnement tu t'exécutes, voici un exemple de programme assembleur de chainage des blocs MVS RB et CDE te permettant de déterminer si tu es en CICS ou dans un autre environnement; il fonctionne sur nos Lpar depuis plusieurs années ;
celui ci te dit si tu es sous IMS ou CICS ou en Batch; conforme LE et réentrant tu n'auras donc aucun souci à l'exécuter sous CICS.

format d'appel :

01 ENVIRONNEMENT PIC X(3).
CALL PGTOTO USING ENVIRONNEMENT



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

PGTOTO   CEEENTRY PPA=UO1PPA,MAIN=NO,NAB=NO,BASE=R11                     
*                                                                        
         L     R9,0(R1)               ADRESSE ZONE PARAMETRES            
         USING PSA,0                  RETROUVER TCB                      
         L     R1,PSATOLD             TCB                                
         DROP  R0                                                        
*                                                                        
         USING TCB,R1                 TCB ADRESSABLE                     
         L     R10,TCBJSTCB           SAUVER JSTCB COURANT               
*                                                                        
A350     DS    0H                                                        
         L     R2,TCBRBP              RB COURANT                         
         USING RBBASIC,R2             RB ADRESSABLE                      
A360     DS    0H                     RETROUVER 1ER RB SOUS LE TCB       
         TM    RBSTAB2,X'80'          1ER ?                              
         BO    A380                   OUI, -->                           
         ICM   R2,7,RBLINKB           RB PRECEDENT                       
         B     A360                   BOUCLER                            
*                                                                        
                                                      
A380     DS    0H                                                
         ICM   R2,7,RBCDE1            CDE DU PREMIER RB          
         DROP  R2                     FIN ADRESSABILITE RB       
         USING CDENTRY,R2             CDE ADRESSABLE             
         LA    R2,CDNAME              POINTER SUR LE NOM DU PGM  
         DROP  R2                     FIN ADRESSABILITE CDE      
*                                                                
         CLC   0(8,R2),=CL8'DSNECP10' APPEL SOUS DSN ?           
         BE    ATSO                   OUI, SE DEBRANCHER         
*                                                                
         CLC   0(8,R2),=CL8'BTSRC000' APPEL SOUS BTS ?           
         BE    AIMS                   OUI, SE DEBRANCHER         
*                                                                
         CLC   0(8,R2),=CL8'DFSRRC00' XPED IMS BATCH CONNECT ?   
         BE    AIMS                   OUI, SE DEBRANCHER         
*                                                                
         CLC   0(8,R2),=CL8'DFHSIP'   XPED CICS BATCH CONNECT    
         BE    ACICS                  OUI, SE DEBRANCHER         
*                                                                
A390     DS    0H                                                       
         CR    R1,R10                 TCB COURANT = JSTCB ?             
         BE    A400                   OUI, ON N'EST DONC PAS SOUS DSN   
         L     R1,TCBOTC              TCB PERE                          
         B     A350                   RECHERCHER SUR TCB PRECEDENT      
*                                                                       
*                                     ICI QUAND ON N'EST PAS SOUS TSO   
*                                     R2 --> 1ER PGM DU JSTCB           
A400     DS    0H                                                       
         DROP  R1                     FIN ADRESSABILITE TCB             
         CLC   0(3,R2),=CL3'DFS'      IMS ?                             
         BE    AIMS                   OUI, -->                          
*                                                                       
         CLC   0(3,R2),=CL3'DFH'      CICS?                             
         BE    ACICS                  OUI, -->                          
*                                                                       
* PAR DEFAUT ON VA METTRE NATIF COMME ENVIRONNEMENT TYPE EXEC PGM       
         MVC   0(3,R9),=C'NAT'          ENV CAF PAR DEFAUT              
*                                                                       
A900     DS    0H                                                       
         CEETERM RC=0                             
*                                                 
ATSO     DS    0H                                 
         MVC   0(3,R9),=C'TSO'                    
         B     A900                               
AIMS     DS    0H                                 
         MVC   0(3,R9),=C'IMS'                    
         B     A900                               
ACICS    DS    0H                                 
         MVC   0(3,R9),=C'CIC'                    
         B     A900                               
*                                                 
*                                                 
*************************************             
*     CORPS DU PROGR.                             
*************************************             
         LTORG   *                                
UO1PPA   CEEPPA                                   
         CEECAA                                   
         CEEDSA                                   
        PRINT NOGEN                
        IHAPSA                     
        IKJTCB                     
        IHACDE                     
        IHARB                      
        END
xfanx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 15h19   #8
Membre habitué
 
Inscription : janvier 2008
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 124
Points : 145
Points : 145
en conclusion pour ma part et pour rebondir sur les remarques d'homer-ac, je dirais qu'il est dommage que tu ne sois qu'en Z/OS 1.3;, d'une part parcequ'à partir du 1.8 si je me souviens bien, tu disposes des fonctions C du Z/OS necessaires à la programmation des dataspaces et tu as encore une autre possibilité qui à mon sens est nettement meilleur que les dataspaces c'est la programmation en Amode64 , en mémoire shared multi espace adresse .

personnellement dans mon entreprise nous avons utilisé le systeme de dataspace shared il y a quelques années pour stocker un référentiel des valeurs extrement accedé et ainsi gagner un maximum en performance, écrit en assembleur à l'époque;
aujourdhui nous réécrivons cet outil en C , avec justement la technique Amode64 mémoire shared; le gros avantage est la place mémoire pratiquement illimité (en théorie), et surtout le language C d'une maintenance plus aisée. disons qu'il est plus facile de trouver un programmeur C qu'un programmeur Assembleur.
Si tu veux te lancer dans cette technique, sur le site IBM tu trouves de la tres bonne documentation sur le sujet.
xfanx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h09.


 
 
 
 
Partenaires

Hébergement Web