Begrepet kritisk region er sentralt i forbindelse med datamaskinsystemer.

Like dokumenter
En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig.

Tildeling av minne til prosesser

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Tildeling av minne til prosesser

Dagens temaer. Kort repetisjon. Mer om cache (1) Mer om cache (2) Read hit. Read miss. Write hit. Hurtig minne. Cache

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

Minnehåndtering i operativsystemer

Innhold. Virtuelt minne. Paging i mer detalj. Felles rammeverk for hukommelseshierarki Hukommelseshierarki-2 1

! Ytelsen til I/O- systemer avhenger av flere faktorer: ! De to viktigste parametrene for ytelse til I/O er:

Minnehåndtering i operativsystemer

Operativsystemer og grensesnitt

1,r H øgs kolen i Østfol d

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Fullstendig ytelsesbehandling

Oppgave 1 - Linux kommandolinje (%)

Scan Secure GTS PAS

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

Debugging. Tore Berg Hansen, TISIP

INF2270. Input / Output (I/O)

En datamaskin er gjerne koblet til utstyr som skjerm, tastatur, mus, harddisk, CD/DVD enheter, printer,

Scheduling og prosesshåndtering

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Kort notat om parallellstyring IN147

HØGSKOLEN I SØR-TRØNDELAG

Introduksjon til kurset og dets innhold

Litt om Javas class-filer og byte-kode

Operativsystemer for multiple prosessorer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Et dataprogram er programkode og programressurser som ligger på en eller flere filer på harddisken.

Tildeling av minne til prosesser

Definisjon av prosess

TDT4258 Eksamen vår 2013

Generelt om operativsystemer

Vranglås (Deadlocks) Fag: Operativsystemer

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Kapittel 7, Minne RAM DIMM, SIMM ROM, PROM, EPROM, EEPROM FLASH DIM SUM. Cache Virtuelt minne

Deadlocks og mer om concurrencymekanismer

Eksamen DAT 103. Oppgave 2. Kandidatnr.: 145 1) B 2) B 3) A 4) A 5) D 6) C 7) B 8) A 9) A 10) D

Fakultet for informasjonsteknologi, Løsning på kontinuasjon i TDT4186 Operativsystemer 14. august 2006,

INF2270. Input / Output (I/O)

HØGSKOLEN I SØR-TRØNDELAG

1: Steng ned alle MAB på alle maskiner før dere starter oppdateringen. Dette gjelder også MAB Schedule som dere vil finne på serveren.

Faglig kontakt under eksamen: Orestis Gkorgkas

Installere programvare gjennom Datapennalet - Tilbud

Eksamensoppgave i TDT4258 Energieffektive Datamaskinsystemer

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

Dagens temaer. Dagens emner er hentet fra Englander kapittel 11 (side ) Repetisjon av viktige emner i CPU-design.

Programmeringsspråket C Del 3

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Eksamensoppgave i TDT4258 Energieffektive Datamaskinsystemer

HØGSKOLEN I SØR-TRØNDELAG

Programmeringsspråket C Del 3

INF1010 Tråder II 6. april 2016

Hvordan få tak i din produktnøkkel for Windows

Testrapport. Aker Surveillance. Gruppe 26. Hovedprosjekt ved Høgskolen i Oslo og Akershus. Oslo, Public 2013 Aker Solutions Page 1 of 5

Installasjon Huldt & Lillevik Lønn. Innhold

Programmeringsspråket C Del 3

Huldt & Lillevik Lønn og Personal - System 4. Installasjon. Microsoft SQL 2005 Express. Aditro HRM AS

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

oppgavesett 4 INF1060 H16 Hans Petter Taugbøl Kragset Øystein Dale Christian Resell 27. september 2016 Institutt for informatikk, UiO

Generelt om operativsystemer

Del 4 Noen spesielle C-elementer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Huldt & Lillevik Ansattportal. Installere systemet

Programmeringsspråket C Del 3

Eksempler på ikke-blokkerende systemkall:

Håndtering av minne i et OS

Huldt & Lillevik Reise. Oppgradering. Aditro HRM AS

Oppgave 2: Gå til roten (/) av systemet. Finn minst tre forskjellige måter å gå tilbake til hjemmekatalogen din på.

