|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 179712 (0x2be00) Types: TextFileVerbose Notes: RCSL-52-AA-679, RCSL-52-AA-964 Names: »speciale«
└─⟦a41ae585a⟧ Bits:30001842 SW-save af projekt 1000, Alarm-system └─⟦72244f0ef⟧ └─⟦this⟧ »speciale«
>fo ~Instruktionsindkodning i RC3502.~ >a1 INDLEDNING. Der har i de seneste }r v{ret en stigende interesse for emnet: effektive pro_gram_mer. Pro_gram_effek_tivi_tet^ er ikke kun et sp|rgs_m}l om, hvor hur_tigt et pro_gram kan afvikles. Det drejer sig snarere om, i hvor h|j grad f|lgende m}l hver is{r er opfyldt. - Programmer skal v{re p}lidelige (@korrekte@). - Programmer skal v{re l{sbare. - Programmer skal afvikles hurtigt. - Programmer skal fylde s} lidt som muligt. Disse m}l er st{rkt korrelerede. Interessen har p} det seneste mest samlet sig om at neds{tte programmers pladsforbrug uden at sl{kke p} de tre f|rste m}l. Denne inter_esse skyl_des blandt an_det, at lager er en mere kritisk res_sour_ce end "CPU-cycles", ikke s} me_get p} grund af de |kono_miske aspek_ter, men mere p} grund af, at begr{ns_ninger i ord_st|rrel_se indskr{n_ker rime_lig adgang til sto_re lager_omr}_der (@Tan78@). >a2 SPECIALETS INDHOLD. Denne specialeopgave omhandler en konkret effek_ti_vi_se_ring af et in_struk_tions_s{t ved indkodninger baserede p} m}_lin_ger, f|rst og fremmest med henblik p} pladsbe_spa_rel_se; men med |get afvik_lings_has_tig_hed som et sekun_d{rt m}l. Udgangspunk_tet er et ek_si_ste_ren_de in_struk_tions_s{t, som det fin_des p} en RC3502 datamaskine. Instruktions_s{ttet er bl.a. designet til at under_st|tte et struk_tu_re_ret h|j_niveau sprog til pa_ral_lel_program_me_ring , PASCAL80, eller som det siden er omd|bt til, REAL TIME PASCAL. Instruktionss{ttet er i |vrigt in_spireret af USCD-PASCAL p-code og endvidere af ideer fremsat af bl.a. Tanenbaum (@Tan78@) vedr|rende design af in_struk_tionss{t. Design af et in_struk_tionss{t^ omfatter i princippet to adskilte beslutninger (@Ste79@): - Hvilke funktioner skal in_struk_tionss{ttet ud_f|_re. - Hvorledes skal in_struk_tionerne indkodes. Dette skrift omhandler, hvorledes det sid_ste punkt er grebet an i det konkrete tilf{lde, og pr{senterer de opn}ede re_sultater. De an_vend_te me_to_der er i f|r_ste om_gang in_spi_re_ret af Steven_son og Tanen_baum (@Ste79@) og (@Tan78@), men er udvidet til ogs} at om_fat_te m}_lin_ger af pro_gram_mers dyna_mis_ke in_struk_tions_an_ven_del_se i for_bin_del_se med for_|get program_af_vik_lings_has_tig_hed, der op_tr{_der som et sekun_d{rt m}l i det_te ar_bej_de. Specialet er bygget op, s} der f|rst med udgangspunkt i et over_ord_net m}l om "performance" foretages en problem_afgr{ns_ning. Der_ef_ter dr|ftes gene_relle me_to_der. Det aktuelle valg af me_to_de pr{sen_te_res og den praktiske fremgangs_m}_de frem_l{gges. De empiriske re_sul_tater statisk og dynamisk, er bag_grund for en kandidat_liste til indkod_ning. Denne liste diskutte_res med hen_blik p} even_tu_elle {ndrin_ger bl.a. for_}r_saget af hyp_pigt fore_kommen_de sekven_ser af instruk_tioner, der |nskes ind_ko_det til en in_struk_tion pr. sekvens. Endelig frem_kom_mer der her_af en kandi_dat_lis_te over in_struk_tio_n^er, hvoraf de bedste ind_ko_des. Den sta_tis_ke effekt er kendt; men den dy_na_mis_ke ef_fekt efter_kon_trol_le_res, da det even_tuelt kan v{re n|d_ven_digt med fle_re itera_tio_ner f|r de bed_ste dy_na_mis_ke kan_di_da_ter er fun_det. >a2 L[SER FORUDS[TNINGER. For at f} det ful_de ud_byt_te af spe_cia_let, er det n|d_ven_digt at have et gene_relt kend_skab til in_struk_tions_opti_mali_serin_ger i form af ind_kod_ninger. Dette kan f.@eks. opn}s ved at l{_se referen_cerne (@Ste79@), (@Wilc80@). L{seren b|r end_vi_dere have et kend_skab til struk_turere_de h|jni_veau pro_gram_me_rings_sprog, (@Tan78@), (@Den74@), (@Dij69b@), og spe_cielt v{_re for_tro_lig med program_af_vik_ling i for_bin_del_se med stak_ke (@stak_ma_ski_ner@), (@Joh71@). En_delig er det n|d_ven_digt at ha_ve spe_ci_fik vi_den om PASCAL80 og RC3502, da dette skrift besk{f_ti_ger sig ekspli_cit med disse produk_ter, uden at re_de_g|_re for de_res struk_tur i de_tal_jer. Referen_cerne (@Lau80@) og (@Sta80@) kan danne bag_grund her_for, og refe_ren_cen (@M|l81@) vil kunne an_ven_des som op_slags_v{rk i de_tail_sp|rgs_m}l ved_r|_ren_de RC3502. Jeg har bestr{bt mig p} at anvende dansk terminologi som den fremg}r af Dansk Standardise_rings_r}ds: EDB_ordbogen (@DSt75@), samt i nogen grad sup_ple_ret af Forslag til Dansk Standard (@DSt80@), vel vi_den_de, at disse for_slag end_nu ikke er kano_ni_se_ret. Det er dog ikke al_tid mu_ligt at fin_de d{k_kende dan_ske fag_ud_tryk, og i s}_dan_ne til_f{l_de vil jeg benyt_te engel_sk fag_sprog, der s} vil op_tr{_de i anf|rl_ses_tegn. >a1 PROBLEMSTILLING. RC3502^ er en minidatamat, der er designet spe_cielt med hen_blik p} realisation af strukture_rede h|j_ni_veau_sprog^ (@Den74@), (@Dij60@), (@Dij69a@), (@Dij69b@), (@Tan78@). Dette af_spej_ler sig is{r i den m}de, mi_kro_pro_grammet er ud_for_met p}, her_under det valg_te instruk_tions_s{t^. >a2 OVERORDNET M]L. For enhver kommerciel maskine vil konkurrencehensyn medf|re |nsket om en mere salgbar maskine, hvilket vil sige, at maskinens pris/ydeevne^ skal forbedres. Tilsvarende har erfaringen ( og Parkinson med Parkinsons Lov ) bel{rt os om, at hvis der findes en r{kke begr{nsninger, der danner en ramme inden for hvilken, et system kan udvikle sig, s} vil systemet hurtigt fylde rammen helt ud. Dette velkendte udviklingsm|nster betyder for en datamaskine, at dens kapacitet ( lager, central enhed m.m ) vil blive udnyttet til det yderste. Ogs} i s}danne situationer opst}r |nsket om maskinforbedringer, s} de sn{rende rammer vides ud. Pris/ydeevne betyder kort og godt: forholdet mellen em maskines pris og dens ydeevne. Mens prisen er noget h}ndfast , uanset hvil_ket grund_lag, den er fast_sat p}, s} er ydeevne^ et noget mere vagt begreb. Der er adskillige, der har fors|gt sig med definitioner af ydeevnen for en datamaskine^. Det har imidlertid ingen mening at besk{ftige sig med ydeevnen som et totalt begreb. En maskines ydeevne er sammensat af en hel r{kke kom_po_nen_ter (@Fer78@), ofte indbyrdes afh{ngige, s} en forbedring af en komponent medf|rer en forringelse af en anden. En forbedring skal alts} vurderes ud fra nogle rammer, inden for hvilke de enkelte komponenter kan variere. Jeg vil ikke g} videre i betragtningerne omkring begrebet ydeevne men i stedet n{vne en r{kke komponenter, som ydeevne^n for en RC3502 afh{nger af: - programafviklingshastighed^ - lagerforbrug^ ved programafvikling - datamaskinens fysiske adresserum^ ( lager_kapa_ci_tet^@) - fejlhyppighed^ for materiel^ - fejlhyppighed^ for programmel^ - programudvikling^shastighed og effektivitet - programl{sbarhed^ ( fleksibilitet^@) - anvendelsesomr}de^r >a2 PRIS/YDEEVNE - FORBEDRINGER. Forbedringer af pris/ydeevne^ kan opn}s p} en lang r{kke m}der og p} mange forskellige niveauer. Jeg vil i det f|lgende komme med en r{kke eksempler, der anskueligg|r dette, og samtidig giver en fornemmelse af det enorme omfang og den emnem{ssige sp{ndvidde, en fyldestg|rende gennemgang af hele pris/ydeevne problematikken ville f|re med sig. Eksemplerne er p} ingen m}de d{kkende for hele emnet. >a3 MATERIEL FORBEDRINGER. Indf|relsen af nye komponenter i materiellet kan give forskellige former for forbedringer. - prisreduktion, hvis de er billigere - prisreduktion, hvis de kan udf|re mere komplekse funktioner og kan erstatte et st|rre antal komponenter, der samlet er dyrere. ( Her skal produktions omkostningerne selvf|lgelig ogs} tages i betragtning ). - hurtigere programafvikling ved indf|relse af hurtigere komponenter. Dette er selvf|lgelig afh{ngig af en r{kke faktorer - f.eks. om der eksisterer en eller flere flaskehalse i systemet, som ikke bliver ber|rt af en komponentforbedring. - hvis der indf|res komponenter, der indeholder mere lager. Denne forbedring kr{ver naturligvis, at det implementerede system, in_struk_tionsformat m.v., kan g|re brug af den |gede lagerkapacitet. Hvis det fysiske lager_rum er bygget modul{rt op, som i RC3502, vil f{rre lagermoduler kunne klare de samme opgaver, hvilket giver en prisforbedring. Hvis frekvens^en af datamaskinens taktsignal kan |ges vil yde_ev_nen nor_malt for_bed_res. Mi_kromaskine^ns arkitektur kan evt. forbedres ved at tage udgangs_punkt i de funk_tio_ner, som mi_kro_pro_gram^_met skal ud_f|_re. For RC3502 er dette punkt v{sentligt. Der er forventninger om, at programafviklingen vil kunne foreg} 1.5-2 gange s} hurtigt med en mere optimal mi_kro-maskin-arkitektur opbygget over de samme kredse som nu. >sp0 >a3 SOFTWARE SYSTEM. P} systemsiden kan man n{vne betydningen af, at det (@eller de@) anvendte programmeringssprog tilbyder det n|dvendige v{rkt|j til programm|ren og transformerer (@over_s{t_ter^@), s} de opga_ver ma_ski_nen er bereg_net til kan l|ses: - sikkert - simpelt ( og dermed hurtigt at programmere ) - effektivt Dette kan give anledning til forbedringer i sproget og optimaliseringer i overs{tteren. Forbedringerne kan som f|r n{vnt ikke ses l|srevet fra hinanden. F. eks. vil |get sikkerhed oftest medf|re formindsket afviklingshastighed, s} der er brug for en prioritering af de m}l, der op_stil_les, og en afgr{ns_ning af de opga_ver, som ma_ski_nen (@spro_get@) skal anvendes til. Det basale system skal v{re effektivt og sikkert. Det er vigtigt, at det er afpasset til de opgaver, som maskinen er tilt{nkt. Raffinementer i basal_system^et vil ofte med_f|re et |get tids_for_brug i det generelle til_f{l_de, dvs. en lang_som_me_re programafvikling, f.eks. fordi det basale system er designet med henblik p} en r{kke specielle funk_tio_ner, som rent faktisk ikke bruges. >a3 INSTRUKTIONSS[TTET. Instruktionss{t^tet har stor betydning for yde_ev_ne^n, eller rettere for en hel r{kke af de komponenter, der tilsammen udg|r yde_ev_nen. Instruktionss{ttet ( evt. et macrosprog opbygget af in_struk_tionss{ttets elementer ) skal v{re velegnet som m}l_sprog^ for det eller de sprog, der skal anvendes som programmeringssprog (Tan78@), (@Cra79@). En forbedring i denne retning vil muligg|re: - mere p}lidelige overs{tter^e og dermed p}lidelige programmer - simplere kodegenerering, og in_struk_tioner, der er dikteret af sproglige elementer, vil v{re mere effektive ( hurtigere at udf|re ), end hvis de skulle erstattes af en hel r{kke in_struk_tioner, for at udf|re funktionen - den producerede kode er mere kompakt, s} lager_forbruget er mindre Instruktionss{ttet skal underst|tte det basalsystem, der v{l_ges. Typisk vil det basale system skulle foretage ind- og udk{dninger i k|strukturer. Der kan dels v{re behov for, at s}danne funktioner foreg}r udeleligt, og dels behov for, at funktionerne udf|res hurtigt, fordi de optr{der i forbindelse med tidskritiske opgaver, varetaget af det basale system. Som eksempel kan n{vnes afvik_lings_skift mellem paralelle proceser, hvor proces in_kar_na_tions beskri_vel_sen skal s{ttes ind/tages ud af diverse prioriterede aktivk|er. Til bl.a. dette form}l er der indf|rt in_struk_tioner, som kan inds{tte et ele_ment sidst i en k|, hhv. udtage et ele_ment for_rest fra en k|. Hvis hele strategien for afviklings_skift^ er fastlagt, kan man g} et skridt videre og lade en in_struk_tion finde n{ste proces in_kar_na_tion, der skal have tildelt k|re_tid, for p} denne m}de at effektivisere afvik_lings_skift. I RC3502 er netop s}_dan_ne funk_tioner indf|rt i praksis, og afvik_lings_skift mellem proces in_kar_na_tioner, der k|rer p} niveau 0 ( Lau80 ), hvilket er tilf{ldet for 'normale' proces in_kar_na_tioner, er ved denne om_l{g_ning (@indkod_ning@) blevet ca. en faktor 10 hurtigere. Det er v{sentligt, at in_struk_tionsformat^et er i overensstemmelse med den mi_kro maskine, som udf|rer in_struk_tionerne. Hermed sikres, at en effektiv afkodning^ af in_struk_tionerne kan finde sted. Antallet af in_struk_tioner ( in_struk_tions_kom_plek_si_tet^en@) er ligele_des et vigtigt omr}de, der har n|je sam_men_h{ng med: - in_struk_tionsformatet - hvilke opgaver, der skal underst|ttes - hvilke tids- og pladsm{ssige krav, mi_kro_pro_grammet er underlagt S} l{nge det drejer sig om velkendte generelle strukturer/sammenh{nge, der skal underst|ttes i in_struk_tionss{ttet, er det forholdsvis enkelt at afg|re, hvorledes dette skal g|res, og at vurdere om det er rimeligt at medtage en given facilitet i in_struk_tionss{ttet. Men har man f|rst dannet et vist minimalt ( n|dvendigt ) in_struk_tionss{t, kan det v{re vanskeligt at fastl{gge, hvorledes man bedst udvider det_te. Opgaven g}r alts} ud p} , ud fra et givet in_struk_tionss{t, hvormed implementering er mulig (@in_struk_tionss{ttet er tilstr{kke_ligt@), at op_stil_le m}l og begr{ns_ninger for ud_vi_del_ser. Herefter at finde kandidater til nye in_struk_tioner og at vurdere, hvilke af disse der opfylder m}lene bedst inden for de givne rammer ( dvs. plads til mi_kroprogram ). Endelig udvides in_struk_tionss{ttet med de udvalgte kandidater og de vurderede resultater efterkontrolleres. Med henblik p} mindre lagerforbrug^ og hurtigere programafvikling^ vil mulige kandidater v{re hyppigt forekommende sekvens^er af in_struk_tion^er, der kan erstattes af en enkelt in_struk_tion - sekvens_ind_kod_ning^, og end_vi_de_re vil hyppigt forekommende in_struk_tioner i forbindelse med bestemte para_me_ter_v{r_di_^er kunne erstattes af nye in_struk_tioner med pa_ra_me_terv{rdien indlejre^t i in_struk_tionskode^n - pa_ra_me_ter_ind_kod_ning^. Dette skal ses p} baggrund af et in_struk_tionss{t, hvor in_struk_tionerne har varierende l{ngde og endvidere er struktureret som en ope_ra_tions_ko_de^ evt. med efterf|lgende parametre. >a1 PROBLEM AFGR[NSNING. I kapitel 2 afd{kkede kravet til pris/ydeevne forbedringer en hel tr{struktur af delomr}der, der hver is{r kunne v{re genstand for n{rmere under_s|gel_ser med hen_blik p} forbed_ringer. Jeg vil i det f|lgende koncentrere mig om den del af problematikken, der har med forbedringer af in_struk_tionss{ttet at g|re, og inden for dette omr}de vil jeg yderligere begr{nse mig til spe_cielt at se p} - pa_ra_me_terindkodning^ og i beskedent omfang desuden p} - sekvensindkodning^ >a2 RAMMER OG M]L. Jeg vil i det f|lgende skitsere de rammer som en RC3502^ udg|r, samt op_stil_le de konkrete m}l. >a3 RC3502 RAMMER FOR INSTRUKTIONSS[TTET. I det konkrete tilf{lde drejer det sig alts} om en RC3502 data_maskine^ med et s}kaldt "Base Instruction Set" ( M|l81 ). Dette in_struk_tionss{t^ er stort set det n|dvendige minimale in_struk_tionss{t. Der er s}ledes ikke foretaget in_struk_tionstilf|jelser p} baggrund af pa_ra_me_terindkodning, og kun ganske f}, sprogligt bund_ne, sekvens_forekomster er medtaget som in_struk_tioner (@f.eks. signal, wait, push, pop, lock m.m.@). Instruktionerne er alle struktureret med en oktet (@8@bit@) til operationskoden. Hver in_struk_tion^ kan have et antal parametre ( fra 0 og opefter ), der hver is{r kan fylde en oktet, et ord (@16 bit@) eller et dobbeltord (@32 bit@). Parametre kan enten forekomme i koden (@som direkte parametre@) eller de kan findes via specielle adresseringsveje (@f.eks. p} eksekveringsstakken@) (@Tan78@), (@M|l81@). RC3502 har en r{kke registers{t^ (@124@), der hver best}r af 8 16-bit ord. >ne 24 >fd 18 53 >nf >ta 20 24 >fb !TM:!"Max stack displacement" >fb !PS:!"Flag bits" >fb !LU:!"Last used displacement" >fb !LF:!"Local frame displacement" >fb !GF:!"Global frame displacement" >fb !PB:!"Global frame base" >fb !IC:!Instruction base" >fb !IB:!"Instruction displacement" >fe >fi >fg RC3502 registers{t. >tc # De 6 af disse ord danner, i forskellige kombinationer, i alt 4 adresser, der har tilknytning til eksekveringsstak^ken - herunder proces in_kar_na_tions be_skri_vel_sen, samt til programmet, der udf|res. De sidste to ord bruges til kontrol af stak-overl|b samt til diverse bitflag. Det bem{rkes, at der ikke er nogen form for traditionelt registers{t med arbejdsregistre. Der er heller ikke en repr{sentation af stakkens |verste elementer i registers{ttet. I en tidligere fase var RC3502 forsynet med en 4-ords registerrepr{sentation (@"cache"@) af stakken; men administrationen heraf slugte hastighedsgevinsten i form af hurtigere tilgang til register_s{t_tene. Der er en hel r{kke af ideer til registerudnyttelse, der kunne komme p} tale i RC3502; men jeg vil ikke yderligere besk{ftige mig med denne problemkreds; men i stedet konstatere, at registers{ttet indeholder de n|dvendige pege_pin_de til lage_ret, og at hentning af in_struk_tioner og parame_tre, samt lagring af resultatet altid foreg}r til/fra lageret. Med en lagertil_gangs_tid^ p} 432 ns i forhold til en registertilgangstid^ p} 217 ns, hvilket vil v{re den normale forskel, er der ikke mulighed for med fordel at anvende ret meget tid p} at administrere en eller anden form for regi_ster_re_pr{_sen_ta_tion. Adressering^sm{ssigt er den mindste enhed, der kan adresse^res en oktet. Dette er den v{sentligste grund til at operationskoden for en in_struk_tion^ fast optager en oktet. Man kunne t{nke sig kortere in_struk_tioner f.eks. 4-bit in_struk_tionskoder, men der ville ikke v{re sparet noget i hastighed, idet der skal hen_tes det samme antal bit, som f|r og oven i k|bet vil afkodning^en i mi_kroprogram^met g} langsommere. Desuden vil det v{re n|dvendigt at lade en bit indikere, om formatet er 4-bit eller 8-bit, hvilket kraf_tigt begr{nser antallet af in_struk_tioner, der kan repr{senteres (@128 + 8 ved 4- og 8-bits repr{sentation mod 256 ved kun 8-bits repr{sentation@). Der er i "Base Instruction Set" f|r optimaliseringer i alt ca. 170 in_struk_tioner, hvilket peger p} en fast 8-bit repr{sentation af operationskoden, idet de ca. 86 mulige udvidelser overstiger de tilf|jelser, der i praksis vil komme p} tale. Mi_kroprogrammet findes i et 60 bit bredt 2096 ords permanent lager_omr}de (@"60 bit 2K PROM"@). Der er kun ret be_gr{n_se_de muligheder for at tilf|je nye in_struk_tioner. Den type nye in_struk_tioner, der fylder mindst, er dem, der fremkommer ved pa_ra_me_ter_indkodning, idet in_struk_tionen uden pa_ra_me_ter^indkodningen i al v{sentlighed kan genbruges. Det at tilf|je nye in_struk_tioner er alts} en metode, der er kraftigt begr{nset af pladsen, som mi_kroprogram^met skal holdes inden for, og det er derfor vigtigt, at det er de rigtige kandidater, der v{lges som nye in_struk_tioner. >a3 M]L MED INSTRUKTIONSTILF\JELSER I RC3502. Det overordnede m}l^ for in_struk_tionstilf|jelserne er som n{vnt i kapitel 2 pris/yde_ev_ne forbedringer. Dette m}l kan i denne forbindelse udtrykkes ved f|lgende: - mindre lagerforbrug^ - hurtigere programafvikling^ I det f|l_gende skal disse m}l v{re vejledende i val_get af kandidater. For at kunne vurdere hvilke in_struk_tion^er med tilh|rende pa_ra_me_terv{rdier, hhv. in_struk_tions_sekvenser, der b|r v{re kandidater, er det n|dvendigt at kende noget til in_struk_tions_hyppighed^er i forbindelse med pa_ra_me_terv{rdier, samt til instruk_tions_se_kvens_hyppighed^er. De to opstillede m}l er ikke umiddelbart forenelige, idet mindre lagerforbrug h{nger n|je sammen med den statiske in_struk_tionshyppighed, hvorimod hurtigere programafvikling h{nger n|je sammen med den dynamiske in_struk_tionshyppighed. Det er alts} ikke givet, at det er de samme kandidater, der viser sig at tilgodese de to m}l. Vi skal siden se p}, at kandidater, der pa_ra_me_terindkodes, bidrager mest til pladsreduktion, hvorimod kandidater, der sekvensindkodes i h|jere grad bidrager til en hurtigere programafvikling. Jeg vil i det f|l_gende mest besk{ftige mig med parame_ter_ind_kod_ning. >a1 PARAMETERINDKODNING - METODE. Selve indkodningsmetode^n er velkendt og bl.a. beskrevet af Tanenbaum og Stevenson ( Ste79 ). Den g}r i store tr{k ud p} at danne nye in_struk_tion^er ud fra allerede eksisterende in_struk_tioner ved at lade en v{rdi af en eller flere parametre v{re implicit indlejret i operationskodev{rdien. >a2 EKSEMPEL P] PARAMETERINDKODNING I RC3502. Fra RC3502 kunne man som eksempel n{vne in_struk_tionen RECHW (@"REtrieve Constant Here Word"@), der som pa_ra_me_ter har konstanten 1. Denne in_struk_tion med tilh|rende pa_ra_me_ter vil i koden fremtr{de som (@i hexadecimal notation @): 82 00 01. Hvis RECHW skal bruges til pa_ra_me_terindkodning, vil der alts} fremkomme en ny in_struk_tion, der f.eks. kunne fremtr{de som ( i hexadecimal notation ): 8F. >a3 BETRAGTNINGER I FORBINDELSE MED EFFEKTEN. Der er tale om en besparelse p} to ud af tre oktetter. Man kan alts} spa_re et ord (@16 bit@), dvs. 66@% pr. gang in_struk_tionen forekommer i den kode, der er placeret i lageret p} RC3502 (@statisk fore_komst@). Hvad ang}r en for|get hastighed i programafviklingen, kan man se, at der spares en hentning fra la_ger af pa_ra_me_teren, der nu i stedet skal afkodes ud fra in_struk_tionskoden. Den nye in_struk_tion vil i |vrigt forl|be som den oprindelige in_struk_tion. I eksemplet med RECHW kan man beregne, at den nye in_struk_tion vil tage ca. 4,3 mi_krosek. mod oprindeligt 6,0 mi_krosek. Der er alts} tale om en besparelse p} ca. 28,3 % p} denne in_struk_tion. Med min_dre det viser sig, at in_struk_tionen ud_f|_res (@dynamisk fore_komst@) relativt langt hyp_pi_ge_re end den fore_kom_mer statisk, vil en pa_ra_me_ter_ind_kod_ning alts} have st|rst indflydelse p} lagerforbruget. >a2 EFFEKTVURDERING OG BAGGRUND FOR KANDIDATVALG. Hvor stor en effekt en pa_ra_me_terindkodning vil f} p} lagerfor_bru_g^et, kan vurderes ud fra den hyppighed, hvormed in_struk_tionen med tilh|rende pa_ra_me_ter_v{r_di_kon_stel_lation forekommer i den sta_tis_ke ko_de, som over_s{t_teren genererer. Opsamlingen af en s}dan hyppighed kan foretages i over_s{t_teren, der skal v{re i stand til, pa_ra_me_terstyret, at lave en regi_stre_ring af instruk_tions_hyp_pig_he_d^er, og endvidere skal det v{re muligt at angive pa_ra_me_ter_in_ter_val^_ler, s} de f} kandidater, det kan komme p} tale at indkode, relativt nemt kan indkredses. En mere detaljeret beskrivelse af en s}dan opsamling f|lger senere (@kapitel 5@). N}r effekten af en pa_ra_me_terindkodning med hensyn til en hurtigere program_af_vik_ling^ skal vurderes, er det som f|r omtalt antallet af gange, den p}g{ldende in_struk_tion med den bestemte para_me_ter_v{rdi_kon_stel_la_tion^ udf|res i forhold til andre in_struk_tioner, der kan give grundlaget for vurderingen, og hvis det af forskellige grunde er en hastighedsgevinst, der prioriteres h|jest i forhold til en besparelse i lagerforbrug, er det alts} n|dvendigt at tilvejebringe information om den dynamiske hyppighed for in_struk_tioner opdelt passende p} forskellige para_me_ter_v{r_di_kon_stel_la_tio_ner, for at kunne udv{lge de kandidater, der bedst opfylder m}ls{tningen. Det skal her bem{rkes, at kandidatudv{lgelsen b}de i det statiske og i det dynamiske tilf{lde ogs} involverer en vurdering af pladsforbruget i mi_kro_pro_gram^met, idet kandidater nede i r{kken meget vel sammenlagt kan give en st|rre gevinst end tilsyneladende mere oplagte kandidater, hvis de er tilstr{kkeligt billige, pladsm{ssigt, at indf|re i mi_kroprogrammet. >a2 GRUNDLAGET FOR OPSAMLING. Der rejser sig en hel r{kke sp|rgsm}l og problemer, der skal tages stilling til b}de i forbindelse med den statiske opsamling og is{r i forbindelse med den dynamiske opsamling. En hel r{kke komponenter kan have inflydelse p} resultatet af de opsamlinger og vurderinger, der danner grundlag for kandidat_ud_v{l_gel_se^n. Det er vigtigt at finde frem til disse komponenter og dern{st sikre, at de komponentfasts{ttelser, der er foretaget i forbindelse med opsamlingerne, er rimelige i forhold til de anvendelser, RC3502 er tilt{nkt, samt eventuelt vurdere, hvorledes resultaterne {ndrer sig i forhold til variationer p} de enkelte komponenter. I det f|lgende vil jeg fremh{ve, hvilke komponenter, der kan formodes at have en betydning for resultaterne af de statiske og dynamiske opsamlinger. Samtidig vil jeg fors|ge at tr{kke paralleller til tilsvarende unders|gelser, der har relevans for pa_ra_me_terindkodning mere generelt. >a3 PROGRAMGRUNDLAGET. Forskellige programmer kan give hvert sit bil_le_de af den sta_tisk^e henholdsvis den dy_na_mis_k^e in_struk_tionsfor_de_ling^. Det er f.eks. klart, at der vil v{re forskel p} anvendelse af "I/O"-in_struk_tioner i programmer, der foretager "I/O" og programmer, der ikke g|r det. N}r programmer til under_s|_gel_se af pa_ra_me_terindkodning skal findes, er det s}ledes vigtigt, at programmerne i en eller anden forstand er repr{sentative for de anvendelsesomr}der, som indkodningen skal have st|rst effekt p}. Det er dog muligt, at denne problemstilling er for enkel, for det er t{nkeligt, at ogs} den programmeringsstil, der anvendes, kan have indflydelse. Da disse afh{ngigheder i denne sammenh{ng kun har relevans for nogle f} s{rligt hyppigt forekommende in_struk_tioner og herunder forekomst med bestemte pa_ra_me_ter_v{r_di_kon_stel_la_tioner, er det imidlertid langt fra givet, at disse afh{ngigheder spiller nogen n{vnev{rdig rolle for de resulterende kandidater. >a4 PROGRAMKLASSER. N}r man taler om programklasse^r, m} man g|re sig klart, hvor_le_des det af_g|_res, om pro_gram_mer er i samme klas_se el_ler ej. For at kun_ne g|_re det_te m} man for det f|r_ste be_stemme ni_veau_et for sammen_lig_nin_gen og der_n{st fast_l{g_ge kri_te_rier for for_skel henholds_vis lig_hed mel_lem pro_gram_mer. Val_get af niveau best}r, lidt mere formelt udtrykt, i at v{l_ge en model hvori m{ng_den af pro_gram_mer kan para_me_tri_se_res med hen_blik p} en under_s|_gel_se af for_skel/lig_hed. Valget af ni_veau, der sam_men_lig_nes p} (@valg af para_me_tri_se_ring@), kan v{re af_g|_rende for, hvor_le_des re_sul_ta_tet af sam_men_lig_nin_gen fal_der ud. Med andre ord kan pro_grammer, der er ens p} et ni_veau af para_me_tri_sering, vi_se sig at v{re for_skel_li_ge p} et an_det, og pro_grammer, der p} et ni_veau er for_skel_lige kan vi_se sig at v{_re ens p} et an_det. Der kan v{re man_ge mu_lig_he_der for mo_del_valg med til_h|ren_de para_me_tri_se_ring. Disse mo_del_ler kan i prak_sis ord_nes ef_ter detal_je_rings_grad med yder_punk_ter_ne: m{ngden af PASCAL80 programmer henholds_vis en total opsplitning af pro_gram_mer ef_ter an_ven_del_se af instruk_tions_para_me_ter_v{r_di_er. (@begge yder_punk_ter er uan_ven_de_li_ge i prak_sis@). Ved overgang fra en mindre til en mere detaljeret model vil jeg ved fu_sion^ for_st}, at pro_gram_mer, der f|r over_gan_gen var for_skel_li_ge, bli_ver ens, og ved dif_fu_sion^ vil jeg for_st}, at pro_gram_mer, der f|r over_gan_gen var ens, bli_ver for_skel_li_ge. Neden_st}_en_de fi_gur illu_stre_rer begre_ber_ne p} nog_le til_f{l_digt valg_te ni_veau_er. >ne 20 >in 4 >ti 10 repr{sentationsniveau >ti 20 ! >sp0 in_struk_tionsniveau@@!@@@@@@@@@@@o@@o@@o@@o >in 20 ! >sp0 ! >in-20 passagemellemsprog@@!@@@@@@@@o@@o@@o@@o >in 20 ! >sp0 ! >in-20 sprogkomponentniveau!@@@@@o@@o@@o@@o >in 20 ! >sp0 ! >in-20 sprogniveau@@@@@@@@@!@@o@@o@@o@@o >in 20 ! >sp0 ! >in-20 -------------------+----------------> program >in 39 klasser >in-39 >fg Klassefu_sion/klassediffu_sion >in-4 Diffu_sion m} for_ventes, og hvis de enkelte para_me_tre er kor_re_le_rede (@i for_bin_del_se med senere detal_je_ring af mo_del_len@), kan fu_sion og_s} fore_kom_me. Ved unders|gelsen af om programunderlaget er funk_tions- og/eller per_son_af_h{n_gigt, vil ud_gangs_punk_tet v{_re pro_gram_m|_rens valg af sprog_li_ge kon_struk_tio_ner, der i en sammen_s{t_ning kan l|_se de funktio_nel_le krav, der er stil_let. For_skel/lig_hed mel_lem pro_gram_mer_ne ta_ger alt_s} sit ud_gangs_punkt i anven_del_sen af sprog_li_ge kom_po_nen_ter (@pro_gram_mets sprog_pro_fil^@), i en eller anden fast_lagt detal_je_rings_grad. Set i lyset af fu_sion/dif_fu_sion vil en sprog_pro_fil sammen_lig_ning dog ik_ke v{re til_str{k_ke_lig til at af_g|_re, om pro_gram_mer an_ven_der de hyp_pigst fore_kom_men_de para_me_ter_v{r_di_kon_stel_la_tioner ens eller for_skel_ligt. Model_len der sam_men_lig_nes i m} v{_re me_re de_tal_je_ret, dvs. t{t_te_re p} den mo_del, hvori re_sul_ta_terne skal an_ven_des. En sammen_lig_ning p} grund_lag af pro_gram_mers sta_tiske an_ven_del_se af de enkel_te in_struk_tio_n^er er bed_re. Denne gi_ver en mo_del, der er til at arbej_de med, og para_me_tri_se_rin_gen er ukor_re_leret i rela_tion til en yder_lige_re de_tal_je_ring af model_len. Det skal bem{rkes, at programmers sprog_pro_fil^_er kan have inter_esse af an_dre grunde end program_grup_pe_rin_ger: - Med kend_skab til pro_grammers sprog_pro_fil og til sprog_kom_po_menters oms{t_ning til ko_de, er der mu_ligt at af_d{k_ke se_kven_ser af (@eller kob_lin_ger mel_lem@) instruk_tioner, der med for_del kan ind_ko_des. - Ved sprogre_vi_sio_ner er det mu_ligt at for_ud_si_ge ind_virk_nin_gen p} alle_rede fore_tag_ne se_kvens- og para_me_ter_ind_kod_nin_ger. Hvis fu_sion/dif_fu_sion mellem sprog_kompo_nent_ni_veau_et og instruk_tions_ni_veau_et er fuldt af_d{k_ket, kan det ved pro_gram_me_ring af nye sy_ste_mer v{re lette_re at under_s|ge, om der er ta_le om en ny program_klas_se (@evt. med krav til nye ind_kod_nin_ger@) eller ej. Programmers sprogprofiler kan op_sam_les b}de sta_tisk og dy_na_misk. Andre under_s|_gel_ser ((Knu71) for FORTRAN og (Der74) for BCPL) viser stor sammen_h{ng mel_lem pro_gram_mers dy_na_mis_ke og statis_ke pro_gram_pro_filer, s} der er god grund til at tro, at det_te og_s} g{l_der for PASCAL80 p} RC3502. Jeg vil i det f|l_gen_de ikke kom_me yder_li_ge_re ind p} pro_gram_mers sprog_pro_fi_ler, men over_lade det_te em_ne til vi_de_re stu_di_er. >a3 PROGRAMMERINGSSPROGET. Det er klart, at programmerings_sprog^et kan have indflydelse p}, hvilke kandidater, der skal udv{lges til pa_ra_me_terindkodning. Ved at se p} unders|gelser foretaget p} forskellige sprog, FORTRAN (@Knu71@), COBOL (@Sal75@), XPL (@Ale75@), SAL (@Tan78@), BCPL (@Der74@) viser det sig s}ledes, at der er markante forskelle i programprofiler specielt mellem procedure- og ikke-procedureorienterede sprog, men der er ingen unders|gelser der har fastsl}et, hvordan sprogdesign h{nger sammen med programprofiler - endsige med in_struk_tionsanvendelsen. Der eksisterer kun et systemsprog, PASCAL80^, til RC3502^. Dette betyder, at kandidater til pa_ra_me_terindkodning i RC3502 ikke p}virkes af forskellige sprog, med deraf f|lgende eventuelle forskellige in_struk_tionsanvendelser. Ved sprog{n_drin_g^er kan fornyede kandidatunders|gelser v{re n|dvendige med mindre, der er af_d{k_ket en sam_men_h{ng mel_lem sprog_kom_po_nen_ter og kan_di_da_ter, s} virk_nin_gen af sprog_{n_drin_ger evt. kan for_ud_si_ges. Det er v{rd at n{vne, at den indflydelse som sprogdesignet kan have p} en kandidatudv{lgelse er en v{sentlig }rsag til overhovedet at foretage analyser af in_struk_tionsopsamlinger fra RC3502 programmer, idet man ellers kunne overf|re de resultater, som andre har fundet, direkte til RC3502 programmer. >a3 DET BASALE SYSTEM. Det basale system kan have indflydelse p} kandidater til pa_ra_me_terindkodning p} flere m}der: - Det er programmeret i PASCAL80^ og indg}r som s}dan i det, der i afsnit 4.3.1 kaldtes programunderlaget, og vil blive behandlet herunder. - Det basale systems struktur kan t{nkes at p}virke in_struk_tionsanvendelsen. Adresseringspa_ra_me_terv{rdier kan f.@eks. p}virkes af den lager_til_de_ling, der anvendes. Her t{nkes specielt p} adressering relativt til staktoppen - f.@eks. "REVSA <displacement>" (@M\L81@) - hvorimod adresseparametre er uinteressante, fordi koden er flytbar og adres_se^r f|rst till{gges v{rdier p} ind_l{s_ningstidspunktet (@el_ler ved "crosslink_ing"@). Den dynamiske in_struk_tionshyppighed vil sikkert v{re ret afh{ngig af, hvilke in_struk_tioner der indg}r i "monitor dummy-loop", uden at det i sig selv m} f} indflydelse p} valget af kandidater. - I lighed med sprog kan det basale system bruges p} forskellig vis. Det er f.@eks. uforudsigeligt, hvordan prioriteringssystemet for proces in_kar_na_tioners afvikling vil blive brugt. Denne variationsmulighed i anvendelsen f}r specielt betydning for den dynamiske opsamling. For s} vidt at det basale system for RC3502 er fastlagt, vil de to sidts_n{vn_te punkter n{vnt ovenfor stort set ikke indg} som komponenter, der p}virker kandidatanalysen. Dette skyldes, dels at nogle af p}virkningerne med det basale systems fastl{ggelse bliver konstante, dels at andre af p}virkningerne kun ber|rer den dynamiske opsamling, og det er for pa_ra_me_terindkodningen specielt den statiske opsamling, der l{gges v{gt p}. Desuden vil den dynamiske p}virkning indg} som en del af den dynamiske analyse af in_struk_tionsanvendelser. Hvad ang}r det f|rste af ovenst}ende punkter, vil det basale system indg} som et led i program_un_der_s|_gelserne. Det skal bem{rkes at {ndringer i det basale system kan medf|re, at der b|r foretages nye op_sam_lin_ger af statis_tisk mate_ria_le. >a3 MATERIEL STRUKTUR. I lighed med det basale system, kan ma_te_ri_ellets struk_tur have betydning for in_struk_tionsanvendelsen. Dels er der i in_struk_tionss{ttet in_struk_tioner, der direkte underst|tter ma_teri_ellets struk_tur, f.eks register_s{ts manipulationer, dels kan der i forbindelse med f.eks. "I/O" ske det, at enkelte in_struk_tioner indg}r hver gang, der skal s{ttes omgivelser op til "I/O" in_struk_tioner, uden at disse in_struk_tioner ellers direkte afspejler en ma_te_ri_el betinget funktion. Som for det basale system g{lder det for mate_riellets struk_tur, at den er en konstant p}virkning, der ikke bliver behandlet yderligere i forbindelse med disse unders|gelser; men {ndringer i ma_te_riel_let kan medf|re, at der skal foretages nye opsamlinger. >a3 KODEGENERERINGEN. Det er klart, at over_s{t_terens kode_gene_rering^ har indflydelse p} in_struk_tionsanvendelsen. Jeg vil imidlertid g} ud fra, at den genererede kode er den n|dvendige og optimale, hvad ang}r plads- og tidsforbrug p} grundlag af det basale in_struk_tionss{t. Under arbejdet med at finde kandidater, vil over_s{t_teren v{re en konstant komponent, og de indkodnings{ndringer, der bliver indf|rt, vil hver is{r bevirke en opsplitning af en enkelt in_struk_tion^s hyppighed i to in_struk_tioner, hvis samlede hyppighed er den samme som den oprindelige in_struk_tions hyppighed var f|r indkodningen. Der er alts} ingen sideeffekter, der kan p}virke andre kandidaters hyppigheder og dermed ingen grund til fornyede unders|gelser ved {ndringer i forbindelse med pa_ra_me_terindkodning. P} den anden side kan {ndringer i kodegenereringen derudover f} indflydelse p} kan_di_dat_valg^, og det er her n|dvendigt i hvert enkelt tilf{lde at overveje, om en {ndring kan fjerne grund_laget for en pa_ra_me_terindkodning. Et eksempel kan belyse dette. >ex Indkodningsinterferens^. f|lgende kode er produceret af over_s{t_teren: >in4 RECHW 2 ( "retrieve constant" 2 ) >sp0 ADD >in-4 Sekvensen >in4 RECHW <a> ( "retrieve constant" <a> ) >sp0 ADD >in-4 viser sig m}ske generelt at forekomme s} hyppigt, at der er basis for at indf|re in_struk_tionen >in4 ADDCONST "a" >in-4 Lad os antage, at in_struk_tionen >in4 RECHW 1 ( "retrieve constant" 1 ) >in-4 er blevet pa_ra_me_terindkodet til >in4 RECONE >in-4 Desuden viser det sig, at sekvensen >in4 RECONE >sp0 ADD >in-4 med fordel kan sekvensindkodes til >in 4 ADDONE >in-4 Vi har alts} f|lgende nye in_struk_tioner >in4 RECONE >sp0 ADDCONST <a> >sp0 ADDONE >in-4 Situationen kan nu meget vel v{re den, at begrundelsen for at pa_ra_me_terindkode RECONE falder bort med indf|relsen af ADDONE, hvis forekomsten af RECHW 1 uden efterf|lgende ADD er sj{lden. Det skal bem{rkes, at pa_ra_me_terindkodningen kan have en uheldig indvirkning p} sekvensindkodninger. I det foreg}ende eksempel endte vi op med at fjerne RECONE igen. Da ADDONE er en delm{ngde af ADDCONST "a" kunne det v{re tilf{ldet, at tilf|jelsen ADDCONST "a" var tilstr{kkelig, idet indkodning af andre kandidater ville give st|rre effekt end udsplitningen i ADDCONST <a> (@a<>1@) og ADDONE. Omvendt kan sekvens_indkodning f|r para_meter_ind_kod_ning v{re uhel_dig. Hvis sekvens_ind_kod_ningen ADDONE er indf|rt, kan det be_ty_de, at RECONE ikke ind_f|res til trods for, at plads_be_sparel_sen ved at v{l_ge RECONE uden ADDONE kunne v{_re st|r_re. Eksemplet viser ogs}, at der er en risiko for, at en mere generel sekvens ikke opdages som kandidat. Dette ville v{re tilf{ldet hvis ADDCONST hvor (@a<>1@) ikke var hyppig nok til at v{re kandidat, men dog hyppig nok til at sekvensindkodningen ADDCONST "a" (@for alle a@) er at foretr{kke frem for kun at tilf|je ADDONE. Alt i alt viser ovenst}ende, at sk|nt pa_ra_me_terindkodning set isoleret i forbindelse med kode_ge_ne_rering ikke volder problemer, s} er der al mulig grund til omtanke i sam_men_h{ng med se_kvens_ind_kod_ning. >a2 STATISKE OG DYNAMISKE OPSAMLINGSMETODER. Der findes i litteraturen mange eksempler p} statiske og dynamiske opsamlingsmetoder. Opsamlinger af den sta_tisk^e for_de_ling af in_struk_tions_hyppighed^_er volder ikke de store problemer og vil f.eks. kunne bygges sammen med over_s{t_terens kodegenerering. Der er ingen usikkerhed introduceret af m}leforstyrrelser, s} det er enkelt at lade opsamlingen v{re dikteret af forskellige kriterier (@f.eks. fastl{ggelse af pa_ra_me_terv{rdiforekomster@). Det er straks mere problematisk at foretage dynami_sk^e m}linger. Resultaterne vil v{re dataafh{ngige, og hvis m}lingerne g|res mere differentierede, for|ges risikoen for at selve m}lingen forstyrrer resultatet. De dynamiske m}linger, der er eksempler p} i litteraturen er da ogs} meget simple, og der er i stedet etableret en sammenh{ng mellem den statiske og den dynamiske opsamling. Den hyppigst anvendte metode er tilsyneladende "blok-t{l_ling^s-me_to_den" (@Der74, Knu71@) der vil blive pr{senteret herunder. >a3 BLOK-T[LLINGS-METODEN. Metoden bygger p}, at et oversat program best}r af en r{kke fundamen_tal_blok^_ke (@p} in_struk_tionsniveau@) med den egenskab at samtlige in_struk_tion^er i en fundamentalblok udf|res lige mange gange. Det er muligt statisk at afd{kke denne blokstruktur (@f.eks. i over_s{t_teren@). Metoden best}r ganske enkelt i, at der i hver fundamentalblok inds{ttes in_struk_tioner, der identificerer blokken og t{ller op hver gang blokken udf|res. Med en tilsvarende identifikation og med disse t{llere kendt kan det statiske opsamlingsprogram (@f.eks. over_s{t_teren@) foretage alle mulige statiske analyser, hvorefter den dynamiske analyse blot best}r i at gange passende op med de opsamlede t{llere. >a4 DISKUSSION AF BLOKT[LLINGSMETODEN. Metodens mest oplagte fordel er at har man f|rst en gang foretaget den dynamiske opsamling af t{llere, s} vil der til enhver nok s} differentieret statisk opsamling straks kunne produceres den tilh|rende dynamiske opsamling. M}leforstyrrelserne i den dynamiske opsamling er konstante, og det ekstra bi_drag, der introduceres af m}lingerne er ret beskedent. (@Der74@) vurderer metoden anvendt i BCPL til at p}virke programafviklingen med mindre end en faktor 3 . I et tidstro system m} man dog v{re opm{rksom p}, at resultatet kan v{re forvr{nget af m}lingen. Hvis in_struk_tions_s{ttet er udvidet med en speciel in_struk_tion der foretager iden_ti_fika_tion og opt{l_ling, kan program_afviklings_hastigheden holdes noget mere tids_tro. (@Der74@) angiver en hastighedsreducering p} 30-50 % i de BCPL unders|gelser, der er foretaget under s}danne omst{n_dig_heder. Metoden har den ulempe, at det er n|dvendigt at gen_over_s{t_te de programmer, der |nskes m}lt, og desuden vil den producerede kode fylde mere. Hvis l{ng_den af den gennemsnitlige fundamentalblok fra BCPL p} ca. 5 in_struk_tioner kan overf|res og opt{llingen best}r af 4 in_struk_tioner der fylder 13 oktetter, s} n{rmer stigningen i lagerforbruget sig de 100 %. Dette kan i visse tilf{lde medf|re, at forskellige fysiske begr{nsninger overskrides (@f.eks. lagerkapacitet@), s} den dynamiske m}ling er umulig. Specialin_struk_tioner til opt{llingen kan ogs} bringe det ekstra pladsforbrug i koden ned. (@Der74@) angiver s}ledes et |get lagerforbrug p} 30-50 % ved unders|gelser af BCPL under s}danne omst{ndigheder. >a3 MATERIEL SNUSER. Det er muligt, at konstruere ma_te_ri_el, der kan tilkobles mi_kromaskinen og parallelt med hent_ning af instruk_tion^er_ne lave opsam_ling over de dynamiske anvendelser. Et s}dant materiel kan afh{ngig af in_struk_tionen anvendes til dynamisk opsamling af in_struk_tionshyppigheder med forskellige betingelser p} opsamlingen. Det opsamlede materiale skal herefter kunne be_ar_bej_des med henblik p} statistiske analyser. Metoden har den oplagte fordel, at programafviklingen ikke forstyrres, samt at et k|rende program kan uds{ttes for statistikopsamling uden at programmerne skal gen_over_s{t_tes. Det er til geng{ld vanskeligt at f} en m}ling fordelt p} de indg}ende proceser, og det vanskeligg|r muligheden for at sammenholde de dynamiske opsamlinger med de statiske. Metoden kr{ver som n{vnt materieludvikling, og det er uden for mine muligheder at skaffe et s}dant udstyr. >a3 OPSAMLING FRA MIKROPROGRAMMET. RC3502^ er mi_kroprogrammerbar^, og en opsam_ling^ foretaget af mi_kroprogrammet er derfor en mulighed. Det er ikke umiddelbart klart, hvor mange opsamlingskriterier der skal kunne styre opsamlingen; men for at knytte forbindelsen til den statiske opsamling, er det n|dvendigt at kunne styre opsamlingen p} proces-in_kar_na_tions-niveau. I lighed med blokt{llingsmetoden introduceres en {ndring i afviklingshastigheden. Da der er tale om et tidstro system, er det vigtigt at holde denne forsinkelse nede p} et minimum. Endvidere er det vigtigt at kontrollere, at forsinkelsen ikke influerer 'drastisk' p} proces afviklingen. En s}dan kontrol kan evt. f}s ved at sammenholde "I/O"-af_vik_lingen med og uden opsamling; men med |vrige forhold konstante. Endvidere kan man sammenholde opsamlinger fra den samme proces, hvor der kun er varieret p} antallet af |vrige proceser, der foretages opsamling fra. S}danne opsamlinger skal helst v{re sammenfaldende. Metodens styrke ligger i |vrigt f|rst og fremmest i at opsamlingen kan foretages uden gen_over_s{t_tel_ser. Der skal derimod foretages en mi_kro_pro_gram_ud_skift_ning^ og en sikring af lagerkapacitet til opsamlingen. Dette kan i en RC3502^ g|res meget nemt. >a3 \JEBILKSBILLEDER. Opsamlingen af in_struk_tionshyppigheder under diverse betingelser kan foretages, som |jebliks_bil_lede^r, ved med 'j{vne' mellemrum at lade en proces opsam_le in_struk_tionshyppigheder, under de anf|rte be_tin_gelser, ved at se p} den in_struk_tion, som in_struk_tionspegepinden udpeger ( for RC3502 er der en pr. registers{t ), og s} opt{lle p} basis heraf. Fordelen er, at m}leforstyrrelsen kan formindskes ved at lade tidsrummene mellem opsamlingerne v{re l{ngere, og desuden kan en |get n|jagtighed opn}s ved at opsamle over en l{ngere periode. Der er imidlertid et par problemer forbundet med metoden: - In_struk_tioner har forskellige udf|relsestider, s} hvis processen, der opsamler in_struk_tionshyppigheder, aktiveres tidsafh{ngigt, skal resultatet korrigeres i forhold til in_struk_tionens udf|relsestid. Dette er f.eks. ikke let ved "I/O"-blokin_struk_tioner, hvis samlede in_struk_tionstid er dataafh{ngig. Opsamlingen b|r derfor kobles til hent_ning af in_struk_tio_ner, hvis dette er muligt ( dette er ikke tilf{ldet i RC3502@). - Opsamlingstidspunkterne skal v{re uafh{ngige af procesafviklingen i |vrigt, s} man ikke risikerer en sk{v fordeling f.eks. fordi opsamlingen kunne v{re korreleret med bestemte basal-sy_stem-opgaver eller bestemte dele af en l|kke. En opsamling, der udf|res for hver N'te in_struk_tions hent_ning, virker i den forbindelse rimelig; men antal_let af udf|rte in_struk_tioner er ikke program_til_g{ngelig i en RC3502. - Metoden er ik_ke ek_sakt. Det kan v{re sv{rt at afg|re hvilke fejlgr{nser en m}ling er beh{ftet med, hhv. hvor l{n_ge, der skal op_sam_les. >a2 STATISKE OG DYNAMISKE INSTRUKTIONSHYPPIGHEDER. Sammenh{ngen mellem et programs statisk^e udseende og den dyna_misk^e afvikling er ikke umiddelbar indlysende. I det hele taget er den dynamiske afvikling i et multiproces-sy_stem^ alt andet end overskuelig. Jeg vil i det f|lgende se lidt n{rmere p} disse emner. I afsnit 4.4.1 blev blok-t{lling^s_metoden pr{senteret. Med denne som udgangspunkt kan den statiske og den dynamiske in_struk_tionshyppighed formaliseres: Lad in_struk_tionerne v{re betegnet Ij, j c M hvor M = (m{ngden af in_struk_tionskodev{rdier). Lad an_tal_let af funda_men_tal_blok_ke v{re B. Lad Sj v{re den statiske forekomst af in_struk_tionen Ij og Sjk v{re den statiske forekomst af in_struk_tionen Ij i den k'te fundamentalblok (@jvf. 4.4.1@). Lad tilsvarende den dynamiske forekomst af in_struk_tionen Ij, hhv. totalt og i den k'te fundamentalblok v{re: Dj hhv Djk Vi har da: B Sj = Sjk k=1 Lad nu Nk v{re det antal gange den k'te fundamentalblok udf|res, s} g{lder: B B Dj = Djk = (Nk * Sjk) k=1 k=1 Med hensyn til pa_ra_me_teranvendelse g{lder der videre: Det er muligt at nummerere alle kombinationer af pa_ra_me_terv{rdier h|rende til en in_struk_tion Ij. Lad l symbolisere denne nummerering i det f|lgende, hvor 0 = l = pa_ra_me_terkombinationsantallet for Ij = P Vi definerer Sjkl hhv. Djkl som antallet af forekomster af in_struk_tionen Ij i den k'te fundamentalblok med pa_ra_me_terv{rdikonstellationen l i det statiske hhv. det dynamiske tilf{lde. Vi har >ne5 P Sjk =@@@@@Sjkl l=0 henholdsvis >ne5 P P Djk =@@@@@Djkl = Nk *@@@@@Sjkl l=0 l=0 Indf|res dette, f}s: >ne5 B@@@@@@@@@B@@@@@P Sj =@@@@@Sjk =@@@@@@@@@@@Sjkl@@@@@@@og k=1@@@@@@@k=1@@@l=0 >ne5 B@@@@@@@@@@@@@@B@@@@@@@@P Dj =@@@@@Nk * Sjk =@@@@@Nk *@@@@@Sjkl k=1@@@@@@@@@@@@k=1@@@@@@l=0 N}r det drejer sig om at v{lge kandidater til pa_ra_me_terindkodning, er det som tidligere omtalt i afsnit 4.4.1 de hyppigt forekommende para_me_ter_v{rdier (@eller evt. klasser af pa_ra_me_terv{rdier@) i den statiske opsamling, der har interesse. Dette vil i den indf|rte terminologi sige, at interessen samler sig om: >ne5 B Sjl =@@@@@Sjkl k=0 eller eventuelt om summen over klasser af kombinationer. Lad f.eks. U v{re en s}dan klasse. Det drejer sig s} om >ne5 B >ti5 Sjl =@@@@@@@@@@Sjkl >ti1 l@U@@@@@@@l@U@ k=0 Skal man vurdere effekten af en pa_ra_me_terindkodning med henblik p} en hastighedsgevinst, skal man have viden om >ne5 B B >ti5 Djl =@@@@@@@@@@Djkl = @@@@@@@@@(Nk * Sjkl) >ti1 l@U@@@@@@@l@U@ k=0@@@@@@@@@l@U@@k=0 En s}dan vurdering er alts} kun mulig med kendskab til Nm m=0,...,B. Tilsvarende, hvis hastig_heds_for_|_gel_sen prioriteres h|jt, vil et kendskab til Nm, m@=@0,...,B, ogs} danne grundlaget for kandidat_udv{l_gelsen. Det er imidlertid et sp|rgsm}l, hvor stabil den dynamiske statistik er. De optalte faktorer Nm, m = 0,...,B for fundamentalblokkene har sprogligt set sammenh{ng med antallet af kald af procedurer / funktioner, antal gange repeterende konstruktioner udf|res (@f.eks. i FOR- og REPEAT-s{tninger@). Disse antal bliver igen for det enkelte program ofte bestemt af omgivelserne og dynamiske m}linger p} det enkelte program kan derfor forventes at variere inden for ret vide gr{nser. Denne variation kan blive endnu mere udpr{get n}r der er tale om forskellige programmer, der f.eks tilh|rer samme programklasse. P} baggrund af disse overvejelser finder jeg, at det kan v{re direkte fejlagtigt at basere sig p} ind_vik_lede dynamiske opsamlingsmetoder. Der i vir_ke_lig_heden er usikre og m}ske med fordel kan er_stat_tes af estimeringer i forbindelse med efterkontrol. >a1 PARAMETERINDKODNING I RC3502. Parameterindkodning^ens tre faser best}r i kandidatudv{lg_el_se^, udvidelse af in_struk_tionss{ttet med de udvalgte indkodning^er og efterkon_trol^ af effekten sammenholdt med den forventede effekt. >a2 KANDIDATUDV[LGELSEN. Det har i det foreg}ende v{ret diskutteret, om der fandtes en r{kke programklasser med hver deres kandidater. Dette vil blive unders|gt for en r{kke af de typiske anvendelser af RC3502^. Fundamentet herfor er en kandidatudv{lgelse for det enkelte program. Jeg vil i det f|lgende beskrive og begrunde den metode, der er valgt. >a3 OPSAMLING I RC3502. Hovedv{gten er lagt p} den statisk^e opsamling, da det is{r er lagerforbrug, der kan reduceres. Det skal v{re muligt at opsamle oplysninger om et program for: - in_struk_tionshyppigheder - enkelte in_struk_tioner med specificerede pa_ra_me_ter_v{r_di_om_r}der. Da pa_ra_me_terindkodningen ogs} har en vis, omend beskeden, virkning p} programafviklingshastigheden, foretages der ogs} en dynamisk^ opsamling. Da den dynamiske opsamling m} forventes at v{re med meget stor usikkerhedsmargen og da komplicerede opsamlingsmetoder for|ger risikoen for at p}virke resultatet med selve m}lingen, er der kun planlagt en simpel dynamisk opsamling for in_struk_tionshyppigheder. I vurderingen af den effekt, en pa_ra_me_terindkodning kan have, bruges en antagelse om at fordelingen p} pa_ra_me_terv{rdiomr}der for den enkelte in_struk_tion^, observeret i det statiske tilf{lde ogs} g{l_der for den dy_na_mis_ke af_vik_ling. Antal_let af fore_kom_ster i et para_me_ter_v{r_di_om_r}_de, vil alt_s} billed_ligt talt bli_ve proji_ceret op i an_tal_let af fore_kom_ster ved den dynamiske afvikling (@se figur@3@) >ne 22 Statisk Dynamisk --- I I --- IXI --- IXI I I IXI Djl Dj I I IXI --- IXI IXI --- Sj Sjl IXI I I IXI I I --- I I I I I I ------------------------------------------ Ij Ij >fg Proportionalitetsantagelsen. Denne antagelse om proportionali_tet^ er meget grov. Med den terminologi, der blev indf|rt i kapitel 4 kan den udtrykkes ved: >ne5 Sjl Djl Sj Sjl --- = --- <=> -- = --- Sj Dj Dj Djl Dette vil v{re tilf{ldet hvis N1@=@N2@=@....@=NB En s}dan betingelse er dog ikke en n|dvendig betingelse for at proportionaliteten kan g{lde. Jeg vil lade et par konstruerede eksempler vise at antagelsen kan v{re grov. >ex Analyse af proportionalitet. Der er 3 fundamentalblokke. For in_struk_tionen Ij er der fire pa_ra_me_terv{rdiomr}der. Den statiske op_sam_ling giver >ne11 ------------------------------------------- k j.l I Sjk0 I Sjk1 I Sjk2 I Sjk3 I Sjk I ------------------------------------------- blok1 I 5 I 2 I 3 I 0 I 10 I ------------------------------------------- blok2 I 1 I 4 I 1 I 2 I 8 I ------------------------------------------- blok3 I 0 I 2 I 6 I 0 I 8 I ------------------------------------------- sum I 6 I 8 I 10 I 2 I 26 I ------------------------------------------- Med (N1,N2,N3) = (1,5,2) i det dynamiske tilf{lde f}s: >ne11 ------------------------------------------- k j.l I Sjk0 I Sjk1 I Sjk2 I Sjk3 I Sjk I ------------------------------------------- blok1 I 5 I 2 I 3 I 0 I 10 I ------------------------------------------- blok2 I 5 I 20 I 5 I 10 I 40 I ------------------------------------------- blok3 I 0 I 4 I 12 I 0 I 16 I ------------------------------------------- sum I 10 I 26 I 20 I 10 I 66 I ------------------------------------------- Vi har >ne3 Dj 66 -- = -- Sj 26 henholdsvis >ne3 Djl 10 26 20 10 --- for l=1,2,3,4 giver -- , -- , -- , -- Sjl 6 8 10 2 Antagelsen om proportionalitet g{lder alts} ikke i dette tilf{lde. >ex Konstrueret opsamlingseksempel. Der er 2 fundamentalblokke. >sp0 For in_struk_tionen Ij er der 4 pa_ra_me_terv{rdi_inter_val_kombinationer. >sp0 Den statiske opsamling giver >ne11 ------------------------------------------- k j.l I Sjk0 I Sjk1 I Sjk2 I Sjk3 I Sjk I ------------------------------------------- blok1 I 5 I 4 I 1 I 0 I 10 I ------------------------------------------- blok2 I 1 I 4 I 9 I 2 I 16 I ------------------------------------------- sum I 6 I 8 I 10 I 2 I 26 I ------------------------------------------- Med (N1,N2) = (5,1) f}s f|lgende dynamiske statistik: >ne11 ------------------------------------------- k j.l I Sjk0 I Sjk1 I Sjk2 I Sjk3 I Sjk I ------------------------------------------- blok1 I 25 I 20 I 5 I 0 I 50 I ------------------------------------------- blok2 I 1 I 4 I 9 I 2 I 16 I ------------------------------------------- sum I 26 I 24 I 14 I 2 I 66 I ------------------------------------------- >ne3 Dj 66 -- = -- ( som i forrige eksempel ) Sj 26 >ne3 Djl 26 24 14 2 --- for l = 1,2,3,4 giver -- , -- , -- , - Sjl 6 8 10 2 Heller ikke i dette eksempel er der proportionalitet. De to eksempler har den egenskab at Dj , Sj , Sj0 , Sj1 , Sj2 , Sj3 har de samme v{rdier i begge eksempler. Under antagelse om proportionalitet ville man forvente at ogs} Dj0 , Dj1 , Dj2 , Dj3 er ens; men dette er ikke tilf{ldet. Den statiske opsam_ling vil udpege Ij2 som emne for en ny in_struk_tion, hvorimod Ij1 hhv. Ij0 vil v{re kandidaterne fra eksemplerne i den dynamiske statistiks kandidatliste. Der beh|ver alts} ikke at v{re nogen proportionalitet, og selv sammenfaldende statiske m}linger og ens dynamiske totalv{rdier kan have forskellige kandidater. Det skal ogs} bem{rkes, at hvis (@N1,N2,N3@) i det f|rste eksempel f.eks havde v{ret (@5,1,1@) s} ville det samme program med en anden afvikling ( (@N1,N2,N3@) er f.eks. dataafh{ngige@) give en helt anden kandidat end f|r, nemlig Ij0. Det sidste skal n{vnes blot for at understrege den usikkerhed, den dynamiske opsamling er beh{ftet med. Jeg bem{rkede, at hvis N1 = N2 = .... = NB, vil der v{re proportionalitet. Dette vil sige at alle fundamentalblokke bliver udf|rt lige mange gange. Dette er ikke s} interessant i praksis (@det skal bem{rkes at, N1 = N2 = .... = NB = 1 er resultatet af den statiske opsamling@). Det er derimod mere interessant at proportionaliteten ogs} vil v{re sikret hvis der g{lder >ne3 Sjkl Sjl ---- = --- Sjk Sj Dette betyder, at hyppigheden for pa_ra_me_terv{r_di_om_r}_de_forekomsten inden for en fundamentalblok f|lger hyppigheden for selve in_struk_tionen. Dette var klart ikke tilf{ldet i de to eksempler; men antagelsen kan dog v{re brug_bar i prak_sis. At ovenst}ende betingelse er tilstr{kkelig til at give proportionalitet kan indses p} f|lgende m}de: Vi har >ne3 Sjkl Sjl ---- = --- for k = 1,2,....,B og l = 0,1....,P Sjk Sj >ne3 Sjkl Sjl => K = ---- = --- Sjk Sj => K * Sjk = Sjkl >ne3 Djl Ser vi p} @@---@@ f}s Dj >ne12 B B Nk * Sjkl Nk * ( K * Sjk ) Djl k=1 k=1 --- = ------------- = -------------------- Dj B B Nk * Sjk Nk * Sjk k=1 k=1 Sjl = K = --- Sj hvilket netop giver betingelsen for proportionalitet. Med kendskab til j, Dj samt Sj0, Sj1, .... SjP og antagelse om proportionalitet kan Dj0, Dj1, ... DjP estimeres og effekten af en pa_ra_me_terindkodning kan herefter forudsiges. Der er selvf|lgelig stor usikkerhed p} denne effektforudsigelse. Der er dog en r{kke forhold, der taler for denne metode: - Der er tale om at finde nogle f} kandidater. Det er alts} nok, hvis antagelsen holder for en lille del af in_struk_tionerne. - Muligvis vil r{kkef|lgen i den prioriterede kandidatliste i virkeligheden v{re lidt forkert. Der skal alts} blot en st|rre liste til, for at v{re sikke p} at have de 'rigtige' kandidater med, end det var n|d_ven_digt med et fuldt kendskab til den dynamiske fordeling p} para_me_ter_v{rdiomr}der. - Ved efterkontrol best}ende i, at en dynamisk statistik opsamles, efter at en eller flere af de f|rste kandidater p} listen er indkodet, kan de valgte kandidater vurderes ved at de opsamlede hyppigheder for de nye in_struk_tioner sammenholdes med de forventede ud fra proportionalitets antagelsen. Hvis den opsamlede hyppighed er lig med eller st|r_re end det forventede, er kandidatvalget vellykket. Hvis det er mindre, vurderes om en af de |vrige kandidater kan forekomme hyppigere. Sk|nt antagelsen om proportionalitet forekommer lidt stram, vil metoden ved f} fors|g med efterkontrol indkredse de (@m}ske 10 - 20@) kandidater, der skal bruges. - Det er ikke s} v{sentligt, at det er de rigtige kandidater effektivitetsm{ssigt, der udv{lges, fordi det f|rst og fremmest er pladsbesparelse, der er m}let. - Den dynamiske opsamling kan forventes at v{re ret usikker (@en stor spredning@), og specielt er den dataafh{ngig. Kandidatprioriteringen p} dette grundlag m} alts} ikke tages mere h|jtidelig end den spredning, der er i opsam_lin_gen, berettiger til. Den usikkerhed der er i kandidat udv{lgelsen er alts} i det dynamiske tilf{lde allerede stor, og den valgte metode virker derfor tilstr{kkelig tillokkende at fors|ge sig med. >a3 PROGRAMKLASSER. Niveauet for unders|gelsen af program_klas_se^r er pro_gram_mers sta_tis_ke instruk_tions_anven_del_se. Der er fle_re grun_de til det_te valg. - De enkelte instruktion^er er uaf_h{n_gige med hen_syn til parameter_v{rdi_anven_del_se (@dvs. ingen fu_sion af pro_gram_mer ved over_gang til para_me_ter_ni_veau_et@). - Niveauet ligger meget t{t ved parame_ter_v{r_di_niveau_et, hvor sel_ve ind_kod_nin_gen h|_rer hjem_me. Risi_ko_en for diffu_sion er ikke s{r_lig stor. Man_ge para_me_tre vil v{_re fast_lagt som f|l_ge af sy_stem_de_fi_ni_tio_ner/kon_ven_tio_ner, som al_le pro_gram_mer er un_der_lagt. Der er alt_s} god grund til at tro, at en under_s|gel_se p} instruk_tions_niveau_et vil v{re d{k_ken_de. - En unders|gelse p} et niveau svarende til de enkel_te parame_ter_v{rdier , vil v{_re umu_lig at h}nd_te_re, hvor_imod under_s|_gel_sen p} instruk_tions_ni_veau_et er h}nd_ter_bar. - Hvis der er be_ret_ti_get frygt for dif_fu_sion i anven_del_sen af en r{k_ke kan_di_da_ter, kan det_te un_der_s|_ges eks_pli_cit. - Det vil v{_re til_str{k_ke_ligt at under_s|_ge den sta_tis_ke an_ven_del_se med hen_blik p} pro_gram_klas_ser, da ind_kod_nin_gen af para_me_tre har for_mind_sket lager_krav som m}l. Kun ved lige gode statiske kandi_da_ter kan den dy_na_miske in_struk_tions_anven_del_se f} ind_fly_del_se. For at afg|re, om der er forskel p} de programmer, der udvikles til at klare de opgaver, som RC3502 er tilt{nkt, m} man f|rst definere hvad det vil sige, at sammenligne programmer, eller rettere, hvorn}r to programmer anses for at v{re ens i deres an_ven_delse af instruk_tio_ner. Programmer er ens hvis: - den relative statiske anvendelse af instruk_tio_ner er den sam_me. Nu er det lidt restriktivt, at forlange en n|jagtig overensstemmelse. Det vil v{re mere rimeligt, at tillade en vis variation p} de enkelte fore_kom_ster. I kapitel@7 pr{_sen_te_res en sta_tis_tisk mo_del til af_test_ning af "hypo_te_sen om ens pro_gram_mer". For at f} en ri_me_lig for_nem_mel_se af ma_te_ria_let, har jeg dog lagt v{gt p} mu_lig_he_den for visuel sam_men_lig_ning af gra_fis_ke repr{sen_tatio_ner af re_sul_ta_ter_ne. Hvis der viser sig flere klasser, m} man finde kandidater til para_me_ter_indkodning inden for hver en_kelt klasse, og skal RC3502 forbedres m}lrettet mod samtlige klasser, m} alle de forskellige klassers top-kandidater medtages. >a2 PARAMETERINDKODNINGEN. Stevenson og Tanenbaum (@Ste79@) skit_se_rer en me_to_de til at fin_de en liste af kan_di_da_t^er, sor_teret ef_ter den plads_re_duk_tion, de kan med_f|_re ved ind_kod_ning. Alle in_struk_tio_ner op_fat_tes som en sam_ling af ok_tet_^ter (@opfattes i grundtal 256. Se (@Wilc80@) vedr|_rende mind_re grund_tal@). Hvis en para_me_ter best}r af f.eks et ord p} 16 bit, be_trag_tes denne som to uaf_h{n_gi_ge ok_tet_ter (@h|j_re og ven_stre ok_tet@). Instruktioner, der har en enkelt ok_tet som para_me_ter^, er tri_vi_elle at ind_pla_ce_re i kandi_dat_lis_ten. Instruktioner, der har to oktetter som para_me_tre kan trans_for_me_res^ til nye in_struk_tio_ner p} tre m}_der: - Den nye instruk_tion dannes af en spe_ci_fik parame_ter_v{r_di. Der op_n}s en plads_be_spa_rel_se p} an_tal fore_kom_ster@*@2@ok_tet_ter. - Den nye instruk_tion dan_nes ved at fast_hol_de en speci_fik v{r_di for f|r_ste para_me_ter og lade an_den para_me_ter va_ri_e_re. Der op_n}s en plads_be_spa_rel_se p} et antal ok_tetter sva_ren_de til det sam_lede antal fore_koms_ter sum_me_ret over anden para_me_ter (@s|jle sum@). - Den nye instruk_tion dannes ved at fasthol_de en spe_ci_fik v{r_di for an_den para_me_ter og lade f|r_ste para_me_ter vari_ere. Der op_n}s en plads_be_spa_rel_se p} et antal ok_tet_ter sva_ren_de til det sam_lede an_tal fore_kom_ster sum_me_ret over f|r_ste para_me_ter (@r{k_ke_sum@). Sorteringen fremkommer da ved at be_trag_te fore_kom_ster op_stil_let i en 256@X@256 kryds_ta_bel med r{k_ke- og s|j_le_sum_mer ud_reg_net, og op_stil_le kan_di_da_ter_ne, der frem_kom_mer ved de to sidst om_tal_te me_to_der, ef_ter fal_den_de s|j_le/r{k_ke_summer. N}r en s|j_le/r{kke er med_ta_get som kan_di_dat tr{k_kes de en_kel_te v{r_di_er i s|j_len/r{k_ken fra s|j_le/r{kke_sum_men. Alle de her frem_kom_ne kan_di_da_ter har en ok_tet som para_me_ter og kan g|_res til gen_stand for yder_lige_re ind_kod_ning som enkelt_para_me_ter instruk_tion og inds{t_tes i kandi_dat_lis_ten. Be_m{rk, at en kandidat, der vide_re_ind_ko_des al_tid vil op_tr{_de l{n_ge_re ne_de p} lis_ten end den kan_di_dat, den stam_mer fra. Instruk_tioner med mere end to oktetter kan trans_for_me_res ef_ter en tilsva_ren_de gene_ra_li_se_ret me_to_de, som anven_des p} in_struk_tio_ner med to para_me_tre. Jeg vil g|re op_m{rk_som p}, at den skit_se_re_de me_to_de ikke helt er i over_ens_stem_mel_se med refe_ren_cen (@Ste79, eksemp_let side 13-14@), der des_v{rre er fejl_be_h{f_tet p} det_te punkt; men jeg tilla_der mig at tro, at oven_st}_en_de er hvad for_fatterne har ment. Der kan heref_ter dannes en total sor_teret kandi_dat_lis_te^. Ud fra denne kan tilf|jel_ser af nye in_struk_tio_ner udf|_res i en grund_tal 256 Huffman kode (@Huf52@), for at sik_re den kor_test mu_lige gen_nem_snitlige in_struk_tions_l{ng_de. I rela_tion til RC3502 er den an_f|r_te me_to_de disku_ta_bel. F|rst og frem_mest fordi op_ga_ven g}r ud p} at til_f|_je plads_be_spa_ren_de instruk_tio_ner (@parame_ter_ind_kod_ning@) med en st|rrel_se p} mi_kro_pro_gram_met fast_lagt s} lil_le, at der kun er plads til me_get f} ind_kod_nin_ger. Dette be_tyder, at Huffman indkod_ning i grund_tal 256 ikke er rele_vant, da der bli_ver f{r_re end 256 instruk_tio_ner totalt. Analyser p} mindre en_he_der end ok_tet_ter (@Wilc80@) har_mo_ne_rer p} den an_den si_de ikke med, at RC3502 ope_re_rer med oktet_ter som mind_ste a_dres_se_en_hed, s} en ind_kod_ning i et mind_re grund_tal vil give af_kod_nings_pro_ble_mer i mi_kro_pro_gram_met. Det er alt_s} n|d_ven_digt at operationskoden ligger p} oktetgr{n_ser i lage_ret. Hvis dette er op_fyldt er der ikke no_get i vejen for, at parame_ter_v{r_di_en kan af_ko_des ud fra ope_ra_tions_ko_den, som det siden vil frem_g} af re_sul_ta_ter_ne. Med hensyn til ned_bryd_nin_gen af instruk_tio_ner i en sam_ling af ok_tet_ter, fin_der jeg det f.eks. uhel_digt at ned_bry_de en para_me_ter p} 16 bit i en ven_stre ok_tet og en h|j_re ok_tet. Be_stem_te v{r_di_fore_kom_ster i h|j_re ok_tet, sva_rer til {kvi_di_stan_te para_me_ter_v{r_di_er med en af_stand p} 256. Denne op_de_ling er absurd , n}r para_me_teren stort set al_tid inde_hol_der en v{r_di, der an_gi_ver en af_stand re_la_tivt til en lager_adres_se^. Bestem_te v{r_di_er af ven_stre ok_tet er mere rele_van_te, idet der s} er ta_le om et in_ter_val i om_r}_det: (venstreoktet)*256<parameter<(venstreoktet+1)*256-1 Den mest natur_lige opfattelse af paramete_ren er f|l_gen_de: PARAMETER = KONSTANT + X, hvor 0 < X < 255 En s}_dan op_fattelse spo_le_res ved op_de_lin_gen i ven_stre hhv. h|j_re ok_tet. N}r kandidatliste^n udformes er det ikke nok alene at tage hen_syn til be_spa_rel_sen. Sor_te_rings_kri_te_riet m} v{_re plads_be_spa_rel_se pr. mi_kro_pro_gram_trin^, da det vi_ser sig, at plad_sen til mi_kro_pro_ram_met er den be_gr{n_sen_de fak_tor. Man skal v{re opm{rksom p}, at instruk_tio_ner p} grund af den fak_tis_ke im_plemen_ta_tion ikke al_tid er uaf_h{n_gi_ge. Men tv{rt_imod kan optr{_de i 'fami_li_er'. Jeg har ta_get disse tre hen_syn i ud_form_nin_gen af kandi_dat_lis_te^n for RC3502^. Se kapi_tel 8 for n{r_me_re de_taljer. Ud over disse bem{rk_ninger vil jeg g|re op_m{rk_som p} at resul_taterne fra (@Ste79@) ikke direk_te kan over_f|_res til RC3502 in_struk_tionss{ttet. Der er f.eks i RC3502 tale om et adresserum udpe_get af 32 bit, men da koden er flytbar vil samtlige parametre, der danner adresse^r, ikke kunne indkodes, da deres v{rdi f|rst bliver fastlagt p} ind_l{s_nings_tid_spunktet. Den slags 5 oktetter, dvs. instruk_tio_ner p} 40 bit, som ikke kan ind_kodes, vil g|_re den nedre gr{nse for den gennemsnitlige in_struk_tionsl{ngde^ st|r_re end an_f|rt af Tanenbaum og Stevenson (@Ste79@). Hvad ang}r pladsbesparelse som m}l, kan kandidaterne, som f|r omtalt, udpe_ges di_rek_te, og effek_ten kan vur_de_res helt pr{_cist. Med hen_syn ef_fek_ti_vi_se_ring af program_afvik_lings_has_tig_he_den er der st|r_re usik_ker_hed p} prioriteringen af kandidaterne, og det vil formodentlig blive n|dvendigt med flere fors|g, f|r de rigtige kandidater er fundet. Det m} formodes, at m{ng_den af til_f|jel_serK p}virer antal fors|g. Det er imidlertid ikke muligt, at forudsige denne sammenh{ng. >a2 EFTERKONTROL. Efterkontrol^len af effekten af pa_ra_me_ter_ind_kod_ning_en har specielt interesse for program^_effek_tivi_tets_for_bed_rin_gen. En fornyet dynamisk opsamling med de ekstra in_struk_tion^er sammenholdt med de forventede tal ud fra en proportionalitetsantagelse, vil for hver enkelt af de K nye in_struk_tioner vise om prioriteringen var rigtig, eller om der kan v{re grundlag for omprioritering. Med M in_struk_tioner oprindelig, vil sammenh{ngen mellem en gammel og en ny in_struk_tion kunne formaliseres p} f|lgende m}de: Lad in_struk_tionen Ij forekommer statisk Sjl gange og dynamisk Djl gange, hvor Djl er estimeret. Den nye in_struk_tion kan hedde In, n@@@L hvor L er defineret ved L = ( x@c@Z I 0 < x < 255 ) MI hvor MI = ( m{ngden af in_struk_tionskodev{rdier ) Fornyede opsamlinger giver nu Sn hhv. Dn. Der vil g{lde, at Sjl@=@Sn Med hensyn til Dn og Djl er der to forskellige situationer: >ti-3 >in4 Dn > Djl Kandidaten er endnu mere effektfuld end antaget. Den skulle m}ske v{re prioriteret h|jere; men da den er medtaget er dette irrelevant. >ti-2 Dn < Djl Kandidaten b|r m}ske prioriteres lavere. Det skal bem{rkes, at da Djl = Dj og Dn < Djl, s} m} Djl - Dn skulle fordeles p} de |vrige P-1 pa_ra_me_terv{rdiintervaller. Lad Dje v{re den n{st st|rste forekomst af in_struk_tionen Ij med en pa_ra_me_terv{rdiinterval kombination. Hvis Dje > Dn vil det umiddelbart v{re fornuftigt at medtage Ije som kandidat i stedet for Ijl. Ellers unders|ges om andre vragede kandidater er estimeret bedre end Dn. I princippet kan alle |vrige intervaller komme p} ta_le hvis Dj Dn < ---- 2 for s} kan et andet interval have "vokset sig stor". Det vil dog v{re for_nuf_tigt at lade den n{st_st|r_ste f} 'chancen' og s} frem_de_les. >in-4 >a1 RC3502 OPSAMLING I PRAKSIS. Opsamlingen af in_struk_tionshyppighed^er for RC3502 er som omtalt foretaget b}de dynamisk og statisk. Den dynamiske opsamling har involveret mi_kroprogram tilf|jelser og udvikling af et opsamlingsprogram. Den statiske opsamling er koblet sammen med over_s{t_terens passage 6, der bl.a. tager sig af "assemblering" fra symbolsk "base instruction set" til flyt_bar bin{r "actual instruction set" (@M|l81@). I det f|lgende omtales i meget korte tr{k, hvordan den praktiske im_plemen_tation er struk_tu_re_ret. >a2 DYNAMISK OPSAMLING I RC3502. Kravene til den dynamisk^e opsamlingsmetode har f|rst og fremmest v{ret: - m}lingerne skal kunne foretages p} et k|rende system uden at programmer skal genover_s{t_tes. - m}lingerne skal kunne foretages p} proces in_kar_na_tions niveau. - m}lingerne skal kunne sl}s til/fra kommandostyret. - m}lingerne skal v{re simple, s} m}le_for_styr_rel_ser be_gr{n_ses. >ti-2 - resultaterne skal kunne pr{senteres, s} de er direkte l{sbare, og s} resultater fra forskellige opsamlinger let kan sammenlignes (@visuelt@). - der skal v{re mulighed for at opsamlinger fra flere proces in_kar_na_tioner kan sl}s sammen. >a3 MIKROPROGRAM [NDRINGER. For at kunne opsamle p} proces_inkarna_tions_niveau uden at gen_over_s{tte er der behov for nog_le simp_le {n_drin_ger i mi_kro_pro_gram_^met. - Mi_kroprogrammet skal kunne afg|re om statistikopsamling er sl}et til eller fra. Dette opn}s ved, at der under hent_ning af n{ste instruk_tion testes p} et felt (@en bit@) i "W-registerarrayet" (@se M|l81@). Dette felt kan {ndres af opsamlingsprogrammet. - Registers{ttenes PS - ord (@M|l81@) udvides med et felt (@en bit@), der fort{ller om den tilh|rende proces in_kar_na_tioner tilmeldt statistikopsamlingen eller ej. Dette felt testes af mi_kroprogrammet, hvis det globale statistik til/fra felt er sl}et til. Her er det ligeledes opsamlingsprogrammet, der kan initialisere PS-registrets statistik felt. Feltet f|res med ved aflevering/hent_ning af registers{ttet til/fra proces_in_kar_na_tions_be_skri_vel_sen. - Mi_kroprogrammet t{ller op i en tabel, der er udpe_get af op_t{l_lings_pro_gram_met. Opt{l_lingen fore_tages i 4-oktet en_he_der, der i PASCAL80 notation er defineret s}ledes: TYPE long : RECORD most : INTEGER; least : INTEGER; END; Den aktuelle "long", som mi_kroprogrammet skal opt{lle, er bestemt ud fra - Startadresse p} tabellen. - Proces in_kar_na_tions index. - Instruktionens operationskode. Mi_kroprogrammet beregner adresse^n p} den aktuelle "long" ved at hente en 'forberedt adresse' (@stykket sammen fra "Wregisterarrayet" og proces in_kar_na_tions be_skri_vel_sen@), og her inds{tte operations_kodev{rdien i "displacement" delen af adressen. Den forberedende adresseberegning foretages af opsamlingsprogrammet. >a3 OPSAMLINGSPROGRAMMET. Opsamlingsprogram^met reagerer p} en hel r{kke kommandoer, der f.@eks. kan indtastes fra en operat|r konsol. Kommandoerne grupperer sig funktionelt i f|lgende klasser: >in 6 >ti-5 a@@@@Informative kommandoer, der kan v{re til hj{lp for operat|ren ved den |vrige interaktive kommando styring. (@f.eks h(epl) udskriver en samlet vejledning over kommandoer til opsamlingsprogrammet@). >ti-5 b@@@@Styringskommandoer i forbindelse med statistikopsamlings til-/afmelding. >ti-5 c@@@@Udskriftskommandoer, der kan pr{sentere resultaterne p} forskellige m}der afh{ngig af hvilket problem, resultatet skal belyse. Der er lagt v{gt p}, at resultaterne kan pr{senteres s} f|lgende opn}s: >ti-5 c.1@@Visuel sammenligning af resultater er umiddelbart mulig, ogs} med de statiske op_sam_lings_ud_skrif_ter. >ti-5 c.2@@Delresultater kan udtr{kkes. Her t{nkes specielt p} v{rdier, der er st|rre end en vis gr{nse, eller de N st|rste v{rdier. >ti-5 c.3@@Relative og absolutte v{rdier kan udskrives direkte. >in-6 Punktet c.1 er vigtigt, hvis den dyna_mis_ke fore_komst af programklasser unders|ges. De to sidste punkter benyttes i jagten p} kandidater, hvor det er |nskeligt at kunne begr{nse m{ng_den af in_for_ma_tion for lettere at f} et overblik. >a3 TIDSM[SSIGE P]VIRKNINGER. K|rsel med det {ndrede mi_kroprogram bevirker f|lgende forsinkel_se^r pr. in_struk_tion i forhold til det oprindelige mi_kroprogram. - Global statistik er sl}et fra bevirker en forsinkelse p} 0.8 mi_krosek. - Global statistik er sl}et til og proces in_kar_na_tionen er ikke tilmeldt opsamlingen bevirker en forsinkelse p} 1.8 mi_krosek. - Global statistik er sl}et til og proces in_kar_na_tionen er tilmeldt opsamlingen bevirker en forsinkelse p} 6.5 mi_krosek. Det vil sige, at p}virkningen p} afviklingshastigheden ligger p} under 20@% ved proces in_kar_na_tioner, der ikke opsamles fra, og p} under 60-70@% ved proces in_kar_na_tioner, der opsamles fra. >a2 STATISK OPSAMLING. Opsamling^en af sta_tis_k^e in_struk_tionshyppighed^er er som f|r n{vnt foretaget i forbindelse med over_s{t_terens passage@6. Udgangspunktet er en simpel sta_ti_stik over de forskellige in_struk_tioners hyp_pig_hed. Med hen_blik p} af_d{k_ning af even_tuel_le pro_gram_klas_ser, er der ud_vik_let pro_gram_mer til at akku_mulere^ for_de_lin_g^en af instruk_tions_hyppig_he_d^er, og samti_dig udf|_res di_ver_se statis_tisk^e under_s|_gel_ser, og der pro_du_ce_res gra_fis_k^e over_sig_ter. Dette be_hand_les n{r_me_re i ka_pi_tel@7. P} baggrund af disse resultater specificeres, hvil_ke in_struk_tio_ner, der |nskes en n{rmere pa_ra_me_teranalyse af. Parameter_ana_ly_sen specificeres ved, at der kan angives v{rdiomr}der for de forskellige parametre, der f|lger efter in_struk_tionskoden. Det kan s}ledes blive aktuelt med flere k|rsler, for at f} et detal_jeret billede af para_me_ter_v{rdifore_kom_ster. Der er lige_ledes ud_vik_let pro_gram_mer, der kan akku_mulere for_delingen af para_meter_v{r_di_fore_kom_st^er, se kapi_tel@8. >a2 ANALYSEREDE PROGRAMSYSTEMER. Med henblik p} pa_ra_me_terindkodningen er der lagt op til, at b}de statiske og dynamiske op_sam_lin_ger ud_f|res for en r{k_ke ap_pli_ka_tions_syste_m^er. Udgangspunktet har v{ret nedenst}ende sy_ste_mer, der karak_teri_seres kort i de f|l_gen_de af_snit. - RC3502 basal system. - Alarmsystemet. - Paxnetsystemet. >a3 RC3502 - DET BASALE SYSTEM. Det@basale@system^ i RC3502^ er programmeret i PASCAL80^. Det er i nog_le for_bin_del_ser n|d_ven_digt at bry_de med spro_gets stren_ge type_kon_trol^. Dette mulig_g|res dels ved overs{t_telse med et specielt s{t type_defi_ni_tio_ner, der i mods{t_ning til de bru_ger_rette_de stan_dard_defi_ni_tio_ner, til_la_der at ar_bej_de med sy_stem_va_ri_ab_le^, dels ved ad_gang til en r{kke ruti_ner (@kode_ruti_ne^r@), der findes i et bib_lio_tek^; men ko_den i ru_ti_ne_krop_pen vil bli_ve kopi_eret u_kri_tisk af over_s{tter^en. Det@basale@system^ best}r af en r{kke programmer, der under ud_f|_rel_se vare_ta_ger f|l_gen_de funk_tio_ner (@se (@Bag80@) for n{rmere detaljer@): - Udv{lgelse af n{ste proces_inkarna_tion^, der skal v{re aktiv^ (MONITOR). Der er dels udv{l_gel_se for}rsa_get af afbrydel_se^r, dels udv{lgel_se for_}rsa_get af, at den eksekve_re^nde proces_inkar_na_tion g}r i en effek_tiv vente_til_stand^, og endelig udv{lgelse for_}r_sa_get af udl|b af et tids_af_snit^. Udv{l_gel_sen fore_g}r i 3 ind_byr_des priori_terede klas_ser: >tc ! >sp0 >in4 Klasse 1 : materiel^ afbrydelser >sp0 Klasse@2@: prioriterede "coroutiner >sp0 >tb 12 Klasse@3@: tidsafsnitaf_bry_delig^e proces inkar_na_tio_ner i et priorite_ret sy_stem (@garan_teret mini_mum k|re_tid@) >in-4 - Administration af lager^ og adgang til ydre enhe_der (ALLOCATOR). Det implemente_rede sy_stem sik_rer fuld dyna_misk gen_udnyt_tel_se^ af dis_se ressour_cer^. - Tidsaktiviteter i form af (TIMER) : >sp 0 >in 7 >ti-3 a.@Aktivering af procesin_kar_na_tioner, der er tilmeldt, n}r deres respektive vente_tid^er er talt ned til 0. >sp 0 >ti-3 b.@Returnering af meddelelser efter en tids_perio_de^ angi_vet i meddelelsen. >sp 0 >ti-3 c.@Betjening af taktsignal^s afbry_delse^r. >in -7 - En rod^ for det dynamiske proces_inkar_nations_tr{^ (ADAM). - Et operativsystem^, der kan udf|re komman_doer til procesin_kar_na_tions kontrol^ (OPSYS). - Et operat|r_modul (OPERATOR), der s{tter en operat|r^ i for_bin_del_se med ope_ra_tiv_sy_ste_met, samt med de applikations_pro_gram^_mer, der har sendt en inddata^ foresp|rgsel til operat|r_mo_du_let. - H}ndtering af fejl_situa_tio_n^er - und_ta_gel_ser - der op_da_ges un_der k|r_sel (@"exception" h}nd_te_ring@). - Fastl{ggelse af interne og externe a_dres_se^r ved pro_gram_ind_l{s_ning^, samt vedligehol_del_se af et bib_lio_tek^ over de indl{s_te program_mer (LINKER). Som fundament for det basale system findes et opstarts_system^, der brin_ges i funk_tion ved str|m_til_slut_ning, ved manuel ak_ti_ve_ring af en opstarts tryk_knap ("autoload" knap), ved program_sty_ret op_start, eller styret af en kon_trol mi_kro_ma_skine (@vagt_hunds_over_v}g_ning@). Opstarts_syste_met be_st}r af en ini_tial sekvens af instruk_tio_ner, der udf|_rer de n|dven_di_ge for_be_re_del_ser for den |v_ri_ge del af op_starts_sy_stemet, der er program_me_ret i PASCAL80. Dette opstarts_system er ikke med_taget i de fore_tagne m}_lin_ger, hvil_ket spe_cielt skyldes, at syste_met er pla_ceret i et perma_nent lager_om_r}_de, hvor_fra der kun kan l{_ses (@"PROM"@). Dette omr}de af lageret vil ikke blive anvendt til andet for_m}l, og plads_bespa_relse p} opstarts_sy_stemet er der_for u_inter_essant. Nedenst}ende figur viser det basale system og de enkelte proces_incar_na_tio_ners hierar_kis_k^e ind_pla_ce_ring. >ne20 MONI TIMER ALLO LINKER ADAM TOR CATOR I/O - CLOCK OPERA OPSYS APPL. TIMER DRIVER TOR PROG. CON- SOLE DE- DE- BUGIN BUGOUT >fg RC3502 basal system. Proces struktur. >a3 ALARMSYSTEMET. Det unders|gte system er en demonstrations_mo_del af Alarm_sy_ste_m^et, der er n{rmere beskrevet i (@Bra80@). Alarmsystemet knytter alarmabonnen_ter sam_men med alarm_mod_ta_gere (@i form af brand_sta_tio_ner, vagt_cen_tra_ler, og lig_nen_de@) via et data_net^, PAXNET, der er opbyg_get paral_lelt med tele_fon_net_tet. Dette il_lu_stre_res af neden_st}_ende fi_gur. >ne 33 FALCK ------- I I I O O I I I I I----------. I O O I I VAGTCENTRAL I I .--. .--.I ------------- I O O I : : : :I / . --------'--'-'--'- / . . ------------------ . I OO OO OO OO OO I . I OO OO OO OO OO I . I I . I OO OOIOO OO OO I . / I OO OOIOO OO OO I . / I OOIOO I ------------------ PAX- NET / O / --O---- / / . --------- I O O O I I O I ABONNENT --------- >fg Alarmsystemets funktion. I datanettet indg}r RC3502^ som Terminalstation (TS), Net_grup_pe_centre (NC), og som en del af Distriktscentre (DC). Terminal_statio_nernes funk_tion er at over_v}_ge en abon_nent_str{k_ning samt at op_sam_le og vide_re_sen_de a_lar_mer og sty_rin_ger. Net_grup_pe_cen_tre_ne funge_rer som samle_knu_der for, og over_v}g_ning af Terminal_stationer i data_net_v{r_ket. Distrikts_cen_tre_ne inde_hol_der in_for_ma_tion om abon_nen_ter og vagt_cen_tra_ler og modta_ger ko_pi_er af alle data_pak_ker, der sen_des gen_nem sy_ste_met og op_lag_rer infor_ma_tio_nen. RC3502 indg}r i det f{r_di_ge sy_stem som bindeled for Di_strikts_centret og data_nettet. I den kon_kre_te demon_stra_tions_mo_del, der er an_vendt ved den_ne under_s|_gel_se, er alarm_sy_stemet sim_pli_fi_ce_ret til at omfatte en Terminal_sta_tion og et "Distrikts_cen_ter" (@se fi_gur@6@). Distrikts_centrets funk_tion er simu_le_ret p} en RC3502. >ne 18 --------- --------- : : : : :RC3502 : :RC3502 : O : : : : O / O :Termi- : :Distr.-: O . I/---oOOI<--->:nalst. :<--->:center :<--->IOOo---.I I==. : : : : .==I I Il '-------' '-------' lI I :: ::: :: ::: ----- ----- I I I I I II Alarmter- I II I II minaler I III '---'I '---'II ---' ---'I ---' >fg Demonstrationsmodel af ALARMSYSTEM. Jeg vil i det f|lgende ikke g} n{r_me_re ind i en frem_stil_ling af de enkel_te pro_gram_mers funk_tion, men n|_jes med at be_m{r_ke, at der ikke ind_g}r pro_gram_mel til data_net_til_slut_nin_gen i demon_stra_tions_mo_del_len. >a3 PAXNET. PAXNET er et generelt pak_ke-trans_port^ net_v{rk^ (@"Packet Switching Network"@) ba_se_ret p} CCITT X.25 rekommandationen. PAXNET bygger desuden p} ISO-model_len for et }bent@net_v{rk^ (@PAX80@). RC3502 indg}r som knu_de^r i PAXNET, dels som til_gangs_knu_der, dels som gennem_str|m_nings_knu_der. >ne 21 V{rts- datamat V{rts- datamat X.25 X.25 Til- gangs- knude. Gen- nemstr|m- nings- knude Til- gangs- knude. V{rts- datamat X.25 transportnet >fg PAXNET transportnet. >np De unders|gte programmer stammer fra en til_gangs_knu_de. En s}_dan knu_de vare_ta_ger en r{k_ke op_ga_ver, hvor_af kan n{v_nes: - X.25 niveau 2, hhv. niveau 3 til_slut_ning. - Datagram "interface". - Str|mningskontrol. - "End to end" kontrol. - Trafikdirigering. - Lokal kontrol - Statistik-opsamling og rapportering. >ne 31 X.25-niveau 1/2/3 snitflade : : ---------------------------------------- : I RC3502 tilgangsknude. I : I I : I ------- ------- I : I I LCP I ------- I NCP I I : I I-----I I LCP I '-----' I : I IX.25 I I-----I ------- I : I Iniv.3I I LIC I I LCP I I : I '-----' I-----I I-----I I : I IX.25 I I TS I I : I ------- Iniv.3I '-----' I : I I LCP I '-----' ------- I : I I-----I ------- I LCP I I : I IX.25 I I LCP I I-----I I : I Iniv.2I I-----I INCTH I I : I '-----' I RTP I '-----' I : I '-----' I : '--------------------------------------' >fg Struktur i tilgangsknude. LCP: Lokal kontrol modul NCP: Netv{rks kontrol modul LIC: Logisk intern kanal RTP: Trafik dirigerings modul TS: Transport station. NTCH:Netv{tks kontrol konsol betjenings modul. Det er ikke hele programmellet i en tilgangs_knu_de, der ind_g}r i under_s|_gel_sen. Dette skyl_des prak_tis_ke for_hold ved_r|_ren_de f{r_dig_g|_rel_ses_tids_punk_ter. Der er i ste_det ud_valgt en_kel_te mo_du_ler, der sk|n_nes re_pr{_sen_ta_ti_ve for en net_v{rks_knu_de. Det er af ovenn{vnte }rsager kun den sta_tis_ke un_der_s|_gel_se, der er gen_nem_f|rt. En fuld_st{n_dig analy_se, sta_tisk og dy_na_misk af pro_gram_mel_let i en net_v{rks_knu_de, kan vi_se sig at v{_re en n|d_ven_dig for_ud_s{t_ning for en rime_lig be_hand_ling ef em_net. Dette g{l_der bl.a., hvis der er klasse_op_de_lin_ger i de ana_ly_se_re_de sy_ste_mer. Som det siden skal vise sig f}r det ingen prak_tisk be_tydning at an_ven_de pro_gram_ud_snit i det_te til_f{l_de. >a1 RESULTATER FRA DE STATISKE ANALYSER. I det f|lgende pr{senteres resul_ta_ter_ne af de sta_tiske ana_ly_ser. Udgangs_punk_tet er de en_kel_te sy_ste_mer un_der_s|gt hver for sig. Inden pr{sentationen vil jeg dog beskrive en statistisk model^, der lig_ger til grund for ud_ta_lel_ser om i hvor h|j grad de en_kel_te pro_gram_mer lig_ner hin_an_den i an_ven_del_sen af in_struk_tio_ner. Opsamlingerne af de enkelte programmers instruk_tions_fre_kvens kan be_trag_tes som en r{k_ke empi_ris_k^e for_de_lin_g^er, der er grup_pe_ret p} det sam_me an_tal klas_ser. Lad m betegne antallet af fordelinger (@antallet af pro_gram_klas_ser@), og lad k beteg_ne an_tal klas_ser (@an_tal in_struk_tio_ner@). Med Xij betegnes antallet af observatio_n^er (@an_tal in_struk_tions an_ven_del_ser@) i den j'te for_de_ling (@det j'te pro_gram@), som fal_der i klas_se i (@an_vend_te in_struk_tions ope_ra_tions_ko_de = i@) Med p angives sandsynlighed^en for et udfald^ i den j'te for_de_ling i klas_se i. Vi er interesserede i at unders|ge hypotese^n om ho_mo_ge_ni_tet^ dvs.: Ho: p = p , p = 1; "Maximum likelihood" estimationen under nul_hy_po_te_sen Ho er: Xij >sp0 @@p@@@@---j-------@@@@@, i = 1, 2, 3, ...., k >sp0 Xij ij Uden Ho f}s: Xij >sp0 @@p@@@@----------- >sp0 Xij ij >ne 8 Cramer ( Cra46 ) har vist, at udtrykket Xij 2 Xij - ( Xij)*(-j----) i Xij @Z=@@@@@@-------------------ij--------- >sp0 ( Xij)*( Xij) >sp0 @@@@@ij@@@@@@--i--------j----- >sp0 Xij ij under Ho er asymptotisk^ X@-fordelt med an_tal_let af fri_heds_gra_der^@=@(@k-1@)*(@m-1@). Cramer an_gi_ver, at n * p = Xij * p > 10 ij sikrer en rimelig tiln{rmelse til X@for_de_lin_gen. An_dre h{v_der, at n}r den_ne st|r_rel_se blot er st|r_re end 5, vil til_n{r_mel_sen v{_re til_str{k_ke_lig i prak_sis. I den aktuelle unders|gelse kan dette op_n}s ved at sl} sj{l_dent fo_re_kom_men_de in_struk_tio_ner sam_men i en klas_se. Vi er al_li_ge_vel kun in_ter_esse_re_de i de in_struk_tio_ner, der fore_kom_mer hyp_pigt. De_su_den er der en gr{n_se for hvor sm} sy_ste_mer, der kan under_s|ges (@sm} i rela_tion til an_tal in_struk_tio_ner@). Hvis vi f.eks. kr{_ver, at p esti_ma_to_ren Xij >sp0 @@p@@@@--j-----@@>@0.008 (@0.8%@) >sp0 Xij ij betyder det, at det sam_lede an_tal af in_struk_tio_ner skal v{_re st|r_re end 625 (@evt. 1250@). De 0.8% viser sig senere som en nedre gr{n_se hvor_under enkelt_st}ende kandidater ik_ke vil kun_ne blan_de sig i 'kam_pen' om ind_kod_ning^. >a2 RESULTATER FRA DET BASALE SYSTEM. De unders|gte moduler i det@basale@system^, iden_tifi_ceret ved 1, 2, 3, ..., a, er: >in 6 >ti-4 (1)@ADAM ( proces_in_kar_na_tions roden ) >ti-4 (2)@ALLOCATOR ( lager- og ydre enhedes_ad_mi_ni_stra_tion ) >np >ti-4 (6)@OPERATOR ( operat|r betjening ) >ti-4 (3)@CONSOLE ( styrepanel drivprogram ) >ti-4 (5)@LINKER ( program- og lager_sammenknytning ) >ti-4 (7)@OPSYS ( operativsystem ) >ti-4 (8)@TIMER ( vente-service, tidsudl|bs service for driv_pro_gram_mer, be_tje_ning af takt_sig_nals_af_bry_del_se ) >ti-4 (a)@MONITOR ( administration af proces in_kar_na_tions afvikling ) >ti-4 (4)@PRINTEXCEPT (@undtagelses h}ndtering@) >ti-4 (9)@STDROUTINES ( f{lles procedurer ) >in-6 Testet for homogenitet viser sig at give en ret kraf_tig sig_ni_fi_kans^, s} Ho m} for_kas_tes. Det_te efter_lader to mu_lig_he_der - Der er grupperinger ( klasseop_deling ) af de pro_gram_mer, der ind_g}r i det basale system. - Homogenitetsafvigelserne er ikke sy_ste_ma_tis_ke, s} pro_gram_mer_ne m} be_trag_tes un_der et p} trods af den sto_re va_ria_tion i ma_te_ri_alet. >a3 KLASSEOPDELING I DET BASALE SYSTEM. For at afd{kke sp|rgsm}let om program_grup_pe_rin_g^er har jeg be_nyt_tet f|l_gen_de frem_gangs_m}_de. >a4 HISTOGRAMMER. F|rst granskede jeg histogram^merne for in_struk_tions_an_ven_del_ser. Dette af_d{k_ke_de in_gen sy_ste_ma_tik; men jeg f|lte mig dog ik_ke i stand til at af_vise en klasse_op_de_ling af pro_gram_mer_ne p} det_te grund_lag. >a4 SUMMERING AF HISTOGRAMMER. Jeg udviklede et program, der er i stand til at samle et ak_ku_mu_le_re^t hi_sto_gram over alle de en_kel_te hi_sto_gram_mer ( sam_me pro_gram an_vend_tes i |v_rigt til be_reg_nin_ger af tes_to_ren for ho_mo_ge_ni_tets_ana_ly_sen ). Det_te pro_gram blev ud_vi_det, s} der for hver in_struk_tion over en vis fre_kvens ( 0.8 % i det ak_tu_el_le til_f{l_de@) bli_ver pro_du_ce_ret en graf for de en_kel_te pro_gram_mers pro_cent_vise an_ven_del_se af den p}_g{l_den_de in_struk_tion^ som funk_tion af an_tal_let af in_struk_tio_ner. Der var to grunde til at inddrage antal_let af in_struk_tio_ner i un_der_s|_gel_sen: - Det er nemmere at f} et overblik over, hvil_ke pro_gram_mer, der er for sm} til at de kan til_l{g_ges no_gen be_tyd_ning. - Det kunne t{nkes, at programmets st|rrelse har ind_fly_del_se p} an_ven_del_sen af in_struk_tio_ner, og det_te vil_le jeg ger_ne ha_ve be_lyst ved sam_me lej_lig_hed. Herunder er vist et udpluk af disse oversigts_fi_gu_rer >ne 29 >sp 27 >fg Det basale systems anvendelse af RECHW. Tallene p} figuren re_fe_re_rer til de for_skel_li_ge mo_du_ler, der ind_g}r i un_der_s|_gel_sen Der er stor forskel p}, hvor meget program_mer_nes in_struk_tions_fre_kven_s^er va_rie_rer fra in_struk_tion til in_struk_tion. Det ser ikke u_mid_del_bart ud til, at der er ta_le om no_gen grup_pering^ af pro_gram_mer_ne. Det ser tv{rt_imod ud til at pro_gram_mer, der er ens_ar_te_de i anven_del_sen af vis_se in_struk_tio_ner er for_skel_lige med hen_syn til an_dre in_struk_tions_fre_kven_ser, uden at der er no_get fast m|n_ster (@ind_de_lings_kri_te_ri_um@) med hen_syn til in_struk_tions_fre_kven_ser. Bortset fra sm} pro_gram_mer er der ik_ke no_gen s{r_lig sam_men_h{ng mel_lem an_tal_let af in_struk_tio_ner i et pro_gram og de en_kel_te in_struk_tio_ners fre_kven_ser. Det kun_ne f.eks. ven_tes, at antal_let af pro_ce_dure_kald vil_le vok_se som en funk_tion af an_tal_let af in_struk_tio_ner, for_di der med st|r_re pro_gram_mer er et st|r_re be_hov for at be_nyt_te pro_ce_du_re_kald som "macroer", for at be_va_re over_blik_ket over pro_gram_mets funk_tion. Der er vis_se tegn p} no_get s}_dant, men ik_ke no_gen klar ten_dens. >ne 29 >sp 27 >fg Det basale systems anvendelse af REAGD. Tallene p} figuren refererer til de forskellige mo_duler, der ind_g}r i under_s|gelsen. Den her skitserede fremstillings_form gav et bed_re ind_tryk af ma_te_ria_lets struk_tur, end det op_rin_de_li_ge hi_sto_gram, der var ud_gangs_punk_tet; men sta_dig var jeg ik_ke i stand til helt at af_vi_se teo_ri_en om klas_se_op_de_ling. >a4 FORSKEL - LIGHED. N{ste trin i vurderingen blev, at jeg samlede pro_gram_lig_hed^ / pro_gram_for_skel_lig_hed^ op i en k@x@k kryds_ta_bel, hvor k er antallet af pro_gram_mer. Tabel(i,j) med j > i t{l_les op ved lig_hed mel_lem pro_gram num_mer i og pro_gram num_mer j. Ved for_skel t{lles Tabel(j,i) op i ste_det. Hvis de to om_tal_te pro_gram_mer hver_ken er ens el_ler for_skel_li_ge t{lles der ikke op i Tabel(i,j). Kriterierne for forskel og lighed er ikke }ben_ly_se. De m} i prin_cippet v{re ind_ret_tet lo_ga_rit_misk i for_hold til st|r_rel_sen af fre_kven_sen (@sm} pro_cent_vise fo_re_koms_ter skal lig_ge t{t_te_re end sto_re fo_re_koms_ter be_h|_ver at g|_re@). Et ud_gangs_punkt for hvor t{t fre_kvenser skal ligge for at lig_ne hin_an_den, henholds_vis hvor stor af_stan_den skal v{_re for at de er for_skel_li_ge, kun_ne v{_re at ud_reg_ne konfi_dens_gr{n_ser for p@ i X@-@(m-1)(k-1) for_de_lin_gen, og s} bru_ge dis_se af_vi_gel_ser som m}_le_stok for for_skel/lig_hed^. Jeg har imidlertid anlagt et lidt me_re en_kelt ud_gangs_punkt. Hvis obser_va_tio_nerne x% og y% skal vur_de_res med hen_syn til for_skel/lig_hed, kunne f|l_gen_de to udsagn v{re aktu_elle for x og y st|r_re end 0: >ne 3 I log(x/100) - log(y/100) I < K1 I log(x/100) - log(y/100) I > K2 Nu er x og y i de kon_kre_te til_f{l_de sm} st|r_rel_ser (nu_me_risk). For at an_ven_de den loga_rit_mis_ke sammen_h{ng rime_ligt, kan man trans_for_me_re x og y line_{rt f|rst. Mit for_slag til trans_for_ma_tio_ner er: f(x) = 100 * x + 1, for x c R+ Rela_tionerne bliver da: >ne 2 I log(x+1) - log(y+1) I < K1 I log(x+1) - log(y+1) I > K2 >ne 9 hvilket giver: lighed: 1/K1 1 x+1 1/K1 - < ----- < 2 2 y+1 forskel: 1/K2 1 x+1 1/K2 x+1 - > ----- v 2 < ----- 2 y+1 y+1 Begrundelsen for dette ret simp_le ud_gangs_punkt er: - Metoden skal afd{kke klasseopdelinger; men ik_ke be_vi_se dem. En mu_lig klas_se_op_de_ling skal ik_ke kun_ne for_kas_tes un_der Ho in_den for klas_sen af pro_gram_mer. Det be_ty_der, at Ho ef_ter_pr|_ves sta_tis_tisk i det re_du_ce_re_de ud_falds_rum. - Bortset fra ganske f} hyppige in_struktion^er lig_ger mid_del_v{rdierne t{t samlet. Selv en sim_pel diffe_rence kan for_ven_tes at v{re anven_delig. - Gr{nserne, som denne kvo_tient skal tes_tes imod, kan selv_f|l_ge_lig va_ri_eres. De skal i_mid_ler_tid kun an_ven_des til bil_led_ligt talt 'at skil_le f}_re_ne fra buk_ke_ne'. Gr{nser, der be_vir_ker, at Table(i,j)@=0 for en_ten al_le i,@j, hvor j@>@i (@lighed@), el_ler for al_le i,@j, hvor i@>@j er u_in_ter_es_san_te. Mit f|rste fors|g var med gr{nsen for lighed sat til K1=0.25, og gr{n_sen for for_skel sat til K2=0.5. Dis_se gr{n_ser vi_ste sig at v{_re me_get an_ven_de_li_ge, u_den at jeg i |v_rigt vil ar_gu_men_te_re for, at de er de bedst valg_te; men de er i alt fald til_str{k_ke_ligt go_de til at af_kla_re ma_te_ri_a_lets struk_tur i for_bin_del_se med klas_se_op_de_lings_un_der_s|_gel_sen. Neden_st}_en_de ta_bel vi_ser en s}dan kryds_ta_bel for det ba_sale sy_stem. >ne 30 >sp 28 >fg Forskel/lighed^ i det basale system. Det fremg}r meget klart, at pro_gram_mer_ne ind_byr_des sam_ti_dig er b}de ens for nog_le in_struk_tions_an_ven_del_ser og for_skel_li_ge for an_dre. Teo_ri_en om klas_se_op_de_ling^ m} afvi_ses for det basale system. Det bed_ste man her_ef_ter kan g|_re, er at be_trag_te det basale system som en en_hed, selv om der ik_ke er ho_mo_ge_ni_tet i pro_gram_mer_nes in_struk_tions_fre_kven_ser. Det skal bem{rkes, at det ikke har me_ning at un_der_s|_ge klas_se_op_de_ling p} tv{rs af de un_der_s|g_te sy_ste_mer, med mind_re, der i de en_kel_te sy_ste_mer af_d{k_kes klas_ser. Nedenst}ende figur viser for_de_lin_gen af in_struk_tions_fre_kven_ser for det basale system ak_ku_mu_le_re^t. >ne 48 >sp 45 >fg Instruktionsanvendelse i det basale system. >a2 RESULTATER FRA ALARMSYSTEMET. Der indg}r 18 moduler i Alarmsystem^_un_der_s|_gel_sen. Der er dog kun 14 af disse, der har en st|r_rel_se, s} de sta_tis_tisk set kan ind_g} i over_ve_jel_ser ved_r|_ren_de klas_se_op_de_ling^ af mo_du_ler_ne. Alarmsystemet er gennemarbejdet p} samme m}_de som be_skre_vet for det basale system. Som det kun_ne ven_tes, fal_der nog_le af de helt sm} mo_du_ler uden_for det ge_ne_rel_le bil_le_de. Nedenst}ende figurer viser nogle eks_emp_ler p} mo_du_ler_nes in_struk_tions_fre_kven_ser som funk_tion af an_tal in_struk_tio_ner. De en_kel_te mo_du_ler er i_den_ti_fi_ce_ret ved 1,2,...,9,a,b,... De unders|g_te mo_du_ler er: - (1) AT-CONNECTOR - (2) TSOPSYS - (3) AT-HANDLER - (4) TSSUPERVISOR - (5) EVA (ADAM) - (6) VC-HANDLER - (7) VCATC - (8) TSCONNECTOR - (9) TIMEOUT - (a) CHECK5 - (b) TAP - (c) DCMODULE - (d) VAGT - (e) LAM - (f) TESTOPEN - (g) TIMERBOOK - (h) TESTOUT - (i) TIMERUPDATE >np >ne 50 >sp 49 Fig. 13, 14. Anvendelsen af RENHB og REVSW. >np Bem{rk at modul c har en meget afvigende pro_cent_sats for RENHB. Denne in_struk_tion h{n_ger meget n|_je sam_men med pro_ce_du_re_kald, s} for_mod_nin_gen om et be_hov for pro_ce_du_rer for at be_va_re over_blik_ket styr_kes. I |v_rigt er struk_tu_ren i ma_te_ria_let me_get lig struk_tu_ren i det basale sy_stem. Ne_den_st}_en_de ta_bel vi_ser for_skel/lig_hed for Alarm_sy_ste_met. >ne 38 >sp 29 >fg Forskel/lighed^ i Alarmsystemet. Bortset fra de sm} moduler er der ingen ten_dens til klas_se_op_de_ling; men tv{rt_i_mod en ens_ar_tet_hed i for_skel/lig_heds_un_der_s|_gel_sen der be_vir_ker, at demonstrations_model_len af Alarm_sy_ste_met og_s} m} be_trag_tes som en hel_hed i stil med det ba_sa_le sy_stem. Nedenst}ende figur viser den akkumu_le_re_de in_struk_tions_fre_kvens for Alarm_sy_stem_demon_stra_tions_mo_du_ler_ne. >ne 50 >sp 47 >fg Total in_struk_tionsanvendelse i Alarmsystemet. >a2 RESULTATER FOR PAXNET^ MODULERNE. Unders|gelserne omfatter f|lgende moduler: - (1) NCP - (2) DTE-INT - (3) COMINT - (4) FORMATTER - (5) NCTH Disse moduler udg|r ikke et totalt netknude_system^; men er re_pr{_sen_tan_ter for ty_pis_ke mo_du_ler i net_knu_de_sam_men_h{ng. Grunden til den_ne u_fuld_st{n_dig_hed er ude_luk_ken_de ka_len_der_tids_m{s_si_g, i_det sy_ste_met ik_ke er f{r_dig_ud_vik_let end_nu. I den sta_tis_ke un_der_s|_gel_se me_ner jeg dog det har god me_ning at med_tage mo_du_ler_ne i un_der_s|_gel_sen. Ikke overraskende viser det sig, at PAXNET modu_ler_ne ik_ke har ho_mo_gen an_ven_del_se af in_struk_tio_n^er_ne (@Ho@af_vi_ses@). Neden_for vi_ses et par in_struk_tions_anven_del_ser >ne 26 >sp 25 >fg PAXNET modulernes anvendelse af REALD >ne 25 >sp 22 >fg PAXNET modulernes anvendelse af REAGD Det vi_ser sig des_u_den, at der ik_ke er klas_se_op_de_lin_g^er af mo_du_ler_ne, s} og_s} PAXNET be_trag_tes som et sy_stem. Nedenst}ende viser tabellen for for_skel/lig_hed. >ne 18 >sp 16 >fg Forskel/lighed^ for PAXNET modulerne. Den akkumulere^de opsamling for disse mo_du_ler frem_g}r af ne_den_st}_ende >ne 50 >sp 48 >fg Instruktionsanvendelse for PAXNET moduler. >a2 SAMMENLIGNING AF SYSTEMERNE. De tre gennemarbejdede systemer kan naturligvis sam_men_lig_nes ef_ter sam_me mo_del som an_vendt for de en_kel_te sy_ste_mer. P} for_h}nd kan det for_ven_tes, at det basale system skil_ler sig ud. Grun_den her_til er, at en hel r{k_ke in_struk_tio_n^er er spe_ci_elt ma_skin_un_der_st|t_ten_de (@f.eks. CSELL, der udv{l_ger et ni_veau@), eller under_st|t_ter da_ta_struk_tu_rer, der er funda_men_ta_le for det basale system (@CULST, der afk{der sidste element i en k{destruktur, CSCHD, der ud_v{l_ger n{s_te pro_ces_in_kar_na_tion p} le_vel 0@. (Bag80)@). Disse in_struk_tio_ner bru_ges kun i det basale system og hyp_pig_he_den af de |v_ri_ge in_struk_tio_ner for_ven_tes der_for lidt lavere end for de |v_rige sy_ste_mers ved_kom_men_de. Det skal s} vi_se sig om det f}r no_gen prak_tisk be_tyd_ning. Nedenfor vises nogle eks_emp_ler p} total_sy_ste_m^ets in_struk_tions_an_ven_del_se^. >ne 26 >sp 25 >fg Totalsystemets anvendelse af STVGD. >ne 29 >sp 28 >fg Totalsystemets anvendelse af STVSB. Der er tilsyneladende tale om en sta_bi_li_se_ring^ af fre_kven_s^er_ne, vel p} grund af de bety_de_ligt fle_re in_struk_tio_ner, der ind_g}r i total_sy_ste_mer_ne end i de en_kel_te mo_du_ler (@sto_re tals lov@). Der er ingen tegn p} at det basale sy_stem skil_ler sig ud som f|r an_f|rt. Forskel/lighed^ unders|gelsen blev fore_taget med de sam_me gr{n_ser som brug_tes i mo_dul_un_der_s|_gel_ser_ne. Ne_den_st}_en_de ta_bel vi_ser re_sul_ta_tet. Gr{n_sen for for_skel/lig_hed er en_ten for stor, el_ler og_s} er der ho_mo_ge_ni_tet. Det_te ty_der tal_le_ne i den |_ver_ste h|j_re del af ta_bel_len dog ik_ke p}, og test af Ho gi_ver da og_s} en for_kas_tel_se. K|r_sel med en mind_re gr{n_se er o_ver_fl|_dig og den sam_le_de kon_klu_sion p} struk_tur_under_s|_gel_se^n bli_ver alt_s}, at kan_di_da_t^er_ne kan ud_v{l_ges fra det to_ta_le ma_te_ri_a_le, u_den at der ta_ges spe_cielt hen_syn til for_skel_li_ge sy_ste_mer. >ne 15 >sp 13 >fg Forskel/lighed^ i Totalsystemet. Jeg vil, som n{vnt i kapitel 4.3.1.1, g|re opm{rksom p}, at klas_se_struk_tur^er er under_s|gt p} in_struk_tions_ni_veau_^et. Teo_re_tisk kun_ne man fo_re_stil_le sig, at der fak_tisk er en klas_se_op_de_ling, der blot f|rst kom_mer frem, n}r man ser p} n{s_te lag, der er in_struk_tio_ner_nes pa_ra_me_ter_an_ven_del_se^r. Jeg har valgt at stop_pe ved in_struk_tions_an_ven_del_sen, dels for_di der ikke ved en u_mid_del_bar vur_de_ring af pa_ra_me_ter_under_s|_gel_sen er no_gen ten_dens til dif_fu_sion^, dels arbejder de enkelte sy_ste_mer un_der de sam_me de_fi_ni_tio_ner for de mest ba_sa_le (@ofte an_vend_te@) da_ta_struk_tu_r^er og kon_ven_tio_n^er, s} der er god grund til at an_ta_ge at pa_ra_me_ter_an_ven_del_sen og_s} vil v{_re sam_men_fal_den_de for de under_s|g_te mo_du_ler. Nedenst}ende viser de akkumulere^de in_struk_tions_an_ven_del_se^r for de tre sy_ste_mer. >ne 48 >sp 46 >fg Totalsystemets in_struk_tionsanvendelse. >a1 VALG AF KANDIDATER. I forrige kapitel blev det fastsl}et, at ud_v{l_gel_sen af kan_di_da_t^er til pa_ra_me_ter_ind_kod_ning^ skal ske ud fra det to_ta_le an_tal mo_du_ler, der er ind_g}_et i un_der_s|_gel_sen. Som f|r beskre_vet er over_s{t_te_ren ud_vik_let til p} grund_lag af en bruger_defi_ne_ret in_struk_tions_lis_te med til_h|_ren_de in_ter_val_be_skri_vel_se^r, at gi_ve en over_sigt over pa_ra_me_ter_an_ven_del_se^r for de o_ver_sat_te ru_ti_ner. Jeg har der_n{st ud_vik_let et pro_gram, der kan akkumu_le_re^ s}_dan_ne sta_ti_stik_ker, pro_du_ce_ret ud fra sam_me spe_ci_fikation. Metoden med intervalopdeling^ har som ven_tet vist sig at v{_re me_get an_ven_de_lig. Det har kun v{_ret n|d_ven_digt at fore_tage me_get f} 'pr|_ve_skud' p} et mind_re ma_te_ria_le f|r den an_vend_te spe_ci_fi_ka_tion var frem_kom_met. Ud_v{l_gel_sen af in_struk_tio_n^er er dels sket ud fra den opsam_le_de sta_ti_stik over in_struk_tions_fre_kven_ser, dels ud fra et kend_skab til kob_lin_ger mel_lem in_struk_tio_ner i mic_ro_pro_gram_met. Kob_lin_ger_ne er f.@eks. an_ven_del_se af sam_me a_dres_se_rings_vej el_ler til_sva_ren_de, der kom_mer f|r pa_ra_me_ter_hent_nin_gen. Det_te kom_pli_ce_rer ud_v{l_gel_sen af kan_di_da_ter en smu_le, dels for_di der er ta_le om kan_didat_fami_lie^r, dels for_di ind_kod_nin_gen kr{_ver for_skel_li_ge an_tal trin fra fa_mi_lie til fa_mi_lie. Der er i princippet tale om, for de enkelte fa_mi_lier, at un_der_s|_ge, hvor_le_des pa_ra_me_tre kan om_skri_ves p} f|l_gen_de form: PARAM = K + x , hvor K er konstant og 0 < x < max. Indkodningen af en in_struk_tion I kan da best} i at erstatte I < PARAM > med In < x > eller eventuelt med: In1, In2, ...., Inp , afh{ngig af max. Ovenn{vnte in_struk_tionsr{kke_f|l_ge kan inde_hol_de 'huller'. En ind_kod_ning, der be_ty_der, at der ind_f|_res m nye instruk_tio_ner, er kun re_le_vant, hvis v{r_di_en x kan ind_g} i sel_ve ope_ra_tions_koden for In1, In2, ... Inp p} en ens_artet m}_de (@f.eks. sid_ste fi_re bit af ope_ra_tions_ko_den@), s} mi_kro_pro_gram_ud_vi_del_sen be_st}r i at kun_ne gen_ken_de In1, In2, ... Inp som in_struk_tio_ner og s} i |v_rigt be_hand_le disse helt ens, dvs. bereg_ne x ud fra ope_ra_tions_ko_den, ad_de_re kon_stan_ten K og der_n{st ud_f|_re den op_rin_de_li_ge in_struk_tion ef_ter pa_ra_me_ter_hent_ningen. V{lges alternativet, hvor in_struk_tionen In bibe_hol_der en pa_ra_meter, der fyl_der mind_re, skal mi_kro_pro_gram_met lige_le_des ken_de in_struk_tionen In, hen_te pa_ra_me_teren x, ad_de_re K og fort_s{t_te med in_struk_tio_nen I ef_ter pa_ra_me_ter_hent_ning. Da operationskoden skal v{re indeholdt i en ok_tet (@med mind_re der ind_f|_res en "escape" instruk_tion@), er der en be_gr{ns_ning p} 256 in_struk_tioner, og heraf er 86 le_di_ge. Det_te l{g_ger na_tur_lig_vis en be_gr{ns_ning p} hvil_ke v{r_di_er af gr{nsen <max>, der er in_ter_es_san_te. Operationskoderne er ikke valgt s} der er pas_sen_de fort_l|_ben_de num_re le_di_ge; men det vil v{_re me_get en_kelt at re_de_fi_ne_re in_struk_tio_ner_nes ope_ra_tions_ko_der, dels for_di over_s{t_te_r^en pro_du_ce_rer kode ta_bel_sty_ret ud fra en sym_bolsk ko_de, og dels for_di mi_kro_pro_gram^_met be_nyt_ter sig af en ta_bel_sty_ret^ in_struk_tions_af_vik_ling^. En om_l{g_ning kr{_ver dog en ny over_s{t_tel_se af al_le pro_gram_mer. Da der ved pro_gram_ind_l{s_ning er kon_trol af ver_sions_num_mer, er der i prak_sis in_gen pro_ble_mer for_bun_det med en s}_dan {n_dring. Jeg har n{vnt begr{nsningen p} 86 ledige instruk_tions_v{r_di_er. De_su_den er der en be_gr{ns_ning stam_men_de fra le_di_ge trin i mi_kro_program_met. Der er ca. 20 trin til_ba_ge til ind_kod_ning af pa_ra_me_tre, s} den egent_li_ge be_gr{ns_ning lig_ger her. Det er nu mu_ligt at op_stil_le en lis_te over kan_di_dat_fa_mi_li_er, sor_te_ret ef_ter det sam_le_de an_tal ok_tet_ter, der kan spa_res pr. an_vendt trin i mi_kro_pro_gram_met. Da fastl{ggelsen af K og gr{nsen <max> har ind_fly_del_se p} an_tal_let af trin der skal bru_ges, vil lis_ten bli_ve ud_for_met s} en fa_milie af kan_di_da_ter op_tr{_der f|r_ste gang p} lis_ten, med en fast_l{g_gelse af kon_stan_ter og gr{n_ser (@<max>@), der gi_ver den st|rst mu_li_ge be_spa_rel_se pr. trin. Yder_lige_re be_spa_rel_ser ved an_ven_del_se af ek_stra trin kan s} op_tr{_de se_ne_re p} lis_ten, og hvis en kan_di_dat_fa_mi_lies an_den eller senere fore_komst slip_per med blandt de ud_valg_te kan_di_da_ter, er det na_tur_lig_vis den mest omfat_ten_de (@sidste@) ind_kod_nings_form, der v{l_ges. Det skal, som f|r n{vnt, bem{rkes, at adresse^r, der op_tr{_der som pa_ra_me_tre, ik_ke kan g|_res til gen_stand for ind_kod_ning, da den adres_se_re_de ko_de er flyt_bar (@fastl{gges f|rst ved pla_ce_rin_gen i la_ge_ret - extern/intern sammen_k{d_ning@). Tilbage er der n{sten udeluk_ken_de in_struk_tio_ner af for_men <@opcode@><@param@>, hvor <@param@> fylder 16 bit (@2 ok_tet_ter@). Det_te simp_li_fi_ce_rer selv_f|l_ge_lig ud_v{l_gel_sen. Nedenst}ende figurer viser pa_ra_me_ter_in_ter_val_op_de_lin_g^en for det to_ta_le an_tal pro_gram_mer, der er un_der_s|gt. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np >sp 48 >fg Total pa_ra_me_terintervalopdeling. >np Disse resultater bevirker, at kandidatlis_te^n ser ud som f|l_ger >ne 27 >fd 10 41 60 >ta 12 42 >nf >fb ! Kandidater! Sparet >fb !RECHW, 0/1/2 ... 15/16! 11898 oktetter >fb !RENHB, 16! 4440 oktetter >fb !REVLB/W/D/F, X! 3663 oktetter >fb !STVS/B/W/F, 0/2/4/6/28/30! 3226 oktetter >fb !REAG/LD X! 2599 oktetter >fb !REVSW/D/F, 0/2/4/6/12! 2274 oktetter >fb !PCALS <LEVEL> X <ADDRESS>! 2213 oktetter >fb !REVGB/W/D/F, X! 2139 oktetter >fb !STVLB/W/D/F, X! 1578 oktetter >fb !JMZ/EQ/NE/LT/GT/LE/GE X! 1311 oktetter >fb !RECHW Y, Y c (17..255)! 1288 oktetter >fb !JMPRW, X! 1208 oktetter >fb !STVGB/W/D/F, X! 836 oktetter >fb !REASD, X (+UADHW)! 690 oktetter >fe >fi >fg Kandidater - f|rste forslag. Det skal bem{rkes, at der i denne liste er anvendt konstanten K@=@0 og gr{nsen <max> = 255 i alle de til_f{l_de, hvor der er an_f|rt en para_me_ter X. Der er i de en_kelte tilf{lde 'bed_re' valg, men p} grung af |get plads_for_brug i mi_kro_pro_gram_met gem_mes den_ne dis_ku_sion til n{s_te ske_ma, hvor mi_kro_pro_gram_plads_for_brug er ind_dra_get i kandidat_lis_te^ns priori_tering. Det er plads^en i mi_kro_pro_gram^_met, der s{tter gr{n_sen for an_tal_let af til_f|_jel_ser. Ef_fek_ten med hen_syn til plads_be_spa_rel_se, som en funk_tion af mi_kro_pro_gram plads_for_brug ses ne_den_for. >ne 18 oktetter sparet A I 50.000+ I I 45.000+ I I 40.000+ I I 35.000+ I I 30.000+ I I 25.000+ I I 20.000+ I I 15.000+ I I 10.000+ I I 5.000+ I I 0+----+----+----+----+----+----+--> trin 0 5 10 15 20 25 30 >fg Pladsbesparelse^sudviklingen pr. trin. Ovenst}ende figur svarer til indholdet af den f|l_gen_de ta_bel over kandi_dater og pladsbesparelse pr. trin. >ne 30 >nf >fd 9 38 44 49 61 >ta 11 39 45 50 >fb ! Kandidater!Oktet!Trin!Oktet/trin >ta 11 39 45 52 >fb !RECHW, 0/ ... /16!11898! 2!5949 >fb !RENHB, 16! 4440! 2!2220 >fb !REAG/LD X! 2599! 2!1299.5 >fb !REVLB/W/D/F X! 3663! 3!1221 >fb !REVGB/W/D/F X! 2139! 2!1070 >fb !STVSB/W/F, 0/2/4/6/28../31! 3226! 4! 807 >fb !STVLB/W/D/F X! 1578! 2! 789 >fb !JMZ/EQ/NE/LT/GT/LE/GE X! 1311! 2! 655.5 >fb !RECHW Y, Y c (17..255)! 1288! 2! 644 >fb !JMPRW X! 1208! 2! 604 >fb !REVSW/D/F, 0/2/4/6/12! 2274! 4! 568.5 >fb !PCALS <LEVEL> X <ADDRESS>! 2213! 4! 554.25 >fb !STVGB/W/D/F, X! 836! 2! 818 >fb !REASD, x (+UADHW)! 690! 3! 230 >fb !REASD, -128 + X! +224!+1! 224 >fb !REAGD, 64 + X! !REALD, -16 + X! +432!+2! 216 >fe : : : : >fb !REVGB, 32 + X! +95!+1! 95 >fe >fi >fg Pladsbesparelse/mi_kroprogramtrin Det kan selvf|lgelig ikke over_ras_ke, at de enkel_te kan_di_dat_fa_milie^r bi_dra_ger mind_re og mind_re, og det var og_s} ven_tet at for_skel_len mel_lem kan_di_dater me_get hur_tigt bli_ver for_svin_den_de. Man kan med andre ord ud_v{l_ge de sid_ste ind_kod_nin_ger blandt nogle kan_di_dat_fa_mi_li_er uden at ef_fek_ten med hen_syn til la_ger_be_spa_rel_se {n_dres syn_der_ligt. Det vil der_for v{_re na_tur_ligt, at la_de an_dre pri_o_ri_te_rings_kri_te_rier v{_re af_g|ren_de for val_get af de sid_ste kan_di_da_ter. Jeg t{nker her f|rst og frem_mest p} den dyna_mis_k^e an_ven_del_se af in_struk_tio_ner_ne. I ka_pi_tel 5.1 samt i ka_pi_tel 6.1 har jeg be_skre_vet den me_to_de, jeg vil an_ven_de i prak_sis. Re_sul_ta_ter_ne af den dy_na_mis_ke op_sam_ling er be_skre_vet i det f|l_gen_de ka_pi_tel. Det skal bem{rkes, at den dy_nais_ke op_sam_ling end_vi_de_re skal bru_ges til at gi_ve et sk|n over ind_kod_nin_gens virk_ning p} pro_gram_mers af_vik_lings_has_tig_hed. Jeg vil de_su_den vur_de_re kan_di_da_ter_nes sam_men_h{ng med spro_gets kon_struk_tio_n^er ( kom_po_nen_t^er@). Som p}_pe_get af bl.a. Kor_ne_rup (@Kor76@) for BCPL og O-kode^, g{l_der det til_sva_ren_de for RC3502^ in_struk_tions_s{t_tet, at man_ge in_for_ma_tio_ner om spro_g^ets struk_tur^er er g}_et tabt un_der_vejs i o_ver_s{t_tel_sen. Vis_se struk_tu_rer kan dog gen_ken_des, f.@eks. pro_ce_du_re_kald. Der er flere grun_de til den_ne un_der_s|_gel_se: - Den v{_sent_lig_ste grund er even_tuel af_d{k_ning af in_struk_tio_ner, der ud_f|_res i se_kvens^ el_ler er kob_le_de p} an_den vis, for_di de er pro_du_ce_ret s}_le_des af o_ver_s{t_te_ren i for_bin_del_se med sprog_li_ge kon_struk_tio_ner. Ind_ko_des se_kven_ser kan det gri_be ind i kan_di_dat_lis_te^n. En egentlig sekvensanalyse^ bl.a. ba_se_ret p} kend_skab til spro_gets an_ven_del_se af de en_kel_te kon_struk_tio_ner b}_de sta_tisk og dy_na_misk vil v{_re en na_tur_lig for_l{n_gel_se af un_der_s|_gel_ser_ne p} in_struk_tions_ni_veau_et; men vil bli_ve over_ladt til vi_de_re stu_dier. I ka_pi_tel 10 vil jeg n|_jes med, s} vidt det er mu_ligt, at fin_de sam_men_h{n_gen fra in_struk_tions_ni_veau_et til_ba_ge til bru_gen af sprog_li_ge kom_po_nen_ter. Sk|nt langt fra fyl_dest_g|_ren_de skal det dog vi_se sig at v{_re en s{r_de_les nyt_tig un_der_s|_gel_se med kraf_tig ind_virk_ning p} pa_ra_me_ter_ind_kod_nin_gen. - En anden grund kan v{re, om mu_ligt, at af_d{k_ke hvor in_te_gre_ret i spro_get en be_stemt pa_ra_me_ter_an_ven_del_se er. Anven_del_sen kan ud_sprin_ge af sel_ve spro_g^ets de_fi_ni_tio_ner og den der_til knyt_te_de kode_ge_ne_re_ring^. Den kan end_vi_de_re ud_sprin_ge af ba_sa_le da_ta_struk_tu_r^er (@f.eks. fylder en alfa 12 tegn, og det_te gi_ver bl_a. and_led_ning til hyp_pig anven_del_se af RECHW 12. Der er man_ge til_sva_ren_de ek_semp_ler@). En_de_lig kan kon_ven_tio_n^er, der knyt_ter sig til an_ven_del_sen, give an_led_ning til be_stem_te pa_ra_me_ter_v{r_di_fo_re_koms_t^er. (@f.eks vil kon_ven_tio_ner for da_ta_de_len af en "mes_sa_ge" be_vir_ke at en "re_cord_struk_tur", der s}_le_des er fast_lagt, vil bli_ve re_fe_re_ret en del. Dette kan f.@eks. be_vir_ke be_stem_te pa_ra_me_ter_v{r_di_er til in_struk_tio_nen REVSB, REVSW m. fl.@). Hvis dis_se bag_grun_de for kan_di_da_ter_ne kan af_d{k_kes vil gra_den af in_te_gra_tion^ i spro_get v{re en priori_te_rings_grund i kan_di_dat_ud_v{l_gel_sen. >a1 RESULTATER FRA DEN DYNAMISKE OPSAMLING. Den dynamisk^e opsamling^ var oprindelig plan_lagt for al_le de un_ders|g_te pro_gram_kom_plek_ser. Af praktiske ( kalendertidsm{ssige ) grun_de, har det kun v{_ret mu_ligt at gen_nem_f|_re un_der_s|_gel_sen for det basale system og for Alarm_sy_ste_met. Da ud_gangs_punk_tet er, at al_le tre sy_ste_mer be_hand_les un_der et, fin_der jeg dog det_te min_dre v{_sent_ligt. Jeg har sam_let dy_na_misk sta_ti_stik un_der for_skel_li_ge be_last_nin_ger af sy_ste_met og vil i det f|l_gen_de tage hen_syn til de in_ter_val_ler, som de en_kel_te instruk_tions_fre_kven_ser lig_ger in_den for. Jeg har sikret mig at input/output ikke for_styrres af op_sam_lin_gen (@in_gen in_tro_du_ce_re_de re_trans_mis_sio_ner el_ler "time_outs"@). Jeg har end_vi_de_re, for at f} en for_nem_mel_se af de dy_na_mis_ke fre_kven_sers va_ria_tion fo_re_ta_get m}_lin_ger un_der ad_de_re_de be_tin_gel_ser, sp{n_den_de fra se_kven_ti_el_le ik_ke kom_mu_ni_ke_rende pro_ces in_kar_na_tio_ner over kom_mu_ni_ke_ren_de proces in_kar_na_tio_ner til "I/O" bund_ne pro_ces in_kar_na_tio_ner. >a2 BAGGRUND FOR EFFEKTVURDERING. De be_sluttede indkodninger bevirker, som f|r n{vnt, f{r_re la_ger_til_gan_g^e un_der ud_f|_rel_sen af et pro_gram og med_f|_rer der_med hur_ti_ge_re pro_gram_af_vik_ling^. For at kunne vur_dere effekten, vil jeg f|rst skit_se_re hvor_dan la_ger_til_gan_ge p}_vir_kes i for_bin_del_se med ind_kod_ning. Lad en in_struk_tion^ I* v{re en ind_kod_ning af in_struk_tio_nen I. Lad l{ng_den af I* v{_re L* oktetter og af I v{_re L ok_tet_ter. An_tal_let af ok_tet_ter, der spa_res bliver da (@L@-@L*@)@>@0. Hvis (@L@-@L*@)@MOD@2@=@1, s} {ndres lager_bille_det ana_log med en af f|l_gen_de fi_gu_rer, der vi_ser lagerud_snit star_ten_de p} li_ge adres_se^r og med xxxxx symbo_li_se_ren_de den plads, der anven_des af en in_struk_tion: >ta 13 19 40 46 >ne 39 >nf 1. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- IxxxxxIxxxxxI IxxxxxIxxxxxI ------------- =====> ------------- IxxxxxI I I I I ------------- ------------- 2. !lige !ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- I IxxxxxI I IxxxxxI ------------- =====> ------------- IxxxxxIxxxxxI IxxxxxI I ------------- ------------- 3. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- IxxxxxIxxxxxI IxxxxxIxxxxxI ------------- =====> ------------- IxxxxxIxxxxxI IxxxxxI I ------------- ------------- 4. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- I IxxxxxI I IxxxxxI ------------- ------------- IxxxxxIxxxxxI =====> IxxxxxIxxxxxI ------------- ------------- IxxxxxI I I I I ------------- ------------- >fi >fg Ulige antal oktetter indkodet. Hvis ( L - L* ) MOD 2 = 0 {n_dres la_ger_bil_le_det ana_log med et af f|l_gen_de til_f{l_de: >ne 39 5. >nf !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- IxxxxxIxxxxxI IxxxxxI I ------------- =====> ------------- IxxxxxI I I I I ------------- ------------- 6. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- I IxxxxxI I IxxxxxI ------------- =====> ------------- IxxxxxIxxxxxI I I I ------------- ------------- 7. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- IxxxxxIxxxxxI IxxxxxIxxxxxI ------------- =====> ------------- IxxxxxIxxxxxI I I I ------------- ------------- 8. !lige!ulige!lige ulige !oktet!oktet!oktet oktet ------------- ------------- I IxxxxxI I IxxxxxI ------------- ------------- IxxxxxIxxxxxI =====> IxxxxxI I ------------- ------------- IxxxxxI I I I I ------------- ------------- >fi >fg Lige antal oktetter indkodet. Hentning af en in_struk_tion inklu_sive para_me_tre er ind_ret_tet, s} der l{_ses 16 bit ad gan_gen star_ten_de med en uli_ge ok_tet. Der er in_gen form for "pre_fetch" in_vol_veret, dels p} grund af at hent_ning af ope_ra_tions_ko_den fore_g}r pa_ral_lelt med an_dre op_ga_ver i mi_kro_ma_ski_nen ( f.eks ana_ly_se af af_bry_del_ses_be_tin_gel_ser@), dels p} grund af de man_ge ni_veau_er med til_h|ren_de regis_ter_s{t, der hver is{r kan udpege n{s_te in_struk_tion ved n{s_te instruk_tions_hent_ning. Det er tilf{ldigt om en in_struk_tion star_ter p} en li_ge el_ler en u_li_ge ok_tet, hvil_ket er 've_ri_fi_ce_ret' ved at se p} stik_pr|_ver fra la_ge_ret. Med disse bem{rkninger som bag_grund ses det, at der spa_res en hent_ning fra la_ger i f|l_gen_de si_tua_tio_ner 1,4,5,6,7,8 (@numrene re_fe_re_rer til de to fo_re_g}_en_de fi_gu_rer@) men ik_ke i 2 og 3. Der er alts} tale om en be_spa_rel_se p} : - ( L - 1 - L* ) DIV 2 + 1/2 lagertil_gan_ge, hvis der spa_res et u_lige an_tal ok_tet_ter. - ( L - L* ) DIV 2 lager til_gan_ge, hvis der spa_res et li_ge an_tal ok_tet_ter. Som en tommelfin_gerregel kan man benytte, at alle de kan_didater, der kan kom_me p} ta_le, med_f|_rer en_ten en- el_ler to-ok_tet for_kor_tel_ser. Det er alt_s} til_str{k_ke_ligt at vur_de_re kan_di_da_ter i for_hold til det an_tal ok_tet_ter, instruk_tio_nen bli_ver kor_te_re, idet for_hol_det mellem spa_rede lager_til_gan_ge gennem_snit_ligt vil v{_re 1@:@2. Desuden divi_deres med an_tal trin, som ind_kod_nin_gen op_ta_ger i mi_kro_pro_grammet, da antal trin er be_gr{n_sen_de fak_tor. Denne tommelfingerregel er dog ikke helt kor_rekt, da der ikke benyt_tes de samme la_ger_hent_nings_proce_du_rer over_alt i mi_kro_program_met og i det f|l_gen_de vil jeg der_for op_stil_le kan_di_da_ter ud fra <forventet forekomst>*<tidsbesparelse>/trin Tids_bespa_relserne frem_g}r af figur 43 og 44 i det f|l_gen_de af_snit. >a2 DYNAMISK KANDIDATUNDERS\GELSE. Unders|gelsen af de sidste 'lige gode' statiske kan_dida_ters dy_namis_k^e fre_kven_ser kon_cen_tre_rer sig om f|l_gen_de: >ne 21 >ta 10 36 42 >nf >fd 9 35 40 61 >fb ! Kandidater!Trin!Statisk besparelse >fb !STVSB/W/F 0/2/4/6/28../31! 4! 3226 >fb !STVLB/W/D/F <X>! 2! 1578 >fb !JMZEQ/NE/LT/GT/LE/GE <X>! 2! 1311 >fb !RECHW <Y> Y c (17..255)! 2! 1288 >fb !JMPRW <X>! 2! 1208 >fb !REVSW/D/F,! 4! 2277 !0/2/4/6/12 >fb !PCALS P1 <X> P3! 4! 2213 >fb !STVGB/W/D/F <X>! 2! 836 >fe >fi >fg Kandidater til dynamisk unders|gelse. De in_struk_tion^er, som disse kan_di_da_ter ud_sprin_ger fra, fo_re_kom_mer i de dy_na_mis_k^e m}_lin_ger med f|l_gen_de fre_kvens_in_ter_val^_ler. >nf >fd 9 37 61 >ta 10 38 >ne 21 >fb ! In_struk_tioner! Frekvensomr}de >fb !STVSB/W/F! 2.7 - 3.7 >fb !STVLB/W/D/F! 1.5 - 2.9 >fb !JMZEQ/NE/LT/GT/LE/GE! 6.6 - 8.0 >fb !RECHW! 13.3 - 15.7 >fb !JMPRW! 2.2 - 2.5 >fb !REVSW/D/F! 1.8 - 2.5 >fb !PCALS! 0.4 - 0.8 >fb !STVGB/W/D/F! 3.0 - 3.8 >fe >fi >fg Dynamiske in_struk_tionsfrekvens^er. Proportionalitetsantagelsen giver: >ne 21 >nf >fb ! Kandidater! Forekomst * tid / trin >fb !JMZEQ/../GE X! (5.9->7.1)*0.3/2 => !! 0.0089 -> 0.0107 >fb !REVSW/D/F0/2/4/6/12! (1.5->2.1)*1.5/4 => !! 0.0056 -> 0.0079 >fb !STVSB/W/F0/2/4/6/28/..31! (2.3->3.2)*0.8/4 => !! 0.0046 -> 0.0064 >fb !RECHW Y, Y c (17..255)! (2.2->2.6)*0.3/2 => !! 0.0033 -> 0.0039 >fb !JMPRW X! (1.8->2.1)*0.3/2 => !! 0.0027 -> 0.0032 >fb !STVGB/W/D/F X! (1.5->1.7)*0.3/2 => !! 0.0023 -> 0.0026 >fb !STVLB/W/D/F X! (1.2->2.4)*0.3/2 => !! 0.0018 -> 0.0036 >fb !PCALS P1 X P2! (0.4->0.8)*0.3/4 => !! 0.0003 -> 0.0006 >fe >fi >fg Kandidaters forventede frekvens. Hermed er kandidaternes r{kkef|lge un_der hen_syn_ta_gen til den dy_na_mis_ke in_struk_tions_fre_kvens, tids_be_spa_rel_se og an_tal trin gi_vet. Men lis_ten er end_nu kun fore_l|_big. >a2 FORVENTET EFFEKTFORBEDRING. Det kan v{re en meget van_ske_lig sag at efter_kon_trol^_le_re en ef_fekt_for_bed_ring^ af pro_gram_af_vik_lings_has_tig_he_d^en. Man kan ven_te at for_bed_rin_gen kan svin_ge fra pro_gram til pro_gram. De un_der_s|g_te pro_gram_mer har ingen ind_byg_ge_de tids_m}_lin_ger og eg_ner sig ik_ke til ma_nu_el stop_urs_kon_trol. I/O bund_ne pro_gram_mer vil i |v_rigt spo_le_re et_hvert s}_dant for_s|g. Jeg vil i stedet v{lge en anden an_grebs_vin_kel til pro_ble_met. Me_to_den vil bl.a. in_de_b{_re den for_del, at det er mu_ligt at vur_de_re den nu_v{rende effekt - den for_ven_te_de ef_fekt_for_bedring, samt under efter_kon_trol (@se kapi_tel 11@) at sam_men_hol_de den_ne med den op_n}_e_de for_bed_ring. Jeg vil i vur_de_rin_gen af ef_fek_ten sim_pelt_hen be_reg_ne den gen_nem_snit_li_ge in_struk_tions_tid^ for det nu_v{_ren_de in_struk_tions_s{t ud fra de dy_na_mis_k^e in_struk_tions_op_sam_linger. Me_to_den er ana_log til P. Brink Hansens meto_de (@Han78@) til sam_men_lig_ning af mi_kro_pro_ces_so_rer. Me_to_den er brug_bar for_di de to invol_ve_re_de in_struk_tions_s{t er funk_tio_nelt i_den_tis_ke. Ud fra an_ta_gel_sen om pro_por_tio_na_li_tet i pa_ra_me_ter_v{r_di_fo_re_koms_ter fra det sta_tis_ke til det dy_namis_ke til_f{l_de, og ud fra vi_den om in_struk_tions_ti_der for de ind_ko_dede in_struk_tio_ner, kan den for_ven_te_de gennem_snit_li_ge in_struk_tions_tid be_reg_nes. Ved ef_fekt_for_bed_ring^ vil jeg da for_st} den for_ven_te_de re_duk_tion i den gen_nem_snit_li_ge in_struk_tions_tid. Den for_vente_de re_duk_tion, der er be_reg_net her, g{l_der for den fo_re_l|_bi_ge kan_di_dat_lis_te, der li_ge er pr{_sen_te_ret. >ne 50 >ta 11 25 35 50 >fd 9 23 33 48 61 >nf >fb !Instruktion! %!Instr. tid!Tidsbidrag >fb >ta 15 27 38 52 !RECHW!13.25! 6.0!0.795 !REAGD! 8.09! 7.9!0.639 !JMZEQ! 5.75! 6.2!0.357 !REWGW! 5.51! 7.7!0.424 !RECHD! 5.21! 9.9!0.516 !REVGD! 4.17!11.2!0.467 !REVLW! 3.70! 7.7!0.284 !INDEX! 3.25!20.8!0.676 !REVLD! 2.74!11.2!0.307 !STVGW! 2.66! 7.6!0.202 !STWSB! 2.65! 7.6!0.201 !JMPRW! 2.41! 4.2!0.244 !GT ! 1.94! 7.7!0.149 !REVPW! 1.85! 5.4!0.100 !STVLD! 1.81!10.6!0.192 !REVSW! 1.81!11.0!0.199 !REVSB! 1.65!11.0!0.182 !LT ! 1.54! 7.7!0.119 !RENHB! 1.54! 4.9!0.075 !ADD ! 1.48! 7.3!0.108 !REVLB! 1.45! 7.7!0.112 !JMZGT! 1.38! 6.2!0.086 !REALD! 1.36! 7.9!0.146 !REVGB! 1.35! 7.7!0.104 !REASD! 1.34!11.2!0.150 !INTRS! 1.16!11.5!0.133 !REVSM! 1.11!16.2!0.200 !EQ ! 0.88! 7.5!0.066 !CWTAC! 0.87!11.8!0.139 !CWAIT! 0.87!50.0!0.435 !STVLW! 0.86! 7.6!0.065 !DIV ! 0.81!32.7!0.265 !PEXIT! 0.77!24.0!0.185 !PCALS! 0.77! 9.1!0.070 >fb !I alt!87.99!!8.392 >fb >fd 9 61 >ta 11 ! 8.392*100 !Middel instruktionstid^: ---------- us = 9.54 us ! 87.99 >fe >fi >fg DC-simulator. Dynamisk^ m}ling. To sekunder mellem foresp|rgsler ("poll"). >ne 50 >ta 11 25 35 50 >fd 9 23 33 48 61 >nf >fb !Instruktion! %!Instr. tid!Tidsbidrag >fb >ta 15 27 38 52 !RECHW!13.82! 6.0!0.829 !REAGD! 9.03! 7.9!0.713 !REVGW! 6.99! 7.7!0.538 !JMZEQ! 6.32! 6.2!0.538 !RECHD! 5.29! 9.9!0.524 !REVLW! 4.42! 7.7!0.340 !REVGD! 4.25!11.2!0.476 !INDEX! 4.09!20.8!0.851 !STVGW! 3.41! 7.6!0.259 !GT ! 2.51! 7.7!0.193 !STVSB! 2.34! 7.6!0.178 !JMPRW! 2,24! 4.2!0.094 !REVPW! 2.10! 5.4!0.113 !REWSW! 1.99!11.0!0.219 !LT ! 1.92! 7.7!0.148 !REVGB! 1.90! 7.7!0.146 !ADD ! 1.74! 7.3!0.127 !JMZGT! 1.65! 6.5!0.100 !REASD! 1.46!11.2!0.164 !STVLD! 1.34!10.6!0.142 !REVSM! 1.07!16.2!0.173 !REVSB! 1.02!11.0!0.112 !TOPEN! 0.94!10.5!0.099 !CWTAC! 0.91!11.8!0.107 !CWAIT! 0.91!50.0!0.455 !SUB ! 0.88! 7.3!0.064 !EQ ! 0.86! 7.5!0.065 !DIV ! 0.82!32.7!0.268 !REALD! 0.81! 7.9!0.064 !INTRS! 0.78!11.5!0.090 !STVLW! 0.78! 7.6!0.059 !RENHB! 0.74! 4.9!0.036 !REVLD! 0.70!11.2!0.055 !REVLB! 0.64! 7.7!0.049 !PEXIT! 0.37! 9.1!0.034 !PCALS! 0.37!21.6!0.080 >fb !I alt!89.49!!8.359 >fb >fd 9 61 >ta 11 ! 8.359*100 !Middel instruktionstid^: ----------- us = 9.34 us ! 89.49 >fe >fi >fg TS-alarmmoduler. Dynamisk^ m}ling. To sekunder mellem foresp|rgsler. >ne 50 >ta 11 25 35 50 >fd 9 23 33 48 61 >nf >fb !Instruktion! %!Instr. tid!Tidbidrag >fb >ta 15 27 38 52 !RECHW!14.97! 6.0!0.898 !REAGD! 9.76! 7.9!0.771 !REVGD! 6.60!11.2!0.739 !JMZEQ! 6.42! 6.2!0.398 !REVGW! 5.79! 7.7!0.446 !RECHD! 5.03! 9.9!0.500 !REVLW! 3.47! 7.7!0.267 !STVGW! 3.33! 7.6!0.253 !INDEX! 2.85!20.8!0.593 !STVSB! 2.73! 7.6!0.207 !JMPRW! 2.38! 4.2!0.100 !REVSB! 1.89!11.0!0.208 !REVSW! 1,78!11.0!0.196 !ADD ! 1.77! 7.3!0.129 !EQ ! 1.75! 7.5!0.131 !CWTAC! 1.41!11.8!0.166 !CWAIT! 1.41!50.0!0.705 !INTRS! 1.41!11.5!0.162 !RENHB! 1.34! 4.9!0.066 !REVSM! 1.21!16.2!0.196 !REVLB! 1.15! 7.7!0.086 !GT ! 1.05! 7.7!0.081 !REVGB! 1.03! 7.7!0.079 !TOPEN! 0.93!10.5!0.098 !SETTM! 0.81!15.1!0.122 !REALD! 0.79! 7.9!0.062 !SUB ! 0.77! 7.3!0.056 !STVLD! 0.76!10.6!0.081 !STVLW! 0.71! 7.6!0.054 !PEXIT! 0.67! 9.1!0.061 !PCALS! 0.67!21.6!0.145 !REVLD! 0.63!11.2!0.071 !REVPW! 0.57! 5.4!0.031 !DIV ! 0.54!32.7!0.177 !LT ! 0.45! 7.7!0.035 >fb !I alt!88.83!!8.370 >fb >fd 9 61 >ta 11 ! 8.370*100 !Middel instruktionstid^: ----------- us = 9.42 us ! 88.83 >fe >fi >fg Det basale system. Dynamisk^ m}ling. Belastning med sekventielle og kommunikerende pro_ces inkarna_tio_ner. F|lgende oversigt over kandidater, op_rin_de_li_ge og re_du_ce_rede instruk_tions_ti_der samt sta_tisk para_meter_v{rdi_for_deling, dan_ner bag_grund for ud_reg_nin_gen af den for_ven_te_de gennem_snit_li_ge in_struk_tions_tid. Der er anvendt selvforklarende navne for kan_di_da_ter_ne. >ne 42 >nf >fd 12 35 42 55 >ta 14 36 44 >fb !Instruktion! Tid!Statisk !!!fordeling >fb >ta 14 37 45 !RECHW! 6.0! 6.80% !REC0/1/2..16! 4.3! 76.61% !RECHWS! 5.7! 16.59% >fb !REVLB! 7.7! 0.00% !REVLBS! 7.4!100.00% !REVLW! 7.7! 5.26% !REVLWS! 7.4! 94.74% !REVLD!11.2! 0.00% !REVLDS!10.9!100.00% >fb !REAGD! 7.9! 46.91% !REAGDS! 7.6! 53.09% !REALD! 7.9! 10.64% !REALDS! 7.6! 89.36% >fb !STVLB! 7.6! 9.26% !STVLBS! 7.3! 90.74% !STVLW! 7.6! 21.26% !STVLWS! 7.3! 78.74% !STVLD!10.6! 19.28% !STVLDS!10.3! 80.72% !STVLF!21.8! 0.00% !STVLFS!21.5!100.00% >fb !STVSB!11.0! 11.12% !SVSB0/2/4/6/28../31!10.2! 88.88% !STVSW!11.0! 25.35% !SVSW0/2/4/6/28../31!10.2! 74.65% !STVSF!25.2! 18.33% !SVSF0/2/4/6/28/../31!24.4! 81.67% >fb !JMZEQ/NE../GE! 6.2! 10.65% !JMZEQS/NES../GES! 5.9! 89.35% >fe >fg Instruktionstid^er og statisk fordeling. Skemaet forts{tter n{ste side. >ne 44 >fb !Instruktion! Tid!Statisk !!!fordeling >fb !JMPRW! 4.2! 17.18% !JMPRWS! 3.9! 82.83% >fb !REVSW!11.0! 23.50% !RVSW0/2/4/6/12! 9.5! 76.50% !REVSD!14.4! 1.73% !RVSD0/2/4/6/12!12.9! 98.27% !REVSF!19.1! 51.69% !RVSF0/2/4/6/12!17.6! 48.31% >fb !STVGB! 7.6! 49.23% !STVGBS! 7.3! 50.77% !STVGW! 7.6! 61.39% !STVGWS! 7.3! 38.61% !STVGD!10.6! 4.78% !STVGDS!10.3! 95.22% !STVGF!21.8! 58.33% !STVGFS!21.5! 41.67% >fb !REASD!11.2! 26.44% !REASDS!11.0! 73.56% >fb !REVGB! 7.7! 63.01% !REVGBS! 7.4! 36.99% !REVGW! 7.7! 48.52% !REVGWS! 7.4! 51.48% !REVGD!11.2! 38.41% !REVGDS!10.9! 61.59% !REVGF!15.8! 0.00% !REVGFS!15.5!100.00% !RENHB! 4.9! 14.09% !RNHB16! 3.4! 85.91% !PCALS!23.4! 0.00% !PCALSS!23.1!100.00% >fe >fi >fg Instruktionstid^er og statisk fordeling. Den forventede forbedring beregnet p} TS-alarm modulernes dynamiske instruk_tions_for_de_ling, som den er frem_stillet her_over. >ne 46 >fd 9 22 32 39 50 61 >ta 11 23 33 40 51 >nf >fb !Instruktion!M}lt fo-! Tid!Forventet!Tidsbidrag !!rekomst!!forekomst >fb !RECHW!13.82! 6.0! 0.94! 0.056 !REC0..16!! 4.3! 10.59! 0.455 !RECHWS!! 5.7! 2.29! 0.131 !REAGD! 9.03! 7.9! 4.24! 0.335 !REAGDS!! 7.6! 4.79! 0.364 !REVGW! 6.99! 7.7! 3.39! 0.261 !REVGWS!! 7.4! 3.60! 0.266 !JMZEQ! 6.32! 6.2! 0.67! 0.042 !JMZEQS!! 5.9! 5.65! 0.333 !RECHD! 5.29! 9.9!! 0.524 !REVLW! 4.42! 7.7! 0.23! 0.018 !REVLWS!! 7.4! 4.19! 0.310 !REVGD! 4.25! 11.2! 1.63! 0.183 !REVGDS!! 10.9! 2.62! 0.285 !INDEX! 4.09! 20.8!! 0.851 !STVGW! 3.41! 7.6! 2.09! 0.159 !STVGWS!! 7.3! 1.32! 0.096 !GT! 2.51! 7.7!! 0.193 !STVSB! 2.34! 11.0! 0.26! 0.029 !SVSB0..31!! 10.2! 2.08! 0.212 !JMPRW! 2.24! 4.2!! 0.094 !REVPW! 2.10! 5.4!! 0.113 !REVSW! 1.99! 11.0!! 0.219 !LT! 1.92! 7.7!! 0.148 !REVGB! 1.90! 7.7! 1.20! 0.092 !REVGBS!! 7.4! 0.70! 0.052 !ADD! 1.74! 7.3!! 0.127 !JMZGT! 1.65! 6.2! 0.81! 0.050 !JMZGTS!! 5.9! 0.84! 0.049 !REASD! 1.46! 11.2! 0.39! 0.043 !REASDS!! 11.0! 1.07! 0.118 !STVLD! 1.34! 10.6! 0.26! 0.026 !STVLDS!! 10.3! 1.08! 0.111 !REVSM! 1.07! 16.2!! 0.173 !REVSB! 1.02! 11.0!! 0.112 !TOPEN! 0.94! 10.5!! 0.099 !CWTAC! 0.91! 11.8!! 0.107 !CWAIT! 0.91! 50.0!! 0.455 !SUB! 0.88! 7.3!! 0.064 !EQ! 0.86! 7.5!! 0.065 !DIV! 0.82! 32.7!! 0.268 !REALD! 0.81! 7.9! 0.09! 0.007 !REALDS!! 7.6! 0.72! 0.055 >fe Skemaet forts{ttes >ne 26 >fb !Instruktion!M}lt fo-! Tid!Forventet!Tidsbidrag !!rekomst!!forekomst >fb !INTRS! 0.78! 11.5!! 0.090 !STVLW! 0.78! 7.6!! 0.059 !RENHB! 0.74! 4.9! 0.10! 0.005 !RNHB16!! 3.4! 0.64! 0.022 !REVLD! 0.70! 11.2! 0.00! 0.000 !REVLDS!! 10.9! 0.64! 0.047 !PEXIT! 0.37! 9.1!! 0.034 !PCALS! 0.37! 23.4!! 0.087 >fb !I alt! 89.49%!!! 8.036 >fb >fd 9 61 ! 8.036*100 !Middel instruktionstid^: --------- us = 8.98 us ! 89.49 >fb ! (9.44-8.98)*100 !Forbedring: ----------------- % = 4.9% ! 9.44 >fe >fi >fg Forventet effektforbedring^. >a1 KANDIDATERS SAMMENH[NG MED SPROGKONSTRUKTIONER. Stevenson og Tanenbaum ( STE79 ) kr{ver at sekvens^er er fundet og indf|rt ved en 'i_te_ra_tiv pro_ces' f|r kan_di_dat_un_der_s|_gel_se med hen_blik p} pa_ra_me_ter_ind_kod_ning kan p}_be_gyn_des. Det er selv_f|l_ge_lig og_s} det let_tes_te at h}nd_te_re; men da pa_ra_me_ter- og se_kvens_ind_kod_ning kan have gen_si_dig ind_fly_del_se p} hin_an_den, er sa_gen ik_ke helt s} en_kel. Egent_lig b|r b}_de se_kvens_ana_ly_ser og para_me_ter_ana_ly_ser fo_re_ta_ges og de en_kel_te kan_di_da_ter fra beg_ge grup_per kon_trol_le_res for ind_fly_del_se p} den an_den gruppes kan_di_da_ter. Det er s}_dan_ne o_ver_ve_jel_ser, der lig_ger til grund for det_te ka_pi_tel. En fuld_st{ndig se_kvens_ana_ly_se vil_le der_for v{_re at fo_re_tr{k_ke; men jeg vil o_ver_la_de det_te til vi_de_re stu_di_er. I ste_det vil jeg med ud_gangs_punkt i de ud_f|r_te op_sam_linger, sta_tisk og dyna_misk, be_hand_le kandi_da_ter_ne (@kan_di_dat_fa_mi_li_er_ne@) til pa_ra_me_ter_ind_kod_ning en for en og for_s|_ge at knyt_te for_bin_del_sen til_ba_ge til sprog_kon_struk_tio_n^er, hvor/hvis det_te er mu_ligt. I de til_f{l_de hvor en sammen_h{ng han p}_vi_ses, vil jeg se p} over_s{t_te_r^ens ko_de_ge_ne_re_ring^ med hen_blik p} at af_d{k_ke mu_li_ge in_struk_tions_kob_lin_g^er (@f.eks. in_struk_tions_se_kven_s^er@), der kun_ne v{_re at_trak_ti_ve at ind_ko_de. Eksemp_let i ka_pi_tel 4.3.5 vi_ser at sam_spil_let mel_lem pa_ra_me_ter_ind_kod_nin_ger og se_kvens_ind_kod_nin_ger kan v{_re me_get 'spe_get'; men og_s}, at det er vig_tigt at f} af_kla_ret det_te. Form}let med dette ka_pi_tel er med an_dre ord, at kon_sta_te_re se_kvens_ind_kod_nin_ger ( eller afvi_se dem@) p} bag_grund af det ind_sam_le_de ma_te_ria_le om in_struk_tions_an_ven_del_ser, og vur_de_re om pa_ra_me_ter_ind_kod_nings_kan_di_da_ter evt. for_svin_der i den for_bin_del_se. Der vil i ka_pit_let rej_se sig nog_le }b_ne sp|rgs_m}l, som h{n_ger sammen med en e_gent_lig se_kvens_ana_ly_se og som n{vnt vil bli_ve o_ver_ladt til vi_de_re stu_di_er. Der vil i ka_pit_let bli_ve an_vendt navne p} in_struk_tio_ner og forud_sat kend_skab til dis_ses funk_tion. Yder_ligere for_kla_rin_ger kan fin_des i re_fe_ren_cen (@M|l81@). >a2 GENNEMGANG AF KANDIDATER. I de f|lgende afsnit gennemg}s kandidaterne en for en for om mu_ligt at afd{kke se_kven_s^er og i givet fald kor_ri_ge_re her_for. >a3 "RETRIEVE" KONSTANT. Instruktionen RECHW <PARAM> -> REC1, REC2, ..., REC16, RECHW <x>, x c (17..255), kan stam_me man_ge ste_der fra. Den vil f|rst og frem_mest fo_re_kom_me i arit_metis_ke ud_tryk, hvor der ind_g}r kon_stan_ter. De_su_den bru_ges den i for_bin_del_se med SET-in_struk_tio_ner (@"size"-felt@) og i for_bin_del_se med brug af ty_pen BOOLEAN (@RECHW <0>, RECHW@<1>@). Det kan forventes, at RECHW <PARAM> of_te op_tr{_der med for_skel_li_ge ope_ra_to_rer, f.eks. ADD. Det er ikke mu_ligt at vur_de_re, hvor hyp_pigt s}_dan_ne se_kven_ser fo_re_kom_mer ud fra det op_sam_le_de ma_te_ria_le; men det er mu_ligt at fast_sl} nog_le |v_re be_gr{ns_ninger. Hvad ang}r ADD vil den mest op_ti_ma_le si_tua_tion v{_re, at en be_stemt af kan_di_da_ter_ne, RECI og ADD altid op_tr{_der i se_kvens. Der kan da statisk spa_res h|jst minimum( antal RECI, antal ADD@)@*@3 ok_tet_ter = 431@*@3 oktetter ved at ind_f|_re en ADDCI in_struk_tion. Der er dog ved ind_f|_rel_sen af RECI alle_re_de spa_ret 431@*@2 ok_tet_ter, s} se_kven_sen p} det_te ni_veau vil ik_ke v{_re til_lok_ken_de, hvad an_g}r plads_be_spa_rel_se. Til_sva_ren_de argu_men_ter hol_der for de |v_ri_ge ope_ra_to_rer. Med hensyn til afviklings_has_tig_heden, vil der i bed_ste fald kun_ne vin_des ca. 5 us ved se_kvens_ind_kod_nin_gen i h|jst 1.8@% af de ud_f|r_te in_struk_tio_ner. Med en gen_nem_snit_lig in_struk_tions_tid p} ca. 10@us bli_ver for_bed_rin_gen max_i_malt: 1.8@*@5@*@100 -------------- % = 0.9 % 10 * 100 Dette er en grov |vre gr{nse, der i betragtning af sin be_sked_ne st|r_rel_se g|r se_kven_sen u_in_ter_es_sant. Hvis vi imid_ler_tid for_la_der in_struk_tions_ni_veau_et til for_del for et ni_veau, hvor in_for_ma_tio_ner om den sprog_li_ge sam_men_h{ng sta_dig er til ste_de, s} er der mu_lig_vis st|r_re be_spa_rel_ser at hen_te. F|l_gen_de ek_sem_pel kan be_ly_se det_te. >ne 38 >nf >ex Sekvenser ved "assignments". Betragt f|lgende funktionelt {kvivalen_te "as_sign_ments" VAR a : integer; : : BEGIN : a := a + 1; : a := 1 + a; : END; (* simple assignment *) Overs{tteren kan produce_re f|l_gen_de sym_bol_ske ko_de: : : REVLW "a" RECHW 1 ADD STVLW "a" : RECHW 1 REVLW "a" ADD STVLW "a" : : >fi Indf|res ADD1, som f|r omtalt, vil dette kunne ud_nyt_tes i den f|r_ste pro_duk_tion; men ik_ke i den an_den med_min_dre o_ver_s{t_te_ren p} et tid_li_ge_re tids_punkt er i stand til at 'fan_ge' s}_dan_ne ud_tryk og ven_de dem me_re op_ti_malt for ind_kod_ning. Det ses at additionen kan fore_ta_ges di_rek_te til la_ger i ste_det for at v{re tvun_get til at e_va_lu_e_re p} stak_top_pen. Ind_f|_res ADD1L@<PARAM> , (@L be_ty_der rela_tivt til LOCAL FRAME@) bli_ver den pro_du_ce_re_de ko_de til ADD1L "a" Her spa_res der he_le 7 oktetter pr. fo_re_komst og ca. 20us i udf|rel_sestid. Vide_re unders|gelser m} til for at af_kla_re om en s}_dan se_kvens b|r ind_f|_res som in_struk_tion, og om den vil fjer_ne be_grun_del_sen for REC1 ind_kod_ningen. Se (@Aga79@) for en mere gene_rel dis_ku_sion og an_ven_del_se af den_ne type se_kven_ser. Oven_st}ende er et godt eksempel p}, at en sla_visk sekvens_ana_ly_se^, f.@eks. be_st}en_de i opsamling af to_f|lger^ - tre_f|l_ger^ o.s.v., vil v{_re man_gel_fuld. Det er i man_ge sam_men_h{n_ge n|d_ven_digt at vi_de hvad man 'g}r' efter. Som en bekr{ftelse herp} kan jeg i for_l{n_gel_se af oven_st}_en_de ek_sem_pel n{v_ne, at der i for_bin_del_se med op_t{l_ling i en FOR@-@s{t_ning ik_ke pro_du_ce_res no_gen ADD; men op_t{l_lin_gen fo_re_g}r ved at ud_nyt_te in_struk_tio_nen REASD 1 (@UADHW@) i ste_det. Ind_f|_rel_sen af ADD1L@<PARAM@> vil og_s} med for_del kun_ne an_ven_des her, men in_gen au_to_ma_tis_ke me_to_der vil_le fan_ge no_get s}_dant. I stil med disku_sionen af ADDI er det og_s} her mu_ligt at fin_de en grov |vre be_gr{ns_ning for, hvad der kan op_n}s sta_tisk og dy_na_misk. Begr{nsningen findes ud fra summen af - minimum( antal ADD, antal RECHW 1 ) og >sp0 - minimum( antal REASD, antal LT, antal JMZGT ) Statisk vil indkodningen ikke v{re at_trak_tiv i for_hold til pladskrav i mic_ro_pro_gram_met. Dyna_misk^ vil gr{nser_ne for fore_komst v{re ca. 1.85 + 0.16 % = 2.01@%, og der_med en |vre gr{n_se p} 20 * 2.0 * 100 -------------- % = 4.0 % 10 * 100 Da gr{nsen er grov kan en ind_kod_ning n{p_pe be_ta_le sig; men kun me_re de_tal_je_re_de se_kvens_under_s|_gel_ser kan af_g|_re det_te. Da ho_ved_for_m}_let med ind_kod_nin_ger_ne er plads_be_spa_relse, er der ikke no_get for_gjort i at ind_kode REC1, ..., REC16, pro_ble_met duk_ker f|rst frem, hvis no_gen si_den vil ind_kode f.eks ADD1L. Selv da vil REC1 stadig v{_re kan_di_dat, da antallet af RECHW 1 - an_tal_let af ADD er til_str{k_ke_ligt stort. ( p} grund af sam_men_h{n_gen mellem RECH1,..., REC16 indkodningen er det fak_tisk det samlede antal REC1+REC2+...+REC16 - antal ADD, der skal vur_de_res, s} det bli_ver kan_di_da_tu_ren blot bed_re af ). >a3 "RETRIEVE" NONSENS. Kandidaten er her RENHB 16. Denne in_struk_tion^ kan stam_me fra fle_re sprog_li_ge sam_men_h{n_ge. Den bru_ges bl.a. i for_bin_del_se med pro_ce_du_re_kald^ til at af_s{t_te plads p} stak_ken til en "activa_tion re_cord", der in_de_hol_der re_tur_hops_in_for_ma_tion, samt in_for_mation til brug for en eventuel "excep_tion". Antal_let af pro_ce_du_re_kald kan di_rek_te ses p} an_tal_let af an_ven_del_ser af in_struk_tio_nen PCALS (@PCALD i for_bin_del_se med pro_ce_durer som pa_ra_me_tre an_ven_des ik_ke@). PCALS fore_kom_mer 2193 gan_ge i den sta_tiske ko_de. Da RENHB@16 kal_des 2200 gan_ge, h{n_ger kan_di_da_tu_ren alt_s} helt sam_men med pro_ce_du_re_kald. RENHB og PCALS forekommer ikke i se_kvens, idet da_ta_struk_tu_ren ( "RUN TIME environment") for et pro_ce_du_re_kald er de_fi_ne_ret, s} der f|rst af_s{t_tes plads til "ac_ti_va_tion re_cord", der_ef_ter hen_tes de ak_tuel_le pa_ra_me_tre p} stak_ken, og en_de_lig ud_f|_res PCALS instruk_tio_nen. Ne_den_st}_en_de fi_gur vi_ser det_te. >ne 17 Stak f|r Stak efter +-------------+ +-------------+ LF->I I I I I I I I +-------------+ +-------------+ LP--------------' LF-> I"activation I I record" I +-------------+ I"actual para-I I meters" I --------------- I"local vari- I I ables" I +-------------+ LP----------------' >fg Stakudvikling ved procedurekald. Nedenfor er den pro_ducerede kode vist >ne 12 >fd 9 61 >fb : RENHB 16 REVGW <PARAM> (* evt. tilsvarende in_struk_tion *) REVGD <PARAM> - " - : PCALS <DISTANCE><LEVEL><ADDRESS> : >fe >fg Produceret kode ved procedurekald. Det er selvf|lgelig n{rliggende at o_ver_ve_je om en kob_ling^ mel_lem to in_struk_tioner kan trans_for_me_res til en e_gent_lig se_kvens, der s} kan ind_ko_des. Dette er fak_tisk mu_ligt i det_te til_f{l_de ved en sim_pel om_de_fi_ne_ring af da_ta_struk_tu_ren ved pro_ce_du_re_kald. Den_ne {nd_ring g}r ud p}, at hen_te de ak_tu_elle pa_ra_me_tre p} stak_top_pen f|r der af_s{t_tes plads til "ac_ti_va_tion re_cord", og s} be_nyt_te ne_ga_tiv afstand til "LOCAL FRAME" pointeren ved re_fe_ren_cer til de ak_tuel_le pa_ra_me_tre i ko_den der ud_g|r pro_ce_du_ren. Ne_den_st}_en_de fi_gur vi_ser det_te. >ne 20 Stak f|r Stak efter +-------------+ +--------------+ LF->I I I I I I I I +-------------+ +--------------+ LP--------------' I"actual para- I I meters" I I I +--------------+ LF-> I"activation I I record" I +--------------+ I"local para- I I meters" I I I +--------------+ LP----------------' >fg [ndret datarepr{sentation ved procedurekald. Den producerede kode vil hermed {n_dres p} f|l_gen_de m}_de: >fd 10 56 >ne 12 >fb REVGW <PARAM> (* 1. actual pa_ra_me_ter *) REVGD <param> (* 2. - " - *) : RENHB 16 PCALS <DISTANCE><LEVEL><ADDRESS> : >fe >fi >fg Kodegenerering ved {ndret procedurekald. Sekvensen >ne 6 RENHB 16 PCALS <DISTANCE><LEVEL><ADDRESS> kan herefter indkodes til PCALS*<LEVEL><ADDRESS> Til geng{ld skal in_struk_tionen PEXIT have en ek_stra pa_ra_me_ter, sva_ren_de til <DISTANCE> fra PCALS, s} der kan af_stak_kes til og med de aktu_elle parame_ter ved pro_ce_du_re_afslut_ning (@funk_tions_afslut_ning@). Med til hele historien h|rer, at der i en proce_du_re nu ind_le_des med >ne 3 REAAD "LINETAB" STVLD "RLINETAB" idet linieinformation til brug ved "exception" skal l{g_ges et vel_de_fi_ne_ret sted i for_hold til "LOCAL FRAME" ( her i slut_nin_gen af "ac_ti_va_tion record" ). N}r der ved indgangen til pro_ce_du_ren, efter {n_drin_gen, al_tid er en vel_de_fi_ne_ret kon_stant af_stand til "LOCAL FRAME", er det til_str{k_ke_ligt at hen_te a_dres_sen p} "LINETAB" p} stakken, som det f|r_ste i pro_ce_du_ren. Der spares alt_s} en STVLD "RLINETAB" in_struk_tion. ( Det skal li_ge be_m{r_kes, at en fejl i designet her_med er l|st ved sam_me lej_lig_hed, idet en "exception" i forbindelse med REAAD "LINETAB" nu - i mods{t_ning til f|r - er vel_de_fi_ne_ret@). Det samlede resultat af dis_se {n_drin_ger bli_ver da: >ne 10 >nf >ta 12 45 >fd 10 43 61 >fb ! ! [ndring! Besparelse ! >fb !RENHB 16 !PCALS<P1><P2><P3> ! :!11065 oktetter ! v !PCALS*<P2><P3> >fb !Ingen STVLD "RLINETAB"! 1008 oktetter !Reduktion!12073 oktetter >fb !<P2> tilf|jes i PEXIT! 672 oktetter >fb !Samlet resultat!11401 oktetter >fe >fi >fg Besparelse ved {ndret procedurekald Dette udg|r en pladsbesparelse p} 7.76 % af netto_ko_den, alt_s} langt me_re end RENHB 16 vil_le kun_ne gi_ve. Dynamisk^ vil effekten i forbindelse med pro_ce_du_re_kald og ud_f|_relsen af en pro_ce_dure v{_re en ge_vinst p} ca. 17.2 us. Da den dy_na_mis_ke fo_re_komst af PCALS er ca. 0.65@% af de ud_f|r_te in_struk_tio_ner vil ef_fek_ten v{_re: 17.2 * 0.7 * 100 ---------------- % = 1.2 % 10 * 100 De her an_f|rte {ndringer vil ud over ind_fly_del_sen p} RENHB 16 og p} STVLD "RLINETAB", have indfly_del_se p} al_le in_struk_tio_ner, der an_ven_der "LOCAL FRAME" som udgangs_punkt, i_det de ak_tu_elle pa_ra_me_tre nu vil op_tr{_de i in_struk_tio_ner_ne med ne_ga_ti_ve v{r_di_er. Prin_ci_pielt kan ind_kod_ningen, der be_r|_rer dis_se in_struk_tio_ner ik_ke fast_l{g_ges pr{_cist, f|r der fore_lig_ger re_vi_de_re_de op_sam_lin_ger fra den {n_dre_de over_s{t_ter. Jeg vil dog til_la_de mig den fri_hed at sky_de p} en nu_me_risk lil_le v{r_di, (@under 16@), hvor_un_der n{s_ten al_le ak_tu_el_le pa_ra_me_tre hol_der sig. Jeg vil retf{r_dig_g|_re det_te med fle_re grun_de. An_dre un_der_s|_gel_se (@Tan78@), (@Der74@), har be_sk{f_ti_get sig med an_tal pa_ra_me_tre i pro_ce_du_re_kald for pro_ce_du_re_orien_te_re_de h|j_ni_veau sprog. Dis_se un_der_s|_gel_ser pe_ger p} me_get f} pa_ra_me_tre i pro_ce_du_re_kald. Nu kan selv f} pa_ra_me_tre jo godt i prin_cip_pet fyl_de me_get som VALUE pa_ra_me_tre; men det for_ven_tes, at der, hvis mu_ligt, vil bli_ve be_nyt_tet VAR pa_ra_me_tre ved me_re plads_kr{_ven_de ty_per. Para_me_tre vil da fyl_de et eller to ord, og en an_ta_gel_se om et ne_ga_tivt offset nu_me_risk mind_re end 16 vir_ker der_for ri_me_lig. An_ta_gel_sen vil kun_ne ef_ter_kon_trol_leres, ef_ter ind_f|_rel_sen af den {n_drede stak_re_pr{_sen_ta_tion i for_bin_del_se med pro_ce_du_re_kald. Det koster et ek_stra trin i mi_kroprogrammet at in_tro_du_ce_re en kon_stant, s} for at det kan be_ta_le sig i for_bin_del_se med den_ne {n_dring, kr{_ver det en kraf_tig {n_dring af de ek_si_ste_ren_de pa_ra_me_ter_v{r_di_er for instruk_tio_ner_ne, der ar_bej_der re_la_tivt til LOCAL FRAME. I de ek_si_ste_ren_de op_sam_lin_ger skal der f.eks. for in_struk_tio_ner_ne REVLB, REVLW, REVLD og REVLF i alt mindst flyt_tes af st|r_rel_ses_or_de_nen X = 1221 oktetter, hvor X er be_stemt ved 3663 - X --------- * 3 = 3663 2 Under antagelsen om en intervalforskydning p} 16 ok_tet_ter, er der ikke ba_sis for at ind_f|_re en kon_stant, -16, i mic_ro_pro_gram_met, men det_te b|r dog ef_ter_kon_trol_le_res. For REALD in_struk_tionen g{l_der det, at den ind_ko_des i 'fa_mi_lie' med REAGD. Ind_f|_res en kon_stant < 0 vil der m}_ske nok vin_des p} REALD; men til gen_g{ld ta_bes p} REAGD. Det kan umid_del_bart fast_sl}s, at en ind_kod_ning med en f{l_les ne_ga_tiv kon_stant ik_ke kan kom_me p} ta_le. Om_vendt vil det sta_dig v{_re op_lagt at ind_ko_de de to in_struk_tio_ner a_le_ne p} grund af REAGD. Med to forskel_li_ge kon_stan_ter K1 <> K2 <> 0 koster det 4 trin i mi_kro_pro_gram_met, mod 2 trin ved K1 = K2 = 0. Det er u_sand_syn_ligt; men kan dog ik_ke af_vi_ses, at det kan be_ta_le sig at an_ven_de to trin p} det_te frem for an_dre kan_di_dat_ind_kod_nin_ger. >a3 "RETRIEVE" LOKAL V[RDI. Instruktionerne REVLB, REVLW, REVLD og REVLF ind_ko_des un_der et. De kan pro_du_ce_res i for_bin_del_se med al_le an_ven_del_ser af lo_ka_le va_riab_le i pro_ce_du_rer og funk_tio_ner, samt ved funk_tions_re_sul_ta_ter. Unders|gel_sen her gi_ver ik_ke no_gen fyl_dest_g|_ren_de in_for_ma_tion, der pe_ger p} en se_kvens_ind_kod_nings_kan_di_dat. Det enes_te spor der er v{rd at f|l_ge her, er den kob_ling, der of_te vil v{_re mel_lem re_pe_te_ren_de kon_struk_tio_ner og REVL* ( * st}r for B/W/D/F@). Den_ne kob_ling g{l_der og_s} i no_gen grad for STVL* in_struk_tio_ner_ne. Re_pe_te_ren_de in_struk_tio_ner tes_ter of_te mod en gr{n_se_v{r_di (@el_ler til_sva_ren_de@), der er er_kl{_ret som lo_kal va_ria_bel. Det be_ty_der, at REVL* in_struk_tio_ner sam_men med hop_in_struk_tio_ner og mo_na_dis_ke boolske ope_ra_to_rer, kan dan_ne se_kven_ser af in_ter_es_se. Den vi_de_re dis_ku_sion her_af ta_ges op i for_bin_del_se med hop_in_struk_tio_ner og med in_struk_tio_nen "UADHW" (@=REASD@). >a3 "RETRIEVE" GLOBAL OG LOKAL ADRESSE. Instruktionerne REAGD OG REALD er diskut_te_ret i for_bin_del_se med RENHB og deraf afledede kon_se_kven_ser. >a3 "STORE" LOKAL V[RDI. Der g{lder for STVLB, STVLW, STVLD og STVLF stort set det sam_me som for de til_sva_ren_de "re_trieve" in_struk_tio_ner. Dog vil de i for_bin_del_se med re_pe_te_ren_de in_struk_tio_ner ik_ke v{_re s} hyp_pigt fo_re_kom_men_de som "re_trie_ve" in_struk_tio_ner_ne. Den vi_de_re dis_ku_sion her_af hen_l{g_ges li_ge_le_des til dis_ku_sion af hop- og boolske in_struk_tio_ner samt af UADHW (@REASD@). >a3 "RETRIEVE" GLOBAL V[RDI. Instruktionerne REVGB, REVGW, REVGD og REVGF indkodes un_der et. De kan produ_ce_res i for_bin_del_se med alle an_ven_del_ser af glo_ba_le vari_ab_le. Der g{l_der i |v_rigt de sam_me be_m{rk_nin_ger som for "retrieve" lokal v{r_di in_struk_tio_ner_ne. >a3 PROCEDUREKALD. Instruktionen PCALS er behandlet under RENHB og giver ikke anledning til flere sekvensindkodninger. >a3 "STORE" V[RDI RELATIVT TIL STAKTOPADRESSE. Instruktionerne STVSB, STVSW og STVSF ind_ko_des sam_men, og de_res funk_tion er at af_le_ve_re en v{r_di (@hen_tet fra stak_ken@) i a_dres_sen (@hen_tet fra stak_ken@) med et off_set an_gi_vet i in_struktions_pa_ra_me_te_ren. Instruk_tio_nen an_ven_des ty_pisk i for_bin_del_se med re_cord_struk_tu_rer. Det er v{rd at be_m{r_ke, at para_me_ter_v{r_di_er_ne 28, 29, 30 og 31 stam_mer fra defi_ni_tio_nen af (kon_ven_tio_nen for) en "message header" (@M|l81@), idet der her er fire ok_tetter, der kan l{ses og skrives fra program_met. Hvis kon_ven_tio_nen for en "message header" {n_dres, fal_der de afle_de_de kan_di_da_ter bort. STVSB/W/F instruk_tio_nerne an_ven_des ty_pisk som en slags in_di_rek_te "sto_re value". Hvis den adres_se, der benyt_tes er f{r_dig_be_reg_net og f.eks. lig_ger som en lokal va_ri_a_bel, vil ind_f|_rel_sen af in_di_rek_te "store value" v{_re at_trak_tiv; men n}r a_dres_sen f|rst skal for_be_re_des f.eks. ved gr{n_se_test (@"array indexing"@), kan in_di_rek_te a_dres_se_ring ik_ke an_ven_des. Som ved RENHB dis_ku_sionen, er der her et ek_sem_pel p}, at en se_kvens_ana_ly_se, der kun ser p} in_struk_tions_r{k_ke_f|l_ger ik_ke er til_str{k_ke_lig. Be_reg_nin_gen af a_dres_sen og STVS* instruk_tio_nen st}r nem_lig med et va_ri_a_belt an_tal in_struk_tio_ner i_mel_lem sig. En se_kvens_ana_ly_se kr{_ver alt_s}, at man ved, hvad man s|_ger ef_ter, f.eks ud fra sprog_li_ge kon_struk_tio_ner. For_m}_let med dis_kus_sio_nen i det_te ka_pi_tel er da og_s} at for_s|_ge at fin_de til_ba_ge fra in_struk_tio_ner til kon_struk_tio_ner(@kode_pro_duk_tio_ner@), for med dem som ud_gangs_punkt at af_d{k_ke se_kven_ser/kob_lin_ger mel_lem in_struk_tio_ner. F|lgende eksempel kan be_ly_se, hvad ind_f|_rel_sen af en in_di_rek_te^ "store value" vil be_ty_de. >np >ex Indirekte "store" af v{rdi. Betragt f|lgende programudsnit. >ne 9 >nf TYPE descriptor = RECORD sh : shadow; state : integer; name1 : alfa; name2 : alfa; size : integer; END; procesrec = RECORD ..... END; >ne 24 VAR childtable : ARRAY(0..max) OF descriptor; : : PROCEDURE initproces(childindex : integer; name : alfa;p : procesrec; psize,prio : integer); VAR i : integer; BEGIN WITH childtable(childindex) DO BEGIN : : state := created; name1 := name; size := psize; : END : END; (* initproces *) Den symbolske ko_de vil se s}_le_des ud: >ne 26 ; procedure entry : ; WITH childtable(childindex) DO REAGD "CHILDTABLE" REALW "CHILDINDEX" REAAD "ADDRESS OF DOPE" INDEX STVLD "ELEMENT ADDRESS AS LOCAL" : ; state := created; REVLD "ELEMENT ADDRESS AS LOCAL" REXHW 2 (* 2 is the constant: created *) STVSW 12 (* 12 is offset of state in RECORD *) : ; name1 := name; REVLD "ELEMENT ADDRESS AS LOCAL" REASD 14 (* name1 has offset 14 in RECORD *) REALD "NAME" RECHW 12 (* size of alfa type *) MOVEG : ; size := psize; REALD "ELEMENT ADDRESS AS LOCAL " REVLW "PSIZE" STVSW 38 (* 38 is offset of size in RECORD *) >fi Ved ind_f|_rel_sen af en in_di_rek_te^ "store" in_struk_tion: STVILW<PARAM1><PARAM2> (@"store value indirect local word"@), vil s{t_ningen state := created; udvik_le sig til RECHW 2 STVILW "ELEMENT ADDRESS AS LOCAL" 12 Der er alts} spa_ret en en_kelt ok_tet og sam_ti_dig er der stil_let krav til o_ver_s{t_te_r^en, der skal kun_ne hus_ke "element address" i for_bin_del_se med v{r_di_til_de_lin_ger. Pladsbe_spa_rel_sen i sig selv er ik_ke grund_lag nok for den_ne ind_f|_rel_se, n}r det ta_ges i be_tragt_ning, at det kos_ter en hel del trin i mic_ro_pro_gram_met, at ind_f|_re de nye indi_rek_te in_struk_tio_ner (@det drejer sig b}_de om STVIG* og STVIL* in_struk_tio_ner for fuld_st{n_dig_he_dens skyld@). De_su_den kan STVS* instruk_tio_ner_ne ik_ke und_v{_res ved a_dres_se_be_reg_ning ef_ter in_di_ce_ring. For afviklingshastigheden vil ind_kod_nin_gen be_ty_de en be_spa_rel_se p} ca. 10 us. Da den sam_le_de dy_na_mis_k^e fo_re_komst af STVS* in_struk_tionerne er 2.7->3.7@%, vil ge_vin_sten h|jst v{_re >ne 3 10 * 3.7 * 100 -------------- % = 3.7 % 10 * 100 og sik_kert no_get mind_re. Den dynamiske forekomst kan, med lidt besv{r gan_ske vist, be_stem_mes i alle til_f{l_de, hvor over_s{t_te_ren kan detekte_re en se_kvens, som her, og i for_bin_del_se med se_kven_sen pro_du_ce_re in_struk_tio_nen NOOP, der er en tom instruk_tion. Denne in_struk_tion pro_du_ce_res ellers nor_malt ikke og kan der_for ved dy_na_misk op_sam_ling si_ge pr{_cist, hvor of_te se_kven_sen ud_f|_res. I betragtning af den knebne mi_kro_pro_gram_plads er der ikke grund til at g} vi_de_re med dis_kus_sio_nen; men set me_re ge_ne_relt for lig_nen_de in_struk_tions_s{t kan en vi_de_re un_der_s|_gel_se her_af have in_ter_es_se. Jeg vil i den for_bin_del_se (@no_get i ud_kanten af em_net gan_ske vist@) be_m{r_ke, at det gen_nem_g}e_de ek_sem_pel gan_ske godt il_lu_stre_rer en stor svag_hed ved en ren stak_ma_ski_ne^, set i rela_tion til plads_be_spa_relse og af_vik_lings_has_tig_hed. Til trods for, at der i den sprog_li_ge kon_struk_tion WITH ekspli_cit g|_res op_m{rk_som p}, at et ele_ment vil bli_ve re_fe_re_ret fle_re gan_ge, kan det_te ik_ke ud_nyt_tes fuldt ud af over_s{t_teren, der bundet af stak_dis_ci_pli_n^en m} ud_f|_re REVLD "ELEMENT ADDRESS AS LOCAL" of_te. Hvis man bry_der med stak_dis_ci_pli_nen og ind_f|_rer ar_bejds_re_gis_tre^ med der_til h|_ren_de "load/store" instruk_tio_ner, vil man }b_ne op for ko_de_op_tima_li_se_rin_g^er sty_ret af o_ver_s{t_te_r^en p} et ni_veau, hvor in_for_ma_tio_ner om den sprog_li_ge sam_men_h{ng end_nu er til ste_de ( hvilket ikke er til_f{l_det p} RC3502-instruk_tions_ni_veau i al_min_de_lig_hed@). Et s}_dant skridt vil be_vir_ke, at de om_tal_te in_di_rek_te a_dres_se_rin_ger ik_ke er at_trak_ti_ve al_li_ge_vel, s} med i en vi_de_re un_der_s|_gel_se h|_rer af_kla_ring af e_gen_ska_ber ved en blan_det stak/re_gis_ter_ma_ski_ne. >a3 BETINGEDE HOPINSTRUKTIONER. Af de be_tin_ge_de hop_instruk_tio_ner ind_g}r JMZEQ, JMZLT og JMZGT i re_pe_tions_de_len af l|k_ke_struk_tu_rer. (@JMZGT i FOR .... TO og JMZLT i FOR ... DOWNTO samt JMZEQ i REPEAT ... UNTIL@..@). Hele bun_den af en FOR-konstruktion kun_ne v{_re gen_stand for en se_kvens_ind_kod_ning. Un_der_s|_gel_sen kan gi_ve en grov |v_re gr{n_se for de sta_tis_ke og dy_na_mis_ke ge_vin_ster, der kan op_n}s her_ved. En grov |vre gr{nse for den statiske be_spa_rel_se kan op_n}s ved at se p} mi_nimum af fo_re_koms_ter_ne for (UADHW, JMZGT og (LT og GT)@). Dette mi_ni_mum bli_ver 0.63@% svaren_de til 307 fo_rekoms_ter. Be_spa_rel_sen ved ind_kod_ning vil v{_re 5 ok_tet_ter. Der kan alt_s} mak_si_malt spa_res 1535 ok_tet_ter. Ind_kod_nin_gen vil fyl_de s} man_ge trin (@> 10@), at be_spa_rel_sen ik_ke kan kon_kur_re_re. Dyna_misk^ vil mi_ni_mum af fo_re_koms_ter_ne for (REASD, JMZGT og (LT og GT)@) = 0.16 % v{_re en |v_re gr{n_se. Der vin_des sk|ns_m{s_sigt 20@us pr. ud_f|_rel_se s} en |v_re gr{n_se vil v{_re >ne 3 20 * 0.16 * 100 --------------- % = 0.3 % 10 * 100 alt_s} ikke interessant at ind_ko_de og der_med ik_ke for_styr_ren_de for kan_di_dat_lis_ten. JMZEQ optr{der for_u_den i REPEAT ... UNTIL .. ogs} i for_bin_del_se med IF ... THEN ... ELSE konstruk_tio_ner, der ofte optr{_der i krop_pen af l|k_ke_struk_tu_rer. Det er muligt, at der i for_bin_del_se med f.@eks. "retrieve" instruk_tio_ner kan v{re basis for se_kven_ser. N{rme_re se_kvens_un_der_s|_gel_ser m} til for at af_kla_re det_te. >a3 HOP RELATIVT INSTRUKTIONEN. Instruktionen produce_res i for_bin_del_se med man_ge for_skel_li_ge sprog_kom_po_nen_ter. Den ind_g}r f.eks i IF .. THEN .. ELSE - konstruk_tio_ner, i WHILE l|k_ker og i CASE - kon_struk_tio_ner. B}de IF .. THEN .. ELSE og CASE konstruktio_ner kan for_ven_tes of_te at fo_re_kom_me i l|k_ke_struk_tu_rer. JMPRW vil her of_te f|l_ge ef_ter en STV** in_struk_tion. S}_dan_ne se_kven_ser er de enes_te mu_li_ge kan_di_da_ter i for_bin_del_se med JMPRW. Ved at un_der_s|_ge mi_ni_mum for fore_koms_ten af in_struk_tio_ner_ne (@JMPRW, STV**@), hvor der blandt STV** instruktio_ner_ne v{l_ges den hyp_pigst fore_kom_men_de f}s: Den statiske besparelse bli_ver maksimalt 1.96% sva_rende til 955 fo_re_koms_ter af STVLW. Der kan spa_res en ok_tet og ind_kod_nin_gen kos_ter 2 trin. Alt_s} no_get i un_der_kan_ten af kan_di_dat_lis_ten i bed_ste fald. Dynamisk^ kan der spa_res ca. 4 us . Med STVGW f}s: 4 * 3.3 * 100 ------------- % = 1.3 % 10 * 100 hvil_ket ik_ke er attraktivt, s} JMPRW som kan_di_dat til pa_ra_me_ter_ind_kod_ning for_styr_res ik_ke. >a3 "RETRIEVE" V[RDI RELATIVT TIL STAKTOPADRESSE. Instruktionerne REVSW, REVSD og REVSF indkodes under et. De kan stam_me fra man_ge for_skel_li_ge sprog_li_ge sam_men_h{n_ge. De kr{_ver en a_dres_se p} top_pen af stak_ken, s} der vil v{_re kob_lin_ger til in_struk_tio_ner som INDEX, REAGD, REALD, REVLD og REVGD. De vil ty_pisk bli_ve brugt i for_bin_del_se med in_di_ce_ring og strukture_re_de va_riab_le (@RECORD m.m. @). En grov |v_re gr{n_se for mu_li_ge se_kvensers ind_kod_nings_ef_fekt kan let ud_reg_nes. Statisk er der ingen grund til ind_kod_ning og den dy_na_mis_ke ef_fekt vil v{_re 1.1 %, hvil_ket hel_ler ik_ke gi_ver anled_ning til ind_kod_ning, s} end_nu en gang kan kan_di_da_ten til pa_ra_me_ter_ind_kod_ning v{_re i fred. >a3 "STORE" V[RDI RELATIVT TIL GLOBAL. Instruktionerne STVGB, STVGW, STVGD og STVGF indkodes sam_men. Der g{l_der stort set de sam_me be_m{rk_nin_ger om dis_se in_struk_tio_ner, som der er frem_sat for STVL* instruk_tio_ner_ne. Under_s|_gel_serne her af_d{k_ker in_gen se_kven_ser. >a2 REVIDERET KANDIDATLISTE EFTER SEKVENSINDKODNING. Sekvensindkodning^er p}virker kandidatliste^n, som her_ef_ter ser s}_le_des ud: >ta 12 38 48 >fd 10 36 46 59 >nf >ne 32 >fb !Kandidat!Trin!Besparelse !!!i oktetter >fb !RECHW, 0/ .. /16! 2! 11898 >fb !REAG/LD X! 2! 2599 >fb !REVLB/W/D/F X! 3! 3663 >fb !REVGB/W/D/F X! 2! 2139 >fb !JMZEQ/../GE X! 2! 1311 >fb !REVSW/D/F0/2/4/6/12! 4! 2274 >fb !STVSB/W/F0/2/4/6/28/..31! 4! 3226 >fb !RECHW Y, Y c (17..255)! 2! 1288 >fb >fd 10 59 !Trinforbrug i mi_kroprogram = 21 >fd 10 36 46 59 >fb !JMPRW X! 2! 1208 >fb !STVGB/W/D/F X! 2! 836 >fb !STVLB/W/D/F X! 2! 1578 >fb !PCALS 0, <P3>! 2! 2181 >fe >fi >fg Revideret kandidatliste^. >a2 REVIDERET FORVENTET EFFEKT EFTER SEKVENSINDKODNING. Den forventede dynamiske effekt {ndres i for_bin_del_se med se_kvens_ind_kod_nin_g^en s}_le_des: RENHB <16> indkodes ikke. I stedet indkodes RECHW <Y>, Y@c@(17..255). PCALS og PEXIT f}r nye tider (@ der flyttes tid fra PCALS til PEXIT@). Den akkumulerede tid fra TS-alarm_system_eksemp_let {ndres her_ef_ter s}_le_des: - akkumuleret tid = 8.036 + 0.009 - 0.007 + (NEWPEXIT - PEXIT) - (PCALS - NEWPCALS) >sp0 = 8.038 + z - z us = 8.033 us 8.038*100 Middelinstruktionstid: ----------- us = 8.98 us 89.49 Den forventede effektforbedring for_bli_ver heref_ter u{n_dret (9.44-8.98)*100 Effektforbedring^= -----------------% = 4.9 % 9.44 >a1 EFTERKONTROL I PRAKSIS. Ud over efterkontrol^ af STVL* og REVL* in_struk_tionernes para_meter_v{rdier er ef_ter_kon_trol_len kun re_le_vant for den dy_na_mis_k^e pro_gram_af_vik_ling. I kapitel 5.3 har jeg be_skrevet den ge_ne_rel_le frem_gangs_m}_de for at ve_ri_fi_ce_re, at de kan_di_da_ter, der er med_ta_get p} grund_lag af den dy_na_mis_ke in_struk_tions_op_sam_ling, er anven_de_lige, eller om der er grund til at re_vur_de_re. N}r det_te er af_kla_ret, re_ste_rer der en efter_kon_trol af ind_kod_nin_gens ef_fekt p} pro_gram_af_vik_lings_has_tig_he_den. >a2 KANDIDAT EFTERKONTROL I PRAKSIS. Metoden be_skrevet i kapitel 5.3 er for s} vidt udm{r_ket; men hvis den kr{ver for man_ge 'skud' kan den bli_ve en be_kos_te_lig af_f{_re. (@ca. 1.500 kr pr. skud i materiale_udgifter@). Det der skal af_d{k_kes er ikke funk_tio_nelt nye in_struk_tio_n^er, og da det kun er et sp|rgs_m}l om de nye in_struk_tio_ner bli_ver ud_f|rt til_str{k_ke_ligt of_te i for_hold til for_vent_ninger_ne, kan man an_ven_de en mellem_l|s_ning til at afkla_re det_te. Man kan udnyt_te, at mi_kro_pro_gram^_met ud_f|_rer in_struk_tio_ner ta_bel_sty_ret^. Ta_bel_len er nem_lig lo_ka_li_se_ret i spe_ciel_le "map-prom_mer". Dis_se skal nu for_sy_nes med ind_gan_ge sva_ren_de til kan_di_da_ter_ne; men det er den op_rin_de_li_ge in_struk_tion i fuldt om_fang, de nye ind_gan_ge pe_ger hen p}. Over_s{t_te_rens "assemb_ler" (@PASS@6@) skal de_su_den re_di_fi_ne_re ope_ra_tions_ko_der_ne i over_ens_stem_mel_se her_med; men ikke {n_dre ved in_struk_tions_l{ng_den og hel_ler ik_ke ved pa_ra_me_tre_ne. Denne mel_lem_l|s_ning kan gen_nem_f|_res for en be_ske_den ud_gift (@ca. 100 kr i materiale_ud_gif_ter@), og end_vide_re er det m}_ske end_nu v{_sent_li_ge_re, at fle_re kan_di_dat_mu_lig_heder kan pr|_ves sam_ti_digt (@for s} vidt, at kan_di_da_ter_ne er dis_junk_te@), da der er ledige instruk_tions_ope_ra_tions_v{r_di_er. Anta_gel_sen om pro_por_tio_na_li_tet i pa_ra_me_ter_an_ven_del_sen fra det sta_tis_ke til det dy_na_mis_ke til_f{l_de er her_med ik_ke l{n_gere en v{_sent_lig u_sik_ker_heds_fak_tor. Tabellen nedenfor viser, hvorledes disse m}lin_ger faldt ud sam_men_holdt med de es_ti_me_re_de v{r_di_er. >fd 9 36 48 60 >ta 11 37 49 >ne 22 >nf >fb !Kandidater!Estimeret!Observeret !!forekomst!forekomst >fb !JMZEQ/../GE X! 89.35%! 87.80% !REVSW/D/F0/2/4/6/12! 83.19%! 100.00% !STVSB/W/F0/2/4/6/28/..31! 83.58%! 100.00% !RECHW X! 16.59%! 11.34% !JMPRW X! 82.83%! 13.58% !STVGB/W/D/F X! 60.01%! 43.73% !STVLB/W/D/F X! 80.84%! 96.32% !PCALS 0/1 P3! 98.55%! 100.00% >fe >fi >fg Estimeret og observeret dynamisk^ fordeling. Disse resultater benyttes i neden_st}ende tabel over dynamisk fore_komst * tidsgevinst / trinforbrug. >fd 9 36 61 >ta 11 38 >nf >ne 20 >fb !Kandidater!Fordeling * tid / trin >fb !JMZEQ/../GE X!(5.8->7.0)*0.3/2 => !!0.0087 -> 0.0105 >fb !REVSW/D/F0/2/4/6/12!(1.8->2.5)*1.5/4 => !!0.0068 -> 0.0094 >fb !STVSB/W/F0/2/4/6/28/..31!(2.7->3.7)*0.8/4 => !!0.0054 -> 0.0074 >fb !STVLB/W/D/F X!(1.4->2.8)*0.3/2 => !!0.0021 -> 0.0042 >fb !RECHW Y, Y c (17..255)!(1.5->1.8)*0.3/2 => !!0.0023 -> 0.0027 >fb !STVGB/W/D/F X!(1.3->1.7)*0.3/2 => !!0.0019 -> 0.0026 >fb !JMPRW X!(0.3- 0.3)*0.3/2 => !!0.0005 -> 0.0005 >fb !PCALS 0/1 P3!(0.4->0.8)*0.3/2 => !!0.0006 -> 0.0012 >fe >fi >fg Kontrol af dynamisk betingede kandidater. >ne 10 Kandidaternes dynamisk^e forekomst sammenholdt med de instruk_tioner, de er ind_kod_nin_ger af, vi_ser, at propor_tionali_tets_an_ta_gel_se^n ikke hol_der for alle de be_r|r_te kan_di_da_ter, der med_ta_ges p} grund af hastigheds_gevinst^. Da det kun er de fire f|rste kan_di_dat_fami_lier, der er plads til, er der kun tvivl om, hvorvidt RECHW Y, Y c (17..255) eller STVLB/W/D/F X skal medtages. Da inter_vallet for RECHW Y er inde_holdt i inter_vallet for STVLB/W/D/F X, kan der med god grund argumen_teres for beg_ge kan_di_da_ter. Jeg v{l_ger at med_tage STVLB/W/D/F X, for_di der i visse situa_tio_ner er st|rst effekt p} af_vik_lings_has_tig_he_d^en, og der spares flest oktet_ter. JMPRW var estimeret alt for h|jt. Andre para_me_ter_v{r_di_om_r}_der m} til gen_g{ld ud_f|_res oftere (@det bli_ver i fa_mi_lien, jvf. kapitel 5.3@). Selv om de re_ste_ren_de 86.42% af instruk_tio_nen JMPRW kun_ne pla_ceres p} en enkelt kandi_dat, vil_le den_ne h|jst kun_ne kon_kur_re_re med STVLB/W/D/F X og RECHW Y om den sid_ste plads til ind_kod_ning, s} jeg vil se bort fra det_te uden at m}_le igen med an_dre para_meter_v{rdi_er for JMPRW. Den samlede pladsbesparelse ved ind_kod_ning bli_ver da 28688 oktetter, svarende til 19.5% af nettokoden og 15.4% af brut_to_ko_den. Dertil kommer en bespa_relse p} 11401 oktet_ter ved {n_dret proce_du_re- og funktions_kald med der_af f|l_gen_de indkodning, svarende til 7.8% af netto_ko_den hhv. 6.1% af brut_to_koden. Den samlede be_spa_rel_se bli_ver da p} 27.3% af netto_ko_den hhv. 21.5% af brutto_koden. >a2 EFTERKONTROL AF EFFEKT. I kapitel 9.3 er den for_ventede for_bed_ring af program_mers af_vik_lings_has_tig_hed^ be_reg_net ved at sam_men_hol_de den gen_nem_snit_li_ge in_struk_tions_tid med den forvente_de gennem_snitlige in_struk_tions_tid. I ka_pi_tel 10.3 er der korri_ge_ret for se_kven_sers ind_kod_ning. Ef_ter_kon_trol^_len be_st}r sim_pelt_hen i at ind_sam_le den dynamiske instruk_tions_an_ven_del_se ef_ter at ind_kod_nin_gen er fo_re_ta_get, og der_n{st be_reg_ne den gen_nem_snit_li_ge in_struk_tions_tid for det nye, udvi_de_de in_struk_tions_s{t sammenholdt med den gennemsnitlige instruk_tions_tid for samme k|r_sel, hvor ind_kod_nin_ger_ne til_ba_ge_f|_res til de_res l{n_ge_re form. Herefter er der kun til_ba_ge at kon_sta_te_re, om for_vent_nin_ger_ne holdt stik. Jeg vil i det f|lgende skema benytte mig af nye navne for de ind_kode_de kandi_dater. Et efter_stil_let S ("Short") betyder, at paramete_ren ef_ter instruk_tion^en fyl_der en ok_tet. Navne_ne er i |vrigt selv_for_kla_rende ud fra de op_rin_deli_ge nav_ne (@M|l81@). >ne 40 >nf >fd 9 23 32 37 48 61 >ta 10 24 33 38 49 >fb !Instruktioner!M}lt fo-!Tid !Tidsbidrag!Tilbagereg- !!rekomst!!!net bidrag >fb !RECHW! 0.94%! 6.0! 0.056us! 0.900us !REC0..16! 12.43%! 4.3! 0.535us! !RECHWS! 1.63%! 5.7! 0.093us !REAGD! 2.54%! 7.9! 0.201us! 0.797us !REAGDS! 7.55%! 7.6! 0.574us! !REVGW! 2.35%! 7.7! 0.181us! 0.413us !REVGWS! 3.01%! 7.4! 0.223us! !JMZEQ! 0.84%! 6.2! 0.052us! 0.392us !JMZEQS! 5.49%! 5.9! 0.324us! !RECHD! 4.82%! 9.9! 0.477us! 0.477us !REVLW! 0.09%! 7.7! 0.007us! 0.330us !REVLWS! 4.19%! 7.4! 0.310us! !REVGD! 0.09%!11.2! 0.010us! 0.578us !REVGDS! 5.07%!10.9! 0.553us! !INDEX! 3.17%!20.8! 0.659us! 0.659us !STVGW! 1.31%! 7.6! 0.100us! 0.216us !STVGWS! 1.53%! 7.3! 0.112us! !GT! 1.17%! 7.7! 0.090us! 0.090us !STVSB! 0.02%!11.0! 0.002us! 0.319us !SVSB0/2..31! 2.88%!10.2! 0.294us! !JMPRW! 2.00%! 4.2! 0.084us! 0.084us !REVPW! 0.63%! 5.4! 0.034us! 0.034us !REVSW! 0.01%!11.0! 0.001us! 0.151us !RVSW0/2..12! 1.36%! 9.5! 0.129us! !LT! 0.54%! 7.7! 0.042us! 0.042us !REVGB! 0.32%! 7.7! 0.025us! 0.075us !REVGBS! 0.65%! 7.4! 0.048us! !ADD! 1.82%! 7.3! 0.133us! 0.133us !JMZGT! 0.11%! 6.2! 0.007us! 0.010us !JMZGTS! 0.05%! 5.9! 0.003us! !REASD! 0.00%!11.2! 0.000us! 0.017us !REASDS! 0.15%!11.0! 0.017us! !STVLD! 0.01%!10.6! 0.001us! 0.074us !STVLDS! 0.69%!10.3! 0.071us! >fe Skema forts{ttes >ne 50 >fb !Instruktioner!M}lt fo-!Tid !Tidsbidrag!Tilbagereg- !!rekomst!!!net bidrag >fb !REVSM! 1.50%!16.2! 0.243us! 0.243us !REVSB! 1.39%!11.0! 0.153us! 0.153us !TOPEN! 1.11%!10.5! 0.117us! 0.117us !CWTAC! 1.28%!11.8! 0.151us! 0.151us !CWAIT! 1.28%!50.0! 0.640us! 0.640us !SUB! 0.90%! 7.3! 0.066us! 0.066us !EQ! 1.31%! 7.5! 0.098us! 0.098us !DIV! 0.58%!32.7! 0.190us! 0.190us !REALD! 0.00%! 7.9! 0.000us! 0.113us !REALDS! 1.43%! 7.6! 0.109us! !INTRS! 0.87%!11.5! 0.100us! 0.100us !STVLW! 0.04%! 7.6! 0.003us! 0.061us !STVLWS! 0.77%! 7.3! 0.056us! !RENHB! 1.15%! 4.9! 0.056us! 0.056us !REVLD! 0.00%!11.2! 0.000us! 0.133us !REVLDS! 0.57%!10.9! 0.130us! !PEXIT! 0.57%! 9.1! 0.052us! 0.052us !PCALS! 0.57%!23.4! 0.133us! 0.133us >fb !I alt ! 85.40%!! 7.745us! 8.097us >fd 9 61 >fb ! 7.745*100 !Middelinstruktionstid: ----------- us = 9.07 us. ! 85.40 >fb !Tilbageregnet 8.097*100 !middelinstruktionstid: ----------- us = 9.48 us. ! 85.40 >fb ! (9.48-9.07)*100 !Faktisk effektforbedring^ ---------------- % = 4.4% ! 9.48 >fe >fi >fg Efterkontrol^ af effekt^. >a1 KONKLUSIONER OG PERSPEKTIVER. Det udf|rte arbejde har givet f|lgende hoved_re_sul_ta_ter. - Program^mer er forskellige med hensyn til deres statiske instruk_tions_an_ven_del_se^. - Der er ingen klasseopdeling^ af programmer med hensyn til instruk_tions_an_ven_del_se^r. - Grundlaget for indkodning^ er den totale m{ng_de program_mer. - Huffmanindkodning i radix 256 er ikke relevant i RC3502 p} grund af den be_sked_ne mi_kro_pro_gram_plads^. - Pladsbesparelse^n ved indkodning blev p} 40089 oktetter, sva_ren_de til en be_spa_rel_se p} net_to_kode^n p} 27.3 hhv. 21.5 % p} brutto_kode^n. - Programafviklingshastighed^en blev |get s} be_ske_dent som 4.4@% Problematikken omkring indkodning har ikke v{ret helt s} en_kel som frem_stil_let i teo_ri_en (@Ste79@). Praktis_ke for_hold i form af mi_kro_maskine- og mi_kro_pro_gram_struk_tur spil_ler af_g|_ren_de ind. Ved maskin_design^ er det n|d_ven_digt, at tage hen_syn til ind_kod_nings_prin_cip^_per for at fast_l{g_ge mic_ro_pro_gram_mets plads_for_brug. Det er en for_del at f} para_me_ter_hent_nin_g^en pas_sen_de i_so_le_ret, f.@eks. i star_ten af en in_struk_tion^. Det vil for_enk_le ind_kod_nings_me_to_den og ik_ke med_f|_re 'f|l_ge_in_struk_tio_ner', der er med til at kom_pli_ce_re ud_v{l_gel_sen. I prin_cip_pet er det |n_ske_ligt, at hver in_struk_tion har sine se_pe_ra_te mi_kro_pro_gram_trin. Dette vil_le re_sul_te_re i krav om man_ge trin; men |ko_no_mis_ke for_hold vil p.@t. dik_te_re, at der ind_f|_res en art pro_ce_du_re_be_greb i mi_kro_pro_gram_met. I RC3502^ blev st|r_rel_sen af mi_kro_pro_gram^_met fast_lagt f|r in_struk_tions_s{t^_tet var ende_ligt desig_net. Dette valg af mic_ro_pro_gram_st|r_rel_se (@2048 60-bits-ord@), re_pr{_sen_te_rer en be_gr{ns_ning, der blandt andet har to al_vor_lige kon_se_kven_ser i rela_tion til ind_kod_ning. - Instruktionerne er meget integrerede i hin_an_den (@f{lles kode@). Det medf|_rer tab af effek_ti_vi_tet, idet der bru_ges tid p} at hop_pe frem og til_ba_ge ved brug af f{l_les ko_de. Dette er end_vi_de_re }rsa_gen til, at kan_di_da_ter til ind_kod_ning blev kan_di_dat_fa_milier, og at det kan kos_te vidt for_skel_ligt an_tal trin at ind_ko_de. - Der efterlades for lidt plads til at ind_f|_re ind_ko_de_de in_struk_tio_ner. Det er ikke mu_ligt at f} det ful_de ud_byt_te af ind_kod_nin_gen p} grund af plads_be_gr{ns_nin_gen i mi_kro_pro_gram_met. De foretagne analyser vil kunne an_ven_des i for_bin_del_se med be_stem_mel_se af mi_kro_pro_gram_st|r_rel_se ved til_sva_ren_de ma_skin_de_sign. Den trange plads g|r, at in_struk_tionss{ttets de_sign b|r ta_ges op til re_vi_sion. Enkel_te in_struk_tio_ner er m}_ske 'over_fl|_di_ge' i den for_stand, at de kan sub_sti_tu_e_res af en se_kvens af in_struk_tio_ner. S}_dan_ne se_kvens_ind_kod_nin_ger er for RC3502 ma_ski_nens ved_kommen_de fore_ta_get pr. er_fa_ring/for_nem_mel_se og ik_ke p} em_pi_ris_ke m}_lin_ger. De fore_tag_ne ana_ly_ser af instruk_tions_an_ven_del_sen sta_tisk og dy_na_misk kan bru_ges til at ud_pege u_brug_te eller sj{l_dent brug_te in_struk_tio_ner. For s} vidt s}_dan_ne in_struk_tioner re_pr{_sen_te_rer en se_kvens, kan en instruk_tions_af_kod_ning^ kom_me p} ta_le for at skaf_fe plads til an_dre ind_kod_nin_ger. Og_s} her skal man dog t{n_ke sig grun_digt om. Hvis sprog^et sta_dig er un_der udvik_ling, kan in_struk_tions_an_ven_del_ses_m|n_stret og_s} ud_vik_le sig, s} en af_kod_ning^ af en instruk_tions_se_kvens vil f} u_hel_di_ge f|l_ger. Et eksem_pel her_p}, er ind_f|_rel_sen af dynamis_ke ty_per i PASCAL80^. Det vil be_vir_ke et |_get for_brug af in_struk_tio_ner, der adres_serer re_la_tivt til et mellem_lig_gen_de stak_af_snit (@"intermediate frame"@) (@M|l81@). Disse kan_didater fremtr{_der ellers i den_ne under_s|_gelse som op_lag_te kan_di_da_ter til af_kod_ning. Instruktionsindkodning og afkodning har beg_ge ind_fly_del_se p} et om_r}_de, som ikke er dis_kut_te_ret her i |v_rigt. Beg_ge de_le vil be_vir_ke, at den gen_nem_snit_li_ge in_struk_tions_tid^ bli_ver kor_te_re, og da af_brydelses_sy_ste_m^ets til_stand normalt kun under_s|_ges i l|_bet af hent_ning af n{s_te in_struk_tion, vil det_te be_ty_de hur_ti_ge_re be_tje_ning af af_bry_del_ser og der_med en for_bed_ret ind_data/uddata^ - kapa_ci_tet for den ty_pe yd_re@en_he_d^er, der kan t}_le mid_ler_tidi_ge op_hob_nin_ger ( el_ler for_sin_kel_ser@) af af_brydelser. For yd_re en_he_der, der ik_ke er s}_le_des ind_ret_tet, vil den l{ng_ste in_struk_tion, der ikke kan af_bry_des, s{t_te en gr{n_se for kapa_ci_te_ten. Sekvensind_kod_ning^ har s}_le_des og_s} u_hel_di_ge kon_se_kven_ser, der b|r ta_ges med ind i o_ver_ve_jel_ser_ne. Det g{l_der om at finde en ba_lan_ce mel_lem kra_ve_ne til af_bry_del_ses_sy_stem^et og kra_ve_ne til af_vik_lings_effek_tivi_tet^ af maskin_bund_ne opgaver. En egent_lig se_kvens_ana_ly_se^ er der_for rele_vant som tid_ligere an_f|rt. Dette be_styrkes yder_li_ge_re af de ten_den_ser, der er i ret_ning af stadig mere in_tel_li_gen_te yd_re en_he_der (@"device controllers"@), idet kra_ve_ne til af_bry_del_ses_sy_ste_met her_med sl{k_kes (@afbry_delser_ne sker ty_pisk pr. blok i stedet for pr. tegn@). Indkodningen er ikke noget m}l i sig selv. M}let er is{r plads_besparelse. Dette m}l kan v{re udgangs_punkt for en r{kke design_over_ve_jel_ser ved_r|_ren_de instruk_tions_s{t. De foretag_ne m}_lin_ger vi_ser en stor over_v{gt b}de sta_tisk og dy_namisk af "load" in_struk_tioner (@"retrieve"@). Dette kan ikke bare for_kla_res med lan_ge ud_tryk (@"expressions"@); men bun_der for_mo_dent_lig i den p}_tvung_ne stren_ge stak_dis_ci_plin^. Instruk_tions_s{t^, der er en kom_bi_na_tion af s{dvanlige in_struk_tions_s{t, som de ken_des fra regis_ter_ma_ski_ne^r, og af stak_ma_ski_ne^rs in_struk_tions_s{t, vil v{re et op_lagt em_ne for vi_de_re ana_ly_ser. Man skal her v{_re op_m{rk_som p}, at der med i be_gre_bet 'effek_ti_ve pro_gram_mer' h|_rer et krav om sik_re (@rigtige@) pro_gram_mer. Dette til_gode_ses bl.a. af et stak_orien_te_ret in_struk_tions_s{t, der g|r kode_gene_re_rin_g^en simp_le_re. Ved at blan_de de to ty_per in_struk_tions_s{t kan kra_vet til sik_ker_hed^ til_gode_ses i f|r_ste om_gang ved at an_ven_de den stak_orin_te_rede del af in_struk_tions_s{t_tet til kode_gene_re_rin_gen i over_s{tte_ren; men kode_optimali_se_rin_ger i st|rre om_fang vil v{_re mu_lige ved bl.a. an_ven_del_se af register_maskin_instruk_tio_ner. Som f|r n{vnt kan in_struk_tioner, der inde_hol_der a_dres_ser som pa_ra_me_tre ikke g|res til gen_stand for ind_kod_ning i forbin_del_se med overs{ttelsen af et program. Man kunne overveje at ind_byg_ge den_ne ind_kod_ning i for_bin_del_se med indl{sning/sammenk{dning (@"load/link"@) specielt i for_bindel_se med kryds_sammenk{d_ning, hvor en mere plads_kr{_ven_de sammen_k{d_ningsfilo_so_fi ikke be_r|_rer plads_forbruget i RC3502 sammenk{dnings_mo_du_let. Da der kan fore_kom_me kon_stant_er i ko_den er det_te dog ikke mu_ligt for RC3502 implemen_ta_tio_nen af PASCAL80; men ideen kan overvejes ved til_sva_ren_de de_sign. >ap >a1 REFERENCER. Referencerne er sorteret kronologisk. >tb 14 (Cra46) Cramer >sp0 Mathematical Methods of Statistics. Ch. 30. (1946) >tb 14 (Huf52) D. Huffman >sp0 A Method for Minimum Redundancy Codes. >sp0 Proc. IRE, vol. 40 pp. 1098-1101, sept. 1952. >tb 14 (Dij60) E. W. Dijkstra >sp0 Recursive Programming >sp0 Numer. Math. 2, pp. 312-318, 1960. >tb 14 (Dij69a) E. W. Dijkstra >sp0 Notes on Structured Programming >sp0 Tech. Rep. >sp0 Technische Hogeschool, Eindhoven, 1969. >tb 14 (Dij69b) E. W. Dijkstra >sp0 Structured Programming >sp0 Conf. tech. software eng. >sp0 Rome, NATO sci. Comm. okt. 1969. >tb 14 (Knu71) D. K. Knuth >sp0 An Empirical Study of FORTRAN Programs >sp0 Software Practice and Experience 1, pp. 261-301, 1971. >tb 14 (Joh71) J. B. Johnston >sp0 The Contour Model of Block Structured Processes. >sp0 SIGPLAN Proceedings of a Symposium on Data Structures in Programming Language. pp. 55-82, feb. 1971. >tb 14 (Den74) P. J. Denning >sp0 Is It not Time to Define Structured Programming? >sp0 Operating Sys. Rev., vol 8, pp 6-7 jan. 1974. >tb 14 (Der74) N. Derret >sp0 Design of Computing Mechanisms >sp0 Ph.D. dissertation from University of Oxford, may 1974. >tb 14 (DSt75) Dansk Standardiseringsr}d >sp0 Dansk standard DS 2049-1970, EDB-ordbog >sp0 Data serien, Gjellerup, 1975. >tb 14 (Sal75) A. Salvadori, J. Gordon and C. Capstick >sp0 Static Profile of COBOL Programs. >sp0 Sigplan Notices (ACM) 10, pp. 20-33, 1975. >tb 14 (Ale75) W. G. Alexander, D. B. Wortman >sp0 Static and Dynamic Characteristics of XPL Programs >sp0 Computer 8, 11, pp. 41-46, nov. 1975. >tb 14 (Han78) P. B. Hansen and C. Hayden >sp0 Mi_krocomputer Evaluation >sp0 Computer Science Department, University of Southern Cali_fornia, Los Angeles, Cali_fornia, jan. 1978. >tb 14 (Fer78) D. Ferrari >sp0 Computer Systems Performance Evaluation. >sp0 PRENTICE-HALL, INC., Engelwood Cliffs, New Jersey, 1978. >tb 14 (Tan78) A. S. Tanenbaum >sp0 Implications of Structured Programming for Mashine Architecture >sp0 CACM, vol. 21, pp. 237-246, march 1978. >tb 14 (Kor78) P. Kornerup, B. B. Kristensen and O. L. Madsen >sp0 Interpretation and Code Generation Based on Intermediate Languages. >sp0 Software - Practice and Experience, vol. 10, pp. 635-658 june 1980. >tb 14 (Aga79) R. K. Agarwal and S. T. Chanson >sp0 A Space Efficient Code Generation Sheme for BCPL. >sp0 Software - Practice and Experience, vol. 10, pp. 77-95, 1980, from feb. 1979. >tb 14 (Cra79) H. G. Cragon >sp0 An Evaluation of Code Space Requirements and Performance of Various Architectures. >sp0 ACM Computer Architecture News 7, 5, 1979. >tb 14 (Ste79) J. W. Stevenson and A. S. Tanenbaum >sp0 Efficient Encoding of Mashine Instructions. >sp0 Computer Architecture News 7, 8, june 1979. >tb 14 (DSt80) Dansk Standardiseringsr}d >sp0 Forslag til dansk standard >sp0 DS F 80/240-245, 1980. >tb 14 (Wil80) I. R. Wilson >sp0 Pascal for School and Hobby Use. >sp0 Software - Practice and Experience, vol. 10, pp. 659-671, jan. 1980 >tb 14 (Sta80) J. Staunstrup >sp0 Pascal80, Report >sp0 RC-Computer, RCSL 52-AA964, jan. 1980. >tb 14 (PAX80) JTAS, KTAS, RECAU, RC-COMPUTER. >sp0 General Information of PAXNET >sp0 PAXNET Report no. 1, may 1980. >tb 14 (Wilc80) C. R. Wilcox >sp0 A Language@-@oriented Approach to Computer Architecture. >sp0 Ph. D. - dissertation from Stanford University, Stanford Ca., june 1980. >tb 14 (Bra80) W. Brandt, S. Biering-S|rensen >sp0 Brugs- og funktionsbeskrivelse for alarmsystem. >sp0 De danske teleadm., doks. nr. SP.SYS.3/2, 1980 >tb 14 (Lau80) B. B. Lauersen >sp0 Pascal80, RC3502, Reference Manual >sp0 RC-Computer, RCSL 42-i-1542, nov. 1980. >tb 14 (M|l81) P. M|lgaard >sp0 RC3502 Reference Manual >sp0 RC-Computer, RCSL 52-AA679, to appear in june - july 1981. «eof»