SlideShare a Scribd company logo
Semaphores
Γ.Μανάρας
1
 Η ταλαιπωρία μίας λέξης
 Τι είναι Semaphore?
 Κλήσεις συστήματος και παραδείγματα
 Ένα ρεαλιστικό παράδειγμα
2
3
4
 Είναι ένας τύπος μεταβλητής που δίνει ένα μηχανισμό συγχρονισμού διεργασιών
για την αποκλειστική διαχείριση κοινών πόρων
 Ο χειρισμός των semaphores υλοποιείται από δύο εντολές:
- P / down
- V / up
 Αν -κατά την κλήση της down- η τιμή της semaphore είναι 0,
η καλούσα διεργασία θα μπλοκαριστεί
5
 int semget(key_t key, int nsems, int semflg);
Επιστρέφει το semaphore identifier
για ένα array nsems semaphores
που συνδέεται με το key
και δικαιώματα-πρόσθετες απαιτήσεις semflg
int sid;
key_t skey;
int ns;
int sflag;
int main()
{
skey = 1234;
ns = 1;
sflag = 0666 | IPC_CREAT;
if ((sid = semget(skey, ns, sflag)) == -1) { perror("semget"); exit(1); }
printf("Semget succeed! SID=%dn", sid);
exit(0);
}
6
 int semctl(int sid, int snum, int cmd, union semun arg);
Εκτελεί την ενέργεια cmd
στο snum element (δηλ. semaphore)
του semaphore array με ταυτότητα sid
με το arg μεταφέρονται τιμές από/προς το semaphore array
union semun {
int val;
struct semid_ds *buff;
unsigned short *array;
};
 SETVAL
 GETVAL
 SETALL
 GETALL
 IPC_RMID
7
int main(void) /* semSetUp.c */
{ key_t skey;
int sid;
union semun{ int val; struct semid_ds *buff; unsigned short *array; } arg;
skey = 1234;
if ((sid = semget(skey, 1, 0666 | IPC_CREAT)) == -1) { perror("semget"); exit(1); }
printf("Successful creation of semaphore set!n");
printf("Semaphore ID=%d on KEY=%dn", sid, skey);
arg.val = 1; /* αρχικοποίηση του 0 semaphore με τιμή 1 */
if (semctl(sid, 0, SETVAL, arg) == -1){ perror("semctl"); exit(1); }
printf("New Semaphore VALUE=%dn", arg.val);
return 0;
}
8
int main(void){ /* semDeletion.c */
key_t skey;
int sid;
union semun{ int val; struct semid_ds *buff; unsigned short *array; } arg;
skey = 1234;
/* δέσμευση του semaphore */
if ((sid = semget(skey, 1, 0)) == -1) { perror("semget"); exit(1); }
printf("Semaphore ID=%d on KEY=%dn", sid, skey);
if (semctl(sid, 0, IPC_RMID, arg) == -1){ perror("semctl"); exit(1); }
printf("Successful semaphore deletion!n");
return 0;
}
9
int semop(int sid, struct sembuf *opstr, int nops);
- ενεργεί στο semaphore array,
- η δομή struct sembuf { short snum; short sop; short sflag; }; ορίζει το είδος της
ενέργειας -DOWN / UP- που θα συμβεί
- η παράμετρος nops είναι ο αριθμός των struct sembuf (προφανώς μία για κάθε semaphore)
int main(void)
{
key_t skey;
int sid;
struct sembuf sb = { 0, -1, 0 }; // πρώτη semaphore, DOWN setup
skey = 1234;
10
if ((sid = semget(skey, 1, 0)) == -1){ perror("semget"); exit(1); }
printf("nnGrap hold of semSetUp.c semaphore ");
printf("with SID=%d on KEY=%dn",sid,skey);
printf("n< < Press ENTER to block the target > >");
getchar();
printf("Trying to block the target...n");
/* DOWN */
if (semop(sid, &sb, 1) == -1){ perror("semop"); exit(1); }
printf("Blocked!!!nnn< < < Press ENTER to unblock > > > ");
getchar();
sb.sem_op = 1;
/* UP */
if (semop(sid, &sb, 1) == -1) { perror("semop"); exit(1); }
printf("Unblocked!nn");
return 0;
}
11
int main()
{
int sid;
union semun sem_val;
int child_pid, i, rc;
sid = semget(SKEY, 1, IPC_CREAT | 0600);
if (sid == -1)
{
perror("main: semget");
exit(1);
}
sem_val.val = 1;
rc = semctl(sid, 0, SETVAL, sem_val);
if (rc == -1)
{
perror("main: semctl");
exit(1);
}
12
for (i=0; i<NUM_PROCS; i++)
{ child_pid = fork();
switch(child_pid)
{ case -1: perror("fork");
exit(1);
case 0: do_child_loop(sid, FILE_NAME);
exit(0);
default: break;
} // switch
}
for (i=0; i<NUM_PROCS; i++)
{ int child_status;
wait(&child_status);
}
printf("main: all donen");
fflush(stdout);
}
13
void do_child_loop(int sem_set_id, char* file)
{
pid_t pid = getpid();
int i, j;
for (i=0; i<3; i++)
{
update_file(sem_set_id, file, pid);
for (j=0; j<DELAY; j++)
;
}
}
14
void update_file(int sem_set_id, char* file, int num){
struct sembuf sem_op;
FILE *fp = fopen(file, "w");
// DOWN
sem_op.sem_num = 0;
sem_op.sem_op = -1;
sem_op.sem_flg = 0;
semop(sem_set_id, &sem_op, 1);
if (fp != NULL){
fprintf(fp, "%dn", num);
printf("%dn", num);
fclose(fp);
}
// UP
sem_op.sem_num = 0;
sem_op.sem_op = 1;
sem_op.sem_flg = 0;
semop(sem_set_id, &sem_op, 1);
}
15

