A.

       ECli BBedena posledowatelxnostx <CTRL/C> HA KOHCOlxHOM TEPMiHAlE
  i .SCCA HE uCTAHOBlEH, zAdAHiE snimaetsq s wypolneniq.

       format makrokomandy:

            .mtIN    aRea,aDDR,UNIt[,snRsNt]

   gde

  aRea   - adres tablicy argumentow iz treh slow;

  aDDR   - adres bufera w programme (po |tomu adresu budet proizwoditx-
           sq pereda~a znakow, wwedennyh s terminala);

                                 - 185 -




  UNIt   - logi~eskij nomer terminala;

  snRsNt - koli~estwo znakow, kotoroe trebuetsq wwesti (ot 1  do  255);
           esli |tot argument opu}en, to budet peredan odin znak.

       format tablicy argumentow emt:

                    !--------!--------!
        R0 => AREA: !   37   !   2    !
                    !--------!--------!
                    !      ADDR       !
                    !--------!--------!
                    ! CHRCNT !  UNIT  !
                    !--------!--------!

       esli woznikla o{ibka pri wypolnenii makrokomandy, to budet usta-
  nowlen bit s slowa sostoqniq processora. eRRwYt (52) budet  sodervatx
  kod o{ibki. wozmovny soob}eniq ob o{ibkah s kodami 0, 1, 2,  3  i  5.
  kod o{ibki nolx (net wwoda) poqwitsq w slu~ae, esli ustanowlen bit  6
  w M.TSTS (ili w JSW - dlq sistemnogo terminala).

       primer priweden w podpunkte 7.8.7.10.



       7.8.7.5. .MTOUT - ByBOd CiMBOlA



       makrokomanda .mtoUt wypolnqet dejstwiq,  protiwopolovnye  .mtIN.
  ona qwlqetsq mnogoterminalxnoj formoj makrokomandy .ttYoUt.  makroko-
  manda .mtoUt ne ispolxzuet |lement o~eredi. makrokomanda .mtoUt pere-
  sylaet odin ili neskolxko znakow  iz  bufera  programmy  w  kolxcewoj
  bufer wywoda. terminal dolven bytx  predwaritelxno  "monopolizirowan"
  programmoj. esli makrokomanda wypolnena uspe{no, to R0  budet  soder-
  vatx modificirowannyj adres bufera programmy.

       makrokomanda .MTOUT pEPECylAET dlq  KOHCOli  zAdAHiq  iz  JSW  B
  T.CNFG PAzPqdy 14, 12, 6. dlq  fOHOBOj  KOHCOli  pPOgPAMMA  zAgPuvAET
  T.TFIL iz q~EjKi 56.

       pPOgPAMMA pEPEHOCiT CiMBOl iz  bufEPA  pOlxzOBATElq  B  ByXOdHOj
  KOlxcEBOj bufEP i izMEHqET uKAzATElx bufEPA. ECli TEPMiHAl - KOHCOlx,
  TO pPOgPAMMA iCpOlxzuET KOlxcEBOj bufEP B CME{AHHOj OblACTi  zAdAHiq.
  ECli TEPMiHAl - HE KOHCOlx, TO pPOgPAMMA iCpOlxzuET KOlxcEBOj bufEP B
  TCB.

       esli bufer wywoda zapolnen i bit 6 w M.TSTS ustanowlen, to budet
  ustanowlen C-bit i kod o{ibki  nolx.  w  protiwnom  slu~ae  programma
  perewoditsq w sostoqnie ovidaniq, poka ne poqwitsq mesto w  kolxcewom
  bufere wywoda.

       esli .mtoUt sodervit zapros na  pereda~u  neskolxkih  znakow,  a
  bufer wywoda sodervit nedostato~no mesta,  to  programma  movet  bytx
  libo perewedena w sostoqnie ovidaniq (esli bit 6 m.tStS o~i}en), libo
  operaciq budet wypolnena nepolnostx` (esli bit 6 m.tStS  ustanowlen).
  w poslednem slu~ae R0 budet sodervatx modificirowannyj  adres  bufera
  (R0 budet pokazywatx na bajt, sledu`}ij za poslednim wywedennym  zna-
  kom), odnowremenno budet ustanowlen bit C i kod o{ibki nolx.

                                 - 186 -




       format makrokomandy:

            .mtoUt   aRea,aDDR,UNIt[,snRsNt]

   gde

  aRea   - adres tablicy argumentow iz treh slow;

  aDDR   - adres bufera w programme,  iz  kotorogo  budut  peredawatxsq
           znaki;

  UNIt   - logi~eskij nomer terminala;

  snRsNt - koli~estwo znakow, kotoroe neobhodimo wywesti (ot 1 do 255);
           esli |tot argument opu}en, to budet wyweden odin znak.

       format tablicy argumentow emt:

                    !--------!--------!
        R0 => AREA: !   37   !   3    !
                    !--------!--------!
                    !      ADDR       !
                    !--------!--------!
                    ! CHRCNT !  UNIT  !
                    !--------!--------!

       esli woznikla o{ibka pri wypolnenii makrokomandy, to budet usta-
  nowlen bit s slowa sostoqniq processora. eRRwYt (52) budet  sodervatx
  kod o{ibki. wozmovny soob}eniq ob o{ibkah s kodami 0, 1, 2, 3.

       primer priweden w podpunkte 7.8.7.10.



       7.8.7.6. .MTPRNT - ByBOd CTPOKi



       makrokomanda qwlqetsq mnogoterminalxnoj formoj .rRINt. ona  poz-
  wolqet wywesti na |kran terminala posledowatelxnostx znakow (odnu ili
  neskolxko strok).  uprawlenie  programme  wozwra}aetsq  tolxko  posle
  zawer{eniq operacii.

       posledowatelxnostx znakow dolvna  zakan~iwatxsq  libo  bajtom  s
  wosxmeri~nym kodom "0", libo "200" (analogi~no makrokomande  .rRINt).
  esli stroka zakan~iwaetsq bajtom s kodom 0, to posle zawer{eniq pere-
  da~i sodervimogo bufera na terminal budut wywedeny znaki <sR> i <LF>.
  ispolxzowanie bajta s kodom 200 w ka~estwe ograni~itelq stroki  poda-
  wit wywod posledowatelxnosti <sR><LF>.

       primer.

                .aSsIZ /stroka/
          ili   .aSsII /stroka/<200>

       .MTPRNT pEPECylAET CTPOKu  iz  bufEPA  pOlxzOBATElq  B  ByXOdHOj
  KOlxcEBOj bufEP i izMEHqET EgO uKAzATElx.  dlq  KOHCOli  iCpOlxzuETCq
  KOlxcEBOj bufEP B CME{AHHOj OblACTi zAdAHiq. dlq HE KOHCOli -  B  TCB
  TEPMiHAlA. ECli nedOCTATO~HO MECTA B ByXOdHOM  KOlxcEBOM  bufEPE,  to

                                 - 187 -




  zAdAHiE pPiOCTAHABliBAETCq dO pOqBlEHiq MECTA HEzABiCiMO OT  zHA~EHiq
  PAzPqdA 6 B T.CNFG.

       format makrokomandy:

            .mtPRNT   aRea,aDDR,UNIt

   gde

  aRea   - adres tablicy argumentow iz treh slow;

  aDDR   - adres na~ala stroki dlq wywoda;

  UNIt   - logi~eskij nomer terminala.

       format tablicy argumentow emt:

                    !--------!--------!
        R0 => AREA: !   37   !   7    !
                    !--------!--------!
                    !      ADDR       !
                    !--------!--------!
                    !   -    !  UNIT  !
                    !--------!--------!

       esli woznikla o{ibka pri wypolnenii makrokomandy, to budet usta-
  nowlen bit s slowa sostoqniq processora. wozmovnye kody o{ibok dannoj
  makrokomandy: 1, 2, 5.

       primer priweden w podpunkte 7.8.7.10.



       7.8.7.7. .MTRCTO - sbros flaga <CTRL/O>




       .mTRCTO iCpOlxzuETCq dlq BOCCTAHOBlEHiq  BOzMOvHOCTi  ByBOdA  HA
  TEPMiHAl, HA KOTOPOM bylA zAdAHA komanda <CTRL/O>.

       .MTRCTO CbPACyBAET flAg <CTRL/O> B TCB i pEPECylAET dlq  KOHCOli
  zAdAHiq PAzPqdy 14, 12, 6 iz JSW B  T.CNFG.  dlq  fOHOBOj  KOHCOli  B
  T.TFIL zAgPuvAETCq q~EjKA 56.

       ECli izMEHqETsq COdEPviMOE JSW,  to  PEKOMEHduETCq  iCpOlxzOBATx
  .MTRCTO CPAzu vE pOClE |TOgO, dlq TOgO, ~TOby JSW  i  TCB  BCE  BPEMq
  COdEPvAli OdiHAKOBu`  iHfOPMAci`.  HApPiMEP,  ECli  HEObXOdiM  nivnij
  registr dlq wwoda s pomo}x` .GTLIN, to nado ustanowitx  razrqd  14  w
  JSW i wypolnitx .MTRCTO ili RCTRLO pEPEd .GTLIN.

       format makrokomandy:

            .mtRsto  aRea,UNIt
   gde

  aRea   - adres tablicy argumentow iz treh slow;

  UNIt   - logi~eskij nomer terminala.

                                 - 188 -




       format tablicy argumentow emt:

                    !--------!--------!
        R0 => AREA: !   37   !   4    !
                    !--------!--------!
                    !ne ispolxzuetsq  !
                    !--------!--------!
                    !   -    !  UNIT  !
                    !--------!--------!

       esli woznikla o{ibka pri wypolnenii makrokomandy, to budet usta-
  nowlen bit s. wozmovnye kody o{ibok dannoj makrokomandy: 1, 2, 3.

       primer priweden w podpunkte 7.8.7.10.



       7.8.7.8. .MTSTAT - parametry sistemy




       .MTSTAT iCpOlxzuETCq dlq pOlu~EHiq iHfOPMAcii O COCTOqHii MHOgO-
  TEPMiHAlxHOj CiCTEMy. w  posledowatelxnyh  ~ETyPEh  ClOBAh  pPOgPAMMy
  budet sodervatxsq sledu`}aq informaciq:

         - sME}EHiE OT HA~AlA RMON dO pEPBOgO TCB;

         - CME}EHiE OT HA~AlA RMON dO TCB TEPMiHAlA dAHHOgO zAdAHiq;

         - Ob}EE ~iClO TCB;

         - PAzMEP TCB B bAjTAX (BCE TCB iME`T OdiH i TOT vE PAzMEP).

       TCB PAzME}EHy B RMON B  TOj  pOClEdOBATElxHOCTi,  B  KAKOj  byli
  zAdAHy DL i DZ liHii pri generacii: CHA~AlA iduT  TCB  dlq  lOKAlxHyX
  DL, zATEM udAlEHHyX DL, zATeM lOKAlxHyX DZ i udAlEHHyX DZ.

       C pOMO}x` iHfOPMAcii, pOlu~EHHOj .MTSTAT  MOvHO  OpPEdEliTx  TCB
  l`bOgO TEPMiHAlA i pPOBEPiTx COdEPviMOE TCB  C  pOMO}x`  makrokomandy
  .GVAL (sm. TAbl. 4).

       .MTSTAT wozwra}aet informaci` o statuse mnogoterminalxnoj siste-
  my w programmu.

       format makrokomandy:

          .MTSTAT AREA,ADDR

  gde

  AREA   - adres tablicy argumentow iz treh slow;

  ADDR   - adres 8-slownogo bloka sostoqniq sistemy, w kotoryj  wozwra-
           }aetsq informaciq o sisteme, priwedennaq w tabl. 11.

       format tablicy argumentow:

                                 - 189 -





      R0 => AREA: !--------!--------!
                  !   37   !   10   !
                  !--------!--------!
                  !      ADDR       !
                  !-----------------!
                  !        0        !
                  !-----------------!

                                                tablica 11
            tablica sostoqniq sistemy
   -------------------------------------------------------
    sme}enie  !              sodervanie
    (bajty)   !
   -------------------------------------------------------
        0     !  sme}enie ot bazy RMON do perwogo TCB
              !
        2     !  sme}enie ot bazy RMON do TCB konsolxnogo
              !  terminala zadaniq
              !
        4     !  koli~estwo TCB (ot 1 do 17 desqti~nyh)
              !
        6     !  razmer TCB w bajtah
              !
     10 - 17  !  ne ispolxzu`tsq


       wozmovna o{ibka s kodom 5.

       primer priweden w opisanii makrokomandy  .MTATCH  (sm.  podpunkt
  7.8.7.1).



       7.8.7.9. .MTDTCH - OCBObOvdEHiE TEPMiHAlA




       .mTDTCH iCpOlxzuETCq dlq OCBObOvdEHiq  TEPMiHAlA  i  dElAET  EgO
  dOCTupHyM dlq dPugogo zAdAHiq.  CHA~AlA  uCTAHABliBAETsq  biT  DTACH$
  (biT 4 B T.STAT), ~TOby pokazatx, ~TO BypOlHqETCq  OpEPAciq  OTKl`~E-
  Hiq. |TO iCKl`~AET KOHfliKTHyE CiTuAcii B MOdulE MTTINT. (KOHfliKTHAq
  CiTuAciq - |to CiTuAciq, KOgdA dBE ili  bOlEE  OpEPAcii  OdHOBPEMEHHO
  pyTA`TCq izMEHiTx OdHi i TE vE dAHHyE).  zATEM  uCTAHABliBAETCq  XON,
  ECli PAHEE byl uCTAHOBlEH XOFF. ECli TEPMiHAl - HE  PAzdElqEMAq  KOH-
  COlx, zApOlHqETCq ByXOdHOj bufEP. B RT11SJ pPOgPAMMA ciKliTCq dO  TEX
  pOP, pOKA T.OUTR HE O~iCTiTCq. B RT11FB(XM) BypOlHEHiE zAdAHiq pPiOC-
  TAHABliBAETCq dlq O~iCTKi T.OCTR.

       ClOBA T.OWNR i T.AST CbPACyBA`TCq B 0 dlq oswobovdaemogo  TEPMi-
  HAlA i, HAKOHEc, CbPACyBAeTCq DTACH$.

       KOgdA zAdAHiE zawer{AETCq, TEPMiHAl oswobovdaeTCq bEz zApOlHEHiq
  bufEPOB.

       kogda terminal oswobovden,  wse  prerywaniq,  swqzannye  s  nim,
  ignoriru`tsq. wwod informacii s terminala blokiruetsq nemedlenno,  no
  znaki, nahodq}iesq w  kolxcewom  bufere  wywoda,  raspe~atywa`tsq  na

                                 - 190 -




  |kran do konca. popytka otkl`~itx  terminal,  podkl`~ennyj  k  drugoj
  programme, priwodit k o{ibke. odnako, popytka otkl`~itx  nepodkl`~en-
  nyj terminal prosto ignoriruetsq.

       format makrokomandy:

            .mtDtsn  aRea,UNIt

   gde

  aRea   - adres tablicy argumentow iz treh slow;

  UNIt   - logi~eskij nomer terminala.

       format tablicy argumentow emt:

                    !--------!--------!
        R0 => AREA: !   37   !   6    !
                    !--------!--------!
                    ! ne ispolxzuetsq !
                    !--------!--------!
                    !   -    !  UNIT  !
                    !--------!--------!

       esli woznikla o{ibka pri wypolnenii makrokomandy, to budet usta-
  nowlen bit s. wozmovny o{ibki s kodami 1, 2, 3.

       primer.

           .tItLe  mtDtsn.mas
           .msaLL  .mtDtsn,.mtrRNt,.mtatsn,.ehIt,.rRINt
   StaRt:  .mtatsn #mta,#0,#3      ;podkl`~itx nomer 3
           wsS     1$              ;o{ibka podkl`~eniq
           .mtrRNt  #mta,#meSS,#3  ;nape~atatx soob}enie
           .mtDtsn #mta,#3         ;otkl`~itx terminal
           .ehIt
   1$:     .rRINt  #ATTeRR         ;soob}enie ob o{ibke
                                   ; (na sistemnyj terminal)
           .ehIt
   ATTeRR: .aSsIZ  /o{ibka podkl`~eniq term#3/
   meSS:   .aSsIZ  /prowerka otkl`~eniq terminala/
           .eVeN
   mta:    .wLkW   3
           .eND    StaRt



       7.8.7.10. pPiMEP MHOgOTEPMiHAlxHOj pPOgPAMMy



       w dannom podpunkte priwoditsq tekst programmy na  makroassemble-
  re, kotoraq ispolxzuet mnogoterminalxnye makrokomandy.

       primer.

           .tItLe  mtteSt.mas
           .msaLL  .mtatsn,.mtrRNt, .mtGet, .mtIN,.mtoUt
           .msaLL  .mtSet,.ehIt,.rRINt, .mtRsto

                                 - 191 -




           .MCALL  .MTBDF
           .MTBDF
           .eNawL  Ls      ;dlq prawilxnoj raspe~atki
                           ;kommentariew programmy
   ;nNGUr$  = 4000         ;terminal ne gotow
   ;ttSrs$  = 10000        ;specialxnyj revim wwoda
   ;ttLs$   = 40000        ;zapretitx
                           ;preobrazowanie kirillicy-lat.
   ;aS.INr  = 40000        ;estx informaciq dlq wwoda
   m.tStS  = 0             ;slowo sostoqniq terminala
   m.tStW  = 7             ;bajt  sostoqniq
   StaRt:  sLR     R1              ;s~et~ik terminalow
           moV     #aSt,R2         ;R2-> aSt
   10$:    .mtatsn #mta,R2,R1      ;podkl`~itx terminal
           wss     20$             ;porqdok !
           sLRw    taI(R1)         ;terminal ne podkl`~en
           wR      30$             ;sledu`}ij...
   20$:    moVw    #1,taI(R1)      ;terminal podkl`~en
           moV     R1,R3           ;nomer terminala
           aSL     R3              ; umnovitx na 8 dlq
           aSL     R3              ; sme}eniq w tablice
           aSL     R3              ; status-blokow (sb)
           aDD     #tSw,R3         ;R3->sb terminala
           .mtGet  #mta, R3,R1     ;polu~itx status
           wIS     #ttSrs$+ttLs$,m.tStS(R3)  ;nowye
                                   ; harakteristiki tt:
           .mtSet  #mta,R3,R1      ;ustanowitx status
           wItw    #nNGUr$/400,m.tStW(R3)  ;terminal gotow?
           wNe     30$             ;net
           .mtRsto #mta,R1         ;sbrositx <stRL/o>-flag
           .mtrRNt #mta,#neLLo, R1 ;wywesti soob}enie
   30$:    aDD     #2,R2           ;R2-> sled. aSt
           INs     R1              ;sledu`}ij nomer tt :
           smr     R1, #16.        ;wse ?
           wLo     10$             ;net e}e...
   Loor:                   ;wwoditx i wywoditx znaki,
                           ;poka net o{ibok
           sLR     R1      ;nomer terminala
           moV     #aSt,R2 ;R2-> ast
   10$:    tStw     taI(R1)        ;terminal podkl`~en ?
           weQ     20$             ;net
           wIt     #aS.INr,(R2)    ;~to-nibudx wwedeno ?
           weQ     20$             ;net
           .mtIN   #mta,#snaR,R1   ;prinqtx znak
           wsS     eRR             ;o{ibka
           .mtoUt  #mta, #snaR, R1 ;wywesti znak
           wsS     eRR             ;o{ibka
   20$:    aDD     #2,R2           ;sledu`}ie aSt
           INs     R1              ;sledu`}ij terminal
           smr     R1,#16.         ;wse ?
           wLo     10$             ;net
           wR      Loor            ;wse powtoritx !!!
   eRR:    .rRINt  #UNeR           ;soob}enie ob o{ibke
           .ehIt
   aSt:    .wLkW   16.             ;mesto dlq aSt
   taI:    .wLkw   16.             ;indikator podkl.term.
           .eVeN
   mta:    .wLkW   3               ;mesto dlq tabl.argum.
   snaR:   .wYte   0               ;mesto dlq odnogo znaka

                                 - 192 -




   neLLo:  .aSsIZ  /dobryj denx/
   UNeR:   .aSsIZ  /neovidannaq o{ibka, konec programmy/
           .eVeN
   tSw:    .wLkW   16.*4           ;status-bloki dlq wseh
                                   ; terminalow
           .eND    StaRt



       7.8.8. rekomendacii i ograni~eniq



       dlq oTlAdKi  MHOgOTEPMiHAlxHyh  programm  iCpOlxzuetsq  otlad~ik
  VDT.





                   8. sistemnaq ob'ektnaq biblioteka




       w dannom razdele predstawleny podprogrammy  i  funkcii,  kotorye
  obespe~iwa`t dostup programmam, napisannym na qzykah fortran  i  pas-
  kalx, k sredstwam monitorow operacionnoj sistemy i  drugie  serwisnye
  wozmovnosti.



       8.1. operacii s katalogami





       8.1.1. podprogrammy CLOSEC/ICLOSE



       podprogramma CLOSEC prednazna~ena dlq zawer{eniq raboty na  uka-
  zannom kanale i oswobovdeniq ego dlq drugoj  operacii.  drajwer  ust-
  rojstwa, na kotorom byl otkryt kanal,  dolven  nahoditxsq  w  pamqti.
  podprogrammu CLOSEC nelxzq wyzywatx iz podprogramm zawer{eniq i obra-
  botki prerywaniq.

       obra}enie k podprogramme CLOSEC:

       CALL CLOSEC (CHAN[,I])
     ili
       I=CLOSEC (CHAN)

       obra}enie k podprogramme ICLOSE:

       CALL ICLOSE (CHAN[,I])
     ili
       I=ICLOSE (CHAN)

                                 - 193 -




  gde

  CHAN   - nomer zakrywaemogo kanala; oblastx pamqti, w kotoroj  razme-
           }en |tot parametr, ne dolvna perekrywatxsq pri swopinge USR;

  I      - sodervit 0 ili kod o{ibki,  wozwra}aemoj  w  slu~ae  popytki
           naru{eniq za}ity fajlow ot udaleniq.

       podprogrammy CLOSEC ili PURGE dolvny wyzywatxsq pri opredelennyh
  obstoqtelxstwah dlq l`bogo kanala, otkrytogo dlq  wwoda  ili  wywoda.
  esli w ka~estwe parametra ukazan neotkrytyj kanal, wyzow podprogrammy
  CLOSEC ignoriruetsq.

       esli podprogramma CLOSEC primenqetsq k fajlu, otkrytomu podprog-
  rammoj IENTER, proishodit obnowlenie kataloga ustrojstwa, posle  ~ego
  fajl stanowitsq postoqnnym. esli  katalog  ustrojstwa,  swqzannogo  s
  ukazannym kanalom, uve sodervit fajl s tem ve imenem i  tipom  fajla,
  to staryj fajl udalqetsq, a nowyj fajl  stanowitsq  postoqnnym.  esli
  uve su}estwu`}ij fajl za}i}en ot udaleniq, to wydaetsq  soob}enie  ob
  o{ibke. primenenie podprogrammy CLOSEC  k  fajlu,  otkrytomu  wyzowom
  LOOKUP, ne wyzywaet izmeneniq w kataloge.

       esli sozdannyj po IENTER fajl zakrywaetsq podprogrammoj  CLOSEC,
  to ego dlina opredelqetsq koli~estwom zapolnennyh  blokow.  naprimer,
  esli fajl zapisan w blok s nomerom 0, to dlina fajla 1, esli  w  fajl
  ni~ego ne bylo zapisano, to emu sootwetstwuet  dlina  0.  esli  dlina
  fajla menx{e razmera zony, wydelennoj wo wremq wypolneniq wyzowa IEN-
  TER, to neispolxzowannye bloki na  ustrojstwe  ob'qwlq`tsq  swobodnym
  prostranstwom <UNUSED>.

       rezulxtaty:

          I= 0 - oby~nyj wyhod;

          I=-4 - za}i}ennyj fajl s takim imenem uve
                 su}estwuet na ustrojstwe;
                 wypolnqetsq podprogramma CLOSEC; w
                 rezulxtate na ustrojstwe okazywa`tsq
                 dwa fajla s odnim imenem.

       primer pokazywaet formirowanie i obrabotku fajla iz 56 blokow.

       primer.

            REAL*4 DBLK (2)
            DATA DBLK/6RSY0NEW,6RFILDAT/
            DATA ISIZE/56/
             . . .
            ICHAN=IGETC()
            IF(ICHAN.LT.0) GOTO 100
            IERR=IENTER(ICHAN,DBLK,ISIZE)
            IF(IERR.GE.0) GOTO 10
            GOTO (110,120,130) IABS(IERR)
        10   . . .
             . . .
            CALL ICLOSE (ICHAN,IERR)
            IF (IERR.EQ.-4) GOTO 140
            CALL IFREEC (ICHAN)
            CALL EXIT

                                 - 194 -




        100 STOP 'net swobodnyh kanalow'
        110 STOP 'kanal uve ispolxzuetsq'
        120 STOP 'na ustrojstwe malo mesta'
        130 STOP 'ustrojstwo zanqto'
        140 STOP 'za}i}ennyj fajl uve su}estwuet'
            END



       8.1.2. funkciq IDELET



       funkciq IDELET prednazna~ena dlq  udaleniq  ukazannogo  fajla  s
  ukazannogo ustrojstwa. poskolxku |ta programma peredaet informaci`  w
  USR, neobhodimo pomnitx o tom, ~to parametry  funkcii  IDELET  dolvny
  raspolagatxsq tak, ~toby oni ne perekrywalisx pri swopinge USR. funk-
  ciq IDELET ne movet wyzywatxsq iz podprogrammy zawer{eniq  ili  obra-
  botki prerywaniq.

       obra}enie k funkcii:

          I=IDELET (CHAN,DBLK[,SEGNUM])

  gde

  CHAN   - nomer kanala, kotoryj budet ispolxzowatxsq dlq udaleniq faj-
           la; |tot nomer dolven bytx polu~en  pri  pomo}i  IGETC  ili,
           esli pPedwaritelxno byla wyzwana ICDEN,  movno  ispolxzowatx
           kanaly s nomerami 16 (desqti~noe) i wy{e;

  DBLK   - specifikaciq iskl`~aemogo fajla (DEV:FILNAM.TYP),  sostoq}aq
           iz ~etyreh slow w kode RADIX-50;

  SEGNUM - nomer fajla dlq operacij na kassetnyh magnitnyh lentah; esli
           |tot parametr ne ukazan, to ego zna~enie predpolagaetsq raw-
           nym nul`; dlq operacij s  magnitnymi  lentami  on  opisywaet
           nomer fajla, kotoryj movet prinimatx odno iz sledu`}ih  zna-
           ~enij:

           -1   - |to zna~enie  zapre}aet  peremotku  lenty  w  na~alo;
                  poisk imeni fajla wedetsq ot teku}ego poloveniq  len-
                  ty;  esli  teku}ee  polovenie  lenty  neizwestno,  to
                  proizwoditsq obratnaq peremotka do teh por,  poka  ne
                  wstretitsq metka EOF; zapre}aetsq ispolxzowanie l`bo-
                  go drugogo otricatelxnogo zna~eniq, t.k.  wse  drugie
                  otricatelxnye zna~eniq zarezerwirowany;

           0    - pri |tom zna~enii magnitnaq  lenta  perematywaetsq  w
                  na~alo, a zatem dwivetsq wpered, poka ne budet najde-
                  no imq fajla;

           N    - l`boe polovitelxnoe  ~islo;  pozicioniruet  magnitnu`
                  lentu na fajl s posledowatelxnym nomerom N na  lente;
                  esli posledowatelxnyj nomer fajla (FSN) bolx{e  dwuh,
                  to proishodit predwaritelxnaq peremotka w  na~alo,  a
                  zatem prqmoj poisk; esli bolx{e dwuh,  to  proishodit
                  obratnaq peremotka k fajlu.


                                 - 195 -




       posle wypolneniq funkcii IDELET ukazannyj  kanal  oswobovdaetsq.
  funkciq IDELET trebuet, ~toby ispolxzuemyj drajwer  ustrojstwa  naho-
  dilsq w operatiwnoj pamqti (|to dostigaetsq s pomo}x`  wyzowa  IFETCH
  ili komandoj LOAD s terminala). otmetim, ~to esli drajwer  ustrojstwa
  ne rezidenten w ozu, to proishodit o{ibka  monitora.  bolee  detalxno
  udalenie fajlow iz kataloga ustrojstwa opisano w  sistemnoj  makroko-
  mande .DELETE.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannyj kanal uve otkryt;
       I=2 - ukazannyj fajl ne najden;
       I=3 - ustrojstwo zanqto;
       I=4 - fajl za}i}en i ne movet bytx stert.

       w primere fajl pod imenem FTN5.DAT udalqetsq s ustrojstwa SY0:.

       primer.

            REAL*4 FILNAM (2)
            DATA FILNAM /6RSY0FTN,6R5  DAT/
             . . .
            I=IGETC ()
            IF(I.LT.0)STOP  'net kanala'
            CALL IDELET (I,FILNAM)
            CALL IFREEC (I)



       8.1.3. funkciq IENTER



       funkciq IENTER wydelqet oblastx na ukazannom ustrojstwe i formi-
  ruet w kataloge nositelq wremennu` zapisx dlq nazwannogo fajla.  esli
  na ukazannom ustrojstwe uve su}estwuet fajl s takim imenem, to on  ne
  iskl`~aetsq do teh por, poka wremennaq zapisx  w  kataloge  ne  budet
  preobrazowana w postoqnnu` zapisx pri pomo}i CLOSEC ili ICLOSE. |tomu
  wremennomu fajlu stawitsq  w  sootwetstwie  ukazannyj  nomer  kanala.
  podprogramma IENTER pri rabote obra}aetsq k USR.

       obra}enie k funkcii:

          I=IENTER (CHAN,DBLK,LENGTH[,SEGNUM])

  gde

  CHAN   - nomer kanala (celoe ~islo), kotoryj  swqzywaetsq  s  fajlom;
           |tot nomer dolven bytx polu~en pri pomo}i  IGETC  ili,  esli
           predwaritelxno byla wyzwana ISDFN, movno ispolxzowatx kanaly
           s nomerami 16 (desqti~noe) i wy{e;

  DBLK   - specifikaciq  fajla,  sostoq}qq  iz  ~etyreh  slow  w   kode
           RADIX-50;

  LENGTH - celoe ~islo blokow, wydelqemyh pod fajl; esli weli~ina, uka-
           zywa`}aq dlinu, rawna nul`, to dlq zapisi  fajla  wydelqetsq

                                 - 196 -




           polowina naibolx{ego swobodnogo  prostranstwa  <UNUSED>  ili
           wesx sledu`}ij po weli~ine <UNUSED>; esli  weli~ina,  ukazy-
           wa`}aq dlinu, rawna -1, to dlq zapisi fajla wydelqetsq  nai-
           bolx{ij <UNUSED>; (sm. p. 7.1.3);

  SEGNUM - nomer fajla na kassetnyh nakopitelqh  na  magnitnyh  lentah;
           esli |tot parametr ne ukazan, on  prinimaetsq  rawnym  nul`;
           dlq magnitnoj lenty on opisywaet posledowatelxnyj nomer faj-
           la; parametr movet imetx sledu`}ie zna~eniq:

           -2   - obozna~aet peremotku magnitnoj lenty w na~alo i poisk
                  w prqmom naprawlenii poka ne budet najdeno imq  fajla
                  ili logi~eskij konec lenty (LEOT);

           -1   - obozna~aet  pereme}enie  k  zapisi  LEOT  i  otkrytie
                  wyhodnogo fajla;

           0    - obozna~aet peremotku lenty w na~alo i prosmotr w prq-
                  mom naprawlenii poka ne budet najdeno imq  fajla  ili
                  ne obnaruven LEOT;  esli  imq  fajla  budet  najdeno,
                  generiruetsq kod o{ibki; esli fajl ne  budet  najden,
                  to on budet sozdan.

           N    - ozna~aet ustanowku magnitnoj lenty na na~alo fajla  s
                  posledowatelxnym nomerom N, esli imq fajla ne  pusto;
                  esli posledowatelxnyj nomer  fajla  bolx{e  dwuh,  to
                  predwaritelxno proishodit peremotka lenty w na~alo; w
                  protiwnom slu~ae proishodit obratnaq peremotka k faj-
                  lu.

       prime~aniq:
       1. funkci` IENTER nelxzq wyzywatx w podprogrammah  zawer{eniq  i
  obrabotki prerywaniq.
       2. funkciq IENTER trebuet,  ~toby  w  pamqti  nahodilsq  drajwer
  sootwetstwu`}ego ustrojstwa.
       3. parametry funkcii dolvny raspolagatxsq w pamqti  wne  oblasti
  swopinga USR.

       bolee podrobno o formirowanii zapisi w kataloge o wremennom faj-
  le skazano w opisanii sistemnoj makrokomandy .ENTER.

       rezulxtaty funkcii:

       I= N - oby~nyj wyhod: N - ~islo wydelennyh blokow
              (N=0 dlq funkcii   IENTER,   primenennoj  k
              ustrojstwu s nefajlowoj strukturoj);

       I=-1 - kanal (CHAN) zanqt;
       I=-2 - dlq zapisi fajla s ukazannoj dlinoj  ne  bylo
              obnaruveno <UNUSED> bolx{ego   ili   rawnogo
              ukazannoj dline;
       I=-3 - ustrojstwo zanqto;
       I=-4 - fajl s ukazannym imenem uve su}estwuet i
              za}i}en;
       I=-5 - fajl s ukazannym posledowatelxnym nomerom
              ne najden.

       w primere nazna~aetsq kanal dlq  fajla  TEMP.TMP  na  ustrojstwe
  SY0:. esli net swobodnogo kanala, to programma pe~ataet  soob}enie  i

                                 - 197 -




  ostanawliwaetsq.

       primer.

             REAL*4 DBLK (2)
             DATA DBLK/6RSY0TEM,6RP TMP/
             ICHAN=IGETC ()
             IF (ICHAN.LT.0) STOP  'net swobodnogo kanala'
   C
   C         sozdanie wremennogo rabo~ego fajla
   C
             IF (IENTER(ICHAN,DBLK,20).LT.0)
         *   STOP 'o{ibka sozdaniq fajla'
               . . .
             CALL PURGE (ICHAN)
             CALL IFREEC (ICHAN)
             END



       8.1.4. funkciq IRENAM



       funkciq IRENAM prednazna~ena dlq izmeneniq imeni ukazannogo faj-
  la. o{ibka woznikaet w slu~ae, esli ukazannyj kanal uve otkryt.

       obra}enie k funkcii:

          I=IRENAM (CHAN,DBLK)

  gde

  CHAN   - nomer kanala (celoe), ispolxzuemogo w operacii;  |tot  nomer
           dolven bytx polu~en pri pomo}i IGETC ili, esli predwaritelx-
           no byla wyzwana ICDFN, movno ispolxzowatx kanaly s  nomerami
           16 (desqti~noe) i  wy{e;  kanal  wnowx  budet  dostupen  dlq
           ispolxzowaniq posle wypolneniq operacii pereimenowaniq;

  DBLK   - 8-slownaq zona, soderva}aq specifikaci` su}estwu`}ego  fajla
           i ego nowu` specifikaci`; |ta zona  rassmatriwaetsq  w  wide
           celogo massiwa tipa INTEGER*2 iz  8  |lementow;  DBLK  imeet
           formu:

          1-4 slowa - qwlq`tsq opisatelem w
                      RADIX-50 starogo imeni fajla;
          5-8 slowa - qwlq`tsq opisatelem w
                      RADIX-50 nowogo imeni fajla.

       parametry funkcii IRENAM dolvny raspolagatxsq w pamqti tak, ~to-
  by oni ne perekrywalisx s USR pri swopinge.

       esli na ukazannom ustrojstwe uve su}estwuet fajl s imenem,  sow-
  pada`}im s nowym imenem fajla, to |tot fajl udalqetsq. po  zawer{enii
  funkcii IRENAM ukazannyj kanal ostaetsq zakrytym (t.e. swobodnym).

       funkciq IRENAM trebuet, ~toby  ispolxzuemyj  drajwer  uprawleniq
  ustrojstwom nahodilsq w operatiwnoj pamqti w moment  wypolneniq  |toj
  funkcii. esli ego tam net, to woznikaet o{ibka monitora.  imena  ust-

                                 - 198 -




  rojstw, ukazannye w opisatelqh fajlow, dolvny sowpadatx.

       bolee podrobno o pereimenowywanii fajlow skazano w opisanii sis-
  temnoj makrokomandy .RENAME.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannyj kanal uve otkryt;
       I=2 - zadannyj fajl ne najden;
       I=3 - fajl s ukazannym imenem uve su}estwuet i
             za}i}en.

       primer.

          REAL*8 NAME (2)
          DATA NAME /12RRK0FTN2  DAT,12RRK0FTN2  oLD/
           . . .

          ICHAN=IGETC ( )
          IF(ICHAN.LT.0) STOP  'net kanala'
          CALL IRENAM(ICHAN,NAME)  !sohranitx staryj fajl
   C                               dannyh
          CALL IFREEC (ICHAN)



       8.1.5. funkciq LOOKUP



       funkciq LOOKUP swqzywaet zadannyj kanal s ustrojstwom i/ili faj-
  lom dlq wypolneniq operacij wwoda/wywoda. ispolxzuemyj kanal s~itaet-
  sq zanqtym do teh por, poka ne  budet  wypolnena  odna  iz  sledu`}ih
  funkcij:

            CLOSEC ili ICLOSE
            ISAVES
            PURGE

       obra}enie k funkcii:


       I = LOOKUP (CHAN,DBLK[,COUNT,SEGNUM])
     ili
       I = LOOKUP (CHAN,JOBDES)

  gde

  CHAN   - nomer kanala (celoe), kotoryj neobhodimo  swqzatx  s  fajlom
           ili ustrojstwom; |tot nomer kanala dolven bytx  polu~en  pri
           pomo}i IGETC ili, esli predwaritelxno  byla  wyzwana  ICDFN,
           movno ispolxzowatx kanaly s nomerami 16 (desqti~noe) i wy{e;

  DBLK   - specifikaciq fajla ili ustrojstwa, sostoq}qq iz ~etyreh slow
           w RADIX-50; sleduet otmetitx, ~to  esli  USR  perekroet  pri
           swopinge |ti ~etyre slowa, to rezulxtat nepredskazuem;

                                 - 199 -




  COUNT  - parametr, ispolxzuemyj  dlq  uprawleniq  kasetnoj  magnitnoj
           lentoj, po umol~ani` rawen 0;

  SEGNUM - nomer fajla; pri rabote s kasetnoj  magnitnoj  lentoj,  esli
           |tot argument opu}en, on predpolagaetsq rawnym 0;  dlq  mag-
           nitnoj lenty  on  opisywaet  posledowatelxnyj  nomer  fajla;
           predprinimaemye dejstwiq zawisqt ot  togo,  ukazano  li  imq
           fajla; posledowatelxnyj nomer movet imetx  sledu`}ie  zna~e-
           niq:

           -1   - otmenqet peremotku k na~alu  lenty,  poisk  osu}estw-
                  lqetsq ot teku}ej pozicii;  esli  imq  fajla  zadano,
                  wypolnqetsq LOOKUP fajlowogo tipa  (bez  peremotki  w
                  na~alo); esli imq fajla pusto, wypolnqetsq nefajlowyj
                  LOOKUP (lenta ne dwivetsq); ispolxzowanie otricatelx-
                  nyh zna~enij, otli~nyh ot -1, zapre}eno;

           0    - peremotka w na~alo  lenty  i  wypolnenie  nefajlowogo
                  otkrytiq lenty;

           N    - l`boe polovitelxnoe  ~islo;  pozicioniruet  lentu  na
                  fajl s posledowatelxnym nomerom N i prowerqet  sowpa-
                  denie imen; esli  imena  ne  sowpada`t,  generiruetsq
                  o{ibka; esli imq fajla ne  zadano,  LOOKUP  fajlowogo
                  tipa proizwoditsq dlq fajla, zadannogo SEGNUM;

  JOBDES - argument, pozwolq`}ij ustanowitx  swqzx  mevdu  zadaniqmi  w
           monitore so sredstwami sistemnyh zadanij; qwlqetsq  ukazate-
           lem na ~etyrehslownyj blok opisaniq zadaniq, kotoromu  budut
           peredawatxsq ili ot kotorogo budut prinimatxsq soob}eniq:

                  JOBDES: .RAD50 /MQ/
                          .ASCII /LOGNAM/
          gde

           LOGNAM
                - imeet dlinu iz 6 simwolow; esli ono opu}eno (T.E. wse
                  nuli), to kanal budet otkryt tolxko dlq operacij ~te-
                  niq (.READ/.READC/.READW), i zaprosy na ~tenie  budut
                  prinimatx soob}enie iz l`bogo zadaniq.

       parametry funkcii LOOKUP dolvny raspolagatxsq tak, ~toby oni  ne
  perekrywalisx s USR pri swopinge. pri  wypolnenii  funkcii  LOOKUP  w
  operatiwnoj pamqti dolven  nahoditxsq  drajwer  uprawleniq  ukazannym
  ustrojstwom.

       esli w specifikacii perwoe slowo imeni fajla  rawno  0,  a  ust-
  rojstwo qwlqetsq ustrojstwom fajlowoj struktury, to  na~alom  "fajla"
  nazna~aetsq absol`tnyj nulewoj blok nositelq. w |tom slu~ae,  kotoryj
  nazywaetsq nefajlowym otkrytiem kanala, programma polu~aet  dostup  k
  proizwolxnym fizi~eskim blokam ustrojstwa. esli pri |tom proizwodqtsq
  operacii wwoda/wywoda, to fajlowaq struktura na ustrojstwe  (katalog)
  movet bytx razru{ena. esli imq fajla ukazano dlq ustrojstwa, ne ime`-
  }ego fajlowoj struktury (naprimer, LP:FILE.EXT-ustrojstwo pe~ati), to
  imq ignoriruetsq.

       rezulxtaty funkcii:

                                 - 200 -




       I=N - oby~nyj wyhod iz funkcii, N rawen ~islu blokow
             fajla (0 dlq LOOKUP nefajlowoj struktury dlq
             kassetnoj i magnitnoj lenty);

       I=-1 - zadannyj kanal uve otkryt;
       I=-2 - ukazannyj fajl na ustrojstwe ne najden;
       I=-3 - ustrojstwo ispolxzuetsq;
       I=-4 - ukazannyj lentoprotqvnyj mehanizm nedostupen.

       primery:

        INTEGER*2 DBLK (4)
        DATA DBLK /3RRK0,3RFTN,3R44 ,3RDAT/
         . . .
        ICHAN=IGETC ( )
        IF(ICHAN.LT.0)STOP  'kanal otsutstwuet'
        IF(IFETCH(DBLK).NE.0) STOP 'FETCH ne uda~en'
        IF(LOOKUP(ICHAN,DBLK).LT.0) STOP 'LOOKUP ne uda~en'
         . . .
        CALL CLOSEC (ICHAN)
        CALL IFREEC (ICHAN)


  ili, ispolxzuq LOOKUP dlq sistemnogo zadaniq:

        LOGICAL*1 JNAM (6)
        DIMENSION JBLK (4)
        EQUIVALENCEN (JNAM,JBLK(2))
        DATA JNAM /'Q','U','E','U','E',0/
        DATA JBLK (1) /3RMQ /
         . . .
   C
   C    otkrytx kanal soob}enij dlq 'QUEUE'
   C
        ICHAN=IGETC ( )
        IF (LOOKUP (ICHAN, JBLK).LT.0)
       *  STOP 'QUEUE ne wyzwana'
         . . .



       8.2. operacii wwoda/wywoda





       8.2.1. funkcii IREAD/IREADC/IREADF/IREADW



       IREAD/IREADC/IREADF/IREADW - ~etyre formy funkcii ~teniq  infor-
  macii po ukazannomu kanalu iz fajla w pamqtx. wypolnenie |tih funkcij
  trebuet |lement o~eredi, ~to dolvno u~itywatxsq pri wypolnenii  funk-
  cii IQSET.

                                 - 201 -




       8.2.1.1. funkciq IREAD



       funkciq IREAD ustanawliwaet zapros  na  ~tenie  zadannogo  ~isla
  slow iz fajla po ukazannomu kanalu w o~eredx i nemedlenno  wozwra}aet
  uprawlenie programme. posle zawer{eniq pereda~i  nikakih  specialxnyh
  dejstwij ne wypolnqetsq.

       obra}enie k funkcii:

          I=IREAD (WCNT,BUF,BLK,CHAN)

  gde

  WCNT   - celoe; ~islo slow, kotoroe dolvno bytx peredano;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera; |tot  massiw  dolven
           bytx po dline ne menx{e s~et~ika slow (WCNT);

  BLK    - nomer ~itaemogo bloka ot na~ala  fajla;  perwyj  blok  fajla
           imeet nomer 0; pri neobhodimosti programma  dolvna  uweli~i-
           watx nomer bloka; naprimer, esli  programmoj  pro~itano  dwa
           bloka, to dlq ~teniq sledu`}ih neobhodimo uweli~itx  BLK  na
           2;

  CHAN   - nomer ispolxzuemogo kanala.

       w slu~ae, kogda programme trebuetsq dostup k dannym, ~itaemym po
  ukazannomu kanalu, dolvna wyzywatxsq funkciq IWAIT.  |to  garantiruet
  zawer{enie operacii IREAD. esli wo wremq pereda~i  proizo{la  o{ibka,
  to nali~ie o{ibki pokazywaet funkciq IWAIT.

       rezulxtaty funkcii:

      I=N - oby~nyj  wyhod  iz  funkcii, N  rawno  ~islu
            pro~itannyh slow (0-pri ~tenii dannyh s ustroj-
            stwa nefajlowoj  struktury  i  kratno  256
            (desqti~noe) pri ~tenii dannyh s ustrojstwa
            fajlowoj struktury), naprimer:

         - esli s~et~ik slow kraten 256 i w fajle dostupno slow menx{e,
           ~em ukazano w s~et~ike, to N ukazywaet ~islo fakti~eski s~i-
           tannyh slow; naprimer, esli s~et~ik rawen  512,  a  w  fajle
           ostalosx 256 slow, to I=256;

         - esli s~et~ik slow ne kraten 256  i  w  fajle  ostaetsq  slow
           bolx{e, ~em ukazano w s~et~ike, to N  okruglqetsq  wwerh  do
           sledu`}ego bloka; naprimer, esli s~et~ik slow rawen 312, a w
           fajle ostalosx bolx{e 312 slow,  to  I=512,  no  s~itywaetsq
           tolxko 312 slow;

         - esli s~et~ik slow ne kraten 256  i  w  fajle  ostaetsq  slow
           menx{e, ~em ukazano w s~et~ike, to N rawno  ~islu,  kratnomu
           256;

      I=-1 - popytka s~itatx dannye posle konca fajla;
      I=-2 - w kanale proizo{la apparatnaq o{ibka;
      I=-3 - ukazannyj kanal ne otkryt.

                                 - 202 -




       pRIME^ANIE. esli w kanale (naprimer, IREAD) pri asinhronnoj ope-
  racii bylo obra}enie za predely fajla, to funkciq IWAIT ne  obnaruvit
  |togo, T.K. IWAIT obnaruviwaet nali~ie tolxko apparatnyh o{ibok. pos-
  ledu`}ej operaciej dlq |togo kanala budet obnaruvenie konca  fajla  i
  wyda~a polxzowatel` koda o{ibki EOF.

       primer.

            INTEGER*2 BUFFER(256),RCODE,BLK
             . . .
            RCODE=IREAD (256,BUFFER,BLK,ICHAN)
            IF(RCODE+1) 1010,1000,10
         10  . . .
            IF(IWAIT(ICHAN).NE.0) GOTO 1010
             . . .
       1000 CONTINUE
      C       konec obrabotki fajla
             . . .
            CALL EXIT          !estestwennyj konec programmy
       1010 STOP'neprawilxnoe s~itywanie'
            END



       8.2.1.2. funkciq IREADC



       funkciq IREADC ustanawliwaet w o~eredx zapros na ~tenie zadanno-
  go ~isla slow iz fajla w pamqtx po  ukazannomu  kanalu  i  nemedlenno
  wozwra}aet uprawlenie w wyzwaw{u` programmu: posle zawer{eniq  opera-
  cii osnownaq programma prerywaetsq i zapuskaetsq podprogramma na qzy-
  ke makroassemblera w ka~estwe asinhronnoj podprogrammy zawer{eniq.

       obra}enie k funkcii:

          I=IREADC (WCNT,BUF,BLK,CHAN,CRTN)

  gde

  WCNT   - celoe ~islo slow, kotoroe dolvno bytx peredano;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera; |tot  massiw  dannyh
           dolven imetx dlinu ne menx{e, ~em ukazano w parametre WCNT;

  BLK    - nomer ~itaemogo bloka ot na~ala fajla; programma oby~no uwe-
           li~iwaet BLK pered ego powtornym ispolxzowaniem; perwym blo-
           kom fajla qwlqetsq blok nomer 0;

  CHAN   - nomer ispolxzuemogo kanala;

  CRTN   - imq podprogrammy zawer{eniq na assemblere.

       rezulxtaty funkcii predstawleny w opisanii  funkcii  IREAD  (sm.
  podpunkt 8.2.1.1).

       primer.

                                 - 203 -




          INTEGER*2 IBUF (256),RCODE,IBLK
          EXTERNAL RDCMP
           . . .
          RCODE=IREADC (256,IBUF,IBLK,ICHAN,RDCMP)




       8.2.1.3. funkciq IREADF



       funkciq IREADF ustanawliwaet w o~eredx zapros na ~tenie zadanno-
  go ~isla slow iz fajla w pamqtx po  ukazannomu  kanalu  i  nemedlenno
  wozwra}aet uprawlenie w wyzwaw{u` programmu: posle zawer{eniq  opera-
  cii osnownaq programma prerywaetsq i zapuskaetsq podprogramma na qzy-
  ke fortran w ka~estwe asinhronnoj podprogrammy zawer{eniq.

       obra}enie k funkcii:

          I=IREADF (WCNT,BUF,BLK,CHAN,AREA,CRTN)

  gde

  WCNT   - celoe ~islo slow, kotoroe dolvno bytx peredano;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera; |tot  massiw  dannyh
           dolven imetx dlinu ne menx{e, ~em ukazano w parametre WCNT;

  BLK    - nomer ~itaemogo bloka ot na~ala fajla; programma oby~no uwe-
           li~iwaet BLK pered ego powtornym ispolxzowaniem; perwym blo-
           kom fajla qwlqetsq blok nomer 0;

  CHAN   - nomer ispolxzuemogo kanala;

  CRTN   - podprogramma zawer{eniq, napisannaq na  qzyke  fortran;  imq
           programmy dolvno ukazywatxsq w operatore  EXTERNAL  podprog-
           rammy, wyzywa`}ej IREADF.

       rezulxtaty funkcii predstawleny w opisanii  funkcii  IREAD  (sm.
  podpunkt 8.2.1.1).

       primer.

            INTEGER*2 DBLK (4),BUFFER (256),BLKNO
            DATA DBLK /3RRK0,3RINP,3RUT ,3RDAT/,BLKNO/0/
            EXTERNAL RCMPLT
             . . .
            ICHAN=IGETC ()
            IF (ICHAN.LT.0)STOP  'net swobodnogo kanala'
            IF (IFETCH(DBLK).NE.0)STOP 'o{ibka FETCH'
            IF (LOOKUP(ICHAN,DBLK).LT.0)STOP 'o{ibka LOOKUP'
             . . .
         20 IF(IREADF(256,BUFFER,BLKNO,ICHAN,DBLK,RCMPLT)
           * .LT.0) GOTO 100
             . . .
             CALL IWAIT (ICHAN)  !vdatx wyzowa podprogrammy
      C                          zawer{eniq
            BLKNO=BLKNo+1        !obnowitx nomer bloka

                                 - 204 -




            GOTO 20
             . . .
      C     obrabotka konca fajla
        100 CALL CLOSEC (ICHAN)
            CALL IFREEC (ICHAN)
             . . .
            CALL EXIT
            END
            SUBROUTINE RCMPLT (I,J)
      C     podprogramma zawer{eniq
             . . .
            RETURN
            END



       8.2.1.4. funkciq IREADW



       funkciq IREADW ustanawliwaet w o~eredx zapros na ~tenie zadanno-
  go ~isla slow iz fajla w  pamqtx  po  ukazannomu  kanalu;  uprawlenie
  programme wozwra}aetsq posle zawer{eniq operacii ili pri  obnaruvenii
  o{ibki.

       obra}enie k funkcii:

          I=IREADW (WCNT,BUF,BLK,CHAN)

  gde

  WCNT   - koli~estwo slow, kotoroe dolvno bytx peredano;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera; |tot  massiw  dannyh
           dolven imetx dlinu ne menx{e, ~em ukazano w parametre WCNT;

  BLK    - nomer ~itaemogo bloka ot na~ala fajla; programma oby~no uwe-
           li~iwaet BLK pered powtornym ispolxzowaniem;

  CHAN   - nomer ispolxzuemogo kanala.

       rezulxtaty funkcii predstawleny w opisanii  funkcii  IREAD  (sm.
  podpunkt 8.2.1.1).

       primer.

            INTEGER*2 IBUF (1024)

             . . .
            ICODE=IREADW (1024,IBUF,IBLK,ICHAN)
            IF(ICODE.EQ.-1) GOTO 100 ! obrabotka konca faj-
      C                                 la w operatore 100
             . . .
            IF(ICODE.LT.-1)GOTO 200  !obrabotka o{ibki w
      C                                operatore 200
      C      modificirowatx bloki
             . . .
      C      zapisatx, zatem wyjti
            ICODE=IWRITW (1024,IBUF,IBLK,ICHAN)

                                 - 205 -








       8.2.2. funkciq ITTINR



       funkciq ITTINR prednazna~ena dlq pereda~i simwola  s  sistemnogo
  terminala w programmu polxzowatelq. esli w bufere sistemy net wweden-
  nyh simwolow, to dejstwiq sistemy opredelq`tsq sostoqniem razrqda 6 w
  slowe sostoqniq zadaniq (JSW).

       obra}enie k funkcii:

          I=ITTINR ()

       esli rezulxtat wypolneniq funkcii ITTINR  menx{e  nulq,  to  |to
  zna~it, ~to w bufere ne bylo simwolow,  t.e.  operator  e}e  ne  wwel
  stroku. pri ispolxzowanii RT11FB(XM)  funkciq  ITTINR  ne  wozwra}aet
  rezulxtat menx{e nulq, esli bit 6  slowa  sostoqniq  zadaniq  ne  byl
  ustanowlen pri wyzowe ITTINR.

       su}estwuet dwa revima wwoda s terminala. revim zadaetsq bitom 12
  slowa sostoqniq zadaniq. slowo sostoqniq zadaniq opredelqetsq  soder-
  vimym 44-j q~ejki pamqti w oblasti SYSCOM.

       esli 12-j bit rawen nul`, to wypolnqetsq oby~nyj  wwod/wywod.  w
  |tom revime wypolnq`tsq sledu`}ie dejstwiq:

         - monitor otobravaet na |krane terminala wse wwedennye s  kla-
           wiatury znaki;

         - komandy <CTRL/U> i <DEL> osu}estwlq`t udalenie stroki i sim-
           wola sootwetstwenno;

         - simwoly teku}ej stroki pereda`tsq w  programmu  polxzowatelq
           posle wwoda s klawiatury terminala odnogo iz ~etyreh  upraw-
           lq`}ih znakow: <CR>, <LF>, <CTRL/Z> ili <CTRL/C>.

       esli 12-j bit rawen 1, to zadaetsq specialxnyj revim.  pri  |tom
  proishodit sledu`}ee:

         - monitor ne otobravaet na terminale  wwedennye  s  klawiatury
           simwoly, za iskl`~eniem <CTRL/C> i <CTRL/O>;

         - komandy <CTRL/U> i <DEL> ne wypolnq`t specialxnyh funkcij;

         - simwoly pereda`tsq w programmu nemedlenno;

         - <ESC> ne preobrazuetsq.

  w specialxnom revime programma polxzowatelq  dolvna  sama  otobravatx
  nuvnye simwoly.

       12-j razrqd slowa sostoqniq zadaniq dolven bytx ustanowlen prog-
  rammoj, esli neobhodim specialxnyj revim uprawleniq terminalom.  14-j
  razrqd JSW ustanawliwaetsq dlq razre{eniq wwoda s  klawiatury  znakow
  kirillicy. |ti bity sbrasywa`tsq pri wozwrate uprawleniq w monitor.

                                 - 206 -




       wne zawisimosti ot ustanowki 12-go razrqda JSW pri wwode <CR>  s
  klawiatury w programmu, peredaetsq dwa simwola:  <CR>  i  <LF>.  esli
  razrqd 12 rawen nul`, to |ti simwoly otobrava`tsq i na terminale.

       preobrazowanie kirillicy  opredelqetsq  ustanowkoj  razrqda  14.
  esli |tot razrqd rawen nul`, to znaki kirillicy preobrazu`tsq w soot-
  wetstwu`}ie latinskie znaki pered |ho-pe~atx`  (esli  razrqd  12  pri
  |tom rawen nul`) i pereda~ej w programmu. esli razrqd 14 ustanowlen w
  1, to wwedennye simwoly otobrava`tsq (esli razrqd 12 pri  |tom  rawen
  nul`) i peresyla`tsq tak, kak oni byli wwedeny.

       dlq ustanowki i/ili sbrosa bitow slowa sostoqniq zadaniq ispolx-
  zu`t funkci` IPEEK, a zatem IPOKE. w specialxnom revime (bit 12 slowa
  sostoqniq zadaniq ustanowlen) oby~nyj fortranowskij formatnyj wwod  s
  klawiatury terminala ne opredelen.

       w RT11FB(XM) komandy <CTRL/F> i <CTRL/B> (i <CTRL/X> w monitorah
  so sredstwami sistemnyh zadanij) ne uprawlq`tsq  ukazaniem  bita  12.
  monitor reagiruet na |ti simwoly kak na specialxnye komandy, esli byl
  a dana komanda monitora "SET TT FB".

       pri rabote pod uprawleniem RT11FB(XM) w slu~ae, esli sdelan zap-
  ros na wwod s terminala, a simwoly s terminala ne postupili po kakoj-
  libo pri~ine, wypolnenie programmy  priostanawliwaetsq  do  teh  por,
  poka simwoly ne budut wwedeny. esli neobhodimo prodolvatx  wypolnenie
  programmy, t.e. neobhodimo, ~toby funkciq ITTINR  dawala  diagnostiku
  o{ibki (I<0), to neobhodimo ustanowitx razrqd 6 slowa sostoqniq zada-
  niq pered wypolneniem funkcii ITTINR. bit 6 sbrasywaetsq posle  okon-
  ~aniq wypolneniq programmy. rezulxtat  ITTINR  dolven  razme}atxsq  w
  peremennoj tipa INTEGER,  esli  predlagaetsq  kontrolx  o{ibok.  esli
  izwestno, ~to wozwrata po o{ibke nikogda ne budet, to rezulxtat movno
  pereslatx w peremennu` tipa  LOGICAL*1.  neposredstwennoe  razme}enie
  polu~aemyh dannyh w peremennoj tipa  LOGICAL*1  priwedet  k  newernym
  rezulxtatam, t.k. 15-j razrqd (flag  otricatelxnogo  ~isla)  terqetsq
  pri preobrazowanii w peremennu` tipa LOGICAL*1.

       rezulxtaty funkcii:

       I>0 - oby~nyj wyhod; simwol pro~itan;

       I<0 - wyhod s o{ibkoj, w bufere net wwedenyh
             simwolow.

       primer.

       ICHAR=ITTINR()           !s~itatx simwol s TT
       IF(ICHAR.LT.0)GOTO 100   !net simwolow



       8.2.3. funkciq ITTOUR



       funkciq ITTOUR prednazna~ena dlq pereda~i simwola  iz  programmy
  polxzowatelq na terminal, esli w bufere monitora estx dlq nego mesto.
  esli w dannyj moment nelxzq wwesti simwol, to wyrabatywaetsq  priznak
  o{ibki.


                                 - 207 -




       obra}enie k funkcii:

          I=ITTOUR (CHAR)

  gde

  CHAR   - kod wywodimogo simwola; wyrawnennoe wprawo celoe (pri  vela-
           nii movet bytx tipa LOGICAL*1), kotoroe neobhodimo wywesti.

       esli (I) - rezulxtat wypolneniq funkcii ITTOUR -  rawen  1,  |to
  ozna~aet, ~to w bufere net swobodnogo mesta i ne wyweden ni odin sim-
  wol. pod uprawleniem RT11FB(XM) funkciq ITTOUR ne prinimaet zna~enie,
  rawnoe 1. programma priostanawliwaetsq do  teh  por,  poka  w  bufere
  wywoda ne oswoboditsq mesto. esli zadanie trebuet prodolveniq  wypol-
  neniq programmy, t.e. diagnostiku o{ibki (I=1), to neobhodimo predwa-
  ritelxno ustanowitx 6-j razrqd slowa sostoqniq zadaniq (q~ejka 44).

       esli operatiwnoe zadanie  peredalo  simwoly  w  kolxcewoj  bufer
  wywoda monitora, |ti simwoly mogut ne wywoditsq na terminal  po  dwum
  pri~inam:

         - esli fonowoe zadanie wywodilo na terminal, to operatiwnoe ne
           movet |togo sdelatx, poka fonowoe ne proizwedet wywod  znaka
           <LF>. |to movet poroditx su}estwennu` zadervku, esli  termi-
           nalom qwlqetsq grafi~eskij displej, a fonowoe zadanie proiz-
           wodit grafi~eskij wywod, ne soderva}ij znakow <LF>;

         - esli fonowogo zadaniq net (t.e. w fonowom razdele wypolnqet-
           sq KMON), operatiwnoe zadanie ne movet wywesti swoe  soob}e-
           nie, poka operator ne wwedet <CR> ili <LF>.  w  |tom  slu~ae
           KMON polu~aet kontrolx nad wywodom i blokiruet wywod  opera-
           tiwnogo zadaniq, srazu kak tolxko bufer operatiwnogo zadaniq
           opusteet.


       pRIME^ANIE. sleduet  otmetitx,  ~to  ispolxzowanie  podprogrammy
  PRINT ustranqet pere~islennye problemy.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;simwol wyweden;

       I=1 - wyhod s o{ibkoj, kolxcewoj bufer polon.

       primer.

           DO 10 I =1,5
        10 IF(ITTOUR("007).NE.0) GO TO 10  !peredatx simwol
    C                                       5 raz


                                 - 208 -




       8.2.4. funkciq IWAIT



       funkciq IWAIT priostanawliwaet wypolnenie osnownoj programmy  do
  teh por, poka ne zakon~itsq wypolnenie wseh operacij wwoda/wywoda  na
  ukazannom kanale. |ta funkciq ispolxzuetsq s wyzowami IREAD, IWRITE i
  ISPFN. podprogrammy zawer{eniq prodolva`t wypolnqtxsq.

       obra}enie k funkcii:

          I=IWAIT (CHAN)

  gde

  CHAN   - nomer (celoe) ispolxzuemogo kanala.

       podrobnee o priostanowke wypolneniq osnownoj programmy skazano w
  opisanii sistemnoj makrokomandy .WAIT.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannyj kanal ne otkryt;
       I=2 - wo wremq predydu}ej operacii wwoda/wywoda po
             |tomu kanalu proizo{la apparatnaq o{ibka.

       primer.

       IF(IWAIT(ICHAN).NE.0) CALL IOERR(4)



       8.2.5. funkcii IWRITE/IWRITC/IWRITF/IWRITW



       IWRITE/IWRITC/IWRITF/IWRITW - ~etyre formy funkcii zapisi zadan-
  nogo ~isla slow iz pamqti w fajl po ukazannomu  kanalu.  |ti  funkcii
  trebu`t |lement o~eredi, ~to dolvno u~itywatxsq pri wypolnenii  funk-
  cii IQSET.



       8.2.5.1. funkciq IWRITE



       funkciq IWRITE prednazna~ena dlq pereda~i zadannogo  ~isla  slow
  iz operatiwnoj pamqti po ukazannomu kanalu.  uprawlenie  wozwra}aetsq
  programme polxzowatelq nemedlenno posle togo, kak zapros byl  postaw-
  len w o~eredx. posle wypolneniq operacii nikakie dejstwiq ne predpri-
  nima`tsq.

       obra}enie funkcii:

          I=IWRITE (WCNT,BUF,BLK,CHAN)


                                 - 209 -




  gde

  WCNT   - koli~estwo (celoe) peredawaemyh slow;

  BUF    - massiw, ispolxzuemyj dlq bufera wywoda;

  BLK    - nomer (celoe) bloka  fajla,  w  kotoryj  proishodit  zapisx.
           pered powtornym ispolxzowaniem programma polxzowatelq obnow-
           lqet parametr BLK;

  CHAN   - nomer (celoe) ispolxzuemogo kanala; nomer kanala dolven bytx
           polu~en pri pomo}i wyzowa IGETC,  ili,  esli  predwaritelxno
           osu}estwlqlsq wyzow ICDFN, mogut bytx ispolxzowany kanaly  s
           nomerami 16 (desqti~noe) i bolx{e.

       rezulxtaty funkcii:

       I= N - oby~nyj wyhod iz podprogrammy; N rawno ~islu
              zapisannyh slow, okruglennyh do ~isla
              kratnogo 256 (0 dlq ustrojstwa, otkrytogo kak
              nefajlowoe);

       I=-1 - popytka zapisatx posle konca fajla;
       I=-2 - proizo{la apparatnaq o{ibka;
       I=-3 - ukazannyj kanal ne otkryt.


       pRIME^ANIE. esli wozwra}aemyj s~et~ik slow (WCNT) menx{e trebue-
  mogo, to |to ozna~aet, ~to wstretilsq neqwnyj konec fajla.

       primer.

       INTEGER*2 IBUF (256)
       EXTERNAL CRtN
        . . .
       ICODE=IWRITE (256,IBUF,IBLK,ICHAN,CRTN)



       8.2.5.2. funkciq IWRITC



       funkciq IWRITC prednazna~ena dlq pereda~i zadannogo  ~isla  slow
  iz operatiwnoj pamqti po zadannomu kanalu. zapros stawitsq w  o~eredx
  i uprawlenie wozwra}aetsq  programme  polxzowatelq.  posle  okon~aniq
  pereda~i osnownaq programma prerywaetsq i wyzywaetsq ukazannaq  podp-
  rogramma na qzyke makroassembler w ka~estwe asinhronnoj  podprogrammy
  zawer{eniq.

       obra}enie k funkcii:

          I=IWRITC (WCNT,BUF,BLK,CHAN,CRTN)

  gde

  WCNT   - koli~estwo (celoe) peredawaemyh slow;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera wywoda;

                                 - 210 -




  BLK    - celoe; otnositelxnyj nomer bloka fajla, w kotoryj proishodit
           zapisx; pered powtornym ispolxzowaniem programma polxzowate-
           lq oby~no obnowlqet parametr BLK (naprimer,  esli  programma
           wywela dwa bloka, to zna~enie BLK nuvno uweli~itx na 2);

  CHAN   - nomer ispolxzuemogo kanala; nomer kanala dolven bytx polu~en
           pri pomo}i IGETC,  ili,  esli  predwaritelxno  byla  wyzwana
           ICDFN, movno ispolxzowatx kanaly s nomerami 16  (desqti~noe)
           i wy{e.

  CRTN   - podprogramma, napisannaq na makroassemblere, kotoraq aktiwi-
           ziruetsq po zawer{enii pereda~i; |to imq dolvno  ukazywatxsq
           w operatore EXTERNAL programmy na qzyke fortran,  wyzywa`}ej
           IWRITC.

       rezulxtaty funkcii priwedeny w  opisanii  funkcii  IWRITE.  (sM.
  podpunkt 8.2.5.1).

       primer  priweden  w  opisanii  funkcii  IREAD.   (sM.   podpunkt
  8.2.1.1).



       8.2.5.3. funkciq IWRITF



       funkciq IWRITF peredaet zadannoe ~islo slow iz operatiwnoj pamq-
  ti po ukazannomu kanalu. zapros na  pereda~u  stawitsq  w  o~eredx  i
  uprawlenie wozwra}aetsq programme polxzowatelq. posle okon~aniq  ope-
  racii osnownaq programma prerywaetsq i wyzywaetsq ukazannaq  podprog-
  ramma na qzyke fortran w ka~estwe asinhronnoj  podprogrammy  zawer{e-
  niq.

       obra}enie k funkcii:

          I=IWRITF (WCNT,BUF,BLK,CHAN,AREA,CRTN)

  gde

  WCNT   - koli~estwo (celoe) peredawaemyh slow;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera wywoda;

  BLK    - otnositelxnyj nomer (celoe) bloka fajla,  s  kotorogo  na~i-
           naetsq  zapisx;  pered  powtornym  ispolxzowaniem  programma
           oby~no obnowlqet BLK.

  CHAN   - nomer (celoe) ispolxzuemogo kanala; nomer kanala dolven bytx
           polu~en wyzowom IGETC, ili,  esli  wyzywalasx  ICDFN,  movet
           bytx ispolxzowan kanal s nomerom 16 (desqti~noe) i bolx{e;

  AREA   - massiw iz 4 slow, rezerwiruemyj dlq  informacii  swqzi;  ego
           |lementy ne dolvny modificirowatxsq programmoj; massiw  dol-
           ven bytx razme}en wne oblasti swopinga  USR;  dannyj  massiw
           movet ispolxzowatxsq drugimi  podprogrammami  zawer{eniq  na
           qzyke fortran posle togo, kak byla  aktiwizirowana  podprog-
           ramma, ukazannaq w dannom zaprose;

                                 - 211 -




  CRTN   - imq podprogrammy na qzyke  fortran,  kotoraq  aktiwiziruetsq
           posle okon~aniq pereda~i; |to imq dolvno ukazywatxsq w  ope-
           ratore EXTERNAL fortran-podprogrammy, wyzywa`}ej IWRITE.

       podprogramma zawer{eniq imeet dwa parametra:

          SUBROUTINE CRTN (IARG1,IARG2)

  gde

  CRTN   - identifikator podprogrammy zawer{eniq;

  IARG1  - slowo sostoqniq kanala dlq tolxko ~to zakon~ennoj  operacii;
           esli nulewoj bit ustanowlen, to |to  zna~it,  ~to  wo  wremq
           pereda~i proizo{la apparatnaq o{ibka;

  IARG2  - nomer kanala, ispolxzowannogo  dlq  tolxko  ~to  zakon~ennoj
           operacii.

       rezulxtaty funkcii priwedeny w opisanii funkcii IWRITE (sm. pod-
  punkt 8.2.5.1).

       primer  priweden  w  opisanii  funkcii  IREADF   (sm.   podpunkt
  8.2.1.3).



       8.2.5.4. funkciq IWRITW



       funkciq IWRITW prednazna~ena dlq pereda~i zadannogo  ~isla  slow
  iz operatiwnoj pamqti po ukazannomu kanalu.  uprawlenie  wozwra}aetsq
  programme polxzowatelq posle okon~aniq pereda~i.

       obra}enie k funkcii:

          I=IWRITW (WCNT,BUF,BLK,CHAN)

  gde

  WCNT   - koli~estwo (celoe) peredawaemyh slow;

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera wywoda;

  BLK    - nomer (celoe) bloka fajla, s kotorogo na~netsq zapisx; prog-
           ramma polxzowatelq pered powtornym ispolxzowaniem  parametra
           BLK obnowlqet ego;

  CHAN   - nomer (celoe) ispolxzuemogo kanala; nomer dolven bytx  polu-
           ~en wyzowom IGETC, ili, esli  uve  wyzywalasx  ICDFN,  movet
           bytx ispolxzowan kanal s nomerom 16 (desqti~noe) ili wy{e.

       rezulxtaty funkcii priwedeny w opisanii funkcii IWRITE (sm. pod-
  punkt 8.2.5.1).

       primer  priweden  w  opisanii  funkcii  IREADW   (sm.   podpunkt
  8.2.1.4).

                                 - 212 -




       8.2.6. podprogramma PRINT



       podprogramma PRINT osu}estwlqet wywod stroki na sistemnyj termi-
  nal. |ta podprogramma movet ispolxzowatxsq  dlq  pe~ati  soob}enij  w
  podprogrammah zawer{eniq bez ispolxzowaniq pri |tom formatnogo  fort-
  ranowskogo wwoda/wywoda. uprawlenie peredaetsq programme polxzowatelq
  posle pome}eniq w sistemnyj kolxcewoj  bufer  wywoda  wseh  wywodimyh
  simwolow.

       wywodimaq stroka dolvna zakan~iwatxsq bajtom 0  ili  bajtom  200
  (wosxmeri~noe). esli ispolxzuetsq 0 (format ASCIZ),  wywod  awtomati-
  ~eski zawer{aetsq znakami <CR><LF> (15  i  12  (wosxmeri~noe)).  esli
  ispolxzuetsq ograni~itelx 200, to |ti znaki ne generiru`tsq.

       w RT11FB izmenenie zadaniq, kontroliru`}ego terminalxnyj  wywod,
  ukazywa`tsq pri pomo}i pe~ati posledowatelxnosti znakow B> i F>  (ili
  NAME>, gde NAME-logi~eskoe imq zadaniq). do teh  por  poka  ne  budet
  wyweden protiwopolovnyj ukazatelx, wesx wywod na  terminal  osu}estw-
  lqetsq zadaniem, ob'qwlennym poslednim wywedennym  ukazatelem.  kogda
  PRINT ispolxzuetsq operatiwnym zadaniem, soob}enie  wywoditsq  nemed-
  lenno, wne zawisimosti ot sostoqniq fonowogo zadaniq. t.e. dlq  sro~-
  nyh soob}enij PRINT predpo~titelxnej ITTOUR.

       obra}enie k podprogramme:

          CALL PRINT (STRING)

  gde

  STRING - wywodimaq stroka.


       pRIME^ANIE. wse litery, ispolxzuemye w podprogrammah  biblioteki
  sistemy RT11, a takve wse stroki, wyrabatywaemye funkciqmi  obrabotki
  strok simwolow, ime`t format ASCIZ. (podprogramma CONCAT  movet  bytx
  ispolxzowana dlq dobawleniq bajta 200 w stroku ASCIZ)>

       o{ibki otsutstwu`t.

       primer.

        CALL PRINT(' wywod stroki ')
   ili
        BYTE QUEST(80)
   C    dobawitx bajt 200 i wywesti bez <CR><LF>
   C
        CALL CONCAT('wa{e imq?', "200, QUEST)
        CALL PRINT(QUEST)

                                 - 213 -




       8.2.7. funkcii ISPFN/ISPFNC/ISPFNF/ISPFNW



       |ti funkcii ispolxzu`tsq dlq  dostupa  k  specialxnym  sredstwam
  razli~nyh drajwerow (magnitnyh lent, gibkih diskow, kassetnyh magnit-
  nyh lent). oni obespe~iwa`t wozmovnostx wypolneniq operacij,  swojst-
  wennyh opredelennym ustrojstwam, takih kak peremotka i rewers, prime-
  nitelxno k ustrojstwam magnitnoj lenty. esli wyzowy ISPFN wypolnq`tsq
  dlq drugih ustrojstw, to oni ignoriru`tsq.

       dlq ispolxzowaniq |tih funkcij neobhodimo w  operatiwnu`  pamqtx
  pomestitx drajwer ustrojstwa i swqzatx kanal s ustrojstwom  posredst-
  wom LOOKUP nefajlowoj struktury. wypolnenie |tih funkcij trebuet |le-
  menta o~eredi, ~to sleduet u~itywatx pri wypolnenii IQSET.



       8.2.7.1. funkciq ISPFN



       funkciq ISPFN stawit w o~eredx zapros na  ukazannu`  operaci`  i
  nemedlenno  wozwra}aet  uprawlenie  programme.  ~toby   zafiksirowatx
  zawer{enie operacii, movno ispolxzowatx funkci` IWAIT.

       obra}enie k funkcii:

          I=ISPFN (CODE,CHAN[,WCNT,BUF,BLK])

  gde

  CODE   - ~islowoj kod (celoe) wypolnqemoj funkcii;

  CHAN   - nomer (celoe) kanala, ispolxzuemogo dlq operacii; |tot nomer
           dolven bytx polu~en pri pomo}i IGETC, ili, esli  pered  |tim
           wyzywalasx ICDFN, movno ispolxzowatx  kanaly  s  nomerom  16
           (desqti~noe) i bolx{e;

  WCNT   - koli~estwo (celoe) ~islo slow, u~astwu`}ih  w  operacii;  po
           umol~ani` rawno nul`; |tot parametr ne qwlqetsq obqzatelxnym
           pri wyzowah ISPFN (w zawisimosti ot wyzywaemyh  funkcij);  w
           operaciqh s magnitnoj lentoj on ukazywaet  koli~estwo  zapi-
           sej, propuskaemyh wpered ili nazad; pri peremotke  nazad  so
           s~et~ikom, rawnym nul`, lenta perematywaetsq do markera  ili
           do na~ala lenty; analogi~no, pri peremotke wpered so s~et~i-
           kom, rawnym nul`, peremotka wedetsq do markera ili do  konca
           lenty;

  BUF    - massiw, ispolxzuemyj dlq hraneniq informacii; |tot  parametr
           ne qwlqetsq obqzatelxnym pri wyzowe ISPFN (w zawisimosti  ot
           wyzywaemyh funkcij); zna~enie po umol~ani` - nulx;

  BLK    - nomer (celoe) bloka fajla, nad kotorym wypolnqetsq operaciq;
           po umol~ani` prinimaetsq zna~enie, rawnoe nul`;  |tot  para-
           metr ne qwlqetsq obqzatelxnym pri wyzowe ISPFN (w zawisimos-
           ti ot wyzywaemyh funkcij).

       esli parametr BLK primenqetsq k  magnitnoj  lente,  on  qwlqetsq

                                 - 214 -




  adresom 4-slownogo bloka o{ibok i sostoqniq i ispolxzuetsq dlq zapisi
  sootwetstwu`}ej informacii. |ti ~etyre slowa dolvny bytx  ustanowleny
  w nulx pered obra}eniem k ISPFN.

       pri rabote s RT11XM blok o{ibok i sostoqniq dolven bytx  otobra-
  ven (do zawer{eniq operacii) i raspoloven w pamqti wne  oblasti  swo-
  pinga USR. ~toby polu~itx adres bloka  o{ibok,  neobhodimo  wypolnitx
  sledu`}ie instrukcii:

       INTEGER*2  ERRADR,ERRBLK(4)
       DATA ERRBLK/0,0,0,0/
        . . .
       ERRADR=IADDR(ERRBLK)   !polu~itx adres
  C                            4-slownogo bloka o{ibok.
       ICODE=ISPFN(CODE,ICHAN,WDCT,BUF,ERRADR)

       tri  poslednih  (neobqzatelxnyh)  argumenta  (WCNT,BUFF,BLK)  ne
  qwlq`tsq neobqzatelxnymi po otdelxnosti: oni dolvny bytx ukazany libo
  wse, libo ne dolvno bytx ni odnogo.

       dalee priwedeny wosxmeri~nye kody specialxnyh funkcij  dlq  raz-
  li~nyh ustrojstw:

    funkciq                         MT   CT   DX   DM   DY
    -------                         --   --   --   --   --
    ~tenie absol`tnoe                         377  377  377
    zapisx absol`tnaq                         376  376  376
    zapisx absol`tnaq
     s udaleniem dannyh                       375       375
    prodwivenie wpered
     k poslednemu fajlu                  377
    prodwivenie wpered
     k poslednemu bloku                  376
    prodwivenie wpered
     k sledu`}emu fajlu                  375
    prodwivenie wpered
     k sledu`}emu bloku                  374
    peremotka nazad k
     to~ke zagruzke                 373  373
    zapisx promevutka
     mevdu fajlami                       372
    zapisx metki konca
     fajla (EOF)                    377
    prodwivenie wpered
     na odnu zapisx                 376
    peremotka nazad na
     odnu zapisx                    375
    zapisx defektnogo bloka
     w tablicu zame}eniq                           374
    zapisx s ras{irennym
     promevutkom                    374
    awtonomnyj revim raboty         372
    polu~enie razmera
     nositelq                                      373  373
    zapisx blokow peremennoj
     dliny                          371
    ~tenie blokow peremennoj
     dliny                          370

                                 - 215 -




       pRIME^ANIE. kody specialxnyh funkcij dlq ustrojstw MT i MM  sow-
  pada`t.

       rezulxtaty funkcii:

        I=0 - oby~nyj wyhod;

        I=1 - popytka pisatx ili ~itatx posle konca fajla;
        I=2 - w kanale proizo{la apparatnaq o{ibka;
        I=3 - ukazannyj kanal ne otkryt.

       primer.

          CALL ISPFN ("373,ICHAN)   !peremotka w na~alo



       8.2.7.2. funkciq ISPFNC



       funkciq ISPFNC stawit w o~eredx zapros na ukazannu`  operaci`  i
  nemedlenno wozwra}aet uprawlenie programme.  po  zawer{enii  operacii
  wypolnenie osnownoj programmy prerywaetsq i wyzywaetsq zadannaq prog-
  ramma na qzyke assembler (parametr CRTN) w ka~estwe asinhronnoj podp-
  rogrammy zawer{eniq.

       obra}enie k funkcii:

          I=ISPFNC (CODE,CHAN,WCNT,BUF,BLK,CRTN)

  gde

  CODE   - ~islowoj  kod  (celoe)  wypolnqemoj  funkcii  (sm.  podpunkt
           8.2.7.1);

  CHAN   - nomer kanala, ispolxzuemogo dlq operacii; nomer dolven  bytx
           polu~en po  wyzowu  IGETC,  ili,  esli  ispolxzowalsq  wyzow
           ICDFN, movno ispolxzowatx kanal s  nomerom  16  (desqti~noe)
           ili wy{e;

  WCNT   - koli~estwo (celoe) slow, u~astwu`}ih w operacii; po  umol~a-
           ni` rawno nul`; w operaciqh s magnitnoj lentoj on  ukazywaet
           koli~estwo zapisej, propuskaemyh wpered ili nazad; pri pere-
           motke nazad so s~et~ikom rawnym nul`,  lenta  perematywaetsq
           do markera ili do na~ala lenty;  analogi~no,  pri  peremotke
           wpered, so s~et~ikom rawnym nul`, peremotka wedetsq do  mar-
           kera ili do konca lenty;

  BUF    - massiw, ispolxzuemyj dlq hraneniq informacii;  po  umol~ani`
           zna~enie |togo argumenta rawno nul`;

  BLK    - nomer bloka fajla,  nad  kotorym  wypolnqetsq  operaciq;  po
           umol~ani` prinimaetsq zna~enie rawnoe nul`;

  CRTN   - imq podprogrammy na makroassemblere, kotoraq  wyzywaetsq  po
           zawer{enii operacii; |to imq dolvno ukazywatxsq w  operatore
           EXTERNAL programmy na qzyke fortran, wyzywa`}ej ISPFNC.


                                 - 216 -




       esli parametr BLK primenqetsq dlq magnitnoj lenty,  on  qwlqetsq
  adresom 4-slownogo bloka o{ibok i sostoqniq ispolxzuetsq  dlq  priema
  sootwetstwu`}ej informacii. w |ti ~etyre slowa dolvny  bytx  perwona-
  ~alxno zaneseny nuli.

       pri rabote s RT11XM blok o{ibok i sostoqniq ne dolvnen  izmenqtx
  swoego otobraveniq do zawer{eniq operacii i dolven bytx raspoloven  w
  pamqti wne oblasti swopinga USR. ~toby polu~itx adres  bloka  o{ibok,
  neobhodimo wypolnitx sledu`}ie instrukcii:

           INTEGER*2 ERRADR,ERRBLK(4)
           EXTERNAL CROU
           DATA ERRBLK/0,0,0,0/
             . . .
           ERRADR=IADDR(ERRBLK)    !polu~itx adres 4-slownogo
   C                                bloka o{ibok
           ICODE=ISPFNC(CODE,ICHAN,WDCT,BUF,ERRADR,CROU)

       rezulxtaty funkcii:

        I=0 - oby~nyj wyhod;

        I=1 - popytka ~teniq/zapisi posle konca fajla;
        I=2 - w kanale proizo{la apparatnaq o{ibka;
        I=3 - ukazannyj kanal ne otkryt.



       8.2.7.3. funkciq ISPFNF



       funkciq ISPFNF stawit w o~eredx zapros na ukazannu`  operaci`  i
  nemedlenno wozwra}aet uprawlenie programme.  po  zawer{enii  operacii
  wypolnenie osnownoj programmy prerywaetsq  i  ukazannaq  podprogramma
  (parametr CRTN) na qzyke fortran wyzywaetsq  w  ka~estwe  asinhronnoj
  podprogrammy zawer{eniq.

       obra}enie k funkcii:

          I=ISPFNF (CODE,CHAN,WCNT,BUF,BLK,AREA,CRTN)

  gde

  CODE   - ~islowoj  kod  (celoe)  wypolnqemoj  funkcii  (sm.  podpunkt
           8.2.7.1);

  CHAN   - nomer kanala, ispolxzuemogo dlq operacii; kanal dolven  bytx
           polu~en pri pomo}i IGETC, ili, esli  uve  wyzywalasx  ICDFN,
           movno ispolxzowatx kanal s nomerom 16 (desqti~noe) i bolx{e;

  WCNT   - koli~estwo (celoe) slow, u~astwu`}ih w operacii; po  umol~a-
           ni` rawno nul`; w operaciqh s magnitnoj lentoj on  ukazywaet
           koli~estwo zapisej, propuskaemyh wpered ili nazad; pri pere-
           motke nazad, so s~et~ikom rawnym nul`, lenta  perematywaetsq
           do markera ili do na~ala lenty;  analogi~no,  pri  peremotke
           wpered, so s~et~ikom rawnym nul`, peremotka wedetsq do  mar-
           kera ili do konca lenty;

                                 - 217 -




  BUF    - massiw, ispolxzuemyj dlq hraneniq informacii;  po  umol~ani`
           zna~enie |togo argumenta rawno nul`;

  BLK    - nomer (celoe) bloka fajla, nad kotorym wypolnqetsq operaciq;
           po umol~ani` prinimaetsq zna~enie rawnoe nul`;

  AREA   - 4-slownyj massiw, kotoryj ispolxzuetsq dlq hraneniq informa-
           cii swqzi; ego |lementy ne dolvny modificirowatxsq  program-
           moj; massiw dolven bytx razme}en wne oblasti  swopinga  USR;
           massiw movet ispolxzowatxsq drugimi funkciqmi zawer{eniq  na
           fortrane posle wyzowa zadannoj podprogrammy zawer{eniq;

  CRTN   - imq podprogrammy na qzyke  fortran,  KOtoraq  wyzywaetsq  po
           zawer{enii operacii; |to imq dolvno ukazywatxsq w  operatore
           EXTERNAL programmy na qzyke fortran, wyzywa`}ej ISPFNF.

       kogda parametr BLK primenqetsq dlq magnitnoj lenty, on  qwlqetsq
  adresom 4-slownogo bloka o{ibok i sostoqniq i ispolxzuetsq dlq zapisi
  sootwetstwu`}ej informacii. pered wyzowom ISPFNF w |ti  ~etyre  slowa
  dolvny bytx zaneseny nuli.

       pri rabote s RT11XM blok o{ibok i sostoqniq ne  dolven  izmenqtx
  swoego otobraveniq do zawer{eniq operacii i dolven bytx raspoloven  w
  pamqti wne oblasti swopinga USR. ~toby polu~itx adres  bloka  o{ibok,
  neobhodimo wypolnitx sledu`}ie instrukcii:

         INTEGER*2 ERRADR, ERRBLK(4), LINK(4)
         EXTERNAL CROU
         DATA ERRBLK/0,0,0,0/
         . . .
         ERRADR=IADDR(ERRBLK) !polu~itx adres 4-slownogo
   C                           bloka o{ibok
         ICODE=ISPFNF(CODE,ICHAN,WDCT,BUF,ERRADR,LINK,CROU)



       podprogramma zawer{eniq imeet dwa parametra:

          SUBROUTINE CRTN (IARG1,IARG2)

  gde

  CRTN   - imq podprogrammy zawer{eniq;

  IARG1  - slowo sostoqniq kanala, ispolxzowannogo dlq  operacii;  esli
           nulewoj razrqd ustanowlen, to wo  wremq  pereda~i  proizo{la
           apparatnaq o{ibka;

  IARG2  - nomer kanala, ispolxzowannogo dlq operacii.

       rezulxtaty funkcii:

        I=0 - oby~nyj wyhod;

        I=1 - popytka ~teniq/zapisi posle konca fajla;
        I=2 - w kanale proizo{la apparatnaq o{ibka;
        I=3 - ukazannyj kanal ne otkryt.

       primer.

                                 - 218 -




           REAL*4 MTNAME(2), AREA(2)
           DATA MTNAME/3RMT0,0./
           EXTERNAL DONSUB
            . . .
           I=IGETC()                !polu~itx kanal
           CALL IFETCH(MTNAME)      !zagruzitx drajwer
           CALL LOOKUP(I,MTNAME)    !otkrytx kanal
           IERR=ISPFNF("373,1,0,0,0,AREA,DONSUB) !peremotatx
      C                                           lentu
            . . .
           END
           SUBROUTINE DONSUB
      C     wyzywaetsq posle peremotki mt0:
            . . .
           END



       8.2.7.4. funkciq ISPFNW



       funkciq ISPFNW stawit w o~eredx zapros na  zadannu`  operaci`  i
  wozwra}aet uprawlenie programme posle wypolneniq operacii.

       obra}enie k funkcii:

          I=ISPFNW (CODE,CHAN[,WCNT,BUF,BLK])

  gde

  CODE   - ~islowoj  kod  (celoe)  wypolnqemoj  funkcii  (sm.  podpunkt
           8.2.7.1);

  CHAN   - nomer kanala, ispolxzuemogo dlq operacii; kanal dolven  bytx
           polu~en po IGETC, ili, esli wyzywalasx ICDFN, movno  ispolx-
           zowatx kanal s nomerom 16 (desqti~noe) i bolx{e;

  WCNT   - koli~estwo (celoe) slow, u~astwu`}ih w operacii; |tot  argu-
           ment ne obqzatelen dlq nekotoryh wyzowow ISPFNW,  w  zawisi-
           mosti ot zapra{iwaemoj funkcii; po umol~ani` rawen  nul`;  w
           operaciqh s magnitnoj lentoj on ukazywaet  koli~estwo  zapi-
           sej, propuskaemyh wpered ili nazad; pri peremotke nazad,  so
           s~et~ikom rawnym nul`, lenta perematywaetsq do  markera  ili
           do na~ala lenty; analogi~no, pri peremotke wpered, so  s~et-
           ~ikom rawnym nul`, peremotka wedetsq do markera ili do konca
           lenty;

  BUF    - massiw, ispolxzuemyj dlq hraneniq informacii; esli ne nuven,
           to rawen nul`; |tot argument ne obqzatelen dlq nekotoryh  (w
           zawisimosti ot koda funkcii) wyzowow ISRFNW;

  BLK    - nomer bloka fajla (celoe  ~islo),  nad  kotorym  wypolnqetsq
           operaciq; |tot argument ne obqzatelen dlq nekotoryh (w zawi-
           simosti ot koda funkcii) wyzowow ISPFNW; po umol~ani` prini-
           maetsq zna~enie, rawnoe nul`.

       kogda parametr BLK primenqetsq dlq magnitnoj lenty, on  qwlqetsq
  adresom 4-slownogo bloka o{ibok i sostoqniq i ispolxzuetsq dlq zapisi

                                 - 219 -




  sootwetstwu`}ej informacii.

       pri rabote s RT11XM blok o{ibok i sostoqniq ne  dolven  izmenqtx
  swoego otobraveniq do zawer{eniq operacii i  dolven  bytx  raspoloven
  wne oblasti swopinga USR. ~etyre slowa dolvny bytx na~alxno zapolneny
  nulqmi. ~toby polu~itx adres bloka o{ibok, neobhodimo wypolnitx  sle-
  du`}ie instrukcii:

       INTEGER*2 ERRADR, ERRBLK(4)
       DATA ERRBLK/0,0,0,0/
        . . .
       ERRADR=IADDR(ERRBLK)  !polu~itx adres status-bloka
       ICODE=ISPFN(CODE,ICHAN,WDCT,BUF,ERRADR)


       pRIME^ANIE. parametry BUF i  BLK  neobqzatelxny.  oni  trebu`tsq
  tolxko pri zapisi na magnitnu`  lentu  s  uweli~ennym  zazorom  mevdu
  zapisqmi ili pri ~tenii lenty.

       rezulxtaty funkcii:

          I=0 - oby~nyj wyhod;

          I=1 - popytka ~teniq/zapisi posle
                konca fajla;
          I=2 - w kanale proizo{la apparatnaq o{ibka;
          I=3 - ukazannyj kanal ne otkryt.

       primer.

          INTEGER*2 BUF(65),TRACK,SECTOP,DBLK(4)
          DATA DBLK/3RDX0,0,0,0/
           . . .
          ICHAN=IGETC()
          IF (ICHAN.LT.0) STOP  ' net kanala '
          IF (LOOKUP(ICHAN,DBLK).LT.0)
         * STOP ' neuda~nyj  LOOKUP '
           . . .
    C     pro~itatx absol`tnu` dorovku i sektor
    C     gibkogo diska
    C
          ICODE=ISPFNW("377,ICHAN,TRACK,BUF,SECTOP)
    C
    C     BUF(1) = flag stertyh dannyh
    C     BUF(2-65) = dannye



       8.3. rabota s kanalami



                                 - 220 -




       8.3.1. funkciq ICDFN



       funkciq ICDFN uweli~iwaet ~islo kanalow wwoda/wywoda. neobhodimo
  otmetitx, ~to ICDFN opredelqet nowye kanaly. kanaly, opredelennye  do
  dannogo wyzowa ICDFN, ne ispolxzu`tsq,  t.e.  funkciq  ICDFN  dlq  20
  (desqti~noe) kanalow  w  moment,  kogda  opredeleny  16  (desqti~noe)
  osnownyh kanalow, daet tolxko 20 kanalow wwoda/wywoda. pamqtx,  wyde-
  lennaq dlq informacii ob osnownyh kanalah, ne ispolxzuetsq.

       obra}enie k funkcii:

          I=ICDFN (NUM[,AREA])

  gde

  NUM    - koli~estwo (celoe)  wydelqemyh  kanalow;  |to  ~islo  dolvno
           nahoditxsq w interwale 17 - 256 (desqti~noe);

  AREA   - prostranstwo dlq zapisi  informacii  o  kanalah,  wydelqemoe
           wyzywa`}ej programmoj; esli |tot argument ne ukazan,  pamqtx
           wydelqetsq w rabo~ej oblasti ispolnq`}ej sistemy fortrana.

       programma movet ispolxzowatx nowye kanaly s  nomerom  bolx{e  16
  bez obra}enij k  funkcii  IGETC,  no  sistema  wwoda/wywoda  fortrana
  ispolxzuet tolxko perwye 15 (desqti~noe) kanalow. osnownye 16 kanalow
  ispolxzu`tsq USR i raspredelq`tsq funkciej IGETC.

       argumenty funkcii ICDFN dolvny razme}atxsq wne oblasti  swopinga
  USR.

       prime~aniq:
       1. funkci` ICDFN nelxzq wyzywatx iz podprogrammy zawer{eniq  ili
  obrabotki prerywaniq.
       2. rekomenduetsq ispolxzowatx funkci` ICDFN  w  na~ale  osnownoj
  programmy pered iniciirowaniem l`byh operacij wwoda/wywoda.
       3. esli funkciq ICDFN wypolnqetsq bolee odnogo raza,  to  kavdyj
  raz pri wyzowe ee formiruetsq  sower{enno  nowyj  nabor  kanalow,  no
  informaciq o staryh kanalah perepisywaetsq w nowye.
       4. funkciq ICDFN trebuet, ~toby dlq operatiwnyh programm wydelq-
  lasx dopolnitelxnaq pamqtx.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - byla predprinqta popytka raspredelitx menx{e
             kanalow, ~em su}estwuet;
       I=2 - dlq zapisi informacii o kanalah nedostato~no
             swobodnoj pamqti.

       primer.

       IF(ICDFN(24).NE.0)STOP 'nedostato~no pamqti'

                                 - 221 -




       8.3.2. funkciq ICHCPY (RT11FB ili RT11XM)



       funkciq ICHCPY otkrywaet kanal dlq wwoda, logi~eski swqzywaq ego
  s fajlom, kotoryj w nastoq}ij moment otkryt drugim zadaniem dlq wwoda
  ili wywoda. |ta funkciq movet bytx ispolxzowana  kak  w  operatiwnoj,
  tak i w fonowoj programme. funkciq ICHCPY dolvna wypolnqtxsq do  per-
  wogo ~teniq ili zapisi po dannomu kanalu.

       obra}enie k funkcii:

          I=ICHCPY (CHAN,OCHAN[,JOBBLK])

  gde

  CHAN   - nomer kanala, kotoryj budet ispolxzowatxsq zadaniem dlq ~te-
           niq dannyh; nomer dolven  bytx  polu~en  pri  pomo}i  wyzowa
           IGETC, ili, esli uve wyzywalasx  ICDFN,  movno  ispolxzowatx
           swobodnyj kanal s nomerom ot 16 (desqti~noe) i wy{e.

  OCHAN  - nomer kanala drugogo zadaniq, kotoryj dolven kopirowatxsq;

  JOBBLK - ukazatelx trehslownogo bloka imeni zadaniq w koi-7.

       prime~aniq:
       1. esli kanal drugogo zadaniq byl otkryt dlq formirowaniq  fajla
  funkciej IENTER ili sistemnoj makrokomandoj .ENTER, to po skopirowan-
  nomu kanalu budut dostupny bloki fajla do star{ego bloka fajla  wkl`-
  ~itelxno, zapisannogo k momentu operacii ICHCPY programmoj, sozdaw{ej
  fajl.
       2. kanal, otkrytyj na ustrojstwo posledowatelxnogo  dostupa,  ne
  dolven kopirowatxsq.
       3. programma movet zapisywatx w fajl (sozdannyj drugim zadaniem)
  po skopirowannomu kanalu tak ve, kak |to ona mogla by sdelatx w  slu-
  ~ae, esli byla by programmoj, sformirowaw{ej |tot fajl. odnako,  esli
  skopirowannyj kanal zakrywaetsq, to obnowleniq kataloga  ne  proisho-
  dit.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - drugoe zadanie ne su}estwuet ili dlq nego ne
             otkryt ukazannyj kanal (argument "OCHAN");
       I=2 - kanal uve otkryt (argument "CHAN").



       8.3.3. funkciq ICSTAT (RT11FB ili RT11XM)



       funkciq ICSTAT prednazna~ena dlq polu~eniq informacii o  sostoq-
  nii kanala. ona wypolnqetsq tolxko  pod  uprawleniem  RT11FB(XM)  pod
  uprawleniem RT11SJ wyzow |Toj funkcii ne daet nikakoj informacii.

       obra}enie k funkcii:

                                 - 222 -




          I=ICSTAT (CHAN,ADDR)

  gde

  CHAN   - nomer kanala, o kotorom neobhodimo polu~itx informaci`;

  ADDR   - 6-slownyj massiw, prednazna~ennyj dlq  priema  informacii  o
           sostoqnii kanala.

       ADDR, opisannyj w wide  6-|lementnogo  massiwa  tipa  INTEGER*2,
  imeet sledu`}ij format:

  1-e slowo
         - slowo sostoqniq kanala;

  2-e slowo
         - absol`tnyj nomer na~alxnogo bloka fajla, swqzannogo  s  |tim
           kanalom na nositele;

  3-e slowo
         - dlina fajla;

  4-e slowo
         - maksimalxnyj nomer bloka, w kotoryj byla proizwedena  zapisx
           s togo momenta, kak byl otkryt fajl;

  5-e slowo
         - nomer ustrojstwa, s kotorym swqzan kanal;

  6-e slowo
         - imq ustrojstwa, s kotorym swqzan kanal, w RADIX-50.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannyj kanal ne otkryt.

       w primere pokazano, kak polu~itx informaci` o sostoqnii kanala.

       primer.

            INTEGER*2 AREAL(6)
            I=7
            IF(ICSTAT(I,AREAL).NE.0)TYPE 99,I
       99   FORMAT('kanal',I4,' ne otkryt')




       8.3.4. funkciq IFREEC



       funkciq IFREEC prednazna~ena dlq oswobovdeniq ukazannogo  kanala
  i wozwrata ego w spisok swobodnyh kanalow ispolnq`}ej sistemy fortra-
  na. pered wyzowom IFREEC ukazannyj kanal neobhodimo zakrytx  funkciej
  CLOSEC (ili ICLOSE) ili o~istitx funkciej PURGE.  funkciq  IFREEC  ne
  movet wyzywatxsq iz podprogramm zawer{eniq ili obrabotki  prerywaniq.

                                 - 223 -




  wyzowy IFREEC dolvny proizwoditxsq tolxko dlq kanalow,  kotorye  byli
  ranee uspe{no wydeleny iz spiska swobodnyh kanalow ispolnq`}ej siste-
  my fortran pri pomo}i wyzowa IGETC,  w  protiwnom  slu~ae  rezulxtaty
  nepredskazuemy.

       obra}enie k funkcii:

          I=IFREEC (CHAN)

  gde

  CHAN   - nomer (celoe) oswobovdaemogo kanala.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w dannyj moment ukazannyj kanal ne wydelen.

       primer priweden w opisanii funkcii IGETC (p. 8.3.5).



       8.3.5. funkciq IGETC



       funkciq IGETC prednazna~ena dlq wydeleniq osnownyh kanalow  sis-
  temy w diapazone 0-17 (wosxmeri~noe)  dlq  ispolxzowaniq  ih  drugimi
  podprogrammami SYSLIB. ispolnq`}aq sistema  fortrana  wydelqet  kanal
  polxzowatel` i fiksiruet, ~to on  zanqt,  t.e.  sistema  wwoda/wywoda
  fortrana ne polu~it k nemu dostupa. funkciq IGETC ne movet wyzywatxsq
  iz podprogrammy zawer{eniq ili iz podprogrammy obrabotki prerywaniq.

       obra}enie k funkcii:

          I=IGETC ()

       rezulxtaty funkcii:

       I=-1 - net swobodnyh kanalow;

       I=N  - dlq wwoda/wywoda wydelen kanal N.

       primer.

       ICHAN=IGETC() !raspredelitx kanal
       IF(ICHAN.LT.0)STOP 'kanal nelxzq wydelitx'
        . . .
       CALL IFREEC(ICHAN)  !oswoboditx kanal
        . . .
       END

                                 - 224 -




       8.3.6. funkciq ILUN



       funkciq ILUN prednazna~ena  dlq  opredeleniq  nomera  kanala,  s
  kotorym swqzano logi~eskoe ustrojstwo fortrana w sisteme RT11.

       obra}enie k funkcii:

          I=ILUN (LUN)

  gde

  LUN    - celoe wyravenie so zna~eniem w diapazone 1 - 99;  opredelqet
           nomer logi~eskogo ustrojstwa fortranowskoj sistemy.

       rezulxtaty funkcii:

       I=N  - kanal s nomerom N swqzan s logi~eskim ustrojst-
              wom sistemy LUN;

       I=-1 - logi~eskoe ustrojstwo ne otkryto;
       I=-2 - logi~eskoe ustrojstwo otkryto konsolxnomu ter-
              minalu.

       primer.

            PRINT 99
       99   FORMAT(' nape~atatx na '
           *' logi~eske ustrojstwo 6, kotorym po umol~ani` '
           *' dolvno bytx LP: ')
            LUNIT=ILUN(6)  ! opredelenie kanala wwoda/wywoda



       8.3.7. funkciq IREOPN



       funkciq IREOPN prednazna~ena dlq powtornogo  ustanowleniq  swqzi
  zadannogo kanala s fajlom, dlq kotorogo predwaritelxno bylo wypolneno
  ISAVES. w slu~ae, kogda  odnowremenno  obrabatywaetsq  bolx{oe  ~islo
  fajlow, celesoobrazno ispolxzowatx kombinaci` funkcij  ISAVES/IREOPN.
  neobhodimye dlq raboty fajly mogut bytx otkryty funkciej  LOOKUP,  ih
  sostoqnie movno sohranitx s pomo}x` ISAVES, a s pomo}x`  IREOPN  pow-
  torno otkrytx fajly i s~itatx iz nih neobhodimye dannye.

       obra}enie k funkcii:

          I=IREOPN (CHAN,CBLK)

  gde

  CHAN   - nomer kanala, swqzywaemogo s wnowx otkrywaemym fajlom;  per-
           wona~alxno |tot kanal dolven nahoditxsq w neaktiwnom sostoq-
           nii;

  CBLK   - 5-slownyj massiw, w kotoryj funkciej  ISAVES  byla  zapisana
           informaciq o sostoqnii kanala.

                                 - 225 -




       CBLK predstawlqet soboj 5-|lementnyj  massiw  tipa  INTEGER*2  i
  imeet sledu`}ij format:

  1 |lement
         - slowo sostoqniq kanala;

  2 |lement
         - nomer na~alxnogo bloka fajla na  nositele;  rawen  nul`  dlq
           ustrojstw s nefajlOwoj strukturoj;

  3 |lement
         - dlina fajla (w blokah po 256 slow);

  4 |lement
         - rezerwiruetsq;

  5 |lement
         - dwa   informacionnyh   bajta;   ~etnyj   bajt   -    s~et~ik
           wwoda/wywoda,  s~itaet  ~islo  zaprosow,  sdelannyh  dannomu
           kanalu; ne~etnyj bajt - nomer ustrojstwa, swqzannogo s  |tim
           kanalom.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannyj kanal uve ispolxzuetsq.

       primer.

       INTEGER*2 SAVES(5,10)
       DATA ISVPTR/1/
        . . .
       CALL ISAVES(ICHAN,SAVES(1,ISVPTR))
        . . .
       CALL IREOPN(ICHAN,SAVES(1,ISVPTR))



       8.3.8. funkciq ISAVES



       funkciq ISAVES zapisywaet pqtx slow informacii o sostoqnii kana-
  la w ukazannyj massiw. w |tom massiwe, posle wypolneniq ISAVES, budet
  sodervatxsq polnaq informaciq o fajle, neobhodimaq RT11 dlq ego opre-
  deleniq. posle wypolneniq funkcii ISAVES 5-slownyj massiw nahoditsq w
  operatiwnoj pamqti, ukazannyj kanal zakrywaetsq i stanowitsq  dostup-
  nym dlq ispolxzowaniq. esli neobhodimo wnowx polu~itx dostup k infor-
  macii, kotoraq byla swqzana s sohranennym kanalom, ispolxzuetsq funk-
  ciq IREOPN.

       funkci` ISAVES movno ispolxzowatx tolxko w tom slu~ae, esli fajl
  byl otkryt wyzowom LOOKUP. esli dlq otkrytiq  ispolxzowalasx  funkciq
  IENTER, to wyzow ISAVES wyrabatywaet priznak o{ibki.  funkciq  ISAVES
  ne primenqetsq k fajlam na magnitnoj lente i kassete.

       obra}enie k funkcii:

                                 - 226 -




          I=ISAVES (CHAN,CBLK)

  gde

  CHAN   - nomer kanala, o kotorom neobhodimo polu~itx informaci`; |tot
           kanal dolven bytx polu~en iz  ispolnq`}ej  sistemy  fortrana
           pri pomo}i funkcii IGETC, ili, esli bylo obra}enie k  ICDFN,
           movet bytx ispolxzowan kanal s  nomerom  16  (desqti~noe)  i
           bolx{e;

  CBLK   - 5-slownyj massiw, w kotoryj neobhodimo zapisatx informaci` o
           kanale (sm. p. 8.3.7).

       ispolxzuq ISAVES/IREOPN, neobhodimo izbegatx sledu`}ih situacij:

         - esli funkciq ISAVES primenqlasx k fajlu, a zatem  |tot  fajl
           byl udalen do powtornogo otkrytiq, to  oswobodiw{eesq  mesto
           moglo bytx ispolxzowano funkciej IENTER; pri takoj  posledo-
           watelxnosti funkcij su}estwuet weroqtnostx,  ~to  sodervimoe
           fajla, sostoqnie kotorogo sohranqlosx, izmenitsq;

         - esli pri wypolnenii funkcij IREAD  i  IWRITE  w  operatiwnoj
           pamqti net  drajwera  trebuemogo  periferijnogo  ustrojstwa,
           nali~ie  kotorogo  neobqzatelxno  pri   wypolnenii   funkcii
           IREOPN, to |to priwedet k neustranimoj o{ibke.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - zadannyj kanal w nastoq}ij moment ne swqzan s
             fajlom;
       I=2 - fajl byl otkryt wyzowom IENTER, funkciq ISAVES
             ne movet wypolnitxsq.

       primer.

       INTEGER*2 BLK(5)
        . . .
       IF(ISAVES(ICHAN,BLK).NE.0)STOP'o{ibka ISAVES'



       8.3.9. podprogramma PURGE



       podprogramma PURGE ispolxzuetsq dlq otkl`~eniq kanala bez wypol-
  neniq funkcii ISAVES, CLOSEC ili ICLOSE. pri |tom fajl,  swqzannyj  w
  nastoq}ij moment s kanalom, ne stanowitsq  postoqnnym,  esli  on  byl
  sozdan po IENTER. |tu podprogrammu celesoobrazno primenqtx  dlq  pre-
  dotwra}eniq prewra}eniq fajlow, sozdawaemyh funkciej IENTER ili  sis-
  temnoj makrokomandoj .ENTER, w postoqnnye fajly.

       obra}enie k podprogramme:

          CALL PURGE (CHAN)

  gde

                                 - 227 -




  CHAN   - nomer kanala sistemy RT11, kotoryj neobhodimo Otkl`~itx.

       o{ibki otsutstwu`t.

       primer priweden w opisanii funkcii IENTER (sm. p. 8.1.3).



       8.4. obrabotka komandnoj stroki





       8.4.1. podprogramma GTLIN



       podprogramma GTLIN peredaet stroku s sistemnogo terminala ili iz
  wypolnq`}egosq komandnogo fajla w programmu polxzowatelq.

       |tot zapros pozwolqet prinimatx informaci` s sistemnogo termina-
  la i uprawlqtx programmoj iz koswennogo komandnogo fajla. podprogram-
  ma GTLIN trebuet USR. maksimalxnyj razmer  whodnoj  stroki  rawen  80
  simwolam. opisanie ustanowki razrqdow w slowe sostoqniq zadaniq (JSW)
  dlq peresylki znakow kirillicy i  ustanowki  uslowij  nezaber{ennosti
  dano w opisanii sistemnoj makrokomandy .GTLIN (sm. p. 7.4.3).

       obra}enie k podprogramme:

          CALL GTLIN (RESULT[,PROMPT])

  gde

  RESULT - massiw,  w  kotorom  pome}aetsq  stroka;  |tot  massiw  tipa
           LOGICAL*1 sodervit maksimum 80 simwolow pl`s poslednij  sim-
           wol - ukazatelx konca (rawen nul`) i  po|tomu  dolven  imetx
           razmernostx ne menx{u`, ~em 81;

  PROMPT - neobqzatelxnyj  argument;  massiw  tipa  LOGICAL*1;  stroka,
           kotoraq pe~ataetsq do whodnoj stroki;  format  stroki  takoj
           ve, kak i w podprogramme PRINT; esli argument opu}en,  nika-
           kih signalow gotownosti k wwodu s klawiatury na terminal  ne
           wywoditsq.

       o{ibki otsutstwu`t.

       primer.

       LOGIKAL*1 INP(81), PROMP(5)

       DATA PROMP /'i', 'm', 'q', '?', "200/

       . . .

       CALL GTLIN (INP,PROMP)

                                 - 228 -




       8.4.2. funkciq IASIGN



       funkciq IASIGN prednazna~ena dlq  zapisi  informacii  w  tablicu
  logi~eskih ustrojstw ispolnq`}ej sistemy fortrana (otmenqq  zna~eniq,
  nazna~ennye po umol~ani`) s tem, ~toby |ta informaciq  ispolxzowalasx
  pri otkrytii logi~eskogo ustrojstwa. |tu funkci`  movno  ispolxzowatx
  wmeste s funkciej ICSI dlq obespe~eniq priema programmoj  na  fortran
  standartnoj komandnoj stroki CSI. funkciq IASIGN dolvna wyzywatxsq do
  otkrytiq ustrojstwa, t.e. do togo, kak odin iz operatorow (READ, WRI-
  TE, PRINT, TYPE, OPEN ili ACCEPT), trebu`}ij obra}eniq k  logi~eskomu
  ustrojstwu, budet wypolnen.

       obra}enie k funkcii:

          I=IASIGN (LUN,IDE[,IFILEX[,ISIZE[,ITYPE]]])

  gde

  LUN    - celaq peremennaq tipa INTEGER*2,  konstanta  ili  wyravenie,
           opisywa`}ee  logi~eskoe  ustrojstwo  fortran,  dlq  kotorogo
           prednazna~ena informaciq;

  IDEV   - imq ustrojstwa - odno slowo w kode RADIX-50, im  movet  bytx
           perwoe slowo opisaniq whodnogo  i  wyhodnogo  fajla  funkcii
           ICSI;

  IFILEX - tri slowa, soderva}ie imq i tip fajla w kode  RADIX-50;  imi
           mogut bytx wtoroe, tretxe i ~etwertoe slowo opisaniq whodno-
           go i wyhodnogo fajla funkcii ICSI;

  ISIZE  - dlina (w blokah po 256 slow) oblasti na wne{nem zapomina`}em
           ustrojstwe dlq razme}eniq wyhodnogo  fajla;  e`  movet  bytx
           pqtoe slowo opisaniq wyhodnogo fajla ICSI; esli  |tot  para-
           metr rawen nul`, to dlq  zapisi  fajla  wydelqetsq  polowina
           naibolx{ego swobodnogo prostranstwa <UNUSED> ili  wesx  sle-
           du`}ij po weli~ine <UNUSED>; esli weli~ina, ukazywa`}aq dli-
           nu, rawna -1, to wydelqetsq naibolx{ij <UNUSED>;

  ITYPE  - celaq weli~ina,  opredelq`}aq  neobqzatelxnye  specifikacii,
           nazna~aemye fajlu.

       ITYPE polu~aetsq sloveniem weli~in, sootwetstwu`}ih nuvnym  ope-
  raciqm:

  1      - ispolxzowatx dlq wywoda dwojnu` buferizaci`;

  2      - otkrytx fajl w ka~estwe wremennogo;

  4      - wypolnitx otkrytie su}estwu`}ego fajla wo wremq perwoj  ope-
           racii  wwoda/wywoda  (w  protiwnom  slu~ae  perwaq  operaciq
           wwoda/wywoda opredelqet sposob otkrytiq fajla w RT11; napri-
           mer, esli perwoj operaciej budet wywod, to fajl budet otkryt
           po IENTER; operaciq ~teniq wsegda predwarqetsq LOOKUP);

  8      - ras{iritx informaci` ob uprawlenii karetkoj;

  16     - ne ras{irqtx informaci` ob uprawlenii karetkoj;

                                 - 229 -




  32     - fajl movno tolxko ~itatx.

       prime~aniq:
       1. ras{irennaq informaciq  ob  uprawlenii  karetkoj  primenqetsq
  tolxko k formatnym wyhodnym fajlam i obozna~aet,  ~to  perwyj  simwol
  kavdoj zapisi ispolxzuetsq w ka~estwe simwola uprawleniq karetkoj pri
  zapisi na dannoe logi~eskoe ustrojstwo. perwyj  simwol  udalqetsq  iz
  zapisi i preobrazuetsq w sootwetstwu`}ie simwoly koi-7 dlq  modeliro-
  waniq trebuemogo uprawleniq karetkoj.
       2. esli informaciq ob uprawlenii karetkoj ne ras{irena, to  per-
  wyj simwol kavdoj zapisi  ne  modificiruetsq  i  ispolnq`}aq  sistema
  fortrana (OTS) wywodit <LF>, zapisx i <CR>.
       3. esli uprawlenie karetkoj ne ukazano, to OTS  posylaet  ras{i-
  rennu` informaci` ob uprawlenii karetkoj  na  terminal  i  pe~ata`}ee
  ustrojstwo, a neras{irennu` informaci` ob uprawlenii  karetkoj  -  na
  wse drugie ustrojstwa i fajly.

       rezulxtaty funkcii:

       I= 0 - oby~nyj wyhod;

       I<>0 - ukazannoe logi~eskoe ustrojstwo uve ispolxzu-
              etsq ili net mesta dlq informacii ob ustanow-
              lenii swqzi s drugim logi~eskim ustrojstwom.

       w primere opredelqetsq wyhodnoj fajl na logi~eskom ustrojstwe 3,
  w kotorom dlq wywoda ispolxzuetsq  dwojnaq  buferizaciq.  opisywaetsq
  takve whodnoj fajl na logi~eskom ustrojstwe 4, dostupnyj  tolxko  dlq
  ~teniq. informaciq o whodnom i wyhodnom  fajlah  beretsq  iz  massiwa
  opisaniq fajlow ICSI (iz opisanij perwogo wyhodnogo i perwogo whodno-
  go fajlow wo wwedennoj komande formata CSI).

       primer.

       INTEGER*2 SPEC(39)
       REAL*4 EXT(2)
       DATA EXT/6RDATDAT,6RDATDAT/    !po umol~ani` nazna~a-
   C                                   etsq tip fajla DAT
        . . .
    10 IF(ICSI(SPEC,EXT,,,0).NE.0) GOTO 10
   C
   C     kl`~i ne prinima`tsq
   C
       CALL IASIGN(3,SPEC(1),SPEC(2),SPEC(5),1)
       CALL IASIGN(4,SPEC(16),SPEC(17),0,32)



       8.4.3. funkciq ICSI



       funkciq ICSI wyzywaet interpretator komandnoj stroki (CSI)  sis-
  temy RT11 w specialxnom revime dlq analiza komandnoj stroki i wozwra-
  }aet specifikacii fajlow i kl`~ej w programmu. w |tom revime  interp-
  retator komandnoj stroki ne proizwodit zagruzku drajwerow i ne wypol-
  nqet funkcii CLOSE, ENTER ili LOOKUP. argument razre{en tolxko w slu-
  ~ae, kogda on wwoditsq s terminala.


                                 - 230 -




       funkciq ICSI ne movet wyzywatxsq iz podprogrammy zawer{eniq  ili
  obrabotki prerywaniq. |ta funkciq trebuet raboty USR.

       obra}enie k funkcii:

          I=ICSI (OUTSPC,TYP[,CSTRING][,SWITCH],NUM)

  gde

  OUTSPC - massiw iz 39 slow, prednazna~ennyj dlq  razme}eniq  opisanij
           fajlow w kode RADIX-50;

  TYP    - tablica tipow fajlow w RADIX-50, ispolxzuemyh po  umol~ani`;
           ~etyrehslownyj massiw;

  CSTRING
         - massiw sodervit stroku, zadawaemu` w formate ASCIZ,  kotoru`
           neobhodimo interpretirowatx kak komandu CSI;  stroka  dolvna
           zakan~iwatxsq nulewym bajtom; esli |tot parametr opu}en,  to
           sistema wywodit simwol zaprosa komandy  (*)  na  terminal  i
           prinimaet s nego komandnu` stroku; esli wwod dannyh proizwo-
           ditsq iz koswennogo komandnogo fajla, to obra}enie k  termi-
           nalu  ne  proizwoditsq,  a  ispolxzuetsq  sledu`}aq   stroka
           komandnogo fajla;

  SWITCH - imq massiwa tipa INTEGER*2 s razmernostx` (4,NUM), gde NUM -
           koli~estwo Kl`~ej, opredelennyh w programme;  |tot  parametr
           dolven prisutstwowatx, esli weli~ina, ukazannaq dlq paramet-
           ra NUM, ne rawna nul`;

  NUM    - obqzatelxnyj parametr; ~islo  kl`~ej,  opisannyh  w  massiwe
           SWITCH.

       format OUTSPC (39-|lementnogo massiwa tipa  INTEGER*2),  sledu`-
  }ij:

  1-4 slowa
         - specifikaciq wyhodnogo fajla 1;

  5-e slowo
         - dlina wyhodnogo fajla 1;

  6-9 slowa
         - specifikaciq wyhodnogo fajla 2;

  10-e slowo
         - dlina wyhodnogo fajla 2;

  11-14 slowA
         - specifikaciq wyhodnogo fajla 3;

  15-e slowO
         - dlina wyhodnogo fajla 3;

  16-19 slowA
         - specifikaciq whodnogo fajla 1;


                                 - 231 -




  20-23 slowA
         - specifikaciq whodnogo fajla 2;

  24-27 slowA
         - specifikaciq whodnogo fajla 3;

  28-31 slowA
         - specifikaciq whodnogo fajla 4;

  32-35 slowA
         - specifikaciq whodnogo fajla 5;

  36-39 slowA
         - specifikaciq whodnogo fajla 6.

       tablica tipow fajlow po umol~ani` ispolxzuetsq w slu~aqh  opisa-
  niq fajla w stroke CSI bez ukazaniq tipa:

  TYPE(1)
         - tip fajla po umol~ani` dlq wseh whodnyh fajlow;

  TYPE(2)
         - tip fajla po umol~ani` dlq wyhodnogo fajla 1;

  TYPE(3)
         - tip fajla po umol~ani` dlq wyhodnogo fajla 2;

  TYPE(4)
         - tip fajla po umol~ani` dlq wyhodnogo fajla 3.

       massiw SWITCH imeet sledu`}ij format dlq J-go kl`~a,  opisannogo
  w massiwe:

  SWITCH (1,J)
         - odnosimwolxnoe imq kl`~a w koi-7;

  SWITCH (2,J)
         - ustanawliwaetsq podprogrammoj ICSI w 0,  esli  kl`~  ne  byl
           ukazan w stroke CSI; w 1, esli kl`~ byl ukazan bez zna~eniq;
           w 2, esli kl`~ ukazan so zna~eniem;

  SWITCH(3,J)
         - ustanawliwaetsq w nomer fajla, pri specifikacii kotorogo byl
           postawlen   kl`~;    numeraciq    fajlow    posledowatelxno-
           pozicionnaq, t.e. perwyj whodnoj fajl imeet nomer 4;

  SWITCH(4,J)
         - ustanawliwaetsq w  zna~enie,  ukazannoe  dlq  dannogo  kl`~a
           komandy CSI, esli SWITCH(2,J) rawen dwum;

       prime~aniq:
       1. parametr SWITCH dolven hranitx imena wseh dopustimyh  kl`~ej.
  naprimer, dlq hraneniq 5 imen  kl`~ej  movno  ispolxzowatx  sledu`}u`
  organizaci`:

       INTEGER*2 SW(4,5)
       DATA SW(1,1)/'S'/,SW(1,2)/'M'/,SW(1,3)/'I'/
       DATA SW(1,4)/'L'/,SW(1,5)/'E'/


                                 - 232 -




  esli kakoj-libo kl`~ movet poqwitxsq w komandnoj stroke neskolxko raz
  (ili pri nem movet bytx ukazano neskolxko  zna~enij),  to  |tot  kl`~
  dolven bytx opisan w massiwe SWITCH stolxko raz, skolxko semanti~eski
  razli~nyh wariantow ego poqwleniq su}estwuet.
       2. parametry funkcii ICSI dolvny razme}atxsq w pamqti tak, ~toby
  oni ne perekrywalisx s USR pri swopinge.

       bolee podrobno wyzow i funkcionirowanie interpretatora komandnoj
  stroki opisano w sistemnoj makrokomande .CSISPC.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - neprawilxnaq komandnaq stroka; dannye ne
             wozwra}a`tsq;
       I=2 - w komandnoj stroke wstretilosx neprawilxnoe
             opisanie ustrojstwa;
       I=3 - byl ukazan neprawilxnyj kl`~ ili dannyj kl`~
             byl ukazan bolx{ee ~islo raz, ~em |to razre{eno
             tablicej opisanij kl`~ej SWITCH.

       w primere pokazana organizaciq cikla. programma ciklitsq do  teh
  por, poka na terminale ne budet nabrana dopustimaq komanda.

       primer.

       INTEGER*2 SPEC(39)
       REAL*8 EXT
       DATA EXT/12RDATDATDATDAT/
        . . .
    10 TYPE 99
    99 FORMAT  (' wwesti stroku CSI bez kl`~ej')
       IF(ICSI(SPEC,EXT,,,0).NE. 0) GOTO 10



       8.5. rabota s tajmerom





       8.5.1. podprogramma CVTTIM



       podprogramma CVTTIM preobrazuet wremq,  zapisannoe  w  2-slownom
  wnutrennem formate, w ~asy, minuty, sekundy i doli sekundy.

       obra}enie k podprogramme:

          CALL CVTTIM (TIME,HRS,MIN,SEC,TICK)

  gde

  TIME   - wremq, zapisannoe w 2-slownom wnutrennem forMate, podleva}ee
           preobrazowani`; esli wremq hranitsq w  2-|lementnom  massiwe
           tipa INTEGER*2, to togda  perwyj  |lement  -  star{aq  ~astx

                                 - 233 -




           wremeni,wtoroj |lement - mlad{aq ~astx wremeni;

  HRS    - ~asy; celoe ~islo;

  MIN    - minuty; celoe ~islo;

  SEC    - sekundy; celoe ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow).

       o{ibki otsutstwu`t.

       primer.

       INTEGER*4 ITIME
        . . .
       CALL GTIM(ITIME)     !polu~itx teku}ee wremq sutok
       CALL CVTTIM(ITIME,IHRS,IMIN,ISEC,ITCK)
       IF(IHRS.GE.12.AND.IHRS.LT.13) GOTO 100 !wremq obeda



       8.5.2. podprogramma GTIM



       podprogramma GTIM daet  programmam  dostup  k  teku}emu  wremeni
  sutok. ~islowoe zna~enie, predstawlq`}ee teku}ee wremq, pome}aetsq  w
  dwa slowa i daetsq w wide dolej sekundy,  pro{ed{ih  posle  poluno~i.
  esli w sisteme otsutstwu`t linejnye ~asy, to wydaetsq weli~ina,  raw-
  naq nul`. esli pri zagruzke sistemy ne byla podana  komanda  monitora
  TIME, ukazywa`}aq teku}ee wremq, to wozwrA}aemaq weli~ina budet  raw-
  nqtxsq wremeni, pro{ed{emu s momenta zagruzki sistemy, a  ne  wremeni
  sutok.

       obra}enie k podprogramme:

          CALL GTIM (ITIME)

  gde

  ITIME  - dwuslownyj massiw dlq priema wremeni sutok.

       star{aq ~astx zna~eniq pome}aetsq w perwoe slowo, mlad{aq  ~astx
  - wo wtoroe slowo. podprogramma CVTTIM movet ispolxzowatxsq dlq togo,
  ~toby preobrazowatx wremq, wyravennoe w 2-slownom wnutrennem formate,
  w ~asy, minuty, sekundy i doli sekundy. CVTTIM prowodit  preobrazowa-
  niq,  osnowywaqsx  na  slowe  konfiguracii  monitora   (dlq   50-   i
  60-gercewyh linejnyh ~asow). pri rabote RT11FB(XM) wremq sutok  awto-
  mati~eski sbrasywaetsq w 00.00 posle 24:00 pri wypolnenii  GTIM;  pod
  uprawleniem RT11SJ |ti dejstwiq ne wypolnq`tsq.

       o{ibki otsutstwu`t.

       primer.

            INTEGER*4 JTIME
             . . .

                                 - 234 -




            CALL GTIM(JTIME)



       8.5.3. funkciq ICMKT



       funkciq ICMKT otmenqet odin ili neskolxko zaplanirowannyh  wyzo-
  wow podprogramm zawer{eniq, wypolnennyh podprogrammami ISCHED, ITIMER
  ili MRKT. funkciq podderviwaetsq RT11SJ, esli w RT11SJ pri  generacii
  wkl`~ena wozmovnostx raboty s ~asami.

       obra}enie k funkcii:

          I=ICMKT (ID,TIME)

  gde

  ID     - celoe wyravenie, identifikator otmenqemogo zaprosa; esli ono
           rawno 0, to otmenq`tsq wse zaplanirowannye zaprosy;

  TIME   - imq dwuslownoj zony, w kotoru` monitor  pome}aet  koli~estwo
           wremeni, ostaw{eesq do momenta wyzowa podprogrammy  zawer{e-
           niq, ukazannogo w otmenqemom zaprose.

       bolee podrobno otmena zaplanirowannyh zaprosow opisana w sistem-
  noj makrokomande .CMKT.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;
       I=1 - identifikator (celoe) ne byl rawen 0 i
             ukazannyj zapros ne byl najden.

       primer.

       INTEGER*4 J
        . . .
       CALL ICMKT(0,J)    !otmenitx wse zaplanirowannye
   C                       zaprosy



       8.5.4. funkciq ISCHED



       funkciq ISCHED planiruet wypolnenie  ukazannoj  podprogrammy  na
  qzyke fortran w ka~estwe asinhronnoj podprogrammy zawer{eniq w zadan-
  noe wremq sutok. wypolnenie |togo zaprosa w RT11SJ trebuet  poddervki
  tajmera.

       obra}enie k funkcii:

          I=ISCHED (HRS,MIN,SEC,TICK,AREA,ID,CRTN)

  gde

                                 - 235 -




  HRS    - ~asy; celoe ~islo;

  MIN    - minuty; celoe ~islo;

  SEC    - sekundy; celoe ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow);

  AREA   - 4-slownyj massiw, dlq hraneniq informacii swqzi; |ta zona ne
           dolvna modificirowatxsq programmoj i perekrywatxsq  USR  pri
           swopinge; ona movet bytx ispolxzowana drugimi podprogrammami
           zawer{eniq na qzyke fortran tolxko posle aktiwizacii ukazan-
           noj |tim zaprosom podprogrammy zawer{eniq;

  ID     - identifikator (celoe) zaprosa; |to zna~enie  budet  peredano
           podprogrammme, wypolnenie kotoroj planiruetsq, kak  parametr
           wyzowa;

  CRTN   - imq podprogrammy na qzyke fortran, kotoraq dolvna bytx zapu-
           }ena w ukazannoe wremq sutok; |to imq dolvno bytx ukazano  w
           operatore EXTERNAL programmy, wyzywa`}ej ISCHED; podprogram-
           ma zawer{eniq imeet odin parametr, naprimer:

                 SUBROUTINE ASUB (ID)
                 INTEGER ID

       esli podprogramma zapu}ena, to zna~enie celogo  parametra  budet
  rawno weli~ine, ukazannoj dlq parametra  ID  sootwetstwu`}ego  wyzowa
  ISCHED.

       prime~aniq:
       1. planiruemyj pri pomo}i ISCHED wyzow  podprogrammy  zawer{eniq
  movet pozve otmenqtxsq funkciej ICMKT.
       2. esli sistema zanqta, to  wremq  sutok,  kogda  budet  wyzwana
  podprogramma zawer{eniq, movet okazatxsq pozve trebuemogo.
       3. podprogramma zawer{eniq na qzyke  fortran  movet  planirowatx
  wyzowy samoj sebq, ispolxzuq ISCHED i/ili ITIMER.
       4. funkciq ISCHED trebuet |lement o~eredi, |to dolvno u~itywatx-
  sq pri wypolnenii funkcii IQSET.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo |lementa o~eredi, planirowatx
             zapros nelxzq.

                                 - 236 -




       primer.

          INTEGER*2 LINK(4)   !zona swqzi
          EXTERNAL NOON       !imq wypolnqemoj podprogrammy
           . . .
          I=ISCHED(12,0,0,0,LINK,0,NOON)  !wypolnitx podprog-
   C                                      rammu NOON w
   C                                      12 ~asow
          . . .
          END
          SUBROUTINE NOON(ID)
   C
   C      wypolnenie programmy prekratitsq nasilxno, esli
   C      k |tomu wremeni ne budet zawer{eno zadanie
   C
          STOP  'wynuvdennoe prerywanie - 12 ~asow'
          END



       8.5.5. funkciq ISLEEP



       funkciq ISLEEP priostanawliwaet  wypolnenie  osnownoj  programmy
  zadaniq na zadannoe wremq, t.e. na summu ~asow, minut, sekund i dolej
  sekundy, ukazannu` w wyzowe  ISLEEP.  pri  |tom  wse  zaplanirowannye
  podprogrammy zawer{eniq prodolva`t wyzywatxsq. wypolnenie |togo  zap-
  rosa w RT11SJ trebuet poddervki tajmera monitorom.

       obra}enie k funkcii:

          I=ISLEEP (HRS,MIN,SEC,TICK)

  gde

  HRS    - ~asy; celoe ~islo;

  MIN    - minuty; celoe ~islo;

  SEC    - sekundy; celoe ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow).

       prime~aniq:
       1. funkciq ISLEEP trebuet |lement o~eredi, ~to neobhodimo u~ity-
  watx pri wypolnenii funkcii IQSET.
       2. esli sistema zanqta, to dejstwitelxnoe wremq ostanowa  osnow-
  noj programmy movet bytx bolx{e, ~em zadano.

       rezulxtaty funkcii:

      I=0 - normalxnyj wyhod;

      I=1 - net swobodnogo |lementa o~eredi.

       primer.

                                 - 237 -




           CALL  IQSET (2)
            . . .
           CALL  ISLEEP (0,0,0,4)



       8.5.6. funkciq ITIMER



       funkciq ITIMER planiruet  wypolnenie  zadannoj  podprogrammy  na
  qzyke fortran w ka~estwe asinhronnoj podprogrammy zawer{eniq po iste-
  ~enii zadannogo interwala wremeni. |ta podprogramma podderviwaetsq  w
  RT11SJ, esli obespe~enie tajmera wkl`~eno  w  monitor  pri  generacii
  sistemy.

       obra}enie k funkcii:

          I=ITIMER (HRS,MIN,SEC,TICK,AREA,ID,CRTN)

  gde

  HRS    - ~asy; celoe ~islo;

  MIN    - minuty; celoe ~islo;

  SEC    - sekundy; celoe ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow);

  AREA   - 4-slownyj massiw dlq informacii swqzi; |tot massiw ne dolven
           modificirowatxsq programmoj  i  perekrywatxsq  pri  swopinge
           USR; dannyj massiw movet  ispolxzowatxsq  drugimi  funkciqmi
           zawer{eniq tolxko posle aktiwizacii ukazannoj podprogrammy;

  ID     - identifikator (celoe)  zaprosa;  peredaetsq  zaplanirowannoj
           podprogramme, kak parametr wyzowa; identifikator zaprosa;

  CRTN   - imq podprogrammy na  qzyke  fortran  kotoraq  wyzywaetsq  po
           iste~enii zadannogo interwala wremeni; |to imq dolvno ukazy-
           watxsq w operatore EXTERNAL programmy, obra}a`}ejsq  k  ITI-
           MER; podprogramma zawer{eniq na  qzyke  fortran  imeet  odin
           parametr, naprimer:

                 SUBROUTINE PROGR (ID)
                 INTEGER ID

       posle wyzowa podprogrammy zawer{eniq zna~enie  celogo  parametra
  budet rawno zna~eni`, ukazannomu dlq  parametra  ID  sootwetstwu`}ego
  wyzowa ITIMER.

       prime~aniq:
       1. zaplanirowannyj pri pomo}i ITIMER wyzow podprogrammy zawer{e-
  niq movet bytx otmenen wyzowom funkcii ICMKT.
       2. esli sistema zanqta, to dejstwitelxnyj interwal  wremeni,  po
  iste~enii kotorogo  wyzywaetsq  podprogramma  zawer{eniq  movet  bytx
  bolx{e trebuemogo.
       3. podprogrammy na qzyke fortran mogut planirowatx wyzowy  samih

                                 - 238 -




  sebq, ispolxzuq ISCHED ili ITIMER.
       4. funkciq ITIMER trebuet |lement o~eredi, |to dolvno u~itywatx-
  sq pri wypolnenii funkcii IQSET.

       dopolnitelxnaq informaciq movet bytx polu~ena iz opisaniq makro-
  komandy .MRKT (sm. p. 7.5.4).

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo |lementa o~eredi, planirowatx
             zapros nelxzq.

       primer.

         INTEGER*2 AREA(4)
         EXTERNAL WATCHD
   C
   C   esli programma
   C   ne wyzowet funkci` ICMKT ~erez 12 minut
   C   posle wyzowa funkcii ITIMER, to budet
   C   wyzwana podprogramma zawer{eniq WATCHD s parametrom
   C   ID, rawnym 3
   C
         CALL ITIMER(0,12,0,0,aRea,3,WATCHD)
         . . .
         CALL ICMKT(3,AREA)
         . . .
         END
         SUBROUTINE WATCHD(ID)
   C
   C   |ta podprogramma wyzywaetsq ~erez 12 minut
   C
         . . .
         RETURN
         END





       8.5.7. funkciq ITWAIT (RT11FB ili RT11XM)



       funkciq ITWAIT priostanawliwaet  wypolnenie  osnownoj  programmy
  zadaniq na zadannyj interwal wremeni. wse programmy  zawer{eniq  pro-
  dolva`t wyzywatxsq.

       obra}enie k funkcii:

          I=ITWAIT (ITIME)

  gde

  ITIME  - interwal wremeni, predstawlennyj ~islom w 2-slownom wnutren-
           nem formate: perwoe slowo - star{aq ~astx zna~eniq  wremeni,
           wtoroe slowo - mlad{aq ~astx zna~eniq wremeni.

                                 - 239 -




       prime~aniq:
       1. funkciq ITWAIT trebuet |lement o~eredi, |to dolvno u~itywatx-
  sq pri wypolnenii funkcii IQSET.
       2. esli sistema zanqta, to dejstwitelxnyj interwal  wremeni,  na
  kotoryj zaderviwaetsq wypolnenie, movet bytx bolx{e zadannogo.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo |lementa o~eredi.

       primer.

         INTEGER*2 TIME(2)
         . . .
         CALL ITWAIT(TIME)    ! vdatx w te~enie zadannogo
   C                          wremeni TIME



       8.5.8. funkciq IUNTIL (RT11FB ili RT11XM)



       funkciq IUNTIL priostanawliwaet  wypolnenie  osnownoj  programmy
  zadaniq do zadannogo wremeni sutok. wse podprogrammy zawer{eniq  pro-
  dolva`t wyzywatxsq.

       obra}enie k funkcii:

          I=IUNTIL (HRS,MIN,SEC,TICK)

  gde





           ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow).

       prime~aniq:
       1. funkciq IUNTIL trebuet |lement o~eredi, |to dolvno u~itywatx-
  sq pri wypolnenii funkcii IQSET.
       2. esli sistema zanqta, to  dejstwitelxnoe  wremq  sutok,  kogda
  wozobnowitsq wypolnenie programmy, movet bytx pozve trebuemogo.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo |lementa o~eredi.

       primer.

                                 - 240 -




   C     sdelatx pereryw
         CALL IUNTIL(13,0,0,0)   !wozobnowitx rabotu w ~as dnq



       8.5.9. podprogramma JTIME



       podprogramma JTIME preobrazuet ukazannoe wremq wo  wremq,  zapi-
  sannoe wo wnutrennem formate.

       obra}enie k podprogramme:

          CALL JTIME (HRS,MIN,SEC,TICK,TIME)

  gde

  HRS    - ~asy; celoe ~islo;

  MIN    - minuty; celoe ~islo;

  SEC    - sekundy; celoe ~islo;

  TICK   - doli sekundy (1/60 sekundy dlq 60-gercewyh  linejnyh  ~asow;
           1/50 sekundy dlq 50-gercewyh linejnyh ~asow);

  TIME   - 2-slownyj massiw,  prednazna~ennyj  dlq  zapisi  wremeni  wo
           wnutrennem formate: perwoe slowo - star{aq  ~astx  zapisi  o
           wremeni, wtoroe slowo - mlad{aq ~astx.

       o{ibki otsutstwu`t.

       primer.

         INTEGER*4 J1
   C
   C   preobrazowatx 3 ~asa, 7 min, 23 sekundy w
   C   celu` weli~inu tipa INTEGER*4
   C
         CALL JTIME(3,7,23,0,J1)
         CALL JJCVT(J1)



       8.5.10. funkciq MRKT



       funkciq MRKT proizwodit planirowanie wyzowa podprogrammy  zawer-
  {eniq, napisannoj na qzyke makroassemblera,  po  iste~enii  zadannogo
  interwala. wypolnenie |toj funkcii w RT11SJ trebuet sredstw poddervki
  tajmera.

       obra}enie k funkcii:

          I=MRKT (ID,CRTN,TIME)

  gde

                                 - 241 -




  ID     - identifikator (celoe ~islo), kotoryj budet peredan planirue-
           moj podprogramme zawer{eniq;

  CRTN   - imq makroassemblernoj podprogrammy zawer{eniq, kotoraq wyzy-
           waetsq po iste~enii zadannogo wremennogo interwala; |to  imq
           dolvno ukazywatxsq operatorom EXTERNAL w programme na  qzyke
           fortran, wyzywa`}ej MRKT;

  TIME   - interwal wremeni, wyravennyj w 2-slownom wnutrennem formate;
           po iste~enii |togo interwala wyzowetsq podprogramma zawer{e-
           niq;  esli  wremq  zapisano  w  2-|lementnyj   massiw   tipa
           INTEGER*2, to perwyj |lement - star{aq ~astx zna~eniq wreme-
           ni, wtoroj |lement - mlad{aq ~astx zna~eniq wremeni.

       prime~aniq:
       1. funkciq MRKT trebuet |lement o~eredi, |to  neobhodimo  u~ity-
  watx pri wypolnenii funkcii IQSET.
       2. esli sistema zanqta, to wremennoj interwal, kotoryj  prohodit
  do na~ala wypolneniq podprogrammy zawer{eniq, movet bytx bolx{e  tre-
  buemogo.

       bolee podrobno planirowanie  podprogramm  zawer{eniq  opisano  w
  sistemnoj makrokomande .MRKT.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo |lementa o~eredi, newozmovno
             zaplanirowatx wypolnenie zaprosa.

       primer.

       INTEGER*2 TINT(2)
       EXTERNAL ARTN
        . . .
       CALL MRKT(4,ARTN,TINT)



       8.5.11. funkciq SECNDS



       funkciq SECNDS opredelqet teku}ee sistemnoe wremq w sekundah,  i
  wy~itaet iz nego ~islo, zadannoe argumentom  wyzowa.  funkciq  SECNDS
  movet ispolxzowatxsq dlq pods~eta istek{ego wremeni. parametr funkcii
  dolven bytx tipa REAL*4.

       obra}enie k funkcii:

          A=SECNDS (ATIME)

  gde

  ATIME  - peremennaq tipa REAL*4 (konstanta ili  wyravenie),  zna~enie
           kotoroj wy~itaetsq iz teku}ego wremeni sutok.

                                 - 242 -




       pRIME^ANIE. |ta funkciq wypolnqet arifmeti~eskie operacii s pla-
  wa`}ej zapqtoj. teku}ee wremq takve movno wy~islitx, ispolxzuq  wyzow
  GTIM i funkcii obrabotki weli~in tipa INTEGER*4.

       rezulxtaty funkcii:

      a=NNNNNN - weli~ina tipa REAL*4.

       primer.

         T1=SECNDS(0.)
   C
   C   s`da pomestitx programmu, dlq kotoroj neobhodimo
   C   wy~islitx wremq raboty
   C
         DELTA=SECNDS(T1) !DELTA = istek{ee wremq w sekundah




       8.5.12. podprogramma TIMASC



       podprogramma TIMASC preobrazuet wremq,  wyravennoe  w  2-slownom
  wnutrennem formate i predstawlqet ego w massiwe iz 8-mi  znakow  koda
  koi-7 w sledu`}ej forme:

               ~~:mm:ss

   gde  ~~ - dwuzna~noe predstawlenie ~asow;
        mm - dwuzna~noe predstawlenie minut;
        ss - dwuzna~noe predstawlenie sekund.

       obra}enie k podprogramme:

          CALL TIMASC (ITIME,STRING)

  gde

  ITIME  - wremq, wyravennoe w 2-slownom  wnutrennem  formate,  kotoroe
           neobhodimo preobrazowatx;  perwoe  slowo  parametra  "ITIME"
           predstawlqet star{u` ~astx wremeni, wtoroe slowo  -  mlad{u`
           ~astx;

  STRING - 8-|lementnyj massiw, prinima`}ij zapisx w koi-7.

       o{ibki otsutstwu`t.

       w primere opredelqetsq koli~estwo wremeni do 17.00 i  raspe~aty-
  waetsq rezulxtat.

       primer.

       INTEGER*4 J1,J2,J3
       LOGICAL*1 STRNG(8)
        . . .
       CALL JTIME(17,0,0,0,J1)
       CALL GTIM(J2)

                                 - 243 -




       CALL JJCVT(J1)
       CALL JJCVT(J2)
       CALL JSUB(J1,J2,J3)
       CALL JJCVT(J3)
       CALL TIMASC(J3,STRNG)
       TYPE 99,STRNG
   99  FORMAT(' wremq ',8A1,' do 17.00 ')



       8.5.13. podprogramma TIME



       podprogramma TIME predstawlqet teku}ee sistemnoe wremq  sutok  w
  wide 8-simwolxnoj stroki znakow koi-7 w forme:

                ~~:mm:ss

  gde
       ~~ - 2-zna~noe predstawlenie ~asow;
       mm - 2-zna~noe predstawlenie minut;
       ss - 2-zna~noe predstawlenie sekund.

       obra}enie k podprogramme:

          CALL TIME (STRING)

  gde

  STRING - 8-|lementnyj massiw, prinima`}ij zapisx w koi-7.


       pRIME^ANIE. ispolxzu`tsq  24-~asowye  ~asy.  naprimer,  ~as  dnq
  predstawlqetsq kak 13:00:00.

       o{ibki otsutstwu`t.

       primer.

         LOGICAL*1 STRNG(8)
         . . .
         CALL TIME(STRNG)
         TYPE 99,(STRNG(I),I=1,8)
   99    FORMAT(' wremq: ',8A1)



       8.6. funkcii ob}ego nazna~eniq



                                 - 244 -




       8.6.1. podprogramma CHAIN



       podprogramma CHAIN pozwolqet fonowoj programme (libo programme w
  M1/M4-monitore) wyzwatx drugu` fonowu` programmu,  peredawaq  ej  pri
  |tom ukazannu` informaci`. podprogramma CHAIN ne movet  bytx  wyzwana
  iz podprogrammy zawer{eniq ili obrabotki prerywaniq.  oblastx  dannyh
  ispolnq`}ej sistemy fortrana ne sohranqetsq pri takoj pereda~e upraw-
  leniq. |ta informaciq dolvna bytx sformirowana wyzwannoj programmoj.

       podprogramma CHAIN ne zakrywaet kakie-libo logi~eskie ustrojstwa
  ispolnq`}ej sistemy fortran.  pri  ispolxzowanii  podprogrammy  CHAIN
  polxzowatelx  dolven  predwaritelxno  zakrytx  logi~eskie  ustrojstwa
  wyzOwami podprogrammy CLOSE. podprogramma, ukazannaq  w  obra}enii  k
  bibliote~noj programmame fortrana USEREX, ne  budet  wypolnena,  esli
  wypolnqetsq podprogramma CHAIN.

       obra}enie k podprogramme:

          CALL CHAIN (DBLK,VAR,WCNT)

  gde

  DBLK   - 4-slownaq  specifikaciq   fajla   wyzywaemoj   programmy   w
           RADIX-50;

  VAR    - perwaq peremennaq posledowatelxnosti peremennyh s posledowa-
           telxno uweli~iwa`}imisq adresami operatiwnoj pamqti, kotorye
           dolvny peredawatxsq w  wyzywaemu`  programmu  w  specialxnoj
           oblasti operatiwnoj pamqti (absol`tnye q~ejki  510  -  777);
           opisywaemaq posledowatelxnostx peremennyh movet bytx  preds-
           tawlena odnomernym massiwom ili blokom  COMMON  (ili  ~astx`
           bloka COMMON) i dolvna na~inatxsq po ~etnomu adresu (na gra-
           nice slowa).

  WCNT   - s~et~ik slow (ne bolee 60), ukazywa`}ij ~islo slow  (na~inaq
           s perwoj peremennoj), kotoroe dolvno bytx peredano  wyzywae-
           moj programme; esli informaciq ne  peredaetsq,  to  parametr
           dolven bytx rawen nul`.

       esli razmer oblasti operatiwnoj pamqti, ~erez  kotoru`  podprog-
  ramma CHAIN peredaet informaci` w wyzywaemu` programmu, nedostato~en,
  on movet bytx uweli~en ukazaniem kl`~a /B  w  komande  CSI  sistemnoj
  programme LINK ili /BOTTOM w komande monitora LINK kak dlq programmy,
  wypolnq`}ej wyzow CHAIN, tak i dlq programmy, prinima`}ej uprawlenie.

       obra}enie k peredannym dannym movet  bytx  osu}estwleno  wyzowom
  podprogrammy RCHAIN.

       bolee polnaq informaciq  predstawlena  w  opisanii  makrokomandy
  .CHAIN (sm. p. 7.6.1).

       o{ibki otsutstwu`t.

       w primere pokazywaet  pereda~u  uprawleniq  programme  PROG.SAV,
  nahodq}ejsq na ustrojstwe RK1, s pereda~ej pri |tom zna~enij peremen-
  nyh.


                                 - 245 -




       primer.

         REAL*4 PROGNM(2)         !opisatelx w RADIX-50
   C                               imeni programmy
         COMMON /BLK1/ A,B,C,D    !peredawaemye dannye
         DATA PROGNM/6RRK1PRO,6RG  SAV/
         . . .
         CALL CHAIN(PROGNM,A,8)   !zagruzitx RK1:PROG.SAV
   C                               i peredatx ej uprawlenie



       8.6.2. podprogramma DEVICE (RT11FB ili RT11XM)



       podprogramma DEVICE pozwolqet polxzowatel` ustanawliwatx  spisok
  adresow, kotorye  dolvny  bytx  zagruveny  ukazannymi  weli~inami  po
  zawer{enii programmy. esli zadanie  zawer{ilosx  ili  ono  prekra}eno
  komandoj <CTRL/C>, wwedennoj s terminala,  to  spisok  obrabatywaetsq
  operacionnoj sistemoj i w ukazannye w nem q~ejki  zapisywa`tsq  soot-
  wetstwu`}ie zna~eniq.

       |ta podprogramma prednazna~ena dlq obespe~eniq wozmovnosti prog-
  rammam polxzowatelq zagruvatx registry ustrojstw neobhodimymi weli~i-
  nami. w ~astnosti, ona ispolxzuetsq  dlq  sbrosa  bita,  razre{a`}ego
  prerywanie ot ustrojstwa posle prekra}eniq raboty programmy, obsluvi-
  wa`}ej ustrojstwo.

       w kavdyj moment wremeni movet ispolxzowatxsq tolxko odin  spisok
  adresow sledowatelxno, esli zadaetsq neskolxko  wyzowow  podprogrammy
  DEVICE, to obrabotka wypolnqetsq tolxko  dlq  spiska,  zadannogo  pri
  poslednem wyzowe. posle wypolneniq podprogrammy DEVICE spisok ne dol-
  ven modificirowatxsq. spisok ne dolven pome}atxsq w oblastx  perekry-
  tij ili w oblastx swopinga USR.

       wtoroj argument wyzowa (LINK) obespe~iwaet poddervku  swqzannogo
  spiska tablic. argument LINK qwlqetsq ne obqzatelxnym. esli  on  uka-
  zan, to perwoe slowo spiska budet obrabatywatxsq kak slowo swqzi.

       obra}enie k podprogramme:

          CALL DEVICE (ILIST[,LINK])

  gde

  ILIST  - massiw celogo tipa,  iz  dwuhslownyh  |lementow,  soderva}ih
           informaci` "adres/weli~ina" (t.e. odno slowo - adres i  odno
           slowo - zna~enie, kotoroe  dolvno  bytx  zapisano  po  |tomu
           adresu), i  zakan~iwa`}u`sq  nulewym  slowom;  po  okon~anii
           wypolneniq programmy kavdaq zadannaq weli~ina  pome}aetsq  w
           sootwetstwu`}ij adres;

  LINK   - neobqzatelxnyj parametr, prinima`}ij l`boe zna~enie;  ukazy-
           waet, ~to ispolxzuetsq swqzannyj spisok tablic; esli ispolx-
           zuetsq format swqzannogo spiska,  tO  perwoe  slowo  massiwa
           qwlqetsq ukazatelem swqzannogo spiska.

       dopolnitelxnaq informaciq po zagruzke zna~enij w  registry  ust-

                                 - 246 -




  rojstw dana w opisanii makrokomandy .DEVICE (sm. p. 7.6.7).

       o{ibki otsutstwu`t.

       primer.

       INTEGER*2 IUSO(3)     !massiw opisaniq ustrojstwa
       DATA IUSO(1)/"167770/ !adres registra ustrojstwa
       DATA IUSO(2)/0/       !zagruvaemoe zna~enie
       DATA IUSO(3)/0/       !konec spiska
       CALL DEVICE (IUSO)




       8.6.3. podprogrammy GTJB/IGTJB



       podprogramma GTJB peredaet programme polxzowatelq nekotoru` sis-
  temnu` informaci` o zadanii.

       obra}enie k podprogramme GTJB:

          CALL GTJB (ADDR[,JOBBLK[,I]])
        ili
          I = GTJB (ADDR[,JOBBLK])

       obra}enie k podprogramme IGTJB:

          CALL IGTJB (ADDR[,JOBBLK[,I]])
        ili
          I = IGTJB (ADDR[,JOBBLK])

  gde

  ADDR   - massiw iz 8 ili 12 slow, prednazna~ennyj dlq priema paramet-
           row zadaniq;

  JOBBLK - ukazatelx na trehslownoe imq  zadaniq  w  koi-7,  o  kotorom
           dolvny bytx polu~eny dannye; esli trebuetsq tolxko  wosxmis-
           lownyj blok informacii, |tot argument ne dolven ukazywatxsq;

  I      - sodervit kod o{ibki, esli ukazannoe zadanie ne wypolnqetsq w
           sisteme.

       ADDR, rassmatriwaetsq w wide massiwa  tipa  INTEGER*2,  i  imeet
  sledu`}ij format:

  1-e slowo
         - nomer zadaniq =  urowenx  prioriteta*2  (0-fonowoe  zadanie,
           2-operatiwnoe zadanie w RT11FB(XM); 0-fonowoe zadanie, 2, 4,
           6, 10, 12, 14-sistemnye zadaniq,  operatiwnoe  zadanie-16  w
           monitorah so sredstwami sistemnyh zadanij;  w  RT11SJ  nomer
           zadaniq - 0);

  2-e slowo
         - werhnqq granica ispolxzuemoj  pamqti(poslednqq  q~ejka  pl`s
           2);

                                 - 247 -




  3-e slowo
         - nivnqq granica ispolxzuemoj pamqti(perwaq q~ejka programmy);

  4-e slowo
         - ukazatelx na na~alo oblasti kanalow wwoda/wywoda;

  5-e slowo
         - adres sme{annoj oblasti zadaniq w RT11FB(XM); w RT11SJ rawno
           nul`;

  6-e slowo
         - mlad{ij bajt: nomer terminala, wydelennogo zadani` pri  zag-
           ruzke (tolxko pri nali~ii mnogoterminalxnoj poddervki); nulx
           w RT11SJ i w odnoterminalxnyh monitorah;

  7-e slowo
         - wirtualxnaq werhnqq granica dlq zadanij, sozdannyh s ispolx-
           zowaniem kl`~a /V komponow}ika (tolxko dlq RT11XM);  nulx  w
           RT11SJ i RT11FB, i esli kl`~ /V komponow}ika ne primenqlsq;

  8-9 slowo
         - zarezerwirowany dlq dalxnej{ego ispolxzowaniq.

  10-12 slowo
         - logi~eskoe imq zadaniq w koi-7 (tolxko dlq monitorow podder-
           viwa`}ih sistemnye zadaniq).

       bolee podrobno pereda~A parametrow opisywaetsq w sistemnoj  mak-
  rokomande .GTJB (sm. p. 7.6.12).

       esli pri wyzowe byl ukazan tolxko odin argument, to w  wyzwannu`
  programmu pereda`tsq tolxko perwye wosemx slow informacionnogo bloka.
  naprimer:

          INTEGER IJPARM (8)
          CALL GTJB (IJPARM)
          I = IGTJB (IJPARM)

  dlq polu~eniq informacionnogo bloka iz 12 slow neobhodimo ukazatx  po
  krajnej mere zapqtu` posle perwogo argumenta. naprimer:

          INTEGER IJPARM (12)
          CALL GTJB (IJPARM,)
          I = IGTJB (IJPARM,)

       rezulxtaty:

          I=0  - oby~nyj wyhod iz podprogrammy;

          I=-1 - w dannyj moment ukazannoe
                 zadanie ne wypolnqetsq.

       primer.

   C   primer prowerki su}estwowaniq operatiwnogo
   C   zadaniq w sisteme s monitorom so sredstwami
   C   sistemnyh zadanij
   C
          DIMENSION JPAR(12)

                                 - 248 -




            . . .
          IF (IGTJB(JAR, 'F').NE.0) STOP
        *  ' net operatiwnogo zadaniq '



       8.6.4. funkciq IDSTAT



       funkciq IDSTAT ispolxzuetsq dlq  polu~eniq  informacii  ob  ust-
  rojstwe. funkciq IDSTAT trebuet dejstwij USR i ne movet wyzywatxsq iz
  podprogrammy zawer{eniq ili obrabotki prerywaniq.

       obra}enie k funkcii:

          I=IDSTAT (DEVNAM,CBLK)

  gde

  DEVNAM - imq ustrojstwa w RADIX-50;

  CBLK   - 4-slownyj massiw, dlq polu~eniq informacii ob ustrojstwe.

       massiw iz ~etyreh |lementow tipa INTEGER*2, imeet sledu`}ij for-
  mat:

  1-e slowo
         - slowo sostoqniq ustrojstwa;

  2-e slowo
         - razmer drajwera (bajty);

  3-e slowo
         - to~ka whoda drajwera (nenulewoe sodervimoe |togo slowa ozna-
           ~aet, ~to drajwer nahoditsq w operatiwnoj pamqti);

  4-e slowo
         - razmer ustrojstwa (w blokah po 256  slow)  dlq  ustrojstw  s
           blo~noj strukturoj; sodervimoe |togo slowa  rawno  nul`  dlq
           ustrojstw s posledowatelxnym dostupom.


       pRIME^ANIE. parametry funkcii IDSTAT dolvny razme}atxsq w pamqti
  tak, ~toby oni ne perekrywalisx pri swopinge USR.

       funkciq IDSTAT i}et w tablicah monitora ukazannoe ustrojstwo  po
  ego imeni i, esli ono najdeno, zapolnqet ~etyre slowa  bloka  sostoq-
  niq.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ustrojstwo ne najdeno w tablicah monitora.

       w priwedennom primere opredelqetsq, nahoditsq  li  drajwer  ust-
  rojstwa pe~ati w operatiwnoj pamqti. esli net, to programma  ostanaw-
  liwaetsq i pe~ataet soob}enie o tom, ~to dolven bytx zagruven ukazan-

                                 - 249 -




  nyj drajwer.

       primer.

         INTEGER*2 CBLK(4)
         DATA IDNAM /3RLP /
         DATA CBLK /4*0/
         CALL IDSTAT(IDNAM,CBLK)
         IF(CBLK(3).EQ.0) STOP'zagruzitx drajwer LP: i '
       * ' perezapustitx zadanie'



       8.6.5. funkciq IFETCH



       funkciq IFETCH zagruvaet s sistemnogo ustrojstwa  w  operatiwnu`
  pamqtx drajwer ukazannogo ustrojstwa, delaq |to ustrojstwo  dostupnym
  dlq operacij wwoda/wywoda. drajwer zagruvaetsq w swobodnu` zonu pamq-
  ti, uprawlqemu` ispolnq`}ej sistemoj fortran. esli drajwer  zagruven,
  to on ne movet bytx oswobovden i pamqtx, w kotoroj on  nahoditsq,  ne
  movet bytx powtorno ispolxzowana dlq  drugih  celej.  funkci`  IFETCH
  nelxzq wyzywatx iz podprogrammy zawer{eniq ili obrabotki  prerywaniq,
  t.k. ona trebuet dejstwij USR.

       obra}enie k funkcii:

          I=IFETCH (DEVNAM)

  gde

  DEVNAM - odnoslownoe imq ustrojstwa w RADIX-50, dlq kotorogo  neobho-
           dim drajwer; |tot parametr movet bytx perwym slowom opisaniq
           whodnogo ili wyhodnogo fajla, generiruemogo  funkciej  ICSI;
           |tot parametr dolven raspolagatxsq w pamqti tak, ~toby on ne
           popadal w oblastx swopinga USR.

       bolee podrobno zagruzka drajwera w operatiwnu` pamqtx opisywaet-
  sq w sistemnoj makrokomande .FETCH.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - ukazannoe ustrojstwo ne su}estwuet;
       I=2 - w pamqti net mesta  dlq  zagruzki
             drajwera;
       I=3 - na sistemnom ustrojstwe ne  su}estwuet  drajwer
             ukazannogo ustrojstwa.

       primer pokazywaet zagruzku  w  pamqtx  drajwera  RK.  wypolnenie
  programmy prekra}aetsq, esli drajwer ne movet bytx zagruven.

       primer.

         REAL*4 IDNAM
         DATA IDNAM /3RRK /
         . . .

                                 - 250 -




         IF(IFETCH(IDNAM).NE.0) STOP  !neustranimaq o{ibka
   C                                   pri zagruzke drajwera



       8.6.6. funkciq IQSET



       funkciq IQSET ispolxzuetsq dlq uweli~eniq ~isla  dostupnyh  |le-
  mentow o~eredi. pamqtx pod |ti |lementy wydelqetsq w  pamqti,  upraw-
  lqemoj ispolnq`}ej sistemoj fortrana. funkci` IQSET  nelxzq  wyzywatx
  iz podprogrammy zawer{eniq ili obsluviwaniq prerywaniq.

       obra}enie k funkcii:

          I=IQSET (QLENG[,AREA])

  gde

  QLENG  - koli~estwo (cEloe) |lementow, kotoroe dobawlqetsq k o~eredi;
           |tot parametr dolven pome}atxsq w  operatiwnoj  pamqti  tak,
           ~toby on ne perekrywalsq USR pri swopinge;

  AREA   - pamqtx, wydelqemaq wyzywa`}ej  programmoj;  pri  rabote  pod
           uprawleniem RT11SJ(FB) neobhodimo sleditx, ~toby |ta  pamqtx
           ne okazalasx w oblasti swopinga USR; esli |tot  argument  ne
           ukazan pri wyzowe, pamqtx wydelqetsq  w  rabo~ej  oblasti  i
           ispolnq`}ej sistemy fortrana.

       wse operacii wwoda/wywoda sistemy RT11  wypolnq`tsq  posredstwom
  centralizowannoj sistemy uprawleniq  o~eredx`.  esli  potok  zaprosow
  wwoda-wywoda o~enx welik i net swobodnyh |lementow o~eredi, to  prog-
  ramma, posyla`}aq zaprosy na wwod/wywod, movet bytx priostanowlena do
  teh por, poka ne poqwitsq swobodnyj |lement o~eredi. drugoe zadanie w
  RT11FB i RT11XM movet wypolnqtxsq, poka perwaq programma  vdet  oswo-
  bovdeniq |lementow o~eredi. esli funkciq IQSET ispolxzuetsq w  opera-
  tiwnoj programme, to neobhodimo modificirowatx komandu monitora FRUN,
  ~toby wydelitx mesto dlq |lementow o~eredi.

       neobhodimo priderviwatxsq ob}ego prawila: kavdaq programma dolv-
  na imetx |lementow o~eredi  na  odin  bolx{e  ob}ego  ~isla  zaprosow
  wwoda/wywoda i wremennyh  zaprosow,  kotorye  budut  aktiwizirowatxsq
  odnowremenno. funkcii po obsluviwani` tajmera,  takie  kak  ITWAIT  i
  MRKT, takve ispolxzu`t |lementy o~eredi, ~to dolvno  u~itywatxsq  pri
  wydelenii |lementow o~eredi dlq programmy. zametim ~to,  esli  wypol-
  nqetsq sinhronnyj wwod/wywod (t.e. wypolnq`tsq funkcii IREADW, IWRITW
  i t.d.), a funkcii po obsluviwani` tajmera ne wypolnq`tsq, to ne sle-
  duet wydelqtx dopolnitelxnye |lementy  o~eredi.  ispolnq`}aq  sistema
  fortrana awtomati~eski predostawlqet ~etyre |lementa o~eredi.

       nive pere~isleny funkcii, rabota kotoryh trebuet |lement  o~ere-
  di:

          IRCVD/IRCVDC/IRCVDF/IRCVDW
          IREAD/IREADC/IREADF/IREADW
          ISCHED
          ISDAT/ISDATC/ISDATF/ISDATW
          ISLEEP

                                 - 251 -




          ISPFM/ISPFNC/ISPFNF/ISPFNW
          ITIMER
          ITWAIT
          IUNTIL
          IWRITE/IWRITC/IWRITF/IWRITW
          MRKT
          MWAIT

  dopolnitelxnaq informaciq po ras{ireni`  o~eredi  dana  pri  opisanii
  sistemnoj makrokomandy .QSET (sm. p. 7.6.22).

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net swobodnogo  mesta  dlq
             dopolnitelxnyh |lementow o~eredi; wyde-
             lenie |lementow ne proizwodilosx.

       primer.

        IF(IQSET(5).NE.0) STOP      !dlq |lementow o~eredi
  C                                  nedostato~no pamqti



       8.6.7. funkciq ITLOCK (RT11FB ili RT11XM)



       funkciq ITLOCK prednazna~ena dlq togo, ~toby  popytatxsq  zakre-
  pitx USR za zadaniem. ona analogi~na funkcii LOCK w  tom,  ~to,  esli
  USR ne zanqta drugim zadaniem, USR stanowitsq rezidentnoj  i  zakrep-
  lqetsq za zadaniem. odnako,  pri  ispolxzowanii  LOCK,  esli  zadanie
  pytaetsq zakrepitx za soboj  USR,  w  to  wremq  kak  drugoe  zadanie
  ispolxzuet ee, zapra{iwa`}ee zadanie priostanawliwaetsq do  teh  por,
  poka USR ne oswoboditsq. pri wyzowe funkcii ITLOCK, esli USR  ispolx-
  zuetsq drugim zadaniem, uprawlenie nemedlenno wozwra}aetsq w  wyzwaw-
  {u` programmu, a zna~enie funkcii ukazywaet na neuda~u popytki. funk-
  ci` ITLOCK nelxzq wyzywatx iz podprogramm  zawer{eniq  ili  obrabotki
  prerywaniq. bolee podrobnaq informaciq o dejstwiqh sistemy po zaprosu
  ITLOCK dana w opisanii sistemnoj makrokomandy  .TLOCK  (sm.  podpunkt
  7.6.18.2).

       obra}enie k funkcii:

          I=ITLOCK ()

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - USR ispolxzuetsq drugim zadaniem.

       primer.

         IF (ITLOCK().NE.0) GOTO 10 !perehod k operatoru 100,
   C                                 esli USR zanqta

                                 - 252 -




       8.6.8. podprogramma LOCK



       podprogramma LOCK wyzywaetsq dlq togo, ~toby sdelatx  USR  rezi-
  dentnoj i zakrepitx ee za zadaniem  dlq  wypolneniq  serii  zaprosow,
  trebu`}ih ot sistemy raboty s katalogowymi strukturami i fajlami. USR
  predstawlqet soboj serwisnu` programmu, wypolnq`}u` neobhodimye  ope-
  racii nad katalogami i funkcii uprawleniq fajlami.

       esli wypolneny wse uslowiq, wyzywa`}ie swoping, to  ~astx  prog-
  rammy polxzowatelq zapisywaetsq na disk w fajl SWAP.SYS i USR  zagru-
  vaetsq w operatiwnu` pamqtx. w slu~ae esli USR uve nahoditsq w  pamq-
  ti, to swoping ne proishodit. USR ne oswobovdaetsq do teh  por,  poka
  ne budet wyzwana podprogramma UNLOCK (otmetim, ~to w RT11FB wyzow CSI
  takve wypolnqet neqwnyj UNLOCK). esli w programme polxzowatelq  ~asto
  ispolxzuetsq USR, to celesoobrazno sdelatx USR rezidentnoj,  zakrepiw
  ee za zadaniem, ~toby ne terqtx wremq na swoping, wypolnitx wse  ope-
  racii, swqzannye s wyzowom USR, a zatem oswoboditx USR  podprogrammoj
  UNLOCK.

       pod uprawleniem RT11FB(XM) podprogramma LOCK  zapre}aet  drugomu
  zadani` ispolxzowatx USR. takim obrazom, USR dolvna  zakreplqtxsq  za
  zadaniem tolxko na neobhodimoe wremq.


       pRIME^ANIE. esli zadanie wypolnit podprogrammu LOCK,  USR  movet
  statx nedostupnym drugim zadaniqm na zna~itelxnyj period wremeni. USR
  ne powtorno-whodima i ne movet  ispolxzowatxsq  odnowremenno  raznymi
  zadaniqmi. drugie zadaniq, trebu`}ie USR w moment, kogda ona  zanqta,
  dolvny vdatx swoej o~eredi. |tot fakt neobhodimo u~itywatx  w  siste-
  mah, ispolxzu`}ih konkuriru`}ie operatiwnye i fonowye zadaniq, a oso-
  benno - pri ispolxzowanii magnitnyh lent i/ili kasset.

       USR, dlq wypolneniq operacij nad fajlami na magnitnyh  lentah  i
  kassetah, neobhodim posledowatelxnyj poisk. po|tomu wo  wremq  poiska
  movno zablokirowatx operatiwnoe zadanie  na  dlitelxnoe  wremq,  poka
  fonowoe zadanie wypolnqet operacii s lentami. programmist dolven u~i-
  tywatx |to pri proektirowanii sistemy. RT11FB(XM) pozwolq`t ispolxzo-
  watx programmu ITLOCK, kotoraq pozwolqet operatiwnomu zadani`  prowe-
  rqtx dostupnostx USR. otmetim, ~to programma LOCK umenx{aet wremennye
  zatraty  na  uprawlenie  fajlami,  zapre}aq  swoping  USR.  esli  USR
  rezidentna,TO obra}enie k LOCK ne trebuet  wwoda/wywoda.  USR  wsegda
  rezidentna w RT11XM.

       obra}enie k podprogramme:

          CALL LOCK

       posle wypolneniq podprogrammy LOCK i wypolneniq neobhodimyh ope-
  racij s USR dolvna  wypolnitxsq  podprogramma  UNLOCK.  oni  qwlq`tsq
  dopolnq`}imi drug druga i ih dejstwie dolvno bytx wzaimno  soglasowa-
  no. t.e. esli tri raza byla  wyzwana  podprogramma  LOCK,  to  dolvnO
  wypolnitxsq po krajnej mere tri wyzowa podprogrammy UNLOCK. w protiw-
  nom slu~ae USR ne budet oswobovdena. pri zadanii li{nih UNLOCK o{ibka
  ne fiksiruetsq, li{nie UNLOCK ignoriru`tsq.

       prime~aniq:
       1. wavno, ~toby wyzow LOCK ne proizwodilsq iz  zony,  w  kotoru`

                                 - 253 -




  budet pome}atxsq USR. esli |to proizojdet, to iz USR wozwrat uprawle-
  niq proizojdet ne w programmu polxzowatelq, a w samu  programmu  USR,
  t.k. LOCK sohranqet ~astx programmy polxzowatelq na diske, a  na  |to
  mesto w operatiwnoj pamqti zapisywaet programmu USR.  bolee  togo,  w
  programme ne dolvno bytx obra}enij k podprogrammam, peremennym i mas-
  siwam, nahodq}imsq w zone swopinga, esli USR rezidentna posle  wypol-
  neniq podprogrammy LOCK.
       2. esli podprogramma LOCK wypolnena, to  necelesoobrazno  razru-
  {atx zonu, w kotoru` zapisana USR, dave w tom slu~ae, esli ne predpo-
  lagaetsq dalxnej{ee ispolxzowanie USR. w slu~ae razru{eniq pri wypol-
  nenii funkcii UNLOCK mogut polu~itxsq nepredskazuemye rezulxtaty.
       3. podprogrammu LOCK nelxzq wyzywatx iz podprogrammy  zawer{eniq
  ili obrabotki prerywaniq.
       4. esli dana komanda monitora "SET USR NOSWAP"  (t.e.  zapretitx
  swoping USR), to podprogrammy LOCK i UNLOCK ne budut proizwoditx swo-
  ping, hotq LOCK budet zapre}atx drugomu zadani` ispolxzowatx  USR,  a
  UNLOCK - razre{atx dostup k USR.
       5. peredawaemye podprogramme USR spiski  parametrow,  takie  kak
  opisanie imen fajlow i ustrojstw, ne dolvny hranitxsq w zone  swopin-
  ga.

       o{ibki otsutstswut.

       primer.

          INTEGER*2 DBLK(4)
          DATA DBLK/3RDK1,3RDT1,3RFIL,3RF41/

           . . .

          CALL LOCK    ! zakrepitx USR w pamqti
          ICHN=GETC( ) ! ispolxzowatx kanal
          IF (LOOKUP(ICHN,DBLK).LT.0)
        *  STOP ' ?LOOKUP ne uda~en '
          CALL UNLOCK  ! oswoboditx USR




       8.6.9. podprogramma RCHAIN



       podprogramma RCHAIN pozwolqet fonowoj programme opredelitx, byla
  li ona zagruvena pri pomo}i wyzowa podprogrammy CHAIN drugoj program-
  moj i polu~itx dostup k peremennym,  peredawaemym  ~erez  specialxnu`
  oblastx w pamqti. esli ispolxzuetsq podprogramma RCHAIN, to ee  neob-
  hodimo wyzwatx w perwom  wypolnqemom  operatore  programmy  na  qzyke
  fortran.

       obra}enie k podprogramme:

          CALL RCHAIN (FLAG,VAR,WCNT)

  gde

  FLAG   - celaq peremennaq, kotoraq ustanawliwaetsq w -1,  esli  prog-
           ramma wyzwana po CHAIN, w protiwnom slu~ae - w nulx;

                                 - 254 -




  VAR    - perwaq peremennaq w posledowatelxnosti peremennyh s  wozrAs-
           ta`}imi adresami pamqti, prednazna~ennaq dlq priema informa-
           cii, peredawaemoj iz wyzywaw{ej programmy;

  WCNT   - koli~estwo slow, peredawaemyh w zonu,  ukazannu`  parametrom
           VAR; podprogramma RCHAIN pereme}aet s~et~ik  slow  (WCNT)  w
           oblastx perwoj peremennoj (VAR).

       o{ibki otsutstwu`t.

       primer.

         INTEGER*2 PARMS(50)
         CALL RCHAIN(IFLAG,PARMS,50)
         IF(IFLAG) GOTO 10   !perejti k operatoru 10, esli
   C                          programma wyzwana w cepo~ke



       8.6.10. podprogramma RCTRLO



       podprogramma RCTRLO otmenqet dejstwie komandy <CTRL/O>,  kotoraq
  byla wwedena ranee s klawiatury terminala. posle wyzowa  podprogrammy
  RCTRLO l`boj wywod na terminal budet osu}estwlqtxsq do teh por,  poka
  ne budet wnowx wwedena s terminala komanda <CTRL/O>.

       obra}enie k podprogramme:

          CALL RCTRLO

       o{ibki otsutstwu`t.

       primer.

       CALL RCTRLO
       CALL PRINT(' tabli~nye dannye ')



       8.6.11. podprogramma RESUME (RT11FB ili RT11XM)



       podprogramma pozwolqet zadani` wozobnowitx  wypolnenie  osnownoj
  programmy. wyzow RESUME oby~no proizwoditsq iz  asinhronnoj  podprog-
  rammy zawer{eniq na qzyke fortran, wyzwannoj po sobyti` (po okon~anii
  wwoda/wywoda ili po iste~enii zaplanirowannogo interwala wremeni).

       obra}enie k podprogramme:

          CALL RESUME

       o{ibki otsutstwu`t.

       primer.

                                 - 255 -




       SUBROUTINE RDFIN(IARG1,IARG2)
       COMMON/RDBLK/IBUF(256)
        . . .
       CALL RESUME !prodolvitx wypolnenie osnownoj programmy
       END



       8.6.12. podprogramma SCCA



       podprogramma SCCA zapre}aet zawer{atx programmu po komande  ope-
  ratora <CTRL/C>; daet wozmovnostx  programme  razli~atx  odinarnu`  i
  dwojnu` komandy <CTRL/C>.

       obra}enie k podprogramme:

          CALL SCCA [(IFLAG)]

  gde

  IFLAG  - slowo sostoqniq terminala,  predstawlqemoe  celym  ~islom  w
           formate INTEGER*2 (a ne LOGICAL*1); ono dolvno bytx  predwa-
           ritelxno o~i}eno dlq togo, ~toby movno bylo opredelitx, wwo-
           dilasx li dwavdy komanda <CTRL/C>.

       esli  posle  wyzowa  SCCA  s  argumentom  byla  podana   komanda
  <CTRL/C>, to sistema ignoriruet <CTRL/C>, no pome}aet ee w  kolxcewoj
  bufer wwoda. nahodqsx w bufere, |tot simwol  (kod  "003)  movet  bytx
  s~itan programmoj kak dopustimyj simwol.  esli  postupili  s  konsoli
  srazu dwe komandy <CTRL/C>, to parametr IFLAG imeet nenulewoe  zna~e-
  nie. po|tomu, dlq obnaruveniq |togo |ffekta, ego neobhodimo predwari-
  telxno proweritx i o~istitx.

       wyzow programmy SCCA bez argumenta otmenqet opisannu`  obrabotku
  komandy <CTRL/C>, wozwra}aq sistemu w oby~nyj revim.

       normalxnaq reakciq sistemy na znak <CTRL/C>, prinqtyj iz koswen-
  nogo komandnogo fajla, ne movet bytx otmenena pri pomo}i SCCA.

       o{ibki otsutstwu`t.

       w primere rassmotreny wozmovnye warianty ispolxzowaniq  podprog-
  rammy SCCA.

       primer.

         PROGRAM SCCA
         CALL PRINT(' programma zapu}ena, wwodite ')
         IFLAG=0
         CALL SCCA(IFLAG)
      10 I=ITTINR()       !prinqtx simwol
         IF (I.NE.3) GOTO 10
   C     byla wwedena komanda <CTRL/C>
         CALL PRINT(' byla komanda <CTRL/C> ')
         IF(IFLAG.EQ.0) GOTO 10
         CALL PRINT(' komanda <CTRL/C> podrqd dwavdy ')
         TYPE 19,IFLAG

                                 - 256 -




      19 FORMAT (' IFLAG = ',o6,/)
         CALL SCCA   !razre{itx obrabotku <CTRL/C>
         CALL PRINT (' wwedite dwa <CTRL/C> dlq zawer{eniq ')
      20 GOTO 20      !cikl, poka ne budet
   C                   komanda <CTRL/C>
         END



       8.6.13. podprogramma SETCMD



       podprogramma SETCMD pozwolqet programme peredatx  interaktiwnomu
  monitoru (KMON) komandnu` stroku, kotoraq  wypolnitsq  po  wyhode  iz
  programmy. komandnye stroki pereda`tsq w oblastx pereda~i  informacii
  po CHAIN (500-777, wosxmeri~noe) i hranqtsq,  na~inaq  s  q~ejki  512
  (wosxeri~noe). programma ne prowerqet, perekrywaet li komandnaq stro-
  ka oblastx steka. po|tomu, komandnaq stroka dolvna  bytx  korotkoj  i
  wyzow podprogrammy velatelxno delatx neposredstwenno  pered  zawer{e-
  niem osnownoj programmy. esli neobhodimo wypolnitx neskolxko  komand,
  to dolven ispolxzowatxsq  komandnyj  fajl,  soderva}ij  nuvnoe  ~islo
  komandnyh strok.

       esli ispolxzuetsq podprogramma SETCMD, to sledu}ie komandy  KMON
  zapre}eny:

          REENTER
          START
          CLOSE

       obra}enie k podprogramme:

          CALL SETCMD (STRING)

  gde

  STRING - komandnaq  stroka  dlq  interaktiwnogo  monitora  w  formate
           ASCIZ, ne soderva}aq simwoly <CR> i <LF>.

       posle wyzowa podprogrammy SETCMD dlq pereda~i uprawleniq monito-
  ru movno ispolxzowatx kak operator STOP, tak i podprogrammu EXIT.

       o{ibki otsutstwu`t.

       primer.

        LOGICAL*1 INPUT(134),PROMPT(8)
        DATA PROMPT/'C','O','M','A','N','D','>',"200/
        CALL GTLIN(INPUT,PROMPT)
        CALL SETCMD(INPUT)
        END

                                 - 257 -




       8.6.14. podprogramma SUSPND (RT11FB ili RT11XM)



       podprogramma SUSPND priostanawliwaet wypolnenie  osnownoj  prog-
  rammy teku}ego zadaniq  i  razre{aet  wypolnenie  tolxko  podprogramm
  zawer{eniq dlq operacij wwoda/wywoda i planiru`}ihsq wremennyh zapro-
  sow.

       obra}enie k podprogramme:

          CALL SUSPND

       prime~aniq:
       1. monitor dlq kavdogo  zadaniq  imeet  s~et~ik  zadervki.  |tot
  s~et~ik umenx{aetsq podprogrammoj SUSPND i uweli~iwaetsq  podprogram-
  moj RESUME. zadanie qwlqetsq priostanowlennym, esli zna~enie s~et~ika
  otricatelxno. takim obrazom, esli podprogramma RESUME  wyzywaetsq  do
  podprogrammy SUSPND, to poslednqq, umenx{iw s~et~ik, wernet  uprawle-
  nie.
       2. programma  dolvna  wypolnqtx  odinakowoe  koli~estwo  wyzowow
  podprogramm SUSPND i RESUME.
       3. wyzow SUSPND iz  podprogrammy  zawer{eniq  umenx{aet  s~et~ik
  zadervki, no ne priostanawliwaet wypolnenie osnownoj programmy.  esli
  podprogramma zawer{eniq wyzywaet SUSPND, to golownaq  programma  pro-
  dolvaet wypolnqtxsq do teh por, poka ona sama ne  wyzowet  SUSPND.  w
  |tot moment ee wypolnenie  priostanawliwaetsq,  i  dlq  wozobnowleniq
  wypolneniq potrebuetsq dwa wyzowa RESUME.
       4. tak kak podprogrammy SUSPND i RESUME ispolxzu`tsq dlq modeli-
  rowaniq funkcii ITWAIT w monitore, to podprogramma RESUME, wyzywaemaq
  iz podprogrammy zawer{eniq movet priwesti  k  prodolveni`  wypolneniq
  osnownoj programmy, kotoraq nahodilasx w ovidanii po  wyzowu  ITWAIT,
  prevde, ~em iste~et wesx wremennoj interwal ukazannyj w |tom wyzowe.

       bolee podrobno o priostanowke osnownoj programmy dano w opisanii
  makrokomandy .SPND (sm. podpunkt 7.6.30.1).

       o{ibki otsutstwu`t.

                                 - 258 -




       primer.

             INTEGER IAREA(4)
             COMMON /RDBLK/ IBUF(256)
             EXTERNAL RDFIN
              . . .
             IF(IREADF(256,IBUF,IBLK,ICHAN,IAREA,RDFIN)
            1         .NE.0) GOTO 1000
       C
       C     pri l`bom tipe o{ibki perejti k operatoru 1000
       C
       C     wypolnqtx obrabotku parallelxno s wyzowom
              . . .
             CALL SUSPND   !ustanowitx sinhronizaci` s p/p
       C                    zawer{eniq
              . . .
             END
             SUBROUTINE RDFIN (IARG1,IARG2)
             COMMON /RDBLX/ IBUF(256)
              . . .
             CALL RESUME   !prodolvitx wypolnenie osnownoj
       C                    programmy
              . . .
             END



       8.6.15. podprogramma UNLOCK



       podprogramma UNLOCK razre{aet swoping USR, esli on byl  zapre}en
  wyzowom LOCK i oswobovdaet USR, pozwolqq  obra}atxsq  k  nemu  drugim
  zadaniqm. esli LOCK potrebowalo  wypolneniq  procedury  swopinga,  to
  UNLOCK wozwra}aet programmu polxzowatelq w pamqtx. esli swopinga  pri
  wypolnenii LOCK ne potrebowalosx, to  UNLOCK  ne  porovdaet  operacij
  wwoda/wywoda. USR wsegda rezidentna w RT11XM.

       obra}enie k podprogramme:

          CALL UNLOCK

       prime~aniq:
       1. wavno, ~toby wyzowow UNLOCK bylo slelano ne menx{e, ~em wyzo-
  wow LOCK. esli wyzowow LOCK sdelano bolx{e, ~em  wyzowow  UNLOCK,  to
  USR ostaetsq rezidentnoj w operatiwnoj pamqti i zakreplennoj za zada-
  niem. esli wyzowow UNLOCK bolx{e,situaciq o{ibki ne woznikaet, a li{-
  nie wyzowy UNLOCK ignoriru`tsq.
       2. esli w RT11FB rabota`t dwa zadaniq, LOCK/UNLOCK  ispolxzu`tsq
  tolxko pri neobhodimosti. esli odno zadanie blokiruet USR, to  drugoe
  zadanie ne smovet ispolxzowatx USR do wypolneniq UNLOCK perwym  zada-
  niem.
       3. w RT11FB wyzow CSI (ICSI) dlq priema komandy s terminala pri-
  wodit k neqwnomu wypolneni` UNLOCK.

       bolee podrobno  ob  oswobovdenii  USR  opisano  w  makrokomandah
  .LOCK/.UNLOCK (sm. p. 7.6.18).

       o{ibki otsutstwu`t.

                                 - 259 -




       primer.

       C     dlq wypolneniq mnovestwa operacij s USR
             CALL LOCK     !zapretitx swoping
       C     wypolnitx wyzowy USR
              . . .
             CALL UNLOCK   !oswoboditx USR



       8.7. sluvebnye operacii





       8.7.1. funkciq IADDR



       funkciq IADDR wozwra}aet 16-razrqdnyj absol`tnyj adres parametra
  w wide celogo zna~eniq funkcii.

       obra}enie k funkcii:

          I=IADDR (ARG)

  gde

  ARG    - parametr (peremennaq ili konstanta), adres kotorogo  neobho-
           dimo polu~itx;  wozwra}aemoe  zna~enie,  esli  ARG  qwlqetsq
           wyraveniem, nepredskazuemo.

       funkciq IADDR movet ispolxzowatxsq dlq nahovdeniq  adresa  podp-
  rogramm pri rabote s podprogrammami na qzyke makroassemblera.

       rezulxtaty funkcii:

      I - absol`tnyj adres parametra.

       primer.

       EXTERNAL CAREA
       J=IADDR (CAREA)



       8.7.2. funkciq IGETSP



       funkciq IGETSP zapra{iwaet swobodnu` oblastx pamqti u OTS  fort-
  rana i wozwra}aet adres i razmer (~islo slow) swobodnoj pamqti, wyde-
  lennoj ispolnq`}ej sistemoj. polu~ennu` swobodnu` pamqtx movno  dina-
  mi~eski raspredelqtx dlq programmy, razme}aq w nej bufery, massiwy  i
  t.d.

       obra}enie k funkcii:

                                 - 260 -




          I=IGETSP (MIN,MAX,ADDR)

  gde

  MIN    - minimalxnaq oblastx, kotoraq budet polu~ena;

  MAX    - maksimalxnaq oblastx, kotoraq budet polu~ena;

  ADDR   - adres (celoe) na~ala swobodnoj pamqti (bufer); ADDR ne oboz-
           na~aet neposredstwenno oblastx pamqti, kak |to dela`t  oby~-
           nye peremennye fortrana;  on  obozna~aet  slowo,  soderva}ee
           adres oblasti pamqti; |to ~asto ispolxzuetsq  podprogrammami
           IPEEK i IPOKE ili podprogrammami na qzyke makroassembler.

       rezulxtaty funkcii:

       I=-1 - byla zaregistrirowana   o{ibka;   nedostato~no
              swobodnoj pamqti  dlq  wydeleniq trebuemogo
              minimalxnogo koli~estwa operatiwnoj pamqti;
              wydelenie swobodnoj pamqti iz oblasti ispolnq-
              `}ej sistemy ne proizwedeno;
       I=N  - ob'em fakti~eski wydelennoj pamqti; celoe
              zna~enie w predelah [MIN, MAX];
              razmer (MIN,MAX,N) opredelqetsq w slowah.


       pRIME^ANIE. osobaq  ostorovnostx  neobhodima  pri  ispolxzowanii
  wsej swobodnoj oblasti, polu~ennoj ispolnq`}ej sistemoj  fortrana  ot
  operacionnoj sistemy. pamqtx, polu~ennaq po zaprosu  funkcii  IGETSP,
  iskl`~aetsq iz spiska  swobodnoj  dinami~eski  raspredelqemoj  pamqti
  ispolnq`}ej sistemy. esli ispolnq`}aq sistema obnaruvit,  ~to  ej  ne
  hwataet swobodnoj pamqti, to proishodit neustranimaq  o{ibka  (o{ibki
  29,30,42 i t.d.), zadanie oby~no snimaetsq s wypolneniq.

       primer.

      N=IGETSP(256,256,IBUFF)      ! polu~itx bufer na blok
      IF (N.LT.0) STOP 'net pamqti'! net mesta w pamqti



       8.7.3. funkciq INTSET



       funkciq INTSET ob'qwlqet podprogrammu na qzyke fortran  podprog-
  rammoj obsluviwaniq prerywaniq, nazna~aet ej prioritet i swqzywaet ee
  s wektorom prerywaniq. funkciq INTSET trebuet,  ~toby  byla  wydelena
  dopolnitelxnaq pamqtx dlq operatiwnoj programmy,  kotoraq  ispolxzuet
  |tu funkci`.

       obra}enie k funkcii:

          I=INTSET (VECT,PRI,ID,CRTN)

  gde

  VECT   - adres (celoe) wektora prerywaniq, kotoryj budet obsluviwatx-
           sq podprogrammoj CRTN.

                                 - 261 -




  PRI    - urowenx prioriteta (celoe ot 4 do 7), na  kotorom  obrabaty-
           waetsq prerywanie ot ustrojstwa;

  ID     - identificiru`}ee  celoe;  ~islo,  peredawaemoe  w   ka~estwe
           edinstwennogo parametra w  podprogrammu  na  qzyke  fortran,
           kogda proishodit  prerywanie;  |to  pozwolqet  ukazatx  odnu
           podprogrammu w neskolxkih wyzowah INTSET;

  CRTN   - imq podprogrammy na qzyke fortran, ispolxzuemoj  w  ka~estwe
           podprogrammy obsluviwaniq prerywaniq; imq |toj  podprogrammy
           dolvno bytx opisano w  operatore  EXTERNAL  podprogrammy  na
           qzyke fortran, kotoraq wyzywaet funkci` INTSET; podprogramma
           obrabotki prerywanij imeet edinstwennyj argument, naprimer:

                   SUBROUTINE NAME (ID)
                   INTEGER ID

       kogda podprogramma obrabotki prerywanij budet wyzwana,  zna~enie
  celogo parametra budet rawno zna~eni`, ukazannomu dlq identifikacion-
  nogo celogo ID w sootwetstwu`}em wyzowe INTSET.

       prime~aniq:
       1. parametr ID movet ispolxzowatxsq dlq  raspoznawaniq  prerywa-
  nij, wyzwannyh razli~nymi wektorami w slu~ae, esli primenqemaq  podp-
  rogramma obsluviwaet neskolxko ustrojstw.
       2. pri ispolxzowanii funkcii INTSET w programme pod  uprawleniem
  RT11FB ili RT11XM wyzow podprogrammy DEVICE dolven ispolxzowatxsq dlq
  zapre}eniq prerywaniq ot ustrojstwa, obsluviwaemogo podprogrammoj  na
  qzyke fortran, ob'qwlennoj po INTSET, posle zawer{eniq programmy.
       3. esli podprogramma  obsluviwaniq  prerywaniq  (parametr  CRTN)
  polu~aet uprawlenie na wremq, w te~enie kotorogo proishodit  dwa  ili
  bolee prerywaniq, ispolxzu`}ih odin i tot ve wektor,  s~itaetsq,  ~to
  proizo{el wyhod za dopustimyj predel ~isla prerywanij. w |tom  slu~ae
  wywoditsq diagnosti~eskoe soob}enie:

          ?SYSLIB-FATAL INTERRUPT OVERRUN

  i wypolnenie zadaniq prekra}aetsq. zadaniq, trebu`}ie o~enx  bystrogo
  otweta na prerywanie, mogut okazatxsq nedeesposobnymi,  esli  ispolx-
  zuetsq qzyk fortran, iz-za poniveniq skorosti obrabotki prerywaniq  w
  sisteme fortran po srawneni` s samoj operacionnoj sistemoj.
       4. podprogramma obsluviwaniq prerywaniq (parametr  CRTN)  wypol-
  nqetsq kak podprogramma zawer{eniq za s~et ispolxzowaniq pri ih wyzo-
  we ispolnq`}ej sistemoj fortrana sistemnoj makrokomandy .SYNCH. para-
  metr PRI ispolxzuetsq sistemnoj makrokomandoj .INTEN.
       5. parametr VECT zadaetsq dlq sistemnoj  makrokomandy  .PROTECT,
  no esli wektor uve za}i}en, to ne wydaetsq  kakoe-libo  soob}enie  ob
  o{ibke i wektor budet wosprinqt bezuslowno. bolee podrobno |to opisa-
  no w sistemnoj makrokomande .PROTECT.
       6. podprogramma obsluviwaniq prerywanij (parametr CRTN) na qzyke
  fortran ne movet wyzywatx USR.
       7. funkciq INTSET ne movet wyzywatxsq iz podprogramm  zawer{eniq
  ili obsluviwaniq prerywaniq.
       8. razre{enie prerywaniq ne dolvno ustanawliwatxsq na ustrojstwe
  do teh por, poka ne budet uspe{no wypolnen wyzow INTSET.

       rezulxtaty funkcii:

                                 - 262 -




       I=0 - oby~nyj wyhod;

       I=1 - neprawilxnoe opisanie wektora;
       I=2 - zarezerwirowano;
       I=3 - otsutstwuet swobodnaq oblastx dlq ustanowleniq
             swqzej.

       primer.

       EXTERNAL CLKSUB     !podprogramma obsluviwaniq ~asow
        . . .
       I=INTSET ("104,6,0,CLKSUB) !opredelitx podprogrammu
       IF(I.NE.0)GOTO 100  !perejti w slu~ae o{ibki
        . . .
       END
       SUBROUTINE CLKSUB(IP)
        . . .
       END



       8.7.4. funkciq IPEEK



       funkciq IPEEK wozwra}aet sodervimoe slowa, nahodq}egosq po  uka-
  zannomu absol`tnomu 16-razrqdnomu adresu pamqti.  |ta  funkciq  movet
  ispolxzowatxsq dlq prowerki registrow ustrojstwa ili kakoj-libo q~ej-
  ki pamqti.

       obra}enie k funkcii:

          I=IPEEK (ADDR)

  gde

  ADDR   - absol`tnyj adres (celoe) prowerqemogo slowa; esli |tot para-
           metr qwlqetsq ne~etnoj weli~inoj, to proishodit prerywanie.

       rezulxtaty funkcii:

      I - sodervimoe slowa, ukazannogo adresom ADDR.

       primer.

       ISWIT=IPEEK("177570)  !polu~itx zna~enie.



       8.7.5. funkciq IPEEKB



       funkciq IPEEKB wozwra}aet sodervimoe  bajta,  raspolovennogo  po
  ukazannomu absol`tnomu adresu pamqti. poskolxku |ta  programma  rabo-
  taet s bajtami, adres movet bytx ~etnym  ili  ne~etnym.  |ta  funkciq
  movet ispolxzowatxsq dlq prowerki  registrow  ustrojstwa  ili  l`bogo
  bajta pamqti. esli zna~enie prowerqemogo bajta rawno nul`, to w wozw-
  ra}aemom funkciej zna~enii star{ij bajt takve budet rawen nul`.

                                 - 263 -




       obra}enie k funkcii:

          I=IPEEKB (ADDR)

  gde

  ADDR   - absol`tnyj adres (celoe) prowerqemogo bajta;  w  otli~ie  ot
           funkcii IPEEK funkciq IPEEKB dopuskaet ne~etnye adresa.

       rezulxtaty funkcii:

      I - sodervimoe bajta, ukazannogo adresom ADDR.

       primer.

       IERR=IPEEKB ("52)  !polu~itx bajt o{ibki



       8.7.6. podprogramma IPOKE



       podprogramma IPOKE zapisywaet 16-bitowu` celu` weli~inu w zadan-
  nu` absol`tnym adresom q~ejku pamqti. |to  movet  ispolxzowatxsq  dlq
  zagruzki registrow ustrojstw.

       obra}enie k podprogramme:

          CALL IPOKE (ADDR,IVALUE)

  gde

  ADDR   - absol`tnyj adres (celoe) modificiruemoj q~ejki pamqti;  esli
           |tot parametr qwlqetsq  ne~etnoj  weli~inoj,  to  proishodit
           prerywanie;

  IVALUE - celoe, kotoroe zapisywaetsq po ukazannomu adresu.

       o{ibki otsutstwu`t.

       w primere peredaetsq zna~enie IVAL w odin iz registrow diska.

       primer.

          CALL IPOKE ("17740,IVAL)

       dlq togo, ~toby w 12 razrqde q~ejki, opredelq`}ej slowo  sostoq-
  niq zadaniq, ustanowitx 1, bez obnuleniq kakih-libo drugih bitow slo-
  wa, neobhodimo ispolxzowatx sledu`}u` formu:

          CALL IPOKE ("44,"10000.oR.IPEEK("44))

                                 - 264 -




       8.7.7. podprogramma IPOKEB



       podprogramma  IPOKEB  zapisywaet  opredelennu`   wosxmirazrqdnu`
  weli~inu w ukazannyj bajt. poskolxku |ta podprogramma rabotaet s baj-
  tami, ukazannyj adres movet bytx  ne~etnym.  |ta  podprogramma  movet
  ispolxzowatxsq dlq raboty s registrami wne{nih ustrojstw.

       obra}enie k podprogramme:

          CALL IPOKEB (ADDR,VALUE)

  gde

  ADDR   - absol`tnyj adres (celoe)  bajta,  podleva}ego  izmeneni`;  w
           otli~ie ot  podprogrammy  IPOKE,  funkciq  IPOKEB  dopuskaet
           ne~etnu` adresaci`;

  VALUE  - celoe zna~enie, kotoroe budet hranitxsq po  adresu,  oprede-
           lqemom parametrom ADDR.

       o{ibki otsutstwu`t.

       primer.

      CALL IPOKEB ("53,"20)    !soob}itx w KMON o
                               !gruboj o{ibke.



       8.7.8. funkciq ISPY



       funkciq ISPY wozwra}aet w programmu celoe ~islo - zna~enie  slo-
  wa, nahodq}egosq na ukazannom sme}enii ot na~ala  RMON.  |ta  funkciq
  ispolxzuet sistemnu` makrokomandu .GVAL (sm. p. 7.6.13) dlq polu~eniq
  zna~enij, zapisannyh w q~ejkah monitora i ime`}ih fiksirowannye  sme-
  }eniq.

       obra}enie k funkcii:

          I=ISPY (IOFF)

  gde

  IOFF   - sme}enie ot bazy rezidenta monitora RMON do q~ejki,  kotoru`
           neobhodimo prO~itatx.

       rezulxtaty funkcii:

      I - sodervimoe slowa, nahodq}egosq na sme}enii IOFF ot
          na~ala RMON.

       primer.

   C  perejti na operator 200, esli programma rabotaet pod
   C  uprawleniem RT11FB

                                 - 265 -




   C
        IF(ISPY ("300.AND.1) GOTO 200
   C
   C  slowo, nahodq}eesq na sme}enii 300 (8)
   C  ot bazy rezidenta monitora RMON,
   C  qlqetsq slowom konfiguracii sistemy



       8.8. obmen mevdu zadaniqmi





       8.8.1. funkcii  IRCVD/IRCVDC/IRCVDF/IRCVDW  (RT11FB  ili
              RT11XM)



       IRCVD/IRCVDC/IRCVDF/IRCVDW - ~etyre formy funkcii priema dannyh.
  |ti funkcii ispolxzu`tsq wmeste s funkciqmi  ISDAT  (posylki  dannyh)
  dlq obmena soob}eniqmi mevdu programmami. |ti funkcii trebu`t |lement
  o~eredi, ~to dolvno u~itywatxsq pri wypolnenii funkcii IQSET.



       8.8.1.1. funkciq IRCVD



       funkciq IRCVD ustanawliwaet zapros na priem soob}eniq ot  drugoj
  programmy w o~eredx i wozwra}aet uprawlenie programme, sdelaw{ej zap-
  ros. pri neobhodimosti dovdatxsq informacii  iz  drugogo  zadaniq,  w
  zadanii, prinima`}em soob}enie, dolvna wypolnqtxsq funkciq MWAIT. ona
  priostanawliwaet wypolnenie zadaniq do teh por, poka ne budet prinqto
  soob}enie.

       obra}enie k funkcii:

          I=IRCVD (BUF,WCNT)

  gde

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera dlq prinimaemyh  dan-
           nyh; |tot massiw dolven bytx na odno slowo bolx{e  prinimae-
           mogo soob}eniq, tak kak perwoe slowo posle zawer{eniq wypol-
           neniq funkcii IRCVD budet sodervatx ~islo peredannyh slow;

  WCNT   - maksimalxnoe celoe ~islo slow, kotoroe movet bytx prinqto.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w sisteme otsutstwuet drugoe zadanie.

       primer.

                                 - 266 -




       INTEGER*2 MSG (41)
        . . .
       CALL IRCVD (MSG,40)
        . . .
       CALL MWAIT



       8.8.1.2. funkciq IRCVDC



       funkciq IRCVDC ustanawliwaet zapros na priem soob}eniq ot drugoj
  programmy w o~eredx i wozwra}aet uprawlenie programme, sdelaw{ej zap-
  ros. posle zawer{eniq operacii budet wypolnena ukazannaq podprogramma
  zawer{eniq, napisannaq na makroassemblere. wypolnenie osnownoj  prog-
  rammy prodolvaetsq wmeste s zadaniem, sdelaw{im zapros.

       obra}enie k funkcii:

          I=IRCVDC (BUF,WCNT,CRTN)

  gde

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera  prinimaemyh  dannyh;
           |tot massiw dolven bytx po dline bolx{e na odno slowo prini-
           maemogo soob}eniq, tak kak  perwoe  slowo  posle  zawer{eniq
           wypolneniq funkcii IRCVDC sodervit ~islo peredannyh slow;

  WCNT   - maksimalxnoe celoe ~islo slow, kotoroe movet bytx prinqto;

  CRTN   - planiruemaq podprogramma  zawer{eniq,  napisannaq  na  qzyke
           makroassemblera; imq programmy dolvno ukazywatxsq w operato-
           re FORTRAN EXTERNAL podprogrammy, kotoraq  wyzywaet  funkci`
           IRCVDC.

       rezulxtaty funkcii:

      I=0 - oby~nyj wyhod;

      I=1 - w sisteme otsutstwuet drugoe zadanie.



       8.8.1.3. funkciq IRCVDF



       funkciq IRCVDF ustanawliwaet zapros na priem soob}eniq ot drugoj
  programmy w o~eredx; posle zawer{eniq operacii budet  wypolnena  uka-
  zannaq podprogramma zawer{eniq, napisannaq  na  fortrane.  wypolnenie
  osnownoj programmy posle postanowki zaprosa w  o~eredx  prodolvaetsq.
  kogda drugoe zadanie posylaet soob}enie,  osnownaq  programma  prery-
  waetsq i zapuskaetsq ukazannaq podprogramma zawer{eniq.

       obra}enie k funkcii:

          I=IRCVDF (BUF,WCNT,AREA,CRTN)


                                 - 267 -




  gde

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera  prinimaemyh  dannyh;
           |tot massiw dolven bytx po dline na odno slowo bolx{e prini-
           maemogo soob}eniq, tak kak perwoe slowo budet sodervatx ~is-
           lo  peredannyh  slow  posle  zawer{eniq  wypolneniq  zaprosa
           IRCVDF;

  WCNT   - maksimalxnoe celoe ~islo slow, kotoroe movet bytx prinqto;

  AREA   - massiw iz ~etyreh slow, prednazna~ennyj dlq hraneniq  infor-
           macii o swqzqh;  ego  |lementy  ne  dolvny  modificirowatxsq
           fortran-programmoj do momenta zawer{eniq priema informacii i
           ne dolvny perekrywatxsq pri swopinge USR; |tot massiw  movet
           bytx ispolxzowan dlq planirowaniq drugoj podprogrammy zawer-
           {eniq na qzyke fortran, tolxko posle togo kak  zaplanirowan-
           naq w dannom zaprose podprogramma budet wyzwana;

  CRTN   - planiruemaq podprogramma zawer{eniq na  qzyke  fortran,  imq
           podprogrammy dolvno ukazywatxsq w operatore  EXTERNAL  podp-
           rogrammy, wyzywa`}ej IRCVDF.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w sisteme otsutstwuet drugoe zadanie.

       primer.

       INTEGER*2 MSG (41),AREAL(4)
       EXTERNAL RMSGRT
        . . .
       CALL IRCVDF (MSG,40,AREAL,RMSGRT)



       8.8.1.4. funkciq IRCVDW



       funkciq IRCVDW ustanawliwaet zapros na priem soob}eniq ot drugoj
  programmy w o~eredx; uprawlenie osnownoj programme wozwra}aetsq posle
  zawer{eniq operacii, t.e. wypolnenie osnownoj programmy priostanawli-
  waetsq. perwoe slowo bufera pokazywaet ~islo prinqtyh slow.

       obra}enie k funkcii:

          I=IRCVDW (BUF,WCNT)

  gde

  BUF    - massiw, ispolxzuemyj w ka~estwe bufera dlq priniMAEmyh  dan-
           nyh; |tot massiw dolven bytx na odno slowo bolx{e  prinimae-
           mogo soob}eniq, tak kak perwoe slowo budet  sodervatx  ~islo
           peredannyh slow posle zawer{eniq wypolneniq IRCVDW;

  WCNT   - maksimalxnoe celoe ~islo slow, kotoroe movet bytx prinqto.


                                 - 268 -




       rezulxtaty funkcii:

      I=0 - oby~nyj wyhod;

      I=1 - w sisteme otsutstwuet drugoe zadanie.

       primer.

      INTEGER*2 MSG (41)
      IF(IRCVDW(MSG,40).NE.0)STOP 'nepredwidennaq o{ibka'



       8.8.2. funkcii  ISDAT/ISDATC/ISDATF/ISDATW  (RT11FB  ili
              RT11XM).



       |ti    funkcii     ispolxzu`tsq     sowmestno     s     wyzowami
  IRCVD/IRCVDC/IRCVDF i IRCVDW dlq togo,  ~toby  osu}estwlqtx  pereda~u
  soob}enij w drugu`  programmu  pod  uprawleniem  RT11FB  ili  RT11XM.
  bufer, sOderva}ij soob}enie, ne dolven modificirowatxsq ili  powtorno
  ispolxzowatxsq do teh por, poka soob}enie  ne  budet  prinqto  drugim
  zadaniem. |ti funkcii trebu`t |lement o~eredi, ~to dolvno u~itywatxsq
  pri wypolnenii funkcii IQSET.



       8.8.2.1. funkciq ISDAT



       funkciq ISDAT ustanawliwaet w o~eredx zapros na pereda~u soob}e-
  niq ukazannoj dliny drugoj programme i nemedlenno wozwra}aet uprawle-
  nie programme. |tot  wyzow  ispolxzuetsq  sowmestno  s  podprogrammoj
  MWAIT.

       obra}enie k funkcii:

          I=ISDAT (BUF,WCNT)

  gde

  BUF    - massiw, soderva}ij dannye, kotorye neobhodimo peredatx;

  WCNT   - celoe ~islo slow, kotoroe neobhodimo peredatx.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w dannoe wremq w sisteme net drugogo
             zadaniq.

       primer.

         INTEGER*2 MSG (40)
          . . .
         CALL ISDAT (MSG,40)

                                 - 269 -




          . . .
         CALL MWAIT
   C   wwesti nowoe soob}enie w bufer



       8.8.2.2. funkciq ISDATC



       funkciq ISDATC ustanawliwaet w o~eredx zapros na pereda~u  soob-
  }eniq zadannoj dliny drugoj programme i wozwra}aet  uprawlenie  prog-
  ramme. posle zawer{eniq operacii budet asinhronno wyzwana i wypolnena
  podprogramma zawer{eniq, napisannaq na makroassemblere. kogda  drugoe
  zadanie prinimaet soob}enie posredstwom  funkcii  priema  dannyh,  to
  ukazannaq podprogramma  na  qzyke  makroassemblera  aktiwiziruetsq  w
  ka~estwe asinhronnoj podprogrammy zawer{eniq.

       obra}enie k funkcii:

          I=ISDATC (BUF,WCNT,CRTN)

  gde

  BUF    - massiw, soderva}ij dannye, kotorye neobhodimo peredatx;

  WCNT   - celoe ~islo slow, kotoroe neobhodimo peredatx;

  CRTN   - imq podprogrammy zawer{eniq na qzyke makroassemblera,  koto-
           raq dolvna aktiwizirowatxsq po okon~anii pereda~i;  |to  imq
           dolvno ukazywatxsq w operatore EXTERNAL podprogrammy,  wyzy-
           wa`}ej ISDATC.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w dannoe wremq w sisteme net drugogo
             zadaniq.

       primer.

       INTEGER*2 MSG(40)
       EXTERNAL  RTN
        . . .
       CALL ISDATC (MSG,40,RTN)



       8.8.2.3. funkciq ISDATF



       funkciq ISDATF peredaet ukazannoe ~islo slow iz odnogo zadaniq w
  drugoe. uprawlenie  wozwra}aetsq  programme  polxzowatelq  nemedlenno
  posle togo, kak zapros na pereda~u postawlen w o~eredx,  i  programma
  prodolvaet wypolnqtxsq. KOgda drugoe zadanie prinimaet soob}enie pos-
  redstwom funkcii priema dannyh, ukazannaq podprogramma na qzyke fort-
  ran aktiwiziruetsq w ka~estwe asinhronnoj podprogrammy zawer{eniq.

                                 - 270 -




       obra}enie k podprogramme:

          I=ISDATF (BUF,WCNT,AREA,CRTN)

  gde

  BUF    - massiw, soderva}ij dannye dlq pereda~i;

  WCNT   - celoe ~islo slow, kotoroe neobhodimo peredatx;

  AREA   - massiw iz ~etyreh slow dlq informacii swqzi. |tot massiw  ne
           dolven modificirowatxsq programmoj i ne dolven nahoditxsq  w
           oblasti swopinga USR;  dannyj  massiw  movet  ispolxzowatxsq
           drugimi funkciqmi zawer{eniq na fortran tolxko posle aktiwi-
           zacii podprogrammy zawer{eniq;

  CRTN   - imq podprogrammy, napisannoj na qzyke fortran, kotoraq akti-
           wiziruetsq po zawer{enii pereda~i; |to imq dolvno ukazywatx-
           sq w operatore EXTERNAL programmy, wyzywa`}ej ISDATF.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w dannoe wremq w sisteme net drugogo
             zadaniq.

       primer.

       INTEGER*2 MSG(40),SPOT(4)
       EXTERNAL RTN
        . . .
       CALL ISDATF(MSG,40,SPOT,RTN)



       8.8.2.4. funkciq ISDATW



       funkciq ISDATW peredaet ukazannoe ~islo slow iz odnogo zadaniq w
  drugoe. uprawlenie wozwra}aetsq programme  polxzowatelq  posle  togo,
  kak drugoe zadanie prinqlo dannye posredstwom funkcii priema dannyh.

       obra}enie k funkcii:

          I=ISDATW (BUF,WCNT)

  gde

  BUF    - massiw, soderva}ij dannye, kotorye neobhodimo peredatx;

  WCNT   - celoe ~islo slow, kotoroe neobhodimo peredatx.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - w dannoe wremq w sisteme net drugogo

                                 - 271 -




             zadaniq.

       primer.

       INTEGER*2 MSG(40)
        . . .
       IF(ISDATW(MSG.40).NE.0) STOP'net drugogo zadaniq'



       8.8.3. podprogramma MWAIT (RT11FB ili RT11XM)



       podprogramma MWAIT  prednazna~ena  dlq  priostanowki  wypolneniq
  programmy do teh por, poka ne budut peredany ili prinqty wse  soob}e-
  niq, poslannye drugomu zadani`. |to garantiruet obrabotku  trebuemogo
  soob}eniq. funkciq MWAIT ispolxzuetsq  sowmestno  s  IRCVD  i  ISDAT.
  podprogramma MWAIT trebuet |lement o~eredi, ~to neobhodimo  u~itywatx
  pri wypolnenii funkcii IQSET.

       obra}enie k podprogramme:

          CALL MWAIT

       o{ibki: otsutstwu`t.

       primer priweden w opisanii funkcii ISDAT (sm. podpunkt 8.8.2.1).



       8.9. rabota s dopolnitelxnymi terminalami



       wozmovnostx ispolxzowaniq opisywaemyh nive  podprogramm  oprede-
  lqetsq pri generacii sistemy RT11. ih ispolxzowanie razre{eno  tolxko
  pod uprawleniem monitorow, pri generacii  kotoryh  ukazana  neobhodi-
  mostx raboty s neskolxkimi terminalami.



       8.9.1. funkciq MTATCH



       funkciq MTATCH predostawlqet programme prawo ispolxzowaniq  uka-
  zannogo terminala, zakreplqq ego za zadaniem. do otmeny |togo sostoq-
  niq terminala funkciej MTDTCH nikakaq drugaq programma na dannyj ter-
  minal dostupa ne polu~it. obra}enie k |toj funkcii dolvno bytx wypol-
  neno pered tem, kak programma iniciiruet perwoe obra}enie k terminalu
  s ispolxzowaniem podprogrammy mnogoterminalxnogo dostupa.

       obra}enie k funkcii:

          I=MTATCH (UNIT[,ADDR][,JOBN])

  gde

                                 - 272 -




  UNIT   - logi~eskij nomer terminala;

  ADDR   - neobqzatelxnyj parametr - adres asinhronnogo slowa sostoqniq
           terminala; esli slowo sostoqniq terminala ne trebuetsq, |tot
           argument wyzowa movet bytx opu}en, ~to ukazywaetsq  zapqtoj;
           naprimer:

          I=MTATCH (IUN,,JNUM)

  JOBN   - esli terminal zakreplen za drugim zadaniem, to w  |tu  pere-
           mennu` (tip INTEGER*2) zapisywaetsq nomer |togo zadaniq.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=3 - zadan nomer nesu}estwu`}ego terminala;
       I=5 - terminal zakreplen za drugim zadaniem;
             nomer zadaniq wozwra}aetsq pri |tom w JOBN;
       I=6 - w RT11XM     adres slowa sostoqniq
             nahoditsq wne dopustimoj oblasti wirtualx-
             nogo adresnogo prostranstwa polxzowatelq.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).



       8.9.2. funkciq MTDTCH



       funkciq MTDTCH wypolnqet  dejstwiq  obratnye  dejstwiqm  funkcii
  MTATCH. ee funkciej qwlqetsq otkl`~enie zadannogo terminala ot danno-
  go zadaniq, ~toby on stal dostupnym dlq drugih zadanij.

       obra}enie k funkcii:

          I=MTDTCH (UNIT)

  gde

  UNIT   - logi~eskij nomer oswobovdaemogo terminala.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=2 - nedopustimyj nomer; terminal ne zakreplen;
       I=3 - zadan nomer nesu}estwu`}ego ustrojstwa.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).

                                 - 273 -




       8.9.3. funkciq MTGET



       funkciq MTGET daet programme informaci` ob opredelennom termina-
  le w mnogoterminalxnoj sisteme.

       obra}enie k funkcii:

          I=MTGET (UNIT,ADDR[,JOBN])

  gde

  UNIT   - nomer (celoe) linii i terminala, sostoqnie kotorogo  oprede-
           lqetsq;

  ADDR   - 4-slownaq  oblastx  dlq  polu~eniq   informacii   sostoqniq;
           oblastx predstawlqet  soboj  ~etyreh|lementnyj  massiw  tipa
           INTEGER*2; format dannyh, zanosimyh w |tot massiw  opisan  w
           sistemnoj makrokomande .MTSET (sm. p 8.9.8);

  JOBN   - nomer zadaniq, swqzannogo s terminalom, esli terminal  zanqt
           drugim zadaniem.

       informaciq o sostoqnii, wkl`~aq opredeleniq razrqdow  dlq  slowa
  konfiguracii terminala i bajt sostoqniq terminala, detalxno opisany w
  sistemnoj makrokomande .MTGET (sm. podpunkt 7.8.7.2).

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=2 - ustrojstwo ne zakrepleno za programmoj;
       I=3 - zadan nomer nesu}estwu`}ego ustrojstwa;
       I=4 - terminal zanqt drugim zadaniem
             (nomer zada~i wozwra}aetsq pri |tom w JOBN);
       I=6 - w RT11XM     adres massiwa dlq zapisi
             sostoqniq terminala nahoditsq wne
             dopustimyh granic programmy.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).



       8.9.4. funkciq MTIN



       funkciq MTIN peredaet simwoly s ukazannogo  terminala  programme
  polxzowatelq. |ta funkciq predstawlqet soboj mnogosimwolxnu` i mnogo-
  terminalxnu` formu podprogrammy ITTINR. esli simwoly otsutstwu`t,  to
  ustanawliwaetsq flag dlq ukazaniq o{ibki pri wyhode iz funkcii.  esli
  argument - s~et~ik simwolow ne zadan, peredaetsq odin simwol.

       obra}enie k funkcii:

          I=MTIN (UNIT,CHAR[,CHRCNT][,OCNT])

  gde

                                 - 274 -




  UNIT   - nomer terminala;

  CHAR   - peremennaq (massiw), w kotoru` zapisywaetsq wwedennyj s ter-
           minala simwol (simwoly);

  CHRCNT - neobqzatelxnyj argument, ukazywa`}ij ~islo wwodimyh s termi-
           nala simwolow;

  OCNT   - neobqzatelxnyj argument, ukazywa`}ij ~islo fakti~eski  pere-
           dannyh simwolow.

       pri zaprose na wwod neskolxkih simwolow, esli byl ukazan ~etwer-
  tyj, neobqzatelxnyj argument OCNT i razrqd 6 w slowe M.TSTS  ustanow-
  len, to peremennaq, ukazannaq w pozicii argumenta OCNT, posle wozwra-
  ta iz podprogrammy budet sodervatx celoe ~islo fakti~eski  peredannyh
  simwolow.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net wwoda; bufer pust;
       I=2 - terminal ne  zakreplen za programmoj;
       I=3 - zadan nomer nesu}estwu`}ego terminala.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).



       8.9.5. funkciq MTOUT



       funkciq MTOUT peredaet simwoly na ukazannyj terminal. |ta  funk-
  ciq qwlqetsq mnogosimwolxnoj, mnogoterminalxnoj  formoj  podprogrammy
  ITTOUR. esli sistemnyj bufer perepolnilsq,  to  ustanawliwaetsq  flag
  dlq ukazaniq o{ibki pri wyhode iz  funkcii.  esli  s~et~ik  wywodimyh
  znakow ne ukazan, to po umol~ani` predpolAgaetsq 1.

       obra}enie k funkcii:

          I=MTOUT (UNIT,CHAR[,CHRCNT][,OCNT])

  gde

  UNIT   - nomer terminala ;

  CHAR   - peremennaq (massiw) w  kotoroj  nahoditsq  wywodimyj  simwol
           (simwoly); massiw dolven  imetx  tip  LOGICAL*1,  peremennaq
           dolvna sodervatx wywodimyj simwol w mlad{em bajte;

  CHRCNT - neobqzatelxnyj argument,  ukazywa`}ij  koli~estwo  wywodimyh
           simwolow;

  OCNT   - neobqzatelxnyj argument, ukazywa`}ij ~islo fakti~eski  wywe-
           dennyh simwolow.

       pri zaprose na wywod neskolxkih simwolow, esli byl  ukazan  ~et-
  wertyj neobqzatelxnyj argument OCNT i razrqd 6 w slowe  M.TSTS  usta-

                                 - 275 -




  nowlen to, posle wozwrata iz podprogrammy,  peremennaq,  ukazannaq  w
  pozicii argumenta OCNT, budet sodervatx celoe ~islo fakti~eski  wywe-
  dennyh simwolow.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=1 - net mesta w kolxcewom bufere wywoda;
       I=2 - terminal ne zakreplen za zadaniem;
       I=3 - zadan nomer nesu}estwu`}ego terminala.
       I=5 - w RT11XM; adres bufera polxzowatelq
             wne dopustimyh granic programmy.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).



       8.9.6. funkciq MTPRNT



       funkciq MTPRNT funkcioniruet kak podprogramma PRINT  w  uslowiqh
  mnogoterminalxnosti. ona pozwolqet osu}estwlqtx wywod  informacii  na
  l`boj terminal.

       obra}enie k funkcii:

          I=MTPRNT (UNIT,ADDR)

  gde

  UNIT   - nomer terminala;

  ADDR   - simwolxnaq stroka, podleva}aq wywodu; zametim, ~to literalx-
           nye konstanty, zadannye w kawy~kah pri fortranowskom  wyzowe
           podprogramm ime`t format  ASCIZ,  kotoryj  zawer{aet  stroku
           bajtom 0; obnaruvenie bajta 0  pri  wywode  na  terminal  po
           MTPRNT (takve kak i pri PRINT) porovdaet wywod  <CR>,  <LF>;
           dlq predotwra}eniq |togo stroka  dolvna  zawer{atxsq  bajtom
           "200.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=2 - terminal ne zakreplen za zadaniem;
       I=3 - zadan nomer nesu}estwu`}ego terminala;
       I=5 - w RT11XM; adres bufera wne dopus-
             timyh granic programmy.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).

                                 - 276 -




       8.9.7. funkciq MTRCTO



       funkciq MTRCTO rabotaet podobno sistemnoj makrokomande .RCTRLO w
  uslowii mnogoterminalxnosti. |ta funkciq  otmenqet  dejstwiq  komandy
  monitora <CTRL/O>, podannoj s klawiatury zadannogo terminala.

       obra}enie k funkcii:

          I=MTRCTO (UNIT)

  gde

  UNIT   - nomer terminala;

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=2 - ustrojstwo ne zakrepleno za zadaniem;
       I=3 - zadan nomer nesu}estwu`}ego terminala.

       primer priweden w opisanii funkcii MTSET (p. 8.9.8).



       8.9.8. funkciq MTSET



       funkciq MTSET pozwolqet programme izmenqtx nahodq}iesq w  tabli-
  cah monitora harakteristiki terminala i linii swqzi (funkciq rabotaet
  podobno sistemnoj makrokomande .MTSET). ustanowlennye  harakteristiki
  sohranq`tsq sistemoj i ispolxzu`tsq e` pri rabote s ukazannym  termi-
  nalom do momenta perezagruzki sistemy ili  do  momenta  izmeneniq  ih
  obra}eniem kakogo-libo iz zadanij k .MTSET ili MTSET.

       obra}enie k funkcii:

          I=MTSET (UNIT,ADDR)

  gde

  UNIT   - nomer terminala (i linii), harakteristiki kotorogo neobhodi-
           mo izmenitx;

  ADDR   - ~etyrehslownaq  oblastx  dlq  pereda~i  parametrow;  oblastx
           predstawlqet soboj ~etyreh|lementnyj massiw tipa INTEGER*2.

       rezulxtaty funkcii:

       I=0 - oby~nyj wyhod;

       I=2 - terminal ne zakreplen za zadaniem;
       I=3 - zadan nomer nesu}estwu`}ego terminala;
       I=6 - w RT11XM     adres bufera sostoqniq terminala
             nahoditsq wne dopustimyh granic programmy.


                                 - 277 -




       w priwedennom primere pokazan test funkcij, prednazna~ennyh  dlq
  raboty w mnogoterminalxnom revime.

       primer.

   C   test programm SYSLIB dlq mnogoterminalxnoj raboty
   C
          INTEGER*2 UNIT,SBLOK(4),STAT(8),ASW,STRING(41),PROMPT(9)
          LOGICAL*1 TEND(14)
          REAL*4    TESTM(9)
          DATA  PROMPT /'ww','ed','it','e ','st','ro','ku','>',"200/
          DATA  TEND   /'*','k','o','n','e','c',' ','t','e','s','t',
        *               'a','*',0/
          DATA  TESTM  /'STAT','ATCH','GET','SET',4*",'DTCH'/
   C
   C   ispolxzowanie MTSTAT dlq polu~eniq i raspe~atki
   C   ~isla terminalow
   C
          TYPE   106                           ! predstawitxsq
          L      =1                            ! L= kod funkcii
          IF   (MSTAT(STAT).NE.0) GOTO 999     ! polu~itx status
   5      TYPE   99, STAT(3)                   ! wywesti # terminalow
   C
   C   polu~itx nomer prowerqemogo terminala
   C
          TYPE   100                           ! datx zapros
          ACCEPT 101, UNIT                     ! polu~itx nomer
          IF   (UNIT.EQ.99) STOP 'konec mnogoterminalxnogo testa'
   C
   C   zakrepitx terminal za |tim zadaniem i polu~itx ego sostoqnie
   C
          TYPE   110                             ! prowerqtx ASW?
          ACCEBT 111, IASW                       ! prinqtx otwet
          IF   (IASW.EQ.'Y') IER=MTATCH(UNIT,ASW,
        *                               JOB)     ! zakrepitx s ASW
          IF   (IASW.NE.'Y') IER=MTATCH(UNIT,0,
        *                               JOB)     ! ili bez ASW
          L      =2
          IF   (IER) GOTO 999                    ! soob}itx ob o{ibke
          L      =3
          IF   (MTGET(UNIT,SBLOK).NE.0) GOTO 999 ! polu~itx sostoqnie
          TYPE   102, UNIT, SBLOK                ! i rape~atatx ego
   C
   C   polu~itx nowyj status terminala i raspe~atatx ego
   C
          CALL   SETUP(SBLOK,UNIT)             ! proizwesti izmeneniq
          L      =4
          IF  (MTSET(UNIT,SBLOK).NE.0) GOTO 999! soob}itx ih sisteme
          TYPE   102, UNIT, SBLOK              ! i raspe~atatx
   C
   C   prowesti prowerku s |hope~atx`, ispolxzuq MTIN & MTOUT
   C
   20     TYPE   103                           ! ob'qwitx prawila
          TYPE   104                           ! prowerok
          TYPE   105
   30     CALL   MTIN(UNIT,J)                  ! prinqtx stroku wwodA
          CALL   MTOUT(UNIT,J)                 ! prOweritx |hope~atx
          IF  (J.NE.10) GOTO 30                ! LF-konec stroki
          CALL   MTRCTO(UNIT)                  ! sbrositx <CTRL/O>

                                 - 278 -




   C
   C   prowerka raboty MTIN/MTOUT s wwedennym razrqdom TTSPC$
   C   i zatem o~istka razrqda
          IF  (SBLOK(1).AND."10000) GOTO 40     ! esli =1, to konec
          SBLOK(1)=SBLOK(1).DR."10000           ! ina~e ustanowitx i
          IF  (MTSET(UNIT,SBLOK).NE.0) GOTO 999 ! soob}itx sisteme
          IF  (IASW.NE.'Y') GOTO 60             ! prowerqtx ASW?
   C
   C   prowerka asinhronnogo slowa sostoqniq terminala (ASW)
   C
          TYPE   109                            ! ob'qwitx test
   50     IF  (ASW.AND..NOT."40000) GOTO 50     ! vdatx wwoda
   55     CALL   MTIN(UNIT,J)                   ! prinqtx znak
          CALL   MTOUT(UNIT,J)                  ! wywesti znak
          IF  (J.NE.10) GOTO 55                 ! ne konec stroki?
          CALL   MTRCTO(UNIT)                   ! sbrositx <CTRL/O>
   C
   C   prowerka MTPRNT wywodom dwuh strok
   C
   60     CALL   GTLIN(STRING,PROMPT)       ! prinqtx stroku po GTLIN
          CALL   MTPRNT(UNIT,STRING)        ! wywesti na terminal
          CALL   MTPRNT(UNIT,TEND)         ! ob'qwitx o konce prowerki
   C
   C   otkl`~itx terminal ot zadaniq i na~atx sna~ala
   C
          L      =9
          TYPE   109,UNIT                  ! otkl`~itx terminal
          IF  (MTDTCH(UNIT).EQ.0) GOTO 5   ! powtoritx ...
   C
   C   soob}enie ob o{ibke
   C
   999    TYPE   909,TESTM(L),IER          ! soob}itx o{ibku
          GOTO   5                         ! i na~atx sna~ala
   C
   99     FORMAT  ('0w sisteme',I3,'terminalow)
   100    FORMAT  ('$nomer prowerqemogo terminala?')
   101    FORMAT  (I2)
   102    FORMAT  ('0terminal',I3,'parametry=',408)
   103    FORMAT  ('0na~alo prOwerki. wwedite dwe stroki i <CR>')
   104    FORMAT  (' stroka 1: |ho-pe~atx + powtorenie ~erez MTOUT')
   105    FORMAT  (' stroka 2: |ho-pe~atx ~erez MTOUT')
   106    FORMAT  ('1 prowerka mnogoterminalxnyh programm SYSLIB')
   108    FORMAT  (' otkl`~aetsq terminal',I3)
   109    FORMAT  (' prowerka ASW - |ho wwoda + powtor')
   110    FORMAT  ('$prowerqtx rabotu ASW ?')
   111    FORMAT  (A1)
   909    FORMAT  ('0MT',A4,'kod o{ibki=',I3)
   C
          END
          SUBROUTINE SETUP (SBLOK,UNIT)
   C
   C  podprogramma polu~eniq nowogo slowa parametrow
   C
          INTEGER*2 SBLOK(4),UNIT
   C
          TYPE   100                         ! zapros, polu~enie i
          ACCEPT 101,J                       ! ustanowka nowogo
          IF  (J) SBLOK(1)=J                 ! slowa konfiguracii
          TYPE   102                         ! zapros i priem

                                 - 279 -




          ACCEPT 101,J                       ! simwola zapolnitelq
          TYPE   103                         ! i ego s~et~ika
          ACCEPT 101,I                       ! zanesenie w
          IF  (I.OR.J) SBLOK(3)=I*256+J      ! sootwetstwu`}ie bajty
   5      TYPE   104                         ! zapros, priem i
          ACCEPT 105,I                       ! ustanowka nowoj
          IF  (I) SBLOK(4)=SBLOK(4)/256*256+I! {iriny karetki
   C
   100    FORMAT  ('$maska razrqdow konfiguracii:')
   101    FORMAT  (06)
   102    FORMAT  ('$znak, trebu`}ij zapolnitelq:')
   103    FORMAT  ('$~islo zapolnitelej:')
   104    FORMAT  ('${irina karetki:')
   105    FORMAT  (I3)
   C
          END



       8.9.9. funkciq MTSTAT



       funkciq MTSTAT wozwra}aet w wyzywa`}u` programmu zna~eniq  para-
  metrow mnogoterminalxnoj sistemy. wozwra}aemye parametry  razme}a`tsq
  w wosxmislownom bloke.

       obra}enie k funkcii:

          I=MTSTAT(ADDR)

  gde

  ADDR   - adres wosxmislownogo massiwa, w kotoryj wozwra}a`tsq  zna~e-
           niq parametrow mnogoterminalxnoj  sistemy;  massiw  sodervit
           sledu`}u` informaci`:

           ADDR(1)
                - sme}enie ot bazy rezidenta monitora do perwogo  bloka
                  uprawleniq terminalom (TCB);

           ADDR(2)
                - sme}enie ot bazy rezidenta monitora do bloka uprawle-
                  niq terminalom, kotoryj qwlqetsq sistemnym  (konsolx-
                  nym) terminalom zadaniq;

           ADDR(3)
                - ~islo blokow uprawleniq terminalom w sisteme (ot 1 do
                  17, desqti~noe);

           ADDR(4)
                - ob'em bloka uprawleniq terminalom w bajtah;

           ADDR(5)-(8)
                - zarezerwirowano.

       rezulxtaty funkcii:

                                 - 280 -




       I=0 - oby~nyj wyhod iz funkcii;

       I=5 - w RT11XM; adres massiwa wne
             dopustimyh granic programmy.

       primer priweden w opisanii funkcii MTSET (sm. p. 8.9.8).





              9. ispolxzowanie ras{irennoj pamqti (RT11XM)




       ras{irennoj pamqtx` nazywa`t fizi~esku` pamqtx swy{e  28  kslow,
  kotoraq dostupna tolxko  pri  ispolxzowanii  specialxnyh  tehni~eskih
  sredstw.

       mlad{aq pamqtx - pamqtx ot 0 do 28 kslow.



       9.1. osnownye ponqtiq



       w dannom podrazdele predstawleno opisanie osobennostej ispolxzo-
  waniq ras{irennoj pamqti w RT11XM.



       9.1.1. 16-razrqdnaq adresaciq



       processory sm |wm mogut  neposredstwenno  adresowatx  32  kslow,
  t.k. arhitektura obespe~iwaet tolxko 16-razrqdnye adresa.

       w sm |wm bez  dispet~era  pamqti  (ne  ispolxzu`}ih  ras{irennu`
  pamqtx) star{ie 4 kslow adresnogo prostranstwa,  nazwannye  stranicej
  wwoda/wywoda, rezerwiru`tsq dlq registrow  wne{nih  ustrojstw.  takim
  obrazom, tolxko 28 kslow adresnogo prostranstwa dostupny dlq  ispolx-
  zowaniq programmnym obespe~eniem sistemy  i  programmami  w  ka~estwe
  operatiwnoj pamqti. w kompleksah ime`}ih 28 kslow pamqti wse 28 kslow
  dostupny.



       9.1.2. wirtualxnye i fizi~eskie adresa w kompleksah  (28
              kslow)



       wirtualxnyj adres - |to zna~enie w predelah ot 0 do 177777. |tot
  16-razrqdnyj adres raspoloven wnutri programmnogo 32 kslownogo adres-
  nogo prostranstwa.


                                 - 281 -




       fizi~eskij adres - |to dejstwitelxnyj apparatnyj  adres  oprede-
  lennoj q~ejki pamqti. on ne ograni~iwaetsq 16 razrqdami.

       na ris. 5 pokazana  swqzx  mevdu  prostranstwami  wirtualxnyh  i
  fizi~eskih adresow. sleduet imetx w widu, ~to esli  sistema  rabotaet
  pod uprawleniem RT11SJ ili RT11FB, to  wirtualxnye  adresa  polnostx`
  sootwetstwu`t fizi~eskim. naprimer,  wirtualxnyj  adres  20000  soot-
  wetstwuet fizi~eskomu adresu 20000.

                 wirtualxnye i fizi~eskie adresa
                  w sisteme s pamqtx` 28 kslow

          prostranstwo                prostranstwo
       wirtualxnyh adresow         fizi~eskih adresow
   32k -------------------     32k -------------------
       !                 !         !    stranica     !
       !                 !         !  wwoda/wywoda   !
       !                 !     28k !-----------------!
       !                 !         !                 !
       !                 !         !                 !
       !                 !         !                 !
       !                 !         !    dostupnaq    !
       !                 !         !     pamqtx      !
       !                 !         !                 !
       !                 !         !                 !
       !                 !         !                 !
       !                 !         !                 !
    4k ! 20000           !----> 4k ! 20000           !
       !                 !         !                 !
       !                 !         !                 !
     0 -------------------       0 -------------------

       16-razrqdnye adresa         16-razrqdnye adresa

                              ris. 5



       9.1.3. razmer programmy



       oby~no razmer programmy ne prewy{aet 28 Kslow. ~toby obojti  |to
  ograni~enie, ispolxzuetsq  dwa  sposoba.  perwyj  sposob,  nazywaemyj
  metodom cepo~ki, sostoit w tom, ~to odna programma wyzywaet drugu`  i
  peredaet ej uprawlenie; wtoraq programma obespe~iwaet  dopolnitelxnye
  operacii s dannymi, polu~ennymi iz perwoj programmy. naprimer,  prog-
  ramma MACRO transliruet ishodnu` programmu i peredaet uprawlenie  (po
  cepo~ke) programme CREF, kotoraq sozdaet listing perekrestnyh ssylok.
  dlq wypolneniq programmy, zanima`}ej bolx{e mesta, ~em  predostawlqe-
  maq pamqtx, neobhodimo razdelitx ee na dwe ili  bolx{e  funkcionalxno
  nezawisimyh ~astej, wypolnq`}ihsq po cepo~ke.

       wtoroj sposob wypolneniq programmy, trebu`}ej bolx{e mesta,  ~em
  imeetsq operatiwnoj pamqti, sostoit w razdelenii programmy  na  ower-
  lejnye segmenty. otdelxnye segmenty poo~eredno  mogut  zagruvatxsq  w
  odno i to ve mesto fizi~eskoj pamqti. ispolxzowanie  owerlejnyh  seg-
  mentow pozwolqet wypolnqtx o~enx  bolx{ie  programmy  w  srawnitelxno
  nebolx{oj fizi~eskoj pamqti.

                                 - 282 -




       w oboih slu~aqh (sposobah cepo~ki i owerleew) instrukcii i  dan-
  nye w otdelxnyh programmah ili segmentah ispolxzu`t  odinakowye  wir-
  tualxnye adresa i odinakowye q~ejki fizi~eskoj pamqti. programmy  ili
  segmenty, ne nahodq}iesq w pamqti, hranqtsq na wne{nem ustrojstwe.

       ris. 6 ill`striruet sposob cepo~ki, ris. 7 - ispolxzowanie ower-
  leew.

                   sposob cepo~ki

                 prostranstwo
              fizi~eskih adresow
          32k ------------------
              !    stranica    !
              !  wwoda/wywoda  !
          28k !----------------!           wne{nee
              !                !         zapomina`}ee
              !                !          ustrojstwo
              !     pamqtx     !        ---------------
              !                !    ----! programma 2 !
              !                !    !   ---------------
              !                !    !
              !                !    !
              !----------------!    !
              !                !    !
              !  programma 1   !<----
              !                !
              ------------------

  kogda programma 1 zawer{aetsq, ona wyzywaet programmu 2. programma  2
  ispolxzuet te ve wirtualxnye adresa i q~ejki fizi~eskoj pamqti, ~to i
  programma 1.

                             ris. 6

                                 - 283 -




                        sposob owerleew

              prostranstwo
           fizi~eskih adresow
       32k ------------------
           !    stranica    !
           !  wwoda/wywoda  !
       28k !----------------!                 wne{nee
           !                !               zapomina`}ee
           !                !                ustrojstwo
           !     pamqtx     !              ---------------
           !                !    ----------! segment 1   !
           !                !    !  -------! segment 2   !
           !                !    !  !  ----! segment 3   !
           !                !    !  !  !   ---------------
           !----------------!    !  !  !
           !   owerlejnaq   !<----  !  !
           !   oblastx 1    !<-------  !
           !                !<----------
           !----------------!
           !   kornewoj     !
           !   segment      !
           !                !
           ------------------

    pri wypolnenii programmy  segmenty 1, 2, 3 zagruva`tsq w
    owerlejnu` oblastx 1. wse segmenty ispolxzu`t odinakowye
    wirtualxnye adresa i q~ejki fizi~eskoj pamqti.

                             ris. 7



       9.1.4. 18-razrqdnaq adresaciq



       w sisteme imeetsq wozmovnostx dostupa bolee, ~em  k  32  kslowam
  pamqti s pomo}x` dispet~era pamqti,  kotoryj  pozwolqet  ispolxzowatx
  18-razrqdnye adresa o{. |to zna~it, ~to movno adresowatx do 124 kslow
  fizi~eskoj pamqti, pl`s 4 kslow stranicy wwoda/wywoda.

       wirtualxnye adresa programmy polxzowatelq wsegda  ograni~eny  16
  razrqdami, po|tomu prostranstwo wirtualxnyh adresow programmy ograni-
  ~eno 32 kslowami.

       18-razrqdnyj adres pozwolqet obra}atxsq k l`boj q~ejke ot  0  do
  128 kslow. w sisteme RT11XM, ime`}ej bolx{e 28 kslow pamqti, k  fizi-
  ~eskim   q~ejkam   obra}a`tsq   ~erez    ustrojstwo,    preobrazu`}ee
  16-razrqdnyj adres w 18(ili 22)-razrqdnyj. na ris. 8 pokazany  prost-
  ranstwa wirtualxnyh i fizi~eskih  adresow  w  sisteme  s  ras{irennoj
  pamqtx`.

                                 - 284 -




               wirtualxnye i fizi~eskie adresa
               w sisteme s ras{irennoj pamqtx`

                                          prostranstwo
                                       fizi~eskih adresow
                                  128k ------------------
                                       !    stranica    !
                                       !  wwoda/wywoda  !
                                  124k !----------------!
                                       !                !
                                       .                .
          prostranstwo                 .                .
       wirtualxnyh adresow             .                .
   32k ------------------              !                !
       !                !              !     pamqtx     !
       !                !              !                !
       !                !              !                !
       !                !              !                !
       !                !              !                !
       !                !              !                !
       !                !              !                !
       !                !              !                !
     0 ------------------            0 ------------------

      16-razrqdnye adresa             18-razrqdnye adresa
                            ris. 8

       o{ pozwolqet adresowatx do 128 kslow pamqti. |tu  zada~u  wypol-
  nqet ustrojstwo - dispet~er pamqti, a programmnoe obespe~enie  opera-
  cionnoj sistemy (RT11XM) ustanawliwaet sootwetstwie mevdu wirtualxny-
  mi adresami programmy i q~ejkami fizi~eskoj pamqti tak, ~to programma
  imeet dostup ko wsej pamqti.

       movno sdelatx sledu`}ie wywody:

         - kavdaq q~ejka pamqti  imeet  18-razrqdnyj  fizi~eskij  adres
           (fizi~eskih adresow bolx{e, ~em wirtualxnyh);

         - programma imeet dostup k  fizi~eskim  adresam  tolxko  posle
           otobraveniq wirtualxnyh adresow na fizi~eskie q~ejki;

         - ispolxzuq wirtualxnye adresa,  no  kavdyj  raz  s  razli~nym
           otobraveniem, programma movet imetx dostup ko wsej ime`}ejsq
           fizi~eskoj pamqti.

       w sistemah s ras{irennoj  pamqtx`  programmy  ne  ograni~eny  28
  kslow pamqti. odnako, oni ograni~eny 32 kslownoj  adresaciej.  oby~no
  bolx{ie programmy delqt na nebolx{ie segmenty, kak i w sistemah s  28
  kslow pamqti. w to wremq, kak instrukcii i dannye w otdelxnyh segmen-
  tah programmy ime`t odinakowye wirtualxnye adresa,  oni  mogut  imetx
  razli~nye fizi~eskie adresa.

       na ris. 9 pokazana programma, razdelennaq na tri owerlejnyh seg-
  menta. wse tri segmenta odnowremenno nahodqtsq w ras{irennoj  pamqti,
  no ime`t odni i te ve wirtualxnye adresa owerlejnoj oblasti 1.

                                 - 285 -




                                             prostranstwo
                                          fizi~eskih adresow
                                          .                .
                                          .                .
                                          .                .
                                          ------------------
                                          !                !
                                --------->!    segment 1   !
                                !         !                !
                                !         !----------------!
                                !         !                !
                                !-------->!    segment 2   !
          prostranstwo          !         !                !
      wirtualxnyh adresow       !         !----------------!
   32k ------------------       !         !                !
       !                !       !-------->!    segment 3   !
       !                !       !         !                !
       !                !       !         !----------------!
       !                !       !         !                !
       !                !       !         !                !
       !                !       !         !                !
       !                !       !         !                !
       !----------------!       !         !                !
       !   owerlejnaq   !--------         !                !
       !   oblastx  1   !                 !                !
       !----------------!                 !                !
       !    kornewoj    !                 !    kornewoj    !
       !    segment     !---------------->!    segment     !
       !                !                 !                !
     0 ------------------               0 ------------------
                                          .                .
                                          .                .
                                          .                .

     segmenty 1, 2, 3 raspoloveny w raznyh fizi~eskih adresah,
     no ispolxzu`t odin i tot ve nabor wirtualxnyh adresow.
                            ris. 9



       9.2. tehni~eskie sredstwa



       dlq raboty w RT11XM k konfiguracii tehni~eskih sredstw  pred'qw-
  lq`tsq sledu`}ie trebowaniq:

         - operatiwnaq pamqtx ne menee 32 kslow;

         - ras{irennyj nabor instrukcij (EIS);

         - nali~ie dispet~era pamqti.

       w |tom podrazdele rassmatriwaetsq dispet~er pamqti i  ego  funk-
  cii.

                                 - 286 -




       9.2.1. dispet~er pamqti



       osnowoj dlq  raboty  s  ras{irennoj  pamqtx`  w  sisteme  RT11XM
  qwlqetsq ustrojstwo -  dispet~er  pamqti  (dp).  RT11XM  podderviwaet
  minimalxnyj nabor funkcij dispet~era pamqti.

       osnownoj  funkciej  dispet~era  pamqti  qwlqetsq  preobrazowanie
  16-razrqdnogo  wirtualxnogo  adresa,  generiruemogo  processorom,   w
  18-razrqdnyj fizi~eskij adres. ris. 10 ill`striruet |tot process.


         preobrazowanie adresa dispet~erom pamqti

    15                 16 bitow                     0
    -------------------------------------------------
    !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
    -------------------------------------------------
    \                                               /
     \---------------------------------------------/
                         !
                         !
                         V
                  ----------------       -------------------
                  !   dispet~er  !       !  teku}aq        !
                  !    pamqti    !<------!  informaciq     !
                  !              !       !  otobraveniq    !
                  ----------------       -------------------
                         !
                         !
    17                   V                              0
    /---------------------------------------------------\
   /                                                     \
   -------------------------------------------------------
   !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
   -------------------------------------------------------
                         18 bitow

                          ris. 10



       9.2.2. ponqtie stranicy



       w sisteme s ras{irennoj pamqtx` wse 32 kslow  prostranstwa  wir-
  tualxnyh adresow delqtsq na 8 ~astej, kotorye nazywa`tsq  stranicami.
  kavdaq stranica na~inaetsq s adresa, kratnogo 4 kslowam, i numeru`tsq
  ot 0 do 7. stranicy razbity na  32-slownye  (desqti~noe)  bloki.  oni
  mogut imetx do 128 takih blokow, razmer stranicy movet menqtxsq ot  0
  do 4096 slow s {agom w 32 slowa.

       na ris. 11 pokazano prostranstwo wirtualxnyh adresow,  razdelen-
  noe na wosemx 4-kslownyh stranic.

                                 - 287 -




                          prostranstwo
                       wirtualxnyh adresow
                 32k  ---------------------
                      !    stranica 7     !
                 28k  !- - - - - - - - - -!  160000
                      !    stranica 6     !
                 24k  !- - - - - - - - - -!  140000
                      !    stranica 5     !
                 20k  !- - - - - - - - - -!  120000
                      !    stranica 4     !
                 16k  !- - - - - - - - - -!  100000
                      !    stranica 3     !
                 12k  !- - - - - - - - - -!   60000
                      !    stranica 2     !
                  8k  !- - - - - - - - - -!   40000
                      !    stranica 1     !
                  4k  !- - - - - - - - - -!   20000
                      !    stranica 0     !
                  0   ---------------------   0

                               ris. 11

       na ris. 12 pokazano prostranstwo wirtualxnyh adresow,  razdelen-
  noe na 5 stranic raznoj dliny.  za{trihowannye  oblasti  prostranstwa
  wirtualxnyh adresow ne qwlq`tsq ~astx` stranic i po|tomu ne dostupny.
  takim obrazom  korotkie  stranicy  qwlq`tsq  pri~inoj  promevutkow  w
  prostranstwe wirtualxnyh adresow.

                                 - 288 -




                       korotkie  stranicy

                          prostranstwo
                       wirtualxnyh adresow
                 32k  ---------------------
                      !///////////////////!
                      !    stranica 7     !
                      !                   !
                 28k  !- - - - - - - - - -!
                      !///////////////////!
                      !///////////////////!
                      !///////////////////!
                 24k  ! - - - - - - - - - !
                      !///////////////////!
                      !-------------------!
                      !    stranica 5     !
                 20k  !- - - - - - - - - -!
                      !///////////////////!
                      !///////////////////!
                      !///////////////////!
                 16k  ! - - - - - - - - - !
                      !///////////////////!
                      !-------------------!
                      !    stranica 3     !
                 12k  !- - - - - - - - - -!
                      !///////////////////!
                      !-------------------!
                      !    stranica 2     !
                  8k  !- - - - - - - - - -!
                      !///////////////////!
                      !///////////////////!
                      !///////////////////!
                  4k  ! - - - - - - - - - !
                      !///////////////////!
                      !    stranica 0     !
                      !                   !
                  0   ---------------------

                             ris. 12



       9.2.3. pereme}enie



       osnownoe   nazna~enie   dispet~era   pamqti   -   preobrazowanie
  16-razrqdnyh wirtualxnyh adresow  w  18-razrqdnye  fizi~eskie  adresa
  pamqti. takoe preobrazowanie osu}estwlqetsq putem pribawleniq k  wir-
  tualxnomu adresu konstanty pereme}eniq. raznye konstanty  pereme}eniq
  dlq odnogo i togo ve wirtualxnogo adresa obespe~iwa`t ego  preobrazo-
  wanie w raznye fizi~eskie adresa pamqti. dispet~er pamqti  pereme}aet
  wirtualxnye adresa postrani~no. on nazna~aet stranice  oblastx  fizi-
  ~eskoj pamqti, kotoraq na~inaetsq na granice 32 (desqti~noe) slow. na
  ris. 13 pokazano, kak dispet~er pamqti movet  pereme}atx  wirtualxnye
  adresa dwuh razli~nyh programm.

                                 - 289 -




                   pereme}enie programm

                        prostranstwo
                         fizi~eskih
                          adresow
                   124k -----------
                        !         !
                        .         .
                        .         .
                        .         .
                        !         !
      prostranstwo      !         !       prostranstwo
      wirtualxnyh       !         !       wirtualxnyh
        adresow         !         !         adresow
  32k -----------       !         !   32k -----------
      !         !       !         !       !         !
      !         !       !         !       !         !
      !- - - - -!   28k !- - - - -!       !- - - - -! 160000
      !         !       !---------!-----  !         !
      !         !       !         !    !  !         !
      !- - - - -!   24k !programma!    !  !- - - - -! 140000
      !         !       !    2    !    !  !         !
      !         !       !         !    !  !         !
      !- - - - -!   20k !---------!--- !  !- - - - -! 120000
      !         !       !         !  ! !  !         !
      !         !       !         !  ! !  !         !
      !- - - - -!   16k !- - - - -!  ! !  !- - - - -! 100000
      !         !   ----!---------!  ! !  !         !
      !         !  /    !         !  ! !  !         !
      !- - - - -! / 12k !- - - - -!  ! !  !- - - - -!  60000
  10k !---------!/      !programma!  ! !  !         !
      !         !       !    1    !  ! !  !         !
      !programma!    8k !- - - - -!  ! !  !- - - - -!  40000
      !    1    !       !         !  ! !--!---------!<---7k
      !         !       !         !  !    !programma!
      !- - - - -!   -4k-!---------!  !    !- - - - -!  20000
      !  (10k)  !  /    !         !  !    !    2    !
      !         ! /     !         !  !    !  (7k)   !
   0  -----------/   0  -----------  !-0-------------  0

                          ris. 13

  programma 1 pereme}aetsq na 20000 (wosxmeri~noe) q~eek. po|tomu, kog-
  da programma 1 obra}aetsq k adresu 0, w dejstwitelxnosti ona  polu~it
  dostup k q~ejke pamqti s adresom 20000.

       poskolxku dispet~er pamqti pereme}aet stranicy prostranstwa wir-
  tualxnyh adresow nezawisimo drug ot druga, to  programma  movet  bytx
  otobravena na nesmevnye u~astki fizi~eskoj pamqti,  kak  pokazano  na
  ris. 14.

                                 - 290 -




                    pereme}enie stranic
                                            prostranstwo
                                          fizi~eskih adresow
                                     124k --------------------
                                          !                  !
                                          .                  .
                                          .                  .
                                          .                  .
          prostranstwo                    !                  !
       wirtualxnyh adresow                !                  !
   32k --------------------               !                  !
       !                  !               !                  !
       !                  !               !                  !
       !                  !               !                  !
       !                  !      /--------!------------------!
       !                  !     /         !                  !
       !                  !    / /----16k-!------------------!
       !                  !   / /         !                  !
       !                  !  / /          !                  !
   12k !                  ! / / /-----12k-!------------------!
       !------------------!/ / /          !                  !
       !    stranica 2    ! / /           !                  !
    8k !------------------!/-/    /----8k-!------------------!
       !    stranica 1    !      /        !                  !
       !                  !     /         !                  !
    4k !------------------!----/-------4k-!------------------!
       !    stranica 0    !               !                  !
       !                  !               !                  !
     0 ---------------------------------0---------------------
           programma 1
                            ris. 14



       9.2.4. registr aktiwnyh stranic (ras)



       RT11XM uprawlqet dispet~erom pamqti ~erez tak nazywaemye regist-
  ry aktiwnyh  stranic  (ras),  adresa  kotoryh  nahodqtsq  w  stranice
  wwoda/wywoda. kavdyj ras  sostoit  iz  dwuh  16-razrqdnyh  registrow:
  registra adresa stranicy (ra) i registra opisaniq stranicy (ro).  |to
  pokazano na ris. 15.

                   registr aktiwnyh stranic

      15                       0 15                       0
     -------------------------------------------------------
     !          PA              !          Po              !
     -------------------------------------------------------
       registr adresa stranicy    registr opisaniq stranicy

                            ris. 15

       registry ra i ro wsegda dejstwu`t kak  edinoe  celoe.  nabor  iz
  wosxmi registrow aktiwnyh stranic sodervit ws` informaci`,  neobhodi-
  mu` dlq opisaniq i pereme}eniq wosxmi wirtualxnyh stranic. registr ro
  opisywaet otobravenie wirtualxnoj stranicy w pamqtx. registr ra  uka-
  zywaet mestonahovdenie w pamqti wirtualxnoj  stranicy.  wse  registry

                                 - 291 -




  ras numeru`tsq ot 0 do 7. dlq kavdoj stranicy imeetsq odin  ras,  kak
  pokazano na ris. 16.

              sootwetstwie mevdu stranicami i
                registrami aktiwnyh stranic

        prostranstwo
        wirtualxnyh
          adresow
   32k ----------------\
       !              ! \              -----------------------
       !  stranica 7  !  > ras 7 ----->!   PA 7   !   Po 7   !
       !              ! /              -----------------------
   28k !--------------!<
       !              ! \              -----------------------
       !  stranica 6  !  > ras 6 ----->!   PA 6   !   Po 6   !
       !              ! /              -----------------------
   24k !--------------!<
       !              ! \              -----------------------
       !  stranica 5  !  > ras 5 ----->!   PA 5   !   Po 5   !
       !              ! /              -----------------------
   20k !--------------!<
       !              ! \              -----------------------
       !  stranica 4  !  > ras 4 ----->!   PA 4   !   Po 4   !
       !              ! /              -----------------------
   16k !--------------!<
       !              ! \              -----------------------
       !  stranica 3  !  > ras 3 ----->!   PA 3   !   Po 3   !
       !              ! /              -----------------------
   12k !--------------!<
       !              ! \              -----------------------
       !  stranica 2  !  > ras 2 ----->!   PA 2   !   Po 2   !
       !              ! /              -----------------------
    8k !--------------!<
       !              ! \              -----------------------
       !  stranica 1  !  > ras 1 ----->!   PA 1   !   Po 1   !
       !              ! /              -----------------------
    4k !--------------!<
       !              ! \              -----------------------
       !  stranica 0  !  > ras 0 ----->!   PA 0   !   Po 0   !
       !              ! /              -----------------------
     0 ----------------/

                           ris. 16



       9.2.4.1. registr adresa stranicy (ra)



       razrqdy s 0 po 11 registra ra sodervat adres fizi~eskoj pamqti w
  32-slownyh (desqti~noe) blokah ili pole adresa stranicy  dlq  oprede-
  lennoj stranicy. na ris. 17 pokazano sodervimoe registra adresa stra-
  nicy. razrqdy s 12 po 15 zarezerwirowany.

                                 - 292 -




                  registr adresa stranicy (PA)

          15       12 11                                0
         ------------!-----!-----!-----!-----!-----!------
         !           !       pole  adresa  stranicy      !
         ------------!-----!-----!-----!-----!-----!------

                            ris. 17



       9.2.4.2. registr opisaniq stranicy (ro)



       registr opisaniq stranicy (ro) sodervit informaci` o naprawlenii
  ras{ireniq stranicy, o dline stranicy i sposobe dostupa k  nej.  ris.
  18 ill`striruet sodervimoe registra opisaniq stranicy (neispolxzuemye
  razrqdy registra zarezerwirowany).

                  registr opisaniq stranicy (Po)

          15 14                 8  7  6  5  4  3  2  1  0
         -------------------------------------------------
         !  !                    !  !  !     !  !     !  !
         -------------------------------------------------
                     pds             kz      nrs  pkd

                           ris. 18


       kak pokazano na |tom risunke, pole, otme~ennoe kak  pkd,  preds-
  tawlqet pole kontrolq dostupa. |to pole opisywaet kod dostupa k stra-
  nice i wozmovnostx prerywaniq teku}ej operacii w slu~ae  obra}eniq  k
  stranice. kody i ih zna~eniq mogut bytx sledu`}ie:

      kod                        zna~enie

       00            stranica ne rezidentna; l`baq popytka
                     obra}eniq k nej wyzowet prerywanie;

       01            stranica dostupna tolxko dlq ~teniq;
                     l`baq popytka zapisi wyzowet prerywanie
                     (RT11XM ne ispolxzuet |tot kod);

       10            l`baq popytka obra}eniq k stranice
                     wyzowet prerywanie (RT11XM
                     ne ispolxzuet |tot kod);

       11            stranica dostupna dlq zapisi i ~teniq.

       pole nrs - naprawlenie ras{ireniq stranicy. w |tom  pole  ukazy-
  waetsq naprawlenie, w kotorom movet ras{irqtsq stranica.  kody  i  ih
  zna~eniq sledu`}ie:

          kod                   zna~enie

          0        stranica ras{irqetsq k star{im adresam
                   pamqti (w RT11XM |to pole wsegda

                                 - 293 -




                   rawno nul`);

          1        stranica ras{irqetsq k mlad{im adresam
                   pamqti (w RT11XM |to zna~enie ne
                   ispolxzuetsq).

       pole kz qwlqetsq polem kontrolq zapisi w stranicu.  |tot  razrqd
  ukazywaet, byla li stranica modificirowana posle zagruzki ee w pamqtx
  (RT11XM ne ispolxzuet |tot razrqd).

       pole pds - razmer stranicy w blokah. ono sodervit dlinu stranicy
  w 32-slownyh blokah.



       9.2.5. preobrazowanie     16-razrqdnogo     adresa     w
              18-razrqdnyj



       informaciq, neobhodimaq  dispet~eru  pamqti  dlq  preobrazowaniq
  16-razrqdnogo wirtualxnogo adresa w  18-razrqdnyj  fizi~eskij  adres,
  nahoditsq w samom wirtualxnom adrese i w sootwetstwu`}em emu registre
  aktiwnyh stranic. na ris. 19 pokazany polq wirtualxnogo  adresa.  |ti
  polq, kotorye ispolxzuet dp, predstawlq`t  soboj  ~asti  wirtualxnogo
  adresa.

                    wirtualxnyj adres

        15    13 12                                   0
       ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---
       !        !                                      !
       ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---
         nomer            pereme}aemoe pole
          ras

                            ris. 19

       razrqdy 13-15 wirtualxnogo adresa sodervat nomer registra aktiw-
  nyh stranic. |to pole  opredelqet,  kakoj  registr  aktiwnyh  stranic
  budet ispolxzowatx dp pri formirowanii fizi~eskogo adresa.

       razrqdy s 0  po  12  wirtulxnogo  adresa  qwlq`tsq  pereme}aemym
  polem, kotoroe sodervit adres otnositelxno na~ala stranicy.

       ostalxnaq informaciq, neobhodimaq dlq sozdaniq fizi~eskogo adre-
  sa, sodervitsq w pole adresa stranicy sootwetstwu`}ego registra adre-
  sa stranicy. na ris. 20 pokazano, kak  dispet~er  pamqti  preobrazuet
  16-razrqdnyj wirtualxnyj adres w  18-razrqdnyj  fizi~eskij  adres.  w
  |tom primere registr adresa stranicy {estx sodervit wosxmeri~noe ~is-
  lo 5460, po|tomu wirtualxnyj adres 157746 preobrazuetsq w  fizi~eskij
  adres 565746.


                                 - 294 -




           formirowanie fizi~eskogo adresa dispet~erom pamqti


              15    13 12                 6 5               0
             ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---
      <1>    ! 1  1  0! 1  1  1  1  1  1  1! 1  0  0  1  1  0!
             ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---
             \-nomer-/ \------------------/ \----------------/
                ras             V                   V
                                !                   !-------
                   <2>          !----------------------    !
    15       12 11                                0   !    !
   ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---  !    !
   !           ! 1  0  1  1  0  0  1  1  0  0  0  0!  !    !
   ---!--!--!--!--!--!--!--!--!--!--!--!--!--!--!---  !    !
                \---------------------------------/   !    !
                            V                         !    !
                            +<-------------------------    !
                            !                     ---------!
                    <3>     !                     !
    17                      V         6    5      V        0
   ---!--!--!--!--!--!--!--!--!--!--!--!  !--!--!--!--!--!---
   ! 1  0  1  1  1  0  1  0  1  1  1  1!  ! 1  0  0  1  1  0!
   ---!--!--!--!--!--!--!--!--!--!--!--!  !--!--!--!--!--!---

          <1>   -  wirtualxnyj adres  (157746)
          <2>   -  6-j registr adresa stranicy (5460)
          <3>   -  fizi~eskij adres  (565746)

                          ris. 20

       kak widno iz risunka, razrqdy 13, 14 i  15  wirtualxnogo  adresa
  ukazywa`t, kakoj registr aktiwnyh stranic ispolxzuetsq. dp  dobawlqet
  zna~enie razrqdow s 6 po 12 wirtualxnogo adresa k razrqdam s 0 po  11
  sootwetstwu`}ego registra adresa stranicy (w dannom slu~ae  {estogo).
  dispet~er pamqti pome}aet rezulxtat |togo sloveniq w razrqdy s  6  po
  17 fizi~eskogo adresa. dp kopiruet razrqdy  s  0  po  5  wirtualxnogo
  adresa w razrqdy s 0 po 5 fizi~eskogo adresa, formiruq  okon~atelxnyj
  18-razrqdnyj fizi~eskij adres.



       9.2.6. registry sostoqniq dp



       dispet~er pamqti (dp) takve swqzan  s  monitorom  sistemy  dwumq
  specialxnymi registrami sostoqniq. registr sostoqniq  SR0  raspoloven
  na stranice wwoda/wywoda po adresu na o{ 777572 i sodervit flagi o{i-
  bok, bit razre{eniq raboty dispet~era pamqti i  drugu`  poleznu`  dlq
  sistemy informaci` obsluviwaniq  prerywaniq.  registr  sostoqniq  SR2
  (ego movno tolxko ~itatx),  ime`}ij  adres  na  o{  777576,  sodervit
  16-razrqdnyj wirtualxnyj adres, kotoryj dp w dannyj  moment  preobra-
  zuet w 18-razrqdnyj fizi~eskij adres (RT11XM  ne  ispolxzuet  registr
  sostoqniq SR2, odnako, w slu~ae o{ibki sistemy, movno proweritx  |tot
  registr).

                                 - 295 -




       9.2.7. sistemnyj i polxzowatelxskij revimy processora



       krome osnownoj funkcii otobraveniq prostranstwa adresow  sistema
  s dispet~erom pamqti dolvna  imetx  wozmovnostx  za}ity  monitora  ot
  programmy polxzowatelq. w kavdyj moment wremeni processor movet rabo-
  tatx w odnom iz dwuh revimow:  polxzowatelxskom  ili  sistemnom,  ~to
  pozwolqet otdelitx wypolnenie sistemnyh funkcij (sistemnyj revim)  ot
  prikladnyh (polxzowatelxskij revim).

       kavdomu revimu sootwetstwuet nabor iz wosxmi registrow  aktiwnyh
  stranic i swoj ukazatelx steka. sledowatelxno,  kavdyj  revim  delaet
  sootwetstwu`}ie nastrojki wirtualxnyh  adresow  na  fizi~eskie,  t.e.
  kavdyj revim imeet sobstwennoe otobravenie.

       na ris. 21 pokazano, kak zna~eniq w razrqdah 14  i  15  registra
  slowa sostoqniq processora opredelq`t, w kakom revime  rabotaet  pro-
  cessor.

       programmy,  kotorye  wypolnq`tsq  w  sistemnom  revime,   oby~no
  qwlq`tsq ~astx` programmnogo obespe~eniq sistemy i ne  dolvny  razru-
  {atxsq drugimi programmami. RT11XM ispolxzuet sistemnyj revim  raboty
  processora dlq rezidentnogo monitora i USR,  dlq  programm  obrabotki
  prerywanij i dlq drajwerow  ustrojstw,  wkl`~aq  programmy  obrabotki
  makrokomand .SYNCH i .FORK.

       prikladnye programmy oby~no wypolnq`tsq w polxzowatelxskom revi-
  me. im zapre}eno wypolnqtx instrukcii, kotorye mogut razru{itx  moni-
  tor ili ostanowitx processor.  naprimer,  w  polxzowatelxskom  revime
  instrukciq RESET wypolnqetsq kak instrukciq NOP,  a  instrukciq  HALT
  generiruet prerywanie po wektoru 10. RT11XM ispolxzuet polxzowatelxs-
  kij revim processora dlq interpretatora komand monitora, dlq  sistem-
  nyh programm, dlq prikladnyh programm i ih podprogramm zawer{eniq.

                                 - 296 -




                slowo sostoqniq processora i registry
                         aktiwnyh stranic

          15 14 13 12 11        8  7     5  4  3  2  1  0
         -------------------------------------------------
         !     !     !           !        ! T! N! Z! V! C!
         -------------------------------------------------
          \---/ \---/             \------/
            !     !                  !
            !     !                  !------> prioritet
            !     !
            !     !------------------> predydu}ij revim
            !
            !---------------------------> teku}ij revim

                   00 = sistemnyj revim
                   11 = polxzowatelxskij revim
                              /\
                             /  \
                            /    \
                           /      \
                          /        \
          sistemnyj (00)            polxzowatelxskij (11)
       ====================         ====================
       --------------------         --------------------
       !       ras 0      !         !       ras 0      !
       --------------------         --------------------
       !       Pas 1      !         !       ras 1      !
       --------------------         --------------------
       !       ras 2      !         !       ras 2      !
       --------------------         --------------------
       !       ras 3      !         !       ras 3      !
       --------------------         --------------------
       !       ras 4      !         !       ras 4      !
       --------------------         --------------------
       !       ras 5      !         !       ras 5      !
       --------------------         --------------------
       !       ras 6      !         !       ras 6      !
       --------------------         --------------------
       !       ras 7      !         !       ras 7      !
       --------------------         --------------------
                          ris. 21

       sistemnoe otobravenie ne obqzatelxno tovdestwenno polxzowatelxs-
  komu otobraveni`. naprimer, esli w polxzowatelxskom revime  wirtualx-
  nyj adres 20010 swqzan s fizi~eskim adresom 40210, to |to ne  zna~it,
  ~to w sistemnom revime wirtualxnyj adres 20010 takve otobravaetsq  na
  fizi~eskij adres 40210. w dejstwitelxnosti wirtualxnye adresa w  sis-
  temnom i polxzowatelxskom revimah  ~asto  otobrava`tsq  na  razli~nye
  u~astki fizi~eskoj pamqti. otobravenie polnostx` zawisit ot  sodervi-
  mogo registrow aktiwnyh stranic. takim obrazom, izmenenie revima pro-
  cessora s polxzowatelxskogo na sistemnyj imeet sledu`}ij smysl:  ssy-
  laqsx k odinakowym wirtualxnym adresam  w  razli~nyh  revimah,  movno
  zastawitx programmu obra}atxsq k  razli~nym  fizi~eskim  q~ejkam.  na
  ris. 22 pokazan primer, w kotorom wirtualxnyj  adres  0  w  sistemnom
  revime otobravaetsq na fizi~esku` q~ejku 0; w polxzowatelxskom revime
  wirtualxnyj adres otobravaetsq na fizi~esku` q~ejku  500.  |tu  shemu
  otobraveniq RT11XM ispolxzuet wo wremq zagruzki wirtualxnogo zadaniq.

                                 - 297 -




            otobravenie odinakowyh wirtualxnyh adresow
                   na raznye fizi~eskie q~ejki


                         prostranstwo
                      fizi~eskih adresow
                    124k -----------
                         !         !
                         !         !
        sistemnoe        !         !        polxzowatelxskoe
       prostranstwo      !         !            prostranstwo
       wirtualxnyh       !         !             wirtualxnyh
         adresow         !         !               adresow
   32k -----------       !         !         32k -----------
       !         !       !         !             !         !
       !         !       !         !             !         !
       !         !       !         !             !         !
       !         !       !         !             !         !
       !         !       !         !             !         !
       !         !       !         !             !         !
       !         !       !         !             !         !
    8k !         !    8k !         !          8k !         !
       !         !       !         !             !         !
       !         !       !---------!<-----\      !         !
       !         !       !/////////!       \     !         !
    4k !---------!----4k-!---------!        \-4k-!---------!
       !         !       !hhhhhhhhh!             !         !
       !         !---->  !---------!<-----\      !         !
       !         !       !/////////!       \     !         !
    0  ----------------0------------        \-0-------------

                          ris. 22





       9.2.8. otobravenie po umol~ani`



       otobravenie - |to  process,  swqzywa`}ij  wirtualxnye  adresa  s
  fizi~eskimi  q~ejkami.  RT11XM  uprawlqet  prostranstwom  wirtualxnyh
  adresow, otobravaq wirtualxnye adresa na fizi~eskie  q~ejki.  monitor
  zagruvaet nuvnye zna~eniq w registry aktiwnyh stranic  i  posredstwom
  |togo rukowodit dispet~erom pamqti.

       posle zagruzki sistemy otobraveniq sistemnogo i polxzowatelxsko-
  go revimow sowpada`t, t.e.  monitor  zanosit  odinakowye  zna~eniq  w
  nabory registrow  aktiwnyh  stranic  sistemnogo  i  polxzowatelxskogo
  revimow. w tabl. 12 priwedeny na~alxnye zna~eniq  registrow  aktiwnyh
  stranic. na ris. 23 pokazano otobravenie po  umol~ani`,  ispolxzu`}ee
  |ti zna~eniq. tabl. 13  ill`striruet  otobravenie  po  umol~ani`  dlq
  tipi~nogo wirtualxnogo fonowogo zadaniq w 4 kslow, kotoroe  ne  imeet
  owerleew w ras{irennoj pamqti i dopolnitelxnyh oblastej.

                                 - 298 -




                                                 tablica 12

                na~alxnoe sodervimoe ras w sistemnom
                    i polxzowatelxskom revimah
    -------------------------------------------------------
     stranica i !     sistemnyj     !   polxzowatelxskij
     nomer  ras !-------------------!----------------------
                !   PA    !   Po    !    PA    !    Po
    -------------------------------------------------------
          7     !   7600  !  77406  !   7600   !   77406
          6     !   1400  !  77406  !   1400   !   77406
          5     !   1200  !  77406  !   1200   !   77406
          4     !   1000  !  77406  !   1000   !   77406
          3     !    600  !  77406  !    600   !   77406
          2     !    400  !  77406  !    400   !   77406
          1     !    200  !  77406  !    200   !   77406
          0     !      0  !  77406  !      0   !   77406


                                 - 299 -




                 otobravenie posle zagruzki sistemy
                         (po umol~ani`)

                          prostranstwo
                           fizi~eskih
                            adresow
                           ----------
                           ! 777776 ! <----- stranica
                           ! 760000 !        wwoda/wywoda
                           !--------!
                           !        !
                sist.      .        .   polxz.
    zna-  stra- prost-wo   .        .   prost-wo stra- zna-
    ~enie nica  wirt-nyh   .        .   wirt-nyh nica  ~enie
     PA    PA   adresow    !        !   adresow   PA    PA
   ---------------------   !        !   ---------------------
   ! 7600 ! 7 ! 177776 !   !        !   ! 177776 ! 7 ! 7600 !
   !      !   ! 160000 !   !        !   ! 160000 !   !      !
   ---------------------   ----------   ---------------------
   ! 1400 ! 6 ! 157776 !   ! 157776 !   ! 157776 ! 6 ! 1400 !
   !      !   ! 140000 !-->! 140000 !<--! 140000 !   !      !
   ---------------------   ----------   ---------------------
   ! 1200 ! 5 ! 137776 !   ! 137776 !   ! 137776 ! 5 ! 1200 !
   !      !   ! 120000 !-->! 120000 !<--! 120000 !   !      !
   ---------------------   ----------   ---------------------
   ! 1000 ! 4 ! 117776 !   ! 117776 !   ! 117776 ! 4 ! 1000 !
   !      !   ! 100000 !-->! 100000 !<--! 100000 !   !      !
   ---------------------   ----------   ---------------------
   !  600 ! 3 !  77776 !   !  77776 !   !  77776 ! 3 !  600 !
   !      !   !  60000 !-->!  60000 !<--!  60000 !   !      !
   ---------------------   ----------   ---------------------
   !  400 ! 2 !  57776 !   !  57776 !   !  57776 ! 2 !  400 !
   !      !   !  40000 !-->!  40000 !<--!  40000 !   !      !
   ---------------------   ----------   ---------------------
   !  200 ! 1 !  37776 !   !  37776 !   !  37776 ! 1 !  200 !
   !      !   !  20000 !-->!  20000 !<--!  20000 !   !      !
   ---------------------   ----------   ---------------------
   !    0 ! 0 !  17776 !   !  17776 !   !  17776 ! 0 !    0 !
   !      !   !      0 !-->!      0 !<--!      0 !   !      !
   ---------------------   ----------   ---------------------
                        / \          / \
                         !            !
                         !            !
                     sistemnoe   polxzowatelxskoe
                    otobravenie    otobravenie

                             ris. 23

                                 - 300 -




                                        tablica 13

                na~alxnoe sodervimoe registrow
                   dlq wirtualxnogo zadaniq
               ----------------------------------
                stranica i !  polxzowatelxskij
                nomer rAs  !---------------------
                           !   PA    !    Po
               ----------------------------------
                     7     !    ?    !     0
                     6     !    ?    !     0
                     5     !    ?    !     0
                     4     !    ?    !     0
                     3     !    ?    !     0
                     2     !    ?    !     0
                     1     !    ?    !     0
                     0     !    5    !   77406



       9.3. programmnye koncepcii



       neobhodimo ispolxzowatx  specialxnyj  nabor  drajwerow,  kotorye
  mogut osu}estwlqtx swqzx mevdu periferijnymi ustrojstwami i ras{iren-
  noj pamqtx`. w sisteme s ras{irennoj pamqtx` wse  drajwery  ustrojstw
  dolvny bytx rezidentny w pamqti (zagruveny s pomo}x` komandy monitora
  LOAD). USR takve postoqnno rezidentna.



       9.3.1. raspredelenie pamqti



       ris. 24 ill`striruet razme}enie komponentow w sisteme  RT11XM  w
  fizi~eskoj pamqti (takoe  razme}enie  podobno  razme}eni`  w  sisteme
  RT11FB). posle zagruzki RT11XM drajwer sistemnogo ustrojstwa i  rezi-
  dentnyj monitor nahodqtsq nive  28  kslow,  t.k.  ras{irennaq  pamqtx
  (q~ejki mevdu 28 i 124 kslowami) ne ispolxzuetsq. drugie  zagruvEnnye
  drajwery nahodqtsq nive rezidentnogo monitora, zatem  sledu`t  opera-
  tiwnoe i sistemnye zadaniq, esli takie estx, i USR.

       rezidentnyj monitor rabotaet w  sistemnom  revime  processora  i
  imeet dostup k mlad{im 28 kslowam pamqti i k  stranice  wwoda/wywoda.
  USR wypolnqetsq w sistemnom revime i wsegda rezidentna w  pamqti  pri
  rabote RT11XM. interpretator komand monitora wypolnqetsq w  polxzowa-
  telxskom revime processora, no, kak priwilegirowannoe  fonowoe  zada-
  nie, on ispolxzuet to ve  otobravenie,  ~to  i  rezidentnyj  monitor.
  fizi~eskie q~ejki s 0 po 500 otwedeny dlq wektorow prerywanij.

                                 - 301 -




                          raspredelenie pamqti

                           prostranstwo
                        fizi~eskih adresow
                128k ------------------------
                     !       stranica       !
                     !     wwoda/wywoda     !
                124k !----------------------!
                     !                      !
                     .                      .
                     .                      .
                     .                      .
                     !                      !
                     !                      !
                 28k !----------------------!
                     !  drajwer sistemnogo  !
                     !      ustrojstwa      !
                     !----------------------!
                     ! rezidentnyj  monitor !
                     !        (RMON)        !
                     !----------------------!
                     !   drajwery  drugih   !
                     !       ustrojstw      !
                     !----------------------!
                     ! operatiwnoe  zadanie !
                     !----------------------!
                     !         USR          !
                     !----------------------!
                     ! interpretator komand !
                     !   monitora  (KMON)   !
                     !----------------------!
                     !                      !
                     !       oblastx        !
                     !   fonowogo zadaniq   !
                     !                      !
                     !----------------------!
                     !  wektory  prerywanij !
                     !----------------------!
                     !  sistemnaq  oblastx  !
                     !    swqzi (SYSCOM)    !
                     !----------------------!
                     !   wektory  lowu{ek   !
                   0 ------------------------

                             ris. 24



       9.3.2. programmnoe uprawlenie otobraveniem



       monitor imeet sredstwa, pri pomo}i kotoryh sistema i  prikladnye
  programmy uprawlq`t operaciqmi otobraveniq.  polxzowatel`  ne  obqza-
  telxno znatx, kak rabotaet dispet~er pamqti, t.k. w  dejstwitelxnosti
  polxzowatelxskie programmy ne  ime`t  dostupa  k  registram  aktiwnyh
  stranic i k registram sostoqniq dispet~era pamqti. oni swqzywa`tsq  s
  ras{irennoj pamqtx` ~erez monitor s pomo}x` makrokomand. |ti makroko-
  mandy zapomina`t ili modificiru`t informaci` w tablicah wnutri  prog-

                                 - 302 -




  rammy. osnowywaqsx na sodervimom |tih  tablic,  monitor  modificiruet
  swoi sobstwennye bloki uprawleniq dlq wypolneniq sootwetstwu`}ej ope-
  racii otobraveniq i zagruvaet skorrektirowannye zna~eniq  w  registry
  aktiwnyh stranic.

       dlq togo, ~toby imetx dostup  k  ras{irennoj  pamqti,  programma
  dolvna:

         - ukazatx monitoru trebuemyj razmer fizi~eskoj pamqti;

         - opisatx wirtualxnye adresa dlq monitora;

         - ukazatx monitoru na sootwetstwie  wirtualxnyh  i  fizi~eskih
           adresow, t.e. otobrazitx wirtualxnye  adresa  na  fizi~eskie
           q~ejki.

       fonowye, operatiwnye i sistemnye zadaniq ime`t  dostup  ko  wsej
  ras{irennoj pamqti posredstwom treh {agow, opisannyh wy{e. neobhodimo
  zametitx, ~to nikakoe iz zadanij ne movet zanimatx prostranstwo fizi-
  ~eskih adresow odnowremenno s drugim zadaniem.

       monitor i programmy ispolxzu`t opredelennye programmnye  ponqtiq
  (oblastx fizi~eskih adresow, wirtualxnoe adresnoe okno i prostranstwo
  logi~eskih adresow programmy)  dlq  opisaniq  wirtualxnyh  adresow  i
  fizi~eskih q~eek pamqti.



       9.3.2.1. oblastx fizi~eskih adresow



       programma, kotoroj trebuetsq dostup k ras{irennoj pamqti, dolvna
  peredatx monitoru opisanie q~eek fizi~eskoj pamqti, kotorye ona budet
  ispolxzowatx. programma osu}estwlqet |to, opredelqq  odnu  ili  bolee
  oblastej w ras{irennoj pamqti.

       oblastx fizi~eskih adresow - |to segment fizi~eskoj pamqti, sos-
  toq}ij iz smevnyh  32-slownyh  (desqti~noe)  blokow.  oblastx  dolvna
  na~inatxsq na 32-slownoj granice;  ona  movet  bytx  razmerom  do  96
  kslow. zadanie movet imetx odnowremenno do 4 oblastej. monitor  pris-
  waiwaet identifikacionnye nomera oblastqm wo wremq ih sozdaniq.  fak-
  ti~eski identifikator oblasti qwlqetsq ukazatelem na~ala bloka upraw-
  leniq oblastx` wnutri sme{annoj oblasti zadaniq. u~astki prostranstwa
  fizi~eskih adresow, kotorye ne qwlq`tsq ~astx` oblasti,  ne  dostupny
  programme. na ris. 25 dan primer deleniq pamqti na oblasti. neobhodi-
  mo zametitx, ~to dwa zadaniq w ras{irennoj pamqti ne  mogut  odnowre-
  menno zanimatx odnu oblastx fizi~eskih adresow.

                                 - 303 -




       prostranstwo fizi~eskih adresow, razdelennoe
                    na dwe oblasti

                     prostranstwo
                  fizi~eskih adresow
          128k ------------------------
               !                      !
          124k !----------------------!
               !   2-q oblastx (4k)   !
          120k !----------------------!
               !                      !
               .                      .
               .   1-q oblastx (92k)  .
               .                      .
               !                      !
           28k !----------------------!
               !                      !
               !                      !
               !                      !
               !                      !
               !                      !
               !                      !
               !                      !
               !                      !
               !                      !
             0 ------------------------

                         ris. 25

       informaciq ob oblasti fizi~eskih adresow sodervitsq w  trehslow-
  nom bloke programmy, nazwannom "blok opisaniq oblasti". monitor wybi-
  raet informaci` iz bloka opisaniq oblasti i hranit ee w drugom  wnut-
  rennem bloke, nazwannom "blok uprawleniq oblastx`".  blok  uprawleniq
  oblastx` nahoditsq w sme{annoj oblasti zadaniq.

   stati~eskaq oblastx
   -------------------

       perwaq oblastx, sozdawaemaq monitorom dlq  wirtualxnogo  zadaniq
  wo wremq zagruzki zadaniq, nazywaetsq  stati~eskoj  oblastx`.  razmer
  stati~eskoj oblasti razli~en, on zawisit  ot  razmera  programmy,  ot
  togo, qwlqetsq li programma fonowoj ili operatiwnoj,  no  stati~eskaq
  oblastx wsegda nahoditsq w mlad{ih 28 kslowah pamqti.  k  stati~eskoj
  oblasti movno ssylatxsq, ispolxzuq identifikator 0. programma polxzo-
  watelq ne movet ustranitx stati~esku` oblastx ili kakim-libo  obrazom
  izmenitx ee  (stati~eskaq  oblastx  otsutstwuet  w  priwilegirowannom
  zadanii).

   dinami~eskaq oblastx
   --------------------

       esli programme polxzowatelq trebuetsq bolx{e  pamqti,  ~em  bylo
  wydeleno wo wremq zagruzki, to ona movet sozdatx do treh dinami~eskih
  oblastej i zatem otobrazitx na nih wirtualxnye adresnye okna. dinami-
  ~eskaq oblastx - |to ~astx fizi~eskoj pamqti  paspolovennaq  wy{e  28
  kslow. stati~eskaq oblastx sozdaetsq monitorom, programma movet  soz-
  datx do treh dinami~eskih oblastej, a takve movet sozdatx i ustranitx
  l`bu` dinami~esku` oblastx.

                                 - 304 -




       9.3.2.2. wirtualxnoe adresnoe okno



       programma, kotoroj trebuetsq dostup k ras{irennoj pamqti, dolvna
  peredatx monitoru opisanie wirtualxnyh  adresow,  kotorye  ona  budet
  ispolxzowatx. togda kak monitor  ispolxzuet  ponqtie  stranic,  ~toby
  opisatx wirtualxnye adresa dlq dispet~era pamqti, programmy opisywa`t
  prostranstwo wirtualxnyh adresow dlq monitora, ispolxzuq  programmnoe
  ponqtie wirtualxnyh adresnyh okon.

       wirtualxnoe adresnoe okno - ~astx 32 kslownogo adresnogo  prost-
  ranstwa, sostoq}aq iz smevnyh 32-slownyh (desqti~noe)  blokow.  okno,
  podobno stranice, dolvno na~inatxsq na granice  4  kslow.  odnako,  w
  otli~ie ot stranicy, maksimalxnyj razmer kotoroj 4 kslow, okno  movet
  imetx razmer do 32 kslow i wme}atx odnu ili  bolx{e  stranic.  maksi-
  malxnoe ~islo wirtualxnyh adresnyh okon - wosemx, minimalxnoe - odno.
  kogda programma polxzowatelq sozdaet  okna,  monitor  priswaiwaet  im
  identifikacionnye nomera.

       nazna~enie okna - datx monitoru opisanie ~asti prostranstwa wir-
  tualxnyh adresow i, takim obrazom, pozwolitx  programme  ispolxzowatx
  |ti wirtualxnye adresa. okna ne mogut perekrywatx drug druga (zadanie
  movet opisatx nowoe okno, kotoroe perekrywaet  su}estwu`}ee;  prevnee
  okno udalqetsq, kogda sozdaetsq nowoe). ~asti prostranstwa  wirtualx-
  nyh adresow, kotorye ne qwlq`tsq ~astx` okna,  nedostupny  programme,
  esli zadanie ne  qwlqetsq  priwilegirowannym.  kavdoe  okno,  kotoroe
  menx{e 4 kslow, qwlqetsq pri~inoj  razrywa  prostranstwa  wirtualxnyh
  adresow programmy. esli programma obra}aetsq k  wirtualxnym  adresam,
  ne nahodq}imsq wnutri otobravennogo  okna,  to  woznikaet  o{ibka  dp
  (okno nelxzq ispolxzowatx do teh por, poka ono ne otobraveno).

       monitor movet swqzatx fizi~eskie adresa s wirtualxnymi adresami,
  kotorye nahodqtsq w predelah okna, wy~isliw nomer i razmer sootwetst-
  wu`}ih stranic i zagruziw |ti  zna~eniq  w  sootwetstwu`}ie  registry
  aktiwnyh stranic. ris. 26 demonstriruet, kak prostranstwo wirtualxnyh
  adresow movno razdelitx na okna.

                                 - 305 -




         prostranstwo wirtualxnyh adresow, razdelennoe
                        na tri okna

    nomer ra i     prostranstwo
     stranicy   wirtualxnyh adresow
    -------------------------------!----------
    !    7    !                    !
    !---------!--------------------!
    !    6    !                    !   3-e okno (12 kslow)
    !---------!--------------------!
    !    5    !                    !
    !---------!--------------------!----------
    !    4    !////////////////////!   nedostupnoe
    !---------!////////////////////!   prostranstwo adresow
    !    3    !--------------------!----------
    !---------!--------------------!   2-e okno (6 kslow)
    !    2    !                    !
    !---------!--------------------!----------
    !    1    !                    !
    !---------!--------------------!   1-e okno (8 kslow)
    !    0    !                    !
    -------------------------------!----------
                          ris. 26

       informaciq o wirtualxnom adresnom okne nahoditsq  w  semislownom
  bloke programmy polxzowatelq, nazwannom blok opisaniq  okna.  monitor
  wybiraet informaci` iz bloka opisaniq okna i hranit ee w drugom wnut-
  rennem bloke - bloke uprawleniq oknom. blok uprawleniq oknom razme}en
  w sme{annoj oblasti programmy.

   stati~eskoe okno
   ----------------

       perwoe okno, sozdawaemoe monitorom dlq wirtualxnogo  zadaniq  wo
  wremq ego zagruzki, nazywaetsq stati~eskim  oknom.  stati~eskoe  okno
  na~inaetsq s wirtualxnogo adresa 0, i ego razmer rawen razmeru  bazo-
  wogo segmenta programmy polxzowatelq. stati~eskoe okno sodervit  kor-
  newoj segment  programmy  polxzowatelq,  stek,  wirtualxnye  wektory,
  drajwer owerleew i owerlei mlad{ej pamqti. instrukcii, dannye i bufe-
  ry mogut nahoditxsq w owerleqh ili buferah  ras{irennoj  pamqti;  oni
  sodervatsq w raznyh oknah i oblastqh. movno obra}atxsq k stati~eskomu
  oknu, ispolxzuq identifikator 0. programma polxzowatelq ne movet ust-
  ranitx stati~eskoe okno ili  izmenitx  ego  otobravenie  (stati~eskoe
  okno otsutstwuet w priwilegirowannom zadanii).

   dinami~eskoe okno
   -----------------

       esli programme polxzowatelq trebuetsq pamqti bolx{e, ~em wydele-
  no wo wremq zagruzki, ona movet sozdatx odno ili  bolee  dinami~eskih
  okon i otobrazitx ih wirtualxnye adresa  na  fizi~eskie.  stati~eskoe
  okno sozdaetsq monitorom, a programma movet sozdatx do  semi  dinami-
  ~eskih okon. programma movet sozdatx, ustranitx, otobrazitx i  pereo-
  tobrazitx l`boe dinami~eskoe okno.

                                 - 306 -




       9.3.2.3. prostranstwo logi~eskih adresow programmy (PLAS)



       prostranstwo logi~eskih adresow programmy (PLAS)  -  |to  prost-
  ranstwo fizi~eskih adresow, dostupnoe programme w rezulxtate operacij
  otobraveniq. t.e. wse fizi~eskie q~ejki, kotorye zakl`~eny w oblasti,
  mogut bytx dostupny programme w rezulxtate  operacij  otobraveniq  i,
  takim obrazom, qwlq`tsq ~astx` ee prostranstwa logi~eskih adresow.



       9.3.3. dwa wida otobraveniq



       dlq zadanij, rabota`}ih s ras{irennoj pamqtx`, imeetsq dwa  wida
  otobraveniq: wirtualxnoe i priwilegirowannoe. nive  opisany  zadaniq,
  kotorye wypolnq`tsq s wirtualxnym i s priwilegirowannym  otobraveniq-
  mi.



       9.3.3.1. wirtualxnye zadaniq



       wirtualxnye zadaniq - zadaniq, kotorye wypolnq`tsq s wirtualxnym
  otobraveniem w polxzowatelxskom revime processora. wirtualxnye  zada-
  niq ne ispolxzu`t sistemnyj  revim  processora;  wirtualxnye  fonowye
  zadaniq zagruva`tsq w pamqtx so sme}eniem 500. wirtualxnye zadaniq ne
  mogut  zagruvatxsq  wy{e  USR,  rezidentnogo  monitora  ili  stranicy
  wwoda/wywoda. wirtualxnoe otobravenie qwlqetsq predpo~titelxnym otob-
  raveniem dlq zadaniq, kotoroe ne trebuet priwilegirowannogo dostupa k
  oblasti wektorow, monitoru  ili  stranice  wwoda/wywoda,  t.k.  takoe
  otobravenie za}i}aet |ti sistemnye oblasti ot wirtualxnyh zadanij.

       perwye 500 bajtow kavdogo wirtualxnogo zadaniq qwlq`tsq oblastx`
  ego wirtualxnyh wektorow i sistemnoj oblastx` swqzi (SYSCOM).  stati-
  ~eskoe okno wkl`~aet wirtualxnye  adresa  programmy  ot  wirtualxnogo
  adresa 0 do ee werhnej granicy. razmer stati~eskoj  oblasti  peremen-
  nyj, on zawisit ot razmera zadaniq i ot togo, qwlqetsq li wirtualxnoe
  zadanie fonowym ili operatiwnym.

       posle zagruzki wirtualxnoe zadanie polu~aet dostup tolxko k wir-
  tualxnym adresam wnutri granic samoj programmy, a  takve  k  adresam,
  otobravennym na fizi~esku` pamqtx. odnako, wirtualxnoe zadanie  movet
  polxzowatxsq l`bym ostaw{imsq prostranstwom wirtualxnyh adresow mevdu
  swoej werhnej granicej i 32-kslownoj granicej adresow. ono movet soz-
  datx odnu ili neskolxko oblastej w ras{irennoj pamqti i odno ili nes-
  kolxko wirtualxnyh adresnyh okon. zatem otobrazitx okno na oblastx i,
  takim obrazom, polu~itx dostup k ras{irennoj pamqti. esli wirtualxnoe
  zadanie otmenqet otobravenie okna, to ono ne movet  polxzowatxsq  ego
  wirtualxnymi adresami do teh por, poka  ne  pereotobrazit  |to  okno.
  wirtualxnoe zadanie movet takve ispolxzowatx  sistemnu`  makrokomandu
  ras{irennoj pamqti .SETTOP ili owerlei ras{irennoj pamqti.

   wybor wirtualxnogo otobraveniq
   ------------------------------

                                 - 307 -




       ~toby ukazatx, ~to zadanie polxzuetsq wirtualxnym  otobraveniem,
  nuvno pered zagruzkoj zadaniq ustanowitx bit 10 slowa sostoqniq zada-
  niq (JSW). esli zadanie dolvno  bytx  wsegda  wirtualxnym,  to  nuvno
  ustanowitx bit 10 wo wremq assemblirowaniq.  dlq  |togo  ispolxzu`tsq
  sledu`}ie instrukcii:

          .ASECT
          .=44
          .WORD 2000
          .PSECT

  polxzuqsx sistemnoj programmoj SIPP, movno takve izmenitx  q~ejku  44
  zadaniq (|to werno dlq fajlow s tipom .SAV, .REL) pered  ego  zagruz-
  koj.


       pRIME^ANIE. nelxzq izmenqtx bit 10 w  JSW  wo  wremq  wypolneniq
  programmy, t.k. rezulxtat budet nepredskazuemym.

   wirtualxnoe fonowoe zadanie
   ---------------------------

       dlq zapuska wirtualxnogo fonowogo zadaniq  ispolxzuetsq  komanda
  monitora R. fajl dolven imetx tip .SAV. wirtualxnoe  fonowoe  zadanie
  zagruvaetsq w pamqtx s fizi~eskogo  adresa  500.  star{ij  fizi~eskij
  adres zadaniq rawen razmeru (w wosxmeri~nom wide) programmy pl`s 500.


       stati~eskaq oblastx wirtualxnogo fonowogo zadaniq  na~inaetsq  s
  fizi~eskogo adresa 500 i ras{irqetsq do nivnego adresa USR. |to  pre-
  dotwra}aet dostup wirtualxnogo fonowogo zadaniq w fizi~esku`  oblastx
  wektorow, nahodq}u`sq mevdu q~ejkami 0 i 500. takim obrazom,  wektory
  za}i}eny ot wirtualxnogo zadaniq. na ris. 27 pokazano otobravenie dlq
  fonowogo zadaniq. ris. 28 ill`striruet, kak wirtualxnoe fonowoe zada-
  nie movet otobrazitx okno na stati~esku` oblastx dlq dostupa k pamqti
  nive USR.

                                 - 308 -




                 wirtualxnoe fonowoe zadanie
                                          prostranstwo
                                       fizi~eskih adresow
                                   128k -----------------
                                        ! stranica w/w  !
                                   124k !---------------!
                                        !               !
                                        !               !
                                        .               .
          prostranstwo                  .               .
       wirtualxnyh adresow              !               !
    32k -----------------               !               !
        !               !               !               !
        !               !           28k !---------------!
        !               !               !    drajwer    !
        !               !               !   sistemnogo  !
        !|ti wirtualxnye!               !   ustrojstwa  !
        !adresa dostupny!               !---------------!
        !zadani` posle  !               !  rezidentnyj  !
        !operacij       !               ! monitor (RMON)!
        !otobraveniq    !               !---------------!
        !               !               !drajwery drugih!
        !               !               !   ustrojstw   !
        !               !               !---------------!
        !               !               !      USR      !
        !               !               !---------------!----
        !               !               !   swobodnoe   ! s
        !               !               !  prostranstwo ! t
        !               !  /----------->!---------------! a
        !               ! /             !               ! t
    ----!---------------!/              !               ! i
    s   !               !               !               ! ~
    t   !               !               !    fonowoe    ! e
    a   !               !               !    zadanie    ! s o
    t   !    fonowoe    !    ------>    !               ! k b
    i   !    zadanie    !  otobravenie  !- - - - - - - -! a l
    ~   !               !               !     stek      ! q a
    e   !- - - - - - - -!               !- - - - - - - -!   s
    s o !     stek      !               !  wirtualxnye  !   t
    k k !- - - - - - - -!               !    wektory    !   x
    o n !  wirtualxnye  !  /-------500->!---------------!----
    e o !   wektory     ! /             !    wektory    !
    -0-------------------/            0 -----------------

                             ris. 27

                                 - 309 -




           otobravenie wirtualxnogo fonowogo zadaniq
                    na stati~esku` oblastx

                                          prostranstwo
                                       fizi~eskih adresow
                                   128k -----------------
                                        ! stranica w/w  !
                                   124k !---------------!
                                        !               !
                                        !               !
                                        .               .
          prostranstwo                  .               .
       wirtualxnyh adresow              !               !
    32k -----------------\              !               !
        ! dinami~eskoe  ! \             !               !
        !    okno       !  \        28k !---------------!
        !---------------!\  \           !    drajwer    !
        !               ! \  \          !   sistemnogo  !
        !               !  \  \         !   ustrojstwa  !
        !|ti wirtualxnye!   !  \        !---------------!
        !adresa dostupny!   ! o \       !  rezidentnyj  !
        !zadani` posle  !   ! t  \      ! monitor (RMON)!
        !operacij       !   ! o   \     !---------------!
        !otobraveniq    !   ! b    !    !drajwery drugih!
        !               !   ! r    !    !   ustrojstw   !
        !               !   ! a    !    !---------------!
        !               !   ! v    !    !      USR      !
        !               !   ! e    \--->!---------------!----
        !               !    \ n i e    !   swobodnoe   ! s
        !               !     \         ! prostranstwo  ! t
        !               !      >------->!---------------! a
        !               !     /         !               ! t
    ----!---------------!----/          !               ! i
    s   !               !               !               ! ~
    t   !               !               !    fonowoe    ! e
    a   !               !               !    zadanie    ! s o
    t   !    fonowoe    !    ------>    !               ! k b
    i   !    zadanie    !  otobravenie  !- - - - - - - -! a l
    ~   !               !               !     stek      ! q a
    e   !- - - - - - - -!               !- - - - - - - -!   s
    s o !     stek      !               !  wirtualxnye  !   t
    k k !- - - - - - - -!               !    wektory    !   x
    o n !  wirtualxnye  !  /-------500->!---------------!----
    e o !    wektory    ! /             !    wektory    !
    -0-------------------/            0 -----------------

                             ris. 28

   wirtualxnoe operatiwnoe ili sistemnoe zadaniq
   ---------------------------------------------

       dlq  zapuska  wirtualxnogo  operatiwnogo  zadaniq   ispolxzuetsq
  komanda monitora FRUN, dlq wirtualxnogo sistemnogo  zadaniq  -  SRUN.
  |ti zadaniq dolvny imetx tip fajla .REL. poskolxku wirtualxnye opera-
  tiwnye zadaniq ne trebu`t nastrojki  na  fizi~eskie  adresa,  komandy
  FRUN ili SRUN movno ispolxzowatx i dlq wirtualxnogo zadaniq  s  tipom
  fajla .SAV. fajly tipa .SAV zanima`t na diske menx{e mesta, ~em fajly
  tipa .REL i zagruva`tsq w pamqtx bystree.


                                 - 310 -




       zagruvennoe operatiwnoe  zadanie  ispolxzuet  fizi~eskie  q~ejki
  nive poslednego zagruvennogo drajwera  ili  predydu}ego  zagruvennogo
  sistemnogo zadaniq. esli neobhodimo, USR w  pamqti  sdwigaetsq  nive,
  ~toby razmestitx operatiwnoe zadanie. po umol~ani` operatiwnoe  zada-
  nie komponuetsq s bazowogo adresa 1000 (esli ono ne imeet tip  .SAV);
  ego wirtualxnye adresa ot 0 do 500 qwlq`tsq oblastx` wirtualxnyh wek-
  torow i sistemnoj oblastx` swqzi. kak  i  dlq  fonowogo  wirtualxnogo
  zadaniq stati~eskoe okno na~inaetsq s wirtualxnogo adresa 0 i  zakan-
  ~iwaetsq u werhnej granicy  operatiwnogo  zadaniq,  imeq  prira}enie,
  kratnoe 32 slowam.

       stati~eskaq oblastx na~inaetsq s wirtualxnogo adresa 0 i  zakan-
  ~iwaetsq u werhnej fizi~eskoj granicy  programmy.  sme{annaq  oblastx
  operatiwnogo zadaniq razme}ena w fizi~eskoj  pamqti  nive  programmy,
  kak pokazano na ris. 29. odnako wirtualxnyh adresow, otobravaemyh  na
  sme{annu` oblastx, net, po|tomu wirtualxnoe  operatiwnoe  zadanie  ne
  imeet dostupa k sodervimomu sme{annoj oblasti. w rezulxtate sme{annaq
  oblastx  za}i}ena  ot  wirtualxnogo  operatiwnogo  zadaniq.  ris.  29
  ill`striruet otobravenie dlq wirtualxnogo operatiwnogo ili sistemnogo
  zadaniq.

                                 - 311 -




       wirtualxnoe operatiwnoe ili sistemnoe zadanie

                                           prostranstwo
                                        fizi~eskih adresow
                                    128k -----------------
                                         ! stranica w/w  !
                                    124k !---------------!
                                         !               !
                                         !               !
                                         .               .
          prostranstwo                   .               .
       wirtualxnyh adresow               !               !
    32k -----------------                !               !
        !               !                !               !
        !               !            28k !---------------!
        !               !                !   drajwer     !
        !               !                !  sistemnogo   !
        !|ti wirtualxnye!                !  ustrojstwa   !
        !adresa dostupny!                !---------------!
        !zadani` posle  !                !  rezidentnyj  !
        !operacij       !                ! monitor (RMON)!
        !otobraveniq    !                !---------------!
        !               !                !drajwery drugih!
        !               !                !   ustrojstw   !
        !               !       /------->!---------------!----
        !               !      /         !  operatiwnoe  ! s
        !               !     /          !    zadanie    ! t
        !               !    /    n i e  !- - - - - - - -! a
        !               !   /    e       !     stek      ! t
        !               !  /    v        !- - - - - - - -! i
        !               ! /    a         !  wirtualxnye  ! ~
    ----!---------------!/    r          !    wektory    ! e
    s   !               !    b      /--->!---------------! s
    t   !               !   o      /     !  sme{annaq    ! k
    a   !  operatiwnoe  !  t      /      !   oblastx     ! a
    t   !    zadanie    ! o      /       !---------------! q
    i   !               !       /        !      USR      !   o
    ~   !               !      /         !               !   b
    e   !- - - - - - - -!     /          !---------------!   l
    s o !     stek      !    /           !   swobodnoe   !   a
    k k !- - - - - - - -!   /            ! prostranstwo  !   s
    o n !  wirtualxnye  !  /         500 !---------------!   t
    e o !    wektory    ! /              !    wektory    !   x
    -0-------------------/             0 ---------------------
                             ris. 29



       9.3.3.2. priwilegirowannye zadaniq



       po umol~ani` otobravenie w  RT11XM  -  priwilegirowannoe.  ~toby
  ukazatx, ~to zadanie priwilegirowannoe,  bit  10  w  slowe  sostoqniq
  zadaniq dolven bytx rawen nul`. priwilegirowannoe zadanie,  wypolnq`-
  }eesq w RT11XM, pohove na zadanie, rabota`}ee pod uprawleniem  RT11SJ
  ili RT11FB. priwilegirowannoe zadanie movet imetx dostup k mlad{im 28
  kslowam pamqti i k stranice  wwoda/wywoda.  wse  sistemnye  programmy
  wypolnq`tsq kak priwilegirowannye.

                                 - 312 -




       priwilegirowannye zadaniq (podobno wirtualxnym zadaniqm)  wypol-
  nq`tsq w polxzowatelxskom revime processora. odnako, monitor kopiruet
  sodervimoe sistemnyh registrow aktiwnyh  stranic  (ras)  w  polxzowa-
  telxskie. takim obrazom, otobravenie po umol~ani` dlq priwilegirowan-
  nyh zadanij - sistemnoe otobravenie.

       dlq priwilegirowannyh zadanij dostupny wse 32 kslow prostranstwa
  wirtualxnyh adresow krome prostranstwa, zanqtogo komponentami  opera-
  cionnoj sistemy: stranicej wwoda/wywoda i - w slu~ae  priwilegirowan-
  nogo operatiwnogo ili sistemnogo zadaniq - fonowym zadaniem ili KMON.
  priwilegirowannoe zadanie movet izmenitx  otobravenie  po  umol~ani`,
  ispolxzuq owerlei ras{irennoj pamqti i makrokomandy. naprimer,  prog-
  ramma, kotoroj trebuetsq dostup k  stranice  wwoda/wywoda  tolxko  na
  korotkoe wremq, movet qwno otobrazitx  stranicu  wwoda/wywoda,  ~toby
  ispolxzowatx ee.

       neobhodimo zametitx, ~to ponqtiq "stati~eskoe okno" i "stati~es-
  kaq oblastx" dlq priwilegirowannyh zadanij  ne  primenq`tsq.  odnako,
  odno okno i odna oblastx zarezerwirowany monitorom. po|tomu, priwile-
  girowannye zadaniq ime`t semx dinami~eskih okon  i  tri  dinami~eskie
  oblasti, kak i wirtualxnye zadaniq.

       kogda priwilegirowannoe zadanie sozdaet okno i wypolnqet  makro-
  komandy otobraveniq,  priwilegirowannoe  otobravenie,  polu~ennoe  po
  umol~ani` dlq prostranstwa wirtualxnyh adresow, wremenno  otmenqetsq.
  monitor otobravaet okno na nowu` oblastx pamqti, ispolxzuq sodervimoe
  wnutrennego bloka uprawleniq oknom.

       kogda priwilegirowannoe zadanie otmenqet otobravenie okna, moni-
  tor pereotobravaet  |to  prostranstwo  wirtualxnyh  adresow  soglasno
  naboru sistemnyh registrow aktiwnyh stranic. |to otli~aet ego ot wir-
  tualxnogo zadaniq, otmenq`}ego otobravenie okna.

       tak kak programmy obrabotki prerywanij wypolnq`tsq  w  sistemnom
  revime, priwilegirowannye zadaniq, soderva}ie polxzowatelxskie  prog-
  rammy obrabotki prerywanij, ne dolvny izmenqtx  otobravenie  programm
  obrabotki prerywanij, stranicu  wwoda/wywoda  ili  ~asti  monitora  w
  te~enie perioda, wo wremq kotorogo mogut wozniknutx prerywaniq. moni-
  tor u~itywaet tot fakt, ~to sistemnyj i polxzowatelxskij revimy iden-
  ti~ny, kogda on obsluviwaet polxzowatelxskie programmy obrabotki pre-
  rywanij.

   priwilegirowannoe fonowoe zadanie
   ---------------------------------

       dlq zapuska  priwilegirowannogo  fonowogo  zadaniq  ispolxzu`tsq
  komandy monitora R ili RUN. ris. 30 ill`striruet otobravenie dlq pri-
  wilegirowannogo fonowogo zadaniq.

                                 - 313 -




               priwilegirowannoe fonowoe zadanie

                                          prostranstwo
                                       fizi~eskih adresow
                             /--------->----------------- 128k
                            /           !   stranica    !
                           / a v e n i e! wwoda/wywoda  !
         prostranstwo     / r/--------->!---------------! 124k
      wirtualxnyh adresow/ b/           !               !
   32k -----------------/ o/            .               .
       !               ! t/             .               .
       !               !o/              !               !
   28k !---------------!/-------------->!---------------!  28k
       !               !                !    drajwer    !
       !               !                !   sistemnogo  !
       !               !                !   ustrojstwa  !
       !               !                !---------------!
       !               !                !  rezidentnyj  !
       !               !                ! monitor (RMON)!
       !               !                !---------------!
       !               !                !drajwery drugih!
       !               !                !   ustrojstw   !
       !               !                !---------------!
       !               !    ------>     !      USR      !
       !               !  otobravenie   !---------------!
       !               !                !               !
       !               !                !               !
       !---------------!                !---------------!
       !               !                !               !
       !               !                !               !
       !    fonowoe    !                !    fonowoe    !
       !    zadanie    !                !    zadanie    !
       !               !                !               !
       !- - - - - - - -!                !- - - - - - - -!
       !     stek      !                !     stek      !
       !- - - - - - - -!                !- - - - - - - -!
       !               !                !    wektory    !
     0 -------------------------------->----------------- 0

                          ris. 30

   priwilegirowannoe operatiwnoe ili sistemnoe zadanie
   ---------------------------------------------------

       dlq zapuska priwilegirowannogo operatiwnogo zadaniq ispolxzuetsq
  komanda monitora  FRUN,  dlq  zapuska  priwilegirowannogo  sistemnogo
  zadaniq ispolxzuetsq komanda SRUN. ris. 31  ill`striruet  otobravenie
  dlq priwilegirowannogo operatiwnogo ili sistemnogo zadaniq.

                                 - 314 -




            priwilegirowannoe operatiwnoe ili
                    sistemnoe zadanie

                                          prostranstwo
                                       fizi~eskih adresow
                             /--------->----------------- 128k
                            /           !   stranica    !
                           / a v e n i e! wwoda/wywoda  !
          prostranstwo    / r/--------->!---------------! 124k
      wirtualxnyh adresow/ b/           !               !
   32k -----------------/ o/            .               .
       !               ! t/             .               .
       !               !o/              !               !
   28k !---------------!/-------------->!---------------!  28k
       !               !                !   drajwer     !
       !               !                !  sistemnogo   !
       !               !                !  ustrojstwa   !
       !               !                !---------------!
       !               !                !  rezidentnyj  !
       !               !                ! monitor (RMON)!
       !               !                !---------------!
       !               !                !drajwery drugih!
       !               !                !   ustrojstw   !
       !---------------!                !---------------!
       !               !                !               !
       !               !                !               !
       !  operatiwnoe  !                !  operatiwnoe  !
       !    zadanie    !                !    zadanie    !
       !               !    ------>     !               !
       !- - - - - - - -!  otobravenie   !- - - - - - - -!
       !     stek      !                !     stek      !
       !---------------!                !---------------!
       !               !                !   sme{annaq   !
       !               !                !    oblastx    !
       !               !                !---------------!
       !               !                !      USR      !
       !               !                !---------------!
       !               !                !   swobodnoe   !
       !               !                ! prostranstwo  !
       !               !                !---------------!
       !               !                !    wektory    !
     0 -------------------------------->----------------- 0

                       ris. 31



       9.3.3.3. razli~iq mevdu  wirtualxnym  i  priwilegirowannym
                zadaniqmi



       w tabl. 14 predstawleny razli~iq, su}estwu`}ie mevdu wirtualxnym
  i priwilegirowannym zadaniqmi.

                                 - 315 -




                                                  tablica 14

      srawnenie wirtualxnogo i priwilegirowannogo zadanij
   ----------------------------------------------------------
    harakteristika !     wirtualxnoe     ! priwilegirowannoe
                   !       zadanie       !      zadanie
   ----------------------------------------------------------
   zna~enie bita   ! 1                   ! 0
   10 w JSW        !                     !
                   !                     !
   perwona~alxnoe  ! dostupny tolxko wir-! 32 kslow. dostupny
   koli~estwo dos- ! tualxnye     adresa ! mlad{ie  28  kslow
   tupnogo prost-  ! wnutri granic samoj ! pamqti pl`s  stra-
   ranstwa adresow ! programmy           ! nica  wwoda/wywoda
                   !                     !
   koli~estwo      ! 32  kslow.  sozdaet ! 32   kslow.   esli
   potencialxnogo  ! okno  dlq  opisaniq ! nekotoraq    ~astx
   prostranstwa    ! wirtualxnyh adresow ! prostranstwa  wir-
   adresow         ! mevdu swoej werhnej ! tualxnyh   adresow
                   ! granicej i granicej ! uve   ispolxzuetsq
                   ! w 32 kslow          ! (naprimer, fonowym
                   !                     ! zadaniem), zadanie
                   !                     ! movet     otmenitx
                   !                     ! otobravenie i  pe-
                   !                     ! reotobrazitx   ad-
                   !                     ! resa w pamqtx wy{e
                   !                     ! 28 kslow. program-
                   !                     ! ma obrabotki  pre-
                   !                     ! rywaniq     dolvna
                   !                     ! wsegda  nahoditxsq
                   !                     ! w otobravaemoj ~a-
                   !                     ! sti  polxzowatelx-
                   !                     ! skogo prostranstwa
                   !                     !
   preimu}estwa    ! obespe~iwaet za}itu ! srawnimo s zadaniq-
                   ! programnogo obespe- ! mi rabota`}imi  pod
                   ! ~eniq  operacionnoj ! uprawleniem
                   ! sistemy  i   drugih ! RT11SJ ili
                   ! programm; zanimaet  ! RT11FB
                   ! minimum  fizi~eskoj !
                   ! pamqti w otli~ie ot !
                   ! drugih zadanij      !

                                 - 316 -




                                       prodolvenie tabl. 14

      srawnenie wirtualxnogo i priwilegirowannogo zadanij
   ----------------------------------------------------------
    harakteristika !     wirtualxnoe     ! priwilegirowannoe
                   !       zadanie       !      zadanie
   ----------------------------------------------------------
                   !                     !
   startowye       ! fonowoe zadanie:    !  fonowoe zadanie:
   procedury       !         R           !      R/RUN
                   !      (.SAV)         !     (.SAV)
                   ! operatiwnoe zadanie:!operatiwnoe zadanie:
                   !     FRUN/SRUN       !    FRUN/SRUN
                   !    (.REL, .SAV;     !      (.REL)
                   ! dlq .SAV- rekomendu-!
                   ! etsq)               !
                   !                     !
   stati~eskoe     ! ras{irqetsq ot wir- ! net -
   okno            ! tualxnogo adresa 0  ! wse dinami~eskie
                   ! programmy    do  ee !
                   ! werhnej granicy     !
                   !                     !
   stati~eskaq     ! fonowoe zadanie:    ! net -
   oblastx         ! ras{irqetsq ot fizi-! wse dinami~eskie
                   ! ~eskogo adresa  500 !
                   ! do  nivnego  adresa !
                   ! USR;                !
                   ! operatiwnoe zadanie:!
                   ! ras{irqetsq ot fizi-!
                   ! ~eskogo adresa 0 do !
                   ! werhnej granicy za- !
                   ! daniq               !
                   !                     !
   wozmovnoe ~islo ! 7 pl`s stati~eskoe  ! 7 (1 okno
   okon            ! okno                ! zarezerwirowano)
                   !                     !
   wozmovnoe ~islo ! 3 pl`s stati~eskaq  ! 3 (1 oblastx
   oblastej        ! oblastx             ! zarezerwirowana)



       9.3.3.4. perekl`~enie mevdu zadaniqmi



       esli w sisteme RT11XM, ime`}ej bolee odnogo zadaniq, nowoe zada-
  nie zame}aet wypolnqemoe w dannyj moment, monitor sohranqet zawisq}u`
  ot zadaniq informaci`  i  wosstanawliwaet  ee,  kogda  perwona~alxnoe
  zadanie snowa zagruvaetsq dlq wypolneniq.  |ta  procedura  nazywaetsq
  perekl`~eniem konteksta.

       pri rabote pod uprawleniem RT11XM kavdoe zadanie  qwlqetsq  libo
  wirtualxnym, libo priwilegirowannym. sledowatelxno,  monitoru  priho-
  ditsq wypolnqtx dopolnitelxnu` rabotu po perekl`~eni` konteksta.

       kogda monitor perekl`~aetsq s  teku}ego  zadaniq,  on  sohranqet
  neobhodimu` informaci`. odnako, monitor nikogda ne sohranqet sodervi-
  moe registrow aktiwnyh stranic, kotorye ispolxzowalo teku}ee zadanie.
  po |toj  pri~ine  programma  polxzowatelq  ne  dolvna  manipulirowatx

                                 - 317 -




  neposredstwenno registrami dispet~era pamqti; ih sodervimoe  terqetsq
  wo wremq perekl`~eniq konteksta. monitor takve  ignoriruet  sistemnu`
  makrokomandu .CNTXSW, esli ona wstre~aetsq w wirtualxnom zadanii. pri
  perekl`~enii sohranqetsq wse zadanie, i, w l`bom slu~ae, wirtualxnomu
  zadani` ne razre{en dostup w oblastx wektorow.

       kogda monitor perekl`~aetsq na nowoe zadanie,  on  predpolagaet,
  ~to nowoe zadanie - priwilegirowannoe.  monitor  kopiruet  sodervimoe
  sistemnyh registrow otobraveniq w  polxzowatelxskie  registry.  zatem
  zadanie movet polu~itx dostup k mlad{im 28 kslow pamqti i k  stranice
  wwoda/wywoda. dalee, monitor prowerqet,  qwlqetsq  li  nowoe  zadanie
  KMON. esli |to tak, to wypolnenie prodolvaetsq bez dalxnej{ej modifi-
  kacii.

       esli nowoe zadanie qwlqetsq priwilegirowannym, monitor prowerqet
  bloki uprawleniq oknami i oblastqmi, nahodq}iesq w sme{annoj  oblasti
  zadaniq. esli zadanie opredelilo i otobrazilo odno ili bolee okon, to
  monitor wosstanawliwaet otobravenie, osnowywaqsx na sodervimom  wnut-
  rennih blokow uprawleniq, tem samym wosstanawliwaq  priwilegirowannoe
  otobravenie po umol~ani` dlq |tih okon.

       esli nowoe zadanie - wirtualxnoe, to monitor  o~i}aet  polxzowa-
  telxskie registry otobraveniq. zatem on prosmatriwaet bloki  uprawle-
  niq oknami i oblastqmi,  nahodq}iesq  w  sme{annoj  oblasti.  monitor
  otobravaet tolxko tu ~astx prostranstwa wirtualxnyh adresow  zadaniq,
  kotoraq byla opredelena oknom i otobravena na oblastx pered  perekl`-
  ~eniem zadanij.  l`baq  popytka  ispolxzowatx  neotobravennye  adresa
  wyzowet o{ibku dispet~era pamqti. neotobravennye u~astki prostranstwa
  wirtualxnyh adresow osta`tsq neispolxzuemymi, poka wirtualxnoe  zada-
  nie qwno ne otobrazit ih.



       9.4. tipi~noe primenenie ras{irennoj pamqti



       pri izu~enii sledu`}ih punktow predpolagaetsq, ~to  polxzowatelx
  uve razobralsq w osnownyh ponqtiqh sistemy s ras{irennoj pamqtx`.



       9.4.1. owerlei ras{irennoj pamqti



       mlad{ie 28 kslow pamqti zanqty rezidentnym monitorom, drajwerami
  ustrojstw, USR, operatiwnym  zadaniem,  odnim  ili  bolee  sistemnymi
  zadaniqmi i fonowym zadaniem.  dlq  optimizacii  ispolxzowaniq  |togo
  prostranstwa, neobhodimo delatx kornewye segmenty fonowogo, operatiw-
  nogo i sistemnyh zadanij (esli oni ime`t owerlei) kak movno menx{e.

       |lementy o~eredi, kanaly, programmy obrabotki prerywanij (w wir-
  tualxnom zadanii ih net) i instrukcii JMP pome}a`t w perwyj  owerlej.
  dlq uweli~eniq skorosti wypolneniq  rekomenduetsq  delatx  owerlejnye
  segmenty postoqnno rezidentnymi w ras{irennoj pamqti. krome togo, wse
  programmy dela`t wirtualxnymi zadaniqmi, esli oni ne trebu`t  dostupa
  k monitoru ili k stranice wwoda/wywoda.


                                 - 318 -




       polxzowatelx movet ispolxzowatx kl`~ /V komponow}ika dlq zagruz-
  ki owerlejnyh segmentow w ras{irennu` pamqtx. KMON wo wremq  zagruzki
  zadaniq sozdaet oblastx, ispolxzuq informaci` iz drajwera  perekrytij
  i tablic. drajwer perekrytij sozdaet i otobravaet okna.  na  ris.  32
  pokazan primer  wirtualxnoj  fonowoj  programmy,  kotoraq  ispolxzuet
  owerlei ras{irennoj pamqti. detalxnaq informaciq ob  owerleqh  ras{i-
  rennoj pamqti priwedena w opisanii sistemnoj programmy LINK.

                                 - 319 -




            wirtualxnoe fonowoe zadanie s owerleqmi
                     w ras{irennoj pamqti

                                         prostranstwo
                                      fizi~eskih adresow
                                       ----------------- 128k
                                       !   stranica    !
                                       !  wwoda/wywoda !
                                       !---------------! 124k
                                       !               !
                                       !---------------!----
                                       !  owerlejnyj   ! d
                                       !   segment 4   ! i
                                       !---------------! n
                                       !  owerlejnyj   ! a
                                       !   segment 3   ! m o
                                    /->!---------------! i b
                                    !  !  owerlejnyj   ! ~ l
                                   /   !   segment 2   ! e a
                                  /    !---------------! s s
         prostranstwo            /     !  owerlejnyj   ! k t
      wirtualxnyh adresow       /      !   segment 1   ! a x
   32k -----------------       /     ->!---------------!-q--
       !               !      /     /  !               !
       !               !     /     /   .               .
       !               !    /     /    .               .
       !               !   /     /     !               !
       !               !  /     /      !---------------! 28k
       !               ! /     /       !  komponenty   !
   ----!---------------!/     /        !    sistemy    !
       !               !     /         !---------------!----
       !  owerlejnaq   !    /          !               ! s
   <1> !   oblastx 1   !   /           !               ! t
       ! ras{irennoj   !  /            !               ! a
       !    pamqti     ! /             !               ! t
   ----!---------------!/    /-------->!---------------! i
       !               !    /          !    kornewoj   ! ~
   ----!---------------!---/           !    segment    ! e
   s   !    kornewoj   !               !---------------! s
   t   !    segment    !               !    drajwer    ! k
   a   !---------------!               !  owerleew i   ! a o
   t   !    drajwer    !               !    tablicy    ! q b
   i   !  owerleew i   !               !---------------!   l
   ~   !    tablicy    !               !     stek      !   a
   e   !---------------!               !---------------!   s
   s o !     stek      !               !  wirtualxnye  !   t
   k k !---------------!               !    wektory    !   x
   o n !  wirtualxnye  !     /-------->!---------------!-500-
   e o !    wektory    !    /          !    wektory    !
   ------------------------/           -----------------

        <1> - dinami~eskoe okno na 4-kslownoj granice

                          ris. 32


                                 - 320 -




       9.4.2. bolx{ie bufery ili massiwy dannyh  w  ras{irennoj
              pamqti



       dlq togo, ~toby razmestitx bolx{oj bufer  ili  massiw  dannyh  w
  ras{irennoj  pamqti,  wo-perwyh,  nuvno  sozdatx  dostato~no  bolx{u`
  oblastx, kotoraq by wme}ala massiw dannyh. wo-wtoryh, re{itx, skolxko
  prostranstwa wirtualxnyh adresow programmy predostawitx massiwu  dan-
  nyh i sozdatx sootwetstwu`}ee po razmeru wirtualxnoe  adresnoe  okno.
  zatem napisatx podprogrammu, kotoraq perewodila by ssylki  k  massiwu
  dannyh w instrukcii, ~toby pereotobrazitx  okno  w  podhodq}u`  ~astx
  oblasti. ris. 33 ill`striruet |tu  situaci`  (sistemnaq  makrokomanda
  ras{irennoj pamqti .SETTOP movet awtomati~eski sozdatx bufer w ras{i-
  rennoj pamqti).

                                 - 321 -




             wirtualxnoe fonowoe zadanie s massiwom
                      w ras{irennoj pamqti

                                         prostranstwo
                                      fizi~eskih adresow
                                       ----------------- 128k
                                       !   stranica    !
                    konec              !  wwoda/wywoda !
                    massiwow --------->!----------124k-!----
                                       !               !
                                       !               !
                                       !---------------!
                    na~alo             !               ! <2>
                    massiwow --\       !               !
                              /-\----->!---------------!
                             /   \     !               !
                            /     \    !               !
          prostranstwo     /  /----\-->!----------112k-!----
       wirtualxnyh adresow/  /         !               !
    32k -----------------/  /          .               .
        ! dinami~eskoe  !  /           .               .
        !     okno      ! /            !               !
    28k !---------------!/             !---------------! 28k
        !               !              !               !
        !      ne       !              !   komponenty  !
        ! otobravaetsq  !              !    sistemy    !
        !               !              !               !
        !               !              !---------------!----
        !               !              !               ! s
        !               !              !               ! t
        !               !  /---------->!---------------! a
        !               ! /            !    fonowoe    ! t o
    ----!---------------!/             !    zadanie    ! i b
        !    fonowoe    !              !- - - - - - - -! ~ l
        !    zadanie    !              !     stek      ! e a
        !- - - - - - - -!              !---------------! s s
    <1> !     stek      !              !  wirtualxnye  ! k t
        !---------------!              !    wektory    ! a x
        !  wirtualxnye  !  /---------->!-----------500-!-q--
        !    wektory    ! /            !    wektory    !
    --0------------------/             ----------------- 0

           <1> - stati~eskoe     okno
           <2> - dinami~eskaq oblastx

                          ris. 33



       9.4.3. mnogopolxzowatelxskaq programma



       sistema s ras{irennoj pamqtx` - idealxnyj instrument dlq  sozda-
  niq mnogopolxzowatelxskih programm. naprimer, movno sozdatx  qzykowyj
  interpritator, kotoryj mogut ispolxzowatx odnowremenno  rqd  program-
  mistow. dlq |togo neobhodimo razdelitx programmu na dwe sekcii:  sek-
  ci`, kotoraq sodervit instrukcii samogo  interpritatora  i,  otdelxno
  dlq kavdogo  polxzowatelq,  rabo~u`  oblastx  ~teniq/zapisi.  wybratx

                                 - 322 -




  u~astok  prostranstwa  wirtualxnyh  adresow,  kotoryj  budet  sbornoj
  oblastx` polxzowatelq, i sozdatx okno nuvnogo razmera. dalee  re{itx,
  skolxko budet polxzowatelej, i sozdatx oblastx, razmer kotoroj  rawen
  proizwedeni` ~isla polxzowatelej na razmer okna. interpritator  movet
  izmenqtx kontekst polxzowatelq, pereotobraziw okno. na ris. 34  poka-
  zana mnogopolxzowatelxskaq programma.

       mnogopolxzowatelxskaq programma movet ispolxzowatx owerlei  ras-
  {irennoj pamqti. w |tom slu~ae odna oblastx ispolxzuetsq dlq owerleew
  i odna - dlq rabo~ih oblastej.

      mnogopolxzowatelxskaq wirtualxnaq fonowaq programma

                                         prostranstwo
                                      fizi~eskih adresow
                                       ----------------- 128k
                                       !   stranica    !
                                       !  wwoda/wywoda !
                                       !---------------!
                                       .               .
                                       .               .
                                       !---------------!-d--
                                       ! polxzowatelx  ! i
                                       !      #4       ! n
                               /------>!---------------! a
                              /        ! polxzowatelx  ! m
                             /         !      #3       ! i o
                            /  /------>!---------------! ~ b
          prostranstwo     /  /        ! polxzowatelx  ! e l
       wirtualxnyh adresow/  /         !      #2       ! s a
   -32k------------------/  /          !---------------! k s
        !rabo~aq oblastx!  /           ! polxzowatelx  ! a t
    <1> ! polxzowatelq  ! /            !      #1       ! q x
    ----!---------------!/             !---------------!-28k-
        !               !              !               !
        !               !              !               !
        !               !              !  komponenty   !
        !      ne       !              !    sistemy    !
        ! otobravaetsq  !              !               !
        !               !              !---------------!-s--
        !               !              !               ! t
        !               !  /---------->!---------------! a
        !               ! /            !    ~istyj     ! t o
    ----!---------------!/             !     kod       ! i b
        !  instrukcii   !              !- - - - - - - -! ~ l
        !interpretatora !              !     stek      ! e a
        !- - - - - - - -!              !---------------! s s
    <2> !     stek      !              !  wirtualxnye  ! k t
        !---------------!              !    wektory    ! a x
        !  wirtualxnye  !  /---------->!-----------500-!-q--
        !    wektory    ! /            !    wektory    !
    --0------------------/             ----------------- 0

             <1> - dinami~eskoe okno
             <2> - stati~eskoe  okno

                          ris. 34

                                 - 323 -




       9.4.4. rabo~aq oblastx w ras{irennoj pamqti



       ras{irennaq pamqtx movet primenqtxsq takve dlq razme}eniq w  nej
  rabo~ej oblasti. w RT11SJ(FB) fonowoe zadanie movet polu~itx dopolni-
  telxnoe prostranstwo dlq dinami~eskoj buferizacii pri pomo}i makroko-
  mandy .SETTOP. operatiwnoe  zadanie  polu~aet  dopolnitelxnoe  prost-
  ranstwo takve s pomo}x` makrokomandy .SETTOP, no w  |tom  slu~ae  ono
  dolvno bytx zagruveno komandoj monitora FRUN/BUFFER:N. w  oboih  slu-
  ~aqh dopolnitelxnoe prostranstwo razme}aetsq w mlad{ih 28 kslow pamq-
  ti.

       w sisteme RT11XM dopolnitelxnoe  prostranstwo  movet  nahoditxsq
  kak wy{e, tak i nive 28 kslow. |to pozwolqet wypolnqtx zadaniq, koto-
  rye newozmovno wypolnitx w sisteme bez dispet~era pamqti. wozmovnostx
  polu~itx dopolnitelxnoe prostranstwo naibolee polezna dlq wirtualxnyh
  zadanij, potomu ~to oni mogut polu~itx prostranstwo  do  wirtualxnogo
  adresa 177776 (32 kslow), ispolxzuq ras{irennu` makrokomandu .SETTOP.
  wsq pamqtx, polu~ennaq makrokomandoj .SETTOP, nahoditsq w ras{irennoj
  pamqti. pri |tom wirtualxnye operatiwnye zadaniq dlq polu~eniq dopol-
  nitelxnogo prostranstwa ne trebu`t komandy FRUN/BUFFER:N.


       pRIME^ANIE. dlq bolee kratkoj formy izloveniq w dokumente prinq-
  to, ~to makrokomanda .SETTOP, rabota`}aq s  ras{irennoj  pamqtx`  pod
  uprawleniem RT11XM, nazywaetsq  "ras{irennoj  makrokomandoj  .SETTOP"
  (ili ".SETTOP dlq RT11XM"). dlq makrokomandy .SETTOP, ne rabota`}ej s
  ras{irennoj  pamqtx`,  ispolxzuetsq  termin   "oby~naq   makrokomanda
  .SETTOP" (ili "makrokomanda .SETTOP"). |to ve otnositsq i k direktiwe
  .LIMIT.



       9.4.4.1. ispolxzowanie .SETTOP w RT11XM



       sistemnaq makrokomanda  .SETTOP  pod  uprawleniem  RT11XM  movet
  wypolnqtxsq po raznomu. esli programma imeet owerlejnu` strukturu, to
  dlq sozdaniq  perekrytij  ras{irennoj  pamqti  makrokomandoj  .SETTOP
  ispolxzuetsq kl`~ /V komponow}ika. |to takve pozwolit RT11XM  ispolx-
  zowatx direktiwu .LIMIT (opisannu` nive), swqzatx drajwer  perekrytij
  ras{irennoj pamqti (VHANDL) s zagruzo~nym modulem i ustanowitx struk-
  turu owerleew ras{irennoj pamqti. kl`~  /V  ispolxzuetsq  s  komandoj
  monitora LINK/PROMPT.

       esli programma ne imeet owerleew  ili  imeet  owerlei  tolxko  w
  mlad{ej pamqti, kotorye sozdany kl`~om /O komponow}ika, to  dlq  pod-
  dervki RT11XM makrokomandy .SETTOP, neobhodimo  ispolxzowatx  komandu
  LINK/XM. kl`~ /XM podderviwaet  ras{irennye  makrokomandu  .SETTOP  i
  direktiwu makroassemblera .LIMIT. on ne swqzywaet drajwer  perekrytij
  ras{irennoj pamqti s zagruzo~nym modulem i ne ustanawliwaet strukturu
  owerleew ras{irennoj pamqti dlq programmy.

       oby~no direktiwa .LIMIT wozwra}aet w star{em slowe adres sledu`-
  }ej dostupnoj dlq programmy q~ejki. dopolnitelxnoe  prostranstwo  dlq
  programmy, polu~ennoe s pomo}x` .SETTOP dlq ras{irennoj pamqti, wseg-
  da na~inaetsq s wosxmeri~nogo adresa, wozwra}ennogo direktiwoj .LIMIT

                                 - 324 -




  w star{em slowe. |to sprawedliwo  dlq  wseh  programm  nezawisimo  ot
  togo, podderviwaet li RT11XM  ras{irennu`  makrokomandu  .SETTOP  ili
  net.



       9.4.4.2. werhnie granicy programmy



       dlq ponimaniq ras{irennoj makrokomandy .SETTOP wavno ponqtx raz-
  li~iq mevdu werhnej granicej programmy, wirtualxnoj werhnej  granicej
  i sledu`}im swobodnym adresom. na ris. 35 pokazano prostranstwo  wir-
  tualxnyh adresow programmy. |ta programma  imeet  owerlei  w  mlad{ej
  pamqti i owerlei w ras{irennoj pamqti, sozdannye sootwetstwenno  kl`-
  ~om /O i kl`~om /V komponow}ika.  werhnqq  granica  programmy  -  |to
  star{ij wirtualxnyj adres, ispolxzuemyj kornewym segmentom  programmy
  i ee owerlejnymi oblastqmi (/O) w  mlad{ej  pamqti,  esli  oni  estx.
  werhnqq wirtualxnaq granica - |to star{ij wirtualxnyj adres,  ispolx-
  zuemyj owerlejnymi oblastqmi  (/V)  ras{irennoj  pamqti,  kratnyj  32
  (desqti~noe) slowam minus 2 (w wosxmeri~nom wide dwe  cifry  mlad{ego
  porqdka adresa wsegda 76). |to zna~enie pe~ataetsq w  karte  zagruzki
  kak NNNNNN i pokazano w sledu`}em primere:

   VIRTUAL HIGH ADDRESS = NNNNNN = DDDDD.WORDS,
                                NEXT FREE ADDRESS = MMMMM


       zna~enie sledu`}ego swobodnogo adresa (ssa) wy~islqet  komponow-
  }ik.  dlq  zadaniq,  kotoroe  ispolxzuet   ras{irennu`   makrokomandu
  .SETTOP, on okruglqet werhn`` wirtualxnu` granicu, delaq ee kratnoj 4
  kslow. w |tom slu~ae, sledu`}ij swobodnyj adres - |to poslednee slowo
  prostranstwa wirtualxnyh adresow, opisywaemoe star{im registrom adre-
  sa stranicy, ispolxzuemogo zadaniem, pl`s 2. on wsegda na  granice  4
  kslow (w wosxmeri~nom wide sledu`}ij swobodnyj  adres  wsegda  kraten
  20000).

                                 - 325 -




           programmnaq i wirtualxnaq werhnie granicy
                  i sledu`}ij swobodnyj adres

                       prostranstwo
                   wirtualxnyh adresow
                   -------------------- 32k
                   !                  !
                   .   prostranstwo   .
                   .   polu~eno  po   .
   ssa        ---->!     .SETTOP      !     4-kslownaq
   (kratnyj 4k)    !------------------!<--- granica
                   !                  !
                   !------------------!<--- wirtualxnaq
                   ! oblastx owerleew !     werhnqq granica
                   !    ras{irennoj   !     (kratnaq 32,-2)
                   !    pamqti (/V)   !
                   !------------------!<--- werhnqq
                   ! oblastx owerleew !     granica programmy
                   !     mlad{ej      !
                   !    pamqti (/o)   !
                   !------------------!
                   !     kornewoj     !
                   !     segment      !
                   !------------------!
                   !       stek       !
                   !                  !
                   !------------------!
                   !   wirtualxnye    !
                   !     wektory      !
                   --------------------

                         ris. 35

       naprimer, dlq zadaniq s owerleqmi w ras{irennoj pamqti wirtualx-
  naq werhnqq granica rawna 55076. sledu`}ij swobodnyj adres (ssa)  dlq
  zadaniq, wy~islennyj komponow}ikom - 60000, i qwlqetsq  na~alom  sle-
  du`}ego 4-kslownogo prostranstwa wirtualxnyh  adresow.  |to  zna~enie
  pe~ataetsq w karte zagruzki kak "NEXT FREE  ADDRESS".  nive  pokazano
  |to zna~enie dlq predydu}ego primera.

   VIRTUAL HIGH ADDRESS = 055076 = DDDDD.WORDS,
                                   NEXT FREE ADDRESS = 060000

       esli programma ne imeet owerleew w ras{irennoj pamqti, to ona ne
  imeet wirtualxnoj werhnej granicy, i  werhnqq  granica  programmy  ne
  okruglqetsq. w karte zagruzki dlq programm bez owerleew i  dlq  prog-
  ramm s owerleqmi, sozdannymi kl`~om  /O,  werhnqq  granica  programmy
  pe~ataetsq kak MMMMMM. |to pokazano w  sledu`}em  primere  (sledu`}aq
  stroka wsegda pe~ataetsq w karte zagruzki).

   TRANSFER ADDRESS = NNNNNN,HIGH LIMIT = MMMMMM = DDDDD.WORDS

                                 - 326 -




       9.4.4.3. oby~naq makrokomanda .SETTOP



       esli polxzowatelx wo wremq komponowki ne ukazal RT11XM poddervku
  ras{irennoj makrokomandy .SETTOP, to ona w programme dlq  ras{irennoj
  pamqti imeet ograni~ennye wozmovnosti.

       dlq priwilegirowannyh zadanij, kotorye ne  izmenq`t  otobravenie
  po umol~ani`, .SETTOP rabotaet takve, kak i  w  sistemah  RT11SJ  ili
  RT11FB. esli priwilegirowannoe zadanie sozdaet  wirtualxnoe  adresnoe
  okno i otobravaet ego na oblastx ras{irennoj pamqti, werhnqq  granica
  programmy ne izmenqetsq pri otobravenii. zna~enie, wozwra}aemoe  mak-
  rokomandoj .SETTOP, wse e}e  predstawlqet  star{ij  adres,  dostupnyj
  programme w mlad{ih 28 kslow pamqti.

       kogda monitor wypolnqet prowerku adresa  sistemnyh  makrokomand,
  on sna~ala smotrit, whodit li adres (bloka argumentow, bufera  dannyh
  i t.d.) wnutrx otobravennogo dinami~eskogo okna. esli net, to on pro-
  werqet, nahoditsq li adres w mlad{ej  oblasti  pamqti  zadaniq.  esli
  adres neweren w oboih slu~aqh, monitor soob}aet ob o{ibke, i  zadanie
  snimaetsq s wypolneniq.

       esli zadanie - wirtualxnoe, werhnqq granica programmy  wo  wremq
  zagruzki ustanawliwaetsq na werhnij wirtualxnyj  adres,  ispolxzuemyj
  kornewym segmentom i l`bymi owerleqmi (/O)  w  mlad{ej  pamqti.  esli
  zadanie wypolnqet swoi operacii otobraveniq, oni ne zatragiwa`t werh-
  n`` granicu programmy, kak |to delaet .SETTOP. po|tomu oby~naq makro-
  komanda .SETTOP raspredelqet iskl`~itelxno mlad{ie 28  kslow  pamqti.
  wirtualxnoe zadanie ispolxzuet polxzowatelxskij revim  processora,  i
  po|tomu otobravenie proishodit w sootwetstwii s sodervimym  polxzowa-
  telxskogo nabora registrow aktiwnyh stranic. wirtualxnoe  zadanie  ne
  imeet dostupa k pamqti wne zadaniq (t.k. ono ne otobravaetsq na l`bu`
  oblastx pamqti krome nazna~ennogo ej fizi~eskogo prostranstwa),  po|-
  tomu makrokomanda .SETTOP w wirtualxnom zadanii bez komandy  monitora
  LINK/XM ili kl`~a /V komponow}ika ne wydelit  nikakoj  dopolnitelxnoj
  pamqti zadani`. wozwra}aemoe zna~enie movet  bytx  ispolxzowano  wir-
  tualxnym zadaniem, ~toby sdelatx sobstwennoe  otobravenie  dostupnogo
  prostranstwa i ispolxzowatx ego.

       kogda monitor wypolnqet prowerku adresa wirtualxnogo zadaniq, on
  ignoriruet granicy programmy  i  prosto  smotrit,  ~toby  wirtualxnyj
  adres nahodilsq wnutri otobravennogo okna. esli  adres  ne  nahoditsq
  wnutri otobravennogo okna, dispet~er pamqti soob}aet ob o{ibke.



       9.4.4.4. ras{irennaq makrokomanda .SETTOP



       ras{irennaq makrokomanda .SETTOP polezna dlq priwilegirowannyh i
  wirtualxnyh zadanij, hotq ee nazna~enie dlq priwilegirowannyh zadanij
  ograni~eno.

       dlq wirtualxnyh zadanij ras{irennaq .SETTOP ne  tolxko  polu~aet
  prostranstwo wirtualxnyh adresow wy{e  wirtualxnoj  werhnej  granicy,
  gde na~inaetsq sledu`}ij swobodnyj adres programmy, no takve  awtoma-
  ti~eski otobravaet ego. w rezulxtate, zadanie, rabota`}ee s ras{iren-

                                 - 327 -




  noj pamqtx`, movet pri pomo}i sistemnoj makrokomandy .SETTOP polu~itx
  dopolnitelxnoe prostranstwo wirtualxnyh adresow.

       dlq priwilegirowannyh zadanij ras{irennaq  makrokomanda  .SETTOP
  funkcioniruet kak oby~naq .SETTOP so sledu`}im iskl`~eniem: w  priwi-
  legirowannyh zadaniqh .SETTOP dlq RT11XM trebuet ispolxzowaniq  nowoj
  ras{irennoj direktiwy .LIMIT. star{ee  zna~enie,  kotoroe  wozwra}aet
  direktiwa, qwlqetsq sledu`}im swobodnym adresom. takim obrazom, na~a-
  lo bufera wsegda wozwra}aetsq  na  4-kslownoj  granice.  makrokomanda
  .SETTOP dlq l`bogo adresa nive |toj 4-kslownoj granicy nedopustima.

       dlq obeih programm (priwilegirowannoj i wirtualxnoj),  komponow-
  }ik zapolnqet informaciej dwa slowa w  q~ejkah  0  i  2  zagruzo~nogo
  modulq. q~ejka 0 sodervit VIR w kode RADIX-50. q~ejka 2 sodervit sle-
  du`}ij swobodnyj adres minus 2, kotoryj movet zna~itelxno  otli~atxsq
  ot werhnej wirtualxnoj granicy.

   direktiwa .LIMIT
   ----------------

       dlq zadanij w sistemah RT11SJ ili RT11FB i w sisteme RT11XM  bez
  poddervki ras{irennoj makrokomandy .SETTOP, direktiwa .LIMIT  wozwra-
  }aet programme dwa zna~eniq (zapolnq`tsq LINK):

         - nivnij wirtualxnyj adres,  ispolxzuemyj  programmoj  (oby~no
           0);

         - werhnij adres programmy +2 (naprimer, 1644+2 ili 1646).

       dlq programm, wypolnq`}ihsq pod uprawleniem RT11XM s  poddervkoj
  ras{irennoj makrokomandy .SETTOP, direktiwa .LIMIT wozwra}aet  drugie
  zna~eniq:

         - nivnij wirtualxnyj adres,  ispolxzuemyj  programmoj  (oby~no
           0);

         - sledu`}ij swobodnyj adres (wsegda  na  4-kslownoj  granice),
           kotoryj oby~no ne rawen werhnej granice programmy +2.

   promevutki w prostranstwe wirtualxnyh adresow
   ---------------------------------------------

       komponow}ik wsegda na~inaet kavdu` oblastx owerleew w  ras{iren-
  noj pamqti (/V) na granice 4 Kslow prostranstwa  wirtualxnyh  adresow
  programmy. |to ograni~enie wytekaet iz apparatnyh trebowanij. po|tomu
  mogut poqwitxsq promevutki mevdu werhnej granicej programmy i na~alom
  oblasti wirtualxnyh owerleew. pri popytke programmy soslatxsq k  wir-
  tualxnomu adresu wnutri  |togo  promevutka  woznikaet  o{ibka.  l`boe
  dopolnitelxnoe prostranstwo wirtualxnyh adresow, polu~ennoe po ras{i-
  rennoj makrokomande .SETTOP, takve na~inaetsq na 4-kslownoj  granice.
  |to zna~it, ~to promevutki mogut nahoditxsq mevdu wirtualxnoj werhnej
  granicej programmy i na~alom dopolnitelxnogo prostranstwa.  programma
  ne movet ssylatxsq k adresam wnutri  |togo  promevutka.  na  ris.  36
  pokazana tipi~naq programma s owerleqmi w mlad{ej (/O) i w  ras{iren-
  noj (/V) pamqti.

                                 - 328 -




       promevutki w prostranstwe wirtualxnyh adresow

                       prostranstwo
                   wirtualxnyh adresow
                   -------------------- 32k
                   !                  !
                   .   prostranstwo   .
                   .   polu~eno  po   .
   ssa (60000)     !     .SETTOP      !
   (wsegda na      !                  !
   4-kslownoj      !                  !
   granice)  ---->/!//////////////////!-12k
     promevutok  < !//////////////////!
                  \!//////////////////!<--- wirtualxnaq
                   !                  !     werhnqq granica
                   !                  !     (kratnaq 32,-2)
                   ! oblastx owerleew !
                   !   ras{irennoj    !
    4-kslownaq     !   pamqti (/V)    !
    granica  ---->/!//////////////////!-8k
                 / !//////////////////!
     promevutok <  !//////////////////!
                 \ !//////////////////!
                  \!//////////////////!<--- werhnqq
                   !                  !     granica programmy
                   ! oblastx owerleew !
                   !      mlad{ej     !
                   !    pamqti (/o)   !-4k
                   !------------------!
                   !     kornewoj     !
                   !     segment      !
                   !------------------!
                   !       stek       !
                   !                  !
                   !------------------!
                   !   wirtualxnye    !
                   !     wektory      !
                   -------------------- 0

                          ris. 36



       9.4.4.5. .SETTOP i priwilegirowannye zadaniq



       esli priwilegirowannoe zadanie ispolxzuet  makrokomandu  .SETTOP
  i, esli sledu`}ij swobodnyj adres wy{e na~ala USR,  |to  zna~it,  ~to
  programma uve ispolxzuet prostranstwo wirtualxnyh adresow wy{e na~ala
  monitora. w |tom slu~ae net swobodnoj pamqti, kotoru`  movno  otobra-
  zitx, na~inaq so sledu`}ego swobodnogo adresa programmy, i monitor ne
  movet polu~itx bolx{e prostranstwa dlq |toj programmy. takim obrazom,
  priwilegirowannoe zadanie nikogda ne movet polu~itx prostranstwo wy{e
  SYSLOW (na~alo USR). makrokomanda .SETTOP wozwra}aet zna~enie sledu`-
  }ego swobodnogo adresa minus 2 w q~ejku 50 programmy  i  w  R0.  |tot
  adres qwlqetsq star{im ispolxzuemym adresom.

       esli imeetsq dostupnaq pamqtx, monitor pytaetsq polu~itx ee  dlq

                                 - 329 -




  zadaniq, osnowywaqsx na razmere oblasti, ukazannoj argumentom  makro-
  komandy .SETTOP. |ta pamqtx wsegda nahoditsq w mlad{ih 28 kslow. pri-
  wilegirowannoe zadanie nikogda ne movet polu~itx menx{e  prostranstwa
  wirtualxnyh adresow, ~em prostranstwo  do  ee  sledu`}ego  swobodnogo
  adresa minus 2 (ssa-2). k tomu ve, sledu`}ij swobodnyj  adres,  polu-
  ~ennyj ras{irennoj makrokomandoj .SETTOP, wsegda na 4 kslownoj grani-
  ce, i zadanie ne movet ispolxzowatx makrokomandu .SETTOP dlq  adresa,
  nahodq}egosq nive |togo. po|tomu zadanie  terqet  prostranstwo  mevdu
  ego poslednim ispolxzuemym adresom i sledu`}ej 4 kslownoj granicej.

   priwilegirowannye fonowye zadaniq
   ---------------------------------

       na ris. 37 pokazano priwilegirowannoe fonowoe zadanie i wse  ego
  granicy. kogda w pamqti net  operatiwnogo  zadaniq,  fonowoe  zadanie
  movet polu~itx dopolnitelxnoe  prostranstwo  s  pomo}x`  makrokomandy
  .SETTOP. ~asto takoe prostranstwo imeetsq dave pri zagruvennoj opera-
  tiwnoj programme.

                                 - 330 -




          priwilegirowannoe fonowoe zadanie


                                      prostranstwo
                                   fizi~eskih adresow
                               /---->--------------- 128k
                               !     !  stranica   !
                               !     ! wwoda/wywoda!
                               !  /->!-------------! 124k
                               !  !  !             !
                               !  !  .             .
               prostranstwo    /  !  .             .
           wirtualxnyh adresow/   /  !             !
          32k ---------------/   /   !-------------!
              !             !   //-->! razdel ower-!
              !             !  / !   ! leew ras{i- !
              !             ! /  !   !rennoj pamqti!
          28k !-------------!/---!/->!-------------! 28k
              !             !    !!  !drajwer sist.!
              !             !    !!  !  ustrojstwa !
              !             !    1!  !-------------!
              !             !    !!  !    RMON     !
              !             !--->!!  !-------------!
              !             !    !!  !drajwery dru-!
              !             !    !!  !gih ustrojstw!
              !             !    !!  !-------------!
   .SETTOP    !             !    !!  !     USR     !
   #-2    --->!-------------!----!!->!-------------!<--SYSLOW
              !prostranstwo !    !!  !  swobodnoe  !
              !predostawleno!    !!  !prostranstwo !
              !  po .SETTOP !    !!  !predostawleno!
    ssa ----->!             !    /!  ! po  .SETTOP !
   .SETTOP -->!/////////////!-8k/-!->!/////////////!\-- 8k
   #0         !/////////////!  /  /  !/////////////! \
   werhnqq -->!/////////////!-/  /   !/////////////!  \
   wirtualxnaq!oblastx ower-!   /    !/////////////!   > <1>
   granica    ! leew ras{i- !  /     !/////////////!  /
              !rennoj pamqti! /      !/////////////! /
              !/////////////!-4k---->!/////////////!/-- 4k
              !/////////////!        !             !<--- <2>
   werhnqq -->!/////////////!------->!-------------!
   granica    !kornewoj seg-!        !kornewoj seg-!
   programmy  !ment i ower- !        !ment i ower- !
              ! lei mlad{ej !        ! lei mlad{ej !
              !   pamqti    !        !   pamqti    !
              !-------------!        !-------------!
              !    stek     !        !    stek     !
              !             !        !             !
              !-------------!        !-------------!
              ! wirtualxnye !        !   wektory   !
              !   wektory   !        !             !
            0 ---------------------->--------------- 0

          <1> - neispolxzuemoe     prostranstwo
          <2> - dostupno programme po umol~ani`

                          ris. 37

                                 - 331 -




   priwilegirowannye operatiwnye zadaniq
   -------------------------------------

       operatiwnye zadaniq zagruva`tsq w pamqtx nive poslednego drajwe-
  ra ustrojstwa i wy{e USR. oni ne ime`t  dopolnitelxnogo  prostranstwa
  po makrokomande .SETTOP.

       po|tomu, w takoj situacii, priwilegirowannym  operatiwnym  zada-
  niqm zapre}eno ispolxzowatx owerlei  ras{irennoj  pamqti.  |to  takve
  ozna~aet, ~to oni ne mogut ispolxzowatx  kl`~  /V  komponow}ika  (ili
  LINK/FOREGROUND/PROMPT,  ili  LINK/FOREGROUND/XM),  ~toby   razre{itx
  RT11XM podderviwatx  ras{irennye  makrokomandu  .SETTOP  i  direktiwu
  .LIMIT.



       9.4.4.6. .SETTOP i wirtualxnye zadaniq



       esli sledu`}ij swobodnyj adres rawen 200000,  to  programma  uve
  ispolxzuet prostranstwo wirtualxnyh  adresow,  uprawlqemoe  registrom
  adresa stranicy 7. makrokomanda wozwra}aet zna~enie 177776  w  q~ejku
  50 i w R0.

       esli .SETTOP movet polu~itx prostranstwo wirtualxnyh adresow  so
  sledu`}ego swobodnogo adresa (na 4 kslownoj granice), monitor sozdaet
  oblastx w ras{irennoj pamqti neobhodimogo razmera. esli net dostato~-
  nogo prostranstwa, monitor sozdaet kak  movno  bolx{u`  oblastx  (dlq
  uwerennosti sleduet proweritx  zna~enie,  wozwra}aemoe  makrokomandoj
  .SETTOP). zatem monitor  sozdaet  okno  i  otobravaet  ego  na  nowu`
  oblastx. on wozwra}aet nowoe zna~enie star{ego  dostupnogo  adresa  w
  q~ejku 50 i w R0. esli net polnostx` dostupnogo prostranstwa ili  net
  dostupnyh blokow uprawleniq oblastx` ili oknom, makrokomanda  wozwra-
  }aet zna~enie podlinnogo star{ego dostupnogo adresa w q~ejku 50  i  w
  R0.

       naprimer, pri ispolxzowanii makrokomandy .SETTOP monitor otobra-
  vaet prostranstwo wirtualxnyh adresow, na~inaq so sledu`}ej 4  kslow-
  noj granicy wy{e werhnej wirtualxnoj granicy programmy do  ukazannogo
  adresa wkl`~itelxno. otobravenie  wypolnqetsq  tak,  ~toby  ukazannyj
  adres byl otobraven. movet bytx otobraveno dopolnitelxno do 31 (desq-
  ti~noe) slowa.

       esli ukazannyj w makrokomande .SETTOP adres nahoditsq nive star-
  {ego ispolxzuemogo adresa,  .SETTOP  wozwra}aet  zna~enie  sledu`}ego
  swobodnogo adresa minus 2 w q~ejku 50 i  w  R0.  stati~eskoe  okno  i
  oblasti wirtualxnyh owerleew, sozdannye po kl`~u /V komponow}ika,  ne
  mogut bytx ustraneny, ispolxzuq argument w .SETTOP.

       neobhodimo zametitx, ~to nelxzq sozdatx drugu` oblastx dlq polu-
  ~eniq e}e kakogo-libo dopolnitelxnogo prostranstwa.

       esli argument, kotoryj ukazan w sledu`}ej makrokomande  .SETTOP,
  menx{e, ~em dejstwitelxnyj sledu`}ij swobodnyj adres minus 2, monitor
  wozwra}aet prevnij ssa minus 2 w q~ejku 50 i w R0 i ustranqet oblastx
  i okno, esli oni byli (wmeste so wsemi  hranq}imisq  dannymi).  pozve
  sledu`}ej makrokomandoj .SETTOP movno sozdatx  nowu`  oblastx.  movno
  takve regulirowatx razmer bufera, wypolnqq pereotobravenie wnutri toj

                                 - 332 -




  ve samoj oblasti.

       ~toby polu~itx bolx{u` oblastx, wo-perwyh, neobhodimo  ispolxzo-
  watx makrokomandu .SETTOP so zna~eniem nive teku}ej star{ej  granicy,
  kotoraq ustranit oblastx i wse dannye, hranq}iesq tam. zatem  sozdatx
  nowu` oblasx drugoj makrokomandoj .SETTOP s  bolx{im  zna~eniem  (wse
  dannye, hranq}iesq w perwom bufere, budut poterqny). neobhodimo zame-
  titx, ~to dlq ras{irennoj makrokomandy  .SETTOP  wsegda  ispolxzuetsq
  tolxko odno okno.

       ~toby polu~itx menx{e pamqti, ~em polu~eno  predydu}ej  makroko-
  mandoj .SETTOP, nuvno ispolxzowatx nowu` .SETTOP s argumentom w  wide
  adresa, menx{im, ~em perwyj,  no  rawnym  ili  bolx{im,  ~em  ssa.  w
  rezulxtate razmer okna e}e rawen  razmeru  oblasti,  no  otobravaetsq
  menx{aq ~astx okna. |to delaet nedostupnoj l`bu`  ras{irennu`  pamqtx
  drugim polxzowatelqm ili drugim oblastqm.

   wirtualxnye fonowye zadaniq
   ---------------------------

       makrokomanda .SETTOP dlq RT11XM naibolee |ffektiwna pri  ispolx-
  zowanii w wirtualxnyh fonowyh i  operatiwnyh  zadaniqh.  makrokomanda
  pozwolqet zadaniqm legko i bystro sozdawatx bolx{ie bufery  w  ras{i-
  rennoj pamqti, kotorye pomogut  izbawitxsq  ot  perepolneniq  mlad{ej
  pamqti. na ris. 38 pokazano wirtualxnoe fonowoe zadanie.

                                 - 333 -




               wirtualxnoe fonowoe zadanie

                                      prostranstwo
                                   fizi~eskih adresow
                                     --------------- 128k
                                     !  stranica   !
                                     ! wwoda/wywoda!
                                     !-------------! 124k
                                     !             !
                                     .             .
                                     .             .
                                 /-->!-------------!
                                /    ! prostranstwo!
               prostranstwo    /     ! polu~eno  po!
           wirtualxnyh adresow/      !   .SETTOP   !
   .SETTOP -->--32k----------/  /--->!-------------!
    #-2       !             !   !    !   razdely   !
              !             !   !/-->!   owerleew  !
              !             !   !!   ! ras{irennoj !
              ! prostranstwo!   !!   !    pamqti   !
              !predostawleno!   !!/->!-------------! 28k
              ! po .SETTOP  !   !!!  !drajwer sist.!
              !             !   !!!  ! ustrojstwa  !
              !             !   !!!  !-------------!
              !             !   !!!  !    RMON     !
              !             !   !!!  !-------------!
              !             !   /!!  !drajwery dru-!
              !             !  / /!  !gih ustrojstw!
              !             ! / / !  !-------------!
   ssa ------>!/////////////!/ /  !  !     USR     !
              !/////////////! /   !  !-------------!----
   werhnqq -->!/////////////!/    /  !  swobodnoe  ! s
   wirtualxnaq!   oblastx   !    /   !prostranstwo.! t
   granica    !  owerleew   !   /    !  ego movet  ! a
              ! ra{irennoj  !  /     !  otobrazitx ! t
   (4-kslownaq!   pamqti    ! /      !  programma  ! i
   granica)-->!/////////////!/     ->!-------------! ~
              !/////////////!     /  !kornewoj seg-! e
              !/////////////!    /   !ment i ower- ! s
   werhnqq -->!/////////////!---/    ! lei mlad{ej ! k
   granica  s !kornewoj seg-!        !   pamqti    ! a o
   pro-     t !ment i ower- !        !- - - - - - -! q b
   grammy   a ! lei mlad{ej !        !    stek     !   l
            t !   pamqti    !        !             !   a
            i !- - - - - - -!        !- - - - - - -!   s
            ~ !    stek     !        ! wirtualxnye !   t
          o e !             !        !   wektory   !   x
          k s !- - - - - - -!   /--->!---------500-!----
          n k ! wirtualxnye !  /     !   wektory   !
          o o !   wektory   ! /      !             !
          --e---0------------/       ------------0--

                          ris. 38


   wirtualxnoe operatiwnoe zadanie
   -------------------------------

       makrokomanda .SETTOP wypolnqetsq po~ti takve, kak dlq  operatiw-

                                 - 334 -




  nogo, tak i fonowogo zadanij. dlq wirtualxnogo  operatiwnogo  zadaniq
  dopolnitelxnoe prostranstwo dostupno tolxko po komande  FRUN/BUFFER:N
  ili ras{irennoj makrokomande .SETTOP. esli makrokomanda .SETTOP  ras-
  {irennaq, kl`~ /BUFFER ignoriruetsq. zadanie  ne  movet  odnowremenno
  imetx bufery w mlad{ej i ras{irennoj pamqti. na ris. 39 pokazano wir-
  tualxnoe operatiwnoe ili sistemnoe zadanie s bolx{im buferom w ras{i-
  rennoj pamqti.

                                 - 335 -




         wirtualxnoe operatiwnoe ili sistemnoe zadanie

                                      prostranstwo
                                   fizi~eskih adresow
                                     --------------- 128k
                                     !   stranica  !
                                     ! wwoda/wywoda!
                                     !-------------! 124k
                                     !             !
                                     .             .
                                     .             .
                                 /-->!-------------!
                                /    ! prostranstwo!
               prostranstwo    /     ! polu~eno  po!
           wirtualxnyh adresow/      !   .SETTOP   !
   .SETTOP -->--32k----------/  /--->!-------------!
    #-2       !             !   !    !   razdely   !
              !             !   !/-->!   owerleew  !
              !             !   !!   ! ras{irennoj !
              ! prostranstwo!   !!   !    pamqti   !
              !predostawleno!   !!/->!-------------! 28k
              !  po .SETTOP !   !!!  !drajwer sist.!
              !             !   !!!  ! ustrojstwa  !
              !             !   !!!  !-------------!
              !             !   !!!  !    RMON     !
              !             !   !!!  !-------------!
              !             !   !!!  !drajwery dru-!
              !             !   /!!  !gih ustrojstw!
              !             !  / /!/>!-------------!----
              !             ! / / !! !kornewoj seg-! s
   ssa ------>!/////////////!/ /  !! !ment i ower- ! t
              !/////////////! /   !! ! lei mlad{ej ! a
   werhnqq -->!/////////////!/    /! !   pamqti    ! t
   wirtualxnaq!   oblastx   !    / ! !-------------! i
   granica    !  owerleew   !   /  ! !    stek     ! ~
              ! ra{irennoj  !  /   ! !             ! e
   4-kslownaq ! pamqti (/V) ! /    ! !-------------! s
   granica -->!/////////////!/     / ! wirtualxnye ! k
              !/////////////!     /  !   wektory   ! a
              !/////////////!    / />!-------------! q
   werhnqq -->!/////////////!---/  ! !  sme{annaq  !
   granica  s !kornewoj seg-!      ! !   oblastx   !
   pro-     t !ment i ower- !      ! !-------------!
   grammy   a ! lei mlad{ej !      ! !     USR     !
            t ! pamqti (/o) !      ! !-------------! o
            i !-------------!      / !  swobodnoe  ! b
            ~ !    stek     !     /  ! prostranstwo! l
          o e !             !    /   !             ! a
          k s !-------------!   /    !---------500-! s
          n k ! wirtualxnye !  /     !   wektory   ! t
          o o !   wektory   ! /      !             ! x
          --e---0------------/       ------------0-----

                          ris. 39

                                 - 336 -




       9.4.4.7. wozmovnosti .SETTOP



       ris. 40 i 41, a takve tabl. 15 i 16  sowmestno  kratko  izlaga`t
  rezulxtaty wseh wozmovnyh dejstwij makrokomandy .SETTOP. na  ris.  40
  zadanie "a" - |to fonowoe  zadanie;  ego  sledu`}ij  swobodnyj  adres
  (ssa) nahoditsq nive SYSLOW i bazy USR. zadanie "w" - takve  fonowoe;
  ego sledu`}ij swobodnyj adres wy{e SYSLOW. zna~eniq w kruglyh skobkah
  predstawlq`t specifi~eskij rqd argumentow makrokomandy  .SETTOP.  |ti
  ve obozna~eniq ispolxzowany w tabl. 15 i 16 i na ris. 41.

            raspredelenie pamqti pri wypolnenii
          makrokomandy .SETTOP w fonowom zadanii

             zadanie "a"                 zadanie "B"

     -------32k-----------            -----------32k-------
          ! stranica w/w !            ! stranica w/w !
          !--------------!            !--------------!
          !  RMON, USR,  !            !  RMON, USR,  !  (4)
          !  operatiwnoe !            !  operatiwnoe !
     (4)  !   zadanie,   !            !   zadanie,   !
          !              !    ssa --->!- - - - - - - !-----
          !   drajwery,  !(4-kslownaq !   drajwery,  !
          !   sistemnye  !   granica) !   sistemnye  !  (3)
          !   zadaniq    !            !   zadaniq    !
     -----!--------------!<--SYSLOW-->!--------------!-----
     (3)  !              !            !              !
          !              !            !              !
     -----!- - - - - - - !<--- ssa    !              !  (2)
     (2)  !              !(4-kslownaq !              !
          !              !   granica) !              !
     -----!--------------!<--\    /-->!--------------!-----
          !   kornewoj   !    \  /    !   kornewoj   !
          !    segment   !   werhnqq  !    segment   !
     (1)  !  i owerlei   !   granica  !  i owerlei   !  (1)
          !    mlad{ej   !  programmy !    mlad{ej   !
          !    pamqti    !            !    pamqti    !
     ---------------------            ---------------------
                prostranstwo wirtualxnyh adresow
                          ris. 40


                                 - 337 -




                                                  tablica 15

            raspredelenie pamqti pri wypolnenii
          makrokomandy .SETTOP w fonowom zadanii
   ----------------------------------------------------------
   argument !      wirtualxnoe      !   priwilegirowannoe
   makro-   !        zadanie        !       zadanie
   komandy  !------------------------------------------------
   .SETTOP  !             makrokomanda .SETTOP
            !------------------------------------------------
            !  oby~naq  !ras{irennaq!  oby~naq  !ras{irennaq
   ----------------------------------------------------------
   werhnqq granica dlq zadaniq "a"
       posle makrokomandy .SETTOP
      (1)   !    (1)    !   ssa-2   !    (1)    !   ssa-2
      (2)   !    (2)    !   ssa-2   !    (2)    !   ssa-2
      (3)   !    (3)    !otobrazitsq!    (3)    !   (3)
            !           !  na (3) * !           !
      (4)   ! SYSLOW-2  !otobrazitsq! SYSLOW-2  ! SYSLOW-2
            !           !  na (4) * !           !
      #0    !     0     !   ssa-2   !     0     !   ssa-2
     #-2    ! SYSLOW-2  !otobrazitsq! SYSLOW-2  ! SYSLOW-2
            !           !  na 32k * !           !
   werhnqq granica dlq zadaniq "B"
       posle makrokomandy .SETTOP
      (1)   !    (1)    !   ssa-2   !    (1)    !   ssa-2
      (2)   !    (2)    !   ssa-2   !    (2)    !   ssa-2
      (3)   ! SYSLOW-2  !   ssa-2   ! SYSLOW-2  !   ssa-2
      (4)   ! SYSLOW-2  !otobrazitsq! SYSLOW-2  !   ssa-2
            !           !  na (4) * !           !
      #0    !     0     !   ssa-2   !     0     !   ssa-2
     #-2    ! SYSLOW-2  !otobrazitsq! SYSLOW-2  !   ssa-2
            !           !  na 32k * !           !

      * - esli dostupna; esli net, to
          predostawlqetsq kak movno bolx{aq oblastx


                                 - 338 -




             raspredelenie pamqti pri wypolnenii
          makrokomandy .SETTOP w operatiwnom zadanii


                   -----------------------
                   !     ras{irennaq     !<----- ssa
                   !       pamqtx        !       (kratnyj 4k)
                   !---------------------!

               ----!---------------------!
                   !      stranica       !
               (2) !    wwoda/wywoda     !
                   !---------------------!
                   !        RMON         !
               ----!---------------------!<---- BUFF
                   !prostranstwo polu~eno!
               (1) !   po .FRUN/BUFFER   !
                   !---------------------!<---- OHIGN
                   ! operatiwnoe zadanie !
               ----!---------------------!<---- wirtualxnyj 0
                   !    USR, drajwery    !
                   !---------------------!<---- SYSLOW
                   !  oblastx  fonowogo  !
                   !       zadaniq       !
                   !---------------------!
                   !  wektory i oblastx  !
                   !       SYSCOM        !
                   -----------------------

                          ris. 41


                                                  tablica 16

          werhnqq granica operatiwnogo zadaniq posle
               wypolneniq makrokomandy .SETTOP
   ----------------------------------------------------------
     argument   ! makrokomanda .SETTOP w wirtualxnom zadanii
   makrokomandy !--------------------------------------------
     .SETTOP    !        oby~naq        !    ras{irennaq
   ----------------------------------------------------------
       (1)      !          (1)          !      ssA-2
       (2)      ! bolx{e OHIGH ili BUFF !      ssA-2
       #0       !           0           !      ssA-2
       #-2      ! bolx{e OHIGH ili BUFF ! otobrazitsq na 32k



       9.4.5. planirowanie ras{irennoj pamqti



       pri planirowanii primeneniq ras{irennoj pamqti  sleduet  re{itx,
  neobhodimo li poluawtomati~eskoe  ispolxzowanie  ras{irennoj  pamqti.
  esli trebuetsq tolxko ras{irennaq makrokomanda .SETTOP, to  napisanie
  programmy ne wyzowet trudnostej.  esli  programmu  movno  razbitx  na
  owerlejnye segmenty, to dlq re{eniq |toj zada~i sleduet  ispolxzowatx
  kl`~ /V komponow}ika, kotoryj sozdaet owerlei w  ras{irennoj  pamqti.
  esli ve polxzowatelx re{il sam uprawlqtx  otobraveniem  w  programme,

                                 - 339 -




  napisannoj na makroassemblere, to wna~ale neobhodimo sdelatx diagram-
  mu raspredeleniq sistemnyh komponentow, drajwerow i  drugih  zadanij.
  esli  zadani`  ne  trebuetsq   dostup   k   monitoru   ili   stranice
  wwoda/wywoda, sleduet sdelatx ego wirtualxnym. pri planirowanii prog-
  rammy nuvno zaranee opredelitx trebuemoe ~islo  okon  i  oblastej.  w
  sledu`}em podrazdele dana detalxnaq informaciq o makrokomandah, koto-
  rye programma movet ispolxzowatx dlq raboty s ras{irennoj pamqtx`,  a
  takve ob ograni~eniqh pri rabote s nej.



       9.5. obzor makrokomand ras{irennoj pamqti



       esli programmist razobralsq w ob}ih  procedurah  dlq  dostupa  w
  ras{irennu` pamqtx, i w sredstwah, kotorymi snabvena sistema  RT11XM,
  to bolx{ih trudnostej pri  ispolxzowanii  makrokomand  w  programmah,
  napisannyh na makroassemblere,  ne  wozniknet.  esli  programma  sama
  uprawlqet ras{irennoj pamqtx`,  a  ne  ispolxzuet  poluawtomati~eskie
  metody, opisannye wy{e, polxzowatelx dolven sna~ala ustanowitx  bloki
  opisaniq okna i oblasti.  dalee,  on  dolven  ukazatx  makrokomandami
  koli~estwo fizi~eskoj pamqti i opisatx  wirtualxnye  adresa,  kotorye
  planiruet ispolxzowatx. |to trebuetsq dlq sozdaniq oblastej  i  okon.
  potom swqzatx wirtualxnye adresa s  fizi~eskimi  q~ejkami,  otobraziw
  okna na oblasti. zatem polxzowatelx movet pereotobrazitx okno na dru-
  gu` oblastx ili ~astx oblasti. on  takve  movet  ustranitx  okno  ili
  oblastx. w l`bom slu~ae, odnavdy ustanowiw  perwona~alxnye  struktury
  dannyh, on movet manipulirowatx otobraveniem okon na  oblasti,  ~toby
  prisposobitx ih k swoim trebowaniqm.

       w tabl. 17 opisany dejstwiq programmy dlq  ispolxzowaniq  ras{i-
  rennoj pamqti. w nej takve daetsq  spisok  sootwetstwu`}ih  procedur,
  kotorym neobhodimo sledowatx w programmah.

                                 - 340 -




                                                   tablica 17

           porqdok primeneniq makrokomand dlq raboty
                    s ras{irennoj  pamqtx`
   ----------------------------------------------------------
         dejstwie          !          makrokomanda
   ----------------------------------------------------------
   opredelenie sme}enij    !             .RDBDF
   i simwolow dlq bloka    !           ili .RDBBK
   opisaniq oblasti        !
                           !
   ustanowka bloka opisaniq!             .RDBBK
   oblasti i ukazanie  ee  !
   razmera                 !
                           !
   sozdanie oblasti        !             .CRRG
                           !
   prowerka sostoqniq nowoj! posle  sozdaniq  oblasti  makro-
   oblasti                 ! komandoj .CRRG  issledowatx  so-
                           ! dervimoe bloka opisaniq  oblasti
                           ! (proweritx bity w slowe  sostoq-
                           ! niq oblasti)
                           !
   opredelenie sme}enij i  !             .WDBDF
   simwolow dlq bloka opi- !            ili .WDBBK
   saniq okna              !
                           !
   ustanowka bloka opisaniq!             .WDBBK
   okna i opisanie okna    !
                           !
   sozdanie okna           !             .CRAW
                           !
   prowerka sostoqniq      ! posle sozdaniq okna  makrokoman-
   nowogo okna             ! doj .CRAW issledowatx sodervimoe
                           ! bloka opisaniq  okna  (proweritx
                           ! bity w slowe sostoqniq okna)
                           !
   swqzx okna s nuvnoj ob- ! zanesti identifikator oblasti iz
   lastx` dlq podgotowki   ! R.GID bloka opisaniq  oblasti  w
   k otobraveni` okna      ! W.NRID bloka opisaniq okna
                           !
   otobravenie okna na ob- !              .MAP
   lastx (qwno)            !
                           !
   otobravenie okna na ob- ! ustanowitx WS.MAP  bloka  opisa-
   lastx (neqwno)          ! niq okna  i  dlq  sozdaniq  okna
                           ! zagruzitx W.NRID pered ispolxzo-
                           ! waniem makrokomandy  .CRAW.  |ta
                           ! operaciq    sozdast    okno    i
                           ! otobrazit ego na oblastx
                           !
   polu~enie teku}ego sos- !             .GMCX
   toqniq otobraveniq okna !
                           !
   otmena otobraveniq okna !             .UNMAP
   (qwno)                  !




                                 - 341 -




                                         prodolvenie tabl. 17
   ----------------------------------------------------------
         dejstwie          !          makrokomanda
   ----------------------------------------------------------
   otmena otobraveniq okna ! ispolxzowatx  makrokomandu  .MAP
   (neqwno)                ! dlq otobraveniq  okna  w  drugoe
                           ! mesto.   movno   takve  otmenitx
                           ! otobravenie    okna,    ustraniw
                           ! oblastx, na kotoru` ono  otobra-
                           ! veno, ili ustranitx samo okno
                           !
   ustranenie okna         ! ispolxzowatx makrokomandu  .ELAW
                           !
   ustranenie oblasti      ! ispolxzowatx makrokomandu  .ELRG



       9.6. struktury dannyh



       programma, rabota`}aq s ras{irennoj pamqtx`, swqzywaetsq s moni-
  torom s pomo}x` specialxnyh struktur dannyh. dlq kavdoj oblasti prog-
  ramma sodervit odin blok opisaniq oblasti, kotoryj  opisywaet  razmer
  oblasti ras{irennoj pamqti. monitor takve obsluviwaet nabor  wnutren-
  nih struktur dannyh. blok uprawleniq oblastx`, razme}ennyj w  sme{an-
  noj oblasti zadaniq, opisywaet oblastx. monitor movet obsluviwatx  do
  ~etyreh blokow uprawleniq oblastx` kavdogo zadaniq. dlq kavdogo  okna
  programma ispolxzuet odin blok opisaniq okna, ~toby opisatx wirtualx-
  nye adresa, kotorye whodqt w |to okno. blok uprawleniq  oknom,  takve
  razme}ennyj w sme{annoj  oblasti  zadaniq,  qwlqetsq  wnutrennim  dlq
  monitora opisatelem okna. monitor movet obsluviwatx do wosxmi  blokow
  uprawleniq oknom. |lement o~eredi wwoda/wywoda sodervit  dopolnitelx-
  nu` informaci` w sisteme s ras{irennoj pamqtx`. nakonec, monitor raz-
  me}aet oblasti w ras{irennoj pamqti, osnowywaqsx na wnutrennem spiske
  swobodnoj pamqti.


       nive opisany |ti struktury dannyh i pokazano kak sozdawatx ih.



       9.6.1. blok opisaniq oblasti



       blok opisaniq oblasti -  |to  trehslownaq  oblastx  w  programme
  polxzowatelq, kotoraq sodervit informaci` ob oblasti, opredelqemoj  w
  ras{irennoj pamqti. monitor ispolxzuet blok opisaniq oblasti dlq swq-
  zi s zadaniem, kogda wypolnqetsq makrokomanda .CRRG ili .ELRG.  prog-
  rammist dolven ustanowitx blok opisaniq oblasti w swoej  programme  i
  opredelitx simwolxnye sme}eniq pered tem,  kak  sozdawatx  oblastx  w
  ras{irennoj pamqti. zatem on dolven pomestitx razmer oblasti  w  blok
  opisaniq oblasti. posle sozdaniq oblasti monitor  wozwra}aet  w  blok
  opisaniq oblasti ee identifikator i drugu` informaci` dlq polxzowate-
  lq. kavdyj raz, kogda programme trebuetsq soslatxsq k  |toj  oblasti,
  ona ispolxzuet ee identifikator.  t.k.  stati~esku`  oblastx  sozdaet
  monitor, to polxzowatelx movet obra}atxsq k nej  ~erez  identifikator
  0. ris. 42 i tabl. 18 pokazywa`t strukturu bloka opisaniq oblasti.

                                 - 342 -




                    blok opisaniq oblasti

                     --------------------
                     !      R.GID       !
                     --------------------
                     !      R.GSIZ      !
                     --------------------
                     !      R.GSTS      !
                     --------------------

                           ris. 42


                                                  tablica 18
                    blok opisaniq oblasti
   ----------------------------------------------------------
   sme}enie! simwol !modifikator!         sodervanie
    (bajty)!        !           !
   ----------------------------------------------------------
      0    ! R.GID  !programma  ! unikalxnyj    identifikator
           !        !monitora   ! oblasti.  on   ispolxzuetsq
           !        !.CRRG      ! dlq ssylok k |toj  oblasti.
           !        !           ! identifikator oblasti qwlq-
           !        !           ! etsq ukazatelem wnutri sme-
           !        !           ! {annoj oblasti  zadaniq  na
           !        !           ! blok  uprawleniq  oblastx`.
           !        !           !
      2    ! R.GSIZ !makrokoman-! razmer trebuemoj oblasti  w
           !        !da .RDBBK  ! 32-slownyh     (desqti~noe)
           !        !ili prog-  ! blokah
           !        !ramma polx-!
           !        !zowatelq   !
           !        !           !
      4    ! R.GSTS !programma  ! slowo sostoqniq oblasti
           !        !monitora   !
           !        !.CRRG      !



       9.6.1.1. slowo sostoqniq oblasti



       slowo sostoqniq oblasti sodervit informaci` o  ee  sostoqnii.  w
  tabl. 19 priwedeny bity slowa sostoqniq oblasti i ih  zna~eniq.  bity
  ot 0 do 12 zarezerwirowany.

                                 - 343 -




                                                  tablica 19

                   slowo sostoqniq oblasti
   -----------------------------------------------------------
    bit !  imq   ! wosxmeri~naq ! zna~enie pri ustanowlennom
        !        !    maska     !           bite
   -----------------------------------------------------------
    15  ! RS.CRR !    100000    ! monitor   uspe{no    sozdal
        !        !              ! oblastx.  programma   .CRRG
        !        !              ! ustanawliwaet   |tot   bit;
        !        !              ! programma .ELRG o~i}aet ego
        !        !              !
    14  ! RS.UNM !     40000    ! w  rezulxtate    ustraneniq
        !        !              ! |toj oblasti otmeneny  odno
        !        !              ! ili neskolxko  okon.  prog-
        !        !              ! ramma  .ELRG  ustanawliwaet
        !        !              ! |tot bit pri  neobhodimosti
        !        !              !
    13  ! RS.NAL !     20000    ! zarezerwirowan



       9.6.1.2. makrokomanda .RDBDF



       makrokomanda .RDBDF ispolxzuetsq dlq opredeleniq simwolow w blo-
  ke opisaniq oblasti. ona opredelqet simwolxnye imena  sme}enij  bloka
  opisaniq oblasti i imena bitow dlq  slowa  sostoqniq  oblasti.  krome
  togo, |ta makrokomanda opredelqet dlinu bloka opisaniq oblasti, usta-
  nawliwaq sledu`}ij simwol:

          R.GLGH = 6

       |ta makrokomanda ne rezerwiruet mesto dlq bloka opisaniq  oblas-
  ti. format makrokomandy .RDBDF sledu`}ij:

          .RDBDF

       makroras{irenie makrokomandy .RDBDF sledu`}ee:

          R.GID  = 0
          R.GSIZ = 2
          R.GSTS = 4
          R.GLGH = 6
          RS.CRR = 100000
          RS.UNM = 40000
          RS.NAL = 20000



       9.6.1.3. makrokomanda .RDBBK



       makrokomanda .RDBBK podobna makrokomande .RDBDF. ona  opredelqet
  simwoly dlq bloka opisaniq oblasti, a takve rezerwiruet dlq nego mes-
  to (w otli~ie ot .RDBDF). programmist ukazywaet w ka~estwe  argumenta
  |toj makrokomandy razmer trebuemoj oblasti. esli ispolxzuetsq  makro-

                                 - 344 -




  komanda .RDBBK, to ne trebuetsq  ispolxzowanie  .RDBDF,  t.k.  .RDBBK
  awtomati~eski wyzywaet .RDBDF.

       format makrokomandy .RDBBK sledu`}ij:

          .RDBBK RGSIZ
   gde

  RGSIZ  - razmer dinami~eskoj oblasti w 32-slownyh  (desqti~noe)  blo-
           kah.

       w sledu`}em primere ispolxzuetsq makrokomanda .RDBBK dlq  sozda-
  niq bloka opisaniq oblasti dlq oblasti  razmerom  4  kslow  (4  kslow
  |kwiwalentno 200 32-slownym blokam). zatem sozdaetsq oblastx.

   RGADR: .RDBBK  200                 ;opredelitx tablicu
          .CRRG   #ARGBLK,#RGADR      ;sozdatx oblastx



       9.6.2. blok uprawleniq oblastx`



       blok uprawleniq oblastx` - |to trehslownaq oblastx  w  sme{annoj
  oblasti zadaniq, kotoru` obsluviwaet monitor. wirtualxnoe zadanie dlq
  stati~eskoj oblasti wydelqet odin blok uprawleniq oblastx`. dlq  pri-
  wilegirowannogo zadaniq odin blok uprawleniq oblastx`  zarezerwirowan
  monitorom i ne movet ispolxzowatxsq programmoj.  takim  obrazom,  wse
  zadaniq mogut imetx do treh dinami~eskih oblastej, sostoqnie  kotoryh
  ustanawliwaetsq monitorom w blokah uprawleniq oblastx`.

       na ris. 43 i w tabl.  20  pokazana  struktura  bloka  uprawleniq
  oblastx`. makrokomanda .ELRG o~i}aet wse ego polq.

                blok uprawleniq oblastx`

                  -------------------
                  !     R.BADD      !
                  -------------------
                  !     R.BSIZ      !
                  -------------------
                  ! R.BNWD ! R.BSTA !
                  -------------------

                        ris. 43


                                 - 345 -




                                                   tablica 20

                    blok uprawleniq oblastx`
   ----------------------------------------------------------
   sme}enie! simwol !modifikator!       sodervanie
    (bajty)!        !           !
   ----------------------------------------------------------
      0    ! R.BADD !programma  ! na~alxnyj  adres   oblasti,
           !        !monitora   ! wyravennyj   w   32-slownyh
           !        !.CRRG      ! blokah
           !        !           !
      2    ! R.BSIZ !programma  ! razmer oblasti w 32-slownyh
           !        !monitora   ! blokah. esli |to slowo raw-
           !        !.CRRG      ! no 0,  to  blok  uprawleniq
           !        !           ! oblastx` swoboden
           !        !           !
      4    ! R.BSTA !monitor wo ! |tot bajt wsegda  rawen  0,
           !        !wremq rabo-! esli  oblastx  sozdana   ne
           !        !ty; prog-  ! ras{irennoj   makrOKomandoj
           !        !           ! .SETTOP. monitor   ustanaw-
           !        !           ! liwaet  bit  1,  nazywaemyj
           !        !           ! R.STOP,   posle    sozdaniq
           !        !           ! oblasti



       9.6.3. blok opisaniq okna



       blok opisaniq okna - |to semislownaq oblastx w programme polxzo-
  watelq, kotoraq sodervit informaci` o wirtualxnom adresnom okne. kog-
  da wypolnq`tsq makrokomandy .CRAW, .ELAW,  .GMCX  ili  .MAP,  monitor
  ispolxzuet blok opisaniq okna dlq swqzi s programmoj. pered tem,  kak
  sozdawatx wirtualxnoe adresnoe okno, neobhodimo ustanowitx blok  opi-
  saniq okna w programme i opredelitx dlq nego simwolxnye imena  sme}e-
  nij. zatem razmestitx opisanie trebuemogo okna w bloke opisaniq okna.
  posle sozdaniq okna monitor wozwra}aet  ego  identifikator  i  drugu`
  informaci` o sostoqnii fajla ~erez blok opisaniq okna. na ris. 44 i w
  tabl. 21 pokazana struktura bloka opisaniq okna.

                    blok opisaniq okna

                  -----------------------
                  !  W.NAPR  !  W.NID   !
                  -----------------------
                  !       W.NBAS        !
                  -----------------------
                  !       W.NSIZ        !
                  -----------------------
                  !       W.NRID        !
                  -----------------------
                  !       W.NOFF        !
                  -----------------------
                  !       W.NLEN        !
                  -----------------------
                  !       W.NSTS        !
                  -----------------------


                                 - 346 -




                          ris. 44


                                 - 347 -




                                                  tablica 21

                    blok opisaniq okna
   ----------------------------------------------------------
   sme}enie! simwol !modifikator !      sodervanie
    (bajty)!        !            !
   ----------------------------------------------------------
      0    ! W.NID  !programma   ! unikalxnyj   identifikator
           !        !monitora    ! okna. k stati~eskomu  oknu
           !        !.CRAW       ! movno ssylatxsq, ispolxzuq
           !        !            ! identifikator 0
           !        !            !
      1    ! W.NAPR !makrokomanda! nomer   registra  aktiwnyh
           !        !.WDBBK;     ! stranic, soderva}ij  bazo-
           !        !programma   ! wyj adres okna.  neobhodi-
           !        !monitora    ! mo pomnitx, ~to okno dolv-
           !        ! .GMCX      ! no na~inatxsq  na  granice
           !        !            ! 4 kslow. w  tabl. 22  dano
           !        !            ! sootwetstwie mevdu regist-
           !        !            ! rami  aktiwnyh  stranic  i
           !        !            ! wirtualxnymi adresami. dlq
           !        !            ! priwilegirowannyh  zadanij
           !        !            ! dejstwitelxny  zna~eniq  w
           !        !            ! predelah ot 0  do  7.  dlq
           !        !            ! wirtualxnyh zadanij  nowoe
           !        !            ! okno ne dolvno perekrywatx
           !        !            ! stati~eskoe  okno.   movno
           !        !            ! najti samoe mlad{ee dejst-
           !        !            ! witelxnoe   zna~enie   dlq
           !        !            ! W.NAPR, pri pomo}i  makro-
           !        !            ! komandy .GMCX dlq   stati-
           !        !            ! ~eskogo okna, kotoraq pre-
           !        !            ! obrazuet star{ij wirtualx-
           !        !            ! nyj  adres w zna~enie ras,
           !        !            ! i uweli~itx ego
           !        !            !
      2    ! W.NBAS !programmy   ! bazowyj wirtualxnyj  adres
           !        !monitora    ! okna. |to zna~enie  dolvno
           !        !.CRAW i     ! ukazywatx takoj  ve adres,
           !        !.GMCX       ! kak i W.NAPR, ~to  obespe-
           !        !            ! ~iwaet prowerku. adres wy-
           !        !            ! raven ne w 32-slownyh  de-
           !        !            ! sqti~nyh blokah, a w wosx-
           !        !            ! meri~nom wide
           !        !            !
      4    ! W.NSIZ !makrokomanda! razmer okna, wyravennyj  w
           !        !.WDBBK;     ! 32-slownyh blokah
           !        !programma   !
           !        !monitora    !
           !        !.GMCX       !
           !        !            !
      6    ! W.NRID !makrokomanda! ukazywaet oblastx, na  ko-
           !        !.WDBBK;     ! toru`  otobravaetsq  okno.
           !        !programma   ! makrokomanda  .GMCX   woz-
           !        !monitora    ! wra}aet 0,  esli  okno  ne
           !        !.GMCX       ! otobraveno, ili wozwra}aet
           !        !            ! identifikator oblasti,  na
           !        !            ! kotoru` ono otobraveno.


                                 - 348 -




                                        prodolvenie tabl. 21

                    blok opisaniq okna
   ----------------------------------------------------------
   sme}enie! simwol !modifikator !      sodervanie
    (bajty)!        !            !
   ----------------------------------------------------------
           !        !            ! zna~enie rawno 0 i  w  tom
           !        !            ! slu~ae, esli okno  otobra-
           !        !            ! veno  na  stati~esku`  ob-
           !        !            ! lastx
           !        !            !
      10   ! W.NOFF !makrokomanda! sme}enie (wyravennoe w 32-
           !        !.WDBBK;     ! slownyh desqti~nyh blokah)
           !        !programma   ! w oblasti, s kotorogo  na-
           !        !monitora    ! ~inaetsq otobravenie |togo
           !        !.GMCX       ! okna. esli okno ne otobra-
           !        !            ! veno,  makrokomanda  .GMCX
           !        !            ! o~i}aet |to  slowo;  ina~e
           !        !            ! s`da  zanositsq   zna~enie
           !        !            ! sme}eniq
           !        !            !
      12   ! W.NLEN !makrokomanda! razmer otobravaemogo  okna
           !        !.WDBBK;     ! w 32-slownyh blokah.  esli
           !        !programmy   ! programmist pomestil  s`da
           !        !monitora    ! 0 (ili ispolxzowana makro-
           !        !.MAP i .GMCX! komanda .CRAW  s  ustanow-
           !        !            ! lennym bitom WS.MAP), mak-
           !        !            ! rokomanda .MAP  otobravaet
           !        !            ! wse okno  ili  ~astx  ego,
           !        !            ! kotoraq movet razmestitxsq
           !        !            ! w dannoj oblasti. pri  us-
           !        !            ! pe{nom otobravenii  makro-
           !        !            ! komanda   .MAP    pome}aet
           !        !            ! dejstwitelxnu` dlinu otob-
           !        !            ! ravennogo okna  w  W.NLEN.
           !        !            ! esli  programmist  zanosit
           !        !            ! s`da zna~enie, otli~noe ot
           !        !            ! nulq, makrokomanda .MAP ne
           !        !            ! izmenqet ego. esli okno ne
           !        !            ! otobraveno, .GMCX  o~i}aet
           !        !            ! |to slowo; ina~e s`da  po-
           !        !            ! me}aetsq    dejstwitelxnaq
           !        !            ! dlina
           !        !            !
       14  ! W.NSTS !makrokomanda! slowo sostoqniq okna. esli
           !        !.WDBBK;     ! okno ne otobraveno, makro-
           !        !programmy   ! komanda .GMCX o~i}aet  |to
           !        !monitora    ! slowo; ina~e ona  ustanaw-
           !        !.CRAW, .ELAW! liwaet 1 w WS.MAP
           !        !i .GMCX     !

                                 - 349 -




                                    tablica 22

        sootwetstwie mevdu registrami aktiwnyh
           stranic i wirtualxnymi adresami
      ------------------------------------------
       granica wirtualxnyh  !  nomer registra
            adresow         !  aktiwnyh stranic
      ------------------------------------------
               0-17776      !        0
           20000-37776      !        1
           40000-57776      !        2
           60000-77776      !        3
          100000-117776     !        4
          120000-137776     !        5
          140000-157776     !        6
          160000-177776     !        7



       9.6.3.1. slowo sostoqniq okna



       slowo sostoqniq okna sluvit dwum celqm. wo-perwyh, ono pozwolqet
  makrokomande .CRAW sozdatx okno i otobrazitx ego za  odin  {ag,  esli
  programmist zanes zna~enie 1 w bit 8. wo-wtoryh, slowo sostoqniq okna
  pozwolqet monitoru peredatx programme informaci` o sostoqnii okna.  w
  tabl. 23 pokazany bity slowa sostoqniq okna i ih zna~eniq. bity ot  0
  do 7 i ot 9 do 12 zarezerwirowany.

                                 - 350 -




                                                 tablica 23

                    slowo sostoqniq okna
   ----------------------------------------------------------
    bit !   imq  !wosxmeri~nyj!  zna~enie pri ustanowlennom
        !        !    wid     !           bite
   ----------------------------------------------------------
     8  ! WS.MAP !    400     ! makrokomanda   .CRAW   dolvna
        !        !            ! otobrazitx nowoe  okno  posle
        !        !            ! ego sozdaniq. |tot bit  usta-
        !        !            ! nawliwaetsq w bloke  opisaniq
        !        !            ! okna ukazaniem ego  w  makro-
        !        !            ! komande .WDBBK.  dlq  uweren-
        !        !            ! nosti nuvno ustanowitx W.NRID
        !        !            ! pered  ispolxzowaniem  makro-
        !        !            ! komandy .CRAW
        !        !            !
    13  ! WS.ELW !   20000    ! w rezulxtate teku}ej operacii
        !        !            ! monitor  ustranil  odno   ili
        !        !            ! neskolxko okon.  makrokomandy
        !        !            ! .CRAW i .ELAW  mogut  ustano-
        !        !            ! witx |tot bit
        !        !            !
    14  ! WS.UNM !   40000    ! w rezulxtate teku}ej operacii
        !        !            ! monitor otmenil odno ili nes-
        !        !            ! kolxko   okon.   makrokomandy
        !        !            ! .CRAW i .ELAW  mogut  ustano-
        !        !            ! witx |tot  bit.  makrokomandy
        !        !            ! .MAP i  .UNMAP  ustanawliwa`t
        !        !            ! ili o~i}a`t |tot bit (w zawi-
        !        !            ! simosti ot trebowanij)
        !        !            !
    15  ! WS.CRW !  100000    ! monitor sozdal okno  uspe{no.
        !        !            ! makrokomanda  .CRAW  ustanaw-
        !        !            ! liwaet |tot bit, makrokomanda
        !        !            ! .ELAW o~i}aet ego



       9.6.3.2. sistemnaq makrokomanda .WDBDF



       makrokomanda .WDBDF ispolxzuetsq dlq opredeleniq simwolow w blo-
  ke opisaniq okna. ona opredelqet simwolxnye imena sme}enij dlq  bloka
  opisaniq okna i imena bitow dlq slowa sostoqniq  okna.  krome  |togo,
  makrokomanda opredelqet dlinu bloka opisaniq okna ustanowkoj  sledu`-
  }ego simwola:

          W.NLGH = 16

       neobhodimo zametitx, ~to makrokomanda .WDBDF ne rezerwiruet mes-
  to dlq bloka opisaniq okna. format makrokomandy .WDBDF sledu`}ij:

          .WDBDF

       makrokomanda .WDBDF ras{irqetsq w sledu`}u` posledowatelxnostx:

                                 - 351 -




          W.NID   = 0
          W.NAPR  = 1
          W.NBAS  = 2
          W.NSIZ  = 4
          W.NRID  = 6
          W.NOFF  = 10
          W.NLEN  = 12
          W.NSTS  = 14
          W.NLGH  = 16
          WS.CRW  = 100000
          WS.UNM  = 40000
          WS.ELW  = 20000
          WS.MAP  = 400



       9.6.3.3. sistemnaq makrokomanda .WDBBK



       makrokomanda .WDBBK podobna .WDBDF, ona opredelqet  simwoly  dlq
  bloka opisaniq okna i  rezerwiruet  mesto  dlq  nego  (w  otli~ie  ot
  .WDBDF). makrokomanda .WDBBK pozwolqet ukazatx dostato~no  informacii
  ob okne, ~toby sozdatx ego. movno ispolxzowatx  neobqzatelxnye  argu-
  menty dlq obespe~eniq bloka opisaniq okna bolx{im koli~estwom  infor-
  macii. dopolnitelxnaq informaciq pozwolit sozdatx okno  i  otobrazitx
  ego na oblastx, ispolxzuq sootwetstwu`}u`  makrokomandu  .CRAW.  esli
  ispolxzuetsq .WDBBK, to ne trebuetsq ispolxzowatx .WDBDF, t.k. .WDBBK
  awtomati~eski wyzywaet .WDBDF. format .WDBBK sledu`}ij:

          .WDBBK WNAPR,WNSIZ[,WNRID,WNOFF,WNLEN,WNSTS]
   gde

  WNAPR  - nomer registra aktiwnyh stranic (ot 0 do 7), kotoryj  soder-
           vit bazowyj adres okna. sleduet  pomnitx,  ~to  okno  dolvno
           na~inatxsq na granice 4 kslow; w tabl. 22 dano  sootwetstwie
           mevdu registrami aktiwnyh stranic i wirtualxnymi adresami;

  WNSIZ  - razmer okna w 32-slownyh (desqti~noe) blokah;

  WNRID  - identifikator oblasti, na kotoru` otobravaetsq |to okno; |to
           neobqzatelxnyj argument;  oby~no  on  zapolnqetsq  wo  wremq
           wypolneniq programmy, a ne wo wremq assemblirowaniq;

  WNOFF  - sme}enie w oblasti, s kotorogo na~inaetsq otobravenie  |togo
           okna, wyravennoe  w  32-slownyh  (desqti~noe)  blokah;  |tot
           argument neobqzatelxnyj; on neobhodim, esli trebuetsq  otob-
           razitx opredelqemoe okno; po umol~ani`  |to  zna~enie  rawno
           nul` i ozna~aet, ~to okno budet otobravatxsq s na~ala oblas-
           ti;

  WNLEN  - razmer ~asti okna, kotoru` nuvno  otobrazitx,  w  32-slownyh
           (desqti~noe) blokah (argument neobqzatelxnyj); on neobhodim,
           esli trebuetsq otobrazitx okno; po umol~ani` zna~enie  rawno
           nul` i ozna~aet, ~to otobravatxsq budet  kak  movno  bolx{aq
           ~astx okna ili wse okno;

  WNSTS  - slowo sostoqniq okna (argument neobqzatelxnyj);  on  neobho-
           dim, esli trebuetsq otobrazitx ukazannoe okno,  kogda  budet

                                 - 352 -




           ispolxzowatxsq  makrokomanda  .CRAW;  ustanowlennyj  bit  8,
           nazywaemyj WS.MAP, zastawlqet makrokomandu  .CRAW  wypolnitx
           operaci` otobraveniq.

       w priwedennom primere ispolxzuetsq makrokomanda .WDBBK dlq  soz-
  daniq bloka opisaniq okna. wo-perwyh, w primere osu}estwlqetsq preob-
  razowanie "k" slow w bloki po 32  slowa  kavdyj.  zatem  opredelqetsq
  blok opisaniq okna, sozdaetsq okno i otobravaetsq na oblastx.

       makrokomanda ustanawliwaet blok opisaniq okna  dlq  okna,  dlina
  kotorogo 2 kslow. okno na~inaetsq s adresa 120000, po|tomu  uprawlqtx
  otobraveniem budet pqtyj registr aktiwnyh stranic. makrokomanda .CRAW
  sozdast |to okno i otobrazit ego na oblastx ras{irennoj pamqti.  okno
  budet otobraveno na oblastx, na~inaq s 2 kslow ot  na~ala  oblasti  i
  makrokomanda .CRAW otobrazit kak movno bolx{u` ~astx okna. neobhodimo
  zametitx, ~to programma dolvna zanesti identifikator oblasti  w  |tot
  blok, ~toby wybratx prawilxnu`  oblastx  pered  wyda~ej  makrokomandy
  .CRAW.

   primer.

            .MCALL  .WDBBK, .RDBBK, .CRRG,  .CRAW,  .EXIT
            KMMU    =  1024./32.  ;razmer w blokah po 32 slowa
   START:  .CRRG   #AREA,#RGADR   ;sozdatx oblastx
           ;       .
           ;       .
           ;       .
           MOV     RGADR+R.GID,WNADR+W.NRID ;zanesti ID
                                  ;w blok opisaniq okna
           .CRAW   #AREA,#WNADR   ;sozdatx okno
                                  ;i otobrazitx ego
           ;       .
           ;       .
           ;       .
           .EXIT                  ;zawer{itx programmu
           .LIST   MEB
    RGADR: .RDBBK  2*KMMU         ;sozdatx blok opisaniq
                                  ;oblasti
    WNADR:  .WDBBK  5,2*KMMU,,2*KMMU,0,WS.MAP  ;sozdatx blok
                                  ;opisaniq okna
    AREA:   .BLKW   2             ;oblastx argumentow EMT
            .END    START




       9.6.4. blok uprawleniq oknom



       blok uprawleniq oknom - semislownaq oblastx w sme{annoj  oblasti
  zadaniq, kotoru` obsluviwaet monitor. w wirtualxnom zadanii otwoditsq
  odin blok uprawleniq oknom dlq stati~eskogo okna. dlq priwilegirowan-
  nyh zadanij odin blok uprawleniq oknom rezerwiruetsq monitorom  i  ne
  movet ispolxzowatxsq programmoj. takim  obrazom,  wse  zadaniq  mogut
  imetx do  semi  dinami~eskih  okon,  kotorye  monitor  obsluviwaet  s
  pomo}x` blokow uprawleniq oknom. na ris. 45 i  w  tabl.  24  pokazana
  struktura bloka uprawleniq oknom.

                                 - 353 -




               blok uprawleniq oknom

              -----------------------
              !       W.BRCB        !
              !---------------------!
              !       W.BLVR        !
              !---------------------!
              !       W.BHVR        !
              !---------------------!
              !       W.BSIZ        !
              !---------------------!
              !       W.BOFF        !
              !---------------------!
              !  W.BNPD  !  W.BFPD  !
              !---------------------!
              !       W.BLPD        !
              -----------------------

                      ris. 45

                                 - 354 -




                                                 tablica 24

                   blok uprawleniq oknom
   ----------------------------------------------------------
   sme}enie ! simwol !  modifikator   !      sodervanie
    (bajty) !        !                !
   ----------------------------------------------------------
       0    ! W.BRCB ! makrokomanda   ! ukazywaet na blok up-
            !        ! .MAP; makro-   ! rawleniq oblastx` dlq
            !        ! komanda .UNMAP ! oblasti,  na  kotoru`
            !        ! o~i}aet ego    ! |to okno  otobraveno.
            !        !                ! esli  W.BRCB = 0,  to
            !        !                ! okno ne otobraveno
            !        !                !
       2    ! W.BLVR ! makrokomanda   ! nivnij    wirtualxnyj
            !        ! .CRAW          ! adres okna
            !        !                !
       4    ! W.BHVR ! makrokomanda   ! werhnij   wirtualxnyj
            !        ! .MAP           ! adres okna
            !        !                !
       6    ! W.BSIZ ! makrokomanda   ! razmer  okna  w   32-
            !        ! .CRAW; makro-  ! slownyh  (desqti~noe)
            !        ! komanda .ELAW  ! blokah. esli zna~enie
            !        ! o~i}aet ego    ! = 0,  to  |tot   blok
            !        !                ! uprawleniq oknom swo-
            !        !                ! boden
            !        !                !
      10    ! W.BOFF ! makrokomanda   ! sme}enie w oblasti, s
            !        ! .MAP           ! kotorogo     na~inaet
            !        !                ! otobravatxsq okno  (w
            !        !                ! 32-slownyh desqti~nyh
            !        !                ! blokah)
            !        !                !
      12    ! W.BFPD ! makrokomanda   ! mlad{ij  bajt  adresa
            !        ! .CRAW          ! perwogo registra opi-
            !        !                ! saniq stranicy, koto-
            !        !                ! ryj  swqzan  s   |tim
            !        !                ! oknom
            !        !                !
      13    ! W.BNPD ! makrokomanda   ! ~islo registrow  opi-
            !        ! .MAP           ! saniq stranic,  koto-
            !        !                ! rye  swqzany  s  |tim
            !        !                ! oknom
            !        !                !
      14    ! W.BLPD ! makrokomanda   ! sodervimoe poslednego
            !        ! .MAP           ! registra     opisaniq
            !        !                ! stranicy,     kotoryj
            !        !                ! swqzan s  |tim  oknom



       9.6.5. |lement o~eredi wwoda/wywoda



       w RT11XM |lement o~eredi wwoda/wywoda rawen 10 slowam, w otli~ie
  ot RT11SJ ili RT11FB, gde dlina |lementa o~eredi wwoda/wywoda rawna 7
  slowam.

                                 - 355 -




       9.6.6. spisok swobodnoj pamqti



       monitor obsluviwaet strukturu dannyh, nazywaemu` spiskom swobod-
  noj pamqti, kotoraq ispolxzuetsq dlq raspredeleniq swobodnogo  prost-
  ranstwa ras{irennoj pamqti. spisok sodervit tablicu iz  10  (desqti~-
  noe) dwojnyh slow. adresom na~ala tablicy  qwlqetsq  $XMSIZ.  tablica
  nahoditsq w programmnoj sekcii XMSUBS. star{ee slowo kavdoj pary slow
  ukazywaet razmer dostupnogo  swobodnogo  prostranstwa  w  ras{irennoj
  pamqti, wyravennyj w 32-slownyh (desqti~noe)  blokah.  mlad{ee  slowo
  takoj pary sodervit adres swobodnogo prostranstwa,  delennyj  na  100
  (wosxmeri~noe). w konce tablicy nahoditsq 1.

       srazu  posle  zagruzki  sistemy  tablica  sodervit  tolxko  odnu
  zapisx. star{ee slowo pary slow sodervit ob}ee koli~estwo ras{irennoj
  pamqti. mlad{ee slowo sodervit weli~inu 1600. kogda  zadanie  trebuet
  oblastx ras{irennoj pamqti, monitor i}et po tablice dostato~no  bolx-
  {oe prostranstwo, ~toby obsluvitx makrokomandu. on wozwra}aet oblastx
  ras{irennoj pamqti trebuemogo razmera, ime`}u` samyj mlad{ij  na~alx-
  nyj adres. monitor sokra}aet koli~estwo pamqti w perwom dwojnom slowe
  w spiske swobodnoj pamqti i korrektiruet na~alxnyj adres.

       drugie dewqtx slow spiska swobodnoj pamqti  ispolxzu`tsq,  kogda
  zadaniq wozwra}a`t swobodnoe prostranstwo ras{irennoj pamqti w  ime`-
  }ijsq pul. w o~enx aktiwnyh sistemah oblastx ras{irennoj pamqti movet
  statx fragmentirowannoj.



       9.7. wypolnenie sistemnyh makrokomand



       w dannom podrazdele opisan hod  wypolneniq  kavdoj  makrokomandy
  dlq ispolxzowaniq w programme sredstw ras{irennoj pamqti.



       9.7.1. sozdanie oblasti - .CRRG



       format makrokomandy:

          .CRRG AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq oblasti.

       format tablicy argumentow EMT:

                                 - 356 -




                     !--------!--------!
        R0 => AREA:  !   36   !    0   !
                     !--------!--------!
                     !     ADDR        !
                     !-----------------!

       makrokomanda .CRRG sozdaet  oblastx  w  prostranstwe  fizi~eskih
  adresow.

       wna~ale programma monitora .CRRG prowerqet R.GSIZ w bloke opisa-
  niq oblasti, ~toby ubeditxsq w tom, ~to zapro{ena oblastx dopustimogo
  razmera (razmer dolven bytx ot 1 do 96 k). esli razmer  ne  dopustim,
  to makrokomanda ustanawliwaet kod o{ibki 10 w 52 bajt.

       zatem programma i}et swobodnyj blok  uprawleniq  oblastx`.  esli
  wse bloki uprawleniq oblastx` zanqty, to  makrokomanda  ustanawliwaet
  kod o{ibki 6 w 52 bajt.

       w zawisimosti ot argumenta w  makrokomande,  programma  pytaetsq
  wydelitx sootwetstwu`}ij ob'em pamqti dlq oblasti. dlq polu~eniq nai-
  bolx{ego ob'ema pamqti neobhodimo zaprositx 96 kslow. programma  ska-
  niruet spisok swobodnoj pamqti dlq poiska oblasti s trebuemym  razme-
  rom. makrokomanda ustanawliwaet kod o{ibki 7 w 52 bajt, esli  ona  ne
  movet wydelitx oblastx trebuemogo razmera.  pomimo  |togo,  R0  budet
  sodervatx razmer naibolx{ej dostupnoj pamqti. dlq |togo ob'ema pamqti
  neobhodimo powtorno ispolxzowatx .CRRG. esli wtoraq popytka  okavetsq
  bezuspe{noj, |to zna~it, ~to  drugoe  zadanie  uve  potrebowalo  |tot
  ob'em pamqti. dlq polu~eniq  oblasti  neobhodimo  wnowx  ispolxzowatx
  .CRRG s nowym zna~eniem iz R0.

       makrokomanda zawer{itsq uspe{no, kogda monitor wydelit  oblastx.
  programma pome}aet identifikator oblasti w  R.GID  w  bloke  opisaniq
  oblasti. ona ustanawliwaet RS.CRR w slowe sostoqniq oblasti,  o~i}aet
  R.BSTA i R.BNWD w bloke uprawleniq oblastx`  i  pome}aet  zna~eniq  w
  R.BADD i  w  R.BSIZ,  kotorye  takve  nahodqtsq  w  bloke  uprawleniq
  oblastx`. polu~ennaq pamqtx zatem udalqetsq iz spiska swobodnoj pamq-
  ti monitora i rezerwiruetsq dlq zadaniq polxzowatelq.



       9.7.2. sozdanie okna - .CRAW



       format makrokomandy:

          .CRAW AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq okna.

       format tablicy argumentow EMT:

                     !---------!--------!
        R0 => AREA:  !   36    !    2   !
                     !---------!--------!

                                 - 357 -




                     !       ADDR       !
                     !------------------!

       dlq sozdaniq wirtualxnogo adresnogo okna  ispolxzuetsq  makroko-
  manda .CRAW. wna~ale .CRAW prowerqet W.NAPR w bloke opisaniq okna  na
  dopustimostx zna~eniq. makrokomanda .CRAW ustanawliwaet kod o{ibki  0
  w 52 bajt, esli nomer ustanowlennogo  registra  aktiwnyh  stranic  ne
  dopustim po kakoj-libo pri~ine.

       dalee, programma sdwigaet W.NAPR, ~toby ustanowitx bazowyj adres
  okna w W.NBAS, kotoryj takve nahoditsq w bloke opisaniq okna.

       zatem programma prowerqet W.NSIZ w bloke  opisaniq  okna,  ~toby
  ubeditxsq w tom, ~to zapro{en dopustimyj razmer okna (okno  ne  movet
  prewy{atx 32 kslownu` granicu). makrokomanda ustanawliwaet kod o{ibki
  0 w 52 bajt, esli zapro{en newernyj razmer okna.

       programma o~i}aet bity WS.ELW, WS.UNN i WS.CRW w slowe sostoqniq
  okna.

       dalee wypolnqetsq prowerka,  budet  li  nowoe  okno  perekrywatx
  su}estwu`}ee. esli zadanie wirtualxnoe i nowoe okno perekrywaet  sta-
  ti~eskoe, to makrokomanda ustanawliwaet kod o{ibki 0. w drugih situa-
  ciqh, kogda nowoe okno perekrywaet su}estwu`}ee okno, programma  ust-
  ranqet su}estwu`}ee okno. esli su}estwu`}ee okno otobraveno, to otme-
  nqet ego otobravenie. programma .CRAW ustanawliwaet  WS.ELW  w  slowe
  sostoqniq okna, esli ona ustranqet  okno  dlq  sozdaniq  nowogo.  ona
  ustanawliwaet WS.UNM, Esli otmenqet otobravenie  okna  ili  ustranqet
  ego.

       dalee, programma delaet poisk dostupnogo bloka uprawleniq oknom.
  makrokomanda ustanawliwaet kod o{ibki 1, esli  net  swobodnyh  blokow
  uprawleniq oknom.

       pri uspe{nom zawer{enii makrokomandy, monitor modificiruet soot-
  wetstwu`}ie struktury dannyh. on zanosit zna~eniq w W.BSIZ, W.BLVR  i
  W.BFPD w bloke uprawleniq oknom; pome}aet identifikator okna w  W.NID
  w bloke opisaniq okna i WS.CRW w slowe sostoqniq okna.

       esli WS.MAP w slowe sostoqniq okna  byl  ustanowlen  pri  wyda~e
  makrokomandy .CRAW, to programma budet otobravatx  okno  na  oblastx,
  identifikator kotoroj hranitsq w bloke opisaniq okna (p. 9.7.3).



       9.7.3. otobravenie okna na oblastx - .MAP



       format makrokomandy:

          .MAP AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq okna.


                                 - 358 -




       format tablicy argumentow EMT:

                     !--------!--------!
        R0 => AREA:  !   36   !   4    !
                     !--------!--------!
                     !      ADDR       !
                     !-----------------!

       makrokomanda  .MAP  ispolxzuetsq  dlq  otobraveniq  wirtualxnogo
  adresnogo okna na oblastx fizi~eskih adresow. blok opisaniq okna dol-
  ven sodervatx identifikator oblasti, na  kotoru`  budet  otobravatxsq
  okno.

       sna~ala programma monitora .MAP nahodit blok  uprawleniq  oknom,
  kotoryj sootwetstwuet oknu, ukazannomu w makrokomande. dlq |togo  ona
  prowerqet W.NID i ustanawliwaet kod o{ibki 3, esli zna~enie  nedopus-
  timo ili rawno nul`.

       zatem programma nahodit blok uprawleniq oblastx` dlq oblasti, na
  kotoru` budet otobravatxsq |to okno. makrokomanda  ustanawliwaet  kod
  o{ibki 2, esli identifikator oblasti po kakoj-libo pri~ine ne  dopus-
  tim.

       programma i}et sme}enie w oblasti, s kotorogo okno na~net  otob-
  ravatxsq. |to zna~enie nahoditsq w W.NOFF w bloke opisaniq okna. esli
  sme}enie nahoditsq za predelami oblasti, to  makrokomanda  ustanawli-
  waet kod o{ibki 4.

       programma prowerqet dlinu okna, kotoroe  nuvno  otobrazitx.  |to
  zna~enie sodervitsq w W.NLEN w bloke opisaniq okna.  esli  ono  rawno
  nul`, programma wybiraet razmer oblasti ot zna~eniq sme}eniq do konca
  oblasti. esli |tot ob'em pamqti bolx{e, ~em okno, programma umenx{aet
  ego do razmera okna, kotoryj ona hranit w W.NLEN. esli w W.NLEN  bylo
  zagruveno zna~enie nolx,  to  zna~enie,  kotoroe  budet  zdesx  posle
  wypolneniq makrokomandy .MAP, budet fakti~eskoj dlinoj  otobravennogo
  okna. esli zna~enie W.NLEN ne rawno nul` w na~ale wypolneniq program-
  my .MAP, to ono ukazywaet qwnu` dlinu okna, kotoroe nuvno otobrazitx.
  esli |to zna~enie bolx{e, ~em razmer okna, ili esli okno budet  wyho-
  ditx za granicy oblasti, to makrokomanda ustanawliwaet kod o{ibki 4.

       programma .MAP uweli~iwaet R.BNWD w bloke  uprawleniq  oblastx`,
  kotoryj qwlqetsq s~et~ikom ~isla okon, otobravennyh na |tu oblastx.

       esli |to okno uve otobraveno kuda-libo, programma  otmenqet  ego
  otobravenie i ustanawliwaet WS.UNM w slowe sostoqniq okna; w  protiw-
  nom slu~ae |ta programma o~i}aet WS.UNM.

       dalee, programma zagruvaet registr  aktiwnyh  stranic  polxzowa-
  telxskogo revima skorrektirowannymi zna~eniqmi, ~toby otobrazitx okno
  na oblastx.

       w zawer{enie programma korrektiruet  w  bloke  uprawleniq  oknom
  zna~eniq W.BRCB, W.BHVR, W.BOFF, W.BNPD i W.BLPD.

                                 - 359 -




       9.7.4. sostoqnie otobraveniq - .GMCX



       format makrokomandy:

          .GMCX AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq okna.

       format tablicy argumentow EMT:

                     !--------!--------!
        R0 => AREA:  !   36   !   6    !
                     !--------!--------!
                     !      ADDR       !
                     !-----------------!

       makrokomanda .GMCX ispolxzuetsq dlq polu~eniq sostoqniq  otobra-
  veniq ukazannogo wirtualxnogo okna. sna~ala programma monitora  .GMCX
  prosmatriwaet sootwetstwu`}ij blok  uprawleniq  oknom.  esli  ukazano
  okno, identifikator kotorogo 0, to budet polu~eno sostoqnie stati~es-
  kogo okna wirtualxnogo zadaniq. w priwilegirowannom zadanii net  okna
  s identifikatorom 0. esli okno bylo sozdano nekorrektno, makrokomanda
  ustanawliwaet kod o{ibki 3.

       programma ustanawliwaet W.NAPR w bloke  opisaniq  okna,  kotoryj
  rawen trem perwym bitam w W.BLVR w bloke uprawleniq oknom. |tim usta-
  nawliwaetsq na~alxnyj nomer registra aktiwnyh stranic. zatem program-
  ma zagruvaet zna~eniq w W.NBAS, W.NSIZ  i  W.NRID  w  bloke  opisaniq
  okna.

       esli okno w dannyj moment ne otobraveno,  to  programma  o~i}aet
  W.NOFF, W.NBAS i W.NSTS w bloke opisaniq okna. esli okno  otobraveno,
  programma zagruvaet sme}enie w oblasti w W.NOFF, zagruvaet dlinu okna
  w W.NLEN i ustanawliwaet bit WS.MAP w slowe sostoqniq okna.



       9.7.5. otmena otobraveniq okna - .UNMAP



       format makrokomandy:

          .UNMAP AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq okna.

       format tablicy argumentow EMT:

                                 - 360 -




                     !--------!--------!
        R0 => AREA:  !   36   !   5    !
                     !--------!--------!
                     !      ADDR       !
                     !-----------------!

       makrokomanda .UNMAP otmenqet otobravenie okna na oblastx. sna~a-
  la programma monitora .UNMAP nahodit sootwetstwu`}ij blok  uprawleniq
  oknom. esli zna~enie rawno nul` ili ne dopustimo po kakoj-libo pri~i-
  ne, makrokomanda ustanawliwaet kod o{ibki 3. esli okno ne  otobraveno
  w dannyj moment, makrokomanda ustanawliwaet kod o{ibki 5. dlq  otmeny
  otobraveniq okna  programma  modificiruet  sootwetstwu`}ie  struktury
  dannyh. ona o~i}aet W.BRCB  w  bloke  uprawleniq  oknom  i  umenx{aet
  R.BNWD w bloke uprawleniq oblastx`.

       esli zadanie wirtualxnoe, programma  o~i}aet  registry  opisaniq
  stranic, kotorye sootwetstwu`t |tomu oknu. i po|tomu programma bolx{e
  ne movet ssylatxsq k wirtualxnym adresam |togo okna.

       esli zadanie priwilegirowannoe, monitor kopiruet  zna~eniq  sis-
  temnyh registrow opisaniq stranic w polxzowatelxskie, po|tomu otobra-
  venie po umol~ani` sootwetstwuet otobraveni` w sistemnom revime.

       w konce programma ustanawliwaet WS.UNM w slowe sostoqniq okna.



       9.7.6. ustranenie oblasti - .ELRG



       format makrokomandy:

          .ELRG AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq oblasti.

       format tablicy argumentow EMT:

                     !--------!--------!
        R0 => AREA:  !   36   !   1    !
                     !--------!--------!
                     !      ADDR       !
                     !-----------------!

       makrokomanda .ELRG prednazna~ena dlq ustraneniq oblasti fizi~es-
  kih adresow.

       wna~ale programma monitora .ELRG prowerqet, rawen  li  ukazannyj
  identifikator  oblasti  nul`.  w  wirtualxnom  zadanii  identifikator
  oblasti nolx ukazywaet, ~to |to - stati~eskaq oblastx, kotoru` nelxzq
  ustranqtx. w priwilegirowannom zadanii net oblasti s  identifikatorom
  nolx. w l`bom iz |tih slu~aew makrokomanda ustanawliwaet  kod  o{ibki
  2.


                                 - 361 -




       dalee, programma i}et sootwetstwu`}ij blok uprawleniq  oblastx`.
  esli identifikator oblasti ne dopustim po kakoj-libo pri~ine,  makro-
  komanda ustanawliwaet kod o{ibki 2.

       zatem programma o~i}aet RS.CRR i RS.UNM w slowe sostoqniq oblas-
  ti. esli estx kakie-libo okna, otobravennye na |tu oblastx, programma
  otmenqet ih otobravenie i ustanawliwaet RS.UNM.

       programma oswobovdaet oblastx, wozwra}aq  ee  fizi~eskoe  prost-
  ranstwo w spisok swobodnoj pamqti monitora.  w  zawer{enie  programma
  o~i}aet blok uprawleniq oblastx`.



       9.7.7. ustranenie okna - .ELAW



       format makrokomandy:

          .ELAW AREA[,ADDR]

  gde

  AREA   - adres tablicy argumentow EMT iz dwuh slow;

  ADDR   - adres bloka opisaniq okna.

       format tablicy argumentow EMT:

                     !--------!--------!
        R0 => AREA:  !   36   !   3    !
                     !--------!--------!
                     !      ADDR       !
                     !-----------------!

       po |toj makrokomande ustranqetsq wirtualxnoe adresnoe okno.  kak
  i makrokomanda .ELRG, makrokomanda .ELAW wna~ale nahodit  dlq  ustra-
  nqemogo okna blok uprawleniq oknom. ona prowerqet W.NID w bloke  opi-
  saniq okna. esli identifikator okna nolx ili nedopustim po kakoj-libo
  pri~ine, makrokomanda ustanawliwaet kod o{ibki 3.

       zatem makrokomanda .ELAW o~i}aet WS.CRW i WS.NUM w slowe sostoq-
  niq okna. esli okno otobraveno, makrokomanda otmenqet ego otobravenie
  i ustanawliwaet  bit  WS.UNM.  makrokomanda  ustranqet  okno,  o~i}aq
  W.BSIZ w bloke uprawleniq oknom. nakonec, makrokomanda  ustanawliwaet
  bit WS.ELW w slowe sostoqniq okna.



       9.7.8. kody o{ibok



       w tabl. 25 dano kratkoe opisanie kodow  o{ibok,  ustanawliwaemyh
  makrokomandami ras{irennoj pamqti w 52 bajt.  w  tabl.  26  pokazano,
  kakie kody o{ibok movet ustanawliwatx kavdaq makrokomanda.

                                 - 362 -




                                                  tablica 25

           kody o{ibok makrokomand ras{irennoj pamqti
                       i ih zna~eniq
   ----------------------------------------------------------
    kod w  !                 zna~enie
   52 bajte!
   ----------------------------------------------------------
      0    ! neweren identifikator okna. okno sli{kom bolx{oe,
           ! zna~enie W.NAPR bolx{e 7 ili ukazano neprawilxno
           !
      1    ! popytka sozdatx  bolx{e semi  okon  w  programme
           ! polxzowatelq. sleduet pomnitx,  ~to  stati~eskoe
           ! okno wsegda opredeleno dlq wirtualxnogo zadaniq,
           ! w priwelegirowannom  zadanii  odno  okno  wsegda
           ! wsegda  zarezerwirowano  monitorom.  movno   ili
           ! otmenitx otobravenie kakogo-libo okna, ili pere-
           ! opredelitx prostranstwo wirtualxnyh  adresow  na
           ! menx{ee koli~estwo okon
           !
       2   ! identifikator oblasti ne dopustim po  kakoj-libo
           ! pri~ine
           !
       3   ! identifikator  okna  ne dopustim  po  kakoj-libo
           ! pri~ine
           !
       4   ! kombinaciq sme}eniq w oblasti  i  razmera  okna,
           ! kotoroe dolvno otobrazitxsq na oblastx,  newerna
           !
       5   ! ukazannoe okno w  dannyj  moment  ne  otobraveno
           !
       6   ! popytka sozdatx bolx{e treh oblastej w programme.
           ! neobhodimo  pomnitx,  ~to  stati~eskaq   oblastx
           ! wsegda opredelena  dlq  wirtualxnogo  zadaniq  i
           ! odna oblastx wsegda zarezerwirowana monitorom  w
           ! priwilegirowannom   zadanii.   movno   ustranitx
           ! kaku`-libo oblastx i  zatem  popytatxsq  sozdatx
           ! nowu` oblastx, ili  pereopredelitx  prostranstwo
           ! fizi~eskih adresow na menx{ee koli~estwo  oblas-
           ! tej. sleduet zametitx, ~to  owerlei  ras{irennoj
           ! pamqti i sistemnaq makrokomanda .SETTOP dlq  XM-
           ! monitora zanima`t odnu oblastx kavdyj
           !
       7   ! nedostato~no  dostupnoj  pamqti   dlq   sozdaniq
           ! oblasti trebuemogo razmera. programma wozwra}aet
           ! razmer naibolx{ej dostupnoj oblasti w R0, no  ne
           ! sozdaet ee
           !
      10   ! ukazan newernyj razmer oblasti. nulewoj razmer i
           ! zna~enie bolx{e 96 kslow qwlq`tsq nedopustimymi

                                 - 363 -




                                       tablica 26

                           kody o{ibok
                -----------------------------------
                              !    kod o{ibki
                 makrokomanda !--------------------
                              ! 0 1 2 3 4 5 6 7 10
                -----------------------------------
                   .CRRG      !             * * *
                   .CRAW      ! * *
                   .MAP       !     * * *
                   .GMCX      !       *
                   .UNMAP     !       *   *
                   .ELRG      !     *
                   .ELAW      !       *




       9.8. ograni~eniq



       RT11XM nalagaet nekotorye ograni~eniq na ispolxzowanie ras{iren-
  noj pamqti. w sledu`}ih punktah opisany w ob}ih ~ertah metody ispolx-
  zowaniq ras{irennoj pamqti.



       9.8.1. ograni~eniq pri ispolxzowanii ra1



       inogda RT11XM "beret w dolg" sistemnyj registr adresa stranicy 1
  dlq swoih  celej.  naprimer,  on  ispolxzuet  ra1,  ~toby  otobrazitx
  oblastx blokow EMt pri obrabotke makrokomandy.

       t.k. monitor izmenqet sistemnyj ra1,  to  ssylki  k  wirtualxnym
  adresam w predelah ot 20000 do 37777 ne wsegda otnosqtsq k sootwetst-
  wu`}im fizi~eskim adresam. ~toby izbevatx powtornogo otobraveniq wir-
  tualxnyh adresow, uprawlqemyh  sistemnym  ra1,  neobhodimo  sobl`datx
  sledu`}ie programmnye ograni~eniq:

       1) l`bye oblasti kanalow, kotorye sozda`tsq makrokomandoj  .CDFN
  dolvny nahoditxsq w mlad{ih 28 kslowah pamqti;

       2) l`baq  o~eredx  |lementow,  kotoraq  sozdaetsq  makrokomandoj
  .QSET, dolvna nahoditxsq w mlad{ih 28 kslowah pamqti; krome togo, ona
  ne dolvna razme}atxsq w granicah adresow ot 20000 do  37777;  sleduet
  zametitx, ~to na |lement o~eredi otwoditsq 10 (desqti~noe) slow;

       3) programmy obrabotki prerywanij dolvny razme}atxsq  w  mlad{ih
  28 kslowah pamqti; krome togo, oni ne dolvny bytx rezidentnymi  i  ne
  dolvny ssylatxsq k adresam w predelah ot 20000 do 37777;  w  ~asti  2
  dannogo dokumenta opisany faktory, kotorye  sleduet  u~itywatx,  esli
  programma sodervit wstroennu` programmu  obrabotki  prerywaniq;  esli
  programma imeet programmu obrabotki prerywaniq, to |tu programmu nado
  wypolnqtx kak priwilegirowannoe zadanie, ~toby ona mogla imetx dostup
  k monitoru i k stranice wwoda/wywoda; ograni~eniq  na  drajwery  ust-

                                 - 364 -




  rojstw i wwod/wywod w RT11XM pere~isleny w ~asti 2 |togo dokumenta.

       ponimanie |tih  ograni~enij  wavno  dlq  polxzowatelq,  ime`}ego
  programmu s sobstwennoj wstroennoj programmoj  obrabotki  prerywaniq,
  ili zagruva`}ego w ras{irennu` pamqtx bufer dannyh dlq  wwoda/wywoda,
  a takve pi{u}ego drajwer ustrojstwa dlq RT11XM.



       9.8.2. ograni~eniq sistemnyh makrokomand



       nekotorye makrokomandy  ime`t  specialxnye  ograni~eniq  pri  ih
  rabote s ras{irennoj pamqtx`. |ti makrokomandy i ih ograni~eniq  sle-
  du`}ie:

       makrokomanda                ograni~enie
       -------------------------------------------------

          .CDFN           oblastx kanalow,  ukazannaq   w
                          makrokomande, dolvna nahoditxsq
                          w mlad{ih 28 kslow pamqti;

          .QSET           prostranstwo   dlq    |lementow
                          o~eredi    dolvno    nahoditxsq
                          w mlad{ih  28  kslow  pamqti.
                          pomimo |togo  kavdomu  |lementu
                          o~eredi    dolvno    otwoditxsq
                          10 (desqti~noe) slow;

          .CNTXSW         wirtualxnye  zadaniq  ne  mogut
                          ispolxzowatx |tu  makrokomandu,
                          t.k.   ona   ne   trebuetsq.



       9.8.3. ograni~eniq pri ispolxzowanii ra2



       drajwer soob}enij MQ nahoditsq w fizi~eskoj pamqti, otobravaemoj
  registrom adresa stranicy 2. pri ispolxzowanii drajwera MQ, wse ogra-
  ni~eniq ra1 rasprostranq`tsq takve i na wirtualxnye adresa,  kotorymi
  uprawlqet ra2 (adresa w predelah ot 40000 do 57777).



       9.8.4. sinhronnye sistemnye lowu{ki



       sinhronnaq sistemnaq lowu{ka - |to programmnoe prerywanie, koto-
  roe proishodit sinhronno s  wypolneniem  polxzowatelxskoj  programmy.
  naprimer, instrukciq  TRAP,  kotoru`  wypolnqet  programma,  qwlqetsq
  sinhronnoj sistemnoj lowu{koj. programma, kotoraq sodervit nedopusti-
  mu` instrukci`, wyzywaet lowu{ku  po  wektoru  10,  kotoraq  qwlqetsq
  sinhronnoj sistemnoj lowu{koj. pri wozniknowenii lowu{ki teku}ie zna-
  ~eniq PS i PC zanosqtsq w stek,  a  iz  wektora  lowu{ki  zagruva`tsq

                                 - 365 -




  nowye PS i PC. w tabl. 27 dan spisok sinhronnyh sistemnyh  lowu{ek  i
  sootwetstwu`}ie im wektora.

                                                 tablica 27
            sinhronnye sistemnye lowu{ki i ih wektory
   ---------------------------------------------------------
    wektor !        sinhronnaq sistemnaq lowu{ka
   ---------------------------------------------------------
        4  ! woznikaet pri ssylke na ne~etnyj adres ili pri
           ! tajm-aute na ob}ej {ine
           !
       10  ! woznikaet pri popytke wypolnitx rezerwnu`  in-
           ! strukci`
           !
       14  ! lowu{ka to~ki ostanowa; oby~no  wydaetsq  sis-
           ! temnoj programmoj-otlad~ikom ODT
           !
       20  ! lowu{ka wwoda/wywoda (instrukciq IOT)
           !
       34  ! instrukciq TRAP; wydaetsq programmoj dlq izme-
           ! neniq hoda wypolneniq
           !
      114  ! lowu{ka ~etnosti pamqti; woznikaet pri  o{ibke
           ! ~etnosti pamqti
           !
      244  ! lowu{ka FPU; woznikaet pri o{ibke w bloke
           ! processora plawa`}ej zapqtoj
           !
      250  ! lowu{ka dispet~era pamqti; woznikaet  pri  po-
           ! pytke zadaniq obratitxsq k wirtualxnomu  adre-
           ! su, kotoryj ne otobraven na fizi~esku` q~ejku


       w RT11XM sinhronnye sistemnye lowu{ki,  podobno  prerywaniqm  ot
  ustrojstw, wybira`t nowye PS i PC iz sootwetstwu`}ego wektora w  sis-
  temnoj oblasti. naprimer, kogda programma wypolnqet  instrukci`  BPT,
  nowye PS i PC wybira`tsq iz fizi~eskih q~eek 14 i 16. kak ukazywalosx
  ranx{e, priwilegirowannoe zadanie perwona~alxno otobravaetsq na  sis-
  temnu` oblastx wektorow, po|tomu wirtualxnyj  adres  14  w  programme
  otobravaetsq na fizi~esku` q~ejku 14. s drugoj  storony,  wirtualxnoe
  zadanie ne imeet dostupa k sistemnoj oblasti wektorow.  perwona~alxno
  oblastx wirtualxnyh wektorow  wirtualxnogo  zadaniq  otobravaetsq  na
  fizi~eskie adresa, na~inaq s adresa 500, a ne 0.  po|tomu,  dlq  wir-
  tualxnogo zadaniq wirtualxnyj wektor 14  ne  nahoditsq  w  fizi~eskoj
  q~ejke 14.

       kavdu` sinhronnu` sistemnu` lowu{ku sistema RT11XM  obespe~iwaet
  mehanizmom zapolneniq lowu{ki, a takve zna~eniqmi dlq nowyh PC  i  PS
  iz wirtualxnogo wektora. w posledu`}ih podpunktah opisano, kak RT11XM
  reagiruet na specialxnye sistemnye lowu{ki.

                                 - 366 -




       9.8.4.1. instrukcii TRAP, BPT i IOT



       kogda programma, wypolnq`}aqsq pod uprawleniem RT11XM, wypolnqet
  instrukci` TRAP, BPT ili IOT, wypolnenie perekl`~aetsq  na  sistemnyj
  revim processora. apparatno  wybiraetsq  sodervimoe  sootwetstwu`}ego
  wektora (sm. tabl. 27) iz sistemnoj  oblasti.  odnako,  wmesto  togo,
  ~toby nemedlenno perejti k programme obrabotki lowu{ki,  ukazannoj  w
  sistemnom wektore, monitor zamenqet nowye zna~eniq PS i PC  zna~eniq-
  mi, kotorye wyzywa`t prodolvenie raboty monitora. celx |togo  -  wyb-
  ratx sodervimoe sootwetstwu`}ego wirtualxnogo wektora w oblasti polx-
  zowatelq i zatem peredatx uprawlenie programme, ukazannoj w wirtualx-
  nom PC. sistemnye i polxzowatelxskie wektory  dlq  priwilegirowannogo
  zadaniq identi~ny. wirtualxnoe zadanie ne imeet dostupa  k  sistemnym
  wektoram; odnako, movno zagruzitx zna~eniq w wirtualxnye wektory tak,
  ~toby monitor mog wybratx  ih  pri  wozniknowenii  lowu{ki.  osnownaq
  zada~a monitora pri obrabotke lowu{ki zakl`~aetsq w tom, ~toby  pere-
  datx uprawlenie sootwetstwu`}ej programme  po  obrabotke  specialxnoj
  lowu{ki ~erez sodervimoe wirtualxnogo wektora zadaniq.

       esli wirtualxnyj wektor sodervit ~etnoe nenulewoe  zna~enie,  to
  monitor ne o~i}aet wektor posle perwoj wstre~ennoj lowu{ki. tem samym
  wozmovna rekursiq programmy.



       9.8.4.2. lowu{ki 4, 10 i FPU



       monitor obespe~iwaet za}itu wektorow sistemnyh lowu{ek 4 i 10  i
  lowu{ek FPU, ~to pozwolqet polxzowatel` primenqtx  sobstwennye  prog-
  rammy obrabotki lowu{ek. makrokomandy .TRPSET i .SFPA pozwolq`t polx-
  zowatelxskoj programme ustanawliwatx adresa programm obrabotki  lowu-
  {ek, ne izmenqq sistemnu` ili  polxzowatelxsku`  oblasti  wirtualxnyh
  wektorow. |ti dwe makrokomandy funkcioniru`t RT11XM takve,  kak  i  w
  RT11FB. takim obrazom, esli ukazan adres  polxzowatelxskoj  programmy
  obrabotki lowu{ki pri wypolnenii makrokomandy, to  monitor  zagruvaet
  |tu informaci` w sme{annu` oblastx zadaniq. na wyhode monitor o~i}aet
  |tot adres w sme{annoj oblasti,  po|tomu  polxzowatelxskaq  programma
  obrabotki lowu{ki dolvna pereustanowitx |tu oblastx pered wozwratom w
  osnownu` programmu, wypolniw libo makrokomandu .TRPSET, libo makroko-
  mandu .SFPA.



       9.8.4.3. o{ibki dispet~era pamqti



       o{ibka dispet~era pamqti woznikaet, esli programma  ssylaetsq  k
  wirtualxnomu adresu, kotoryj ne otobraven na fizi~esku` q~ejku.  esli
  o{ibka dispet~era pamqti woznikla pri rabote w sistemnom  revime,  to
  proishodit ostanow sistemy. esli o{ibka dispet~era pamqti woznikla  w
  polxzowatelxskom revime, monitor swqzywaetsq s lowu{koj ~erez sistem-
  nyj wektor i obespe~iwaet nowym PS i PC iz oblasti wirtualxnogo  wek-
  tora polxzowatelq. kogda monitor wybral sodervimoe wirtualxnogo  wek-
  tora zadaniq, on o~i}aet ego. esli woznikaet  wtoraq  o{ibka  i  wir-

                                 - 367 -




  tualxnyj wektor rawen nul`, monitor pe~ataet soob}enie:

          ?MON-F-MMU FAULT

  i udalqet zadanie.  ~toby  pozwolitx  rekursi`,  programma  obrabotki
  lowu{ki dolvna powtorno ustanowitx wektor  o{ibki  dispet~era  pamqti
  (q~ejki 250 i 252)  w  oblasti  wirtualxnyh  wektorow  zadaniq.  esli
  RT11XM dopuskaet awtomati~esku` rekursi`, to programma  movet  zacik-
  litxsq na o{ibke dispet~era pamqti do teh por, poka ne budet ostanow-
  len processor.



       9.8.4.4. o{ibki pariteta pamqti



       nekotoye tipy operatiwnoj  pamqti  pozwolq`t  sisteme  wypolnqtx
  prowerku na nali~ie o{ibki pariteta pamqti. |to specialxnoe  swojstwo
  prowerki pariteta pamqti wybiraetsq wo wremq generacii sistemy.  esli
  imeetsq apparatura pariteta pamqti, no wo wremq generacii ne  wybrano
  swojstwo prowerki pariteta pamqti,  o{ibka  pariteta  pamqti  wyzowet
  ostanow sistemy.

       dlq sistem, obespe~iwa`}ih prowerku pariteta  pamqti,  procedura
  sinhronnoj sistemnoj lowu{ki pohova na proceduru dlq o{ibok dispet~e-
  ra pamqti. takim obrazom, monitor obra}aetsq k lowu{ke ~erez  sistem-
  nyj wektor w fizi~eskih adresah 114 i 116. zatem, on wybiraet  soder-
  vimoe wirtualxnyh adresow polxzowatelxskoj programmy 114 i 116,  o~i-
  }aet ih i peredaet uprawlenie  polxzowatelxskoj  programme  obrabotki
  lowu{ki, osnowywaqsx na nowyh PS i PC.

       esli proishodit powtornaq o{ibka pariteta pamqti  i  wirtualxnyj
  wektor rawen 0, pe~ataetsq soob}enie

         ?MON-F-MEM ERR

  i zadanie udalqetsq.

       ~toby pozwolitx rekursi`, polxzowatelxskaq  programma  obrabotki
  lowu{ki dolvna wosstanowitx sodervimoe wektora o{ibki pariteta pamqti
  w wirtualxnyh adresah 114 i 116.



       9.9. otladka programm



       dlq otladki wirtualxnogo ili priwilegirowannogo zadaniq w siste-
  me s RT11XM ispolxzuetsq sistemnaq programma VDT. ee movno  primenqtx
  takve w RT11SJ(FB), a takve w mnogoterminalxnyh sistemah.

       VDT.OBJ ispolxzuetsq analogi~no ODT.OBJ; ee neobhodimo skompono-
  watx s programmoj, kotoru` nuvno otladitx.  adres  pereda~i  dlq  VDT
  takoj ve, kak i dlq ODT.

       VDT ne sodervit programm dlq obsluviwaniq prerywanij ili priori-
  teta, kak ODT. w otli~ie ot ODT, kotoraq wypolnqetsq na 7  prioritete

                                 - 368 -




  i wypolnqet swoj sobstwennyj wwod/wywod na terminal, VDT  rabotaet  s
  takim ve prioritetom, kak i polxzowatelxskaq programma, i  ispolxzuet
  sistemnye makrokomandy .TTYIN i .TTYOUT dlq  wypolneniq  wwoda/wywoda
  na terminal.

       t.k. VDT ispolxzuet makrokomandy .TTYIN i .TTYOUT, to  ee  movno
  zapuskatx s konsolxnogo terminala  zadaniq.  poskolxku  VDT  izmenqet
  sodervimoe slowa sostoqniq zadaniq (JSW), ona dolvna hranitx ego per-
  wona~alxnoe sodervimoe gde-libo w drugom meste. dlq polu~eniq  perwo-
  na~alxnogo sodervimogo JSW movno ispolxzowatx komandu $J/; ego  movno
  takve modificirowatx.

       VDT wypolnqetsq w polxzowatelxskom, a ne w sistemnom revime pro-
  cessora. pri otladke wirtualxnogo zadaniq s VDT, imeetsq dostup tolx-
  ko k oblasti zadaniq. net  dostupa  k  za}i}ennym  oblastqm  sistemy,
  takim kak monitor, wektory i stranica wwoda/wywoda. kogda otlaviwaet-
  sq priwilegirowannoe zadanie s VDT, imeetsq dostup k takoj ve pamqti,
  kak i u otsleviwaemogo zadanie.



       9.10. primer programmy



  ;       primer programmy dlq raboty s ras{irennoj pamqtx`
                  .TITLE  XMCOPY
                  .ENABL  LC
          ;|tot primer ispolxzuet makrokomandy ras{irennoj
          ;pamqti. programma kopiruet fajly i prowerqet
          ;rezulxtat kopirowaniq. dlq raboty ona ispolxzuet
          ;4-kslownyj bufer w ras{irennoj pamqti.
          .NLIST  BEX
          .MCALL  .UNMAP, .ELRG,  .ELAW,  .CRRG,  .CRAW,  .MAP
          .MCALL  .PRINT, .EXIT,  .CLOSE, .CSIGEN,.READW, .WRITW
          .MCALL  .RDBBK, .WDBBK, .TTYOUT,.WDBDF, .RDBDF
          JSW     =  44           ;slowo sostoqniq zadaniq JSW
          J.VIRT  =  2000         ;bit wirtualxnogo zadaniq
                                  ;w JSW
          ERRBYT  =  52           ;bajt o{ibki
          APR     =  2            ;ra/ro dlq perwogo okna
          APR1    =  4            ;ra/ro dlq wtorogo okna
          BUF     =  WDB+W.NBAS   ;wirtualxnyj adres perwogo
                                  ;bufera
          BUF1    =  WDB1+W.NBAS  ;wirtualxnyj adres wtorogo
                                  ;bufera
          CORSIZ  =  4096.        ;razmer bufera w slowah
          PAGSIZ  =  CORSIZ/256.  ;razmer stranicy w blokah
          WRNID   =  WDB+W.NRID   ;adres perwoj oblasti
          WRNID1  =  WDB1+W.NRID  ;adres wtoroj oblasti
          .ASECT

          .= JSW
          .WORD   J.VIRT          ;sdelatx zadanie wirtualxnym
          .PSECT                  ;na~alo koda
          .WDBDF                  ;sozdatx blok opisaniq okna
          .RDBDF                  ;i opisaniq oblasti

  START:: .CSIGEN #ENDCRE,#DEFLT,#0  ;polu~itx specifikaci`

                                 - 369 -




                                  ;fajlow, drajwerow i otkrytx
                                  ;fajly
          BCS     START           ;perehod po o{ibke
          INCB    ERRNO           ;ERR = 1X
          .CRRG   #CAREA,#RDB     ;sozdatx oblastx
          BCC     10$             ;uspe{noe zawer{enie
          JMP     ERROR           ;soob}itx ob o{ibke
  10$:    MOV     RDB,WRNID       ;zaslatx ID oblasti w blok
                                  ;opisaniq okna
          INCB    ERRNO           ;ERR = 2X
          .CRAW   #CAREA,#WDB     ;sozdatx okno
          BCC     20$             ;uspe{noe zawer{enie
          JMP     ERROR           ;soob}itx ob o{ibke
  20$:    INCB    ERRNO           ;ERR = 3X
          .MAP    #CAREA,#WDB     ;qwno otobrazitx okno
          BCC     30$             ;uspe{noe zawer{enie
          JMP     ERROR           ;soob}itx ob o{ibke
  30$:    CLR     R1              ;R1 - nomer bloka dlq w/w
          MOV     #CORSIZ,R2      ;R2 - ~islo slow dlq ~teniq
          INCB    ERRNO           ;ERR = 4X
  READ:   .READW  #RAREA,#3,BUF,R2,R1  ;~itatx 4k-slownye
                                  ;bloki
          BCC     WRITE           ;uspe{noe zawer{enie
          TSTB    @#ERRBYT        ;konec fajla ?
          BEQ     PASS2           ;perejti, esli da
          JMP     ERROR           ;grubaq o{ibka,
                                  ;soob}itx o nej
  WRITE:  MOV     R0,R2           ;R2 - razmer bufera
          .WRITW  #RAREA,#0,BUF,R2,R1  ;zapisatx wyhodnoj
                                  ;bufer
          BCC     ADDIT           ;uspe{noe zawer{enie
          INCB    ERRNO           ;ERR = 5X
          JMP     ERROR           ;soob}itx ob o{ibke
  ADDIT:  ADD     #PAGSIZ,R1      ;skorrektirowatx nomer
                                  ;bloka, zatem
          BR      READ            ;perejti k drugomu buferu
  PASS2:  INCB    ERRNO           ;ERR = 6X
          .CRRG   #CAREA,#RDB1    ;sozdatx oblastx
          BCC     35$             ;uspe{noe zawer{enie
          JMP     ERROR           ;soob}itx ob o{ibke
  35$:    MOV     RDB1,WRNID1     ;zanesti ID oblasti w
                                  ;blok opisaniq okna

  ;** primer ispolxzowaniq  makrokomandy  .CRAW, **
  ;** kotoraq neqwno wypolnqet makrokomandu .MAP **
          INCB    ERRNO           ;ERR = 7X
          .CRAW   #CAREA,#WDB1    ;sozdatx okno, ispolxzuq
                                  ;neqwno .MAP
          BCC     VERIFY          ;uspe{noe zawer{enie
          JMP     ERROR           ;soob}itx ob o{ibke
  VERIFY::INCB    ERRNO           ;ERR = 8X
          CLR     R1              ;R1 - nomer bloka
  GETBLK: MOV     #CORSIZ,R2      ;R2 = 4k (razmer bufera)
          .READW  #RAREA,#3,BUF1,R2,R1  ;pro~itatx 4 kslow
                                  ;whodnogo fajla
          BCC     40$             ;uspe{noe zawer{enie
          TSTB    @#ERRBYT        ;konec fajla ?
          BEQ     ENDIT           ;esli da, perejti
          JMP     ERROR           ;soob}itx o gruboj o{ibke

                                 - 370 -




  40$:    MOV     R0,R2           ;R2 - razmer bufera
          .READW  #RAREA,#0,BUF,R2,R1  ;popytka polu~itx fajl
                                  ;takogo ve razmera
          BCC     50$             ;uspe{noe zawer{enie
          INCB    ERRNO           ;ERR = 9X
          JMP     ERROR           ;soob}itx ob o{ibke
  50$:    MOV     BUF,R4          ;polu~itx adres wyhodnogo
                                  ;bufera
          MOV     BUF1,R3         ;polu~itx adres whodnogo
                                  ;bufera
  70$:    CMP     (R4)+,(R3)+     ;proweritx, ~to dannye
                                  ;odinakowy
          BNE     ERRDAT          ;net, soob}itx ob o{ibke
          DEC     R2              ;zakon~ili ?
          BNE     70$             ;perejti, esli net
          ADD     #PAGSIZ,R1      ;skorrektirowatx nomer bloka
          BR      GETBLK          ;polu~itx drugu` paru
                                  ;buferow
  ENDIT:  .PRINT  #ENDPRG         ;pe~atx soob}eniq ob
                                  ;okon~anii
  XCLOS:  .CLOSE  #0              ;zakrytx wyhodnoj fajl
          .UNMAP  #CAREA,#WDB     ;qwno otmenitx perwoe okno

          .ELAW   #CAREA,#WDB     ;qwno ustranitx perwoe okno

          .ELRG   #CAREA,#RDB     ;ustranitx perwu` oblastx
          .ELRG   #CAREA,#RDB1    ;otmenitx otobravenie
                                  ;wtorogo okna i ustranitx
                                  ;wtoru` oblastx
          .EXIT                   ;zawer{itx programmu

  ERROR:  MOVB    @#ERRBYT,R0     ;wydelitx bajt dlq koda
                                  ;o{ibki,
          ADD     #'0,R0          ;preobrazowatx w koi-7,
          MOVB    R0,ERRNO+1      ;zagruzitx ego w soob}enie
          .PRINT  #ERR            ;ob o{ibke i raspe~atatx
          BR      XCLOS           ;perejti na zakrytie
                                  ;wyhodnogo fajla
  ERRDAT: .PRINT  #ERRBUF         ;soob}itx o sboe pri
                                  ;prowerke
          BR      XCLOS           ;perejti na zakrytie
                                  ;wyhodnogo fajla
  RDB:    .RDBBK  CORSIZ/32.      ;opredelitx blok
                                  ;opisaniq oblasti
  WDB:    .WDBBK  APR,CORSIZ/32.  ;opredelitx blok
                                  ;opisaniq okna
  RDB1:   .RDBBK  CORSIZ/32.      ;opredelitx wtoru` oblastx
                                  ;takim ve sposobom
  WDB1:   .WDBBK  APR1,CORSIZ/32.,0,0,CORSIZ/32.,WS.MAP
                                  ;i wtoroe okno
  CAREA:  .BLKW   2.              ;blok argumentow EMT
  RAREA:  .BLKW   6
  DEFLT:  .WORD   0,0,0,0         ;tip fajla ne opredelen
  ENDPRG: .ASCIZ  /* konec programmy hmCOPY */
  ERR:    .ASCII  %? o{ibka w makrokomande ili o{ibka w/w %
  ERRNO:  .ASCIZ  /00/
  ERRBUF: .ASCIZ  /? o{ibka pri prowerke dannyh ?/
  ENDCRE  = .
          .END    START

                                 - 371 -






































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           