|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 102144 (0x18f00) Types: TextFile Names: »simulatorop«, »simulatorov«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »simulatorop« └─⟦this⟧ »simulatorov«
mode list.yes vko2=set 50 afs=set 50 scope user afs afs=typeset check.no proof.vko2 machine.diablo *se $* $pl ,30,235,,10$ $lw 160$$ld18$ $ps0$ $nl$ Datalogisk Institut $nl$ Sigurdsgade 41 $nl$ 2100 København Ø $nl17$ $ct$ Konstruktion af simulator til oplysningssystem. $nl7$ $qr$ _«bs»A_«bs»f_«bs»l_«bs»e_«bs»v_«bs»e_«bs»r_«bs»e_«bs»t__«bs»a_«bs»f_«bs»: $nl$ Sven Larsen Viggo Nis Kørst $nl$ $rj$ $pn 5,3$ $rh 1,INDLEDNING$ $ns 1,4,_«bs»1_«bs»._«bs»I_«bs»n_«bs»d_«bs»l_«bs»e_«bs»d_«bs»n_«bs»i_«bs»n_«bs»g_«bs».$ $np$ Den foreliggende rapport er fremkommet som et delprojekt i forbindelse med et speciale i præstationsvurdering. Til det betragtede system -et oplysningssystem ved KTAS- ønskes udviklet en simulator, hvorved et slagkraftigt værktøj til præstationsvurdering kan opnås. $np$ Opgaveløserne satte sig ved starten af projektet nogle mål, som beskrevet i "arbejdsbeskrivelse for 2.dels projekt". De stillede krav gik i korthed ud på at konstruere en "passende" simulator af OP-systemet og at eftervise at konstruktionen var lykkedes. Med "passende" menes i denne sammenhæng, en simulator der kan opfylde en række fleksibilitets- , detaljerings- og valideringskrav. $np$ De stillede mål er i vid udstækning opnået, omend tidsrammerne må siges at være sprængt flere gange. I forhold til den oprindelige plan (arbejdsbeskrivelse) er beskrivelsen af simulatorens evne til at præstere rigtige resultater sammenholdt med teretiske udledede formler, i denne rapport stort set udeladt. Udeladelse skyldes dels tidspres dels at nogen teori i stedet er henlagt til det sideløbende speciale. $np$ Indholdet i dette projekt skal kort nævnes. Der startes med de generelle betragtninger over hvilke krav, der bør stilles til en simulator af det omtalte system. Herefter vurderes nogle allerede udviklede simulatortyper og på baggrund af disse overvejelser afgrænses og bestemmes en ønskelig simulator. I afsnittet modelbeskrivelse omtales den faktisk udviklede simulator m.h.t. struktur og funktion, og modellen beskrives på flere detaljeringsniveauer. $np$ Endelig afsluttes med et afsnit, hvor simulatorens komponenter afprøves og hele simulatoren valideres i forbindelse med omtale af det udviklingsarbejde, der måtte gøres før den definitive simulator var klar. $np$ På grund af krav til bedømmelsen af opgaven vil det her blive anført, hvem der er ansvarlig for de følgende afsnit. Denne opdeling er ikke udtryk for at vedkommende alene har udarbejdet afsnittet, men kun en angivelse af, hvem der har skrevet afsnittet. Hele udarbejdelsen af simulatoren og denne opgave er sket i et snævert samarbejde mellem opgaveløserene. $nl$ Følgende afsnit er Sven Larsen ansvarlig for: $nl$ Afsnit 4 og 5. $nl$ Følgende afsnit er Viggo Nis Kørst ansvarlig for: $nl$ Afsnit 3,6 og 7. $nl$ Afsnit 1 og 2 er begge ansvarlige for. $rh 1,SIMULATOROVERVEJELSER$ $ps0$ $ns 1,4,_«bs»2_«bs»._«bs»S_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»o_«bs»v_«bs»e_«bs»r_«bs»v_«bs»e_«bs»j_«bs»e_«bs»l_«bs»s_«bs»e_«bs»r_«bs».$ $np$ Dette afsnit beskriver de overvejelser, der er foretaget for at finde frem til en brugbar simulationsmodel af KTAS's OP-system. Afsnittet redegører for, hvilket specificationskrav modellen skal have. Disse er f.eks. krav om, at modellen skal afbilde et antal maskinel- og programmelenheder. Derudover skal modellen have en vis grad af fleksibilitet for at kunne tillade omfattende eksperimenter med modellen. Ydermere kan krav til detaljeringsgrad have betydning i valget af simulatortype. $np$ Afsnit 2 er disponeret således, at afsnit 2.1 indeholder nogle generelle overvejelser i forbindelse med et simuleringsstudium. Det beskrives heri, hvad formålet med simulatoren er. Derefter beskrives i afsnit 2.2, hvilke generelle krav, der stilles til simulatoren. Det diskuteres her ganske kort, hvilke løsningsforslag, der tilfredsstiller opbygningen af en anvendelig model bedst. Afsnit 2.3 indeholder en grundig beskrivelse af valget af simulationsmodel. Til sidst beskrives i afsnit 2.4, hvilke krav vi specielt har lagt vægt på ved udviklingen af simulatoren. $ns 1,4,_«bs»2_«bs»._«bs»1_«bs»._«bs»K_«bs»o_«bs»n_«bs»s_«bs»t_«bs»r_«bs»u_«bs»k_«bs»t_«bs»i_«bs»o_«bs»n_«bs»s_«bs»-__«bs»o_«bs»g__«bs»i_«bs»m_«bs»p_«bs»l_«bs»e_«bs»m_«bs»e_«bs»n_«bs»t_«bs»a_«bs»t_«bs»i_«bs»o_«bs»n_«bs»s_«bs»o_«bs»v_«bs»e_«bs»r_«bs»v_«bs»e_«bs»j_«bs»e_«bs»l_«bs»s_«bs»e_«bs»r_«bs».$ $np$ Ved et kørende Edb-system, som det foreliggende OP-system hos KTAS, vil det være meget vanskeligt at foretage en præstationsvurdering med henblik på forbedringsstudier. Problemerne ligger i, at det er vanskeligt at afprøve virkningen af de forbedringsforslag, der kommer ved evalueringen af OP-systemet. Disse problemer kan uddybes ved følgende: $np$ OP-systemet, der kører ved KTAS, består af nogle maskinel- og programmelenheder. Ved en evaluering af systemet kan det vise sig, at f.eks. en enhed er kritisk m.h.t. ændringer i systemets ydeevne. At afprøve om en forøgelse i hastigheden af denne enhed bevirker en forøgelse i systemets ydeevne, er særdeles vanskeligt. Det vil være urealistisk at foretage eksperimenter på selve systemet med anskaffelse af nye enheder eller med at ændre i programmel ved systemet. $np$ Først når virkningen af et forbedringsforslag kan belyses grundigt vil anskaffelsen af hurtigere maskinelle enheder eller omprogrammering af dele ved systemet blive foretaget. Behovet for en simulator til systemet er derfor fremkommet netop for at kunne foretage dyberegående eksperimenter ved systemet, og for derved at kunne afprøve virkningen af forskellige forbedringsforslag. $np$ Ved anvendelsen af en simulator kan varieres på belastningen og på maskinelle enheder for at simulere, hvordan systemet reagerer på ændrede forhold. Mulighederne for at måle på en simulator af systemet er kun begrænset af simulatorens detaileringsgrad. Det vil sige, hvordan og hvor præcist simulatoren er et billede af det virkelige system. $np$ Det efterfølgende afsnit beskriver, hvilke ting det er vigtigt at tage hensyn til, når en simulator skal konstrueres. Afsnittet besvarer således spørgsmål som: $nl$ $lm20$ $nl$ Hvad formålet med simuleringen er ? $nl$ Hvilken detaljeringsgrad skal simulatoren have ? $nl$ Hvad der skal måles ? $nl$ Hvilke størrelser skal kunne ændres ? $nl$ $lm0$ $ns 1,4,_«bs»2_«bs»._«bs»1_«bs»._«bs»O_«bs»v_«bs»e_«bs»r_«bs»v_«bs»e_«bs»j_«bs»e_«bs»l_«bs»s_«bs»e_«bs»r__«bs»v_«bs»e_«bs»d__«bs»e_«bs»t__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»i_«bs»o_«bs»n_«bs»s_«bs»s_«bs»t_«bs»u_«bs»d_«bs»i_«bs»u_«bs»m_«bs».$ $np$ Inden en simulator til et datamatisk system konstrueres, må det besluttes, hvilke dele af systemet simulatoren skal afbilde. Det må besluttes, hvordan simulatoren skal afbilde det foreliggende datamatiske system. Til en simulationsmodel hører dels en model af det datamatiske system og dels en model af inddata. $np$ Ved en model af et datamatisk system forstås en beskrivelse af de indgående enheder, og en forklaring af, hvordan enhederne fungerer og kommunikerer sammen. Specifikationskravene til systemet hænger sammen med formålet med simuleringsstudiet. Når simulationsmodellen implementeres skal en model af inddata være fastlagt. Det er vigtigt ved fastlæggelsen af en model af inddata præcist at vide, hvilke eksperimenter man ønsker at foretage i forbindelse med simulatoren. $np$ Formålet med at konstruere en simulator til OP-systemet hos KTAS, er at eksperimenter kan foretages, som det ikke er muligt at foretage på det virkelige system. Derudover skal det ved hjælp af simulatoren være muligt at måle interessante præstationsindices, som det ikke er muligt at måle på OP-systemet. Da det vil være for uoverskueligt og tidskrævende at simulere hele OP-systemet, er en afgrænsning nødvendig. Denne afgrænsning er foretaget ud fra følgende synspunkter: $lm20$ $nl2$ 1.De mest tidsforbrugende dele af OP-systemet skal medtages. $nl$ 2.Det skal være muligt at se om simulatoren giver troværdige resultater. $lm0$$nl2$ Afgrænsningen af simulationsmodellen til OP-systemet er foretaget således, at kun RC8000 simuleres. En dyberegående begrundelse for dette, findes i vurderingsopgaven. Det kan her kort anføres, hvad hovedlinierne i begrundelsen er. Ud fra målinger på hele OP-systemet har det vist sig, at omkring 60-70 % af svartiden for en forespørgsel bliver brugt i RC8000. Derudover kan der ved en RC8000 til OP-systemet foretages målinger af, hvordan svartiden for en forespørgsel forløber i RC8000. Dvs. det kan måles, hvilke programdele, som benytter mest tid til at behandle en forespørgsel. Det vil derfor være muligt at eftervise (validere) om simulatoren afbilder en RC8000 til OP-systemet. $np$ $ns 1,4,_«bs»2_«bs»._«bs»1_«bs»._«bs»2_«bs»._«bs»V_«bs»a_«bs»l_«bs»g__«bs»a_«bs»f__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s_«bs»s_«bs»p_«bs»r_«bs»o_«bs»g_«bs».$ $np$ Da implementeringen af simulatoren påbegyndtes, var det nødvendigt at beslutte, hvilket simuleringssprog simalatoren skulle programmeres i. Ved valget af programmeringssprog har to sprog været overvejet. Disse sprog begge velegnede til simulering, og det er de sprog som opgaveløserne er mest fortrolige med. De overvejede sprog er SIMULA og ALGOL 8. $np$ Valget af simuleringssprog har indflydelse på modellens struktur og funktion. $np$ ALGOL 8 blev overvejet mest af afviklingstekniske årsager. Det forholder sig således, at KTAS har en ALGOL 8 oversætter, men ikke en SIMULA-oversætter. Endvidere har den ene af opgaveløserne adgang til en RC8000 med en ALGOL 8 oversætter. Fordelene ved at implementere simulatoren i ALGOL 8 er, at der er ubegrænsede mulighed for kørsler med simulatoren. Ved en implementering i SIMULA er det nødvendigt at benytte RECKU som afviklingssted. Dette kræver, at der skal opnås bevillinger til kørsler her. Da bevillingerne er begrænsede, og tidligere erfaringer med SIMULA har vist, at det er et forholdvis dyrt implementeringssprog, var valget ikke helt simpelt. $np$ Begrundelsen for at vælge SIMULA som implementeringssprog var nu følgende: $nl$ Der er indhøstet positive erfaringer med brugen af SIMULA. Det har været anvendt i forbindelse med en del andre simuleringsopgaver. Simuleringsfaciliteterne i SIMULA er derudover væsentlig bedre end i ALGOL 8. Således er det eksempelvis ikke muligt at erklære køer i ALGOL 8. Hvis køer skal anvendes, skal et rutinesæt til behandling af disse først implementeres. En simulationsmodel vil i SIMULA kunne gøres mere simpel end i ALGOL, på grund af de mange indbyggede rutiner, der findes i SIMULA. Her kan eksempelvis nævnes, de i SIMULA indbyggede fordelinger og rutiner til trækning af tilfældige tal. $ns 1,4,_«bs»2_«bs»._«bs»2_«bs»._«bs»G_«bs»e_«bs»n_«bs»e_«bs»r_«bs»e_«bs»l_«bs»l_«bs»e__«bs»k_«bs»r_«bs»a_«bs»v__«bs»t_«bs»i_«bs»l__«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n_«bs».$ $np$ Det fremlægges her , hvilke elementære fysiske komponenter (ressourcer, processer o.l.) modellen skal medtage. Alternative udformninger af disse diskuteres og vægtes. $np 15$ Herefter skal det datamatiske system, der i første række ønskes simuleret, beskrives ( for nærmere detaljer se vurderingsopgaven). $np 15$ En RC8000 tilføres forespørgsler eller "jobs". Disse behandles ved hjælp af _«bs»4__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r, der kører ikke simultant på RC8000. Processerne betegnes hhv. input-, søge- , opslag- og outputproces. Derudover er der til systemet koblet 3 diske til hhv. søge- ,opslag- og outputprocessen. $np 15$ På et givet tidspunkt kan _«bs»4__«bs»j_«bs»o_«bs»b_«bs»s være under afvikling: $nl$$nl$$lm 25$ $nl$ 1 behandles ved inputprocessen $nl$ 1 behandles ved søgeprocessen + associeret disk $nl$ 1 behandles ved opslagsprocessen + associeret disk $nl$ 1 behandles ved outputprocessen + associeret disk $nl$ $lm 0$ $np 15$ _«bs»E_«bs»g_«bs»e_«bs»n_«bs»t_«bs»l_«bs»i_«bs»g__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»v_«bs»i_«bs»r_«bs»k_«bs»s_«bs»o_«bs»m_«bs»h_«bs»e_«bs»d__«bs»f_«bs»o_«bs»r_«bs»e_«bs»g_«bs»å_«bs»r__«bs»d_«bs»o_«bs»g__«bs»k_«bs»u_«bs»n__«bs»v_«bs»e_«bs»d__«bs»e_«bs»e_«bs»n__«bs»a_«bs»f__«bs»d_«bs»i_«bs»s_«bs»s_«bs»e _«bs»(_«bs»i__«bs»e_«bs»t__«bs»g_«bs»i_«bs»v_«bs»e_«bs»n_«bs»t__«bs»ø_«bs»j_«bs»e_«bs»b_«bs»l_«bs»i_«bs»k_«bs») _«bs»,__«bs»d_«bs»a__«bs»a_«bs»l_«bs»l_«bs»e__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r_«bs»n_«bs»e__«bs»k_«bs»ø_«bs»r_«bs»e_«bs»r__«bs»p_«bs»å__«bs»e_«bs»n__«bs»R_«bs»C_«bs»8_«bs»0_«bs»0_«bs»0_«bs». Under udførelsen af en proces kan der være en disktransport igang, og/eller een eller flere diskpositioneringer. $np 15$ Processerne får tildelt CPU-tid på skift, idet hver proces kører uafbrydligt i et tidskvant ( 25.6 ms), _«bs»h_«bs»v_«bs»i_«bs»s der er en forespørgsel at behandle, og behandlingsrækkefølgen kan betragtes som en modificeret ROUND-ROBIN strategi. Scheduleringsstrategien beskrives grundigt i afsnit 3. $np 15$ Udover de 4 processer og de 3 associerede diske, skal der til styring af kommunikationen mellem processerne og diskene findes en datakanal.De indtil nu nævnte enheder er dem, som indgår i OP-systemet hos KTAS. Det betegnes fremover grundmodellen til simulatoren. $np$ Grundmodellen ønskes implementeret så fleksibel, at det er nemt at ændre i modellen. Ændringerne, der må kunne tilføjes modellen, skal i første række være, at det må være muligt at dublere de indgående processer. Den proces det er vigtigst at dublere er søgeprocessen. Ved evalueringen har det vist sig at søgeprocessen netop er den proces, der benytter mest tid til behandling af en forespørgsel. $np$ Udover en dublering af processerne ønskes datakanalen implementeret, så den også kan dubleres. Derudover skal der ved scheduleringsstrategien også være mulighed for at kunne prioritere de enkelte processer. $np$ At netop disse faciliteter skal implementeres, skal ses i forbindelse med de forbedringsforslag. fra forbedringsgevinsten af forslaget. Som resultat af evalueringen opstilles foreslag til forbedring af systemets ydeevne, hvor kriteriet for opregningen af forslaget er dets umiddelbare anvendelse ved KTAS og#eller dets kvantitative indflydelse på ydeevnen. De forslag der har størst virkning vil nok være en dublering af en proces, og et sådant forslag vil være vanskeligt at tilføje OP-systemet. $np$ Variationerne i grundmodellen kommende fra dublering af datakanalen og prioritering af de indgående processer er forslag, det er simpelt at implementere i OP-systemet. Ved KTAS råder man over en ekstra datakanal som kan tilsluttes systemet. Prioritering af processerne kan ligeledes implementeres ved ganske få ændringer ved OP-systemet. $np$ Udover de ovenfor beskrevne variationer kan grundmodellen af simulatoren til OP-systemet, bestående af de 4 processer, 3 diske og en datakanal, opfattes som fast. De forespørgsler, der passerer gennem systemet, følger et på forhånd givet mønster. Det er derfor valgt at implementere dette mønster i modellen. $np$ Et alternativ til at implementere forespørgselsmønsteret i modellen, ville være at lade forespørgslerne selv "bestemme" vej gennem processystemet. Dette sidste ville afgjort være en fordel, hvis forespørgselsmønsteret varierer meget, og en stor variation i antallet af processer skulle foretages. $np$ De 4 processer må anses at være en beskrivelse af, hvilke programdele systemet består af. Det vil være urealistisk at forestille sig, at der sker uforholdsmæssigt store ændringer i forbindelse med disse 4 processer. Ændringer, der kan ske, vil dels kunne være ovenfor beskrevne dublering af en eller to processer og dels en opspaltning af de enkelte processer. $np$ Ved implementeringen af simulatoren valgtes at lægge størst vægt på at kunne dublere processerne, og derved blev muligheden for opspaltning af processerne skubbet i baggrunden. $np 15$ Styringen af tidskvantallokeringen til de respektive processer kunne tænkes lavet som et fast programstykke i hver proces. Efter forbrug af et kvant skulle næste proces, der skal aktiveres, kaldes explicit fra den netop "færdige" proces. Det kræver, at programstykket i hver proces er implementeret til at undersøge de andre processers jobkøer. (her er evt. placeret forespørgsler _«bs»u_«bs»n_«bs»d_«bs»e_«bs»r behandling og evt. forespørgsler, der _«bs»v_«bs»e_«bs»n_«bs»t_«bs»e_«bs»r på behandling.) $np 15$ En smartere løsning implementeres dog ved at introducere et decideret styringsobjekt, eller ( et noget simpelt) operativsystem. Når en proces har udnyttet sit tidskvant, aktiveres operativsystemet, der efter den modificerede ROUND-ROBIN-strategi gennemløber processernes jobkøer, startende med processen _«bs»e_«bs»f_«bs»t_«bs»e_«bs»r den aktuelt kørte, indtil en ikke-tom jobkø findes. Den løsning, der er implementeret ved KTAS-OP-system, lader operativsystemet operere med en kø aktive processer, dvs. processer, der venter på tidskvanter. $np 15$ Også ved implementering af processerne synes 2 muligheder at vise sig $lm 25$ $nl$ a) _«bs»h_«bs»v_«bs»e_«bs»r proces afbildes som en SIMULA-PROCES. $nl$$nl$ b) _«bs»a_«bs»l_«bs»l_«bs»e processer samles i een SIMULA-PROCES, idet hver proces afbildes, som en SIMULA-PROCEDURE. $nl$$lm 0$ $nl$ _«bs»A_«bs»D__«bs»a_«bs») $lm 25$$nl$ Denne løsning giver yderst overskuelig afbildning af forespørgselssystemet. Hver proces betragtes, som en (fysisk) selvstændig proces, der altså i princippet godt kunne køre tidssimultant med de andre processer. Dette er dog ikke nødvendigt, da OP-systemet ikke er opbygget til at gøre dette. $lm 0$ $nl$$nl$ _«bs»A_«bs»D__«bs»b_«bs») $lm 25$ $nl$ Netop fordi de 4 processer _«bs»i_«bs»k_«bs»k_«bs»e kører egentlig tidssimultant kunne en ganske ligefrem og tilstrækkelig løsning være at lade en SIMULA-PROCEDURE simulere hver proces. $lm 0$ $np 15$ Ud fra en fleksibilitetsbetragtning bør alternativ a nok foretrækkes, idet kommunikationen med de tidssimultane pladelagre mest simpelt implementeres i tilfælde a. Alternativ a åbner også op for eksperimenter med ægte tidssimultan kørsel. $np 15$ Begrebsmæssigt føler vi ligeledes, at det er godt at understrege processernes tidsmæssige aspekt, ved det mere overordnede PROCESS-begreb-forbrug af tid ved en proces sidestilles med forbrug af tid ved en disk eller et styringsobjekt. $nl$$nl$$nl$ $ns 1,4,_«bs»2_«bs»._«bs»3_«bs»._«bs»E_«bs»v_«bs»a_«bs»l_«bs»u_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»f_«bs»o_«bs»r_«bs»e_«bs»l_«bs»i_«bs»g_«bs»g_«bs»e_«bs»n_«bs»d_«bs»e__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»t_«bs»y_«bs»p_«bs»e_«bs»r_«bs».$ $nl$ $np 15$ I forbindelse med et tidligere kursus ved datalogistudiet "Vurdering af datamatiske systemers præstation og ydeevne" afholdt i 1979/80, blev der af kursisterne udviklet nogle simulatorer, der skulle belyse forskellige aspekter ved simulering. Da de systemer, der afbildedes har lighed med det foreliggende OP-system, var det naturligt at udnytte erfaringerne fra de allerede konstruerede simulatorer. Dette afsnit forklarer, hvad disse simulatorer brugtes til, og hvilke konfigurationer de simulerede. $np$ I dette afsnit vurderes således 3 simulatorer fra ovennævnte kursus med henblik på at opfylde kravene til en OP-simulator. Det må fremhæves, at kriteriet for vurderingen af disse udelukkende er graden af anvendelighed i denne konkrete sammenhæng. De 3 simulatorer vil blive beskrevet for at vise deres struktur, og især funktion. Karakteristika fremdrages og svagheder/styrken af disse facetter vurderes i forhold til det ønskede mål. $np$ De betragtede simulationsmodeller har behandlet aspekter så som ( se ref Ferrari): $nl$$nl$ _«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»t_«bs»y_«bs»p_«bs»e_«bs»: MARKOV, kømodel, åben netværk $nl$$nl$ _«bs»s_«bs»c_«bs»h_«bs»e_«bs»d_«bs»u_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s_«bs»s_«bs»t_«bs»r_«bs»a_«bs»t_«bs»e_«bs»g_«bs»i_«bs»: Preemptive, non-preemptive $nl2$ Desuden har generelle teknikker for måling og simulering været anvendt på forskellige konfigurationer. $np 15$ Den grundliggende konfiguration har været den simple hard-ware-konfiguraion illustreret i figur 2.3.1. $nl20$ figur 2.3.1. $nl$$nl$$nl$ $np 15$ I forbindelse med gennemgangen af de 3 simulatorer er det imidlertid ikke så meget valg af konfiguration, og forskellige implementeringer af denne, der er interessant, som den funktionelle side af simulatorene. Dvs. hvorledes "kommunikerer" simulatorens enkeltdele (PROCESS'er, PROCEDURE'r m.m.) med hinanden, hvad får tiden til at gå, og hvorledes sker det ? $np 15$ Programmeringssproget for alle 3 typer er SIMULA. For hver af de 3 simulatortyper vil der dog være en kort beskrivelse af hovedkomponenterne og en forklaring af, i hvilken sammenhæng denne konfiguration er opstillet. $np 15$ De 3 simulatorers ophavsmænd er: $lm 25$ $nl$$nl$ _«bs»N_«bs»o__«bs»1_«bs»: Sven Larsen og Viggo Nis Kørst ( samt delvis medarbejde af Poul Erik Andersen ) $nl$$nl$ _«bs»N_«bs»o__«bs»2_«bs»: Bernd Homann $nl$$nl$ _«bs»N_«bs»o__«bs»3_«bs»: Jesper Lund og Henrik Lund Nielsen. $lm 0$ $np 15$ Vi vil nu gennemgå disse 3 simulatorrer i nævnte rækkefølge. $nl$$nl$$nl$ $ns 1,4,_«bs»2_«bs»._«bs»3_«bs»._«bs»1_«bs»._«bs»E_«bs»v_«bs»a_«bs»l_«bs»u_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»t_«bs»y_«bs»p_«bs»e__«bs»1_«bs».$ $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»F_«bs»I_«bs»G_«bs»U_«bs»R_«bs»A_«bs»T_«bs»I_«bs»O_«bs»N_«bs»: $np$ Den konfiguration, der betragtes ved denne simulatortype, er en SIMULA-baseret afbildning af konfigurationen på figur 2.3.1. Det bemærkes at det grundlæggende system i figur 2.3.1, i forhold til KTAS's OP-system er udstyret med processor til tromle og I/O-enheder. Simulatortype 1 er afbildet i sin logiske opbygning i figur 2.3.2. Primærlageret er markeret som en stiplet enhed, idet det i denne model ikke eksplicit er repræsenteret ved nogen SIMULA-type (CLASS f.eks.). Begrebsmæssigt kan de 7 indholdte køer, dog betragtes som et fælles kommunikationsområde i primærlageret. $nl20$ $sj$ figur 2.3.2. $rj$$nl$ _«bs»T_«bs»r_«bs»o_«bs»m_«bs»l_«bs»e afbildes ved CLASS DRUMPROCESSOR og 2 køer DRUMQ,OUTDRUMQ, der indeholder "JOBS", der hhv. venter på og er færdige med tromlebehandling. At tromlen også har en "færdigkø", hænger sammen med afviklingsmåden i denne simulatortype, se under simulatorens virkemåde. $nl$$nl$ _«bs»P_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»r_«bs»e afbildes ved CLASS DISCPROCESSOR og 2 køer DISQ,OUTDISQ, der indeholder "JOBS", der hhv. venter på og er færdige med pladelagerbehandling. Samme forhold gør sig gældende med hensyn til "færdigkø". $nl$$nl$ _«bs»C_«bs»P_«bs»U afbildes ved CLASS CENTRALPROCESSOR og 1 kø CPUQ, der indeholder "JOBS" under behandling ved centralprocessoren. $nl$$nl$ _«bs»I_«bs»n_«bs»p_«bs»u_«bs»t_«bs»/_«bs»o_«bs»u_«bs»t_«bs»p_«bs»u_«bs»t_«bs»e_«bs»n_«bs»h_«bs»e_«bs»d_«bs»e_«bs»r afbildes ved CLASS IOPROCESSOR og 2 køer, INPUTBUFFER,OUTPUTBUFFER, der indeholder "JOBS", der hhv. skal have bestemt sit første ressourcekrav og skal forlade simulatormodellen. $nl$$nl$ _«bs»S_«bs»t_«bs»y_«bs»r_«bs»e_«bs»e_«bs»n_«bs»h_«bs»e_«bs»d ("Operativsystem") afbildes ved CLASS OPSYS. $nl$$nl$$nl$ Endvidere sker jobgenereringen ved CLASS JOBGENERATOR, og de enkelte "JOBS" ressourceforbrug - og rækkefølge afspejles af CLASS JOB. _«bs»S_«bs»I_«bs»M_«bs»U_«bs»L_«bs»A_«bs»T_«bs»O_«bs»R_«bs»E_«bs»N_«bs»S__«bs»V_«bs»I_«bs»R_«bs»K_«bs»E_«bs»M_«bs»Å_«bs»D_«bs»E $nl$$nl$ For programtekst se bilag 2.1. Job tilføres modellen i CLASS JOBGENERATOR f.eks. med en eksponentiel mellemankomsttid. Herefter aktiverer JOBGENERATOREN selve JOB'et.. $nl$$nl$ JOB indeholder en række jobtrin, hvor hvert trin består af 2 oplysninger: $sj$ 1) ressourcetype (Eks. CPU,DRUM ) 2) ressourcetidsforbrug $rj$ $np$ Jobtrinnets karakteristika aflæses af operativsystemet(CLASS OPSYS), hvorefter JOB passiveres (PASSIVATE). $np 15$ Idet vi udelader befordringen af JOB via IOPROCESSOREN indsættes jobbet i kø til CLASS CPU (afspejlende at centralenheden skal afgøre, hvilke ressourcer,der skal benyttes af jobbet). $np 15$ CPU'en og _«bs»k_«bs»u_«bs»n denne aktiverer operativsystemet CLASS OPSYS, enten fordi et job har fået sin tilmålte CPU-tid eller CPU'en er blevet underrettet om, at en af ressourcerne CLASS DISCPROCESSOR eller CLASS DRUMPROCESSOR _«bs»h_«bs»a_«bs»r__«bs»a_«bs»f_«bs»s_«bs»l_«bs»u_«bs»t_«bs»t_«bs»e_«bs»t en transport, hvilket meddeles i køerne OUTDISCQ eller OUTDRUMQ. $np 15$ OPSYS aktiveres for at finde jobbets "NYE" ressourcetype - "ny" fordi et CPU-tidsforbrug godt kan efterfølges af et nyt CPU-tidsforbrug. OPSYS undersøger, hvilke hændelser, der ligger til grund for aktiveringen, idet køerne (OUTDISCQ,OUTDRUMQ,INPUTBUFFER og CPUQ) undersøges for "færdige" jobtrin. $np 15$ V.h.a. en procedure i OPSYS, kaldet NEXTEVENT, bestemmes nu næste type ressource og jobbet sættes rigtigt i kø (DISCQ,DRUMQ eller CPUQ) til pågældende ressource. $np 15$ Endelig aktiveres ressourcen explicit, undtagen for CPU, der altid afvikler. CPU'en "afvikler" afspejlende 3 forskellige situationer: $lm 25$ $nl$$nl$ 1)_«bs»J_«bs»o_«bs»b_«bs»b_«bs»e_«bs»t benytter centralenheden (simulerer egentlig udførelse) $nl$ 2)_«bs»o_«bs»p_«bs»e_«bs»r_«bs»a_«bs»t_«bs»i_«bs»v_«bs»s_«bs»y_«bs»s_«bs»t_«bs»e_«bs»m_«bs»e_«bs»t benytter centralenheden ( simulerer overhead ) $nl$ 3)_«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»e_«bs»n benytter centralenheden ( simulerer tidsrum, hvor "det tomme system" kører, dvs. når hverken job eller operativsystem benytter CPU-en). $lm 0$ $nl$$nl$ $nl$$nl$ _«bs»K_«bs»O_«bs»M_«bs»M_«bs»E_«bs»N_«bs»T_«bs»A_«bs»R_«bs»E_«bs»R $np 15$ Det principielt vigtige i denne model er den underliggende kvantfilosofi, der sikrer, at for hvert tidskvant, bliver CPU'en aktiv, hvad enten jobbene , operativsystemet eller "det tomme system" er under afvikling. $np 15$ Det problematiske ( både generelt og specifikt m.h.t. implementering af en simulator til KTAS) er: $lm 25$ $nl$$nl$ 1) at tiden for CLASS OPSYS, operativsystemet ikke simuleres brugt i OPSYS, men i CLASS CPU. Selvfølgelig benytter operativsystemet centralenheden, når det kører, men rent strukturmæssigt er det naturligt at lade hver CLASS, styre sig eget tidsforbrug. $nl$$nl$ 2) at CPU'en også simulerer den tid, hvor ingenting sker i systemet (fremfor at simulatoren tidsmæssigt springer til næste aktive PROCESS) $nl$$nl$ 3) at simulatoren derfor bliver kostbar i real tid, da tidskvanterne nødvendigvis må være ganske små, hvis ikke simulatorens fejlvisning p.g.a. henholdt "interrupt" fra CLASS DRUM,DISK og CPU skal blive for stor. $lm 0$ $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»K_«bs»L_«bs»U_«bs»S_«bs»I_«bs»O_«bs»N $np 15$ Modellen er realistisk forsåvidt angår kvantfilosofien, der til gengæld er meget dyr i real tid. Modellen er forholdvis simpelt opbygget, men samspillet OPSYS og CPU er ikke tilfredsstillende. Tiden i OPSYS bør simuleres anvendt i denne CLASS, som det ellers gøres i de andre CLASS'er. $np 15$ Modellen må, p.g.a. at OP-systemet hos KTAS stiller krav om behandling af store datamængder, siges at være uegnet i den forbindelse. $nl$$nl$$nl$ $ns 1,4,_«bs»2_«bs»._«bs»3_«bs»._«bs»2_«bs»._«bs»E_«bs»v_«bs»a_«bs»l_«bs»u_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s__«bs»a_«bs»f__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r__«bs»t_«bs»y_«bs»p_«bs»e__«bs»2_«bs».$ $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»F_«bs»I_«bs»G_«bs»U_«bs»R_«bs»A_«bs»T_«bs»I_«bs»O_«bs»N $nl$$nl$ Modellen består af følgende komponenter: $nl$ 1) En jobafvikler $nl$ 2) En CPU-processor $nl$ 3) En tromle-processor $nl$ 4) En pladelager-processor $nl$ 5) En jobgenerator $nl$ 6) En job beskrivelse $nl$ 7) 5 dobbelthægtede lister: Jobkø, aktivkø, cpukø, tromlekø og pladekø. $np$ Figur 2.3. viser sammenhængen mellem komponenterne i udarbejdede simulationsmodel. $nl$ $np$ Figur 2.3 skal forstås således: En pil fra komponent X til komponent Y betyder, at der flyder information fra komponent X til komponent Y. Informationsstrømmen består af jobbeskrivelser (JOB). Modellen arbejder på 5 jobkøer: JOBKØ, AKTIVKØ, CPUKØ, TROMLEKØ og PLADEKØ, på 3 processer (dvs. jobkøafviklere): CPUPROCESSOR, TROMLEPROCESSOR og PLADEPROCESSOR, en jobgenerator JOBGEN samt en jobafvikler (operativsystem) JOBAFVIKLER. $nl$ Ovenstående er taget fra Bernd Homann rapport nr. 1 side 10-11. $sj$ figur 2.3 $rj$ Det bemærkes, at operativsystemet OPSYS i den forrige simulator her er erstattet af CLASS JOBAFVIKLER, der også her fungerer som et mini-operativsystem. $nl$$nl$ _«bs»S_«bs»I_«bs»M_«bs»U_«bs»L_«bs»A_«bs»T_«bs»O_«bs»R_«bs»E_«bs»N_«bs»S__«bs»V_«bs»I_«bs»R_«bs»K_«bs»E_«bs»M_«bs»Å_«bs»D_«bs»E $np 15$ For programtekst se bilag 2.2. Job tilføres modellen i CLASS JOBGENERATOR. $nl$$nl$ $np$ Herefter aktiveres CLASS JOB, der indsætter jobbet i IOKØ og passivere sig selv. Jobgeneratoren aktiverer herefter CLASS IOPROCESSOR der simulerer indlæsningstid til kø i indre lager AKTIVKØ. IO-enheden aktiverer herefter operativsystemet CLASS JOBAFVIKLER. JOBAFVIKLER besørger afviklingen af jobbene i det indre lager, idet køen af _«bs»a_«bs»k_«bs»t_«bs»i_«bs»v_«bs»e jobs AKTIVKØ gennemløbes cyklisk, og job hægtes op til en ønsket processor i pågældende processkø. $np 15$ For at afspejle tidsforbruget i operativsystemet, der kører på CPU'en, stoppes CPU-processorens tid anvendt for jobprocessing, og der simuleres i JOBAFVIKLEREN et tidsforbrug allokeret til operativsystemet. Under operativsystemsperioden er CLASS CPU blevet "CANCEL'et"(passiveret af JOBAFVIKLER), og CPU aktiveres først når JOBAFVIKLER er færdig. $np 15$ Den ønskede processor bestemmes ud fra CLASS JOB, der beskriver et job m.h.t. ressourcekrav og ressourcetidsforbrug. Jobbet indsættes i ressourcens kø, ressourcen aktiveres, og jobbet passiveres. Jobbet aktiveres, når det engang efter evt. køventetid og ressourtcetidsforbrug er klar til at beskrive sine nye ressourcekrav. $nl$$nl$ _«bs»K_«bs»O_«bs»M_«bs»M_«bs»E_«bs»N_«bs»T_«bs»A_«bs»R $np 15$ Den vigtigste forskel på denne simulatortype og den forrige er naturligvis opbygningen af operativsystemet. Her aktiveres (interruptes) JOBAFVIKLER, når et job skal hægtes op til en ny ressource ( evt. samme for CPU-processor). Denne simulator undgår ud over at CPU'en skal "kvante" sig igennem, mens modellen indeholder job under behandling af centralenheden, også at skulle simulere "CPU ledig", og det må klart siges at være til type 2's fordel. $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»K_«bs»L_«bs»U_«bs»S_«bs»I_«bs»O_«bs»N $np 15$ Denne simulatortype er alt i alt fornuftigt opbygget, med et lidt omstændigt præg. Efter vores mening kan den udmærket ved implementering af den rette KTAS-konfiguration anvendes til at simulere denne. $np 15$ Det der gør denne type lidt tung er den omfattende programmering i CLASS JOB, der skal afbilde en efterspørgsel ( et jobs) samtlige muligheder for procesvalg. $nl$$nl$$nl$ $ns 1,3,_«bs»2_«bs»._«bs»4_«bs»._«bs»3_«bs»._«bs»E_«bs»v_«bs»a_«bs»l_«bs»u_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»t_«bs»y_«bs»p_«bs»e__«bs»3_«bs».$ $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»F_«bs»I_«bs»G_«bs»U_«bs»R_«bs»A_«bs»T_«bs»I_«bs»O_«bs»N__«bs»O_«bs»G__«bs»V_«bs»I_«bs»R_«bs»K_«bs»E_«bs»M_«bs»Å_«bs»D_«bs»E $np 15$ For programtekst se bilag 2.3. Denne model er udviklet til at kunne simulere et stor varietet af _«bs»n_«bs»e_«bs»t_«bs»v_«bs»æ_«bs»r_«bs»k_«bs»s_«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»r såvel åbne, hvor jobs tilføjes modellen af en kilde udenfor netværket som lukkede, hvor modellen indeholder et konstant antal jobs , dvs. modellen har et vist generelt tilsnit. $np 15$ Netværket i simulatoren bygges implicit op v.h.a. en TRANSITION-matrix, der beskriver overgangssandsynligheder fra knudepunkt til knudepunkt i netværket. I denne opgave er knudepunkterne servicecentre, men de kan ligesåvel opfattes som repræsentationer af processer. $np 15$ Simulatormodellens elementer er samlet i CLASS NETWORK, der indeholder nedenstående CLASS-komponenter. NETWORK har _«bs»a_«bs»n_«bs»t_«bs»a_«bs»l_«bs»l_«bs»e_«bs»t af servicecentre som parametre. CLASS-komponenter: $nl$$nl$$sj$ CLASS SERVICECENTER CLASS SERVER CLASS SOURCE CLASS LOADER CLASS FINISH CLASS JOB $rj$$nl$ _«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»S_«bs»E_«bs»R_«bs»V_«bs»I_«bs»C_«bs»E_«bs»C_«bs»E_«bs»N_«bs»T_«bs»E_«bs»R er prefix til CLASS SERVER og CLASS FINISH, dvs. indeholder de overordnede begreber for de 2 klasser, der er 2 forskellige typer af servicecentre. SERVICENTER består af en kø til de job, der skal behandles ved det pågældende servicecenter. Når et job skal have service ved et nyt center, bestemmes v.h.a. overgangsmatricen centeret, og en procedure REQUEST sætter jobbet i dette centers kø. $nl$$nl$ _«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»S_«bs»E_«bs»R_«bs»V_«bs»E_«bs»R simulerer det egentlige servicecenters aktiviteter såsom: tag første job i ventekø, bestem servicetid og simuler afvikling, hvorefter CLASS SERVICECENTER kaldes for at befordre jobbet videre, som ovenfor beskrevet. $nl$$nl$ _«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»F_«bs»I_«bs»N_«bs»I_«bs»S_«bs»H ligeledes prefixet med SERVICECENTER, fungerer som måle- og statistikobjekt. $nl$$nl$ _«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»S_«bs»O_«bs»U_«bs»R_«bs»C_«bs»E__«bs»o_«bs»g__«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»L_«bs»O_«bs»A_«bs»D_«bs»E_«bs»R bruges som jobgenerator ved henholdsvis åbent og lukket netværk. $nl$$nl$ _«bs»C_«bs»L_«bs»A_«bs»S_«bs»S__«bs»J_«bs»O_«bs»B er prefixet med SIMULA-klassen LINK, således at de generede jobs kan anbringes i servicecentrenes behandlingskøer. Klassen indeholder iøvrigt kun attributter, nemlig et jobnummer og jobbets ankomsttid til systemet. $nl$$nl$$nl$ _«bs»K_«bs»O_«bs»M_«bs»M_«bs»E_«bs»N_«bs»T_«bs»A_«bs»R $np 15$ Tilsyneladende er ideen med en matrix af overgangssandsynligheder i stand til at gøre modellen meget fleksibel, specielt når et job kan følge "mange veje". $np 15$ På den måde som simulatortype 3 laver denne administration, undgås både at gøre jobbet til et klodset objekt, der hele tiden kaldes for at bestemme vej gennem netværket(hvilket er tilfældet for de 2 tidligere betragtede typer), samt at lade processerne (her SERVICECENTER'NE) tage sig af en explicit vejfinding. $nl$$nl$ _«bs»K_«bs»O_«bs»N_«bs»K_«bs»L_«bs»U_«bs»S_«bs»I_«bs»O_«bs»N $np 15$ Alt i alt forekommer denne model at være ganske formålstjenlig. Det kan bemærkes, at vi inden denne sammenlignende analyse, havde udarbejdet et skitseforslag til en simulatortype, der på mange punkter var sammenfaldende med simulatortype 3. $np 15$ Modellen forekommer at være den bedst egnede af de 3 beskrevne med henblik på den specielle applikation. Modellen er overskuelig, logisk opbygget og "billig i drift", når der ses på realtids-forbrug. $ns 1,4,_«bs»2_«bs»._«bs»4_«bs»._«bs»V_«bs»a_«bs»l_«bs»g__«bs»a_«bs»f__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»t_«bs»y_«bs»p_«bs»e_«bs».$ $np 15$ Generelt har vi under udviklingen af simulatoren lagt vægt på følgende punkter: $nl$$nl$$sj$ - simpel logisk struktur og funktion - hurtighed ( i realtid) - minimal (tilstrækkelig !) detaljeringsgrad - udstrakt brug af parametre $rj$ $np 15$ Da forrige underafsnit konkluderede, at simulatortype 3 syntes at være en løsning, der tilfredsstillede de fleste grundkrav, man kunne stille til simulatoren til brug ved simulering af OP-systemet har vi bygget den foreliggende simulator op omkring type 3's hovedideer. $np 15$ De punkter, vi derefter har kunnet arbejde med, har været detaljeringsgrad, Dette beskrives i næste afsnit. Om brugen af parametre kan siges, at det har været efterstræbt at gøre denne total. $rh 1,BEGRÆNSNINGER VED VALGTE SIMULATIONSMODEL$ $ps0$ $ns 1,4,_«bs»3_«bs»._«bs»M_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n_«bs»s__«bs»d_«bs»e_«bs»t_«bs»a_«bs»l_«bs»j_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s_«bs»g_«bs»r_«bs»a_«bs»d_«bs».$ Dette afsnit beskriver først, hvilke begrænsninger der findes ved simulatoren i forhold til en RC8000. Derefter beskrives så i næste afsnit, hvilke dele af RC8000 der er lagt størst vægt på at simulere. Ud fra betragtningerne i dette afsnit vil selve detaljeringsgraden af simulatoren fremgå. $ns 1,4,_«bs»3_«bs»._«bs»1_«bs»._«bs»B_«bs»e_«bs»g_«bs»r_«bs»æ_«bs»n_«bs»s_«bs»n_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»i__«bs»v_«bs»a_«bs»l_«bs»g_«bs»t_«bs»e__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»i_«bs»o_«bs»n_«bs»s_«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs».$ $np$ Den valgte simulationsmodel afspejler naturligvis ikke alle facetter ved OP-systemet. Dette afsnit vil redegøre for, hvilke begrænsninger der er foretaget ved konstruktionen af simulatoren, i forhold til, hvordan en RC8000 ved OP-systemet fungerer. $nl2$ _«bs»1_«bs»)__«bs»L_«bs»a_«bs»g_«bs»e_«bs»r_«bs»s_«bs»t_«bs»ø_«bs»r_«bs»r_«bs»e_«bs»l_«bs»s_«bs»e_«bs»n__«bs»a_«bs»f__«bs»d_«bs»e__«bs»e_«bs»n_«bs»k_«bs»e_«bs»l_«bs»t_«bs»e__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r__«bs»a_«bs»f_«bs»b_«bs»i_«bs»l_«bs»d_«bs»e_«bs»s__«bs»i_«bs»k_«bs»k_«bs»e_«bs»._ $np$ Når et system som OP-systemet implementeres på en RC8000, er det nødvendigt at beslutte, hvor stort et lagerområde hver enkelt proces kan optage. Denne lagerstørrelse vil have indflydelse på hastigheden, hvormed de indgående processer kan behandle en forespørgsel. Normalt vil lagerstørrelsen således være en særdeles vigtig faktor, når hurtighed af en proces skal vurderes. Da OP-systemet er implementeret i form af 4 processer, der permanent befinder sig i lageret, er det besluttet ikke at simulere lagerstørrelsens indflydelse på udførelsestiden. Dette skyldes, at vi går ud fra at da man implementerede OP-systemet på RC8000, blev processtørrelsen for de indgående processer valgt så optimalt som muligt. $np$ Lagerstørrelsen indgår ikke i simulatoren som direkte variabel størrelse, men lagerstørrelsens indflydelse på udførelsestiden kan varieres indirekte, idet en facilitet som dublering af søgeprocessen bliver indført. En dublering af søgeprocessen vil kræve endda meget mere lager på en RC8000, for at OP-systemet kan køre. $nl2$ _«bs»2_«bs»)__«bs»B_«bs»e_«bs»g_«bs»r_«bs»æ_«bs»n_«bs»s_«bs»n_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»v_«bs»e_«bs»d__«bs»s_«bs»c_«bs»h_«bs»e_«bs»d_«bs»u_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s_«bs»s_«bs»t_«bs»r_«bs»a_«bs»t_«bs»e_«bs»g_«bs»i_«bs»e_«bs»n_«bs». $np$ Hvordan den modificerede form for ROUND-ROBIN scheduleringsstrategi virker, er præcist beskrevet i afsnit 3 i vurderingsopgaven. Da det er særdeles vigtigt at forstå, hvordan den fungerer vil de vigtigste ting blive fremhævet her. Endvidere vil det blive forklaret og begrundet, hvordan der scheduleres i simulatoren. Det bør fremhæves, at det ikke ved simulatoren har været muligt præcist at simulere den på RC8000 anvendte scheduleringsstrategi. $np$ Formålet med sheduleringsstrategien er dels at sikre at ingen proces monopoliserer en ydre enhed og dels at udnytte de ydre enheder bedst muligt. Det skal her anføres, at vi ikke føler os helt overbeviste om, hvordan strategien på RC8000 fungerer. Ved konsultation med forskellige eksperter i monitoren til en RC8000, er vi dog nået frem til et billede af strategien. Det bemærkes, at det i afsnit 6 om valideringsforløbet er beskrevet, hvordan simulatoren først udvikledes med en streng ROUND-ROBIN-strategien. Resultaterne her viste dog ikke tilstrækkelig overenstemmelse med målingerne på OP-systemet, så det var nødvendigt at implementere den modificerede form for ROUND-ROBIN. Begrundelsen for at vi ikke føler os sikre i forståelsen af scheduleringsstrategien er en noget mangelfuld beskrivelse af den i manualer fra RC. (Dette er beskrevet mere konkret i afsnit 6). $np$ For at forklare scheduleringsstrategien er det nødvendigt at forstå, hvilken tilstand en proces kan være i. En proces kan være i følgende tilstande: $sj$ 1.Kørende 2.Ventende på at blive kørende 3.Passiv $rj$$nl$ Til processerne eksisterer en fælles kø som fremover betegnes aktivkøen, hvori processer i tilstand 1 og 2 findes. Det er processernes rækkefølge i denne kø, der alene bestemmer rækkefølgen af afviklingen af processerne. $np$ Den kørende proces er første proces i aktivkøen, og når denne proces bliver afbrudt tages processen enten ud af køen og placeres bagest eller den bliver stående på sin plads i køen. Derudover tages processen helt ud af køen, hvis den for øjeblikket ikke har mere at udføre, f.eks. fordi den beder om information fra disken. $sb ^,6$ $nl$ En proces kan blive afbrudt af følgende grunde: $lm20$$nl$ $lt 1,^^^^1)$ Af klokken, fordi den har kørt en hel tidsskive(25.6 ms). Klokken afbryder endvidere alle kørende processer for hvert 25.6 ms. $nl$$lt 1,^^^^2)$ Der kommer et interrupt fra en ydre enhed. $lm0$$nl$ Afgørelsen for om processen omplaceres i aktivkøen, er en størrelse der betegnes "timequantum".( Oversættes i det følgende med tidskvant, men må absolut ikke forveksles med en tidsskive som altid er 25.6 ms). Når en proces afbrydes tildeles tidskvant værdien for den tid processen har brugt siden den kørende proces blev afbrudt plus dens tidligere værdi af tidskvant. Hvis tidskvantet herved bliver større end en tidsskive tages processen ud af aktivkøen og indsættes bagest. Derudover sættes dens tidskvant til 0. $np$ Hvis derimod tidskvantet for den kørende proces er mindre end en tidsskive beholder processen sin plads i aktivkøen. $np$ Da en kørende proces afbrydes hver gang et interrupt fra en ydre enhed kommer, kan dette interrupt stamme fra en anden proces end den kørende. Processen, interruptet er beregnet til, skal nu også indsættes i aktivkøen. Dette gøres efter samme princip som angivet ovenfor. Dvs. hvis processens tidskvant er mindre end en tidsskive indsættes den forrest ellers indsættes den bagest. $np$ Denne komplicerede scheduleringsstrategi har det ikke været muligt helt præcist at simulere. Inden en forklaring af grunden til dette vil to eksempler blive givet. Det første eksempel illustrerer den "rigtige" strategi, og det andet illusterer, hvordan strategien ved simulatoren er. $nl2$ _«bs»E_«bs»k_«bs»s_«bs»e_«bs»m_«bs»p_«bs»e_«bs»l__«bs»1_«bs». $np$ Antag at der i aktivkøen findes 3 processer A,B og C. På figur 3.1 er angivet 3 tidslinier. En skravering af tidslinien angiver, at processen benytter CPU-en og dermed er kørende. $nl10$ $sj$ figur 3.1 $rj$$nl$ Det antages, at processerne er indføjet således, at rækkefølgen i aktivkøen til tiden 0 er A,B,C. Proces A bliver kørende først, og anvender en tidsskive. Derefter bliver den afbrudt af klokken. Tidskvant for A er så 25.6 ms og da dette ikke er mindre end en tidsskive bliver proces A sat bagest i aktivkøen. (Aktivkø: B,C,A). Derefter bliver B kørende , og efter at der er gået 14.4 ms skal B anvende pladelageret. (Det antages, at denne pladelagertilgang tager 42.0 ms.) B tages ud af aktivkøen. (aktivkø: C,A) Derefter bliver C kørende. Efter der er gået 11.2 ms bliver C afbrudt af klokken. Da C kun har kørt 11.2 ms (= tidskvant for C), bliver C stående forrest i aktivkøen, og bliver igen kørende. (Aktivkø: C,A). Ved tiden 72.0 er disken færdig til proces B, og der kommer et interrupt til proces B. Proces C bliver derfor afbrudt, og den har kørt i 20.8 ms. Dens tidskvant bliver så sat til 20.8+11.2 = 32.0, og den bliver derfor placeret bagest i aktivkøen. B tidskvant er mindre end en tidsskive, og den indsættes forrest. (Aktivkø: B,A,C). B kører nu i 4.8 ms, og bliver derefter afbrudt af klokken. Den tidskvant bliver ved afbrydelsen 14.4+4.8= 19.2 ms, hvilket er mindre end en tidsskive. Den bliver derfor indsat forrest i aktivkøen. (Aktivkø: B,A,C). Derefter tildeles B en tidsskive. (Aktivkø: A,C,B). Det foregår _ ækvivalent videre. $nl3$ _«bs»E_«bs»k_«bs»s_«bs»e_«bs»m_«bs»p_«bs»e_«bs»l__«bs»2_«bs». $np$ Scheduleringsstrategien ved simulatoren adskiller sig nu ved, at en proces kun kan afbrydes af klokken. For at konpensere lidt for dette indsættes processerne dog rigtigt i køen, hver gang et interrupt ankommer. En proces, der skulle have været aktiv ved interruptets afsendelse, må altså vente til den kørende proces afbrydes af klokken eller afsluttes. $nl15$ $sj$ figur 3.2 $rj$$nl$ Startforudsætningerne ved dette eksempel er præcist de samme som ved eksempel 1. Proces A kører en tidsskive, og afbrydes af klokken. Den tages ud af aktivkøen og placeres bagest. (Aktivkø: B,C,A). B kører derefter 14.4 ms og skal benytte pladelageret. Den tages derfor ud af aktivkøen. (Aktivkø: C,A). C kører i 11.2 ms og bliver afbrudt af klokken. Da dens tidskvant er mindre end en tidsskive får den tildel en hel tidsskive, og kører til tiden 76.8. I mellemtiden er B's pladelagertilgang færdig og B indsættes i aktivkøen efter C. Medens C kører fra tiden 51.2 til 76.8 er aktivkøen ved interruptet fra færdiggørelsen af B's pladelagertilgang blevet sat til ( C,B,A). Ved 76.8 blive C taget ud og sat ind bagest og B bliver kørende. Herefter fortsættes præcist som ved eksempel 1. $nl2$ Begrundelsen for ikke at kunne afbryde en proces fra andet end klokken i simulatoren, er at det er vanskeligt at implementere det pænt i SIMULA. Strategien kan kun implementeres ved at lade tiden gå i meget små tidsenheder. Ved dette bliver simulatoren særdeles dyr i drift. $nl2$ _«bs»3_«bs»)__«bs»A_«bs»n_«bs»v_«bs»e_«bs»n_«bs»d_«bs»e_«bs»l_«bs»s_«bs»e__«bs»a_«bs»f__«bs»e_«bs»k_«bs»s_«bs»p_«bs»o_«bs»n_«bs»e_«bs»n_«bs»t_«bs»i_«bs»a_«bs»l_«bs»f_«bs»o_«bs»r_«bs»d_«bs»e_«bs»l_«bs»i_«bs»n_«bs»g_«bs»e_«bs»n__«bs»t_«bs»i_«bs»l__«bs»C_«bs»P_«bs»U_«bs»-_«bs»t_«bs»i_«bs»d_«bs»e_«bs»r_«bs»n_«bs»e_«bs». $np$ Dette er en begrænsning, som uden tvivl bevirker, at resultaterne fra simulatoren bliver mindre nøjagtige. Det er imidlertid vanskeligt at finde den præcise fordeling, og derefter implementere den i SIMULA. $np$ Ved målinger på OP-systemet har det vist sig at fordelingen af CPU-tiden faktisk ligner en eksponential fordeling i søge- og opslagsprocessen. Ved input- og outputprocessen er fordelingen ikke en eksponentialfordeling. Ved simulatoren benyttes i stedet en konstant fordeling, hvilket giver nøjagtigere simulering. $nl2$ _«bs»4_«bs»)__«bs»S_«bs»i_«bs»m_«bs»p_«bs»l_«bs»i_«bs»f_«bs»i_«bs»c_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»e_«bs»n__«bs»p_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»e_«bs»r_«bs»t_«bs»i_«bs»l_«bs»g_«bs»a_«bs»n_«bs»g_«bs». $nl$ Normalt, når en datamaskine benyttes, vil der findes en vekselvirkning sted mellem et jobs CPU-tidsforbrug og dets pladelagerforbrug. Dette kan illusteres på nedenstående figur. $nl$$sj$ CPU !-----! !-----! !-----! !-------! pladelageret !----------! !------! !------! $rj$ Figuren viser et normalt jobs afvikling på en datamaskine. CPU-en vil være ledig, når jobbet skal benytte data fra disken. Ved at multiprogrammere datamaskinen vil det være muligt at udfylde den tid, hvor CPU-en er ledig med et andet job. $np$ Ved de 3 processer, hvor der findes en associeret disk ved OP-systemet simuleres en pladelagertilgang på ovenstående vis. Dette betyder, at når en proces benytter pladelageret kan den ikke samtidig benytte CPU-en.(Dog kan en anden proces naturligvis benytte CPU-en). $np$ Dette er imidlertid en simplificering i forhold til det implementerede OP-system, idet ved opslag- og outputprocessen vil en pladelagertilgang ikke forløbe på denne måde. Her kan ske en overlapning af brugen af pladelageret og CPU-en. At dette ikke er medtaget i simulatoren skyldes vanskeligheder med at bestemme, hvor tit denne overlapning foregår. Det er ikke muligt at udtale f.eks. at overlapningen foregår altid eller hver 2. gang. På grund af dette faktum vil det være særdeles vanskeligt at indbygge i simulatoren. En tilnærmelse af det kan dog implementeres ved at lade en pladelagertilgang i opslagsprocessen være hurtigere end ved de andre processer. $nl2$ _«bs»5_«bs»)__«bs»B_«bs»e_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»l_«bs»s_«bs»e__«bs»a_«bs»f__«bs»e_«bs»n__«bs»p_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»e_«bs»r_«bs»t_«bs»i_«bs»l_«bs»g_«bs»a_«bs»n_«bs»g_«bs». $np$ En pladelagertilgang består ved simulatoren af en hovedflytning og overførslen af data. Til styring af kommunikationen mellem disken og en proces anvendes datakanalen. Denne datakanal er en kritisk ressource med hensyn til overførslen af data fra pladelageret. $np$ Når en proces ønsker en pladelagertilgang sker følgende: Hvis der ikke er en overførsel i gang ved datakanalen, så kan en positionering af diskhovedet sættes igang. Efter en positionering reserverer disken datakanalen, hvis dette er muligt. Når diskkanalen er reserveret overføres data. $np$ Hvis en anden proces ønsker en diskaccess, når en overførsel er i gang ved datakanalen, og denne derfor er reserveret, så sættes disken i kø til datakanalen. Der kan via datakanalen således ske en hovedflytning på de 3 diske samtidig, men under overførslen af data fra disken til processen, kan de andre diske ikke sættes igang med en positionering. $np$ Baggrunden for at konstruere kommunikationen mellem diskene og processerne på denne måde ved hjælp af datakanalen er, at man deved faktisk præcist simulerer hvordan det foregår ved en RC8000. $ns 1,4,_«bs»3_«bs»._«bs»2_«bs»._«bs»D_«bs»e__«bs»o_«bs»p_«bs»n_«bs»å_«bs»e_«bs»d_«bs»e__«bs»s_«bs»p_«bs»e_«bs»c_«bs»i_«bs»f_«bs»i_«bs»c_«bs»a_«bs»t_«bs»i_«bs»o_«bs»n_«bs»s_«bs»k_«bs»r_«bs»a_«bs»v_«bs».$ $np$ Ud fra de i afsnit 3.1 beskrevne begrænsninger skal det her forklares, hvilke aspekter ved en RC8000, der er lagt mest vægt på under udviklingen af simulatoren. $np$ Der er to ting vi specielt har lagt vægt på: scheduleringsstrategien og simuleringen af en diskoverførsel. Scheduleringsstrategien er gennemført så nøjagtigt, som det efter vores mening kan lade sig gøre. Ikke alle dens facetter er medtaget, men de begrænsninger, der er foretaget har vist sig kun at have ringe betydning, jvf. målereslutater. Kommunikationen mellem en disk og en proces er simuleret med høj detaljeringsgrad for at kunne måle om diskkanalen er en begrænsende enhed ved systemet. $rh 1,MODELBESKRIVELSE$ $ps0$ $ns 1,4,_«bs»4_«bs»._«bs»M_«bs»o_«bs»d_«bs»e_«bs»l_«bs»b_«bs»e_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»l_«bs»s_«bs»e_«bs».$ $np$ Indholdet i dette afsnit er en strukturel og funktionel beskrivelse af den simulatormodel, der blev udviklet til simulering af OP-systemet. $np$ Modellen vil først blive forklaret på et overordnet plan, hvor hovedkomponenternes funktion kort omtales og hele systemets struktur afbildes. For en uddybning af de enkelte programdeles virkemåde, ses derefter på den mere detaljerede opbygning af disse. Herunder vil komponenternes logiske struktur blive beskrevet i et "hjemmestrikket" metasprog, hvilket skulle gøre kendskabet til det aktuelle simuleringssprog (SIMULA) mindre betydningsfuldt. Sluttelig trækkes komponenternes indbyrdes kommunikationsmønster op. $np$ Det skal her bemærkes, at den beskrevne simulatormodel, er at betragte som en grundmodel af den fuldt udviklede simulator. Den fuldt udviklede model indeholder eksperimenter, tilføjelser og ændringer til grundmodellen af OP-systemet, og begrundelse for og opbygning af disse følger i næste afsnit. Modellen der omtales her, skal altså ses som en grundtype uden nedennævnte indbyggede potentialer: $nl$$lm20$ $nl$ - dublering af søgeproces $nl$ - dublering af datakanal $nl$ - prioritering af processer. $lm0$$nl$ $ps0$ $sj$ SIMULA-PROGRAMDELE __________________ BEGIN SIMULATION CLASS KTASSYSTEM; BEGIN PROCESS CLASS CENTER; CENTER CLASS INPUTPROCES; CENTER CLASS SOEGEPROCES; CENTER CLASS OPSLAGPROCES; CENTER CLASS OUTPUTPROCES; PROCESS CLASS JOBGENERATOR; PROCESS CLASS DISKKONTROL; PROCESS CLASS DISK; PROCESS CLASS PROCESSTYRING; PROCESS CLASS KOEOBJEKT; PROCEDURE KOEINDSAET(NUMMER); PROCEDURE KOELENGDE(I); PROCEDURE KANALKOE(I); PROCEDURE OVERGANG(JOBREFERENCE,PROCESNR); PROCESS CLASS JOB; CENTER CLASS STATISTIK; PROCEDURE SKRIVRESULTAT(TID); REAL PROCEDURE BEREGNSNIT(L,TID); REAL PROCEDURE BEREGNVAR(I,L,TID); PROCEDURE SKRIVINPUT; PROCEDURE SPOR(NUMMER,PROCESTYPE,STATUS); <globale variable erklæres> <initialisering> END; KTASSYSTEM BEGIN <styr simuleringens længde og udskrifter> END; END; $rj$ $ps0$ _«bs»M_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n_«bs»s__«bs»p_«bs»r_«bs»o_«bs»g_«bs»r_«bs»a_«bs»m_«bs»o_«bs»p_«bs»b_«bs»y_«bs»g_«bs»n_«bs»i_«bs»n_«bs»g_«bs»/_«bs»s_«bs»t_«bs»r_«bs»u_«bs»k_«bs»t_«bs»u_«bs»r Findes i området tegn1 $ps0$ _«bs»A_«bs»k_«bs»t_«bs»i_«bs»v_«bs»i_«bs»t_«bs»e_«bs»t__«bs»o_«bs»v_«bs»e_«bs»r_«bs»s_«bs»i_«bs»g_«bs»t_«bs»: $ps0$ $ns 1,4,_«bs»4_«bs»._«bs»1_«bs»._«bs»O_«bs»v_«bs»e_«bs»r_«bs»o_«bs»r_«bs»d_«bs»n_«bs»e_«bs»t__«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»b_«bs»e_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»l_«bs»s_«bs»e_«bs».$ $np$ Det undersøgte OP-system ved KTAS skal her kort beskrives i den form det fik, da det blev afbildet som en simulatormodel. Der ses først på, hvilken funktion programdelkomponenterne afbilder i det virkelige system, og derefter vises, hvilke kommunikationsveje modellen indeholder og afbilder. I næste afsnit redegøres der for de enkelte komponenters detaljerede virkemåde og indbyrdes dataudveksling. $np$ Selve modellen af det undersøgte system har fået navnet KTASSYSTEM. $nl2$ KTASSYSTEM indeholder følgende hovedkomponenter: $nl2$ _«bs»-__«bs»I_«bs»N_«bs»P_«bs»U_«bs»T_«bs»-_«bs»,_«bs»S_«bs»O_«bs»E_«bs»G_«bs»E_«bs»-_«bs»,_«bs»O_«bs»P_«bs»S_«bs»L_«bs»A_«bs»G__«bs»o_«bs»g__«bs»O_«bs»U_«bs»T_«bs»P_«bs»U_«bs»T_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_ $nl$ Disse modelerer de 4 processer i OP-systemet. Den sidste proces (PARENT proces) i OP-systemet er det ikke fundet nødvendigt at simulere. $nl$ De 4 komponenter modelerer CPU-tidsforbruget anvendt i processerne, samt antallet af diskaccesser til pladelager. $nl2$ _«bs»-__«bs»J_«bs»O_«bs»B_«bs»G_«bs»E_«bs»N_«bs»E_«bs»R_«bs»A_«bs»T_«bs»O_«bs»R $nl$ Simulerer ankomst af forespørgsler til OP-systemet. $nl2$ _«bs»-__«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L $nl$ modelerer den datakanal, der kontrolerer kommunikation mellem CPU'ens procesafvikling og pladelager. Styrer tidsforbrug og datakanaltilgang. $nl2$ _«bs»-__«bs»D_«bs»I_«bs»S_«bs»K $nl$ Modelerer de 3 pladelagre, der indeholder information anvendt henholdsvis af søge-, opslag- og outputproces. Simulerer pladelageraccestid og pladelageroverførselstid. $nl2$ _«bs»-__«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G $nl$ Kan sammenlignes med monitoren i OP-systemet. Sørger for at skifte mellem ventende processer og simulerer tidsforbrug til dette. $nl2$ _«bs»-__«bs»J_«bs»O_«bs»B $nl$ Modelerer en forespørgsel. $nl2$ _«bs»-__«bs»O_«bs»V_«bs»E_«bs»R_«bs»G_«bs»A_«bs»N_«bs»G $nl$ Modelerer v.h.a. en sandsynlighedsmatrix de veje en forespørgsel kan komme mellem processerne i OP-systemet. $nl2$ _«bs»-__«bs»K_«bs»O_«bs»E_«bs»I_«bs»N_«bs»D_«bs»S_«bs»A_«bs»E_«bs»T $nl$ Afbilder den afviklingsstrategi, der benyttes se afsnit 3.2. $nl2$ _«bs»-__«bs»K_«bs»O_«bs»E_«bs»L_«bs»E_«bs»N_«bs»G_«bs»D_«bs»E $nl$ Måler kølængden, der opstår ved ophobning af forespørgsler til processerne. $nl$ _«bs»-__«bs»S_«bs»T_«bs»A_«bs»T_«bs»I_«bs»S_«bs»T_«bs»I_«bs»K_«bs»,_«bs»S_«bs»K_«bs»R_«bs»I_«bs»V_«bs»R_«bs»E_«bs»S_«bs»U_«bs»L_«bs»T_«bs»A_«bs»T_«bs»,_«bs»S_«bs»K_«bs»R_«bs»I_«bs»V_«bs»I_«bs»N_«bs»P_«bs»U_«bs»T__«bs»o_«bs»g__«bs»S_«bs»P_«bs»O_«bs»R_ $nl2$ Komponenter, der indeholder tællevariable og udskriver resultater, inputkonfiguration samt giver et spor ved fejlfinding. $nl$$np$ For at give et bedre indtryk af modellens funktionsmåde er der i figur 4.2 illustreret, hvorledes komponenterne kommunikerer indbyrdes. $np$ Det skal om figur 4.2 bemærkes, at komponenterne med dobbelt ramme skal betragtes som processer i simulatormodellen, dvs. det anvendte simuleringssprog skal kunne indsætte disse i en tidsordnet rækkefølge, mens de resterende er procedurer. $np$ Figur 4.2 giver med det viste aktivitetsbillede også en grov skitse af inddata (forespørgsler afbildet ved job) mulige vej gennem modellen. Under afsnittet om systembeskrivelse (afsnit 3 i vurderingsopgaven.) er vist, hvilke veje en forespørgsel kan få imellem processerne i OP-systemet, og i næste afsnit vil inddatas vej gennem modellen blive nærmere belyst gennem de detaljerede beskrivelser af komponenterne. $ns 1,4,_«bs»4_«bs»._«bs»1_«bs»._«bs»1_«bs»._«bs»B_«bs»e_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»l_«bs»s_«bs»e__«bs»a_«bs»f__«bs»h_«bs»o_«bs»v_«bs»e_«bs»d_«bs»k_«bs»o_«bs»m_«bs»p_«bs»o_«bs»n_«bs»e_«bs»n_«bs»t_«bs»e_«bs»r_«bs»n_«bs»e_«bs».$ $np$ Inden de enkelte komponenter omtales, skal 2 af modellens køer forklares. $np$ Til at modelere ophobning af forespørgsler ved de 4 processer anvendes køer af typen KOE(<PROCESNR>), således at hver proces bliver forsynet med sin kø af ventende forespørgsler. $np$ For at kunne simulere en afviklingsstrategi, hvor processerne skiftes til at få adgang til CPU-behandling, indføres en kø af processer, der er parate til at anvende CPU. Denne kø kaldes AKTIVKOE. $nl2$ _«bs»J_«bs»O_«bs»B_«bs»G_«bs»E_«bs»N_«bs»E_«bs»R_«bs»A_«bs»T_«bs»O_«bs»R_ $nl$ Genererer nye forespørgsler, hvis mellemankomsttid er bestemt af en negativ eksponentialfordeling. Komponenternes øvrige funktion fremgår af nedenstående programforklaring. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin <tæl antal forespørgsler>; <bestem mellemankomsttid og simuler dette tidsforbrug>; <juster kølængde for INPUT-proces>; <indsæt forespørgsel i kø til INPUTPROCES>; <sæt INPUTPROCES i AKTIVKOE>; <hvis modellen ikke bruger CPU aktiver PROCESSTYRING>; end; $rj$ $nl$ _«bs»I_«bs»N_«bs»P_«bs»U_«bs»T_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S $np$ Har som funktion at simulere tidsforbrug for OP-systemets inputproces. Inputprocessen (og alle de øvrige processer) tildeles tidsskiver i overensstemmelse med den kvanttildelingspolitik, der er beskrevet i afsnit 3. $np$ Når en forespørgsel er færdig med inputprocessen, kaldes OVERGANG, der bestemmer næste proces for denne forespørgsel. Ligeledes undersøges, om forespørgsleskøen til processen er tom. Er den det aktiveres PROCESSTYRING ellers fortsætter INPUTPROCES med den næste forespørgsel. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin <gentag indtil inputkøen er tom> <tag 1.job i inputkø>; <bestem CPU-behandlingstid>; while CPU-behandlingstid > 0 do begin if CPU-krav opfyldelig then begin <simuler CPU-tidskrav>; <juster tællere og INTERRUPT>; <kald OVERGANG>; end else begin <simuler opnåelig CPU-tid>; <juster tællere og INTERRUPT>; <aktiver PROCESSTYRING>; <indsæt INPUTPROCES i aktivkøe>; <passiver INPUTPROCES>; end; <hvis inputkø er tom aktiver PROCESSTYRING>; end; <passiver inputproces>; end; $rj$$nl$ _«bs»S_«bs»Ø_«bs»G_«bs»E_«bs»-__«bs»+__«bs»O_«bs»P_«bs»S_«bs»L_«bs»A_«bs»G_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S $np$ Disse 2 komponenter gennemgås her samtidig, da deres logik er identisk. Dette gælder dog kun i simulatorens grundmodel; hvis søgeprocessen ønskes dubleret, ændres der noget i denne PROCES (se nærmere i afsnit 4.3). $np$ Til forskel fra INPUTPROCES skal disse 2 komponenter også modelere pladelagertilgange, idet de 2 komponenter kræver 1 eller flere oplysninger fra deres associerede pladelager. $np$ Antallet af pladelagertilgange og den samlede CPU-behandlingstid fastlægges og udfra disse tal bestemmes CPU-behandlingstiden for processerne mellem 2 pladelagertilgange (og før den 1. tilgang og efter den sidste tilgang) $np$ Når en forespørgsel har simuleret sidste CPU-behandling færdig, foretages samme rutine som ved INPUTPROCES, dvs. kald af OVERGANG og videre programforgrening afhængig af om forespørgselskøen til PROCES'en er tom eller ej. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin <gentag indtil proceskøen er tom>; <tag 1.job i proceskø>; <bestem CPU-behandlingstid, og antal pladelagertilgange>; <udregn del-CPU-behandlingstid>; <For hver pladelagetilgang: >; while del-CPU-behandlingstid > 0 do begin if CPU-krav opfyldelig then begin <simuler CPU-tidskrav>; <juster tællere og INTERRUPT>; end else begin <simuler opnåelig CPU-tid>; <juster tællere og INTERRUPT>; <aktiver PROCESSTYRING>; <indsæt proces i aktivkø>; <passiver proces>; end; end; <aktiver DISKKONTROL for diskaccess>; <hvis disktilgang = 0 gentag While-løkke og kun den>; end; $rj$ $nl$ _«bs»O_«bs»U_«bs»T_«bs»P_«bs»U_«bs»T_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S $np$ Har som funktion at simulere tidsforbruget for OP-systemets outputproces, Da outputproces, hvis den skal benytte pladelageret, kun anvender 1 pladelagertilgang, kan OUTPUTPROCES opbygges stort set som INPUTPROCES. Først CPU-tidsallokering som ved INPUTPROCES, derefter bestemmes om forespørgslen kræver pladelagertilgang og i givet fald aktiveres DISKKONTROL. $np$ Afslutningsvis behandles en forespørgsel som ved de andre 3 processer, dog kaldes komponenten STATISTIK for opdatering af målevariable. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R_ while true do begin <gentag indtil outputkøen er tom: >; <tag 1.job i outputkø>; <bestem CPU-behandlingstid>; while CPU-behandlingstid > 0 do begin if CPU-krav opfyldelig then begin <simuler CPU-tidskrav>; <juster tællere og INTERRUPT>; * if pladelagertilgang then * <aktiver DISKKONTROL>; * <opdater målevariable vha. STATISTIK>; end else begin <simuler opnåelig CPUtid>; <juster tællere og INTERRUPTS>; <aktiver PROCESSTYRING>; <indsæt OUTPUTPROCES i aktivkø>; <passiver OUTPUTPROCES>; end; <hvis outputkø er tom aktiver PROCESSTYRING>; end; <passiver outputproces>; end; * indikerer ændringer i forhold til INPUTPROCES. $rj$ $nl$ _«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L $np$ Denne komponent afbilder datakanalen, der er forbindingsled mellem CPU og pladelager. DISKKONTROL bruges til at initiere pladelagertilgang og dataoverførsel fra pladelager til centralenheden. Desuden skal DISKKONTROL sørge for, at diskkanalen ved pladelageroverførsel er eksklusivt tilegnet en PROCES og dennes associerede pladelager. Dvs. det er under en dataoverførsel umuligt at initiere pladelagertilgang eller overførsel for andre processer. $np$ Hvad angår dublering af søgeproces og DISKKONTROL, henvises til afsnit 4.3 Begrundelse for simulatorbeskrivelse. _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin if "kaldt fra proces" then begin <Indsæt i kø til rigtig disk, hvis datakanalen er optaget, ellers aktiver den ønskede disk>; end else begin if "kaldt fra disk, der har afsluttet tilgangstiden" then begin <hvis ikke datakanalen er optaget, tildelt datakanalen til den "kaldende" disk, for overførsel af data>; end else if "kaldt fra disk, der har afsluttet overførselstiden" then begin <kald KOEINDSAET>; <Hvis der er forespørgsler i kø til disk(e), aktiveres pågældende disk(e)>; <Hvis der er kø til datakanalen, tildeles datakanalen til den første i køen, for overførsel af data>; <Juster tællere>; end; end; end; $rj$$nl$ $nl2$ _«bs»D_«bs»I_«bs»S_«bs»K $np$ Komponenten DISK bruges til at modelere de 3 pladelagre, indeholdende abonnentinformation m.m. og associeret henholdsvis søge-, opslag- og outputproces. Programteknisk åbner simuleringssproget SIMULA op for, at komponenterne med ens struktur og funktion, som f.eks. disse pladelagre, kan afbildes som samme programstykke. $np$ DISK bestemmer først, hvor stort et tidsforbrug tilgang til pladelageret kræver, hvorefter denne tid simuleres anvendt hertil. Så kaldes DISKKONTROL, der skal sikre, at datakanalen ikke benyttes af andre processer. DISK er passiv indtil datakanalen er blevet eksklusivt tilegnet dette pladelager. Når DISK kaldes af DISKKONTROL, simuleres tidsforbrug til overførsel af information til centralenheden. Ved overførslens slutning gives der besked til DISKKONTROL om at datakanalen igen er ledig. $np$ Sluttelig aktiveres PROCESSTYRING, hvis ingen andre processer for øjeblikket er under CPU-afvikling. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin <juster tællere>; <simuler disktilgangstid>; <juster tællere>; <aktiver DISKKONTROL>;"<REQUEST datakanal>;" <pasiver DISK>; <simuler overførselstid>; <juster tællere>; <aktiver DISKKONTROL;"<RELEASE datakanal>;" <hvis modellen ikke bruger CPU aktiver PROCESSTYRING>; end; $rj$$nl$ _«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G $np$ Komponenten har som primær funktion at aktivere den første proces (INPUT-,SØGE-,OPSLAG- eller OUTPUTPROCES) i køen af ventende processer. (For indplacering i denne kø se gennemgang af næste komponent, KOEINDSAET). $np$ Iøvrigt simulerer denne komponent tidsforbruget anvendt til at skifte mellem processerne. $nl$ Processtyring bliver kaldt: $nl$ 1) når modelllens CLOCKPULS kommer ( svarer til RESTTIDSKVANT = 0) $nl$ eller $nl$ 2) når en proces har færdigbehandlet sin kø af ventende forespørgsler $nl$ eller $nl$ 3) hvis ingen proces er under CPU-afvikling, når $lm20$ $nl$ a) en forespørgsel ankommer til INPUTPROCES $nl$ eller $nl$ b) en forespørgsel har afsluttet en pladelageroverførsel. $lm0$$nl$ $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R while true do begin <gentag indtil aktivkø er tom: >; <tag 1.proces i AKTIVKOE >; <simuler skiftetid>; <aktiver den udtagne proces>; <juster tællere>; <passiver PROCESSTYRING>; <passiver PROCESSTYRING> end; $rj$ $nl$ _«bs»K_«bs»O_«bs»E_«bs»I_«bs»N_«bs»D_«bs»S_«bs»A_«bs»E_«bs»T $np$ Komponentens funktion er at afbilde den strategi OP-systemet(RC8000) anvender, ved tildeling af CPU-tidskvanter til de 4 processer. For en udførlig gennemgang af denne strategi henvises til vurdringensopgaven. $np$ KOEINDSAET indsætter processer, der ønsker CPU-tid, i en ventekø til CPU-aktivkøen. Indplacering sker i henhold til den omtalte strategi, idet en proces kan placeres enten forrest i aktivkø eller bagest i denne. (er aktivkø tom indsættes den naturligvis bare). $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R begin if "bagest i kø" then begin <indsæt bagest i aktivkø>; <juster køkriterium>; end else begin if aktivkø er tom then <indsæt proces i aktivkø> else <indsæt proces forrest i aktivkø>; end; end; $rj$$nl$ _«bs»O_«bs»V_«bs»E_«bs»R_«bs»G_«bs»A_«bs»N_«bs»G $nl$ Denne komponent sørger for, at når en forespørgsel er færdigbehandlet ved en proces, findes næste proces, hvor behandling kræves. $np$ Overgangen fra en proces til den næste bestemmes i modellen v.h.a. en sandsynlighedsmatrix. Denne er konstrueret på baggrund af et stort empirisk materiale, indhentet ved gennemløb af logfilen ved OP-systemet. Dette materiale har muliggjort at udtale sig om, med hvilken sandsynlighed en forespørgsel vil skulle anvende en proces, givet at den netop har brugt en anden proces. $sj$ _«bs»S_«bs»T_«bs»R_«bs»U_«bs»K_«bs»T_«bs»U_«bs»R begin <find næste proces v.h.a.sandsynlighedsmatrix>; <udregn gnst. kølængde for nuværende proces>; <indsæt forespørgsel til næste proceskø>; <hvis processen ikke er i aktivkø indsættes den heri>; end; $rj$ $nl$ _«bs»J_«bs»O_«bs»B $nl$ Denne komponents funktion er at afbilde en enkelt forespørgsel. Komponenten holder regnskab med, hvor længe forespørgslen opholder sig ved hver proces, og hvor meget af denne tid, der er CPU-tid. $np$ Ydermere har denne komponent en anden (ligeledes) passiv funktion, idet komponenten, når en forespørgsel kommer til en proces, indsættes i ventekø til denne. $nl$ $nl2$ _«bs»K_«bs»O_«bs»E_«bs»L_«bs»E_«bs»N_«bs»G_«bs»D_«bs»E $nl$ Denne komponent edregner kontinuerligt den gennemsnitlige kølængde ved de 4 processer. Kølængden justeres hver gang en forespørgsel ankommer til eller forlader en proces, og den gennemsnitlige kølængde findes som det tidsvægtede gsnt. af disse kølængder. _«bs»K_«bs»A_«bs»N_«bs»A_«bs»L_«bs»K_«bs»O_«bs»E $nl$ Samme funktion og logisk opbygning som KOELENGDE, men her måles køen af processer ved datakanalen. $nl$ _«bs»K_«bs»O_«bs»E_«bs»O_«bs»B_«bs»J_«bs»E_«bs»K_«bs»T $np$ Komponenten, der erer repræsentation af en proces.. Aktivkøen består af disse komponenter. $nl$ _«bs»S_«bs»K_«bs»R_«bs»I_«bs»V_«bs»R_«bs»E_«bs»S_«bs»U_«bs»L_«bs»T_«bs»A_«bs»T $np$ Komponenten udskriver akkumulerede måleresultater især fra komponenten STATISTIK; tal fra målevariable som antal forespørgsler, gnst. procestid, gnst. CPU-tid, gnst KØTID og variancen af disse. $nl$ _«bs»S_«bs»K_«bs»R_«bs»I_«bs»V_«bs»I_«bs»N_«bs»P_«bs»U_«bs»T $np$ Udskriver de parameterværdier simuleringen foretages med. Eks. maskinelkarakteristika som pladelagertilgangstid o.l. $nl$ _«bs»S_«bs»T_«bs»A_«bs»T_«bs»I_«bs»S_«bs»T_«bs»I_«bs»K $np$ Indeholder tællevariable, der primært akkumulerer de opsamlede måleresultater fra komponenten JOB. $nl$ _«bs»S_«bs»P_«bs»O_«bs»R $np$ En komponent der har været anvendt som sporudskriver under implementeringen og afprøvningen af simulatoren. $ns 1,4,4.1.2.Kommunikationsforklaring.$ $nl$ _«bs»1_«bs»)__«bs»J_«bs»O_«bs»B_«bs»G_«bs»E_«bs»N_«bs»E_«bs»R_«bs»A_«bs»T_«bs»O_«bs»R__«bs»-_«bs»>__«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G_«bs»: $nl$ Kun hvis modellen ikke har forespørgsler, der CPU-behandles, aktiveres PROCESSTYRING eksplicit. $nl$ _«bs»2_«bs»)__«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G__«bs»-_«bs»>__«bs»<_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»> $nl$ Den første proces i aktivkøen (køen af ventende processer til CPU) tages ud og processen aktiveres. Der simuleres en processkiftetid. $nl$ _«bs»3_«bs»)__«bs»<_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»>__«bs»-_«bs»>__«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G $nl$ Når modelinterrupt kommer (RESTTIDSKVANT = 0) aktiveres PROCESSTYRING eller når processen ikke har flere forespørgsler i kø. $nl$ _«bs»4_«bs»)__«bs»<_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»>__«bs»-_«bs»>__«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L $nl$ Når en del-CPU behandling er afsluttet og en diskaccess ønskes, aktiveres DISKKONTROL. $nl$ _«bs»5_«bs»)__«bs»O_«bs»U_«bs»T_«bs»P_«bs»U_«bs»T__«bs»-_«bs»>__«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L $nl$ Hvis en bestemt type forespørgsel (tilfældighedsbestemt) optræder aktiveres DISKKONTROL. $nl$ _«bs»6_«bs»)__«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L__«bs»-_«bs»>__«bs»D_«bs»I_«bs»S_«bs»K $lm10$$nl$ a) Hvis ikke diskoverførsel pågår, simuleres diskaccess fra en proces til disken. $nl$ b) Hvis ikke diskoverførsel pågår, initieres tidsforbrug af overførsel af information fra DISK til <PROCES>. $nl$ c) Hvis søgeprocessen er dubleret, og søgedisken optaget gemmes evt. ankommende "dublet"-søgeproces, indtil overførsel fra søgedisk er afsluttet, hvorefter DISK aktiveres. $lm0$ $nl$ _«bs»7_«bs»)__«bs»D_«bs»I_«bs»S_«bs»K__«bs»-_«bs»>__«bs»D_«bs»I_«bs»S_«bs»K_«bs»K_«bs»O_«bs»N_«bs»T_«bs»R_«bs»O_«bs»L $lm10$$nl$ a) Når modellen har simuleret egentlig DISK-accestid = positioneringstid + omdrejningstid aktiveres DISKKONTROL. (Disken er så klar til pkt 2) i DISKKONTROL -> DISK, dvs. venter på klarmelding til overførsel.) $nl$ b) Når modellen har simuleret overførselstid fra DISK via DISKKONTROL (datakanal) til en given <PROCES>. $lm0$ $nl$ _«bs»8_«bs»)__«bs»O_«bs»U_«bs»T_«bs»P_«bs»U_«bs»T_«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S__«bs»-_«bs»>__«bs»S_«bs»T_«bs»A_«bs»T_«bs»I_«bs»S_«bs»T_«bs»I_«bs»K $nl$ Når en forespørgsel er færdigbehandlet i OUTPUTPROCES kaldes CLASS STATISTIK. $nl$ _«bs»9_«bs»)__«bs»D_«bs»I_«bs»S_«bs»K__«bs»-_«bs»>__«bs»P_«bs»R_«bs»O_«bs»C_«bs»E_«bs»S_«bs»S_«bs»T_«bs»Y_«bs»R_«bs»I_«bs»N_«bs»G $nl$ Som ved 1). $ns 1,4,_«bs»4_«bs»._«bs»2_«bs»._«bs»B_«bs»e_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»l_«bs»s_«bs»e__«bs»a_«bs»f__«bs»i_«bs»n_«bs»d_«bs»-__«bs»o_«bs»g__«bs»u_«bs»d_«bs»d_«bs»a_«bs»t_«bs»a_«bs».$ $np$ Nedenstående afsnit beskriver, hvilke inddata simulatoren skal have. Disse inddata bestemmer belastningen simulatoren udsættes for. Uddata er konstrueret således, at det direkte er muligt at sammenligne resultaterne fra simulatoren med de resultater, der er opnået ved målinger ved KTAS. Udover størrelser som er direkte sammenlignelige med målinger fra KTAS, udskrives en del størrelser som det ikke er muligt at måle ved OP-systemet. Af disse er de vigtigste udnyttelsesgraderne af de indgående pladelagre og diskkanalen. Desuden findes til sidst i uddata nogle præstationsindeks, der skal benyttes, når en teoretisk model af OP-systemet skal anvendes. Til de sidste størrelse hører bl.a. antal processkift og antal pladelageraccesser. $np$ Nedenstående vil indeholde en gennemgang af både ind- og uddata. Et eksempel på ind- og uddata er vedlagt som bilag 3. $nl$ _«bs»I_«bs»N_«bs»D_«bs»D_«bs»A_«bs»T_«bs»A_«bs». $nl2$ _«bs»a_«bs»n_«bs»t_«bs»a_«bs»l_«bs»j_«bs»o_«bs»b_«bs»s__«bs»p_«bs»r_«bs».__«bs»m_«bs»s_«bs». $nl$ Denne størrelse angiver ankomsthastigheden for forespørgsler. Er gennemgående eneste størrelse der skal varieres for at ændre på belastningen. $nl2$ _«bs»p_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»e_«bs»r_«bs»t_«bs»i_«bs»d__«bs»f_«bs»o_«bs»r__«bs»d_«bs»i_«bs»s_«bs»k__«bs»1__«bs»t_«bs»i_«bs»l__«bs»4_«bs». $nl$ Simulatoren er konstrueret så generel, at der kan kobles et pladelager til inputprocessen. (Derfor er der 4 diske). Pladelagertid skal kun ses som positioneringstiden ved en pladelagertilgang. $nl2$ _«bs»O_«bs»v_«bs»e_«bs»r_«bs»f_«bs»ø_«bs»r_«bs»s_«bs»e_«bs»l_«bs»s_«bs»t_«bs»i_«bs»d $nl$ Betragtes som ens for de 3 indgående pladelagre. Overførselstiden simuleres både i diskkanalen (DISKKONTROL) og i selve (DISK'en). Under overførselstiden vil diskkanalen være reserveret af det pladelager som ønsker overførsel af data. $nl2$ _«bs»M_«bs»i_«bs»n_«bs»i_«bs»m_«bs»a_«bs»l__«bs»o_«bs»g__«bs»m_«bs»a_«bs»k_«bs»s_«bs»i_«bs»m_«bs»a_«bs»l__«bs»a_«bs»n_«bs»t_«bs»a_«bs»l__«bs»d_«bs»i_«bs»s_«bs»k_«bs»a_«bs»c_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r__«bs»i__«bs»s_«bs»ø_«bs»g_«bs»e_«bs»-__«bs»o_«bs»g_ $nl$ _«bs»o_«bs»p_«bs»s_«bs»l_«bs»a_«bs»g_«bs»s_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»n_«bs». $nl$ opslagsprocessen. $nl$ For at simulere en variation i antallet af diskaccesser fra forespørgsel til forespørgsel trækkes et tilfældigt tal mellem en nedre og en øvre grænse for antallet af pladelagertilgange. Det gennemsnitlige antal pladelagertilgange vil således ligge midt i mellem disse to værdier. $nl2$ _«bs»P_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»e_«bs»r__«bs»t_«bs»i_«bs»l_«bs»g_«bs»a_«bs»n_«bs»g_«bs»s_«bs»s_«bs»a_«bs»n_«bs»d_«bs»s_«bs»y_«bs»n_«bs»l_«bs»i_«bs»g_«bs»h_«bs»e_«bs»d__«bs»i__«bs»o_«bs»u_«bs»t_«bs»p_«bs»u_«bs»t_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs». $nl$ Da antallet af pladelagertilgange i outputprocessen er særdeles få og formentlig kun er ca. 1 for hver 10. forespørgsel, gives som inddata til simulatoren en sandsynlighed for en diskaccess. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»C_«bs»P_«bs»U_«bs»-_«bs»t_«bs»i_«bs»d__«bs»f_«bs»o_«bs»r__«bs»d_«bs»e__«bs»4__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r_«bs». $nl$ Dette angiver, hvor lang tid en forespørgsel skal benytte CPU-en i en proces. For søge- og opslagsprocessen bliver CPU-tidskravet fundet ud fra en eksponentialfordeling med inddata som gennemsnit. For input- og outputprocessen vil forespørgslen benytte et konstant CPU-tidskrav. (Dette har ved simulering vist sig bedre end en eksponentialfordeling.) $nl2$ _«bs»S_«bs»k_«bs»i_«bs»f_«bs»t_«bs»e_«bs»t_«bs»i_«bs»d $nl$ Angiver den tid monitoren (betegnes i simulatoren PROCESSTYRING) er om at skifte mellem to processer. $nl2$ _«bs»T_«bs»i_«bs»d_«bs»s_«bs»k_«bs»v_«bs»a_«bs»n_«bs»t $nl$ Angiver den tidsskive en proces får tildelt. $nl2$ Startværdi for tilfældighedsgenerator. $nl$ Ved alle fordelinger i SIMULA skal angives en startværdi. $nl$ _«bs»S_«bs»i_«bs»m_«bs»p_«bs»e_«bs»r_«bs»i_«bs»o_«bs»d_«bs»e $nl$ Angiver, hvor lang tid der skal simuleres. Normalt simuleres i en time. (3.600.000 tidsenheder.) $nl$ _«bs»O_«bs»v_«bs»e_«bs»r_«bs»g_«bs»a_«bs»n_«bs»g_«bs»s__«bs»s_«bs»a_«bs»n_«bs»d_«bs»s_«bs»y_«bs»n_«bs»l_«bs»i_«bs»g_«bs»h_«bs»e_«bs»d_«bs»s__«bs»m_«bs»a_«bs»t_«bs»r_«bs»i_«bs»x_«bs». $nl$ Ud fra denne bestemmes forespørgslernes vej gennem processerne. De indgående sandsynligheder angiver sandsynligheden for, at en forespørgsel passerer fra en proces til en anden. Matricen beskriver således, hvor hyppigt de enkelte forespørgselstyper forekommer, og den beskriver forespørgselsmønsteret. $nl$ _«bs»D_«bs»u_«bs»b_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»s_«bs»ø_«bs»g_«bs»e_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s__«bs»o_«bs»g__«bs»d_«bs»a_«bs»t_«bs»a_«bs»k_«bs»a_«bs»n_«bs»a_«bs»l_«bs». $nl$ Her angives om en dublering ønskes eller ej. $nl$ _«bs»P_«bs»r_«bs»i_«bs»o_«bs»r_«bs»i_«bs»t_«bs»e_«bs»t_«bs». $nl$ Prioriteten til de 4 processer angives. Dette vil så have indflydelse på afviklingsrækkefølgen, i overenstemmelse med scheduleringsstrategien. $nl2$ _«bs»U_«bs»D_«bs»D_«bs»A_«bs»T_«bs»A_«bs». $nl$ De fleste resultater simulatoren giver udskrives for hvert kvarter (1/4 simuleringsperiode) og samlet for hele simuleringsperioden. Dette er gjort for at kunne iagttage såkaldte indsvingsfænomener. Hvis simulatoren kører svarende til en særdeles stor belastning af systemet, vil der ske en ophobning af forespørgsler. Dette fænomen vil man have mulighed for at se, når resultaterne udskrives for hvert kvarter. $nl2$ _«bs»F_«bs»o_«bs»r__«bs»h_«bs»v_«bs»e_«bs»r_«bs»t__«bs»k_«bs»v_«bs»a_«bs»r_«bs»t_«bs»e_«bs»r__«bs»o_«bs»g__«bs»s_«bs»a_«bs»m_«bs»l_«bs»e_«bs»t__«bs»u_«bs»d_«bs»s_«bs»k_«bs»r_«bs»i_«bs»v_«bs»e_«bs»s__«bs»f_«bs»ø_«bs»l_«bs»g_«bs»e_«bs»n_«bs»d_«bs»e__«bs»s_«bs»t_«bs»ø_«bs»r_«bs»r_«bs»e_«bs»l_«bs»s_«bs»e_«bs»: $nl2$ For hver af de 4 processer udskrives: $nl$ _«bs»a_«bs»n_«bs»t_«bs»a_«bs»l__«bs»f_«bs»o_«bs»r_«bs»e_«bs»s_«bs»p_«bs»ø_«bs»r_«bs»g_«bs»s_«bs»l_«bs»e_«bs»r $nl$ Benyttes til at kontrolere om overgangssandsynlighedsmatricen fungerer efter hensigten. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»t_«bs»i_«bs»d__«bs»o_«bs»g__«bs»v_«bs»a_«bs»r_«bs»i_«bs»a_«bs»n_«bs»s__«bs»p_«bs»å__«bs»d_«bs»e_«bs»n_«bs»n_«bs»e_«bs». $nl$ Procestiden defineres som den tid en forespørgsel er under behandlig i processen. Dvs. afgangstid-ankomstid = procestid. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»C_«bs»P_«bs»U_«bs»-_«bs»t_«bs»i_«bs»d__«bs»o_«bs»g__«bs»v_«bs»a_«bs»r_«bs»i_«bs»a_«bs»n_«bs»s__«bs»p_«bs»å__«bs»d_«bs»e_«bs»n_«bs»n_«bs»e_«bs». $nl$ CPU-tiden gives som beskrevet ovenfor som inddata til simulatoren. Denne størrelse indikere så om SIMULA-funktionen NEGEXP giver den rigtige middelværdi. CPU-tiden defineres som den tid en forespørgsel benytter CPU. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»k_«bs»ø_«bs»t_«bs»i_«bs»d__«bs»o_«bs»g__«bs»v_«bs»a_«bs»r_«bs»i_«bs»a_«bs»n_«bs»s__«bs»p_«bs»å__«bs»d_«bs»e_«bs»n_«bs»n_«bs»e_«bs». $nl$ Køtiden defineres (som ankomsttiden til en proces - afgangstiden fra den proces, hvor forespørgslen kom fra.) For denne størrelse og de 2 førnævnte gælder, at netop disse størrelser måles hos KTAS, så de benyttes primært til validering af simulatoren. $nl2$ _«bs»T_«bs»o_«bs»t_«bs»a_«bs»l_«bs»t_«bs»i_«bs»d__«bs»i__«bs»s_«bs»y_«bs»s_«bs»t_«bs»e_«bs»m_«bs»e_«bs»t_«bs». $nl$ Udskrives for at kunne danne sig et indtryk af multiprogrammeringsgraden. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»s_«bs»v_«bs»a_«bs»r_«bs»t_«bs»i_«bs»d__«bs»p_«bs»r_«bs».__«bs»f_«bs»o_«bs»r_«bs»e_«bs»s_«bs»p_«bs»ø_«bs»r_«bs»g_«bs»s_«bs»e_«bs»l__«bs»o_«bs»g__«bs»v_«bs»a_«bs»r_«bs»i_«bs»a_«bs»n_«bs»s__«bs»p_«bs»å__«bs»d_«bs»e_«bs»n_«bs»n_«bs»e_«bs». $nl$ Den gennemsnitlige svartid for en forespørgsel defineres som summen af samtlige svartider divideret med antal forespørgsler. Den gennemsnitlige svartid udskrives både hvor køtiden i inputprocessen er medregnet, og hvor den ikke er. Den gennemsnitlige svartid uden køtid fra inputprocessen benyttes til at sammenligne med resultater fra KTAS. $nl2$ _«bs»a_«bs»n_«bs»t_«bs»a_«bs»l_«bs»f_«bs»e_«bs»j_«bs»l $nl$ Betegnelsen for en speciel forespørgselstype, som går direkte fra input- til outputprocessen. Udskrives for at kunne kontrollere om det er rigtig overgangssandsynlighedsmatrix. $nl2$ _«bs»U_«bs»d_«bs»n_«bs»y_«bs»t_«bs»t_«bs»e_«bs»l_«bs»s_«bs»e_«bs»s_«bs»g_«bs»r_«bs»a_«bs»d__«bs»a_«bs»f__«bs»i_«bs»n_«bs»p_«bs»u_«bs»t_«bs»-_«bs»,_«bs»s_«bs»ø_«bs»g_«bs»e_«bs»-_«bs»,_«bs»o_«bs»p_«bs»s_«bs»l_«bs»a_«bs»g_«bs»s_«bs»-__«bs»o_«bs»g__«bs»o_«bs»u_«bs»t_«bs»p_«bs»u_«bs»t_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs». $nl$ Benyttes til en præstationsvurdering af OP-systemet. Udnyttelsesgraden defineres (som forbrugt CPU-tid i en proces/simperiode.) $nl2$ _«bs»U_«bs»d_«bs»n_«bs»y_«bs»t_«bs»t_«bs»e_«bs»l_«bs»s_«bs»e_«bs»s_«bs»g_«bs»r_«bs»a_«bs»d__«bs»a_«bs»f__«bs»d_«bs»i_«bs»s_«bs»k_«bs»1_«bs»,_«bs»d_«bs»i_«bs»s_«bs»k_«bs»2_«bs»,_«bs»d_«bs»i_«bs»s_«bs»k_«bs»3_«bs»,_«bs»d_«bs»i_«bs»s_«bs»k_«bs»4_«bs»,__«bs»d_«bs»i_«bs»s_«bs»k_«bs»k_«bs»a_«bs»n_«bs»a_«bs»l__«bs»o_«bs»g__«bs»c_«bs»p_«bs»u_«bs». $nl$ Disse størrelser er særdeles interessante, idet de ikke kan måles ved KTAS. Ved udnyttelses af CPU-en medregnes den del der kommer fra, at der skiftes mellem processer. Dvs. udnyttelsen af monitoren. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»k_«bs»ø_«bs»l_«bs»æ_«bs»n_«bs»g_«bs»d_«bs»e__«bs»t_«bs»i_«bs»l__«bs»i_«bs»n_«bs»p_«bs»u_«bs»t_«bs»-_«bs»,_«bs»s_«bs»ø_«bs»g_«bs»e_«bs»-_«bs»,_«bs»o_«bs»p_«bs»s_«bs»l_«bs»a_«bs»g_«bs»-__«bs»o_«bs»g__«bs»o_«bs»u_«bs»t_«bs»p_«bs»u_«bs»t_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs». $nl$ Disse størrelser som heller ikke kan måles hos KTAS, udskrives bl.a. for at kunne sammenligne resultaterne med Little's lov. $nl2$ _«bs»G_«bs»e_«bs»n_«bs»n_«bs»e_«bs»m_«bs»s_«bs»n_«bs»i_«bs»t_«bs»l_«bs»i_«bs»g__«bs»k_«bs»ø_«bs»l_«bs»æ_«bs»n_«bs»g_«bs»d_«bs»e__«bs»f_«bs»o_«bs»r__«bs»d_«bs»i_«bs»s_«bs»k_«bs»k_«bs»a_«bs»n_«bs»a_«bs»l__«bs»o_«bs»g__«bs»a_«bs»k_«bs»t_«bs»i_«bs»v_«bs»k_«bs»ø_«bs». $nl$ Interessante størrelser for evalueringsstudiet. $nl2$ _«bs»A_«bs»n_«bs»t_«bs»a_«bs»l__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»k_«bs»i_«bs»f_«bs»t_«bs»,_«bs»p_«bs»l_«bs»a_«bs»d_«bs»e_«bs»l_«bs»a_«bs»g_«bs»e_«bs»r_«bs»t_«bs»i_«bs»l_«bs»g_«bs»a_«bs»n_«bs»g_«bs»e_«bs». $nl$ Disse størrelse udskrives, idet de skal anvendes i forbindelse med en teoretisk model af OP-systemet. $ns 1,4,_«bs»4_«bs»._«bs»3_«bs»._«bs»Æ_«bs»n_«bs»d_«bs»r_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»d_«bs»e_«bs»r__«bs»k_«bs»a_«bs»n__«bs»f_«bs»o_«bs»r_«bs»e_«bs»t_«bs»a_«bs»g_«bs»e_«bs»s__«bs»i__«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n_«bs».$ _«bs»D_«bs»u_«bs»b_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»s_«bs»ø_«bs»g_«bs»e_«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs». $np$ Ud fra eksperimenter med simulatoren og ud fra målinger på OP-systemet, blev det hurtigt klart, at den mest belastede proces var søgeprocessen. Specielt ved en model med lille mellemankomsttid (særdeles stor belastning) for forespørgsler, kan man formode, at det er muligt at øge gennemstrømningen. Udvidelsen skal begrænses til en dublering af søgeprocessen. $nl$ Et eksempel kan vise tidsgevinsten ved at anvende 2 søgeprocesser. $nl$ _«bs»E_«bs»k_«bs»s_«bs»e_«bs»m_«bs»p_«bs»e_«bs»l_«bs». $nl20$ $np$ Hvis 2 processer skal medtages i modellen kræves der logiske ændringer i komponenterne OVERGANG og DISKKONTROL. $np$ I simulatormodellen identificeres hver proces med et tal. I modellen uden dublering er søgeprocessen karakteriseret ved tallet 2. Da de eksisterende 5 processer (input-,søge-,opslag-,output- og statistikprocessen) beslaglægger tallene 1,2,3,4 og 5, tildeles den nye søgeproces tallet 6. Ved brug af overgangsmatricen, når en forespørgsel er færdig ved denne nye proces, må vi derfor lade som om den stadig svarer til "2", ellers må denne matrice ændres. $np$ I OVERGANG skal forespørgsler, der før blev sat i kø til søgeprocessen, nu sættes i kø til 2 søgeprocesser. Der er valgt en simpel fordelingsstrategi mellem de dublerede processer, men en strategi, der med hensyn til at maksimere gennemstrømningen forekommer optimal. $nl$ Strategi: $lm20$$nl$ Hvis proces 1 er optaget og proces 2 ledig sættes forespørgslen i kø ved proces 2 ellers altid ved proces 1. $nl$ Hvis en forespørgsel ved proces 2 er færdigbehandlet og køen ved proces 1 indeholder mere end en forespørgsel overflyttes forespørgsel nr. 2 fra proces 1 til proces 2. $lm0$$nl$ $np$ I DISKKONTROL bevirker dubleringen flg. forholdsregler: $nl$ Da de 2 søgeprocesser godt kan anmode om pladelagertilgang indenfor samme tidsperiode, må der være en kø (SOEGEDISKKOE) til søgedisken, som jo ikke er dubleret. $np$ Når en søgeproces anmoder om pladelagertilgang undersøges så, om datakanalen er optaget af pladelageroverførsel, samt om søgedisken allerede er allokeret til en anden søgeproces. Så snart DISKKONTROL aktiveres fra DISK med besked om, at en pladelageroverførsel fra søgedisken er afsluttet, undersøges om SOEGEDISKKOE er tom. Hvis den anden proces er sat i kø initieres søgedisken atter for at simulere pladelagertilgang for denne proces. $nl2$ _«bs»D_«bs»u_«bs»b_«bs»l_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»d_«bs»a_«bs»t_«bs»a_«bs»k_«bs»a_«bs»n_«bs»a_«bs»l_«bs». $np$ Vi har også fundet det interessant at undersøge om belastningen af datakanalen, implementeres ved DISKKONTROL, kan være så væsentlig en faktor i belastningen af den totale model, at en dublering af denne ressource, vil give en præstationsforbedring for svartiden for en forespørgsel. $np$ Ved dublering af DISKKONTROL har vi valgt at lade den ene datakanal styre kommunikationen mellem søgeproces(ser) og søgedisken, og den anden styre kommunikationen mellem henholdsvis opslagsproces og opslagdisk samt outputproces og outputdisk. $nl$ Alle 3 processer er i gang med en pladelagertilgang (søgeprocessen er ikke dubleret). Med * er på figur 7.4.2 markeret, når en overførsel ønskes initieret: $nl10$ _«bs»Æ_«bs»n_«bs»d_«bs»r_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»i__«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n $np$ Væsentligste ændring i modellen ved 2 datakanaler er at variable, der måler egenskaber ved datakanalen må ændres til array variable, der kan indeholde 2 værdier. Til at måle længden af køen til datakanalen, kaldes en komponent KANALKOE med samme logik som KOELENGDE. $nl2$ _«bs»P_«bs»r_«bs»i_«bs»o_«bs»r_«bs»i_«bs»t_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g__«bs»a_«bs»f__«bs»p_«bs»r_«bs»o_«bs»c_«bs»e_«bs»s_«bs»s_«bs»e_«bs»r_«bs». $np$ For at eksperimentere med den rækkefølge, hvori komponenten PROCESSTYRING udvælger processerne til CPU-allokering indføres en simpel form for prioritering af de 4 processer. $nl$ prioriteringen af de 4 processer bevirker at: $lm20$$sb 6,^$$nl$ $lt 1,^^^a)$ hvis 2 processer har samme prioritet gælder de hidtidige indsættelsesregler i AKTIVKOE (køen af ventende processer til CPU). $nl$ $lt 1,^^^b)$ hvis 2 processer har forskellig prioritet, indsættes processen med højst prioritet foran processen med lavere prioritet uanset, hvad størrelsen tidskvant indikere (se afsnit 3) $nl$$lm0$ $np$ Konsekvensen af disse principper er bl.a. at hvis en proces som den eneste har en højere prioritet end alle de andre, vil denne proces kunne afvikle lige så længe der ønskes (kun afbrudt af processkiftetid). Hvis f.eks. 2 processer har samme og højere prioritet, vil disse 2 processer køre, så længe der er forespørgsler til dem. $nl2$ _«bs»Æ_«bs»n_«bs»d_«bs»r_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»i__«bs»m_«bs»o_«bs»d_«bs»e_«bs»l_«bs»l_«bs»e_«bs»n $np$ Modificeringer i modellen ved implementering af denne facilitet sker i komponenten KOEINDSAET. Ved hjælp af en pegepind gennemløbes AKTIVKOE'en, når et nyt procesnummer (repræsentation af een proces) skal indsættes i denne kø. Pegepinden sættes til at pege på den første proces i køen, med prioritet "=" eller "<" end prioriteten for den proces, der ønskes indsat. Hvis alle komponenter i AKTIVKOE har højere prioritet sættes processen ind bagest i køen. $np$ Hvis nu en proces, der ønskes indsat i grundmodellen (dvs. uden prioritering) skulle have været bagest i AKTIVKOE, indplaceres den nu bagest blandt processerne i AKTIVKOE med samme prioritet. Skulle den normalt have været forrest i AKTIVKOE, indsættes processen foran den proces pegepinden peger på. $rh 1,AFPRØVNING$ $ps0$ $ns 1,4,_«bs»5_«bs»._«bs»A_«bs»f_«bs»p_«bs»r_«bs»ø_«bs»v_«bs»n_«bs»i_«bs»n_«bs»g_«bs».$ $np$ Dette afsnit indeholder en beskrivelse af, hvordan simulatoren er afprøvet. Først omtales, hvilken form for strategi, der er blevet benyttet. Herefter redegøres der for afprøvningen af de enkelte programdele. $np$ Det er nok på sin plads først at konkretisere, hvad der menes med termen afprøvning. I dette afsnit vil simulatorens nøjagtighed i forhold til resultater opnået ved målinger på OP-systemet ikke blive vurderet. En sådan egentlig validering er foretaget i afsnit 6, hvor simulatorens uddata for givne variationer i inddata sammenholdes med empirisk målte resultater ved KTAS. $np$ En decideret afprøvningsstrategi er ved udviklingen af simulationsmodellen ikke let at planlægge. Da modelopbygningen og kalibreringen af modellen sker dynamisk fra grunden af, ændrer modellen karakter kontinuerligt, selvom visse overordnede strukturer og modelkomponenternes funktion ikke ændres undervejs. $np$ Afprøvningen har derfor nødvendigvis måtte ske under implementeringen. Til selve afprøvningen er udviklet en sporingsrutine SPOR, der aktiveres under fejlfindingsarbejdet. SPOR giver et meget nyttigt tidsbillede af de enkelte programkomponenters aktivering. Et eksempel på uddata ved spor er vedlagt som bilag 3. $np$ For at konstatere om modellen giver de ønskede værdier på de udvalgte præstationsindeks er udarbejdet en udskrivningsprogramdel (SKRIVRESULTAT). Denne programdel udregner og udskriver de ved simuleringen opnåede måleresultater. Ved variation i belastningen til modellen kan SKRIVRESULTAT verificere de enkelte komponenters virkemåde. Et eksempel på uddata fra SKRIVRESULT er vedlagt som bilag 3. $rh 1,VALIDERINGSFORLØB$ $nl2$ Afprøvning af programdele. $np$ Generelt er der ikke sket nogen afprøvning af de enkelte modelkomponenter enkeltvis, idet den "totale" simulators funktionsduelighed har været centrum - jvf. bemærkningerne em at simulatoren kontinuerlig modificeres. $np$ Vi ser først på de 4 processer ( søge, opslag, input og output). $np$ Antallet af forespørgsler til disse processer bestemmes i modellen v.h.a. komponenten OVERGANG. Overgangsmatricen, der afbilder en forespørgsels sandsynlighed for at gå fra en proces til en anden, er vist i bilag 4. Det skal bemærkes, at indices refererer til: $nl$ $sj$ 1) input - 2) søge - 3) opslag - 4) output - 5) statistik $rj$$nl$ Antallet af forespørgsler ( i % ) ialt i hver proces kan let beregnes fra matricen: $sj$ INPUTPROCES=OUTPUTPROCES= 100 % (alle må igemnem disse) = STATISTIK SØGEPROCES = 66 % (fra INP. til SØG) OPSLAGPROCES = = 59.2 % (fra INP til OPS + 58 % af SØGE) $rj$$nl$ At antallet af modellens forespørgsler modsvarer de empirisk beregnede kan ses på bilag 4. $sj$ beregnet genererede afvigelse søge 308.22 306 < 1 % opslag 276.84 280 ca.1 % $rj$$nl$ $nl$ SPOR $np$ For at lette fejlfinding ved implementeringen af simulatormodellen kan der (valgfrit), udskrives et spor (Eng. trace) af væsentlige begivenheder under simuleringen. Hvis variablen TEST har værdien 1 udskrives sporet. Udover den udskrivning SPOR bevirker, udskrives adskillige andre sporlinier. (F.eks. i PROCESSTYRING og OVERGANG). Normalt kaldes SPOR første gang en proces aktiveres, og når den forlader processen endeligt. $np$ Da det eksakte programforløb -scheduleringsrækkefølgen og -tiden- kan aflæses af udskriften, kan logiske fejl i programmel aflæses forholdsvis let ved granskning af sporet. $nl2$ SKRIVRESULTAT $np$ For at dokumentere simulatorens funktionsduelighed, og sandsynliggøre at beregningprocedurer m.m. fungere efter hensigten er i bilag 3 vist et eksempel på en kørsel: $np$ Inddata til simulatoren udskrives på side 1 og 2 af procedure SKRIVINPUT. $np$ Vi vil eftervise tallene for gnst. procestid i eksemplet. (Gnst. CPU-tid uinteressant da tallet fremkommer ved tilfældighedsgenerator, mens der ved beregning af gnst. køtid er for mange ubekendte eller usikre variable.) $np$ Vi kan ud fra inddata lave flg. rimelige forudsætninger ved beregning af en procestid: $sj$ procestid = CPUTID + DISKTID + overhead ved processkift + ventetid i aktivkø CPUTID = inddata-værdi DISKTID = p(pladelagertilgang)*(accestid+overførselstid)* antal pladelagertilgange OVERHEAD v.= minimum ca. 25 % af CPU-tid PROCESSKIFT Findes ved s.4 i bilag 3 at udregne forholdet belastning ved processkift 0.112 __________________________ _____ belastning ved processing 0.355 VENTETID I AKTIVKØ = 5-30 % af CPU-tid (skøn ud fra udnyttelsesgrader af processer) $rj$$nl2$ $np$ Da indflydelse af pladelagertilgang også må medregnes, har vi slået de sidste 2 faktorer sammen (kaldes så OVERHEAD) og sat deres værdi lig 0.25*(CPU+DISKTID) $np$ Vi kan nu opstille en afprøvningstabel(tal i ms. $sj$ PROCES CPU-TID DISKTID OVERHEAD BEREGNET PROCESTID AFG TID MÅLT _______________________________________________________________ INPUT 16.33 - 4.08 20.41 20.69 1% SØGE 173.33 3.5*54=189 90.5 452.83 437.99 4% OPSLAG 66.34 2.0*54=108 43.5 217.84 227.20 4% OUTPUT 8.92 0.07*54=4 3.18 15.88 14.79 7% ________________________________________________________________ $rj$ $np$ Tabellen viser, at modellen ud fra de givne inddata og forudsætninger producerer resultater, som vi ville forvente. (om så modellen afbilder OP-systemet er en ganske anden sag, som er belyst i valideringsafsnittet). $np$ Beregning af varians sker ved flg. formel -REAL PROCEDURE BEREGNVAR i programmet - $nl$ $sj$ varians på måleserie = $rj$$nl$ Formlen sparer n subtraktioner i forhold til det normale udtryk for varianse. $nl3$ Udnyttelsesgraden af diske er jvf. bilag 3 s.4. $sj$ DISK beregnet målt ____________________________________________ SØGE = 24.5 % 23.0 % OPSLAG = 13.6 % 12.3 % OUTPUT = 0.77 % 0.77% ______________________________________________ $rj$$nl$ Udnyttelse af proceser (kun CPU-behandling) er korrekte jvf. bilag 3 s.4. $sj$ PROCES forventet målt ____________________________________________ INPUT = 3.1 % 3.3 % SØGE =22.6 % 21.9 % OPSLAG = 8.4 % 8.5 % OUTPUT = 1.82 % 1.95 % _____________________________________________ $rj$$nl$$np$ Kølængde kan ikke umiddelbart eftervises. Det bør bemærkes, at de målte kølængder er for proceskøer inclusive jobbet, der i øjeblikket er kørende eller er i aktivkø. $rh 1,VALIDERINGSFORLØB$ $ps0$ $ns 1,4,_«bs»6_«bs»._«bs»V_«bs»a_«bs»l_«bs»i_«bs»d_«bs»e_«bs»r_«bs»i_«bs»n_«bs»g_«bs»s_«bs»f_«bs»o_«bs»r_«bs»l_«bs»ø_«bs»b_«bs».$ $np$ Dette afsnit beskriver den udviklingsproces simulatoren har gennemløbet. Processen er foregået over en tidsperiode på ca. 1/2 år og har været ret tidskrævende. Årsagen til det forholdsvise langvarige udviklingsarbejde, er at indførte ændringer undervejs har tenderet til at til at øge kompleksiteten af simulatoren. Dette har derfor bevirket, at det har været vanskeligt at ændre i simulatoren. $np$ Ved beskrivelsen af udviklingsforløbet vil der blive skelnet mellem 2 grundmodeller af simulatoren. At det ikke fra starten har været muligt at konstruere en fast model til at simulere en RC8000 ved OP-systemet skyldes i første række, at kendskabet til en RC8000 ikke var stort nok. Mangler i kendskabet til RC8000 skyldes at dokumentationen til RC8000 ikke helt afspejler de aspekter, som har været væsentlige i forbindelse med konstruktionen af simulatoren. Manglerne her refererer primært til den scheduleringsstrategi, der anvendes på en RC8000. Beskrivelsen af denne i RCSL no. 31-d476 RC8000 MONITOR PART 1 SYSTEM DESIGN side 43-46 er ret kortfattet, og derved ikke helt præcist dækkende de facetter som anvendes til konstruktionen af simulatoren. $np$ Når resultaterne fra simulatoren sammenlignes med resultaterne opnået ved målinger på OP-systemet, har vi valgt at gøre dette ud fra timer, hvor der behandles ca. 2000 forespørgsler. En belastning på 2000 forespørgsler pr. time svarer til en gennemsnitlig belastning . $ns 1,4,_«bs»6_«bs»._«bs»1_«bs»._«bs»R_«bs»O_«bs»U_«bs»N_«bs»D_«bs»-_«bs»R_«bs»O_«bs»B_«bs»I_«bs»N_«bs».$ $np$ På et tidligt tidspunkt i udviklingen af simulatoren, skete tildelingen af CPU-tidskvanter efter en gængs ROUND-ROBIN strategi. Processtyringen foregik ved, at processerne cyclisk blev allokeret CPU-tid såfremt, de havde behov for det( se figur 6.1). Processerne fik altid tildelt hele tidskvantet på 25.6 ms, idet kontrollen blev overdraget til processtyringskomponenten, hvis ikke hele tidskvantet behøvedes. $nl$$sj$ -------------------------------------------- ! ! ! ! ! ----- ----- ----- ----- ! ! ! ! ! ! ! ! ! ! ! --->! ? !-->! ? !-->! ? !-->! ? !------->-- ! ! ! ! ! ! ! ! ----- ----- ----- ----- input søge opslag output ?: Har processen behov for CPU. Hvis ja, alloker CPU'en. Hvis nej, gå til næste proces. figur 6.1 $rj$ Resultaterne fra kørsler med denne simulator er ikke umiddelbart sammenlignelige med resultater opnået ved målinger på OP-systemet. Dette skyldes, at under udformningen af denne model, havde vi ikke viden om antallet af pladelagertilgange i de enkelte processer. Imidlertid var antallet af pladelagertilgange og deres tidsforbrug sat til sådanne størrelser, at en vis sammenligning kan foregå. Tabel 6.1 viser, hvilke resultater og nøjagtigheden af resultaterne ved kørsler med denne simulatortype. Det bemærkes, at simulatoren er kørt under forudsætning af, at der er mellem 4 og 6 pladelagertilgange for en forespørgsel i søgeprocessen. I opslagprocessen er antallet mellem 1 og 3. Derudover antages, at en pladelagertilgang tager 38.0 ms. Ved outputprocessen er ingen pladelagertilgange. $sj$ målinger simulator afg. i % INPUT-proces antal forsp. 1999 1910 4.4 procestid 21.16 16.35 22.7 CPU-tid 16.22 15.41 5.0 køtid ? ? - SØGE-proces antal forsp. 1336 1204 9.9 procestid 399.3 465.9 16.7 CPU-tid 180.3 185.1 2.6 køtid 36.4 79.9 119.5 OPSLAG-proces antal forsp. 1196 1201 0.4 procestid 160.4 150.9 5.9 CPU-tid 66.4 61.4 7.5 køtid 12.8 27.7 116.4 OUTPUT-proces antal forsp. 1999 1910 4.4 procestid 11.6 7.9 31.9 CPU-tid 8.8 7.7 12.5 køtid 8.4 35.6 316.3 Gnst. svartid 437.1 516.0 18.1 tabel 6.1 $rj$$nl$ Det bemærkes, at ved denne model beregnedes køtiden ved inputprocessen ikke. $np$ For ROUND-ROBIN gælder, at afvigelses i svartiden er for stor. Derudover er afvigelserne ved køtiderne ved processerne for store. Da køtiden hænger sammen med, hvordan der scheduleres blev det hurtigt klart, at det var nødvendigt at ændre scheduleringsstrategien. $ns 1,4,_«bs»6_«bs»._«bs»2_«bs»._«bs»M_«bs»o_«bs»d_«bs»i_«bs»f_«bs»i_«bs»c_«bs»e_«bs»r_«bs»e_«bs»t__«bs»R_«bs»O_«bs»U_«bs»N_«bs»D_«bs»-_«bs»R_«bs»O_«bs»B_«bs»I_«bs»N_«bs».$ $np$ Denne simulationsmodel bygger på den specielle scheduleringsstrategi, som anvendes ved en RC8000. De første kørsler med denne model blev foretaget uden at diskkanalen var implementeret. Resultaterne fra disse kørsler er angivet i tabel 6.2. Tabellen er lavet på baggrund af en kørsel, hvor antal pladelagertilgange i søgeprocessen er mellem 2-5, i opslagprocessen er det mellem 1 og 3, og sandsynligheden for en pladelagertilgang i outputprocessen er 0.06. Derudover er skiftetiden, dvs. den tid det tager at skifte mellem to processer sat til 3.9 ms. $sj$ målinger simulator afg. i % INPUT-proces antal forsp. 1999 2257 12.9 procestid 21.16 19.4 8.3 CPU-tid 16.22 16.1 0.7 køtid ? 6.23 - SØGE-proces antal forsp 1336 1426 6.7 procestid 399.3 354.7 11.2 CPU-tid 180.3 167.9 6.9 køtid 36.4 75.0 106.0 OPSLAG-proces antal forsp. 1196 1384 15.7 procestid 160.4 160.0 0.2 CPU-tid 66.4 60.3 9.2 køtid 12.8 54.3 324.2 OUTPUT-proces antal forsp. 1999 2257 12.9 procestid 11.6 12.7 9.5 CPU-tid 8.8 8.6 2.3 køtid 8.4 9.5 13.0 Gnst. svartid 437.1 446.6 1.7 tabel 6.2 $rj$$nl$ Resultaterne vist i tabel 6.2 fra de første kørsler med modificeret ROUND-ROBIN viser pånær køtiderne en pæn overenstemmelse med målingerne. Både ved kørsler med simulatoren og ud fra målinger på OP-systemet har det vist sig, at der er særdeles stor variation på køtiden. Ved at ændre på antallet af pladelagertilgange og processkiftetiden har køtiden ved f.eks. søgeprocessen svinget mellem 56.9-119.9 ms. $np$ Ved dette punkt i forbindelse med udviklingen af simulatoren fremkom nogle oplysninger om antallet af pladelagertilgange og diskkanalen. Dette førte så til fastlæggelsen af den endelige simulator model. $np$ Den eneste størrelse der herefter er ukendt er skiftetiden mellem to processer. For at ligge sig fast på en størrelse for en endelig værdi af denne blev tre kørsler foretaget. Her viste det sig, at en skiftetid på 1.5 ms var mest nøjagtig. $sj$ Skiftetid 1.0 1.5 2.0 I virkeligheden gnst. svartid 436.6 ms 437.6 ms 467.7 ms 437.1 ms tabel 6.4 $rj$ $nl$ På baggrund af disse tal blev de endelige kørsler foretaget med en skiftetid på 1.5 ms. Typen med en skiftetid på 2.0 forkastedes, da svartiden var for unøjagtig. Af de to sidste typer er der ikke den stor forskel i nøjagtigheden ved svartiden, men det viste sig at den valgte var mere nøjagtig for proces- og køtiden ved opslagprocessen. $np$ Til beskrivelse af simulatoren nøjagtighed kan følgende to tabeller anføres. Resultaterne i tabel 6.4 bygger på 2000 forespørgsler pr time og tabel 6.4 bygger på 6000 forespørgsler pr time. $sj$ målinger simulator afg. i % INPUT-proces antal forsp. 1999 2012 0.7 procestid 21.16 17.73 16.2 CPU-tid 16.22 16.3 0.5 køtid ? 3.1 - SØGE-proces antal forsp. 1336 1310 1.9 procestid 399.3 418.2 4.7 CPU-tid 180.3 175.8 2.6 køtid 36.4 52.9 45.2 OPSLAG-proces antal forsp. 1196 1204 0.6 procestid 160.4 160.4 0.0 CPU-tid 66.4 67.9 2.3 køtid 12.8 6.8 46.8 OUTPUT-proces antal forsp. 1999 2012 0.6 procestid 11.6 10.9 6.0 CPU-tid 8.8 9.0 2.7 køtid 8.4 2.2 74.4 Gnst. svartid 437.1 437.6 0.1 tabel 6.4 $rj$$nl$ Til disse resultater kan anføres, at samtlige størrelser pånær køtiden viser en meget stor overenstemmelse mellem simulatoren og de målte resultater ved KTAS. For køtiden gælder, at for både søge- og opslagprocessen er der stor variation i måleresultaterne. Således varierer køtiden ved søgeprocessen mellem 12.63 og 64.53 ved målingerne. Ved kørsler med simulatoren har det også vist sig, at størrelsen variere meget afhængig af, hvilkebn startværdi, der ngives til tilfældighedstalsgeneratoren. De samme forhold gælder ved køtiden ved opslagprocessen. Ved opslagprocessen viser målinger en variation mellem 9.02 og 18.80. $sj$ målinger simulator afg. i % INPUT-proces antal forsp. 5993 6142 2.5 procestid 30.7 18.8 38.7 CPU-tid 16.8 16.3 2.7 køtid ? 6.6 - SØGE-proces antal forsp. 3858 4030 4.4 procestid 425.9 452.2 6.1 CPU-tid 172.0 182.4 6.0 køtid 315.9 318.1 0.7 OPSLAG-proces antal forsp. 3618 3710 2.5 procestid 193.7 176.1 9.1 CPU-tid 67.2 67.2 0.0 køtid 62.8 20.7 67.0 OUTPUT-proces antal forsp. 5993 6142 2.5 procestid 16.9 10.9 35.7 CPU-tid 9.0 9.0 0.0 køtid 11.7 3.8 67.5 Gnst. svartid 692.0 657.8 4.9 tabel 6.5 $rj$$nl$ Til disse resultater kan anføres at udover køtiderne, er her også stor afvigelse på procestiden i input- og outputprocessen. Dette skyldes ganske givet, at vi ikke helt benytter den samme scheduleringsstrategi ved simulatoren som benyttes i RC8000. Til køtiden ved outputprocessen kan angives, at ved en belastning på under 100 forespørgsler pr time har målinger vist, at den er på omkring 7.2 ms. Dette kommer fra, at når en forespørgsel sendes til outputprocessen overføres data fra et sted i lageret til et andet sted, og dette tager omkring 7.2 ms. Dette er ikke indbygget i simulatoren, idet vi ud fra målinger på OP-systemet vidste, at køtiden ved outprocessen, har lille indflydelse på den gennemsnitlige svartid for en forespørgsel. $np$ For procestiden ved input- og outputprocessen gælder, at der ved en belastning på 6000 forespørgsler pr time er ret stor afvigelse. Da de har særdeles ringe indflydelse på den gennemsnitlige svartid, har vi ikke ment det var nødvendigt at tilpasse simulatoren bedre. For til sidst at anskueliggøre, at det er rimeligt at stole på simulatoren er på figur 6.2 tegnet kurver over svartiden afhængighed af antallet af forespørgsler pr time. Ud af X-aksen er antallet af forespørgsler angivet og Y-aksen angiver den gennemsnitlige svartid. På figuren angiver den stiplede resultaterne fra simulatoren og den optrukne er fremkommet ud fra målinger i logfilen. $np$ Kurven viser, at den gennemsnitlige svartid ved simulatoren ligger særdeles tæt op ad målingerne på svartiden. Det er vanskeligt at få simulatoren til at passe helt præcist ved små belastninger, idet her er særdeles stor variation på måleresultaterne. $nl2$ $ns 1,4,_«bs»7_«bs»._«bs»E_«bs»r_«bs»f_«bs»a_«bs»r_«bs»i_«bs»n_«bs»g_«bs»e_«bs»r__«bs»m_«bs»e_«bs»d__«bs»k_«bs»ø_«bs»r_«bs»s_«bs»e_«bs»l__«bs»m_«bs»e_«bs»d__«bs»s_«bs»i_«bs»m_«bs»u_«bs»l_«bs»a_«bs»t_«bs»o_«bs»r_«bs»e_«bs»n_«bs».$ $np$ Udviklingen af simulatoren beskrevet i denne opgave er foregået trinvist. Efter færdiggørelsen af en simulationsmodel som viste sig ikke tilstrækkelig nøjagtig tilføjedes yderligere detaljering af simulatoren. Et udviklingsforløb som dette må anses for meget realistisk. Det er meget få store systemer der kan simuleres nøjagtigt nok ved den første konstruktion af en simulationsmodel. Disse problemmer skyldes, at ved et stort datamatisk system, er det særdeles vanskeligt at afgøre, hvilke faktorer der er væsentlige i forbindelse med systemets opførsel. $np$ En simulationsmodel kan således ikke fastlægges engang for altid ved starten af simuleringen. Dette bevirker, at der tilføjes simulatoren en del ændringer. Da ikke alle disse ændringer kan forudsiges, vil selve simulationsmodellen naturligt blive ret kompliceret og programmeringsteknisk mindre pæn. Disse problemmer har vi naturligvis også haft ved denne opgave. Specielt ved indførelsen af scheduleringsstrategien og datakanalen har der været problemmer med at få simulatoren til at fungere korrekt. Programteknisk er de dele, der simulere disse ting ( DISKKONTROL og KOEINDSAET) således blevet ret komplicerede. $np$ Dette har bevirket, at de ændringer vi ønskede at lave, som dublering af søgeprocessen blev ret komplicerede. Da det ved simulationskørslerne har vist sig, at der er en særdeles stor tidsgevinst ved en dublering af søgeprocessen, kunne forsøg som opspaltning af søgeprocessen være særdeles interessante at foretage. Imidlertid vil en opspaltning af søgeprocessen kræve en ret stor ændring i simulationsmodellen så dette er ikke foretaget. $np$ Udover at simulatoren er blevet kompliceret programteknisk, har de mange ændringer medført, at simulatoren har været særdeles dyr når produktionskørsler skal foretages. En simulationskørsel hvor en belastning på 12000 forespørgsler simuleres tager således ca. 3 min i CPU-tid. Dette koster omkring 60.00 kr ved normal drift. Da bevillingerne naturligvis har været begrænsede, har det ikke været muligt at foretage mange simulationskørsler. $np$ Et samlet indtryk af erfaringerne må være, at det er særdeles vigtigt at foretage _«bs»m_«bs»e_«bs»g_«bs»e_«bs»t__«bs»g_«bs»r_«bs»u_«bs»n_«bs»d_«bs»i_«bs»g_«bs»e studier i et datamatisk system før en simulator til det konstrueres. Ved dette kan man sikkert undgå mange problemer. $ef$ scope user vko2 finis ▶EOF◀