C -------------- C I DESCRIPTEURS I C -------------- C C MACROS D'ACCES AUX CHAMPS D'UN DESCRIPTEUR C C A CHAQUE SEGMENT INITIALISE PAR GEMAT CORRESPOND UN DESCRIPTEUR C QUI PERMET UN ADRESSAGE INDIRECT DES DONNEES DU SEGMENT . C C LE DESCRIPTEUR N'EST LIBERE QU'A LA SUPRESSION DU SEGMENT C C 1- LISTE DES CHAMPS D'UN DESCRIPTEUR C --------------------------------- C C A*** DESCRIPTEUR ATTRIBUE: C C MDISG INDICE SEGMENT C MDTRK ADRESSE EN ZONE DE DBT (MEM OU DISQUE) C MDTYP TYPE SEGMENT C MDLEN LONGUEUR SEGMENT, OU SUPER-SEGMENT C SI PETIT SEGMENT SUR DISQUE C MDMK INDICE DU MARQUEUR SI SUPER SEGMENT C C B*** DESCRIPTEUR LIBRE: C C C LES DESCRIPTEURS LIBRES Y COMPRIS LE C DESCRIPTEUR D'INDICE IDE1 FORMENT UN CHAINAGE TEL C QUE POUR CHAQUE DESCRIPTEUR LIBRE D'INDICE IDE ON AIT : C MDIDS=DESCRIPTEUR SUIVANT DS CHAINE LIBRE C C 2- ** C O N S T A N T E S D E S C R I P T E U R *** C ------------------------------------------- C C MDLDE LONGUEUR DESCRIPTEUR EN MOTS C MDNDEX NOMBRE DE DESCRIPTEUR A AJOUTER LORS D'UNE EXTENSION C MACRO , MDLDE = 8 MACRO , MDNDEX = 8 C VALEUR DU PREMIER DESCRIPTEUR(IDE1) ATTRIBUE APRES INITIALISATION C DU SEGMENT DES DESCRIPTEURS C CETTE VALEUR DOIT ASSURER LA COMPATIBILITE DES SAUVEGARDES : C ON AJUSTE LA LONGUEUR DE LA ZONE OC4 POUR LA MAINTENIR C CONSTANTE. CFT NE COMPRENANT RIEN A LA COMPATIBILITE DES SAUVEGARDES, LA SEULE CFT CONDITION EST QUE MDIDX0 SOIT DE LA FORME MDLDE*n-1 AVEC n CFT AU MOINS SUPERIEUR A MDNNCHN+2. CFT : 249 = 109 (MZIDE1) + (12+2)*MDLDE 12 = nombre de chaines C MACRO , MDIDX0=249 MACRO , MDIDX0= 1 + (12+2)*MDLDE C VERSION 0.1.5 VALEUR DE MDIDX0 : C IBM,IRIS,VAX MDIDX0= 141 (8D EN HEXA) C CDC,CRAY,FPS MDIDX0= 92 (134 EN OCTAL) C LA COMPATIBILITE EST ASSUREE LORS DE LA RESTAURATION (OOORES) C C MACRO , MDMAXTYP=96 MACRO , MDMINTYP=0 C C C 3- S C H E M A D 'U N D E S C R I P T E U R : C ------------------------------------------- C C UN DESCRIPTEUR D'INDICE IDE COMPREND LDE MOTS JDE(OOT+IDE+0,1) C C A-SEGMENT ISOLE EN MEMOIRE(ACTIVE OU BUF) C OU MARQUEUR DE SUPER SEGMENT C MDTRK SI COPIE DISQUE C .______________._______________. .______._______________________. C 1 | MDISG + MSLZ1 |2| MDTYP| MDTRK | C |______________________________| |______|_______________________| C 31 24 23 0 C C B-PETIT SEGMENT EN MEMOIRE ACTIVE C .______________._______________. .______._______________________. C 1 | MDISG + MSLZ1 |2| MDTYP| MDMK | C |______________________________| |______________________________| C 31 24 23 0 C C-SEGMENT EN ZONE DE DBT C .______________._______________. .______._______________________. C 1 | MDLEN |2| MDTYP| MDTRK | C |______________________________| |______________________________| C 31 24 23 0 C D-DESCRIPTEUR LIBRE C .______________._______________. .______________._______________. C 1 |//////////////////////////////|2| - MDIDS | C |______________________________| |______________________________| C MACRO , MDISG (ID) ** MDISG = (SIGN(ABS(JDE(OOT+(ID))+OOT),OOT)-MSLZ1) MDISG = (SIGN(ABS(JDE(OOT+(ID)) ),OOT)-MSLZ1) PSEUDO , ISG ** JDE(OOT+(ID)) = (ISG)+MSLZ1-OOT ** JDE(OOT+(ID)+2) = (ISG)+MSLZ1-OOT JDE(OOT+(ID)) = (ISG)+MSLZ1 JDE(OOT+(ID)+2) = (ISG)+MSLZ1 ENDMACRO PSEUDO , ISG ** JDE(OOT+(ID)) = -((ISG)+OOT+MSLZ1) JDE(OOT+(ID)) = -((ISG)+ MSLZ1) ENDMACRO MACRO , METTRE CE SEGMENT EN READ ONLY (ID) PSEUDO , ISG c JDE(OOT+(ID)+2) = -(JDE(OOT+(ISG))) %IF WIN32,UNIX32 JDE(OOT+(ID)+2) = -939524096 %ELSE JDE(OOT+(ID)+2) = -4611686018427387904 %ENDIF ENDMACRO C MACRO , MDTYP(ID) MDTYP = (JDE(OOT+(ID)+1)/16777216) PSEUDO , ITYP JDE(OOT+(ID)+1)=MOD(JDE(OOT+(ID)+1),16777216)+(ITYP)*16777216 ENDMACRO C MACRO , MDLEN(ID)=JDE(OOT+(ID)) C MACRO , MDMK (ID) MDMK =MOD(JDE(OOT+(ID)+1),16777216) PSEUDO , IDMK JDE(OOT+(ID)+1)=(JDE(OOT+(ID)+1)/16777216)*16777216+(IDMK) ENDMACRO C MACRO , MDTRK(ID) MDTRK =MOD(JDE(OOT+(ID)+1),16777216) PSEUDO , ITRK JDE(OOT+(ID)+1) = (JDE(OOT+(ID)+1)/16777216)*16777216+(ITRK) ENDMACRO C MACRO , MDIDS(ID) = JDE(OOT+(ID)+1) C MACRO , MDZERO(ID) PSEUDO , LZERO JDE(OOT+(ID) )=LZERO JDE(OOT+(ID)+1)=LZERO JDE(OOT+(ID)+2)=LZERO CPV JDE(OOT+(ID)+3)=LZERO CPV JDE(OOT+(ID)+4)=LZERO CPV JDE(OOT+(ID)+5)=LZERO CPV JDE(OOT+(ID)+6)=LZERO CPV JDE(OOT+(ID)+7)=LZERO CPV JDE(OOT+(ID)+8)=LZERO CPV JDE(OOT+(ID)+9)=LZERO ENDMACRO C C C 4- S C H E M A D U T Y P E S E G M E N T C ----------------------------------------- C C .__.__.__.__.__.__.__.__. C |//|D | C | E |Q |O | C |__|__|__.__|_____|__|__| C 7 6 5 4 3 2 1 0 C |-----------------| C + C + C ^ C NUMERO DE CHAINE (MDCHAIN) C C C C D = LOCALISATION 0 =MEMOIRE C (MDDISK) 1 =ZONE DE DEBORDEMENT C C C = CATEGORIE 00=SEGMENT ISOLE C (MDCAT) 01=SEGMENT FIXE C 10=COMPOSANT D'UN SUPER SEGMENT C 11=MARQUEUR D'UN SUPER SEGMENT C C E = ETAT 00=ACTIF C (MDETAT) 01=INACTIF C 10=NOMOD C 11=MOD C C Q = CHAINE 0 =QUEUE LRU C (MDQUEU) 1 =PILE MRU C C O = OUTPUT 0 =AUTRE C (MDBUF) 1 =QUEUE BUFFER C C C C *** LOCALISATION C MACRO , MDMEM = 0 , MDDISQUE = 1 C MACRO , MDDISK (ITYP) MDDISK = ((ITYP)/64) PSEUDO , IDISK ITYP =MOD(ITYP ,64)+(IDISK)*64 ENDMACRO C C *** CATEGORIE C MACRO , MDISOLE=0 , MDFIXE=1 , MDBLOCK=2 , MDMARK=3 C MACRO , MDCAT (ITYP) MDCAT =(MOD(ITYP ,64)/16) PSEUDO , ICAT ITYP = ((ITYP)/64)*64+MOD(ITYP,16)+(ICAT)*16 ENDMACRO C C *** ETAT C MACRO , MDACT=0 , MDINACT=1 , MDNOMOD=2 , MDMOD=3 C MACRO , MDETAT (ITYP) MDETAT =(MOD(ITYP ,16)/4) PSEUDO , IETAT ITYP = ((ITYP)/16)*16+MOD(ITYP,4)+(IETAT)*4 ENDMACRO C C *** CHAINAGE C MACRO , MDLRU=0 , MDMRU=1 C MACRO , MDQUEU (ITYP) MDQUEU =(MOD(ITYP ,4)/2) PSEUDO , IQUEU ITYP = ((ITYP)/4)*4+MOD(ITYP,2)+(IQUEU)*2 ENDMACRO C C *** BUFFER C MACRO , MDNBUF=0 , MDBUF=1 C MACRO , MDIO (ITYP) MDIO = MOD(ITYP ,2) PSEUDO , IBUF ITYP = ((ITYP)/2)*2+(IBUF) ENDMACRO C C *** CHARGEMENT DU TYPE C MACRO , MDLTYP(ICAT,IDISK,IETAT,IQUEU,IO) MDLTYP = ((IDISK)*64+(ICAT)*16+(IETAT)*4+(IQUEU)*2+(IO)) ENDMACRO C C C 5- C H A I N A G E S E G M E N T S C --------------------------------- C C LISTE DES CHAINES DE SEGMENTS C MACRO , MDNNCHN=12 MACRO , ( ACTIF , FIXE , LRU , MRU , CACTIF , CLRU , CMRU * , OLIN , OLNOMOD , OLMOD , OMNOMOD , OMMOD ) C C MDNDX0 NOMBRE INITIAL DESCRIPTEURS =NOMBRE DE TETES DE CHAINES C + TETE DE CHAINE DES DESCRIPTEURS LIBRES C + DESCRIPTEUR DU SEGMENT DES DESCRIPTEURS C MACRO , MDNDX0=(MDNNCHN+2) C C MDCHAIN ACCES AU NUMERO DE CHAINE (CF MDNCHN) C MDNCHN NUMERO DE CHAINE C MDMKSS ETAT DES COMPOSANT D'UN SUPER SEGMENT(CF MSMKISS) C MDQIO NUMERO DE CHAINE BUFFER CORRESPONDANT A L'ETAT D'UN C SEGMENT (CF MDNQIO) C MDNQIO NUMERO DE CHAINE BUFFER C MDACHN ADRESSE DE TETE DE CHAINE C MDOPOCHN INDICATEUR DE CHAINE : HORS FONCTION OU EN FONCTION C MACRO , MDCHAIN (ITYP) = (MOD(ITYP,64)+1) MACRO , MDNCHN (ITYP) = MZCHN(MDCHAIN(ITYP)) MACRO , MDMKSS (ITYP) = (MOD(ITYP,16)/2+1) MACRO , MDQIO (ITYP) = (MOD(ITYP,16)/2+1) MACRO , MDNQIO (ITYP) = MZCBUF(MDQIO(ITYP)) MACRO , MDACHN (ICHN) = (MZIDE1+(ICHN)*MDLDE) MACRO , MDOPOCHN = 1 , MDOPFCHN = 0 C MACRO , MDOPCHN (ICHN) = JZZ(MDISG(MDACHN(ICHN))+MSLZ1+1) C C C 6- C H A N G E M E N T S D E C H A I N E C ---------------------------------------- C C PASSER UN SEGMENT D UNE CHAINE A UNE AUTRE C* C* ID2 INDICE D'UN DESCRIPTEUR DE SEGMENT DE LA CHAINE RECEPTRICE C* ID1 INDICE DU DESCRIPTEUR DU SEGMENT A CHANGER DE CHAINE C* C* MACRO , MDCHN ( ID2 , ID1 ) C C****** RETIRER ID1 DE SA CHAINE C IIIS1 = MDISG(ID1) IIIDP1 = MSIDP(IIIS1) IIITYP = MDTYP(IIIDP1) IIIDS1 = MSIDS(IIIS1) MSIDP(MDISG(IIIDS1))=IIIDP1 MSIDS(MDISG(IIIDP1))=IIIDS1 IIICHN = MDNCHN(IIITYP) MZQCHN(IIICHN) = MZQCHN(IIICHN)-MSLS1(IIIS1) C C****** INTRODUIRE ID1 DANS LA CHAINE DEVANT LE SGM ID2 C IIIS2 = MDISG(ID2) IIITYP = MDTYP(ID2) IIIDP2 = MSIDP(IIIS2) MSIDS(MDISG(IIIDP2))=ID1 MSIDP(IIIS1) = IIIDP2 MSIDP(IIIS2) = ID1 MSIDS(IIIS1) = ID2 IIICHN = MDNCHN(IIITYP) MZQCHN(IIICHN)= MZQCHN(IIICHN)+MSLS1(IIIS1) C ENDMACRO C C RETIRER UN SEGMENT D'INDICE IDE D'UNE CHAINE C MACRO , MDCH0 ( IDE ) C C****** RETIRER IDE DE SA CHAINE C IIIS1 = MDISG(IDE) IIIDP1 = MSIDP(IIIS1) IIITYP = MDTYP(IIIDP1) IIIDS1 = MSIDS(IIIS1) MSIDP(MDISG(IIIDS1))=IIIDP1 MSIDS(MDISG(IIIDP1))=IIIDS1 IIICHN = MDNCHN(IIITYP) MZQCHN(IIICHN)= MZQCHN(IIICHN)-MSLS1(IIIS1) C LE BOUCLER SUR LUI MEME MSIDP(IIIS1)=IDE MSIDS(IIIS1)=IDE C ENDMACRO C C INTRODUIRE UN SEGMENT DANS UNE CHAINE C* C* ID2 INDICE D'UN DESCRIPTEUR DE SEGMENT DE LA CHAINE RECEPTRICE C* ID1 INDICE DU DESCRIPTEUR DU SEGMENT A INTRODUIRE C* C* MACRO , MDCHNP(ID2,ID1) C C****** INTRODUIRE ID1 DANS LA CHAINE DEVANT LE SGM ID2 C IIIS1 = MDISG(ID1) IIIS2 = MDISG(ID2) IIITYP = MDTYP(ID2) IIIDP2 = MSIDP(IIIS2) MSIDS(MDISG(IIIDP2))=ID1 MSIDP(IIIS1) = IIIDP2 MSIDP(IIIS2) = ID1 MSIDS(IIIS1) = ID2 IIICHN = MDNCHN(IIITYP) MZQCHN(IIICHN) = MZQCHN(IIICHN)+MSLS1(IIIS1) C ENDMACRO C C C* ECHANGE DES DESCRIPTEURS DE DEUX SEGMENTS C C HYPOTHESE : C LES SEGMENTS SONT TOUS LES DEUX DANS LA MEME CHAINE C MACRO , MSECH(ID1,ID2) C C****** SAUVEGARDE DES INFORMATIONS DE CONTROLE C IIIS1 =MDISG(ID1) IIITRK=MDTRK(ID1) IIIS2 =MDISG(ID2) IIIDP2=MSIDP(IIIS2) IIIDS2=MSIDS(IIIS2) C C****** ID1 POINTE SUR LE NOUVEAU SEGMENT C MSIDE(IIIS2)=ID1 MDISG(ID1) =IIIS2 MDTRK(ID1) =MDTRK(ID2) MSIDP(IIIS2)=MSIDP(IIIS1) MSIDS(IIIS2)=MSIDS(IIIS1) C C****** ID2 POINTE SUR L'ANCIEN SEGMENT C MSIDE(IIIS1)=ID2 MSIDP(IIIS1)=IIIDP2 MSIDS(IIIS1)=IIIDS2 MDTRK(ID2) =IIITRK MDISG(ID2) =IIIS1 C ENDMACRO C C C 7- A C C E S A U X C H A M P S 4 A 8 C ----------------------------------------- C C CES CHAMPS SONT UTILISES POUR ESOPE MULTITHREADE C* C* MOT NUMERO 4 : NUMERO DU THREAD AYANT ACTIVE EN READWRITE C* MACRO , MDRW(ID) MDRW=JDE(OOT+(ID)+3) PSEUDO , PRRW JDE(OOT+(ID)+3) = PRRW ENDMACRO C* C* MOT NUMERO 5 : MASQUE 1 DES THREADS AYANT ACTIVES EN READONLY C* MACRO , MDRO1(ID) MDRO1=JDE(OOT+(ID)+4) PSEUDO , PRRO1 JDE(OOT+(ID)+4) = PRRO1 ENDMACRO C* C* MOT NUMERO 6 : MASQUE 2 DES THREADS AYANT ACTIVES EN READONLY C* MACRO , MDRO2(ID) MDRO2=JDE(OOT+(ID)+5) PSEUDO , PRRO2 JDE(OOT+(ID)+5) = PRRO2 ENDMACRO C* C* MOT NUMERO 7 : POINTEUR SUR LA CONDITION (ET MUTEX) POUR L'ATTENTE C* D'EVENEMENT SUR CE SEGMENT C* MACRO , MDCO(ID) MDCO=JDE(OOT+(ID)+6) PSEUDO , PRCO JDE(OOT+(ID)+6) = PRCO ENDMACRO C* C* MOT NUMERO 8 : HORODATAGE DU SEGMENT C* MACRO , MDHOR(ID) MDHOR=JDE(OOT+(ID)+7) PSEUDO , PRHOR JDE(OOT+(ID)+7) = PRHOR ENDMACRO C C C ON UTILISE EGALEMENT LE MOTS 2 POUR LE CHAINAGE ARRIERE DES C DESCRIPTEURS LIBRES C MACRO , MDIDP(ID) MDIDP = (JDE(OOT+(ID)+2)) PSEUDO , LDIDP JDE(OOT+(ID)+2)=(LDIDP) ENDMACRO C C-------------------------------------------------------------------- C
© Cast3M 2003 - Tous droits réservés.
Mentions légales