Cunoștințe, prelegere, modelare în lumea gpss

Utilizarea blocurilor PREEMPT și RETURN este prezentată în clauza 6.5.5.

6.2.7.2. Întrerupeți în modul "captură"

În modul "captură", dacă OCU este deja în uz, transactul activ este plasat în lista întreruperilor în așteptare sau "captează" OKS. Întreruperea serviciului imediat și nu plasarea transactului în listă are loc atunci când lista întreruperilor în așteptare este goală și serviciul transact în sine nu este un "invadator".

Transactele din lista de întreruperi în așteptare primesc dreptul de a ocupa OCU mai devreme decât tranzacțiile întrerupte sau tranzacțiile întrerupte din lista de întârziere OCS.

6.2.7.3. Verificarea stării unui dispozitiv cu un singur canal care funcționează în modul prioritar

Verificarea stării PCC în modul prioritar poate fi efectuată de către GATE. și, de asemenea, folosind variabila Boolean și blocul TEST.

Să luăm în considerare verificarea stării GIC de către blocul GATE.

Condiția de testare este specificată de una dintre următoarele afirmații condiționale:

  • I - PCU specificat de operandul A. este întrerupt;
  • NI - OKU, specificată de operandul A. nu este întreruptă.

În primul exemplu, blocul GATE va trece peste tranzacția atunci când STC-ul lui Stan este întrerupt. În al doilea exemplu Transact trece la blocul următor, atunci când nu a întrerupt CCCH, număr care este definit ca fiind rezultatul calculului și rotunjirii ulterior până la întreaga expresie între paranteze (V $ Rasp-3). În al treilea exemplu, în cazul întreruperii imprimării OKC, tranzacția va fi trimisă la blocul etichetat Udal.

În primul și al doilea exemplu, blocul GATE funcționează în modul de defect al intrării în cazul neîndeplinirii condiției. Aici, remarca făcută în § 6.2.4 rămâne valabilă: absența operandului B poate duce la o creștere a timpului de simulare a calculatorului. Cu toate acestea, în unele cazuri, acest mod poate fi probabil utilizat.

6.2.8. Inaccesibilitatea dispozitivului cu un singur canal

Pentru a modela defectele DCS și alte situații din GPSS World, sunt furnizate blocuri care realizează inaccesibilitatea și disponibilitatea DCS. Când se utilizează aceste blocuri, statisticile OCS nu sunt distorsionate. Aici avem în vedere următoarele. Pentru a simula, de exemplu, defecțiunile, puteți utiliza și modul de întrerupere (PREEMPT). Cu toate acestea, transacts provocând întreruperea (simularea defecțiunilor CMO) sunt înregistrate în statisticile ca, TRANSACT furnizat la buna funcționare a OCP. Și acest lucru este greșit, ca urmare a faptului că statisticile OCU sunt distorsionate.

6.2.8.1. Recuperarea de stat și disponibilitate nevalidă

Inaccesibilitatea CMC este modelată de blocul FUNAVAIL (simbolul F înseamnă OKU, UNAVAIL - indisponibil). Când se utilizează acest bloc, statisticile OCS nu sunt distorsionate.

Blocul face OKC cu numele sau numărul indicat de operandul A inaccesibil (a se vedea diagrama bloc).

Toate tranzacțiile procesate de blocul FUNAVAIL. sunt împărțite în trei clase, care determină scopul operanzilor:

  • un transactor care ocupă OKU (de SEIZE sau PREEMPT) în momentul transferului său într-o stare inaccesibilă (operanzii B.C. D);
  • tranzacțiile întrerupte anterior în lista de întreruperi (operanții E. F);
  • Transactele care se află în lista întreruperilor în așteptare și în lista de întârziere a OCS (operanții G. H).

Operand B specifica modurile de procesare a unei tranzactii care ocupa OCU atunci cand nu este disponibila:

  • CO - modul de continuare. continuarea prelucrării tranzacției ocupate de OCU în timpul indisponibilității;
  • RE - ștergeți modul. stergerea si transmiterea tranzactiei ACS ocupate catre blocul a carui eticheta ar trebui sa fie indicata de operandul C;
  • în mod implicit - pentru a anula procesarea și a plasa în lista de întreruperi OKU; După restabilirea disponibilității, această tranzacție poate lua OKS și "pre-service".

