Avatar billede tax Nybegynder
28. januar 2002 - 11:52 Der 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?
Avatar billede tax Nybegynder
28. januar 2002 - 11:55 #1
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.
Avatar billede jpk Nybegynder
28. januar 2002 - 12:37 #2
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?
Avatar billede tax Nybegynder
28. januar 2002 - 13:27 #3
jeg sikrer blot at der kun er en tråd der henter fra den.
Avatar billede jpk Nybegynder
28. januar 2002 - 13:34 #4
Okay, HVORDAN sikrer du at der kun er en tråd der læser fra den?
Har du kun en tråd eller..?
Avatar billede tax Nybegynder
28. januar 2002 - 14:06 #5
Jeg har kun en tråd der tager beskeder ud, men flere der lægger beskeder ind.
Avatar billede jpk Nybegynder
28. januar 2002 - 15:16 #6
Jamen problemet kan da også forekomme ved indsætning!
Avatar billede tax Nybegynder
03. maj 2002 - 11:17 #7
no ans
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester