Per P. MadsenStyresystemer og tjenester1 Threads.

Slides:



Advertisements
Lignende præsentationer
Stored Procedure Stored Procedure er programstumper, der gemmes i databasen og afvikles op databaseserveren på samme måde som forespørgsler. Med Stored.
Advertisements

Grundlæggende IT Lektion 4 Sådan virker pc’en
Programmeringsparadigmer.
Processer/tråde Per P. Madsen1 Et stykke software der håndtere skiftet af CPU’en.  Dispatcher. Et antal selvstændige programmer.  Processer. Plus det.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
Pc-kørekort Sådan virker pc’en Keld Hinsch.
Almindelige ("hårde") links (i filsystemer med i-noder) opg.txt jens: pia: ln /home/pia/opg.txt /home/jens/opg.txt hård link: ny post får i-node-nummer.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized.
Flerbrugermaskine Fælles maskine Root: webserver Peter: uploader filer Pia: programudvikling 1 langvarig proces, evt. med børneprocesser skiftende behov.
Semaforer Hvordan virker semop() hvis der er flere operationer ? I hvilken rækkefølge vækkes blokerede semaforer ? man semop.. The system call semantic.
DS-kursusgang nr. 4 IPC generelt IPC eksempel: beskedkøer IPC tidsforbrug: kontekstskift, skedulering C: abstraktion, funktionsbiblioteker.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
Tråde og synkronisering. Tråde To typer tråde Dedikerede tråde -programmør opretter og tilknytter metode -”kører tråd-metoden (job) én gang” Tråd pulje.
ASP.NET Cache, State DataGrid og Diagnostics. Agenda – ASP.NET Cache, State og Cookies ( 1 del ) –Cache –Static member –Application State –Session State.
Datalogi 1F: Multiprogrammering[2]
Hvorfor trådning? Performance Responsivness. Succeskriterier Forbedring af performance –Opgaverne skal være uafhængige –Jo flere afhængige opgaver, jo.
Adresserum Adresserum: Det interval af adresser, der kan arbejdes med i den samme proces (fra 0 til største adresse) Lippiatt++: adresser fylder 8 bit.
Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Datalogi 1F Forår 2003 Multiprogrammering[3] Eksempler på multiprogrammeringskerner Jørgen Sværke Hansen
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
To måder at overføre objekt- referencer mellem processer (1) Via naming service - interface RMISolver (2) Som parametre til fjernprocedurekald - interface.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Per P. MadsenStyresystemer og tjenester1 Indhold: 1.Introduktion til styresystemer. 2.Processer og tråde. 3.Synkroniseringsmetoder. 4.InterProcesCommunikation.
Beskeder/beskedkøer Afsender- proces hej Modtager- proces.. msgsnd(..,"hej",..);.. msgrcv(..);.. Afsender skal bl.a. angive den besked der ønskes afsendt.
Simulering af spisende filosoffer
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
Per P. MadsenStyresystemer og tjenester1 Indhold: 1.Introduktion til styresystemer. 2.Processer og tråde. 3.Synkroniseringsmetoder og InterProcesCommunikation.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
Per P. MadsenStyresystemer og tjenester1 Indhold: 1.Introduktion til styresystemer. 2.Processer og tråde. 3.Synkroniseringsmetoder og InterProcesCommunikation.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i.
 Processer og tråde  Implementation af tråde  Trådinterferens  Synkronisering  Atomare aktiviteter.
Operativsystemer, processor og tråde. Disposition Operativsystem Kerne funktionalitet Presser og adresserum Tråde.
Per Printz Madsen Linux proces og tråd programmering Per Printz Madsen Aalborg Universitet Institut for.
Process Control Hardware baggrund Process begrebet i et OS Process tilstande Context switching.
Per Printz Madsen 1 Linux kernen Monolithic kernel Support for dynamiske moduler Få kerne tråde Preemptive.
Per P. MadsenStyresystemer og tjenester1 Indhold: 1.Introduktion til styresystemer. 2.Processer og tråde. 3.Synkroniseringsmetoder og InterProcesCommunikation.
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Datalogi 1F: Multiprogrammering[3] 1 Planen for idag Kerner uden afbrydelser (KB4 kap. 6): –akernen: kerne med decentralt processkift –bkernen: kerne med.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
1 Processer. 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIProgrammering af Store Systemer1 Concurrency i Java – Samarbejdende tråde.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde p1p2p internet.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Parallel programming Rasmus D. Lehrmann DM
RMS - Record Management System Record Store En Record er et bytearray af vilkårlig størrelse En RecordStore er et antal Records nummerede.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
1587 Server - Blandet miljø Embedded I
Embedded SW – C & picoBlaze
I det efterfølgende kommer nogle eksempler på C kode som adskiller sig fra det vi normalt anvender i C# Hvis du har behov for hurtigt at afprøve små stumper.
I det efterfølgende kommer nogle eksempler på C kode som adskiller sig fra det vi normalt anvender i C# Hvis du har behov for hurtigt at afprøve små stumper.
Programmering.
Præsentationens transcript:

Per P. MadsenStyresystemer og tjenester1 Threads

Per P. MadsenStyresystemer og tjenester2 Process Threads Process ID, process group ID, user ID, and group ID Environment Working directory. Program instructions Registers Stack Heap File descriptors Signal actions Shared libraries Inter-process communication tools such as message queues, pipes, semaphores, or shared memory) Stack pointer Registers Scheduling properties (such as policy or priority) Set of pending and blocked signals Thread specific data.

Per P. MadsenStyresystemer og tjenester3 Threads User Space threadKernel Space thread

Per P. MadsenStyresystemer og tjenester4 Threads User Space thread: Fordel: Effektive og fleksible. Problemer: Blocking systemkald blokere alle tråde. Ingen timer interrupt så ingen Round-robin kan dog implementeres vha. signals. Kernel Space thread Fordel: Når en tråd blokere kan en anden tage over. Ulempe: Ikke så effektiv trådkald som User Spece threads.

Per P. MadsenStyresystemer og tjenester5 Threads

Per P. MadsenStyresystemer og tjenester6 Threads Anvendelse.

Per P. MadsenStyresystemer og tjenester7 Threads systemkald. int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void), void *arg) ; Return 0 for OK ellers fejlkode. thread: Tråd ID. attr: Tråd atrubutter hvis NULL så default. start_routine: Kode der skal afvikles. arg: Evt argumenter til koden. void pthread_exit (void *value_ptr); value_ptr: Værdi til joining tråde. Ofte NULL. int pthread_join (pthread_t thread, void **value_ptr); Return 0 for OK ellers fejlkode. Thread: Joining tråd ID. value_ptr: Værdi fra joining tråde.

Per P. MadsenStyresystemer og tjenester8 Threads systemkald. void pthread_yield (); int pthread_setschedparam (thread, schedpolicy, schedparam);

Per P. MadsenStyresystemer og tjenester9 Thread eksempel. #include #define NUM_THREADS 5 void *PrintHello(void *threadid) { printf("\n%d: Hello World!\n", threadid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc, t; for(t=0;t < NUM_THREADS;t++) { printf("Creating thread %d\n", t); rc= pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; from pthread_create() is %d\n", rc); exit(-1); } pthread_exit(NULL); }

Per P. MadsenStyresystemer og tjenester10 Thread - processes Time :  s

Per P. MadsenStyresystemer og tjenester11 Synkronisering.

Per P. MadsenStyresystemer og tjenester12 Peterson’s algoritme.

Per P. MadsenStyresystemer og tjenester13 Test og set instruktion. Intel fx: BST Motorola: BSET

Per P. MadsenStyresystemer og tjenester14 Priority inversion problem. Busy waiting. P1 lav prioritet. P2 høj prioritet. P1 og P2 anvender samme ressource R1. P1 starter først og går ind i R1. P2 starter og overtager CPU (høj prioritet.) og busy waiter ved R Løsning: blokkerende mutual exclusion kald.

Per P. MadsenStyresystemer og tjenester15 Semafor, Mutex, Condition variables. Atomart system-kald, der tester, sætter og blokkerer, hvis nødvendigt: int pthread_mutex_lock (mutex) int pthread_mutex_unlock (mutex) int pthread_cond_wait (condition); int pthread_cond_signal (condition) Eller mit Systen V kald: sem_create (&semafor, key, 1 ); sem_wait(semafor); sem_signal(semafor); Eller Java: semafor= new Semaphor(1); semafor.sem_wait(); semafor.sem_signal();

Semafor Per P. MadsenStyresystemer og tjenester16

Per P. MadsenStyresystemer og tjenester17 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id);. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester18 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); key. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester19 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester20 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester21 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester22 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester23 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester24 System V: Semafor. Operativsystem: Applikation:. key= ftok (".", 'a'); sem_create (&sem_id, key, 0);. sem_wait (sem_id); keysem_id. key= ftok (".", 'a'); sem_get(&sem_id, key);. sem_signal (sem_id);