Operand C este eticheta blocului in care va fi trimis in modul de tranzactie stergere, care a luat OCU atunci cand a fost transferat intr-o stare inaccesibila.

Operand D - numarul sau numele parametrului tranzactiei care a ocupat OCU cand a fost transferat intr-o stare inaccesibila; dacă este șters (modul RE), adică este exclus din BSS, acest parametru va înregistra timpul rămas pentru tranzacția la distanță până la terminarea serviciului.

moduri de procesare Operand E TRANSACT definite, care sunt, la momentul transferului de CMO în stare indisponibilă pentru a întrerupe lista, adică cele TRANSACT de funcționare la această Oku a fost întreruptă anterior ..:

  • CO - modul de continuare. continuați să lucrați OKU în timpul indisponibilității - pentru a efectua tranzacții din lista de întreruperi;
  • RE - ștergeți modul. șterge și transmite tranzacțiile din lista de întreruperi către noul bloc al cărui etichetă trebuie specificată de către operandul F;
  • în mod implicit - lăsați tranzacțiile întrerupte anterior în lista de întreruperi OCU și împiedicați-le să ocupe aceasta în timpul indisponibilității.

Operand F indică eticheta de bloc la care va fi direcționat transacts de CMOs întrerupe lista, care este motivul pentru care nu pot fi în SBS, astfel încât acestea nu au posibilitatea de a intra în setările de timp, rămase până la sfârșitul serviciului.

Operandul F poate fi de asemenea folosit atunci cand nu exista operand E (implicit). În acest caz, întreruperea serviciului este reținută pentru tranzacțiile transferate către noul bloc.

Operand G tranzacționeze moduri de procesare, care sunt definite în momentul transferului de CMO în stare indisponibilă pentru a întrerupe lista de așteptare, adică așteptând să efectueze întreruperi și întârzieri în lista ..:

  • CO - modul de continuare. continuați să lucrați OKS în timpul indisponibilității - să efectuați tranzacții din lista de întreruperi în așteptare și din lista de întârziere;
  • RE - ștergeți modul. stergerea si transmiterea tranzactiilor din lista de intreruperi in asteptare si lista de intarziere catre noul bloc al carui eticheta ar trebui sa fie indicata de operandul H;
  • în mod implicit - lăsați tranzacția în lista întreruperilor în așteptare și lista OCU întârziată și le interzice să o ocupă în timpul indisponibilității.

Operand H specifica eticheta noului bloc, la care in modul delete (RE), tranzactiile sunt trimise din lista de intreruperi in asteptare si lista de intarziere. Atunci când operanzul G nu este utilizat, operandul H nu poate fi utilizat.

Inaccesibilitatea OCS este reținută până când transactorul care a provocat trecerea la o stare inaccesibilă intră în bloc

Blocul FAVAIL modifică starea OCU la cea disponibilă, adică restabilește modul normal de introducere a tranzacțiilor în CMC. Toate tranzacțiile care așteaptă starea disponibilă a CMC specificată de operandul A. sunt activate și pot încerca să o ocupe.

Aplicarea unităților FUNAVAIL și FAVAIL este prezentată în 6.7.5.

Notă 1. Operanzii B ... H se referă numai la tranzacțiile celor trei clase menționate anterior. Alte tranzacții care încearcă să întrerupă OKS deja într-o stare inaccesibilă nu includ aceste clase, iar operanzii B ... H nu au nimic de-a face cu ei.

Observația 2. Transferarea OKU într-o stare inaccesibilă și permiterea continuării procesării tranzacțiilor din cele trei clase indicate permite simularea nu numai a unor defecțiuni, ci și a diverselor discipline de întreținere.

6.2.8.2. Verificarea stării nedisponibilității și disponibilității unui dispozitiv cu un singur canal

Verificarea stării OKC în modul indisponibil se face prin blocul GATE. Vezi Blocul 6.2.4 pentru formatul blocului.

Condiția de testare este specificată de una dintre următoarele afirmații condiționale:

FNV - OKS specificat de operandul A. nu este disponibil;

FV - OKC specificat de operandul A. este disponibil.

În primul exemplu, blocul GATE va sări peste tranzacție când STC-ul Stan nu este disponibil.

În al doilea exemplu Transact trece la blocul următor când CCCH este disponibil, al cărui număr este determinat ca rezultat de calcul și apoi rotunjire la o expresie număr întreg în paranteze (FN $ Rasp-X $ Col).

În cel de-al treilea exemplu, dacă este disponibilă opțiunea Print (Imprimare). adică dacă condiția specificată în blocul GATE nu este îndeplinită, tranzacția va fi trimisă la blocul etichetat Udal.

În primul și al doilea exemplu, blocul GATE funcționează în modul de avarie dacă condițiile nu sunt îndeplinite. Aici, remarca făcută la 6.2.4 este, de asemenea, adevărată: absența operandului B poate duce la o creștere a timpului de simulare.

6.2.9. Reducerea timpului calculatorului și schimbarea disciplinei serviciului prin utilizarea listelor de utilizatori

Pentru a salva timpul calculatorului, este recomandabil să plasați tranzacții blocate în listele de utilizatori și să le lăsați acolo până când sunt îndeplinite condițiile care permit promovarea în continuare a acestor tranzacții. În plus, oferă posibilitatea de a organiza diferite discipline de cozi, diferite de disciplina FIFO, implementate în lista evenimentelor curente.

Lista de utilizatori este un buffer, în care se pot plasa temporar transactorii derivați din STI. Spre deosebire de liste de evenimente curente și viitoare, tranzacțiile sunt introduse în lista de utilizatori și nu sunt transmise automat, dar în funcție de decizia utilizatorului, în conformitate cu logica modelului care utilizează blocuri speciale.

Pentru a introduce tranzacții în lista de utilizatori, utilizați blocul LINK (introduceți în listă), care poate fi utilizat în următoarele moduri:

6.2.9.1. Introducerea tranzacțiilor în lista de utilizatori în mod necondiționat

În mod necondiționat. blocul LINK are formatul înregistrării: [name] LINK A, B

Operandul A specifica numele sau numarul listei de utilizatori la care a intrat transactorul in blocul LINK.

Operandul B specifica unde trebuie introdus intrarea utilizatorului pe tranzactia introdusa. Valorile valide sunt:

  • FIFO - transact este plasat la sfârșitul listei;
  • LIFO - transact este plasat în partea de sus a listei;
  • PR - tranzacțiile sunt plasate în ordinea descrescătoare a priorității;
  • Tranzacțiile P - sunt plasate în spatele acelor tranzacții, ale căror valori ale parametrului corespunzător sunt mai mici (în ordinea ascendentă a valorii parametrului);
  • M1 - Transactele sunt plasate în ordinea crescândă a timpului relativ al șederii lor în model.

Ca operandul B, pot fi utilizate și alte NAV, cu excepția transactorilor NAC specificați anterior: o variabilă aritmetică, o funcție și o expresie în paranteze. În acest caz, calculul este efectuat de operandul B pentru tranzacția activă și pentru toate celelalte tranzacții aflate deja în lista de utilizatori începând de la începutul coadajului. După aceasta, tranzacțiile din lista de utilizatori sunt sortate în ordinea descrescătoare a valorii calculate. De exemplu, un bloc

pune tranzacțiile la sfârșitul listei utilizatorului cu numărul 3 în ordinea sosirii lor în bloc. bloc

pune tranzacții în lista de utilizatori cu numele Otst. ordonându-le prin creșterea valorii parametrului numit Pol.

Condițiile în care tranzacția se află în lista de utilizatori sunt verificate în mod necondiționat prin mijloacele furnizate de dezvoltatorul modelului. De exemplu, puteți trimite o tranzacție la lista de utilizatori în cazul OCU ocupat, după cum se arată mai jos.

Dacă CMU Rem1 este ocupată, blocul GATE nu permite tranzacția în blocul SEIZE. dar o trimite la blocul LINK numit Wait. iar tranzacția este introdusă la sfârșitul listei de utilizatori cu numele Otst.

În același fragment al modelului, lista de utilizatori poate fi plasată într-un mod diferit.

Aici, CMU Rem1 este verificat pentru ocuparea forței de muncă. Dacă CMC este ocupat, tranzacția merge la următorul bloc LINK și este plasată în lista de utilizatori cu numele Otst. În cazul OCS neocupate, tranzacția merge la blocul SEIZE etichetat Met1 și ocupă un OCU gratuit.

În exemplele discutate mai sus, se presupune că lista de utilizatori este nelimitată, adică orice număr de tranzacții poate fi plasat în ea. La simularea sistemelor reale, lista de utilizatori poate fi utilizată pentru a simula, de exemplu, o unitate de intrare a cărei capacitate este de obicei limitată. Această restricție poate fi implementată după cum urmează.

