La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Introduction/survol du SE

Présentations similaires


Présentation au sujet: "Introduction/survol du SE"— Transcription de la présentation:

1 Introduction/survol du SE
CSI Module 1 Lecture: Chapitre 1 et 2 (Silberchatz) Objectif: Faire un survol rapide des éléments d’ordinateurs – le processeur (UCT), la mémoire, et l’entrée/sortie. Introduire les système d’exploitations afin de comprendre son rôle et ses fonctions principales

2 Sujets du module Les composantes principales de l’ordinateur
Organisation et Architecture d’ordinateur Révision du CEG3531 Système d’exploitation Un premier aperçu Services fournis par le système d’exploitation Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

3 Vue abstraite des composantes d’un système informatique
L’ordinateur générale se divise en 4 composantes principales Matériel UCT, mémoire, appareils d’entrée/sortie (E/S) Système d’exploitation Contrôle le matériel et coordonne sont utilisation parmi les applications et utilisateurs Programmes d’applications Traitement de texte, compilateurs, fureteurs WEB, etc. Utilisateurs

4 Vue abstraite des composantes d’un système informatique

5 C’est quoi un SE? Vue de l’utilisateur Pourquoi un SE?
Système personnel Système partagé Système branché Système imbriqué Pourquoi un SE? Partage des ressources de l’ordinateur Et sur un PC? Mais qu’est ce que fait le SE? Relation intime avec le matériel (en fait l’abstraction pour les applications) Allocation du matériel (équitable le plus possible) Contrôle d’exécution, i.e., allocation du temps d’exécution. La définition d’un SE? Pas de définition universel C’est le programme qui est toujours présent en mémoire – le noyau

6 Sujets du module Les composantes principales de l’ordinateur
Organisation et Architecture d’ordinateur Révision du CEG3531 Système d’exploitation Un premier aperçu Services fournis par le système d’exploitation Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

7 Matériel principal Processeur (UCT) Mémoire principale (mémoire réelle, RAM) Contient le code et les données Modules E/S (Contrôleurs E/S, processeurs E/S...) matériel (avec registres: ports E/S) pour transport des données entre UCT et périphériques comme: mémoire secondaire (ex: disques rigides) clavier, écran... Équipement de communication Interconnexion (ie: Bus) pour communication entre processeur(s), mémoire et modules E/S

8 Structure du Module E/S
Données du bus sont tamponnées dans le(s) registre(s) “data register” (ports E/S) Le registre “Status/Control” contient: l’information sur le statut de l’opération E/S l’information de contrôle venant de l’UCT Le circuit “I/O logic” interagit avec l’UCT via le bus. Contient la logique spécifique à l’interface de chaque dispositif

9 Registres de l’UCT Registres de Contrôle & Statut
Généralement non disponibles aux programmes de l’usager l’UCT en utilise pour contrôler ses opérations Le SE en utilise pour contrôler l’exécution des programmes Registres Visibles (aux usagers) disponibles au SE et programmes de l’usager Contient données, adresses et quelques bits de statut

10 Exemples de registres de contrôle & statut
Le compteur d’instruction (PC) Contient l’adresse de la prochaine instruction à exécuter Le registre d’instruction (IR) Contient l’instruction en cours d’exécution Le mot d’état du programme (PSW) Un registre ou groupe de registres contenant: bits de statut bit d’interruption activé/désactivé bit du mode d’exécution superviseur(SE)/usager

11 Registres Visibles Registres de données Registres d’adresse
manipulés par l’usager pour opérations sur les données (ex: ADD, MUL…) Registres d’adresse contient adresses de données et instructions peut contenir seulement une partie de l’adresse complète

12 Registres Visibles Exemples de registres d’adresse Index/offset
contient la valeur d’une adresse relative à une valeur de base Pointeur de segment contient l’adresse de base. L’adresse complète = adresse de base + index Pointeur de pile pointe au sommet de la pile

13 Registres Visibles Bits d’états
valeur assignée suite au résultat d’une opération Accessibles aux usagers mais non modifiables par ceux-ci Exemples sign flag zero flag overflow flag

