Exercice 2 - Question 2 · Bac Numérique et Sciences Informatiques Polynésie 2023 (jour 1)

Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Jour 1 (2023)

Énoncé

EXERCICE 2 (3 points)

Cet exercice porte sur la gestion des processus et la programmation orientée objet.

On rappelle qu'un processus est l'instance d'un programme en cours d'exécution. Il est identifié par un numéro unique appelé PID. L'ordonnanceur est la composante du système d'exploitation qui gère l'allocation du processeur entre les différents processus. Nous allons nous intéresser à l'algorithme d'ordonnancement du tourniquet dont le fonctionnement est résumé ci-dessous:

Les processus prêts à être exécutés sont placés dans une file d'attente selon leur ordre d'arrivée;

L'ordonnanceur alloue le processeur à chaque processus de la file d'attente un même nombre de cycles CPU, appelé quantum;

Si le processus n'est pas terminé au bout de ce temps, son exécution est suspendue et il est mis à la fin de la file d'attente;

Si le processus est terminé, il sort définitivement de la file d'attente.

2. L'objectif de la suite de l'exercice est d'implémenter en langage Python l'algorithme du tourniquet.

Nous allons utiliser une liste pour simuler la file d'attente des processus et la classe Processus dont le constructeur est donné ci-dessous:

class Processus:

def __init__(self, pid, duree):

self.pid = pid

self.duree = duree

# Le nombre de cycles qui restent à faire:

self.reste_a_faire = duree

self.etat = "Præt" Les états possibles d'un processus sont: "Præt", "En cours d'exécution", "Suspendu" et "Terminé".

a.

Recopier et compléter l'instruction Python suivante permettant de créer la liste d'attente initiale des processus donnés dans le tableau précédent (le processus PID 11 est à l'indice 0 de la liste d'attente):

liste_attente = [Processus(...,...),.........,.........]

b.

Recopier (sans les commentaires) et compléter les trois méthodes suivantes de la classe Processus:

def execute_un_cycle(self):

"""Met à jour le reste à faire après l'exécution d'un cycle.""" def change_etat(self, nouvel_etat):

"""Change l'état du processus avec la valeur passée en paramètre.""" def est_termine(self):

"""Renvoie True si le processus est terminé, False sinon, en se basant sur le reste à faire."""

c.

La fonction tourniquet ci-dessous implémente l'algorithme décrit dans l'exercice. Elle prend en paramètres une liste d'objets Processus donnés par ordre d'arrivée et un nombre entier positif correspondant au quantum. La fonction renvoie la liste des PID dans l'ordre de leur exécution par le processeur.

Compléter le code manquant:

1 def tourniquet(liste_attente, quantum):

2 ordre_execution = []

3 while liste_attente != []:

4 # On extrait le premier processus

5 processus = liste_attente.pop(0)

6 processus.change_etat("En cours d'exécution")

7 compteur_tourniquet = 0

8 while <condition ligne 8>:

9 ordre_execution.append(<valeur ligne 9>)

10 processus.execute_un_cycle()

11 compteur_tourniquet = compteur_tourniquet + 1

12 if <condition ligne 12>:

13 processus.change_etat("Suspendu")

14 liste_attente.append(processus)

15 else:

16 processus.change_etat(<valeur ligne 16>)

17 return ordre_execution

Énoncé: Exercice 2 - Question 2 · Bac Numérique et Sciences Informatiques Polynésie 2023 (jour 1)

Corrigé

Corrigé proposé par AprenAI (non officiel)

a. Recopier et compléter l'instruction Python permettant de créer la liste d'attente initiale des processus donnés dans le tableau précédent

Réponse : ```python liste_attente = [Processus(11, 4), Processus(20, 2), Processus(32, 3)] ```

b. Méthode execute_un_cycle(self)

Réponse : ```python self.reste_a_faire = self.reste_a_faire - 1 ```

b. Méthode change_etat(self, nouvel_etat)

Réponse : ```python self.etat = nouvel_etat ```

b. Méthode est_termine(self)

Réponse : ```python return self.reste_a_faire == 0 ```

Les réponses des 4 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

‹ Exercice 2 - Partie B · Polynésie 2025 (jour 2) · Exercice 3 - Question 2.a · Polynésie 2023 (jour 1) ›

Plus d’exercices de Programmation orientée objet : classes, attributs, méthodes