FAQ - Hjemmeeksamen 1

 

Q) Må protokollen være sånn som tekststrengene i oppgaven?

A) Nei! Som "Merk(2)" til slutt i oppgaven sier - det er bare tekstlige forklaringer på hva slags informasjon som skal sendes. Hvordan formatet er bestemmer dere helt selv. Det trenger ikke å være en tekstprotokoll i det hele tatt, dere kan lage en binær protokoll som "sender en struct" og har heltallskonstanter (enums) som markerer hva slags data det er. Begrunn alle valg rundt protokollen og diskuter fordeler/ulemper i designdokumentet! Protokollen bør være så godt beskrevet at man kan skrive en klient som kommuniserer med serveren din kun ut i fra protokoll-beskrivelsen. I implementasjonen din er det også fint om protokoll-kode ligger i en egen fil som er felles for server og klient.

 

Q) Hvis det er en prosess som overskrider CPU-bruken over den gitte tidsperioden, men den ikke skal avsluttes, skal den da merkes på en måte, f.eks legges i en egen liste, slik at det ikke komme flere varsel for denne prosessen senere?
Eller hvis brukeren ønsker å drepe prosessen, men det ikke går, skal prosessen da legges i en tilsvarende liste, eller skal det sendes varsel for hver gang selv om det ikke er mulig å drepe den?

A) Nei, dere trenger ikke ta hensyn til det. Prosesser som ikke lar seg drepe eller brukeren ikke ønsket å drepe kan dere behandle som alle andre prosesser, og evt sende et nytt varsel kort tid etter.

 

Q) Skal klienten koble seg til serveren når programmet starter, eller skal den koble seg til når brukeren skriver inn en monitor-kommando?

A) Brukeren angir server-adresse som en del av monitor-kommandoen, så det er først da klienten kan koble seg til. Unntaket er hvis du støtter flere samtidige monitoreringer fra samme klient, da vil klienten heller oppdage at den allerede er tilkoblet, og bare sende monitor-kommandoen.

 

Q) Skal være mulig å overvåke samme server flere ganger fra samme klient samtidig?

A) Det står ikke eksplisitt i oppgaven at det er et krav, men dersom dere koder applikasjonene på en god måte vil ikke dette være noe mer jobb.

 

Q) Når skal serveren sende statistikk?

A) Serveren starter å sende statistikk når en prosess har vært løpsk lenge nok, samtidig som det sendes en alert-melding. Den sender statistikk helt til brukeren har svart at prosessen enten skal drepes eller ikke. Hvordan klienten viser dette er opp til deg, men det er meningen at all statistikken (fra flere eventuelle løpske prosesser) skal vises samtidig. Alert-meldingene kan imidlertid ligge i kø, slik at man må svare på en før man ser den neste.

 

Q) Hva skal skje med løpske prosesser som brukeren har valgt å ikke drepe?

A) Ikke noe spesielt. Hvis brukeren har valgt å ikke drepe en prosess, vil serveren kunne sende en ny alert om den igjen så fort den har oversteget CPU-grensen lenge nok på nytt.

 

Q) Statistikk-pakkene mine blir aldri mindre enn 100 bytes på grunn av statistikk-formatet jeg har valgt, hva er poenget med sekvensnummer og sånn da?

A) Poenget er å lære seg fragmentering med sekvensnummere og sånn. Sørg for at statistikken blir nok data til at du overskrider 100 bytes, eller senk pakkestørrelsen til under 100 bytes (dokumenter i så fall det i dokumentasjonen).

 

Q) Jeg får problemer med bind() når jeg prøver med to klienter eller to servere, hva kan det skyldes?

A) Kun ett program om gangen kan bruke en port. Dersom du kjører to servere eller klienter på samme maskin, og de er låst til å lytte på en spesiell port (TCP eller UDP), vil bare den første kunne utføre bind(). Du kan la serveren ta et portnummer som argument under oppstart, og spesifisere portnummer i MONITOR-kommandoen, slik at du kan teste klienten mot flere servere på samme maskin. Klientene lytter etter pakker på en UDP-port, og for å kjøre flere klienter på samme maskin må de ha forskjellige porter. Det vil derfor være en god ide å la klienten velge et tilfeldig UDP-portnummer, og sende portnummeret til serveren over TCP rett etter tilkobling. For å velge et tilfeldig ledig portnummer kan du sende med 0 som portnummer til bind(), og deretter bruke getsockname() for å få tak i portnummeret.

 

Q) Hvis brukeren velger å ikke drepe en prosess som den har fått alert om, skal man sende noe til serveren da?

A) Ja, man må gi beskjed om at man ikke lenger vil motta statistikk om den prosessen. Merk at serveren skal fortsette å monitorere prosesser mens den venter på svar om den skal drepe en prosess eller ikke.

 

Flere spørsmål? Send til inf3190-orakel krøllalfa ifi.uio.no