14 Le cycle d’instruction de base
L’UCT extrait l’instruction (avec opérandes) de la mémoire. Ensuite l’UCT exécute cette instruction Le compteur d’instruction (PC) contient l’adresse de la prochaine instruction à extraire Le PC est incrémenté automatiquement après chaque extraction

15 L’UCT doit attendre après les E/Ss!
“WRITE” branche sur un pgm E/S (ex: “driver” d’une imprimante) pgm E/S prépare Ie module E/S en (4) l’UCT doit attendre que la commande E/S soit terminée Temps d’attente est long pgm E/S termine en (5) et communique le statut de l’opération

16 Interruptions! Les ordinateurs permettent aux modules d’E/S d’interrompre l’UCT. Pour cela, le module E/S excite (assert) une ligne du bus de contrôle (ex: INTR pour les PCs) L’UCT transférera le contrôle a un programme de gestion de l’interruption (Interrupt Handler Routine) (faisant partie du SE)

17 Le cycle d’instruction avec interruptions
Après chaque instruction, l’UCT examine s’il y a une interruption S’il n’y en a pas, il extrait la prochaine instruction du programme S’il y en a, il suspend le pgm en cours et branche l’exécution sur le pgm de gestion de l’interruption

18 Le pgm de gestion de l’interruption (IH)
Est un pgm qui détermine la nature d’une interruption et exécute les actions requises L’exécution est transférée à ce pgm... …et doit revenir au programme initial au point d’interruption pour que celui-ci continue normalement ses opérations Le point d’interruption peut se situé n’importe où dans le pgm L’on doit donc sauvegardé l’état du programme (ie: PC + PSW + registres + ...)

19 Traitement des interruptions

20 Les interruptions améliorent l’utilisation de l’UCT
Le pgm E/S prépare le module E/S et exécute la commande E/S (ex: impression d’un char) pgm E/S branche au pgm usager code usager est exécuté durant l’opération E/S: pas d’attente pgm usager est interrompu (x) lorsque l’opération E/S est terminée. Branchement au IH pour examiner le module E/S (statut de l’opération) branche ensuite au pgm usager

21 Interruption pour l’E/S

22 Types d’interruptions
lorsqu’une opération E/S est terminée Exception Débordement de division interdiction d’exécuter une instruction référence au delà de l’espace mémoire Minuterie préemption d’un pgm pour en exécuter un autre Bris de matériel (ex: erreur de parité en mémoire)

23 Ordre séquentiel des interruptions
Interruption désactivé durant l’exécution d’un IH Les interruptions sont en attente jusqu’à ce que l’UCT active les interruptions L’UCT examine s’il y a des interruptions en attente après avoir terminé d’exécuter l’IH

24 Interruptions avec priorités
L’IH d’une interruption de priorité faible peut se faire interrompre par une interruption de priorité élevée Exemple: les données arrivant sur une ligne de communication doivent-être absorbées rapidement pour ne pas causer de retransmissions

25 Techniques de communication pour E/S
3 techniques sont possibles: E/S programmées N’utilise pas d’interruptions. L’UCT doit attendre après chaque opération d’E/S E/S déclenchées par interruptions L’UCT peut exécuter du code pendant l’opération E/S: il est interrompu lorsque l’opération est terminée. Accès direct à la mémoire (DMA) Un block de données est transféré directement à/de la mémoire sans passer par l’UCT

26 E/S programmées Module E/S exécute une action à la demande du processeur Le module E/S n’interrompt pas le CPU lorsque E/S est terminée L’UCT doit constamment examiner le statut du module E/S

27 E/S déclenchées par INT
L’UCT est interrompu par le module E/S lorsque les données sont disponibles L’UCT peut exécuter d’autre code pendant l’E/S Pas d’attente inutile Mais chaque mot échangé transit par l’UCT et requiert une interruption (ouf!)

28 Accès direct à la mémoire (DMA)
L’UCT fait sa requête au module DMA (module séparé ou intégré au module E/S) Le module DMA transfert un block de données à/de la mémoire (sans passer par l’UCT) Il y a interruption lorsque le transfert est terminé L’UCT est sollicité uniquement au début et à la fin du transfert L’UCT est libre d’exécuter du code pendant le transfert

29 Organisation hiérarchique de la mémoire
moins coûteuse plus grande capacity plus lente Registres mémoire cache Mémoire principale Disque magnétique Fréquence d'accès réduite Mémoire amovible