Huldt & Lillevik Lønn 5.0. Installere systemet

1. Systemsikkerhet Innledning. Innhold

DAT kandidatnummer: 142

IN1010 våren Repetisjon av tråder. 15. mai 2018

For kunder som kjører Huldt & Lillevik Reise 1.3 på Access database

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

Mamut Enterprise Travel CRM

2 Om statiske variable/konstanter og statiske metoder.

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Generelt om permanent lagring og filsystemer

Tekniske krav. Installasjonsrekkefølge. Operativsystem og web-server. Maskinvare. .Net Framework 2.0. ASP.Net AJAX 1.0

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens temaer. Fra kapittel 4 i Computer Organisation and Architecture. Kort om hurtigminne (RAM) Organisering av CPU: von Neuman-modellen

Fakultet for informasjonsteknologi, Løsning på kontinuasjon i TDT4186 Operativsystemer August 2005,

Oversikt. Historie Struktur Moderne UNIX systemer Moderne UNIX kernel struktur 1 UNIX. 2 Linux. 3 Process. 4 Process models

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

UNIVERSITETET I OSLO

Utførelse av programmer, metoder og synlighet av variabler i JSP

Programmeringsspråket C Del 3. Hans Petter Taugbøl Kragset

Kjenn din PC (Windows7, Vista)

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

2 Om statiske variable/konstanter og statiske metoder.

Læringsmål og pensum. Oversikt. Systemprogramvare Operativsystemer Drivere og hjelpeprogrammer. To hovedtyper programvare

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Huldt & Lillevik Reise. Oppgradering. Aditro HRM AS

Huldt & Lillevik Lønn og Personal - System 4. Installasjon. - første gang. Med MS SQL Server eller eksisterende MS Express.

Internminnet. Håkon Tolsby Håkon Tolsby

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Transkript:

Kritisk region Begrepet kritisk region er sentralt i forbindelse med datamaskinsystemer. Generelt kan en kritisk region defineres som et sted der det kan oppstå kollisjoner. Et veikryss er en kritisk region I trafikken vil et veikryss være en kritisk region fordi biler lett kan kollidere der. Derfor er veikryss regulert enten av trafikklys, rundkjøringer eller regler for vikeplikt. En definisjon på kritisk region En definisjon på kritisk region i et dataprogram En kritisk region er et stykke programkode som forsøker å få tilgang til en ressurs som ikke kan deles. Kollisjoner Om flere tråder får tilgang til samme ressurs kan det føre til kollisjoner. Dette kan igjen føre til at et program ikke fungerer på normal måte. 1

Eksempel kollisjon Vi skal se på et eksempel på en kollisjon mellom to tråder. Vi har to tråder som bruker en felles tallvariabel som heter sum. Den ene tråden øker verdien til sum med 1. Den andre tråden avtar verdien til sum med 1. Vi har følgende situasjon double sum=0.0; // Felles variabel for trådene Tråd 1 sum += 1; Tråd 2 sum -= 1; I tråd 1 legges 1 til i sum. I tråd 2 trekkes 1 fra sum. Dette vil fungere bra hvis det ikke skjer en kollisjon. Trådutskifting kan skape problemer Men det kan gå galt hvis trådene forsøker å oppdatere variabelen sum samtidig når det skjer en trådutskifting i prosessor. Det som kan skje er at tråd 1 er i prosessor og blir avbrutt av en trådutskifting akkurat når den skal utføre sum += 1 Da blir tråd 1 tatt ut av prosessor og tråd 2 blir lastet inn i prosessor. 2

La oss si at tråd 1 akkurat har lest inn at sum er lik 4 før den tas ut av prosessor. Da er situasjonen Sum = 4 Registerverdien til tråd 1 = 4 Når tråd 1 blir avbrutt vil trådutskiftingen føre til at register verdiene til tråden lagres. Det vil si at verdien 4 lagres for variabelen sum i trådens register. Når tråd 2 starter å kjøre i prosessor vil tråd 2 også lese inn at verdien til sum er lik 4. Tråd 2 vil så utføre sum -= 1 Verdien til sum er nå lik 3. Sum = 3 Når tråd 1 allokeres inn i prosessor på ny der den var da den ble stoppet. Verdiene i registeret som ble lagret, leses inn. Tråd 1 vil bruke registerverdien til sum fordi denne akkurat var lest inn for bruk, når tråd 1 skulle utføre sum += 1 Tråd 1 vil så utføre sum += 1 Konsekvensen av trådutskiftingen Siden tråd 1 bruker registerverdien som er 4, og ikke verdien til sum som har blitt 5, vil verdien til sum settes lik 5. Dette medfører at oppdateringen av sum som ble gjort av tråd 2 vil bli mistet. Konsekvensen av at de to trådene har oppdatert variabelen sum samtidig er at den ene oppdateringen er mistet. 3

