Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Multiprogrammering[1]: Ydre enheder og multiprogrammer Datalogi 1F: Forår 2003 Jørgen Sværke Hansen

Lignende præsentationer


Præsentationer af emnet: "Multiprogrammering[1]: Ydre enheder og multiprogrammer Datalogi 1F: Forår 2003 Jørgen Sværke Hansen"— Præsentationens transcript:

1 Multiprogrammering[1]: Ydre enheder og multiprogrammer Datalogi 1F: Forår 2003 Jørgen Sværke Hansen cyller@diku.dk

2 Datalogi 1F: Multiprogrammering[1] 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

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

4 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

5 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

6 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)

7 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

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

9 9 UART’en – tæt på RESET: LSR = 1 repeat repeat until LSR = 0 udsend THR bit for bit LSR = 1 forever

10 Datalogi 1F: Multiprogrammering[1] 10 Programstump for aktiv venten CPU 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 }

11 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

12 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

13 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

14 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)

15 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

16 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

17 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 0x0010.0000 0x0020.0000 0x0030.0000 0x80.0000.0000 0x85.8000.0000 0x85.FFFF.FFFF 1 MB 29 MB

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

19 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 COM212 Mus 4 COM114/15 Harddisk/CDROM

20 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

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

22 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)

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

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

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

26 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

27 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

28 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 }

29 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; }

30 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

31 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

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

33 Datalogi 1F: Multiprogrammering[1] 33 Eksplicit ressourcedeling while(true) { ; }

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

35 Datalogi 1F: Multiprogrammering[1] 35 Overlappende læsning while(true) { if ( ) { ; if ( ) ; } if ( ) { ; if ( ) ; } if ( ) { ; if ( ) ; }

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

37 Datalogi 1F: Multiprogrammering[1] 37 Overlap læsning med besvarelse while(true) { if (indlæs_1 && ) { ; if ( ) transaktion_1 = TRUE, indlæs_1 = FALSE; } if (transaktion_1 && ) { ; if ( || ) udskriv_1 = TRUE, transaktion_1 = FALSE; } if (udskriv_1 && ) { ; if ( ) indlæs_1 = TRUE, udskriv_1 = FALSE; } // det samme for terminal 2 og 3 }

38 Datalogi 1F: Multiprogrammering[1] 38 Implicit ressourcedeling Vi vil have multiprogrammer: proces 1 { while (TRUE) { ; } proces 2 { while (TRUE) { ; } proces 3 { while (TRUE) { ; }

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

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

41 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


Download ppt "Multiprogrammering[1]: Ydre enheder og multiprogrammer Datalogi 1F: Forår 2003 Jørgen Sværke Hansen"

Lignende præsentationer


Annoncer fra Google