Per P. MadsenStyresystemer og tjenester25 Posix: Semafor. Operativsystem: Applikation:. Sem_id = sem_open(”/sem1”, O_CREAT, 0644, 1);. sem_wait (sem_id);. Sem_id = sem_open(”/sem1”, 0, mode,value);. sem_post (sem_id); /tmp/.SEMDsem1 /tmp/.SEMLsem1

Semafor 26 void wait(SEM *sem) { disable (sem->value)--; if (sem->value < 0) { deQ(RunningTcb); enQ(sem->TcbQue,RunningTcb); dispatcher(); } enable } void signal(SEM *sem) { TCB *e; disable (sem->value)++; if (sem->value <= 0) { e= sem->TcbQue->next; deQ(e); prioenQ(AkQ,e); dispatcher(); } enable } typedef struct tcb { struct tcb *next; struct tcb *pred; int pid; char *sp; int prio; } TCB; typedef struct { int value; TCB *TcbQue; } SEM;

Per P. MadsenStyresystemer og tjenester27 Synkronisering. Ressourcemæssige forhold: Mutual exclusion. Tidsmæssige forhold: Timing. Kommunikationsmæssige forhold: IPC

Per P. MadsenStyresystemer og tjenester28 Message passing. A Send(kø,’A’); Receive(kø,&besked); Hvis der er en besked, så return ellers blokker indtil besked sendt. kø

Per P. MadsenStyresystemer og tjenester29 Producer-consumer i endelig kø.

Per P. MadsenStyresystemer og tjenester30 Monitor Kun en procedure/funktion af gangen.

Per P. MadsenStyresystemer og tjenester31 Monitor

Per P. MadsenStyresystemer og tjenester32 Klassiske IPC-typer. Pipe Named pipes eller FIFO’s Message Gueues Shared memory

Per P. MadsenStyresystemer og tjenester33 Pipe fd[0] fd[1] int fd[2]; pipe(fd); // Inden fork() write(fd[1],....); // En proces. read(fd[0],....); // En anden proces.

Per P. MadsenStyresystemer og tjenester34 Pipe #include int main(void) { int fd[2], nbytes; pid_t pid; char string[] = "Hello, world!\n"; char readbuffer[80]; pipe(fd); pid = fork(); if(pid == 0) { close(fd[0]); // Child process closes up input side of pipe write(fd[1], string, (strlen(string)+1)); // Send "string" exit(0); } else { close(fd[1]); // Parent process closes up output side of pipe nbytes = read(fd[0], readbuffer, sizeof(readbuffer)); // Read pipe printf("Received string: %s", readbuffer); }

Per P. MadsenStyresystemer og tjenester35 Named pipes eller FIFO’s. Named pipes eksisterer som en device fil i filsystenet. Processer med forskellige forældre kan udvæksle data gennem named pipe. Når processer er færdige med at udvæksle data forbliver named pipes i filsystemet. mkfifo minfifo Device fil kaldt minfifo fp = fopen(”minfifo”, ”r”); fgets(readbuf, 80, fp); fp = fopen(”minfifo”, ”w”); fputs(”go dav do”, fp);

Per P. MadsenStyresystemer og tjenester36 Message Gueues. En FIFO kø der oprettes i operativsystemet vha en key. Operativsystem: Applikation:. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0);. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. qbuf->mtype = type; msgrcv(qid, (struct msgbuf *)qbuf, MAX_SEND_SIZE, type, 0);

Per P. MadsenStyresystemer og tjenester37 Message Gueues. Operativsystem: Applikation:. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0); key. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. qbuf->mtype = type; msgrcv(qid, (struct msgbuf *)qbuf, MAX_SEND_SIZE, type, 0);

Per P. MadsenStyresystemer og tjenester38 Message Gueues. Operativsystem: Applikation:. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0); key. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. qbuf->mtype = type; msgrcv(qid, (struct msgbuf *)qbuf, MAX_SEND_SIZE, type, 0); kø

Per P. MadsenStyresystemer og tjenester39 Message Gueues. Operativsystem: Applikation:. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0); key. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. qbuf->mtype = type; msgrcv(qid, (struct msgbuf *)qbuf, MAX_SEND_SIZE, type, 0); kø qbuf

Per P. MadsenStyresystemer og tjenester40 Message Gueues. Operativsystem: Applikation:. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0); key. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgrcv(qid, (struct msgbuf *)qbuf, MAX_SEND_SIZE, type, 0); kø qbuf