Å miste en oppdatering av sum fører til programfeil Å miste enn oppdatering av sum vil føre til programfeil. Tråd 1 og tråd 2 har begge en kritisk region i koden sin Tråd 1 sum += 1 Tråd 2 sum = 1 Det er derfor behov for et system som sørger for at tråd 1 og tråd 2 ikke er inne i sin kritiske region samtidig. Hvordan unngå programfeil på grunn av trådutskifting For å sørge for at tråd 1 og tråd 2 ikke er inne i sin kritiske region samtidig kan vi bruke en semafor. Eller vi kan bruke klassen Monitor som sørger for at variabelen sum bare nås av en tråd om gangen. Kritiske regioner i programkode må reguleres med synkroniseringsmekanismer. Synkroniseringsmekanismer har derfor en viktig oppgave å unngå programfeil. 4

Synkroniseringsmekanismer i Windows operativsystem I Windows operativsystem benyttes mange ulike synkroniseringsmekanismer. Noen av dem er Keyed Events Spinlocks Fast Mutex og Guarded Mutex Pushlocks Keyed Events Windows bruker en synkroniserings-mekanisme som kalles Keyed Events. Events brukes i tilfeller hvor tråder samarbeider om en oppgave. Dette er i tilfeller der en tråd må vente på at en hendelse (Event) har skjedd før den selv kan utføre en handling. En Keyed Event tillater en tråd til å spesifisere en nøkkel (Key) som angir hvilken hendelse den venter på. Tråden vil da vente inntil en annen tråd signaliserer at en hendelse med den samme Key har skjedd. 5

Spinlock Spinlock er en låsmekanisme som benyttes av kjernen i Windows operativsystem til å oppnå eksklusiv rådighet til ressurser. Før en tråd i kjernen skal få tilgang til en kritisk region, må den spørre en Spinlock om tilgang. Tråden venter i en løkke (spinner) inntil Spinlock-en blir ledig. Tråden vil derfor være i ventetilstand, det vil si være ikke aktiv, mens den venter på at Spinlock-en skal bli ledig. Når en tråd har fått tilgang til en Spinlock vil den ha eksklusiv rådighet til den helt til den gir slipp på den igjen. Å bruke en Spinlock er derfor bare effektivt om en tråd bare skal ha Spinlock-en et kort tidsrom. Queued Spinlocks Noe som kalles Queued Spinlocks benyttes ofte istedenfor vanlige Spinlocks. Queued Spinlocks benytter køer til å henge forespørsler på. Fast Mutex Fast Mutex gir ofte bedre ytelse enn en vanlig mutex. Årsaken er at de kan gå utenom vanlig prosessplanlegging. Dette gir Fast Mutex spesielt god ytelse i miljøer med flere prosessorer. 6

Guarded Mutex Guarded Mutex som benyttes av Windows Server 2003 og senere versjoner av Windows. Guarded Mutex brukes til samme oppgaver som Fast Mutex. Men Guarded Mutex er enda raskere. Pushlocks Pushlocks brukes istedenfor Spinlocks for å beskytte datastrukturer i kjernen. Pushlocks benyttes kun av Windows operativsystem, men det fins også noen drivere som benytter Pushlocks. En fordel med Pushlocks er at de tar liten plass. Tilgang til en Pushlock kan være både eksklusiv og delt. Tilgangen kan være delt hvis data bare skal leses. Hvis en tråd skal forandre på dataene må tilgangen vær eksklusiv. 7

