Vi har nå dekket det mest grunnleggende av C. Det blir ikke så veldig mange flere C-oppgaver. Det som gjenstår å lære om C, er spredt over de kommende forelesningene og gruppetimene, og handler for det meste om nettverk og kommunikasjon mellom prosesser. Jeg legger også ut teorioppgavene fra tidligere år. Bruk tiden der du har behov.
Jeg planlegger å kanskje arbeide med oppgaven nedenfor i gruppetimen hvis det blir tid. Dere behøver ikke å gjøre den selv, men det er selvfølgelig åpent for dem som har lyst:
Arbeid videre med programmet gull som fikk debugging-støtte sist uke:
- Bruk ringbufferet vi lagde i uke 37 for å lagre gullkornene (
rbuf.h; ligger allerede i mappen) - Lag et nytt menyvalg der brukerne av programmet kan legge til sine egne gullkorn
- Se til at programmet bruker minne på en fornuftig måte med
valgrindeller et annet verktøy.
Beskriv hva som skjer når en bruker gjør et tastetrykk på en terminal knyttet til et flerbruker-system. Svarer systemet forskjellig for preemptive eller ikke-preemptive systemer? Hvorfor eller hvorfor ikke?
Tidligere versjoner av Windows brukte en essensielt ikke-preemptive dispatching-teknikk som Microsoft kaller "cooperative multitasking". Med denne teknikken, forventes det at hvert program frivillig gir fra seg CPU-en periodisk for å gi andre prosesser en sjanse til å eksekvere. Diskuter denne metoden. Hvilke potensielle vanskeligheter kan denne metoden forårsake?
Hvorfor er program-relokering unødvendig når virtuelt minne benyttes?
CPU schedulerings-algoritmen (i Unix) er en enkel prioritets-algoritme. Prioriteten for en prosess beregnes som forholdet mellom CPU tiden som er brukt av prosessen og virkelig tid som har gått. Jo lavere tall jo høyere prioritet. Prioriteter re-kalkuleres hvert tiende sekund.
- Hva slags jobber favoriseres ved denne typen algoritme?
- Hvis det ikke utføres noe I/O, vil denne algoritmen reduseres til en round-robin-algoritme. Forklar hvorfor.
- Diskuter denne algoritmen i forhold til de generelle hensiktene som man ønsker å oppnå med schedulering.
I inntrengerprogrammer finner man ofte følgende lille kodesnutt flere steder:
if (fork() > 0) exit(0);
Hva gjør denne kodebiten? Hvorfor brukes den i ulovlige programmer?
Forklar konsekvensene av at en bruker utfører:
while(1) fork();
Hint: søk etter "fork bomb"