ChatGPT
Given an operating system that runs on a dual-processor
platform.
The scheduler of this system manages two queues, one for
each processor. It fills that of the first processor as long as it
is not full. Once full, it fills the second. When the second is
full, it returns to the first and so on. For a queue to be full,
there must be 4 processes in the queue at the same time. If
the processor is faster than the scheduler, a queue may
never be full.
A) Give the pseudo-code of the scheduler thread so that it
can produce in the two queues alternately as
explained in the paragraph above. And also The processor
thread that consume the processes using the
function executeProcess(i).
B) Does your solution respect the three rules of mutual
exclusion? Justify la reponce en francis
2/2
A) Pseudo-code for the Scheduler and Processor Threads
Scheduler Thread
pseudo
// Variables
queue1 = [] // Queue for Processor 1
queue2 = [] // Queue for Processor 2
currentQueue = queue1 // Start filling queue1
lock = new Mutex() // Mutex for synchronization
function schedulerThread() {
while (true) {
process = getNextProcess() // Generate or retrieve the next process
[Link]() // Mutual exclusion for accessing queues
if ([Link] < 4) {
[Link](process) // Add process to the current queue
} else {
// Switch to the other queue
currentQueue = (currentQueue == queue1) ? queue2 : queue1
1/3
[Link](process) // Add process to the new queue
}
[Link]() // Release the mutex
}
}
Processor Thread
pseudo
function processorThread(processorID, queue) {
while (true) {
[Link]() // Mutual exclusion for accessing queues
if ([Link]()) {
process = [Link]() // Consume the process
} else {
process = null // No process to execute
}
[Link]() // Release the mutex
if (process != null) {
executeProcess(processorID) // Process is executed
} else {
sleep(10) // Avoid busy waiting
}
}
}
Processor 1 and Processor 2 Threads
pseudo
// Processor 1 thread
processorThread(1, queue1)
// Processor 2 thread
processorThread(2, queue2)
2/3
B) Respect des trois règles de l’exclusion mutuelle
1. Exclusion mutuelle :
L’utilisation d’un verrou (mutex) garantit que les deux threads (scheduler et processors)
ne peuvent pas accéder aux mêmes ressources (les files d’attente) en même temps. Cela
empêche des accès concurrents.
2. Attente nécessaire :
Si un thread essaie d’accéder à une file d’attente déjà utilisée par un autre thread, il est
mis en attente jusqu’à ce que le verrou soit libéré. Cela garantit une gestion ordonnée de
l’accès aux ressources.
3. Pas d’intrusion intempestive :
Le verrou est implémenté de manière équitable. Le scheduler et les processeurs peuvent
accéder aux files d’attente sans qu’un thread monopolise le verrou indéfiniment.
L’algorithme est conçu pour éviter tout blocage (deadlock).
Justification en français
Les trois règles de l'exclusion mutuelle sont respectées dans cette solution :
La protection par mutex empêche des accès simultanés à une file d'attente.
Les threads sont bloqués de manière ordonnée lorsqu’une ressource est occupée,
garantissant l'attente nécessaire.
Grâce à l’utilisation adéquate des verrous et à l'absence de dépendance circulaire, le
système ne connaît pas de blocages intempestifs.
3/3