1 / 56

Threads

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

ellie
Download Presentation

Threads

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Threads Styresystemer og tjenester

  2. 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) Process Threads • Stack pointer • Registers • Scheduling properties (such as policy or priority) • Set of pending and blocked signals • Thread specific data. Styresystemer og tjenester

  3. Threads User Space thread Kernel Space thread Styresystemer og tjenester

  4. 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. Styresystemer og tjenester

  5. Threads Styresystemer og tjenester

  6. Threads Anvendelse. Styresystemer og tjenester

  7. 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. Threads systemkald. Styresystemer og tjenester

  8. void pthread_yield (); int pthread_setschedparam (thread, schedpolicy, schedparam); Threads systemkald. Styresystemer og tjenester

  9. #include <pthread.h> #include <stdio.h> #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); } Thread eksempel. Styresystemer og tjenester

  10. Thread - processes Time : ms Styresystemer og tjenester

  11. Synkronisering. Styresystemer og tjenester

  12. Peterson’s algoritme. Styresystemer og tjenester

  13. Test og set instruktion. Intel fx: BST Motorola: BSET Styresystemer og tjenester

  14. 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. Styresystemer og tjenester

  15. 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(); Styresystemer og tjenester

  16. Semafor Styresystemer og tjenester

  17. System V: Semafor. . 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); Applikation: Operativsystem: Styresystemer og tjenester

  18. System V: Semafor. . 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); Applikation: Operativsystem: key Styresystemer og tjenester

  19. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  20. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  21. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  22. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  23. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  24. System V: Semafor. . 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); Applikation: Operativsystem: key sem_id Styresystemer og tjenester

  25. Posix: Semafor. . 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); Applikation: Operativsystem: /tmp/.SEMDsem1 /tmp/.SEMLsem1 Styresystemer og tjenester

  26. Semafor 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. Synkronisering. • Ressourcemæssige forhold: Mutual exclusion. • Tidsmæssige forhold: Timing. • Kommunikationsmæssige forhold: IPC Styresystemer og tjenester

  28. Message passing. Send(kø,’A’); kø A Receive(kø,&besked); Hvis der er en besked, så return ellers blokker indtil besked sendt. Styresystemer og tjenester

  29. Producer-consumer i endelig kø. Styresystemer og tjenester

  30. Monitor Kun en procedure/funktion af gangen. Styresystemer og tjenester

  31. Monitor Styresystemer og tjenester

  32. Klassiske IPC-typer. • Pipe • Named pipes eller FIFO’s • Message Gueues • Shared memory Styresystemer og tjenester

  33. Pipe int fd[2]; pipe(fd); // Inden fork() write(fd[1],....); // En proces. read(fd[0],....); // En anden proces. fd[0] fd[1] Styresystemer og tjenester

  34. Pipe #include <stdio.h> #include <unistd.h> #include <sys/types.h> 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); } } Styresystemer og tjenester

  35. 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. Device fil kaldt minfifo mkfifo minfifo fp = fopen(”minfifo”, ”w”); fputs(”go dav do”, fp); fp = fopen(”minfifo”, ”r”); fgets(readbuf, 80, fp); Styresystemer og tjenester

  36. Message Gueues. • En FIFO kø der oprettes i operativsystemet vha en key. . 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); Applikation: Operativsystem: Styresystemer og tjenester

  37. Message Gueues. . 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); Applikation: Operativsystem: key Styresystemer og tjenester

  38. Message Gueues. . 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); Applikation: kø Operativsystem: key Styresystemer og tjenester

  39. Message Gueues. . 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); Applikation: kø qbuf Operativsystem: key Styresystemer og tjenester

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

  41. 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. • .... Styresystemer og tjenester

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

  43. Shared memory. • Delt memory mellem flere processer. • Den hurtigste form for IPC. • Men husk mutual exclusion. 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); Applikation: Operativsystem: shm Styresystemer og tjenester

  44. 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); Styresystemer og tjenester

  45. Ressourcer • 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å ! Styresystemer og tjenester

  46. Betingelse for deadlock • Mutual exclusion betingelse. • Hver ressourse er taget af 1 proces eller også er den ledig. • Hold and wait betingelse. • Processer kan tage mere end en ressource af gangen. • No preemption betingelse. • Allerede tagene ressourcer kan ikke fratages processen. • 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. Styresystemer og tjenester

  47. Deadlock Styresystemer og tjenester

  48. Håndtering af deadlock • Detection and recovery • Dynamik avoidance • careful ressource allocation • Prevention • Fjern en af de fire betingelser. Styresystemer og tjenester

  49. 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. Styresystemer og tjenester

  50. Håndtering af deadlock • Detection and recovery • Dynamik avoidance • careful ressource allocation • Prevention • Fjern en af de fire betingelser. Styresystemer og tjenester

More Related