Ruud- 4 - Communicatie tussen threads Flashcards

1
Q

Waarom bevat de implementatie van een message queue een semafoor (minmaal 1)?

A

Een semafoor is nodig om te voorkomen dat meerdere threads “gelijktijdig” toegang tot de
mailbox zouden kunnen krijgen (gevaar van race-conditions)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Noem een belangrijk verschil tussen een message queue en message passing

A
  • Message queue: De communicatie verloopt via een stuk geheugen (mailbox) van het
    operatingsysteem.
  • Message passing: De data worden gelijk geplaatst in het geheugen van het doelproces.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Leg uit wat een time-out bij het verzenden en ontvangen van data naar een message queue voor een functie heeft

A
  • Bij verzenden: Een tijdsinterval waarin gewacht wordt totdat de mailbox weer vrije ruimte heeft
    voor het te versturen bericht.
  • Bij ontvangen: Een tijdsinterval waarin gewacht wordt totdat de mailbox weer een nieuw bericht
    bevat
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welke POSIX system calls zijn er benodigd voor communicatie m.b.v. een pipe? Geef bij elke system call een toelichting.

A

pipe(): voor het creëren van een pipe
read(): voor het lezen uit een pipe
write(): voor het schrijven naar een pipe

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Welke POSIX system calls zijn er benodigd voor shared memory communicatie? Geef bij elke system call een toelichting.

A

shmget(): voor het creëren van een hoeveelheid gemeenschappelijk geheugen
shmat(): voor het verkrijgen van een pointer naar het gemeenschappelijk geheugen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Bij veel real-time operating systemen kan communicatie tussen threads ook plaatsvinden d.m.v. “signals”. Hoe kun je – in POSIX – een signaal (signal) versturen en hoe kun je een signaal afvangen?

A

Versturen: int kill (pid_t pid, int sig); bij pid= ─1 een broadcast.

Ontvangen: sighandler_t signal(int signum, sighandler_t handler);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly