\thumb

\begin{qcm}{Sur les SoCs}{10}
\label{exo:08-soc1}
Pour chacune des questions suivantes, plusieurs propositions de réponses sont faites dont une seule est réellement pertinente. Laquelle ?

\begin{questions}
\item Un Soc est:

\choix Une puce électronique;

\choix Une sorte de micro ordinateur sur une puce électronique;

\choix Un système d'exploitation sur une puce électronique;

\choix Une mémoire intégrée à une puce électronique.


%%%

\item La fluidité d'une vidéo sur un appareil à SoC dépend avant tout:\resetchoix

\choix de la mémoire embarquée dans le SoC;

\choix du nombre de c\oe urs du CPU;

\choix de la puce graphique (GPU);

\choix des ISP (Image Signal Processor).
\end{questions}
\end{qcm}

\begin{corrige}
\begin{questions}
\item Réponse \choix[b]. Un SoC est un système intégré sur une puce qui regroupe l'essentiel d'un ordinateur : processeurs, mémoire, périphériques d'interface, etc.

\item Réponse \choix[c]. En effet, les performances graphiques dépendent avant tout de la puce graphique. C'est elle qui gère les calculs des images donc il est nécessaire d'avoir un bon GPU pour que les calculs se fassent rapidement.
\end{questions}
\end{corrige}



%%%%%%%%%%%%%%

\begin{qcm}{Sur les processus}{5} % titre , temps
\label{exo:08-processus1}
Pour chacune des questions suivantes, plusieurs propositions de réponses sont faites dont une seule est réellement pertinente. Laquelle ?

\begin{questions}
\item Un processus est:

\choix Un programme;

\choix Un programme en cours d'exécution;

\choix Un programme en fin d'exécution;

\choix Un programme achevé.

%%%

\item\resetchoix Un scheduler est:

\begin{tabularx}{\linewidth}{@{}l@{\;}X@{}}
\choix & Un sous-ensemble du système d'exploitation qui organise les tâches à exécuter;\\
\choix & Un programme antivirus;\\
\choix & Un processus de gestion de calendrier;\\
\choix & Un programme qui diagnostique les faiblesses du système\linebreak d'exploitation.
\end{tabularx}

\end{questions}
\end{qcm}

\begin{corrige}
\begin{questions}
\item Réponse \choix[b]. Un processus est un programme en cours d'exécution. 

\item Réponse \choix[a]. Un ordonnanceur est en effet un composant du noyau du système d'exploitation qui choisit l'ordre d'exécution des processus. 

\item Réponse \choix[c]. Il existe en effet trois niveau d'ordonnancement des processus : l'ordonnancement \textit{à long terme}, l'ordonnancement à \textit{moyen terme} et l'ordonnancement à \textit{court terme}.
\end{questions}
\end{corrige}

%%%%%%%%%%%%%%

\begin{vf}{Sur les SoCs}{10} % titre , temps
\label{exo:08-soc2}
Les affirmations suivantes sont-elles vraies ou fausses ? Justifier la réponse.

\begin{questions}
\item Avec un Soc, le matériel peut être mis à jour.
\item La consommation énergétique d'un SoC est faible.
\item Dans un SoC, tous les éléments sont indépendants.
\end{questions}
\end{vf}

\begin{corrige}
\begin{questions}
\item \textit{Faux}. C'est d'ailleurs l'un des inconvénients du SoC.

\item \textit{Vrai}. C'est l'un des avantages du Soc avec sa petite taille.

\item \textit{Faux}. Au contraire, dans un SoC, tous les éléments sont liés (comme par exemple le processeur dont la fréquence est directement liée à celle de la carte graphique).
\end{questions}
\end{corrige}

\sectionnn{Architecture matérielle}

%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{exo}{La RAM}{\null}{1}{5} 
\label{exo:08-achi-RAM}
\begin{questions}
\item Donner une définition de la RAM.
\item Quand on allume un ordinateur par exemple, qu'est-ce qui est avant tout stocké dans la RAM ?
\end{questions}
\end{exo}

