28. januar 2002 - 11:52Der er
6 kommentarer og 1 løsning
Beskyttelse af delt hukommelse - korrektur
Jeg sidder netop og skriver rapport over mit eksamensprojekt. I denne sammenhæng anvender jeg noget delt hukommelse til at kommunikere imellem nogle tråde.
Jeg har sammensat en tekst omkring beskyttelsen af denne delte hukommelse og kunne godt bruge lidt kritik. Er der noget jeg har helt misforstået?
Beskyttelse af delt hukommelse generelt Generelt Når der anvendes delt hukommelse er det nødvendigt at beskytte den imod at blive anvendt forkert. I flertrådede applikationer opstår der let konflikter hvis ikke man anvender en klar strategi på dette område.
I denne sammenhæng anvendes køer og andre variable i delt hukommelse. Derfor er det relevant at sætte sig ind i disse forhold, for at kunne afværge de konflikter der måtte opstå, og derved opnå et stabilt resultat.
Et eksempel Eksempelvis kan man forestille sig en situation hvor to tråde, A og B, skal arbejde på en delt kø. A og B vil gerne hente beskeder fra køen, som opfyldes stokastisk af en anden tråd. Dette skal gøres ved først finde ud af om der er en besked i køen og evt. derefter at hente beskeden. Disse to operationer er, set udfra et operativsystemmæssigt synspunkt, så store at operativsystemet kan finde på at opdele dem og give andre tråde CPU tid imellem.
Operativsystemet veksler imellem at behandle de forskellige tråde og det vil forekomme at A bliver afbrudt af B, lige før den skal til at tage en besked ud af køen. B vil derfor tage en besked ud af køen som A havde udset sig. Derfor risikeres det at A forsøger at hente en besked som ikke eksisterer og der opstår en fejl.
Normalt vil man beskytte hele køen med en semafor, så der kun er en tråd der opererer på køen ad gangen.
I dette tilfælde I dette tilfælde er det ikke nødvendigt at anvende semaforer til alt den delte hukommelse. Derfor vil der kort blive beskrevet de datatyper, som anvendes i de delte hukommelsesområder, samt hvorledes de beskyttes i sammenhæng med dette projekt.
Køer på WxWorks På WxWorks siden anvendes der FIFO køer af typen ”msgQ”. Denne kø er beskyttet fra WxWorks side imod de problemer der kan opstå i flertrådede applikationer og derfor anvendes disse køer uden semaforbeskyttelse.
Standard Template Library lister (STL) På Windows siden anvendes der STL lister, som FIFO køer. Disse lister er ikke beskyttede imod flertrådede problemer, men hvis de behandles korrekt kan semaforbeskyttelse undlades. Ved at sikre at der altid kun er en tråd der udtager beskeder fra køen udelukkes problemstillingen beskrevet i eksemplet. Ved at FIFO køen placerer beskeden bagerst i køen påvirker indsættelsen af en besked ikke den tråd der er ved at udtage beskeder. Dette er i øvrigt verificeret igennem test.
Socket Sockets er beskyttet internt imod de problemer der kan opstå i sammenhæng med flertrådede applikationer. Derfor anvendes ikke semaforer til at beskytte disse.
Standardvariable Udover køerne anvendes der på begge sider nogle standardvariable. Der er tale omfølgende variabeltyper: · void pointer (funktionspointer) · integer · boolean Disse variable er så små at manipulationen af disse er udelelig set fra et operativsystemets synspunkt. Derfor kan disse enkeltvist anvendes til at kommunikere imellem flere tråde uden brug af semaforer.
Flere CPU’er Denne anvendelse af delt hukommelse går godt i dette tilfælde, da begge sider opererer med en enkelt processor. Hvis den samme kode afvikles på et multiprocessorsystem, vil der skulle anvendes semaforer til alle de datatyper der ikke internt er beskyttet imod flertrådede problemstillinger.
Til sektionen om STL, skriver du ikke meget om HVAD der gøres for at sikre køen. Hvad har du/i gjort?
Du skriver at da der indsættes i den ene ende af en liste og udtages af den anden, undgås problemer. Hvad hvis der ikke er nogle beskeder i listen, kun den der er ved at blive sat ind/læst?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.