Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Per P. MadsenStyresystemer og tjenester1 Threads.

Lignende præsentationer


Præsentationer af emnet: "Per P. MadsenStyresystemer og tjenester1 Threads."— Præsentationens transcript:

1 Per P. MadsenStyresystemer og tjenester1 Threads

2 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.

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

4 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.

5 Per P. MadsenStyresystemer og tjenester5 Threads

6 Per P. MadsenStyresystemer og tjenester6 Threads Anvendelse.

7 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.

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

9 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); }

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

11 Per P. MadsenStyresystemer og tjenester11 Synkronisering.

12 Per P. MadsenStyresystemer og tjenester12 Peterson’s algoritme.

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

14 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 R1. ---- Løsning: blokkerende mutual exclusion kald.

15 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();

16 Semafor Per P. MadsenStyresystemer og tjenester16

17 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);

18 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);

19 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);

20 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);

21 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);

22 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);

23 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);

24 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);

25 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

26 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;

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

28 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ø

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

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

31 Per P. MadsenStyresystemer og tjenester31 Monitor

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

33 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.

34 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); }

35 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);

36 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);

37 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);

38 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ø

39 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

40 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

41 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.....

42 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);

43 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

44 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);

45 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å !

46 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.

47 Per P. MadsenStyresystemer og tjenester47 Deadlock

48 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.

49 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.

50 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.

51 Per P. MadsenStyresystemer og tjenester51 Avoidance

52 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.

53 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.

54 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.

55 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.

56 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.


Download ppt "Per P. MadsenStyresystemer og tjenester1 Threads."

Lignende præsentationer


Annoncer fra Google