Dagens tema: Oversikt over min del av IN147A Bit-mønstre Tallsystemer MIPS assemblerspråk C Datatyper... samt for de som tar hele IN147 Operativsystemer Parallellisering Pensum Eksamen Veien videre Ark 1 av 19 Forelesning 15.5.2000
Bit-mønstre Det grunnleggende for all programmering på maskin-nært nivå: Alt er bare bit-mønstre! Programmereren velger hva et ord med fire byte skal tolkes som: Fire tegn (ISO 8859-1 hos oss). Ett, to, fire eller åtte heltall med eller uten fortegns-bit. Et 32-bits flyt-tall (eller halvparten av et 64-bits flyt-tall). En MIPS-instruksjon. Valget foretas ved å velge hvilke operasjoner som skal foretas på bit-mønsteret. Forelesning 15.5.2000 Ark 2 av 19
Representasjon av heltall Alle heltall kan angis med vilkålig grunntall. Vi er interessert i binære tall, oktale tall (notasjon 0177), desimal tall (notasjon 127), og heksadesimale tall (notasjon 0x7f). Overgangen mellom binære, oktale og hex-tall er triviell; omforming mellom desimale og binære krever multiplikasjon/divisjon med 10. Flyt-tall Standarden IEEE 754 for 32-bits flyt-tall: 31 30 23 22 0 S Eksponent Mantisse S er fortegnet; 0 for positivt, 1 for negativt. Grunntallet er 2. Eksponenten er på 8 bit og lagres med fast tillegg 127. Mantissen er normalisert og på 24 bit, men kun de 23 etter binærkommaet lagres. Forelesning 15.5.2000 Ark 3 av 19
Programmering i assemblerspråk Når programmerer man i assemblerspråk? Når hastighet er det viktigste. Når koden må ta ekstremt liten plass. Når man trenger full kontroll over den genererte koden. Når man trenger tilgang til spesielle maskinressurser. Spesielle operasjoner Følgende operasjoner finnes sjelden i høynivåspråk: Maske-operasjoner Skift-operasjoner (logisk og aritmetisk skift; rotasjoner). Forelesning 15.5.2000 Ark 4 av 19
Hvilke operasjoner finnes? (De fete operasjonene er pseudoinstruksjoner.) Heltallsaritmetikk add, addu, addi, addiu, sub, subu +, mult, multu, div, divu, Flyttallsaritmetikk abs.x, neg.x v, v add.x, sub.x, mul.x, div.x +,,, cvt.x.y Omforming Maske-operasjoner and, andi, or, ori, xor, xori,, Skifting og rotasjoner sll, sllv, srl, srlv sra, srav rol, ror Logisk skift Aritmetisk skift Rotasjon Sammenligninger slt, sltu, slti, sltiu c.eq.x, c.lt.x, c.le.x < (heltall) =,<, (flyt-tall) Forelesning 15.5.2000 Ark 5 av 19
Flytting mellom registre move mflo, mfhi Kopiér register Kopiér fra lo/hi mfc1, mtc1 Kopiér fra/til C 1 Lesing og skriving la, li, lui lw, lh, lhu, lb, lbu sw, sh, sb Legg inn konstant Les data fra RAM Skriv data til RAM Hopp b, j, jr Hopp beq, bne, ble, bleu,... Hopp om =,,<,... bc1f, bc1t Hopp om C 1 T/F jal, jalr Funksjonskall Diverse andre nop Gjør ingenting Forelesning 15.5.2000 Ark 6 av 19
Programmering i C Når programmerer man i C? Når man liker språket. Når man utfører systemarbeid i UNIX (og noen andre operativsystemer). Når hastighet er viktig. Når man vil være sikker på at programmet kan gå på alle mulige maskiner. Viktig Separatkompilering. Koplingen mot assemblerspråk. Pekere og vektorer. Operasjoner på pekere, pekere kontra vektorer; referanseparametre. Hvordan opprettes objekter? Husk å fjerne dem! Forelesning 15.5.2000 Ark 7 av 19
Pekere Grunnlaget for å forstå pekere: En peker er en adresse i hurtiglageret! Det viktigste når det gjelder pekere, er å huske på hva som er en peker og hva som blir pekt på. int a = 5, *p; p = &a; /* Kopiering av pekerverdi */ *p = 4; /* Kopiering av heltallsverdi */ p = 3; /* Typefeil! */ Operatoren = kopierer alltid en verdi; operandenes type angir om dette er en pekerverdi eller en annen type verdi. Pekere og vektorer Det er en fast sammenheng mellom pekere og vektorer: a[i] *(a+i) Forelesning 15.5.2000 Ark 8 av 19
Datatyper Hva avgjør valget av datatype? Hvor lett er det å programmerer den? Bidrar den til å forenkle problemet? Hvor rask er den å bruke? Hvor stor plass tar den? Hvor dynamisk er den? Viktigste alternativer Pekere. Matriser. Tekster. Lister. Ringbuffere. Forelesning 15.5.2000 Ark 9 av 19
Operativsystemer I kurset har vi fokusert på UNIX, men prinsippene gjelder i større eller mindre grad for alle operativsystemer. Hva er en prosess? En prosess er et program under kjøring. Stakk Data Kode Hvordan oppstår prosesser Prosesser lages med fork. De kan endre innhold med execve. Forelesning 15.5.2000 Ark 10 av 19
Hvordan overføres parametre? Programparametrene overføres som de to første parametrene til main: int main(int argc, char *argv[]) Hva er omgivelsen? Omgivelsen er en samling definisjoner om den enkelte bruker og hans eller hennes preferanser. Definisjonene er av typen NAME=dag PATH=/local/bin:/bin:/usr/bin:. PRINTER=prent De overføres på én av to måter: 1. via den globale variabelen extern char **environ; 2. som tredje parameter til main: int main(...,..., char **env) Forelesning 15.5.2000 Ark 11 av 19
Parallellitet Formålet med parallellitetskontrollen er å forhindre kappløp ved å sikre kritiske regioner og hindre vranglås og utsulting. Hvorfor programmerer man parallelt? Noen problemer er naturlig parallelle. For å få opp hastigheten. Teknikker Følgende teknikker er blant de viktigste: UNIX-prosesser med wait samt UNIX-signaler signal og pause. UNIX-rør: pipe, read og write. Felles lager, lettvektsprosesser Semaforer Monitorer Meldinger Linda Forelesning 15.5.2000 Ark 12 av 19
Semaforer En semafor er en datastruktur med en teller og en kø: Verdi Kø - - - Semaforer har to operasjoner: down(&s) Hvis verdien til s er > 0, vil den bli senket med 1. Hvis ikke, vil prosessen bli blokkert og dens nummer lagt til køen til s. up(&s) Hvis køen til s er tom, økes verdien med 1. Hvis ikke, fjernes ett prosessnummer fra køen, og den tilhørende prosessen startes opp igjen. Beskyttelse av kritisk region semaphore mutex = 1; /* Mutual exclusion */. down(&mutex); Kritisk region up(&mutex); Forelesning 15.5.2000 Ark 13 av 19
Meldinger Brukerne kan definere en kø av meldinger: Kø - - - - Køer har to operasjoner: send(q, kode, &data) legger data med angitt kode i køen; kallet blokkerer om køen er tom. receive(q, kode, &data) henter data med angitt kode i køen; kallet blokkerer inntil ønskede data finnes. Forelesning 15.5.2000 Ark 14 av 19
Linda I Linda skjer synkroniseringen og dataoverføringen via et eget tuppellager. Produment-konsumentproblemet med Linda void producer(void) { while (1) { data = produce_item(); in("free"); out("data", data); } } void consumer(void) { while (1) { in("data",?data); out("free"); consume_item(data); } } /* Initiering: */ for (i = 1; i <= N; ++i) out("free"); Forelesning 15.5.2000 Ark 15 av 19
Pensum Følgende er pensum i min del av kurset: Alt som er forelest. Kapittel 3.1 3.11, 4.1 4.5 samt de første seks sidene av 4.8. Vedlegg A.1 A.10 I tillegg kommer det som Sigbjørn definerer som pensum. Se forøvrig nettsiden til kurset. Forelesning 15.5.2000 Ark 16 av 19
Eksamen Eksamen er mandag 29. mai klokken 9. Den varer 4 timer (for IN 147A) eller 6 timer. Hjelpemidler Alle trykte og skrevne hjelpemidler er tillatt. Batteridrevet lommekalkulator er lov, hvis den ikke inneholder programmer når eksamen starter. Den vil neppe være til særlig hjelp. Hva slags oppgaver kan forventes fra meg? Programmering i C og assembler, for eksempel oversettelse. Et eller annet om datastrukturer. Semaforer og annen parallellstyring (ikke IN147A). Se ellers tidligere års oppgaver. Forelesning 15.5.2000 Ark 17 av 19
Sjekk godkjenningslister Det skal være slått opp lister over hvem som har fått godkjent obligatoriske oppgaver. Sjekk disse! Ta kontakt med gruppelærer (eller meg) hvis du mener det er gjort feil. Problemer under eksamen Eksamensdagen vil Sigbjørn og jeg gå runde i eksamenslokalet klokken 10 (og klokken 14 for IN147). Da er det anledning til å stille spørsmål. Forelesning 15.5.2000 Ark 18 av 19
Veien videre Om du liker programmeringsspråk, anbefales IN102 Programmeringslaboratorium IN211 Programmeringsspråk IN310 Kompilatorteknikk operativsystemer, anbefales IN-MOS Moderne operativsystemer IN305 Parallellprogrammering & op.sys parallellitet og kommunikasjon, anbefales IN270 Datakommunikasjon digitalteknikk, anbefales IN240 Digital systemkonstruksjon IN241 VLSI-konstruksjon Forelesning 15.5.2000 Ark 19 av 19