1 / 89

SOCS

SOCS. Hoofdstuk 3 Basisprogrammatuur. Inhoud. De Vertaler De Voorvertaler De Lader De absolute lader De relocerende lader Dynamische relocatie De Binder De Vertolker Het Speurprogramma Het Opstarten van de Computer. Lader. RAM. 1131000005 7299999999 2131000006 7299999999

Download Presentation

SOCS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SOCS Hoofdstuk 3 Basisprogrammatuur

  2. Inhoud • De Vertaler • De Voorvertaler • De Lader • De absolute lader • De relocerende lader • Dynamische relocatie • De Binder • De Vertolker • Het Speurprogramma • Het Opstarten van de Computer

  3. Lader RAM 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 Lader Uitvoerbaar programma(machinetaal)

  4. Lader RAM 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 Lader

  5. Lader nodig? Vertaler: rol van lader? Vertalen  UitvoerenTelkens opnieuw! Tijd! | Vertaler | > | Lader |Minder geheugen beschikbaar Verantwoording RAM 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 HIA R0,A DRU OPT R0,B DRU STP A: 10000 B: 20000 Vertaler

  6. Verantwoording RAM Vertalen ... ( x 1 ) 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 HIA R0,A DRU OPT R0,B DRU STP A: 10000 B: 20000 Vertaler Schijf

  7. Verantwoording RAM 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 Uitvoeren ... ( x N ) 1131000005 7299999999 2131000006 7299999999 9999999999 0000010000 0000020000 Lader

  8. Lader • Deel van het besturingssysteem • Zie ook opstarten van een computer • Verschillende Lader-algoritmes • Absolute Lader • Relocerende Lader • Extra Apparatuur • Dynamische adresvertaling

  9. Absolute Lader • Uitvoerbaar programma ongewijzigd in geheugen • Meest elementaire geval • Programma steeds vanaf adres 0000 geladen • Programma in invoerorgaan • Eerste getal = lengte van het programma • Lader geladen vanaf adres 9000 0000000145 7299999999 … … symb.tabel … Lengte aanduiding 145 bevelen/constanten

  10. Algoritme: Lengte inlezen Opeenvolgende getallen inlezen  in opeenvolgende geheugenplaatsen wegbergen Start uitvoering int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } 7199999999 0000 1221000010 0001 0000000000 0002 0000000000 0003 adres 0000000000 0004 0000000000 0005 … Absolute Lader adres = 0; goto *adres;

  11. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 Absolute Lader LEZ | lengte HIA R2,R0

  12. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 Absolute Lader HIA.a R1,0

  13. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 Absolute Lader LUS: VGL.w R2,0 VSP KLG,ewh

  14. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,ewh Absolute Lader LEZ | Instr. BIG R0,0(R1+)

  15. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,ewh LEZ | Instr. BIG R0,0(R1+) Absolute Lader AFT.w R2,1

  16. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,ewh LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 Absolute Lader SPR LUS

  17. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,ewh LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS Absolute Lader 0 | Start

  18. int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR Absolute Lader

  19. Simulator? Truukjes Zelf lengte aanduiding toevoegen Invoer uit bestand-invoer bestandsnaam | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR Absolute Lader OK?

  20. Simulator? | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR 1224010000 7199999999 0006 0000 1122200000 2211200001 0001 0007 3121900003 1111100000 0002 0008 3311200000 1233456788 0009 0003 3221200000 4234242342 0010 0004 3453453533 7199999999 0005 0011 Absolute Lader 1224010000 2211200001 3121900003 7299999999 Lader overschrijft zichzelf !!!

  21. Simulator? Truukjes Zelf lengte aanduiding toevoegen Invoer uit bestand-invoer bestandsnaam Lader vanaf 9000? | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR Absolute Lader

  22. Simulator? Truukjes Zelf lengte aanduiding toevoegen Invoer uit bestand-invoer bestandsnaam Lader vanaf 9000! | Absolute lader LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR Absolute Lader SPR LADER RESGR 8999 LADER:

  23. | Absolute lader SPR LADER RESGR 8999 LADER: LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr. BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR 7199999999 3121909000 0000 9000 1122200000 0000000000 0001 9001 0000000000 1111100000 0002 9002 3311200000 0000000000 9003 0003 0000000000 3221000000 9004 0004 7199999999 0000000000 9005 0005 1224010000 9006 2211200001 9007 3121909003 9008 Absolute Lader 1224010000 2211200001 3121900003 7299999999

  24. ≠ programma’s 1 na 1 inladen en uitvoeren Werkwijze: In elk programma:STP  SPR 9000 Programma’s vertalen In elk vertaald progr: “Lengte” inlassen Symbooltabel weglaten Alle programma’s na elkaar in 1 bestand lengteA CodeA lengteB CodeB lengteC CodeC Eenvoudig besturingssysteem SPR 9000 CodeA CodeB RAM CodeC SPR 9000 VSP KLG,0 Lader

  25. Absolute Lader • Verfijning • Programma NIET ALTIJD vanaf adres 0000 geladen • Meerdere programma’s in het geheugen! • Probleem • Adressen kloppen niet • Vertaler  symbooltabel (PT = 0)

  26. 1131100004 0000 2111100001 0001 1221100005 0002 9999999999 0003  A B 0000000010 0004 0000000000 0005 1131100104 0100 2111100001 0101 1221100105 0102 9999999999 0103  A B 0000000010 0104 0000000000 0105 1131100304 0300 2111100001 0301 1221100305 0302 9999999999 0303  A B 0000000010 0304 0000000000 0305 Absolute Lader HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 … HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1

  27. Absolute Lader • Lader kan programma niet wijzigen • Oplossing: • Vertaler moet correcte adressen genereren • Programmeur  Vertaler: “Te laden vanaf XXX” • Vertaler-directiefLAADGR laadadres • Vertaler aanpassen: • Stap 1: PT  Laadadres (i.p.v. 0) • Vertaler  Lader: “Te laden vanaf XXX” • Stap 2: Lengte en Laadadres in uitvoerbaar programma Next

  28. Stap 1 Lijnteller(LT = 1) Programmateller(PT = 0) Symbooltabel(ST = ) Lijn per lijn inlezen: Commentaarlijn:  doe niets ? NAAM:  (NAAM, PT) in ST Instructie?  PT  PT + 1 Constante(n)/RESGR n?  PT  PT + n Fout?  *** fout *** lijn LT: … LT  LT + 1 Aanpassing Vertaler Laadadres = 0 • LAADGR adres? •  Laadadres = adres; PT = adres

  29. Stap 1 Lijnteller(LT = 1) Programmateller(PT = 0) Symbooltabel(ST = ) Lijn per lijn inlezen: Commentaarlijn:  doe niets ? NAAM:  (NAAM, PT) in ST Instructie?  PT  PT + 1 Constante(n)/RESGR n?  PT  PT + n Fout?  *** fout *** lijn LT: … LT  LT + 1 Stap 2 Lijnteller(LT = 1) Symbooltabel(ingevuld in stap 1) Lijn per lijn inlezen: Commentaarlijn:  doe niets Instructie?  genereer code Constante(n)  genereer constante(n) RESGR n?  genereer n 0-constanten Fout?  *** fout *** lijn LT: … LT  LT + 1 Aanpassing Vertaler Schrijf lengte (= PT – laadadres) en Laadadres Laadadres = 0 • LAADGR adres? •  Laadadres = adres; PT = adres

  30. 0000000006 Hoofding 0000000300 1131100304 2111100001 1221100305 Programma-code 9999999999 0000000010 0000000000 #symbolen Symbool-tabel A 0304 B 0305 Absolute Lader Lengte  Laadadres  LAADGR 300 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 Bronprogramma Uitvoerbaar programma

  31. 0000000006 0000000006 0000000006 0000000100 0000000300 0000000000 1131100104 1131100304 1131100004 2111100001 2111100001 2111100001 1221100105 … 1221100305 … 1221100005 … Absolute Lader HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 LAADGR 100 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 LAADGR 300 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 Vertaler Vertaler Vertaler

  32. 1131100004 0000 2111100001 0001 1221100005 0002 9999999999 0003  A B 0000000010 0004 0000000000 0005 1131100104 0100 2111100001 0101 1221100105 0102 9999999999 0103  A B 0000000010 0104 0000000006 0000000000 0105 0000000006 0000000006 1131100304 0300 0000000100 0000000300 0000000000 2111100001 0301 1131100104 1131100304 1221100305 1131100004 0302 2111100001 2111100001 9999999999 2111100001 0303 1221100105 … 1221100305 …  A B 0000000010 0304 1221100005 … 0000000000 0305 Absolute Lader Lader

  33. Algoritme Lengte inlezen Opeenvolgende getallen inlezen  opeenvolgende geheugenplaatsen Start uitvoering int lengte, *adres; main() { lengte = getint(); adres = 0; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering op adres 0 */ } Absolute Lader , *laadadr; • Laadadres inlezen laadadr = (int *) getint(); adres = laadadr; (begin bij Laadadres) • Sprong Laadadres vanaf laadadr */ goto *laadadr;

  34. int lengte, adres, instr, *laadadr; main() { lengte = getint(); laadadr = (int *) getint(); adres = laadadr; while (lengte > 0) { *adres++ = getint(); lengte--; } /* start uitvoering vanaf laadadr */ } | Absolute Lader | Lengte  R2 | Adres  R1 LEZ | Lengte HIA R2,R0 HIA.a R1,0 LUS: VGL.w R2,0 VSP KLG,0 | Start LEZ | Instr BIG R0,0(R1+) AFT.w R2,1 SPR LUS EINDPR Absolute Lader | Laadadres  R3 LEZ | Laadadres HIA R3,R0 HIA R1,R3 (R3)

  35. Relocerende Lader • Nadeel absolute lader: • Programmeur moet vóór vertalinglaadadres kennen • Vertaler  Lader: “Hoe adressen aanpassen” • Relocatietabel • relatief adresbewerking

  36. 0000000006 0000000000 1131100004 2111100001 1221100005 0000 9999999999 0001 0000000010 0002 0003 0000000000 0004 #symbolen 0005 A 0004 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Vertaler  Relocerende Lader Lengte  Laadadres  9999999999 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1

  37. Vertaler  Relocerende Lader HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 Vertaler (1ste stap):

  38. PT LT 0 1 Vertaler  Relocerende Lader Vertaler (2de stap): 1 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 0000 +#LAADADRES#

  39. PT LT 1 2 Vertaler  Relocerende Lader Vertaler (2de stap): 2 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES#

  40. PT LT 2 3 Vertaler  Relocerende Lader Vertaler (2de stap): 3 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 1221100005 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  41. PT LT 3 4 Vertaler  Relocerende Lader Vertaler (2de stap): 4 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 1221100005 9999999999 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  42. PT LT 4 5 Vertaler  Relocerende Lader Vertaler (2de stap): 5 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 1221100005 9999999999 0000000010 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  43. PT LT 5 6 Vertaler  Relocerende Lader Vertaler (2de stap): 6 HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 1221100005 9999999999 0000000010 0000000000 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  44. PT LT 6 6 Vertaler  Relocerende Lader Vertaler (2de stap): HIA R1,A OPT.w R1,B-A BIG R1,B STP A: 10 B: RESGR 1 1131100004 2111100001 1221100005 9999999999 0000000010 0000000000 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  45. 0000000006 9999999999 1131100004 PT 6 2111100001 1221100005 9999999999 0000000010 0000000000 #symbolen A 0004 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Vertaler  Relocerende Lader 1131100004 2111100001 1221100005 9999999999 0000000010 0000000000 0000 +#LAADADRES# 0001 +#LAADADRES# 0001 -#LAADADRES# 0002 +#LAADADRES#

  46. Relocerende Lader • Twee stappen: • Stap 1: • Uitvoerbaar programma letterlijk  geheugen • Stap 2: Relocatie-stap: • Adressen aanpassen

  47. 0000000006 9999999999 1131100004 0300 1112323423 2111100001 1221100005 0000000000 0301 9999999999 5223241231 0302 0000000010 1231231231 0303 0000000000 4563453242 #symbolen 0304 A 0004 9231231231 0305 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Relocerende Lader Laadadres = 0300 Stap 1 1131100004 2111100001 1221100005 9999999999 0000000010 0000000000

  48. 0000000006 9999999999 1131100004 0300 1131100004 2111100001 1221100005 2111100001 0301 9999999999 1221100005 0302 0000000010 9999999999 0303 0000000000 0000000010 #symbolen 0304 A 0004 0000000000 0305 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Relocerende Lader Laadadres = 0300 Stap 2

  49. 0000000006 9999999999 1131100004 0300 1131100004 2111100001 1221100005 2111100001 0301 9999999999 1221100005 0302 0000000010 9999999999 0303 0000000000 0000000010 #symbolen 0304 A 0004 0000000000 0305 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Relocerende Lader Laadadres = 0300 Stap 2 1131100304 0000+0300 = 0300 1131100004 + 0300 = 1131100304

  50. 0000000006 9999999999 1131100004 0300 1131100304 2111100001 1221100005 2111100001 0301 9999999999 1221100005 0302 0000000010 9999999999 0303 0000000000 0000000010 #symbolen 0304 A 0004 0000000000 0305 B 0005 #relocatie 0000 +#LAADADRES# 0002 +#LAADADRES# Relocerende Lader Laadadres = 0300 Stap 2 1221100305 0002+0300 = 0302 1221100005 + 0300 = 1221100305

More Related