\begin{corrige}
\begin{questions}
\item La RAM (Random Access Memory), ou \textit{mémoire vive}, est un espace de stockage des données volatiles, c'est-à-dire une zone où les programmes en cours d'exécution ainsi que les données qu'ils peuvent manipuler ou qui sont nécessaires sont stockés.

\item Au démarrage d'une machine, la RAM est toujours vide. Lorsqu'on l'allume, c'est avant tout le système d'exploitation qui y est chargé, sans quoi la machine ne saurait pas quoi faire. 
\end{questions}
\end{corrige}

%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{exo}{Les processeurs}{\null}{1}{10} 
\begin{questions}
\item À quoi correspond la fréquence d'un processeur ?
\item Par quel sigle désigne-t-on un processeur ?
\item Dans un processeur, qu'est-ce qu'un c\oe ur ? Quel est l'avantage principal d'avoir plusieurs c\oe urs dans un processeur par rapport à la consommation énergétique de ce dernier ?
\item Comment désigne-t-on les données reçues par un processeur par les contrôleurs de périphérique ?
\item Est-il vrai qu'il ne peut y avoir qu'un unique processeur dans une machine ?
\end{questions}
\end{exo}

\begin{corrige}
\enlargethispage*{5em}
\begin{questions}
\item La fréquence d'un processeur correspond à la fréquence à laquelle il exécute des instructions de tous les microprogrammes.
\newpage
\item Le sigle désignant un processeur est CPU : \textit{Central Processor Unit}.

\item Dans un processeur, un c\oe ur est une unité qui exécute des instructions. Un c\oe ur travaille en parallèle des autres.

Plus il y a de c\oe urs dans un processeur et plus le nombre d'opérations exécutées par seconde augmente sans avoir à augmenter la fréquence globale du processeur, ce qui augmenterait la consommation énergétique de ce dernier. De plus le processeur chaufferait davantage.

\item Les données reçues par un processeur par les contrôleurs de périphérique sont désignées par le sigle \og I/O \fg{} (pour \og Input/Output \fg) ou \og E/S \fg{} (pour \og Entrée/Sortie \fg).

\item Il n'est pas vrai de dire qu'il ne peut y avoir qu'un unique processeur dans une machine. En effet, le GPU (\textit{Graphics Processing Unit}, contrôleur vidéo), est lui aussi un processeur. Donc un ordinateur portable standard, par exemple, comporte au moins deux processeurs.
\end{questions}
\end{corrige}



%%%%%%%%%%%%%%%%

\begin{exo}{Les SoCs}{\null}{1}{10} 
\label{exo:08-achi-soc}
\begin{questions}
\item Définir un SoC.
\item En plus de sa petite taille, quel est l'autre principal avantage d'un SoC concernant l'énergie ? Expliquer pourquoi cet avantage est possible.
\item Quel est l'autre avantage d'un SoC en terme économique?
\item Citer un inconvénient majeur des SoCs.
\end{questions}
\end{exo}

\begin{corrige}
\begin{questions}
\item Un SoC (ou \textit{System on Chip}) est un système intégré sur une puce qui regroupe les principaux composants d'un ordinateur (comme par exemple la mémoire, le processeur ou encore les bus de communication).

\item La faible consommation d'énergie est un grand avantage des SoCs. Elle est due à sa taille, si petite que très peu d'énergie suffit par rapport à une carte mère, où les distances entre composants sont bien plus grands. On obtient ainsi dans un SoC moins de dissipation thermique et de pertes par effet Joule.

\item Par sa petite taille, un SoC est très économique à fabriquer : les coûts de fabrication sont réduits car ils peuvent être produits en très grande quantité à l'aide de machines (donc pas de main d'\oe uvre à payer).

\item La petite taille d'un SoC est certes un avantage pour les raisons que nous avons citées précédemment, mais cela constitue aussi un inconvénient majeur : si un composant est défectueux au sein du SoC, c'est le SoC entier qui ne fonctionne pas bien; il faut donc le remplacer entièrement.
\end{questions}
\end{corrige}


\sectionnn{Processus et ressources partagées}