Vrangla s Kritiske regioner kan føre til en situasjon som kalles vranglås (Deadlock). En vranglås oppstår når to tråder begge forsøker å få tak i en ressurs som den andre kontrollerer. Ressurser som bare kan brukes av en prosess I et datamaskinsystem er det mange ressurser som kan bli brukt av bare en prosess av gangen. Dette er ressurser som skjerm, printere, CD spillere, filer, For en prosess er det ofte behov for tilgang ikke bare til en ressurs, men til flere. Hvis flere prosesser forsøker å få tilgang til mer enn en ressurs hver kan dette gi opphav til vranglås. Eksempel på vranglås Et eksempel på vranglås er når to tråder har åpen hver sin fil for skriving og begge ønsker å åpne den andre trådens fil. Tråd A har åpen fil 1 Tråd B har åpen fil 2 Tråd A ønsker å åpne fil 2 og tråd B ønsker å åpne fil 1. Begge vil vente evig. 8

Eksempel på vranglås Et annet eksempel på vranglås er følgende. To prosesser ønsker samtidig å skanne et dokument og skrive det til en CD. Begge prosesser har derfor bruk for både skanneren og CD-en. Den ene prosessen prøver først å få tilgang til skanneren. Den andre prosessen er programmert annerledes og prøver først å få tilgang til CD-en. Når så prosess 1 forsøker å få tilgang til CD-en og prosess 2 forsøker å få tilgang skanneren samtidig oppstår vranglås. Situasjonen er følgende Prosess 1 Skanner CD-ROM Prosess 1 Vranglås i nettverk Vranglås kan også oppstå i nettverk. Ofte er printere, skannere og liknende utstyr en felles ressurs i nettverket. Vranglås kan derfor oppstå hvis flere maskiner prøver å få tak i delte ressurser i et nettverk samtidig. 9

Vranglås i database Vranglås kan også oppstå i situasjoner hvor det ikke er input/output utstyr som inngår. Vranglås kan for eksempel oppstå ved bruk av en database. To prosesser bruker en database. Prosess A har lukket noen data i databasen. Prosess B har lukket noen andre data i databasen. Hvis nå begge prosesser forsøker å få tak dataene som den andre prosessen har lukket, oppstår vranglås. Vranglås ved trådutskifting Et teoretisk tilfelle av vranglås kan oppstå ved trådutskifting i prosessor. Vi skal igjen se på eksempelet der vi har to tråder som bruker en felles tallvariabel. Den ene tråden legger til et tall i variabelen og den andre tråden trekker fra et tall. double sum; I tråd 1 //Felles variabel Enter(sum); sum += 1; Exit(sum) ; I tråd 2 Enter(sum) ; sum -= 1; Exit(sum) ; Det som kan skje er at akkurat når tråd 1 har utført lukking av sum så er tiden ute for tråd 1 i prosessor og tråd 2 lastes inn i prosessor. 10

Det som så skjer er at Enter(sum) også skjer i tråd 2. Følgen av at begge tråder har klart å stenge tilgangen til variabelen sum er vranglås. Variabelen sum vil være låst for både tråd 1 og tråd 2. Begge tråder vil vente i evig tid på å få tilgang til variabelen sum. Definisjon av vranglås En definisjon på vranglås er følgende Noen prosesser er i vranglås hvis hver prosess venter på en hendelse som bare en av de andre prosessene kan forårsake. Siden alle prosessene venter vil ingen av dem gjøre noe som åpner for de andre prosessene. Betingelser for vranglås For at vranglås skal oppstå må følgende betingelser være oppfylt 1. Eksklusiv rådighet betingelsen. 2. Holde og vente betingelsen. 3. Ikke operativsystemstyrt betingelsen. 4. Sirkulær vente betingelsen. 11

Eksklusiv rådighet betingelsen Eksklusiv rådighet betingelsen innebærer at om en tråd har fått adgang til en ressurs vil ingen andre tråder få tilgang til ressursen. Holde og vente betingelsen Holde og vente betingelsen beskriver situasjonen ved vranglås. Trådene holder på en ressurs og venter på tilgang til en annen ressurs. Ikke operativsystemstyrt betingelsen Ikke operativsystemstyrt betingelsen innebærer at en ressurs ikke kan tas fra en prosess. En prosess vil holde på en ressurs inntil den selv gir slipp på den. Sirkulær vente betingelsen Sirkulær vente betingelsen er når tråder venter på hverandre. Prosess p1 har ressurs R1 og vil ha ressurs R2. Prosess p2 har ressurs R2 og vil ha ressurs R1. Denne situasjonen kan også involvere flere enn to tråder. Derfor navnet sirkulær venting. 12