More Related Content

More from Yanis Manaras

Webclass admin 4
Webclass admin 4Webclass admin 4
Webclass admin 4
Yanis Manaras
 
What iswebclass 4
What iswebclass 4What iswebclass 4
What iswebclass 4
Yanis Manaras
 
Webclass teacher 4
Webclass teacher 4Webclass teacher 4
Webclass teacher 4
Yanis Manaras
 
Webclass student 4
Webclass student 4Webclass student 4
Webclass student 4
Yanis Manaras
 

More from Yanis Manaras (20)

Webclass admin 4
Webclass admin 4Webclass admin 4
Webclass admin 4
 
What iswebclass 4
What iswebclass 4What iswebclass 4
What iswebclass 4
 
Webclass teacher 4
Webclass teacher 4Webclass teacher 4
Webclass teacher 4
 
Webclass student 4
Webclass student 4Webclass student 4
Webclass student 4
 
Webclass Student
Webclass StudentWebclass Student
Webclass Student
 
Ads 1 fibonacci
Ads 1 fibonacciAds 1 fibonacci
Ads 1 fibonacci
 
Ads 1 alt_e
Ads 1 alt_eAds 1 alt_e
Ads 1 alt_e
 
Ads 1 common
Ads 1 commonAds 1 common
Ads 1 common
 
HTML and Javascript
HTML and JavascriptHTML and Javascript
HTML and Javascript
 
ΛΣ2_IPC
ΛΣ2_IPCΛΣ2_IPC
ΛΣ2_IPC
 
ΛΣ1-002
ΛΣ1-002ΛΣ1-002
ΛΣ1-002
 
Processes
ProcessesProcesses
Processes
 
ΛΣ1-001
ΛΣ1-001ΛΣ1-001
ΛΣ1-001
 
SE5
SE5SE5
SE5
 
SE4
SE4SE4
SE4
 
SQL7v2
SQL7v2SQL7v2
SQL7v2
 
SQL9v0
SQL9v0SQL9v0
SQL9v0
 
SQL8v1
SQL8v1SQL8v1
SQL8v1
 
ΛΣ1FILES1v0
ΛΣ1FILES1v0ΛΣ1FILES1v0
ΛΣ1FILES1v0
 
ΛΣ1FILES2v0
ΛΣ1FILES2v0ΛΣ1FILES2v0
ΛΣ1FILES2v0
 

Recently uploaded

Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptxΚαμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
peter190314
 
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛΤα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
Newsroom8
 
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
Panagiotis Prentzas
 
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdfΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
athinadimi
 
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛ
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛΟι απαντήσεις στην Πληροφορική για τα ΓΕΛ
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛ
Newsroom8
 
Outdoor and Environmental Education(1).pptx
Outdoor and Environmental Education(1).pptxOutdoor and Environmental Education(1).pptx
Outdoor and Environmental Education(1).pptx
eleni rizopoulou
 
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
Tassos Karampinis
 
Η τέχνη του Sampling/ The art of Sampling
Η τέχνη του Sampling/ The art of SamplingΗ τέχνη του Sampling/ The art of Sampling
Η τέχνη του Sampling/ The art of Sampling
ssuser6717fd
 
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.docΣχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
Tassos Karampinis
 
Η υδροστατική πίεση
Η υδροστατική                       πίεσηΗ υδροστατική                       πίεση
Η υδροστατική πίεση
Dimitra Mylonaki
 
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
athinadimi
 
Θέματα χημείας -Πανελλαδικές εξετάσεις 2024
Θέματα χημείας  -Πανελλαδικές εξετάσεις 2024Θέματα χημείας  -Πανελλαδικές εξετάσεις 2024
Θέματα χημείας -Πανελλαδικές εξετάσεις 2024
Θεόδωρος Μαραγκούλας
 
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛΤα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
Newsroom8
 