\begin{exo}{Processus}{\null}{1}{15} 
\label{exo:08-processus2}
\begin{questions}
\item Un processus est-il un programme ? 
\item Expliquer dans les grandes lignes le rôle de l'ordonnanceur dans la gestion des processus.
\item Citer tous les états possibles d'un processus en expliquant brièvement chaque état.
\item Expliquer le principe d'interblocage.
\end{questions}
\end{exo}

\begin{corrige}
\begin{questions}
\item Un programme est stocké sur une mémoire de masse. Tant qu'il n'est pas sollicité, il ne fait rien. Or, un processus est une instance de programme qui est exécutée (de manière continue ou discontinue) par le système d'exploitation.

On ne peut donc pas dire qu'un processus est un programme.

\item L'ordonnanceur, ou \textit{scheduler}, est un module du système d'exploitation qui attribue du temps d'exécution (quantum de temps) à chaque processus en décidant ceux qui seront prioritaires. Il gère aussi les changements de contextes.

\item Les différents états d'un processus sont :
\begin{itemize}
\item \og\textit{nouveau}\fg: un programme a été sélectionné pour démarrage et ses instructions ont été recopiées en mémoire;

\item \og\textit{prêt}\fg: le processus est en attente de quantum(s) de temps CPU pour exécuter son travail;

\item \og\textit{en cours d'exécution}\fg: un ou plusieurs quantum(s) de temps a (ont) été alloué(s) au processus. Il exécute ses instructions jusqu'à écoulement du temps imparti;

\item \og\textit{bloqué}\fg: le processus est en attente d'une ou plusieurs ressource(s) et ne peut rien faire en attendant. Il n'est pas éligible à l'obtention d'un quantum de temps CPU.

\item \og\textit{terminé}\fg: le processus a achevé son exécution jusqu'à sa dernière instruction et il doit être déchargé de la mémoire.
\end{itemize}

\item On parle d'interblocage quand un processus (A) est en attente d'un travail que doit fournir un processus (B) qui lui-même est en attente d'un travail que doit fournir (A) (qui ne peut pas le fournir car il est bloqué).
\end{questions}
\end{corrige}




\sectionnn{Sécurité des échanges de données}

\begin{exo}{ROT13}{\null}{1}{10} 
\label{exo:08-ROT13}
\'Ecrire une fonction Python \texttt{chiffrement}\_\texttt{rot13(message)} permettant de chiffrer un message à l'aide de l'algorithme de chiffrement ROT13. Pour cela,
\begin{itemize}
\item on s'assurera que toutes les lettres du message sont en minuscule;
\item si le message comporte plusieurs mots, on le découpera;
\item on écrira une fonction \texttt{rot13(mot)} chiffrant un mot à l'aide de\linebreak l'algorithme demandé;
\item dans la fonction \texttt{chiffrement}\_\texttt{rot13(message)}, on fera appel à la\linebreak fonction \texttt{rot13(mot)}.
\end{itemize}

Chiffrer alors le message : \og cheval indomptable \fg.
\end{exo}

\begin{corrige}
Une proposition de programme est donnée page suivante.

\Par

Dans la fonction \texttt{rot13(mot)},
\begin{itemize}
\item on commence par initialiser une chaîne de caractères \texttt{r} vide, qui contiendra le résultat attendu;

\item on parcourt chaque lettre du mot: on détermine son code ASCII avec \texttt{ord(lettre)} et on lui ajoute 13. Ensuite, on soustrait le code ASCII du caractère 'a' afin d'associer 'a' à 0, 'b' à 1, etc. Le résultat de ces opérations est pris modulo 26 car l'alphabet est considéré comme un \og cycle \fg de longueur 26. On obtient ainsi le rang de la lettre chiffrée. Il suffit ensuite d'ajouter \texttt{ord('a')} au résultat pour obtenir le code ASCII de la lettre chiffrée. Ensuite, on utilise la commande \texttt{chr(code ASCII)} pour obtenir le caractère souhaité, que l'on ajoute à la chaîne \texttt{r}.
\end{itemize}

Dans la fonction \texttt{chiffrement}\_\texttt{rot13(message)}, on transforme le message de sorte qu'il ne contienne que des minuscules, puis on parcourt la liste des mots composant le message (obtenue à l'aide de la méthode \texttt{split}) afin d'appliquer à chacun d'eux la fonction \texttt{rot13(mot)}.