30 Une nouvelle idée – la mémoire cache
Une petite qtée de mémoire rapide interagissant avec une mémoire plus lente mais de plus grande capacité Invisible au SE mais interagit avec le matériel de la gestion de la mémoire. Le processeur examine d’abord si le mot désigné est dans la mémoire cache S’il n’y est pas, un petit block de mémoire contenant le mot est transféré de la mémoire principale à la mémoire cache.

31 Temps d’accès Le temps d’accès est le temps requis pour amener le mot référencé au processeur T1 = temps d’accès pour mémoire cache T2 = temps d’accès pour mémoire principale T = temps d’accès total pour amener le mot référencé au processeur Si le mot référencé est dans le cache: T = T1 Si le mot référencé n’est pas dans le cache: Car ça coûte d’abord T1 pour examiner le cache (et réaliser que le mot référencé n’est pas là) Ça coûte ensuite T2 pour amener le mot référencé de la mémoire principale au processeur (en même temps, le mot est aussi placé dans le cache) Le temps d’accès total est donc T = T1 + T2

32 Le taux de présence (Hit Ratio)
Taux de présence = fraction des accès où la donnée est dans la mémoire cache T2 >> T1 Le temps d’accès moyen est près de T1 lorsque le taux de présence est près de 1

33 Groupement des consultations (locality of reference)
Les accès à la mémoire sont groupés localement sur de longues périodes. Exemple: dans une boucle, les accès sont fréquents à un petit ensemble d’instructions. Donc lorsqu’un mot est consulté, il est très probable que les mots voisins seront consultés fréquemment dans un avenir rapproché. Donc le taux présence sera proche de 1 même avec une petite mémoire cache.

34 Mémoire Cache du disque (même principe)
Une portion de la mémoire principale utilisée pour tamponner temporairement les données du disque Groupement des consultations: lorsqu’un enregistrement est consulté, il est très probable que les enregistrements voisins seront consultés fréquemment. Si l’enregistrement n’est pas dans le cache, le secteur du disque contenant l’enregistrement est copié dans le cache.

35 Fonctionnement de l’ordinateur moderne

36 Sujets du module Les composantes principales de l’ordinateur
Organisation et Architecture d’ordinateur Révision du CEG3531 Système d’exploitation Un premier aperçu Services fournis par le système d’exploitation Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

37 Fonctionnement d’un ordinateur
Comment l’ordinateur démarre? Programme de chargement (en mémoire ROM – le micrologiciel). Charge le noyau en mémoire et l’exécute. Exécution du noyau (est ainsi les applications). Noyau exécute lors d’interruptions Interruption du matériel. Interruption logique des applications – l’appel système (en détail plus tard) Erreurs: division par zéro, violation d’accès de mémoire par une application, etc.

38 Le mode usager et le mode noyau
Opération en mode double permet au ES de se protéger ainsi que d’autres composantes Mode usager et mode noyau (ou supervision) Bit mode se retrouve dans le matériel Distingue le mode (usager ou noyau) Certaines instructions sont privilégiées Appel au SE change le mode à noyau et le retour de l’appel le rechange au mode usager.

39 Transition du mode usager au mode noyau
Minuterie empêche les processus de s’accaparer du système Un interruption après un délai de temps SE décrémente un compteur Lorsque le compteur est zéro, change de processus ou termine le processus. Configurer avant de donner le contrôle au processus pour reprendre le contrôle ou terminé le programme.

40 Multiprogrammation Tout programme faisant une lecture sur un périphérique doit attendre que l’opération E/S soit terminée Les interruptions sont plus utiles lorsqu’un processeur est partagé parmi plusieurs processus concurrents. L’UCT peut alors exécuter un autre programme lorsqu’un programme attends qu’une opération E/S soit terminée.

41 La structure d’E/S du noyau

42 Sujets du module Les composantes principales de l’ordinateur
Organisation et Architecture d’ordinateur Révision du CEG3531 Système d’exploitation Un premier aperçu Services fournis par le système d’exploitation Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