Hardware Personal Computer a small Introduction
Hardware Personal Computer a small  IntroductionHardware Personal Computer a small  Introduction
Hardware Personal Computer a small Introduction
ssuserd4abe0
 
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdfΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
athinadimi
 
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdfΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
athinadimi
 
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docxΑπολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
Tassos Karampinis
 
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdfΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
2lykkomo
 
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
vastsielou
 
them_latin_gel_240606. latinika panellinies 2024pdf
them_latin_gel_240606. latinika panellinies 2024pdfthem_latin_gel_240606. latinika panellinies 2024pdf
them_latin_gel_240606. latinika panellinies 2024pdf
konstantinantountoum1
 

Recently uploaded (20)

Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptxΚαμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
 
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛΤα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
Τα θέματα σε Ανατομία-Φυσιολογία ΙΙ στα ΕΠΑΛ
 
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
Εξεταστέα ύλη Οικονομία (ΑΟΘ) ΕΠΑΛ 2023 - 2024
 
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdfΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΛΑΤΙΝΙΚΑ__ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ.pdf
 
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛ
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛΟι απαντήσεις στην Πληροφορική για τα ΓΕΛ
Οι απαντήσεις στην Πληροφορική για τα ΓΕΛ
 
Outdoor and Environmental Education(1).pptx
Outdoor and Environmental Education(1).pptxOutdoor and Environmental Education(1).pptx
Outdoor and Environmental Education(1).pptx
 
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
Σχέδιο Δράσης Ομίλου Ρομποτικής - 56ου Γυμνασίου ΑθήναςSxedio2023-24OmilosRom...
 
Η τέχνη του Sampling/ The art of Sampling
Η τέχνη του Sampling/ The art of SamplingΗ τέχνη του Sampling/ The art of Sampling
Η τέχνη του Sampling/ The art of Sampling
 
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.docΣχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
Σχέδιο Δράσης - 56ο Γυμνάσιο ΑΘήνας. Sxedio2023-24OmilosEikastikwn.doc
 
Η υδροστατική πίεση
Η υδροστατική                       πίεσηΗ υδροστατική                       πίεση
Η υδροστατική πίεση
 
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
Οι απαντήσεις στα Αρχαία: Τα θέματα που έπεσαν στις Πανελλήνιες 2024
 
Θέματα χημείας -Πανελλαδικές εξετάσεις 2024
Θέματα χημείας  -Πανελλαδικές εξετάσεις 2024Θέματα χημείας  -Πανελλαδικές εξετάσεις 2024
Θέματα χημείας -Πανελλαδικές εξετάσεις 2024
 
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛΤα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
Τα θέματα σε Δίκτυα Υπολογιστών για τα ΕΠΑΛ
 
Hardware Personal Computer a small Introduction
Hardware Personal Computer a small  IntroductionHardware Personal Computer a small  Introduction
Hardware Personal Computer a small Introduction
 
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdfΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
ΑΠΑΝΤΗΣΕΙΣ - ΠΑΝΕΛΛΗΝΙΕΣ 2024 - 3 - πληροφορική.pdf
 
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdfΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
ΑΠΑΝΤΗΣΕΙΣ_ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ-ΠΑΝΕΛΛΗΝΙΕΣ 2024.pdf
 
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docxΑπολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
Απολογισμός Ομίλου Ρομποτικής - SxedioDrasis2023-24ApologismosRobotiki-F.docx
 
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdfΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
 
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
MÜNCHEN.pptx (2. Gymnasium Korinth - Klasse A1)
 
them_latin_gel_240606. latinika panellinies 2024pdf
them_latin_gel_240606. latinika panellinies 2024pdfthem_latin_gel_240606. latinika panellinies 2024pdf
them_latin_gel_240606. latinika panellinies 2024pdf
 