\newpage

Le message \og cheval indomptable \fg{} est alors chiffré en :
\begin{center}
\og puriny vaqbzcgnoyr \fg{} 
\end{center}

\nathanlive{progmargin}{}
\begin{listing}{}{08-rot13.py}\end{listing}
\end{corrige}

%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{exo}{Chiffrement à l'aide de XOR}{\null}{2}{30}
\label{exo:08-XOR}
\begin{questions}
\item On donne le programme suivant:
\begin{listing}{}{08-crypto-1.py}\end{listing}
\begin{questions}
\item Qu'affiche-t-il ?
\item Son résultat peut-il être considéré comme une version chiffrée du texte initial ? Expliquez.
\end{questions}

\item Écrire la fonction réciproque \texttt{getText(liste)} qui, à partir du résultat de \texttt{getBytes(msg)}, retourne le texte initial \texttt{msg}.

\item On veut maintenant utiliser une clé secrète pour encoder les valeurs de la liste résultat de getBytes() afin qu'il ne soit pas possible à un intervenant de retrouver le texte initial par \texttt{getText()} sans connaître la clé.

Pour ce faire, on décide d'utiliser l'opération \og OU exclusif \fg (XOR) entre chaque octet du texte et celui de la clé. XOR est une opération binaire (notée \verb+^+ en Python) qui s'effectue sur chacun des bits des deux opérandes:
\Par
\begin{figure}
\begin{center}
\begin{tabular}{|Zc|Zc|Zc|}
\tabulartitle\hline
XOR & 0 & 1\\
\hline
0 & 0 & 1\\
\hline
1 & 1 & 0\\
\hline
\end{tabular}
\tabcaption{Table du \og OU exclusif \fg{} }
\label{cours:table-XOR}
\end{center}
\end{figure}
\Par
Par exemple,
\begin{center}
56 \verb+^+ 83 $\to$ 0011 1000 \verb+^+ 0101 0011 = 0110 1011 $\to$ 107.
\end{center}

Supposons, pour le moment, que la clé est plus longue que le texte:
\begin{center}
Clé =  \og Ceci est une clé de 41 caractères de long \fg
\end{center}

\begin{questions}
\item Écrire une fonction qui reçoit un texte et une clé en arguments et retourne les octets du texte combinés aux octets respectifs de la clé via l'opération XOR. Le résultat sera fourni sous forme d'une liste d'octets.

\item Appliquer cette fonction au texte \og message urgent \fg avec la clé \og cryptographie005 \fg. 

Afficher la liste des octets ainsi cryptés obtenue et comparer avec l'utilisation de la fonction \texttt{getBytes()} de la question 1.

\item Constater qu'une fois l'opération XOR appliquée, il n'est pas possible de récupérer la phrase d'origine avec \texttt{getText()}.

\item Pour décrypter le texte, il faut appliquer l'opération inverse du XOR à la liste des octets chiffrés. Donc, il faut disposer de la clé secrète.

L'opération XOR est involutive, c'est-à-dire que :
\begin{center}
si a XOR b = c alors c XOR a = b et c XOR b = a.
\end{center}

Pour l'inverse, il suffit donc de l'appliquer une nouvelle fois, sur les octets chiffrés, avec la même clé.

Constater qu'une fois l'opération XOR appliquée à nouveau, le texte peut être déchiffré.
\end{questions}

\item On veut maintenant pouvoir utiliser une clé de longueur quelconque \linebreak(typiquement plus courte que le message à transmettre). Il n'y aura alors pas assez d'octets dans la clé pour calculer le XOR en une seule fois sur tout le message. On va donc répéter la clé, autant de fois que nécessaire, pour chiffrer le message en entier.

Par exemple,
\begin{itemize}\ttfamily
\item Clé: "Key"
\item Message: $\begin{aligned}[t]\texttt{"Ceci est le message"}\\\texttt{"KeyKeyKeyKeyKeyKeyK"}\end{aligned}$
\newpage
\item Message chiffré = [\\
\hspace*{4cm} ord("C") \verb+^+ ord("K"),\\
\hspace*{4cm} ord("e") \verb+^+ ord("e"),\\
\hspace*{4cm} ord("c") \verb+^+ ord("y"),\\
\hspace*{4cm}  ord("i") \verb+^+ ord("K"),\\
\hspace*{4cm} ... ]
\end{itemize}

\begin{questions}
\item Écrire une fonction \texttt{computeXorRepeatingKey(text,key)} qui effectue ce calcul et l'appliquer sur une phrase.
\item Utiliser la même fonction, avec la même clé pour déchiffrer le\linebreak résultat précédent et vérifier que la reconstruction de la phase conduit bien à celle de départ.
\end{questions}
\end{questions}

\end{exo}

\begin{corrige}
\begin{questions}
\item 
\begin{questions}
\item La fonction \texttt{getBytes(msg)} retourne la liste des valeurs décimales de chaque octet qui compose le texte reçu \texttt{msg}. Par exemple, si le texte reçu est \og My \fg alors la fonction renvoie la liste %ERR NON DETECTEE \texttt{[77,122]} car 77 est le code ASCII de \og M \fg et 122 celui de \og y \fg.
\texttt{[77,121]} car 77 est le code ASCII de \og M \fg et 121 celui de \og y \fg.

Ainsi, le programme proposé affiche la liste de tous les codes ASCII des caractères qui composent le message informé.

\item Le résultat du programme est effectivement une manière d'encoder (écrire différemment) le texte initial via un encodage réversible. Techniquement, on peut donc dire qu'il s'agit d'un chiffrement dont la sécurité repose sur la
connaissance de l'algorithme utilisé (remplacement de chaque lettre par la valeur décimale de l'octet correspondant).