Eksempel på sirkulær venting Eksempel på Sirkulær venting med tre tråder involvert. Tråd 1 Ressurs 2 Ressurs 1 Tråd 2 Tråd 3 Ressurs 3 Hvordan forholde seg til vranglås Operativsystemet kan forholde seg til vranglås på fire måter 1. Ignorere vranglåsen. 2. Finne vranglåsen og rette den opp. 3. Prøve å unngå at vranglås oppstår når ressurser allokeres. 4. Prøve å unngå at vranglås oppstår ved å unngå at betingelsene for dem oppstår. Ignorere vranglås En måte å forholde seg til vranglås på er å ignorere den. Dette kan være akseptabelt hvis vranglås er et sjeldent fenomen. At et program stopper å virke en gang i året på grunn av vranglås har liten betydning. 13

Finne og rette opp vranglås Et operativsystem kan forsøke å finne vranglås og rette den opp. Det er utviklet teknikker for å registrere vranglås. som gjør dette prøver som oftest ikke å forhindre vranglås. Hvis operativsystemet har oppdaget vranglås er det forskjellige strategier å fjerne den 1. Gjenoppretting ved at operativsystemet griper inn. 2. Gjenoppretting ved tilbake stilling. 3. Gjenoppretting ved å stanse prosesser. 1. Gjenoppretting ved at operativsystemet griper inn Gjenoppretting ved at operativsystemet griper inn innebærer at operativsystemet tar en ressurs fra en prosess og gir den til en annen prosess. Imidlertid er det ofte vanskelig eller umulig å rette opp en vranglås på denne måten. 2. Gjenoppretting ved tilbake stilling Gjenoppretting ved tilbake stilling innebærer at en prosess som er med i vranglåsen settes tilbake i tid, slik at den kan begynne allokeringen av ressurser på nye. For å få til tilbake stilling av prosesser benyttes noe som kalles sjekkpunkter. Sjekkpunkter i en prosess vil si at status for prosessen lagres på en fil på bestemte tidspunkter. Dette gjør at prosessen kan startes på ny fra et sjekkpunkt. 14

3. Gjenoppretting ved å stanse prosesser Gjenoppretting ved å stanse prosesser innebærer at operativsystemet avslutter en eller flere prosesser for å fjerne en vranglås. Dette medfører at de andre prosessene kanskje vil kunne fortsette. Unngå vranglås ved allokering av ressurser Istedenfor å forsøke å finne og rette opp vranglås kan operativsystemer forsøke å unngå vranglås. Operativsystemet kan prøve å unngå at vranglås oppstår når ressurser allokeres. Unngå vranglås ved å unngå betingelsene for vranglås Operativsystemet kan også prøve å unngå at vranglås ved unngå de fire betingelsene for vranglås 1. Eksklusiv rådighet betingelsen. 2. Holde og vente betingelsen. 3. Ikke operativsystemstyrt betingelsen. 4. Sirkulær vente betingelsen. 15

1. Eksklusiv rådighet betingelsen Eksklusiv rådighet betingelsen innebærer at for at vranglås skal oppstå er det kun en prosess som har tilgang til ressursen. Hver ressurs er tilgjengelig for kun en prosess om gangen. Denne betingelsen er imidlertid nødvendig for mange ressurser som printere, filer, 2. Holde og vente betingelsen Holde og vente betingelsen innebærer at for at vranglås skal oppstå vil prosesser holde på en ressurs mens den forsøker å få tilgang til en annen. En måte å unngå dette på er å kreve at en prosess oppgir ressurser den har før den får tilgang til en ny ressurs. 3. Ikke operativsystemstyrt betingelsen Ikke operativsystemstyrt betingelsen innebærer at operativsystemet ikke griper inn ved en vranglås. Vranglåser kan ofte rettes opp av operativsystemet. 4. Sirkulær vente betingelsen Sirkulær vente betingelsen innebærer at for at vranglås skal oppstå må en prosess forsøke å få tilgang til flere ressurser samtidig. Dette innebærer at hvis en prosess kun forsøker å få tilgang til en ressurs om gangen vil vranglås unngås. 16

