Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre. Le barème n est donné qu à titre indicatif et pourra être modifié. Exercice 1 : Questions de cours (2 points) 1. UNIX est un système d exploitation multi-tâches et multi-utilisateurs : qu est-ce que cela signifie? 2. Expliquer ce qu est un mot-mémoire. Donner la taille des mots mémoires utilisés dans les ordinateurs actuels. Si on considère une RAM de 256 Mo constituée de mots mémoires de 2 octets, quelle sera la taille des adresses utilisées? (en bits, puis en octets). 1. (1 point) UNIX est un système d exploitation multi-tâches : il est capable d exécuter plusieurs programmes en concurrence (simultanément). UNIX est un système d exploitation multi-utilisateurs : plusieurs utilisateurs peuvent être connectés simultanément au système par le biais de terminaux (ensemble écran/clavier). 2. (1 point) La mémoire est constituée de bits. Cependant, ces bits sont regroupés de sorte que l unité élémentaire manipulée par l ordinateur n est pas le bit, mais le mot-mémoire. Actuellement, les ordinateurs utilisent des mots-mémoires de 32 ou 64 bits, soit 4 ou 8 octets. Une RAM de 256 Mo compte 256 2 10 2 10 = 2 28 octets. Divisée en motsmémoires de 2 octets, elle comporte donc 2 27 mots mémoires. Les adresses seront donc formées de 27 bits, ce qui nécessitera 27 8 = 4 octets. Exercice 2 : Unix (3 points) On considère l arborescence de répertoires et de fichiers représentée sur la Figure 1. Dans vos réponses, vous donnerez les commandes complètes permettant de répondre aux questions. Initialement, le répertoire courant est le répertoire dupont01. 1. Donner une série de deux commandes permettant de vous déplacer dans le répertoire docs puis d afficher la liste des fichiers et répertoires situés dans ce répertoire, en donnant les détails sur leurs propriétaires, droits d accès, dates de modification... 2. L utilisateur se trouve à présent dans le dossier docs. Il souhaite déplacer tous les fichiers dont le nom se termine par.c dans le dossier prog. Donnez la commande complète permettant de réaliser cette opération en une seule commande. 1
/ home usr dupont01 bin local lib prog docs Figure 1 Un exemple d arborescence 3. Lors de l opération précédente, il reçoit le message d erreur suivant : transform.c: Permission denied Expliquez ce qui s est passé. L utilisateur pouvait-il le prévoir d après les commandes qu il a tapées auparavant? Expliquez votre réponse. En supposant que ce fichier lui appartient, donnez la commande lui permettant de résoudre ce problème. 1. On tape successivement les commandes suivantes : cd docs (0,5 point) ls -l (0,5 point) 2. Il s agit de la commande suivante : (1 point) mv *.c../prog 3. L utilisateur ne dispose pas des droits nécessaires (écriture) pour déplacer le fichier transform.c. (0,25 point) Il aurait pu s en rendre compte grâce à la commande ls -l qui lui a donné ses droits pour ce fichier. (0,25 point) Pour corriger le problème, il doit se donner le droit d écriture sur ce fichier, ce qu il peut faire à l aide de la commande suivante : chmod u+w transform.c (0,5 point) Exercice 3 : Représentation des nombres (5 points) 1. Représentation des entiers positifs. (a) On considère l écriture 110. Que vaut cette écriture en base 2? en base 4? en base 8? (b) Ecrire 60 (10) et 103 (10) en base 16, puis poser l addition de ces deux nombres en base 16. 2. Représentation des entiers relatifs. On considère la représentation des entiers relatifs par complément à 2, sur 5 bits. 2
(a) Ecrire dans cette représentation les nombres 11 et 8 et détailler l addition de ces nombres. (b) Pour les deux additions suivantes, détaillez les calculs et indiquez si le résultat est valable ou non, en justifiant votre réponse (il est inutile de convertir les nombres en base 10) : 10100 + 11010 11001 + 01100 3. Représentation des nombre réels. La représentation IEEE sur 32 bits donne un bit pour le signe, 8 bits à l exposant (qui est biaisé à 127) et 23 bits à la mantisse. Calculez la représentation selon cette convention du nombre réel x = 8,75. Vous détaillerez les différentes étapes de votre calcul. Expliquez comment en déduire la représentation de 2 x. 1. Représentation des entiers positifs. (a) (0,5 point) En base 2, l écriture 110 vaut : (110) 2 = 1 2 2 +1 2 1 +0 2 0 = 6 (0,25 point) En base 4, on obtient (110) 4 = 1 4 2 +1 4 1 +0 4 0 = 20. (0,25 point) En base 8, on obtient (110) 8 = 1 8 2 +1 8 1 +0 8 0 = 72. (b) Pour calculer l écriture en base 16, on pose les divisions euclidiennes successives par 16, et on trouve l écriture comme la suite des restes dans l ordre inverse. Pour (60) 10, on a 60 = 3 16+12. Comme 12 est représenté en base 16 par la lettre C, on obtient finalement (60) 10 = (3C) 16. (0,5 point) On procède de la même façon pour le nombre 103 (10) et on obtient 103 (10) = (67) 16. (0,25 point) On pose l addition comme suit : (1) 3 C + 6 7 A 3 En effet, comme C représente le nombre 12, la somme de C et de 7 donne 19 qui se décompose en 19 = 1 16+3, d où la retenue de 1. La seconde somme donne 1+3+6 = 10, qui est représenté par la lettre A en base 16. (0,25 point) 2. Représentation des entiers relatifs. (a) Pour calculer la représentation de 11 en complément à 2, on calcule la représentation en base 2 de ( 11+1) = 10 sur 5 bits. On obtient (10) 10 = (01010) 2. On inverse 3
ensuite les bits un à un, et obtient finalement que la représentation complément à 2 sur 5 bits de 11 est 10101. (0,5 point) Pour le nombre 8 qui est positif, il suffit de calculer sa représentation habituelle et de la compléter par des 0. On obtient l écriture 01000. (0,25 point) L addition est posée de la façon suivante. Elle est correcte puisqu un nombre est négatif et l autre positif. On vérifie par exemple que l on obtient un résultat négatif, ce qui est cohérent avec 11+8 < 0. (0,25 point) 10101 + 01000 11101 (b) On pose les additions suivantes : (2 0,5 point) 10100 + 11010 (1) 01110 11001 + 01100 (1) 00101 La première addition n est pas correcte car la somme de deux nombres négatifs doit être négative. La seconde addition est correcte car elle concerne un nombre positif et un nombre négatif. 3. Représentation des nombre réels. On cherche la décomposition de x selon le signe s, l exposant e et la mantisse m. x est positif, ce qui nous donne le signe s = 1, représenté par un 0. (0,25 point) Pourobtenirl exposantetlamantisse,commex > 2,ondivisexjusqu àappartenir à l intervalle [1,2[. On obtient ici x = 2 3 1,09375. L exposant vaut donc e = 3 et la mantisse m = 1,09375. (0,25 point) Pour obtenir la représentation de l exposant, on calcule l exposant biaisé à 127, soit e = e+127 = 130. Son écriture en base 2 vaut (130) 10 = (10000010) 2. (0,25 point) Pour la mantisse, on doit la décomposer selon les puissances négatives de 2. On obtient m = 1+0.0625+0.03125 = 2 0 +2 4 +2 5. Le bit correspondant à 2 0 n est pas représenté. (0,25 point) On obtient finalement l écriture suivante : 0 10000010 00011000000000000000000 Exercice 4 : Algorithmique (3 points) On considère la fonction d une variable réelle définie par f(x) = x(2 x). 1. Ecrivez le programme Python correspondant : il devra demander à l utilisateur de saisir un entier n, calculer s et l afficher. 2. Que calcule l algorithme 1 pour n = 2? Montrez sur un dessin ce que calcule cet algorithme pour n = 4. Vers quoi tend la valeur retournée par l algorithme lorsque n tend vers l infini? 4
Algorithme 1 Inconnu(n) Entrée : Un entier n > 0 Sortie : Un réel s 1: s = 0 2: i = 1 3: Tant Que i n Faire 4: s = s+f( i n ) 1 n 5: i=i+1 6: Fin Tant Que 7: Retourner s 1. 1,5 point. n=input("entrez un entier n > 0 : ") s=0 i=1.0 # pour que i soit reconnu comme un nombre réel while i<=n: x=i/n # comme i est un nombre réel, la division retourne un décimal s=s+x*((2-x)/n)*x i=i+1 print s 2. Pour n = 2, l algorithme retourne 7/8 (0,5 point). 3. Le dessin (0,5 point). 4. L algorithme calcule, par valeurs supérieures, la surface comprise sous la courbe d équation y = x(2 x) et limitée par les abscisses x = 0 et x = 1. Lorsque n tend vers l infini, la valeur retournée tends vers 2/3 (0,5 point). Exercice 5 : Python (4 points) On considère la fonction d une variable réelle définie par f(x) = x 3 + x 1. Elle est strictement croissante et s annule entre 0 et 1. Sa dérivée est égale à f (x) = 3x 2 + 1. On cherche une valeur approchée de sa racine par la méthode de Newton. Pour cela, on considère la suite définie par récurrence par : x 0 = 0 et x n+1 = x n f(x n )/f (x n ). 1. ÉcrivezenPythonunefonctionf quiprendenentréeunréelxpuisretournex 3 +x 1. 2. Écrivez en Python une fonction df qui prend en entrée un réel x puis retourne 3x 2 +1. 3. Écrivez en Python une fonction test qui prend en entrée deux nombres réels x et ǫ et retourne 1 si f(x) [ ǫ,ǫ] et 0 sinon. 4. Écrivez en Python un programme qui saisit un nombre réel ǫ et retourne le premier terme x n qui vérifie f(x n ) [ ǫ,ǫ]. 5
1. (0,5 point) def f(x): return x**3+x-1 2. (0,5 point) def df(x): return 3*x*x+1 3. (1 point) def test(x,e): if (f(x)>=-e) and (f(x)<=e): return 1 else: return 0 4. (2 point) e=input("entrez un nombre réel positif e = ") x=0.0 while test(f(x),e)==0: x=x-f(x)/df(x) print x Exercice 6 : Architecture (3 points) On suppose que la mémoire RAM d un ordinateur contient 16 mots-mémoire d un octet chacun. Chaque mot mémoire peut donc être désigné par un entier de 0 à 15, représentable sur 4 bits (son adresse). L Unité Centrale (UC) de cet ordinateur contient : un registre CO (compteur ordinal) de 4 bits qui contient l adresse de la prochaine instruction à exécuter, un registre RI (registre instruction) de 4 bits qui contient l instruction en cours d exécution, un registre ACC (accumulateur) d un octet pouvant contenir n importe quel mot mémoire. On considère les instructions suivantes, chacune étant codée sur un mot mémoire : LOAD x 1 x 2 x 3 x 4 : codée par 0000x 1 x 2 x 3 x 4, cette instruction charge la valeur contenue à l adresse x 1 x 2 x 3 x 4 de la mémoire RAM dans le registre ACC. STO x 1 x 2 x 3 x 4 : codée par 0010x 1 x 2 x 3 x 4, cette instruction stocke la valeur contenue dans le registre ACC à l adresse x 1 x 2 x 3 x 4 de la mémoire RAM. ADD x 1 x 2 x 3 x 4 : codée par 0011x 1 x 2 x 3 x 4, cette instruction ajoute la valeur contenue à l adresse x 1 x 2 x 3 x 4 au contenu du registre ACC et stocke le résultat dans le registre ACC. 6
SUB x 1 x 2 x 3 x 4 : codée par 0101x 1 x 2 x 3 x 4, cette instruction soustrait la valeur contenue à l adresse x 1 x 2 x 3 x 4 du contenu du registre ACC et stocke le résultat dans le registre ACC. SHL : codée par 01100000, cette instruction décale les bits du registre accumulateur d une position vers la gauche, le bit le plus à droite devenant 0. SHR : codée par 01110000, cette instruction décale les bits du registre accumulateur d une position vers la droite, le bit le plus à gauche devenant 0. STOP : codée par 11111111, cette instruction arrête le déroulement du programme. On rappelle que le déroulement d un programme se fait de la manière suivante : (a) Charger le contenu du CO dans le RI (b) Modifier le CO pour qu il désigne l instruction suivante (c) Analyser et décoder l instruction figurant dans le RI (d) Localiser en mémoire d éventuelles données nécessaires à cette instruction (e) Exécuter l instruction (f) Reprendre à l étape (a) si la dernière instruction exécutée est différente de STOP. 1. On suppose que le registre CO est initialement nul, et on considère le contenu initial de la RAM suivant : Adr RAM Adr RAM 0000 00001010 1000 00000000 0001 01110000 1001 00000000 0010 01100000 1010 00100101 0011 00101011 1011 00000000 0100 00001010 1100 00000000 0101 01011011 1101 00000000 0110 00101011 1110 00000000 0111 11111111 1111 00000000 Donnez les instructions correspondant aux 8 premiers mots-mémoire de la RAM. 2. En supposant que le registre CO est initialement nul, détaillez l effet sur le contenu de la mémoire de l exécution de ces instructions. Quel est l algorithme implémenté par ces instructions? 3. Soit n le nombre codé en binaire par le mot-mémoire à l adresse 1010. Comment modifier le programme pour qu à l issue de l exécution, le mot-mémoire à l adresse 1011 soit égal à n si n est pair à n+1 si n est impair? 1. (1 point) 7
0000 LOAD 1010 0001 SHR 0010 SHL 0011 STO 1011 0100 LOAD 1010 0101 SUB 1011 0110 STO 1011 0111 STOP 2. (1 point) LOAD 1010 : charge la valeur 00100101 dans ACC SHR : ACC contient 00010010 SHL : ACC contient 00100100 STO 1011 : stocke 00010010 à l adresse 1011 LOAD 1010 : charge la valeur 00100101 dans ACC SUB 1011 : ACC contient 00000001 STO 1011 : stocke 00000001 à l adresse 1011 STOP : arrêt du programme. Commentaires : l instruction SHR revient à calculer le quotient de la division entière de ACC par 2; l instruction SHL revient à multiplier le contenu de ACC par 2; la valeur contenue dans ACC est donc inchangée si le nombre initial n était pair; elle est égale à n-1 sinon. Ce nombre est stocké à l adresse 1011 puis soustrait de n : on obtient donc 0 si n est pair et 1 sinon. A la fin du programme, le mot-mémoire d adresse 1011 est égal à 0 si n était pair et à 1 sinon. 3. (1 point) Il suffit d ajouter n à ce résultat pour obtenir ce qu on souhaite. Le programme est modifié comme suit : 0000 LOAD 1010 0001 SHR 0010 SHL 0011 STO 1010 0100 LOAD 1010 0101 SUB 1011 0110 ADD 1010 0111 STO 1011 1000 STOP 8