1 / 41

Multiprogrammering[1]: Ydre enheder og multiprogrammer

Multiprogrammering[1]: Ydre enheder og multiprogrammer. Datalogi 1F: Forår 2003 Jørgen Sværke Hansen cyller@diku.dk. Planen for idag. Samspil mellem CPU og ydre enheder: Generelt Kontrolregistre Afbrydelser Specifikt for Alpha AXP (kernemaskinerne) Multiprogrammering: Eksplicit I/O

kylan-vance
Download Presentation

Multiprogrammering[1]: Ydre enheder og multiprogrammer

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. Multiprogrammering[1]:Ydre enheder og multiprogrammer Datalogi 1F: Forår 2003 Jørgen Sværke Hansen cyller@diku.dk

  2. Planen for idag • Samspil mellem CPU og ydre enheder: • Generelt • Kontrolregistre • Afbrydelser • Specifikt for Alpha AXP (kernemaskinerne) • Multiprogrammering: • Eksplicit I/O • Implicit I/O Datalogi 1F: Multiprogrammering[1]

  3. Systemarkitektur CPU cache hukommelsesbus lager I/O bro I/O bus I/O styreenhed disk I/O styreenhed netkort I/O styreenhed skærm Datalogi 1F: Multiprogrammering[1]

  4. Kontrol af ydre enheder • De ydre enheder styres af styreenheder (eng.: controllers) • Styreenhederne udfører kontrolprogram specifikt for en type af ydre enheder • CPU og styreenhed udveksler data som led i kontrol af de ydre enheder • Kommunikationen mellem CPU og ydre enheder foregår via kontrolregistre placeret på styreenheden for den ydre enhed Datalogi 1F: Multiprogrammering[1]

  5. Synkronisering mellem styreenhed og CPU Hvordan opdager CPU ændringer i kontrolregistre: • Aktiv venten (eng.: polling): • En venteløkke, hvor CPU hele tiden læser indhold af kontrolregister • Afbrydelser: • Styreenhed signalerer til CPU at der er sket ændringer i kontrolregistre Datalogi 1F: Multiprogrammering[1]

  6. Synkronisering ved aktiv venten • Synkronisering sker via to bit: ready og start • ready - ændres af styreenhed og læses af CPU • 0 betyder at styreenheden ikke er klar til at modtage nye ordre • 1 betyder at den er klar • start - ændres af CPU og læses af styreenhed: • signal fra CPU om at styreenhed kan påbegynde en operation • Når start sættes, sættes ready til 0 (styreenhed kan ikke modtage en ny ordre) Datalogi 1F: Multiprogrammering[1]

  7. Udskrivning af tegn på seriel linie • Styreenhed er en UART = Universal Asynchronous Receiver-Transmitter • Kontrolregistre: • THR (Transmit Holding data Register): • Fungerer som start men samtidig som data register: • Skrivning igangsætter transmission (latch register) • LSR (Line Status control Register) • Bit 5 svarer til ready fra før Datalogi 1F: Multiprogrammering[1]

  8. Kontrolregistre på UART Datalogi 1F: Multiprogrammering[1]

  9. UART’en – tæt på RESET: LSR<5:5> = 1 repeat repeat until <store til THR> LSR<5:5> = 0 udsend THR bit for bit LSR<5:5> = 1 forever

  10. Programstump for aktiv ventenCPU siden main() { wrio(com1Lcr, 0x87); // choose divisor latch wrio(com1Dlm, 0x00); // set 9600 bps (MSB) wrio(com1Dll, 0x0C); // set 9600 bps (LSB) wrio(com1Lcr, 0x07); // set 8 bit, 2 stop bit wrio(com1Mcr, 0x0F); // set DTR and RTS for(char* p = line; *p; p++) { // indtil ’\0’ while ((rdio(com1Lsr) & 0x20) == 0) // venteløkke /* tom */; // gennemløbes 107000 gange/tegn wrio(com1Thr, *p); // skriv næste tegn til UART } } Datalogi 1F: Multiprogrammering[1]

  11. Adgang til kontrolregistre • Kontrolregistre har en I/O adresse: • COM1 starter ved I/O adresse 0x3F8 • Tilgås enten via specielle I/O instruktioner: • wrio r1, 0x3F8 # skriver tegn på seriel linie • Eller via alm. instruktioner gennem specielt lagerområde (lagerafbildet I/O): • stl r1, 0x8580007FA0 # Alpha AXP Datalogi 1F: Multiprogrammering[1]

  12. Inden vi går videre • Nu bliver det hele lidt mere kernemaskine specifikt – vi skal have lidt AlphaPC164SX information (KB5 – Kapitel 2): • PAL • I/O busser • I/O lagerområder • Afbrydelser • Vigtigste ydre enheder • Systemkald Datalogi 1F: Multiprogrammering[1]

  13. PAL • PAL = Priviliged Architecture Library • Erstatning for nye instruktioner kodet i mikrokode • Bruges også til systemkald • Eksempler: • PAL_halt varmstart af maskinen • PAL_wrent skriv indhopsværdi • PAL_callsys systemkald • PAL_rti retur fra afbrydelse Datalogi 1F: Multiprogrammering[1]

  14. I/O busser i Alpha AXP • ISA (Industry Standard Architecture): • 8 MHz, 16 bit bus, 2 klokcykler per overførsel: • max. 8,33 MB/s • Udvidelse EISA: 32-bit bus • Max. 33 MB/s • PCI (Peripheral Component Interconnection): • I dag den mest almindelige • 33 MHz, 32-bit bredde = max. 132 MB/s • Findes også i 66 MHz og 64 bit udgaver samt PCI-X (533 MHz og 64 bit) Datalogi 1F: Multiprogrammering[1]

  15. I/O lagerområder • CPU adresserer: • Fysisk lager (typisk op til 1 GB) • Ydre enheder (typisk PCI, men også ISA) • Interne registre: • Konfigurering af Alpha’ernes PAL-kode • Adresserum: • 32 bit på Intel PC: (kan udvides til 36-bit) • ”64 bit” på Alpha = 40 bit = rigeligt med plads Datalogi 1F: Multiprogrammering[1]

  16. Adgang til ISA registre • PC • Registrene ligger i de lavere fysiske adresser: kunne adresseres per byte • Alpha164SX: • Et register per 32 byte • Start på adresse: 0x85.8000.0000 • Makroer: wrio() og rdio() • Eksempel: COM1 (0x3F8) får adressen: 0x85.8000.0000 + 0x3F8*0x20 = 0x85.8000.7FA0 Datalogi 1F: Multiprogrammering[1]

  17. Udsnit af lagerorganisering på Alphamaskinerne • PAL-kode + opstartskode • Symbolsk debugger • Dataområde til debugger og kernestak • Frit lager • PCI sparse memory: • Delt lager mellem CPU og ydre enheder • PCI sparse I/O: • kontrolregistre 0x0000.0000 1 MB 0x0010.0000 1 MB 0x0020.0000 1 MB 0x0030.0000 29 MB 0x80.0000.0000 0x85.8000.0000 0x85.FFFF.FFFF Datalogi 1F: Multiprogrammering[1]

  18. afbrydelse Systemarkitektur CPU cache hukommelsesbus lager I/O bro I/O bus I/O styreenhed disk I/O styreenhed netkort I/O styreenhed skærm Datalogi 1F: Multiprogrammering[1]

  19. Afbrydelser på Alpha’erne • 33 afbrydelser i alt: • 16 for ISA • 17 for PCI • Eksempler på ISA afbrydelser: 0 Timer 6 Diskette 1 Tastatur 7 Parallelport 3 COM2 12 Mus 4 COM1 14/15 Harddisk/CDROM Datalogi 1F: Multiprogrammering[1]

  20. Hvornår afbrydes ? • En afbrydelse kan blive genereret af en ydre enhed på et vilkårligt tidspunkt MEN: • Forskellige ydre enheder kan have forskellige tolerancetærskler med hensyn til hvor hurtigt en afbrydelse skal serviceres • CPU’en kan have opgaver, der ikke må afbrydes Datalogi 1F: Multiprogrammering[1]

  21. Niveauer for afbrydelser 0 normal tilstand 3 Ydre enheder, lav prioritet 4 Ydre enheder, høj prioritet 5 ur 6 strømafbrydelse 7 Maskincheck (bruges ikke) Styres af OS med PAL_swpipl men også automatisk ved afbrydelser Datalogi 1F: Multiprogrammering[1]

  22. Tillad/bloker for afbrydelser • Den enkelte ydre enhed kan sættes op til at afbryde eller ej • Ydre enheder bliver ved med at afbryde indtil der kvitteres for afbrydelsen • Når en afbrydelse modtages på niveau i sættes niveauet til i og sættes først ned når afbrydelsen er behandlet • Afbrydelse tillades KUN hvis ydre enhed har højere niveau end det aktuelle • CPU kan blokere for afbrydelser: • PAL_swpipl(7) Datalogi 1F: Multiprogrammering[1]

  23. Installation af afbrydelsesroutine • PAL kaldet PAL_wrint • a0 er adressen for routinen • a1 er typen: 0 ekstern afbrydelse 1 aritmetisk fejl 3 ugyldig ordre 5 systemkald • Eksempel: lda a0, ADDR lda a1, 0 call_pal PAL_wrent Datalogi 1F: Multiprogrammering[1]

  24. PAL håndtering af afbrydelse • Ved en afbrydelse hoppes til PAL koden på adresse 0x100 • PAL koden undersøger om afbrydelsen har et tilstrækkeligt højt afbrydelsesniveau: • Hvis ikke, returneres uden videre • Ellers skiftes til kernetilstand (hvis nødvendigt), og de registre, som afbrydelseshåndteringen påvirker, gemmes på stakken Datalogi 1F: Multiprogrammering[1]

  25. Stakramme for afbrydelser register a2 register a1 register a0 global pointer gp programtæller pc statusregister ps Datalogi 1F: Multiprogrammering[1]

  26. Start af afbrydelsen • ps registeret indeholder kernetilstanden • Bit 3 indikerer kernetilstand • Bit 0-2 indikerer afbrydelsesniveau • gp indeholder kernens global pointer • a2 indeholder afbrydelsestypen 1 periodisk 3 ekstern afbrydelse Datalogi 1F: Multiprogrammering[1]

  27. Afslutning af afbrydelsen • Kvitter for afbrydelsen i den ydre enhed: • Skrivning til kontrolregister • Gælder ikke for uret (sker automatisk) • Udfør kaldet: • call_pal PAL_rti Datalogi 1F: Multiprogrammering[1]

  28. Tegnudskrivning via afbrydelser main() { forbid(); // luk for afbrydelser wrio(com1Lcr, 0x87); // divisor latch …… // som forrige eksempel wrio(com1Ier, 0x02); // set TX empty enable wrent(ent_int, o); // set interrupt entry point p = line, finished = 0; permit(); // åbn for afbrydelser char c=*p++; wrio(com1Thr, c); // skriv 1. tegn while (!finished) ; // vent på at vi er færdige wrio(com1Ier, 0x00); // luk for afbrydelser fra // UART } Datalogi 1F: Multiprogrammering[1]

  29. Afbrydelsesroutinen extern ”C” void KInterruptHandler () { if ((rdio(com1Iir) & 6) == 2) { // kvittering if(!finished) wrio(com1Thr, *p++); // skriv // tegn if(!*p) finished = 1; } } Datalogi 1F: Multiprogrammering[1]

  30. Vigtigste ydre enheder • PC16550 UART (har vi set) • Olicom OC-2173 ISA 10 Mbit/s Ethernetkort • Dallas Semiconductor 1287 TOY/RTC (Time Of Year/Real Time Clock) • Holder styr på klokkeslættet • Genererer automatiske afbrydelser Datalogi 1F: Multiprogrammering[1]

  31. Systemkald • PAL kaldet callsys • Kan kun bruges fra brugertilstand, ikke kernetilstand (omvendt privilegeret) • Opbygger en stak ramme magen til en afbrydelse Datalogi 1F: Multiprogrammering[1]

  32. Multiprogrammering • Eksplicit ressourcedeling • Overlappende læsning • Implicit ressourcedeling Datalogi 1F: Multiprogrammering[1]

  33. Eksplicit ressourcedeling while(true) { <læs linie (transaktion) fra terminal 1>; <udfør transaktion til/fra pladelageret>; <læs linie (transaktion) fra terminal 2>; <udfør transaktion til/fra pladelageret>; <læs linie (transaktion) fra terminal 3>; <udfør transaktion til/fra pladelageret>; } Datalogi 1F: Multiprogrammering[1]

  34. Terminal 1 Terminal 3 Terminal 2 Pladelager Transaktionssystem:liniebaseret indlæsning læs linie læs linie læs linie læs linie udfør trans- aktion udfør trans- aktion udfør trans- aktion Datalogi 1F: Multiprogrammering[1]

  35. Overlappende læsning while(true) { if (<terminal 1 klar>) { <læs næste tegn>; if (<sidste tegn i linie>) <udfør transaktion til/fra pladelageret>; } if (<terminal 2 klar>) { <læs næste tegn>; if (<sidste tegn i linie>) <udfør transaktion til/fra pladelageret>; } if (<terminal 3 klar>) { <læs næste tegn>; if (<sidste tegn i linie>) <udfør transaktion til/fra pladelageret>; } } Datalogi 1F: Multiprogrammering[1]

  36. Terminal 1 Terminal 3 Terminal 2 Pladelager Overlappende læsning (2) læs tegn læs tegn læs tegn læs tegn læs tegn læs tegn læs tegn læs tegn udfør trans- aktion Datalogi 1F: Multiprogrammering[1]

  37. Overlap læsning med besvarelse while(true) { if (indlæs_1 && <terminal 1 klar>) { <læs næste tegn>; if (<sidste tegn i linie>) transaktion_1 = TRUE, indlæs_1 = FALSE; } if (transaktion_1 && <pladelager klar>) { <læs næste blok fra pladelager>; if (<post fundet> || <sidste blok læst>) udskriv_1 = TRUE, transaktion_1 = FALSE; } if (udskriv_1 && <terminal 1 klar>) { <skriv næste tegn>; if (<sidste tegn i svar>) indlæs_1 = TRUE, udskriv_1 = FALSE; } // det samme for terminal 2 og 3 } Datalogi 1F: Multiprogrammering[1]

  38. Implicit ressourcedeling Vi vil have multiprogrammer: proces 1 { while (TRUE) { <læs linie fra terminal 1>; < udfør transaktioner>; } } proces 2 { while (TRUE) { <læs linie fra terminal 2>; < udfør transaktioner>; } } proces 3 { while (TRUE) { <læs linie fra terminal 3>; < udfør transaktioner>; } } Datalogi 1F: Multiprogrammering[1]

  39. tegn klar tegn klar tegn klar CPU CPU CPU tegn læst tegn læst tegn læst Multiprogrammeret transaktionssystem • Blokerende systemkald sætter proces til at vente, f.eks., fgetc(stdout). Proces 1 Proces 2 Proces 3 Datalogi 1F: Multiprogrammering[1]

  40. Opsummering • Ydre enheder: • Synkronisering • aktiv venten • Afbrydelser • Hvordan sker det hele på Alpha’erne? • Multiprogrammering: • Eksplicit versus implicit ressourcedeling Datalogi 1F: Multiprogrammering[1]

  41. Kilder • Disse slides er baseret på KB4: Kapitel 1-3, KB5: Kapitel 2, samt slides fra tidligere forelæsere på Dat 1F Datalogi 1F: Multiprogrammering[1]

More Related