L'algorithme utilisé étant extrêmement simple, le chiffrement serait immédiatement \og cassé \fg par un hacker.
\end{questions}

\item Une fonction possible est la suivante:
\begin{listing}{}{08-crypto-2.py}\end{listing}
\newpage
Il suffit ici de parcourir la liste informée en argument de la fonction et de trouver, à l'aide de la fonction \texttt{chr()}, le caractère qui correspond au code ASCII de l'élément de la liste.

\item
\begin{questions}
\item Voici une proposition de fonction:
\begin{listing}{}{08-crypto-3a.py}\end{listing}

\item En utilisant la fonction \texttt{computeXor}, la liste suivante est retournée:

\Par

\texttt{[14, 23, 10, 3, 21, 8, 2, 82, 20, 2, 15, 12, 11, 68]}

alors qu'avec la fonction \texttt{getBytes}, on obtient la liste suivante:

\Par

\texttt{[109, 101, 115, 115, 97, 103, 101, 32, 117, 114, 103, 101, 110, 116]}

\Par

Bien entendu, nous n'obtenons pas du tout la même liste; la première liste est bien plus \og mystérieuse \fg{} que la seconde.

\item Avec \texttt{print( getText(xorBytes) )}, où \texttt{xorBytes} est la liste retournée par la fonction \texttt{computeXor()}, nous avons une belle surprise... Selon l'interpréteur que l'on utilise, l'affichage diffère mais une chose est sûre : ce n'est pas le message d'origine que nous voyons!

\item Avec le programme suivant:
\begin{listing}{}{08-crypto-3d.py}\end{listing}
\Par
on s'aperçoit en effet que le message initial apparaît en clair.
\end{questions}
\newpage
\item
\begin{questions}
\item Voici une fonction possible:
\begin{listing}{}{08-crypto-4a.py}\end{listing}

\item On peut utiliser le programme suivant:
\begin{listing}{}{08-crypto-4b.py}\end{listing}
\Par
Nous avons ici décidé d'afficher les listes des octets encodés et décodés, mais nous pouvons afficher directement la seule phrase déchiffrée, qui correspond bien à la phrase initiale.
\end{questions}
\end{questions}
\Par
\nathanlive{prog}{Téléchargez le programme complet}%08-crypto.py
\end{corrige}

\thumb
\AfficheCorrige