ΛΣ2SEMAPHORESv0

  • 2.  Η ταλαιπωρία μίας λέξης  Τι είναι Semaphore?  Κλήσεις συστήματος και παραδείγματα  Ένα ρεαλιστικό παράδειγμα 2
  • 3. 3
  • 4. 4
  • 5.  Είναι ένας τύπος μεταβλητής που δίνει ένα μηχανισμό συγχρονισμού διεργασιών για την αποκλειστική διαχείριση κοινών πόρων  Ο χειρισμός των semaphores υλοποιείται από δύο εντολές: - P / down - V / up  Αν -κατά την κλήση της down- η τιμή της semaphore είναι 0, η καλούσα διεργασία θα μπλοκαριστεί 5
  • 6.  int semget(key_t key, int nsems, int semflg); Επιστρέφει το semaphore identifier για ένα array nsems semaphores που συνδέεται με το key και δικαιώματα-πρόσθετες απαιτήσεις semflg int sid; key_t skey; int ns; int sflag; int main() { skey = 1234; ns = 1; sflag = 0666 | IPC_CREAT; if ((sid = semget(skey, ns, sflag)) == -1) { perror("semget"); exit(1); } printf("Semget succeed! SID=%dn", sid); exit(0); } 6
  • 7.  int semctl(int sid, int snum, int cmd, union semun arg); Εκτελεί την ενέργεια cmd στο snum element (δηλ. semaphore) του semaphore array με ταυτότητα sid με το arg μεταφέρονται τιμές από/προς το semaphore array union semun { int val; struct semid_ds *buff; unsigned short *array; };  SETVAL  GETVAL  SETALL  GETALL  IPC_RMID 7
  • 8. int main(void) /* semSetUp.c */ { key_t skey; int sid; union semun{ int val; struct semid_ds *buff; unsigned short *array; } arg; skey = 1234; if ((sid = semget(skey, 1, 0666 | IPC_CREAT)) == -1) { perror("semget"); exit(1); } printf("Successful creation of semaphore set!n"); printf("Semaphore ID=%d on KEY=%dn", sid, skey); arg.val = 1; /* αρχικοποίηση του 0 semaphore με τιμή 1 */ if (semctl(sid, 0, SETVAL, arg) == -1){ perror("semctl"); exit(1); } printf("New Semaphore VALUE=%dn", arg.val); return 0; } 8
  • 9. int main(void){ /* semDeletion.c */ key_t skey; int sid; union semun{ int val; struct semid_ds *buff; unsigned short *array; } arg; skey = 1234; /* δέσμευση του semaphore */ if ((sid = semget(skey, 1, 0)) == -1) { perror("semget"); exit(1); } printf("Semaphore ID=%d on KEY=%dn", sid, skey); if (semctl(sid, 0, IPC_RMID, arg) == -1){ perror("semctl"); exit(1); } printf("Successful semaphore deletion!n"); return 0; } 9
  • 10. int semop(int sid, struct sembuf *opstr, int nops); - ενεργεί στο semaphore array, - η δομή struct sembuf { short snum; short sop; short sflag; }; ορίζει το είδος της ενέργειας -DOWN / UP- που θα συμβεί - η παράμετρος nops είναι ο αριθμός των struct sembuf (προφανώς μία για κάθε semaphore) int main(void) { key_t skey; int sid; struct sembuf sb = { 0, -1, 0 }; // πρώτη semaphore, DOWN setup skey = 1234; 10
  • 11. if ((sid = semget(skey, 1, 0)) == -1){ perror("semget"); exit(1); } printf("nnGrap hold of semSetUp.c semaphore "); printf("with SID=%d on KEY=%dn",sid,skey); printf("n< < Press ENTER to block the target > >"); getchar(); printf("Trying to block the target...n"); /* DOWN */ if (semop(sid, &sb, 1) == -1){ perror("semop"); exit(1); } printf("Blocked!!!nnn< < < Press ENTER to unblock > > > "); getchar(); sb.sem_op = 1; /* UP */ if (semop(sid, &sb, 1) == -1) { perror("semop"); exit(1); } printf("Unblocked!nn"); return 0; } 11
  • 12. int main() { int sid; union semun sem_val; int child_pid, i, rc; sid = semget(SKEY, 1, IPC_CREAT | 0600); if (sid == -1) { perror("main: semget"); exit(1); } sem_val.val = 1; rc = semctl(sid, 0, SETVAL, sem_val); if (rc == -1) { perror("main: semctl"); exit(1); } 12
  • 13. for (i=0; i<NUM_PROCS; i++) { child_pid = fork(); switch(child_pid) { case -1: perror("fork"); exit(1); case 0: do_child_loop(sid, FILE_NAME); exit(0); default: break; } // switch } for (i=0; i<NUM_PROCS; i++) { int child_status; wait(&child_status); } printf("main: all donen"); fflush(stdout); } 13
  • 14. void do_child_loop(int sem_set_id, char* file) { pid_t pid = getpid(); int i, j; for (i=0; i<3; i++) { update_file(sem_set_id, file, pid); for (j=0; j<DELAY; j++) ; } } 14
  • 15. void update_file(int sem_set_id, char* file, int num){ struct sembuf sem_op; FILE *fp = fopen(file, "w"); // DOWN sem_op.sem_num = 0; sem_op.sem_op = -1; sem_op.sem_flg = 0; semop(sem_set_id, &sem_op, 1); if (fp != NULL){ fprintf(fp, "%dn", num); printf("%dn", num); fclose(fp); } // UP sem_op.sem_num = 0; sem_op.sem_op = 1; sem_op.sem_flg = 0; semop(sem_set_id, &sem_op, 1); } 15