Kommunikasjon vranglås Kommunikasjon vranglås er en type vranglås som ikke har med ressurser å gjøre. Sett at en prosess A sender en forespørsel til prosess B, og så blokkerer inntil den får svar. Hvis svaret fra prosess B blir borte, får vi en vranglås. Sulting likner vranglås Sulting (Starvation) er et problem som er nær knyttet til vranglås. En tråd som ikke kommer inn i prosessor er i en låst situasjon som ligner vranglås. Vranglås kan lett forekomme Vranglås er et mulig problem i et hvert operativsystem. Vranglås kan oppstå på en rekke forskjellige måter. To eller flere prosesser vil være involvert i en vranglås. 17

Monitor Ved bruk av Monitor kan vranglås unngås ved å angi et tidsintervall. if (Monitor::TryEnter(sum, 300)) { // kode beskyttet av Monitor her } else { // kode å utføre om TryEnter mislykkes } Vranglås fører til en situasjon der en eller to tråder aldri vil bli ferdig med sin oppgave uten at operativsystemet griper inn. Strategier for operativsystemet Operativsystemet har en del strategier for å unngå vranglås. Operativsystemet undersøker om vranglås eksisterer, spesielt hvis det merker at systemet går tregt. Hvis operativsystemet finner vranglås forsøker det å få bort vranglåsen. Måten operativsystemet forsøker rette opp vranglås på er å få systemet tilbake til det stadium som var før vranglåsen oppsto. 18

Resursbehandleren Windows Server operativsystem har en ressursbehandler (Resource Manager). Å unngå vranglås på servere er en oppgave for ressursbehandleren. Ressursbehandleren prøver å oppdage og korrigere vranglås. Driver Verifier Driver Verifier er en mekanisme i Windows operativsystem som kan benyttes til å finne feil i drivere og annen kode i kjernen. Microsoft bruker Driver Verifier til å kontrollere egne drivere og andres drivere som skal være kompatible med Windows. I tillegg til å være et verktøy er Driver Verifier også et hjelpemiddel for systemadministratorer som kommer ut for et system krasj. Driver Verifier kan blant annet benyttes ved vranglås. Man kan benytte Driver Verifier til å sjekke om det er vranglås. Driver Verifier holder rede på bruk av Spinlocks og Mutexer. Driver Verifier kan derfor se etter mønster som kan fremkalle en vranglås. 19

Synkroniseringsmekanismer Ofte er det mange tråder som kjører samtidig på en datamaskin. Disse trådene må på en eller annen måte samkjøres. Mekanismer for synkronisering Det er derfor behov for mekanismer som tar seg av denne samkjøringen. Vi har sett på følgende mekanismer for samkjøring av tråder. Semafor Mutex Event Monitor To typer funksjonalitet Disse synkroniseringsmekanismene kan deles i to grupper etter hvordan de fungerer. 1. Lukker 2. Signaliserer Semafor, mutex og monitor lukker en ressurs slik at andre tråder ikke kommer til. Event derimot er en mekanisme som signaliserer når en hendelse er inntruffet. 20

Interprosess kommunikasjon Både, semafor, mutex, monitor og events kan benyttes til Interprosess kommunikasjon. Interprosess kommunikasjon vil si kommunikasjon mellom ulike programmer, ikke bare tråder. Navnet brukes til å finne en synkroniseringsmekanisme i minnet For at en semafor skal kunne benyttes til Interprosess kommunikasjon må den gis et navn. Når et program har opprettet en semafor i minnet, kan andre programmer få tak i den i minnet via navnet. Semaforer med navn kan benyttes av andre programmer som kjører på operativsystemet. Ulemper ved å bruke navnet Å bruke navn som kan nås overalt i et operativsystem krever forsiktighet. Hvis to semaforer har samme navn vil dette kunne føre til at feil semafor blir tatt i bruk. 21

Synkroniseringsmekanismer i.net Framework Library Det finnes flere andre klasser i Class Library som kan benyttes til synkronisering enn de vi har sett på til nå. Noen er class Threadpool class Interlocked class ReaderWriterLock class Threadpool class Threadpool gir en enkel måte å synkronisere bakgrunns tråder. Alt vi behøver å gjøre er å henge tråden på en liste. Da vil operativsystemet ta seg av synkroniseringen. Man kaller ThreadPool::QueueUserWorkItem(gcnew WaitCallback(minTraad)); En tråd med funksjonen mintraad vil da henges på en liste og systemet sørger for synkronisering. 22

class Interlocked Denne klassen gir en metode til å synkronisere en variabel som brukes av flere tråder. Klassen sørger for at kollisjoner mellom tråder ikke gjør at operasjoner går tapt. if (0 == Interlocked::Exchange(brukerRessurs, 1)) { // Har tilgang til ressursen// } int brukerressurs; brukerressurs er en variabel som angir hvor mange tråder som bruker ressursen. class ReaderWriterLock class ReaderWriterLock synkroniserer tilgangen til en ressurs. Klassen lar flere tråder lese fra en ressurs samtidig. Men hvis en tråd skal skrive til ressursen vil ressursen lukkes slik at bare denne tråden har tilgang til ressursen. class ReaderWriterLock fungerer best når det er flest tråder som skal lese ressursen og få som skal skrive. Tråder som skal lese og tråder som skal skrive henges på forskjellige køer. Køen med tråder som skal lese gjøres gjerne ferdig før tråder som skal skrive slippes til. 23

class AutoResetEvent Denne klassen gir beskjed til en tråd som venter, om at en hendelse har skjedd. Klassen kan derfor brukes til synkronisering av tråder som samarbeider. class ManualResetEvent Dette er en annen klasse som kan brukes til synkronisering av tråder som samarbeider. Forskjellen på AutoResetEvent og ManualResetEvent Vi skal se på forskjellen på class AutoResetEvent og class ManualResetEvent. Vi har tidligere sett på class EventWaitHandle Denne klassen har en input parameter EventResetMode. Verdien for EventResetMode avgjør om en hendelse skal registreres automatisk eller manuelt. Valg AutoReset: Når signalisert med Set() vil hendelsen registreres automatisk og tråden vil løslates. Kall på WaitOne() vil lukke adgang for andre tråder. Valg ManualReset : Når signalisert med Set() vil alle ventende tråder løslates og hendelsen vil vente på å registreres manuelt. Kall på WaitOne() i en tråd vil derfor ikke lukke adgang for andre tråder. AutoReset: Tillater bare en tråd tilgang til en ressurs om gangen ManualReset: Tillater flere tråder tilgang til en ressurs samtidig. 24

Minnebehandling i Windows Minnebehandling omhandler 1. Hvordan allokere minne til programmer. 2. Hvordan frigjøre minne det ikke er bruk for. Hvordan minnet blir behandlet, vil ha innvirkning på datamaskinens ytelse. Minnebehandling er derfor en viktig oppgave på en datamaskin. Problemer med minnebehandling Følgende gir en oversikt over noen problemer med minnebehandling. Det må være plass til flere programmer i minnet samtidig. Det er ikke bestandig plass til alle programmer i minnet. Programmer vil ha ulike adresser i minnet ved ulike kjøringer. Avvekslende inn og ut lasting av programmer Hvis det ikke er plass til flere programmer i minnet samtidig, kan man benytte avvekslende inn og ut lasting av programmer. Ved avvekslende inn og ut lasting av programmer bytter prosesser på å være i minnet. 1. En prosess lastes inn i minnet og kjører en stund, for deretter å fjernes fra minnet igjen. 2. Deretter lastes en ny prosess inn i minnet som får kjøre en stund. Denne utbyttingen av prosesser i minnet kalles Swapping på engelsk. Swapping er en gammeldags metode som ble benyttet tidligere. 25

Moderne minnemodeller De fleste moderne minnemodeller faller i følgende tre kategorier. 1. Flat minnemodell 2. Sideinndelt minnemodell 3. Segmentert minnemodell Flat minnemodell En flat minnemodell benytter lineær indeksering. Indeksene starter på 0 og går opp til et maksimum. Prosessor bruker indeksene til å få direkte adgang til data lagret i minnet. En flat modell gir en enkel organisering av minnet. Det er behov for lite ressurser til minnebehandling og man får rask tilgang til data. Sideinndelt minnemodell Sideinndelt minnemodell er mer komplisert enn flat modell og gir litt langsommere tilgang til data. Sideinndeling (Paging) er en måte å hente og lagre data på fra et lagringsmedium til minnet. Data behandles som et sett med like store blokker kalt sider (Pages). Fordelen med sideinndeling er at Det er ikke nødvendig å laste hele programmer inn i minnet på en gang. Man jobber hele tiden med like store enheter. Sideinndeling er en viktig del av teknikken som benyttes ved virtuelt minne. 26

Segmentert minnemodell Segmentert minnemodell likner sideinndelt minnemodell, men sidene varierer i størrelse. Dette gjør segmentert minnemodell mer fleksibelt og effektivt en sideinndeling. Ved segmentering er programmer delt i uavhengig adresserte segmenter. Segmentene er lagret i minnet uten å være sammenhengende. Ulempen med segmentert minnemodell er det er et komplisert system å behandle. Det er vanskelig å programmere det opp og det kan lett oppstå feil. Virtuelt minne Virtuelt minne er en teknikk som gir programmer inntrykk av at datamaskinen har et enhetlig og sammenhengende minne. Dette selv om minnet kan være plassert fysisk på forskjellige medier. Fordelen med en virtuell minnearkitektur er at deler av en prosess kan ligge på harddisken om det ikke er nok plass i minnet. Nesten all implementering av virtuelt minne deler det virtuelle adresserommet inn i sider. Når en prosess kjører i prosessor leses den inn side for side på samme måte som når vi leser en bok. benytter teknikken med virtuelt minne til å gjøre det lettere å bruke det fysiske minnet. Virtuelt minne gjør det lettere for store dataprogrammer å kjøre på systemet. Alle moderne operativsystemer benytter teknikker med virtuelt minne. 27

Virtual memory Memory (RAM) Hard drive Virtuell minnearkitektur Minnebehandleren (Memory Manager) i Windows benytter en virtuell minnearkitektur. I Windows har hver prosess et virtuelt adresserom. Det virtuelle adresserommet er delt opp i sider. Windows bruker en virtuell minnebehandler. En virtuell minnebehandler benytter sideinndeling (Paging). Den laster derfor ikke inn hele programmer når de skal kjøres, men kun aktive deler. Sideetterspurt minne Windows støtter sideetterspurt virtuelt minne. Sideetterspurt virtuelt minne = Demand-Paged Virtual Memory Med sideetterspurt menes at operativsystemet bare laster inn sider i minnet som blir etterspurt av en prosess som kjører. 28

Minne behandleren Minnebehandleren (Memory Manager) tar seg av behandlingen av minnet. Den allokerer plass for programmer i minnet når det er behov for det. Og den fjerner programmer fra minnet igjen når de er ferdig. Minnebehandleren gjør følgende Implementerer virtuelt minne. Utfører oppgaver på minne. Gir støtte for store minner. Gjør tjenester liksom å holde rede på filer som er en del av minnet. Gir støtte til hurtigbufringsbehandleren. Dynamisk minneallokering Dynamisk minneallokering er avsetting av minne til et program som kjører på datamaskinen. Frilageret En del av minnet som er avsatt til et dataprogram kalles for frilageret (the Heap). Programmerere kan bruke frilageret til å opprette variabler og objekter. Variabler og objekter som opprettes i frilageret vil være der til de slettes av programmet eller av søppeloppsamleren (Garbage Collector). Hver prosess har minst et frilager. Når prosessen starter opprettes et standard prosessfrilager som eksisterer helt til prosessen blir avsluttet. Prosesser kan også opprette flere private frilager. 29

Stakklager Når en tråd kjører må den ha tilgang til en midlertidig lagringsplass hvor den kan lagre lokale variabler, funksjonsparametre og returneringsadresser etter et funksjonskall. Den delen av minnet som benyttes til dette kalles et stakklager (Stack). I Windows benytter minnebehandleren to stakklagre for hver tråd. En brukerstakk og en kjernestakk. Når en tråd lages vil det automatisk opprettes en brukerstakk som vanligvis er på 1 MB. Kjerne stakker er gjerne mye mindre, en vanlig størrelse har vært 12 KB. 30