43 Système d’exploitation (SE)
Est un programme contrôlant l’exécution des applications Le SE doit céder le contrôle aux programmes usagers et le reprendre correctement Dit à l’UCT quand exécuter tel programme C’est l’interface entre les programmes (et l’utilisateur) et le matériel Masque les détails du matériel aux applications Le SE doit donc tenir compte de ces détails

44 Les couches logiques d’un système
Utilisateur Programmeur Applications Développeur de SEs Logiciels utilitaires Système d’exploitation Matériel

45 Services offerts aux utilisateurs
Interface d’utilisateur Interface graphique (GUI), interface de ligne de commande (CLI) Donne accès au programmes systèmes: Windows Explorer, mkdir, ls, etc. Exécution de programme Charger un programme en mémoire et l’exécuter Manipulation des systèmes de fichiers Création et suppression des répertoires et fichiers Recherche Lecture et écriture des fichiers Listes de fichiers Gestion des permissions

46 Services offerts aux programmes d’utilisateurs
Opérations d’entrée/sortie L’accès au matériel se fait par le noyau pour le programme exécutant Communications Communication entre programmes d’un même ordinateur ou avec ceux d’autres ordinateur Peut se faire avec la mémoire partagée ou des messages Composer avec les erreurs Détection Erreurs du matériel (internes ou externes): la mémoire, défaillance d’un dispositif E/S Erreurs du logiciel: débordements, interdiction d’accès à une case mémoire Impossibilité pour SE de satisfaire requête Réaction: juste rapporter l’erreur à l’application, essayer de nouveau l’opération, suspendre l’application

47 L’appel système L’interface qui offre les services du SE au programmes
Control de processus: pour exécuter un programme. Gestion de fichier: création/ouvrir/lire/écrire un fichier, liste d’un répertoire. Gestion d’appareil: demande/relâche d’un appareil Gestion d’information: gestion de l’heure, attributs des processus et fichiers Communication: ouvrir/fermer un connexion, envoyer/recevoir des messages

48 Appel système (suite) Normalement écrit avec langage de programmation haut niveau (par exemple le C). Implémenter avec l’interruption logicielle L’interruption logicielle change le bit mode au mode noyau et fait appel au sous-programme approprié selon un tableau d’appels systèmes et le numéro d’interruption À la fin du sous-programme, le mode redevient le mode usager et des valeurs sont retournées au programme appelant.

49 API de l’appel système

50 Comment accéder aux appels systèmes
Accéder souvent par les programmes avec une interface de programmation d’application (API) et non pas l’appel système directement APIs commun: Win32 pour Windows API POSIX pour systèmes POSIX UNIX, Linux et MAC OS X API Java pour la machine virtuelle Java (JVM) Le programme appelant ne connait rien au sujet le l’implémentation de l’appel système. Obéit tout simplement au normes de l’API: paramètres à fournir, valeurs de retour, et opération désirée Les détails de l’interface du SE sont cachés derrière l’API. Géré par la bibliothèque de l’API (ensemble de fonctions fournit avec le compilateur) Possible d’utiliser les appels système directement

51 Exemple de l’API standard en C
La fonction printf() qui fait un appel système write()

52 Services pour assurer efficacité et bon fonctionnement
Allocation et gestion des ressources Nécessaire pour desservir plusieurs utilisateurs et plusieurs programmes Certaines ressources ont leur code de gestion spécifique: UCT, mémoire principale, système de fichier D’autres sont gérés via un code général – E/S Comptabilité Statistiques sur l’usage des ressources par les utilisateurs Protection et sécurité Empêcher les intrus (usagers non autorisés) d’accéder au système Empêcher les usagers d’accéder aux ressources qui ne leur sont pas destinées

53 Les SEs évoluent toujours
Doit s’adapter au nouveau matériel. Exemples: Introduction des terminaux graphiques Introduction du matériel de pagination Doit offrir de nouveaux services, ex.: support à l’accès Internet Le besoin de modifier régulièrement un SE impose une contrainte pour sa conception constr. modulaire avec interfaces bien définies méthodologie orientée objet

54 Sujets du module Les composantes principales de l’ordinateur
Organisation et Architecture d’ordinateur Révision du CEG3531 Système d’exploitation Un premier aperçu Services fournis par le système d’exploitation Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

55 Principales réalisations des SEs
Pour rencontrer les exigences de la multiprogrammation et des systèmes à temps partagé, les SE nous ont apportés les réalisations suivantes: Processus Gestion de la mémoire Protection de l’information et sécurité Ordonnancement et gestion des ressources Structure du système

56 Difficultés rencontrées par les SEs
Synchronisation un programme en attente d’utilisation d’un dispositif E/S doit recevoir un signal Exclusion mutuelle permettre à un seul programme à la fois d’effectuer une transaction sur une portion des données Impasse (deadlock) lorsque plusieurs pgms attendent indéfiniment l’un après l’autre sans pouvoir continuer

57 Exemple d’impasse Pgm A veux copier du disque1 au disque2 et s’approprie le contrôle du disque1 Pgm B veux copier du disque2 au disque1 et s’approprie le contrôle du disque2 Pgm A doit attendre que pgm B libère le disque2 et pgm B doit attendre que pgm A libère le disque1. Pgms A et B attendent indéfiniment

58 Processus Introduit affin d’obtenir une méthode systématique pour contrôler l’exécution des programmes Un processus est un pgm exécutable, avec: ses données (variables, tampons…) context d’exécution: ie. l’information: nécessaire à l’UCT pour exécuter le processus: contenu des registres du processeur nécessaire au SE pour gérer le processus: priorité du processus l’évènement après lequel le processus est en attente autres données (introduits au prochain chapitre)

59 Exemple simple de mise en application
Mémoire Principale Le registre “process index” indexe la liste des processus avec le processus en cours (B) Pour commuter du processus B au processus A on sauvegarde en mémoire le contexte de B et on charge les registres du contexte de A Une structure de données flexible (pour ajouter de nouvelles caractéristiques) Registres UCT Index de processus i Liste de processus i j PC Base et limite Contexte b Processus A Données h Autres registres Programme b . Contexte Données Processus B h Programme

60 Gestion de la mémoire L’idée centrale: la mémoire virtuelle
Donne au programme un espace mémoire (adressable) logique qui est indépendant de la qte de mémoire physique disponible Seule une partie à la fois d’un programme en exécution est maintenu en mémoire Les autres parties du pgm sont sur disque le pgm à accès à un espace mémoire de dimension supérieure à celui de la mémoire réelle

61 Mémoire virtuelle Chaque référence du pgm est à la mémoire virtuelle qui est constituée de: un espace linéaire (un seul block homogène) une collection de segments (différente taille) Les adresses virtuelles sont traduites par le matériel (“mapper”) en adresses réelles. S’il y a référence à un mot dont l’adresse virtuelle n’est pas en mémoire: (1) une portion du contenu de la mémoire réelle est transférée au disque (2) pour être remplacée par le block désiré

62 Le système de fichiers Utilisé pour la sauvegarde à long terme (souvent sur disque) l’information est sauvegardée dans des objets (ayant un nom) appelés fichiers un unité d’accès pratique pour le SE Fichiers (et portions) peuvent-être copiés en mémoire virtuelle pour être manipulés par les programmes

63 Gestion des ressources et ordonnancement
Réactions différentes doit discriminer entre processus de différentes classes Équité ne pas discriminer entre processus de même classe Efficacité maximiser la capacité de traitement, minimiser le temps de réponse, et accommoder le plus d’utilisateurs possible

64 Éléments clefs pour l’ordonnancement
Le SE maintient des files d’attente de processus attendant la disponibilité d’une ressource: file d’attente à court terme de processus en mémoire prêts à être exécutés Le répartiteur de tâches (dispatcher) décide qui sera le prochain à s’exécuter file d’attente de nouvelles jobs le SE ne doit pas admettre trop de processus file d’attente pour chaque dispositif E/S constituée de processus désirant l’utiliser

65 Structure du système En raison de sa complexité, un SE est structuré en couches Chaque couche se limite à effectuer un nombre restreint de fonctions et dépend de la couche inférieure pour exécuter des fonctions plus primitives Interfaces bien définies: une couche peut-être modifiée sans affecter les autres Décomposition d’un problème en plusieurs plus petits problèmes

66 Sujets du module Architecture d’ordinateur Système d’exploitation
Services fournis par le système d’exploitation Évolution des systèmes d’exploitations Réalisations principales des systèmes d’exploitation Caractéristiques et structure des SE modernes