Per P. MadsenStyresystemer og tjenester41 Message Gueues.. key= ftok (".", 'a'); qid = msgget(key, IPC_CREAT|0660);. msgsnd(qid, (struct msgbuf *)qbuf, strlen(qbuf->mtext)+1, 0); struct msgbuf { long mtype; /* type of message */ char mtext[1]; /* message text */ }; Datatype. Modtager adresse.....

Per P. MadsenStyresystemer og tjenester42 Message Gueues. En FIFO kø der oprettes i operativsystemet vha navn. Operativsystem: Applikation:. mqfd = mq_open("myipc", O_CREAT|O_RDWR, 0666, &attr);. mq_send(mqfd,buffer,num_bytes,priority);. mqfd = mq_open("myipc", O_CREAT|O_RDWR, 0666, &attr);. num_bytes_received = mq_receive(mqfd, buffer,MAX_MSGSIZE,0);

Per P. MadsenStyresystemer og tjenester43 Shared memory. Delt memory mellem flere processer. Den hurtigste form for IPC. Men husk mutual exclusion. Operativsystem: Applikation: key= ftok (".", 'a'); char *mem; if ((shmid = shmget (key, size, IPC_CREAT | IPC_EXCL | 0666)) == -1){ error; } mem= shmat (shmid, 0, 0);. key= ftok (".", 'a'); char *mem; if ((shmid = shmget (key, size, 0)) == -1) { error; } mem= shmat (shmid, 0, 0); shm

Per P. MadsenStyresystemer og tjenester44 Posix shared memory. fd = shm_open (shmname, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); char *array = mmap (0, MEMSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

Per P. MadsenStyresystemer og tjenester45 Ressourcer Printer Skærm Disk Data strukturer. Kun en af gangen vha mutex, semafor, … Ofte bruges flere end en ressource samtidig. Fx data-disk, disk- printer osv. Hvis P1 og P2 skal bruge ressource A og B…… så pas på !

Per P. MadsenStyresystemer og tjenester46 Betingelse for deadlock 1.Mutual exclusion betingelse. Hver ressourse er taget af 1 proces eller også er den ledig. 2.Hold and wait betingelse. Processer kan tage mere end en ressource af gangen. 3.No preemption betingelse. Allerede tagene ressourcer kan ikke fratages processen. 4.Circular wait betingelse. Der er en cikulær kæde af mindst to processer hvor hver proces venter på en ressource som er taget af en anden proces.

Per P. MadsenStyresystemer og tjenester47 Deadlock

Per P. MadsenStyresystemer og tjenester48 Håndtering af deadlock 1. Detection and recovery 2. Dynamik avoidance careful ressource allocation 3. Prevention Fjern en af de fire betingelser.

Per P. MadsenStyresystemer og tjenester49 Recovery Recovery vha. preemption –Tag en ressource fra en proces Recovery vha. rollback –Perodiske checkpoint. –Restart processen fra sikker tilstand hvis deadlock. Recovery vha. at afbryde en proces.

Per P. MadsenStyresystemer og tjenester50 Håndtering af deadlock 1. Detection and recovery 2. Dynamik avoidance careful ressource allocation 3. Prevention Fjern en af de fire betingelser.

Per P. MadsenStyresystemer og tjenester51 Avoidance

Per P. MadsenStyresystemer og tjenester52 Håndtering af deadlock 1. Detection and recovery 2. Dynamik avoidance careful ressource allocation 3. Prevention Fjern en af de fire betingelser.

Per P. MadsenStyresystemer og tjenester53 Prevention Anvend spooling. –Fx kun printer daemonen bruger printeren. Principle: – Tag kun de ressourcer som er absorlut nødvendige. – Så få som muligt anvender de enkelte ressourcer.

Per P. MadsenStyresystemer og tjenester54 Hold and wait betingelse Ta’ alle nødvendige ressourcer inden start. Problem Svære at kende alle nødvendige ressourcer inden start. Inefektivt da andre ikke kan bruge ressourcerne.

Per P. MadsenStyresystemer og tjenester55 No preemption betingelse Alle processer må afbrydes. Problem Det er ikke alle jobs der kan afbrydes. Printning. Brænding af en CD. Osv.

Per P. MadsenStyresystemer og tjenester56 Circular wait betingelse Ressourcer tages i en bestemt rækkefølge. Nummerer alle ressourcer. Minste nr. først. Kræver programmeringsdiciplin.