Planen for idag Opsamling Samspil mellem CPU og ydre enheder: Generelt Kontrolregistre Afbrydelser Specifikt for Alpha AXP (kernemaskinerne) Multiprogrammeringseksempel: Webserver CPU cache lager Systemarkitektur disk I/O bro hukommelsesbus netkort I/O bus skærm 1 2 Kontrol af ydre enheder De ydre enheder styres af styreenheder (eng.: controllers) Styreenhederne udfører et 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 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 3 4 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) 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 5 6 1
Kontrolregistre på UART Transmit Holding Data Register ST-ordrer Centralenhed (CPU) Fælles registre LD-ordrer Line Status Control Register Data bus drivers and registers Handshaking logic UART en tæt på Serial communications interface Interrupt request Read Write Status register Control register Data in buffer register 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 Data in shift register Serial input Data out shift register Serial output Udlæses bit for bit Sættes når enheden er klar Address decoder Chip Select Data out buffer register Styreenhed (UART) 7 Address (from bus) Clock 8 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 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 9 10 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 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 11 12 2
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) I/O lagerområder CPU adresserer: Fysisk lager (typisk op til 4 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 13 14 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 15 Udsnit af lagerorganisering på Alphamaskinerne 0x0000.0000 0x0010.0000 0x0020.0000 0x0030.0000 0x80.0000.0000 0x85.8000.0000 0x85.FFFF.FFFF 1 MB 1 MB 1 MB 29 MB 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 16 CPU cache lager Systemarkitektur disk I/O bro hukommelsesbus netkort I/O bus skærm 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 17 18 3
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 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 19 20 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) Installation af afbrydelsesroutine PAL kaldet PAL_wrent 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 21 22 PAL håndtering af afbrydelse Stakramme for afbrydelser 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 register a2 register a1 register a0 global pointer gp programtæller pc statusregister ps 23 24 4
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 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 25 26 Tegnudskrivning via afbrydelser main() { forbid(); wrio(com1lcr, 0x87); wrio(com1ier, 0x02); // luk for afbrydelser // divisor latch // som forrige eksempel // 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 27 Fang en afbrydelse.ent ent_int.globl ent_int ent_int: SAVE_REGS(sp) br t0,1f 1: ldgp gp,(t0) lda pv,kinterrupthandler jsr ra,(pv) ldgp gp,(ra) REST_REGS(sp) call_pal PAL_rti.end ent_int 28 Afbrydelsesroutinen Vigtigste ydre enheder extern C void KInterruptHandler () { if ((rdio(com1iir) & 6) == 2) { // kvittering if(!finished) wrio(com1thr, *p++); // skriv // tegn if(!*p) finished = 1; 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 29 30 5
2 ; & & Systemkald PAL kaldet callsys Kan kun bruges fra brugertilstand, ikke kernetilstand (omvendt privilegeret) Opbygger en stak ramme magen til en afbrydelse 0XOWLSURJUDPPHULQJVHNVHPSHO Z VHUYHU 31 32.OLHQWVHUYH NRPPXQLNDWLRQ Klient Server! "# #$ forespørgsel 1HWY UNVVHUYHUVWUXNWXU LMNPOQ RTS U#Q MVW*XS X*Y Z*[ \ ]*^ _` abadc ]*^#c e ` f c#g*h#ijf k#g*l c f m n op qrs n ptt#u v*wq x y qz { T~# d ƒ* # j #ƒ ˆ Š *Œ * Ž #ƒ* # j #ƒ ˆ Š # dƒi *Œ Afkod forespørgsel * T %'& (*)+*, -./) 0 svar Behandl forespørgsel Beregn svar @#A B C#D*E F 132 45 4 64 7 2 < 8 5 9 6 9 =#=#7 :3; > 695 > 4? 132 45 4 64 7 8 5 96 GIHJ K 33 34 (QNHOWWU GHW VHUYHU š œž Ÿ! Š 3 3 Ÿ3œ œ «ª '±'²Š³ µ!±! 3 Š ¹µ3 3ª'µ3 ª º» ¼!½3¾¼ 'ÀÁÂÀà à ¾Ã Ä Å!ÆǾ 6HUYHð Pñóò IOHUñ SURFHVVHU ü3ýëþÿ #ÿ û 'ÿ û û #ú û û û Iùú û È3ÉËÊÌ#Í ÎÌÏ Ð#Ñ*Ò Ó éß*ê ì'ã äå Þ*æ#ã ç í Ý á ã#ß*ê#îjá ï#ß ãç ç è ß æåà å Ü'Ý Þ*ßIàTáTâã á äã#å#æ#ã á ÔÖÕ *Õ Ø Õ Ø ÙIÚÛ Ø ßIë*åá ôöõž!" # $ %!" # $ % )*' "+ #", ##" )*' "+ #", ##" #' #" #" (" #' #" #" (" øšùú û 35 36 6
G n n š Ó ë ë 6HUYH P IOHU SURFHVVHU!" #%$'& ( )+*-,/.01231451016 6 76 8 9:;7 < =?>@ A BDC@ BE>F GHJIKB3LM NOPQRSPTNORDUVUVRW SRXJYRZW []\\RTW SR ^J_`bacEdae fg3hid`jkgllg`m )OHUWU GHW VHUYHU ª «±'²³ ±D µ±v µ ¹ º»½¼V¾À -ÁõÄ-¾-ÅÀƾÀĵǵȾVÉµÇ ÄÊ Ë Ì Í-ÎÃϵÐ-ÑÀÐÒ Ò Ó-Ò Ô Õ³Ö Ó Ø Ù³Ú Û ÜÝßÞàܳá âvãµä ã³å Ûµæ-ç èµéêµë-ìé'ívéàîµï-ì ð ñtòó ôõ-ö ùøúßúßòó û ò ü ýþÿ ÿ ÿ Ãÿ ÿ o?pq r sdtq sepuvw xyz{ ~ T TyJƒ ˆDŠTˆ Œ Ž ˆ DŠT DŠ ˆ Ê ˆ ˆ DŠ! " #%$ & 3,45# +2. + - (%#*.!0/%"! 1%" + 2"! ' " (%"! "! #*),+! 7 )%+! œdžÿž J ž 3 %ž T ž / D 37 6! #%$ 38 + QGHOVHVVW\UHWVHUYHU 8 9;:<=?>@ AB CD?= EF H;I JKL M N M OO M L JOPQSRTKUVW XVUJK YZV?[JSUL\ JOP O?]SJ^ _ `abc d efg hsfisfsjkl m o5pqtrstsu u vu w x yzv { ~ Z ƒ Z ƒ? ˆ Š ŒZ? Ž š š š œ žsœÿš ª««S ç è é êìë ÕÖ% ² ³ Ó 0 ± ÎÐÏ5Ñ Á Ã%Ä*Å Æ0Ç%È Æ µ % Ò2Ó2Ô É%Ê Ë2Ì Ê Í ¹º»%¼ ½*¾% À øúù øüû ýzþÿù ÜÝ Þ ß*à á â%ã%ß2ä á ß,åÐÝ â,æ íîìï ð ñóò ôõ ö ØÙ,Ú Û 39 Eksempel: Flash webserveren Asymmetrisk flerproces hændelsesstyret Brug hjælperprocesser/tråde ved blokerende operationer Har brug for interproceskommunikation (IPC).0/21435 LCM? DFE =?AG >IH;!> :<;=;> ;> / 36 789 NIO P KBG B J ; BK ;>?A@CB > c!d e dga X!Y Z [(\ c!d e dgf ^ [ e ] [ \ Z ^<_ `4a b h i h j k Q?"R T O P?AG B = K"?UVB?CW O =; S @CB > l m n o n(p # $ % & %(' )+*-, )+*-,! "! " 40 0Š- 4Œ Ž( rtssu v w4x"yiv z{ ~ A ƒ ~ ˆ q )ODV PPDS Ÿž I C A A! gª!«! ª ( ( (š 4œ A± ² ³ )ODV )LOµ,2 ¹ Fº¼»+½ ¾¼½+!ÀÂÁ0½-üÄ0½Å Æ ÇÈÇÈ ÊÉ Ë Ì0ÍFÌ ÎÐÏ Ñ ÌÊÒ Ô-ÕÂÖØ Ù+ÚÊÛ Ù+ÛÝÜFÞÚ+ßáàÝâ ãfä0ûgåê!æfå¼àçåèü0ãåãêâ è¼úêû é+ú+ß+êúfæ àýâ "ßÚÊÛ2è¼ÚÊÛ ÙFÛÂÜFÞÚ+ß ìíúêû2è¼úêû Ù+ÛÝÜFÞÚ+ßîê!å-ïðæ0ÚÊÛ2è¼Ú0æñàÝâ ãfäåæfå¼àçåóò+æ0úêïîåà éf ÜÊê!ÚÊÛçÚ ìíúêû2è¼úêû Ù+ÛÐôÊè¼ÚÊÛgå¼àtêÜ-ïàÝÛÂÜÊ Ú0ÛÝÚ õ ò+êü0öåöñúê ß¼Ú¼ß! çü0ûøéfûøò¼ã üý þû ÿ ÿ Dobbelt buffering/caching undgås ùú û 41 42 7
Flash resultater Afprøvning: kunstig genereret arbejdsbelastning forespørgselsmønstre opsamlet fra den virkelige verden Resultater: 30% - 50% procent højere ydelse end kommercielle web servere (men kan til dels skyldes mindre funktionalitet). Mere om Flash Flash: An Efficient and Portable Web Server: Vivek S. Pai, Peter Druschel, Willy Zwaenepoel, i Proceedings of the USENIX 1999 Annual Technical Conference http://www.cs.princeton.edu/~vivek/flash/ 43 44 Opsummering Kilder Ydre enheder: Synkronisering aktiv venten Afbrydelser Hvordan sker det hele på Alpha erne? Multiprogrammering: processer, tråde og tilstandsmaskiner Disse slides er delvist baseret på indholdet af Datalogi 1F kursusbøgerne samt Operating System Concepts 6. udgave 45 46 8