67 Caractéristiques d’un SE moderne
De nouveaux concepts furent introduits récemment En réponse au nouveau matériel: machines à processeurs multiples réseaux à grande vitesse UCT plus rapides et plus de mémoire En réponse au nouveau logiciel: applications multimédia Internet et accès au Web applications client/serveur

68 Structure de système - Approche simple
MS-DOS - cherchait à obtenir une fonctionnalité maximale avec des ressources limitées mono-tâche, mono-usager pas très modulaires manque de séparation claire entre couches accès direct aux périphériques (écran, etc.) permis aux programmes d`application manque de contrôles, vulnérabilité malheureusement, il fut adapté à des fonctionnalités plus complexes...

69 Couches du MS-DOS

70 Structure UNIX Multi-tâches, multi-usagers depuis le début
Le système UNIX initial était aussi préoccupé par les limitation du matériel Distinction entre: programmes du système noyau tout ce qu’il y a entre l ’interface des appels de système et le matériel fournit dans une seule couche un grand nombre de fonctionnalités système fichiers, ordonnancement UCT, gestion mémoire... Plus modulaire et protégé que MS-DOS

71 Structure UNIX: peu de couches

72 Micronoyaux (microkernels)
Dans les premiers SE, aussi UNIX, tout était dans le noyau Après, un effort fut fait pour laisser dans le noyau UNIX seulement les fonctionnalités absolument nécessaires Une des fonctionnalités du micro noyau UNIX est la communication par échange de messages utilisé pour la communication entre programme client et service

73 Structure à couches dans OS/2 (IBM) (suit les idées d’Unix)
L ’OS/2 était beaucoup mieux organisé que MS-DOS, et donc moins vulnérable. Cependant il était peu performant. Win-NT a cherché à utiliser des principes semblables, mais avec une intégration meilleure des couches.

74 Structure client-serveur dans noyau Win-NT
Win-NT a un petit noyau qui fournit une structure client-serveur, en utilisant échanges de messages Supporte différents SE: Win, OS/2, Posix

75 Modules Beaucoup de SEs modernes utilises un approche avec modules
Approche orienté objet Chaque composant est séparé Échange se fait via des interfaces connues Chaque module est chargé au besoin par le noyau (kernel) Semblable à une structures de couches, mais plus flexible

76 Approche de modules de Solaris (UNIX)

77 Machines virtuelles: le problème et la solution
Comment permettre de rouler différents SE sur une seule machine physique? Pas évident, car chaque SE demande accès direct au matériel SOLUTION: Un programme qui crée une couche qui met à disposition plusieurs machines physiques virtuelles Sur chacune, nous pouvons rouler un SE différent

78 Machines Virtuelles (série IBM3XX)
Virtuel en informatique dénote quelque chose qui n ’est pas réel, n ’est pas du matériel: il est construit par le logiciel sur la base des ressources fournies par le matériel Une machine virtuelle est une machine créée par des couche de logiciel Elle peut avoir des caractéristiques identiques à la machine physique donnée: mêmes instructions, etc. Plusieurs machines virtuelles peuvent être créées sur une machine physique donnée!

79 Une seule mach. réelle et un seul noyau (b) plus. mach
Une seule mach. réelle et un seul noyau (b) plus. mach. virtuelles et plus. noyaux

80 Fonctionnement Le système VM laisse exécuter normalement les instructions non privilégiées Les appels au système sont exécutés par le système VM et les résultats sont passés à la machine virtuelle sur laquelle le processus exécute

81 Avantages Chaque machine virtuelle peut utiliser un SE différent!
En théorie, on peut bâtir des machines virtuelles sur des machines virtuelles! Protection complète, car les machines virtuelles sont complètement isolées les unes des autres Un nouveau SE peut être développé sur une machine virtuelle sans déranger les autres

82 Implémentations Le concept de VM est très utilisé pour permettre de rouler un SE sur un autre P.ex. SUN, Apple, Linux permettent de rouler Windows sur leur plateforme, Ils doivent fournir à Windows un environnement que Windows reconnaît comme son environnement Intel usuel

83 VMWARE sur Linux

84 Machine virtuelle de Java


Télécharger ppt "Introduction/survol du SE"

Présentations similaires


Annonces Google