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

Multiprogrammering[1]: Ydre enheder og multiprogrammer

Embed Size (px)

DESCRIPTION

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

Citation preview

Multiprogrammering[1]:Ydre enheder og multiprogrammer

Datalogi 1F: Forår 2003

Jørgen Sværke Hansen

[email protected]

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

Datalogi 1F: Multiprogrammering[1]

3

Systemarkitektur

CPU

cache

lagerI/O bro

I/O styreenheddisk

I/O styreenhednetkort

I/O styreenhedskærm

hukommelsesbus

I/O bus

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

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

Datalogi 1F: Multiprogrammering[1]

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

0x0010.0000

0x0020.0000

0x0030.0000

0x80.0000.0000

0x85.8000.0000

0x85.FFFF.FFFF

1 MB

1 MB

1 MB

29 MB

Datalogi 1F: Multiprogrammering[1]

18

Systemarkitektur

CPU

cache

lagerI/O bro

I/O styreenheddisk

I/O styreenhednetkort

I/O styreenhedskærm

hukommelsesbus

I/O bus

afbrydelse

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 afbrydelser0 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 afbrydelse1 aritmetisk fejl3 ugyldig ordre5 systemkald

• Eksempel: lda a0, ADDRlda a1, 0call_pal PAL_wrent

Datalogi 1F: Multiprogrammering[1]

24

PAL håndtering af afbrydelse1. Ved en afbrydelse hoppes til PAL

koden på adresse 0x1002. PAL koden undersøger om

afbrydelsen har et tilstrækkeligt højt afbrydelsesniveau:

1. Hvis ikke, returneres uden videre2. 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 afbrydelsestypen1 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 afbrydelsermain() { 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

Transaktionssystem:liniebaseret indlæsning

Terminal 1

Terminal 3

Terminal 2

Pladelager

læslinie

læslinie

læslinie

læslinie

udførtrans-aktion

udførtrans-aktion

udførtrans-aktion

Datalogi 1F: Multiprogrammering[1]

35

Overlappende læsningwhile(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

Overlappende læsning (2)

Terminal 1

Terminal 3

Terminal 2

Pladelager

læstegn

udførtrans-aktion

læstegn

læstegn

læstegn

læstegn

læstegn

læstegn

læstegn

Datalogi 1F: Multiprogrammering[1]

37

Overlap læsning med besvarelsewhile(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 ressourcedelingVi 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

Multiprogrammeret transaktionssystem

Proces 1

Proces 3

Proces 2

tegnklar

CPUtegnlæst

tegnklar

CPUtegnlæst

tegnklar

CPUtegnlæst

• Blokerende systemkald sætter proces til at vente, f.eks., fgetc(stdout).

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