Dacă CMU Rem1 este ocupată, blocul GATE nu permite tranzacția în blocul SEIZE. dar îl trimite în blocul TEST numit Așteptați. situat în fața blocului LINK. Dacă conținutul curent al listei de utilizatori cu numele Otst este mai mic decât capacitatea specificată Emk. trans-pass-ul merge în lista de utilizatori, în caz contrar merge la blocul etichetat Term1.

Oferim o altă versiune posibilă a aceluiași fragment al modelului.

Dacă CMU Rem1 este ocupată, blocul GATE ignoră tranzacția în blocul TEST. Dacă conținutul curent al listei de utilizatori cu numele Otst este mai mic decât capacitatea specificată Emk. Transact merge în lista de utilizatori, altfel merge la blocul etichetat Term1. Dacă OCS nu este gol, tranzacția merge la blocul SEIZE etichetat Met1 și ocupă OK1 Rem1 gratuit.

6.2.9.2. Ieșirea tranzacțiilor din lista de utilizatori în modul condițional

Pentru a scoate una sau mai multe tranzacții din lista de utilizatori și a le pune înapoi în lista evenimentelor curente, utilizați blocul UNLINK (lista din listă) cu următorul format:

Operand A specifica numele sau numarul listei de utilizatori.

Operand B este eticheta bloc in care sunt transferate tranzitiile definite de utilizator tranzactionate.

Operand C specifică numărul tranzacțiilor de ieșire sau cuvântul cheie ALL pentru a afișa toate tranzacțiile din listă. În mod implicit, adică atunci când operanduul C nu este utilizat, cuvântul ALL este luat.

Operanzii D și E împreună cu operatorul condițional X definesc modul și condițiile pentru ieșirea tranzacțiilor din lista de utilizatori. Valorile operatorului X sunt aceleași ca în blocul TEST. În cazul în care operatorul condițional X ar trebui să fie utilizat, dar nu este specificat, implicit are valoarea lui E (egalitate). În cazul în care operanzii D și E nu sunt utilizați, operatorul condițional X nu este specificat. În acest caz, tranzacțiile sunt generate de la începutul listei, iar numărul tranzacțiilor depuse este determinat de operandul obligatoriu C.

Operand D poate fi:

  • Variabilă booleană;
  • numărul parametrului tranzacției;
  • cuvântul cheie BACK.

Dacă operandul D este o variabilă booleană, operatorul E și operatorul X nu sunt utilizați. O variabilă booleană este evaluată în raport cu tranzacția care se află în lista de utilizatori. Dacă rezultatul nu este zero, adică, condiția de ieșire este îndeplinită, tranzacția este ieșită. Numărul de tranzacții depuse este determinat de operandul C. Totuși, rezultatul poate fi mai mic decât cel indicat de operandul C. în ceea ce privește numărul de rezultate non-zero ale calculării variabilei booleene. În plus, tranzacțiile din lista de utilizatori pot fi mai mici decât cele specificate de operandul C.

Dacă operandul D specifică cuvântul cheie BACK. De asemenea, operanzul E și operatorul condițional X nu sunt utilizați, iar tranzacțiile sunt extrase de la sfârșitul listei în cantitatea determinată de operanul obligatoriu C.

Dacă operandul D nu este o variabilă booleană și nu un cuvânt cheie BACK. se specifică operatorul E și operatorul condițional X. Operandul D se calculează relativ la tranzacția din lista de utilizatori și este utilizat ca număr de parametru a cărui valoare este comparată cu rezultatul calculului operandului E.

Dacă operandul D specifică un parametru și operatorul E nu este utilizat, valoarea parametrului de tranzacție din lista de utilizatori este comparată cu valoarea aceluiași parametru al tranzacției de ieșire. Dacă acestea sunt egale, tranzacția este afișată din lista de utilizatori. Și în acest caz numărul operațiunilor de ieșire este determinat de operandul C.

Operandul F specifica numele blocului in care trece transactorul care iese din blocul UNLINK. dacă nu sunt listate tranzacții din lista de utilizatori. Dacă operatorul F nu este utilizat, tranzacția de ieșire trece la următorul bloc, indiferent de numărul de tranzacții care sunt extrase.

Articole similare