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

Chap 101 Chapitre 10 Mémoire virtuelle / Virtuel est quelque chose qui n’est pas dans le matériel, elle est créée par le logiciel.

Présentations similaires


Présentation au sujet: "Chap 101 Chapitre 10 Mémoire virtuelle / Virtuel est quelque chose qui n’est pas dans le matériel, elle est créée par le logiciel."— Transcription de la présentation:

1 Chap 101 Chapitre 10 Mémoire virtuelle http://w3.uqo.ca/luigi / Virtuel est quelque chose qui n’est pas dans le matériel, elle est créée par le logiciel voir: machines virtuelles, mémoire virtuelle …

2 Chap 102 Mémoire Virtuelle n Pagination sur demande n Problèmes de performance n Remplacement de pages: algorithmes n Allocation de cadres de mémoire n Emballement n Ensemble de travail

3 Chap 103 Concepts importants du Chap. 10 n Localité des références n Mémoire virtuelle implémentée par va-et-vient des pages, mécanismes, défauts de pages n Adresses physiques et adresses logiques n Temps moyen d’accès à la mémoire u Récriture ou non de pages sur mém secondaire n Algorithmes de remplacement pages: u OPT, LRU, FIFO, Horloge u Fonctionnement, comparaison n Écroulement, causes n Ensemble de travail (working set) n Relation entre la mémoire allouée à un proc et le nombre d’interruptions n Relation entre la dimension de pages et le nombre d’interruptions n Prépagination, post-nettoyage n Effets de l’organisation d’un programme sur l’efficacité de la pagination

4 Ce que nous avons vu n Les mécanismes de la segmentation et pagination permettent d’obtenir une bonne utilisation de la mémoire n Les processus peuvent être éparpillés où il y a de l’espace en mémoire n Par l’entremise de différents tableaux d’adresses de base n La protection et le partage d’informations peuvent être obtenus par extension des mêmes mécanismes Chap 104

5 5 La mémoire virtuelle est une application du concept de hiérarchie de mémoire n Des concepts très semblables s’appliquent aux mécanismes de la mémoire cache u Cependant dans ce cas les mécanismes sont de matériel Mécanismes cache Méc. mém. virtuelle RAM (flash ou SSD)

6 Dorénavant: MP, MS n MP = mémoire principale, mémoire vive, mémoire physique, RAM u termes équivalents n MS = mémoire secondaire qui, selon les technologies, peut être disque ou flash ou SSD (solid state disk) u L’UCT peut directement opérer seulement en MP u Un transfert de données entre MP et MS est une opération d’E/S Chap 106

7 7 La mémoire virtuelle n Afin qu’un programme soit exécuté, il ne doit pas nécessairement être tout en MP! n Seulement les parties qui sont en exécution ont besoin d’être en MP n Les autres parties peuvent être sur MS, prêtes à être amenées en MP sur demande u Mécanisme de va-et-vient ou swapping n Ceci rend possible l’exécution de programmes beaucoup plus grands que la MP u Réalisant une mémoire virtuelle qui peut être beaucoup plus grande que la MP

8 Chap 108 De la pagination et segmentation à la mémoire virtuelle n Un processus est constitué de morceaux (pages ou segments) qui ne sont pas nécessairement contigus en MP n Et peuvent être souvent déplacés n Adresses logiques sont traduites en adresses physiques au moment de l’exécution n Donc: tous les morceaux d’un processus ne nécessitent pas d’être en MP durant l’exécution u L’exécution peut continuer à condition que la prochaine instruction (ou donnée) est dans un morceau se trouvant en MP n La somme des mémoires logiques des procs en exécution peut donc excéder la MP disponible n Une image de toute la mémoire logique des processus est gardée en MS (disque ou flash) d’où les pages manquantes pourront être prises au besoin u Mécanisme de va-et-vien ou swapping

9 Mémoire/adresse logique et mémoire/adresse virtuelle n L’idée de la mémoire virtuelle est la même que celle de la mémoire logique, u avec l’extension que la mémoire virtuelle n’a pas besoin d’être entièrement en mémoire physique n L’idée de l’adresse virtuelle est la même que celle de l’adresse logique u avec l’extension que l’adresse virtuelle peut contenir plus de bits que ceux nécessaires pour adresser la mémoire physique Chap 109

10 Le concept de ‘permutation de mémoire’ d’il y a longtemps était basé sur la même idée: pas tout doit être en MP en même temps Chap 1010

11 Chap 1011 Mémoire virtuelle: résultat d’un mécanisme qui combine la MP et les MS Tableau de pages v i MP MS

12 Le principe de localité Justification pratique du concept de mémoire virtuelle Chap 1012

13 Chap 1013 Localité et mémoire virtuelle n Principe de localité des références : les références à la mémoire dans un processus tendent à se regrouper n Donc: seule quelques pièces d’un processus seront utilisées durant une petite période de temps (pièces: pages ou segments) n Il y a une bonne chance de “deviner” quelles seront les pièces demandées dans un avenir rapproché

14 Exemple de localité de référence n Processus qui exécute une boucle sur une structure de données: n Pendant l’exec de la boucle, il utilisera toujours les mêmes pages u ? pages dans ce cas n Une partie de sa mémoire logique n Pour l’instant ce proc a besoin de seulement ? cadres de mémoire Chap 1014 Progr. Donn. Mém virtuelle d’un proc.

15 Chap 1015 Visualisation de la localité des références Ce processus consiste en 34 pages mais peut exécuter efficacement avec moins de 34 cadres de MP car il n’a jamais besoin de tous ses pages en même temps (Note: chaque point noir représente une position de mémoire visitée et on voit seulement les pages 18-34) Temps Adresses

16 Implémentation de la Mémoire Virtuelle Chap 1016

17 Analogie … n Un groupe de personnes mange sur une table qui a moins de capacité que le réfrigérateur n On mettra sur la table quelques plats au début, puis on ajoutera des plats au fur et à mesure qu’on en demandera Chap 1017

18 Chap 1018 Pages en MP ou sur MS Page A en MP et sur MS. Page E seulement sur MS.. En ce moment, ce proc a besoin de seulement ? pages de MP pour exécuter mém. secondaire MS MP

19 Chap 1019 Nouveau format du tableau des pages (la même idée peut être appliquée aux tableaux de segments) Adresse de la page Bit présent bit présent 1 si en MP 0 si en MS Si la page est en MP ceci est une adr. de MP sinon elle est une adresse de MS Au début, bit présent = 0 pour toutes les pages

20 Chap 1020 Avantages du chargement partiel n Plus de processus peuvent être maintenus en exécution n Car seules quelques pièces sont chargées en MP pour chaque processus u L’usager est content, car il peut exécuter plusieurs processus et faire référence à des grosses données sans avoir peur de remplir la MP u Avec plus de processus en MP, il est plus probable d’avoir un processus dans l’état prêt, meilleure utilisation d’UCT n Plusieurs pages ou segments rarement utilisés n’auront peut être pas besoin d`être chargés du tout n Il est maintenant possible d’exécuter un ensemble de processus lorsque leur taille excède celle de la MP u Il est possible d’utiliser plus de bits pour l’adresse logique que le nombre de bits requis pour adresser la MP u Espace d ’adressage virtuel > > esp. d ’adressage physique

21 Chap 1021 Mémoire Virtuelle: Pourrait Être Énorme! n Ex: 16 bits sont nécessaires pour adresser une MP de 64KB n En utilisant des pages de 1KB, 10 bits sont requis pour le décalage n Ceci laisserait 6 bits pour le numéro de page si toutes les pages doivent rentrer dans 64KB n Mais pour l’adresse virtuelle nous pouvons utiliser un nombre de bits qui excède 6, car toutes les pages ne doivent pas être en MP simultanément u Dans quelques architectures, ces bits peuvent être inclus dans des registres u Adresse logique=adresse dans l’instruction+registre

22 Chap 1022 Mémoire Virtuelle n Pour une meilleure performance, la mémoire virtuelle se trouve souvent dans une région de MS qui est n’est pas gérée par le système de fichiers u Mémoire va-et-vient, swap memory u Ou souvent disque flash ou SSD (Solid State Disk) n La traduction de l’adresse virtuelle en adresse physique est effectuée en utilisant les mécanismes étudiés dans le chapitre précédent.

23 Chap 1023 Mémoire virtuelle: le mécanisme de va-et-vient Tableau de pages MS MP

24 Chap 1024 Exécution d’un Processus n Le SE charge la MP de quelques pièces (seulement) du programme (incluant le point de départ) n Chaque entrée de la table de pages (ou segments) possède un bit présent qui indique si la page ou segment se trouve en MP n L’ensemble résident (résident set) est la portion du processus se trouvant en MP n Une interruption est générée lorsque l’adresse logique réfère à une pièce qui n’est pas dans l’ensemble résident u défaut de pagination, page fault

25 Chap 1025 Exécution d’une défaut de page: va-et-vient plus en détail Mémoire virtuelle Une instruction ‘load M’ fait référence à une page en MS MS

26 Chap 1026 Séquence d’événements pour défaut de page n Trappe au SE: page demandée pas en MP u Processus est mis ‘en attente’ n Sauvegarder registres et état du proc dans PCB n Un autre proc peut maintenant gagner l ’UCT n SE détermine si la page demandée est légale u sinon: terminaison du processus n et trouve la position de la page sur MS u dans le descripteur de la page n lire la page de MS dans un cadre de MP (supposons qu`il y en a!) u exécuter les ops nécessaires pour lire la page

27 Chap 1027 Séquence d’événements pour défaut de page (ctn.) n La MS a complété le transfert et interrompt l’UCT u sauvegarder les registres etc. du proc exécutant n SE met à jour le contenu du tableau des pages du proc. qui a causé le défaut de page n Ce processus devient prêt=ready n À un certain point, il retournera à exécuter u la page désirée étant en mémoire, il pourra maintenant continuer Il s’agit d’un événement essentiellement semblable à une E/S, mais probablement ils sera traité différemment par le SE (ajout d’un état: « en attente de pages »)

28 Chap 1028 Temps moyen d’accès à la mémoire virtuelle Supposons que: accès en MP: 100 nanosecs temps de traitement de défaut de page: 20 millisecs = 20,000,000 nanosecs (inclut le temps de écriture et lecture MS, disons disque) p: probabilité de ne pas trouver une page en MP (quantité entre 0 et 1) Temps moyen d’accès mémoire virtuelle en msec: p x 20,000,000 + (1-p) x 100 (défaut + pas de défaut ) En utilisant la même formule, nous pouvons déterminer quel est le nombre de défauts que nous pouvons tolérer, si un certain niveau de performance est désiré (v. manuel). P.ex. avec ces params, si le ralentissement à cause de pagination ne peut pas excéder 10%, 1 seul défaut de pagination peut être toléré pour chaque 2,000,000 accès de mémoire virtuelle. (Temps d’accès disque réaliste aujourd’hui= autour de 8ms)

29 Points de réfléxion n Exercice. Les mémoires secondaires flash ou SSD ont la particularité que les lectures sont beaucoup plus rapides que les écritures u Une lecture pourrait prendre 0,1ms, une écriture 1,5ms u Refaire les calculs mentionnés pour ce cas F Évidemment nous pouvons tolérer beaucoup plus de fautes de pagination Chap 1029

30 Algorithmes de remplacement de pages Chap 1030

31 Analogie n La table sur laquelle un groupe mange est pleine, mais on demande un nouveaux plat u Faut en enlever n Quoi enlever? u OPT: Le plat dont personne n’aura besoin dans un futur prochain F Difficile ou impossible à savoir? u LRU: Le plat moins récemment utilisé F Difficile: Il faut se préoccuper de tracer l’utilisation u FIFO: Le plat qui a été plus longtemps sur la table (le plus « vieux ») F Facile, mais donc le pain, l’eau, le sel? u Solution de compromis: enlever le plat le plus vieux à moins qu’il n’ait été utilisé récemment F Algorithme CLOCK, à voir Chap 1031

32 Chap 1032 La MP est pleine mais nous avons besoin d`une page pas en MP MP MS

33 Chap 1033 La page victime... MP MS

34 Chap 1034 Remplacement de pages n Quoi faire si un processus demande une nouvelle page et il n’y a pas de cadres libres en MP? n Il faudra choisir une page déjà en MP, appartenant au même ou à un autre processus, qu’il est possible d ’enlever de la MP u la victime! n Un cadre de MP sera donc rendu disponible n Évidemment, plusieurs cadres de MP ne peuvent pas être `victimisés`: u p.ex. cadres contenant le noyau du SE, tampons d ’E/S...

35 Chap 1035 Bit de modification, dirty bit n La ‘victime’ doit-elle être récrite en MS? n Seulement si elle a été changée depuis qu`elle a été amenée en MP u sinon, sa copie sur MS est encore fidèle n Bit de modif sur chaque descripteur de page indique si la page a été changée n Donc pour calculer le coût en temps d’une référence à la mémoire virtuelle il faut aussi considérer la probabilité qu’une page soit ‘propre’ et le temps de récriture dans ce cas X

36 Point de réflexion n Exercice. Nous savons que seulement les pages ‘sales’ ont besoin d’être récrites en MS. u Supposons que nous connaissons la probabilité m qu’une page soit sale u Supposons que le temps de traitement de lecture sur disque soit la moitié du temps de lecture-écriture u Comment refaire les calculs de temps moyen d’accès dans ce cas F Notre calcul d’avant supposait que la page sortante devait être écrite, était toujours ‘sale’ n Aussi, cette technique est relié au problème de ‘cohérence du cache’ qui sera mentionné plus tard Chap 1036

37 Chap 1037 Algorithmes de remplacement pages n Choisir la victime de façon à minimiser le taux de défaut de pages u pas évident!!! n Page dont nous n`aurons pas besoin dans le futur? impossible à savoir! n Page pas souvent utilisée?? n Page qui a été déjà longtemps en mémoire??? n etc. nous verrons...

38 Chap 1038 Critères d’évaluation des algorithmes n Les algorithmes de choix de pages à remplacer doivent être conçus de façon à minimiser le taux de défaut de pages à long terme u Mais ils doivent être efficaces

39 Chap 1039 Critères d’efficacité n Il est intolérable d’exécuter un programme logiciel chaque fois qu’une opération de mémoire est exécutée u Ceci impliquerait des accès additionnels de mémoire u Les opérations qui doivent être faites à chaque accès de mémoire doivent être câblées dans le matériel n Cependant un programme peut être exécuté chaque fois qu’il y a une faute de pagination

40 Chap 1040 Explication et évaluation des algorithmes n Nous allons expliquer et évaluer les algorithmes en utilisant la chaîne de référence pages suivante (livre de Stallings): 2, 3, 2, 1, 5, 2, 4, 5, 3, 2, 5, 2 n Attention: les séquences d’utilisation pages ne sont pas aléatoires... u Localité de référence n Ces références proviendront de plusieurs processus n L’évaluation sera faite sur la base de cet exemple, évidemment pas suffisant pour en tirer des conclusions générales

41 Quelques algorithmes possibles en principe n Pour la séquence suivante d’accès à pages: 2, 3, 2, 1, 5, 2, 4, 5, 3, 2, 5, 2, 1 n Nous sommes au point marqué et u toutes les pages déjà accédées sont en MP u La MP est pleine, u la page 4 doit être amenée en MP, u faut donc remplacer une page n Quelle est la page: u qui sera utilisée le plus tard possible dans le futur (OPT)? u qui a été utilisée dans le passé le plus lointain (LRU)? u qui a été le plus longtemps en mémoire (FIFO)? Chap 1041

42 Chap 1042 Algorithmes pour la politique de remplacement n L’algorithme optimal (OPT) choisit pour page à remplacer celle qui sera référencée le plus tard possible dans le futur u produit le + petit nombre de défauts de page u impossible à réaliser (car il faut connaître le futur) mais sert de point de comparaison pour les autres algorithmes: F Ordre chronologique d’utilisation (LRU) F Ordre chronologique de chargement (FIFO) F Deuxième chance ou Horloge (Clock)

43 Chap 1043 n Ordre chronologique d’utilisation (LRU) n Remplace la page dont la dernière référence remonte au temps le plus lointain (le passé utilisé pour prédire le futur) u En raison de la localité des références, il s’agit de la page qui a le moins de chance d’être référencée u Performance pratique presque aussi bonne que l’algo. OPT Algorithmes pour la politique de remplacement

44 Chap 1044 Comparaison OPT-LRU n Exemple: Un processus de 5 pages s’ìl n`y a que 3 pages de MP disponibles. n Dans cet exemple, OPT occasionne 3+3 défauts, LRU 3+4. Stallings LRU avait ôté la page 3 ne sachant pas qu’elle sera bientôt demandée

45 Chap 1045 Note sur le comptage des défauts de page n Lorsque la MP est vide, chaque nouvelle page que nous ajoutons est le résultat d’un défaut de page n Mais pour mieux comparer les algorithmes, il est utile de garder séparés ces défauts initiaux u car leur nombre est le même pour tous les algorithmes

46 Chap 1046 Implémentation problématique de LRU n Chaque page peut être marquée (dans le descripteur dans la table de pages) du temps de la dernière référence: u besoin de matériel supplémentaire. n La page LRU est celle avec la + petite valeur de temps (nécessité d’une recherche à chaque défaut de page) n On pourrait penser à utiliser une liste de pages dans l’ordre d ’utilisation: perte de temps à maintenir et consulter cette liste (elle change à chaque référence de mémoire!) n D’autres algorithmes sont utilisés: u LRU approximations

47 Chap 1047 Premier arrivé, premier sorti (FIFO) n Logique: une page qui a été longtemps en mémoire a eu sa chance d ’exécuter n Lorsque la mémoire est pleine, la plus vieille page est remplacée. Donc: “first-in, first-out” n Simple à mettre en application n Mais: Une page fréquemment utilisée est souvent la plus vielle, elle sera remplacée par FIFO!

48 Chap 1048 Comparaison de FIFO avec LRU (Stallings) n Contrairement à FIFO, LRU reconnaît que les pages 2 and 5 sont en cours d’utilisation n Dans ce cas, la performance de FIFO est moins bonne: u LRU = 3+4, FIFO = 3+6

49 Chap 1049 Implantation de FIFO n Facilement implantable en utilisant un tampon circulaire de cadres de mémoire u Qui ne doit être mis à jour que à chaque défaut de page n Exemple: après la trace: u 2 3 2 1 5 2 2 15 La page 2, qui a été en mémoire le plus longtemps, est la prochaine victime, puis 1, puis 5 Cependant ceci est un mauvais choix car 2 est très utilisée!

50 Chap 1050 Problème conceptuel avec FIFO n Les premières pages amenées en MP sont souvent utiles pendant toute l’exécution d’un processus! u variables globales, programme principal, etc. n Ce qui montre un problème avec notre façon de comparer les méthodes sur la base d ’une séquence aléatoire: u les références aux pages dans un programme réel ne seront pas vraiment aléatoires

51 CLOCK: c’est FIFO avec correctif n Enlever la page qui a été là le plus longtemps n Mais ne pas l’enlever si elle a été utilisée récemment n Bit ‘utilisé’ dans les cadres de mémoire pour savoir quelles pages ont été utilisées récemment Chap 1051

52 Algorithme CLOCK n Ajoutons un bit à chaque page, qui est mis à 1 chaque fois que la page est utilisée u 1 est un astérisque * ci-dessous n Cependant pour toujours trouver de la place, ce bit est mis à 0 chaque fois qu’il est consulté Chap 1052 2* 3*1* Après 2 3 2 1 Au début, 2 n’est pas sélectionné car elle a été utilisée, mais faisant le tour, tous les bits sont tournés à 0 Après 2 3 2 1 5 5* 31 Le choix de 2 est encore mauvais par rapport à la fréquence d’utilisation passée, donc cette méthode n’es pas parfaite …

53 Chap 1053 L’algorithme de l’horloge CLOCK n Semblable à FIFO, mais il tient compte de l’utilisation récente de pages n Les cadres qui viennent d’être utilisés (bit=1) ne sont pas remplacées (deuxième chance) u Les cadres forment conceptuellement un tampon circulaire u Lorsqu’une page est chargée dans un cadre, un pointeur pointe sur le prochain cadre du tampon n Pour chaque cadre du tampon, un bit “utilisé” est mis à 1 (par le matériel) lorsque: u une page y est nouvellement chargée u cette page est lue ou écrite ou exécutée u Le prochain cadre du tampon à être remplacé sera le premier rencontré qui aura son bit “utilisé” = 0. u Durant cette recherche, tout bit “utilisé=1 rencontré sera tourné à 0

54 Chap 1054 Algorithme de l’horloge CLOCK: un exemple (Stallings). La page 727 est chargée dans le cadre 4. La proch. victime est 5, si elle n’est pas utilisée dans l’entretemps Les pages sont en ordre FIFO

55 Chap 1055 Comparaison: Horloge, FIFO et LRU (Stallings) n Astérisque indique que le bit utilisé est 1 n L’horloge protège du remplacement les pages récemment utilisées en mettant à 1 le bit “utilisé” à chaque référence n Fautes: LRU = 3+4, FIFO = 3+6, Horloge = 3+5

56 Chap 1056 Détail sur le fonctionnement de l’horloge CLOCK Tous les bits étaient à 1. Nous avons fait tout le tour et donc nous avons changé le bit de tous les cadres à 0. Le premier cadre est remplacé et son bit devient 1 (utilisé!) Le pointeur pointe toujours au cadre suivant le cadre remplacé

57 Chap 1057 Matériel additionnel pour l’algo CLOCK n Chaque cadre de MP a un bit ‘utilisé’ (use) n Quand le contenu du cadre est utilisé, le bit est mis à 1 par le matériel n Le SE regarde le bit u S’il est 0, la page dans le cadre peut être remplacée u S’il est 1, il le met à 0 1 Mémoire 0 0 0 1

58 Noter différence n Bit ‘sale’ ‘dirty bit’ mentionné avant u Indique si la page a été modifiée=écrite après son entrée en MP n Bit ‘utilisé’ u Indique si la page a été lue ou écrite après son entrée en MP n L’architecture Intel a les deux, et même plus compliqué … Chap 1058

59 Pour comprendre bien n L’algorithme CLOCK utilise deux mécanismes u Le bit ‘utilisé’ u Le pointeur F Comprendre que l’un est mis à jour par le matériel, l’autre par le logiciel Quand exactement, pour chacun? Chap 1059

60 Chap 1060 Résumé des algorithmes le plus importants OPTIMALLe meilleur en principe mais pas implantable, utilisé comme référence LRUExcellent en principe, mais demande du matériel dispendieux FIFOFacile à implanter, mais peut écarter des pages très utilisées Horloge CLOCKModification de FIFO vers LRU: évite d’écarter des pages récemment utilisées Les algorithmes utilisés en pratique sont des variations et combinaisons de ces concepts

61 Chap 1061 Algorithmes compteurs n Garder un compteur pour les références à chaque page n LFU: Least Frequently Used: remplacer la pages avec le plus petit compteur n MFU: Most Frequently Used: remplacer les pages bien usées pour donner une chance aux nouvelles n Ces algorithmes sont d’implantation dispendieuse et sont moins utilisés u Mise à jour de compteurs à chaque opération de mémoire!

62 Chap 1062 Utilisation d’une pile (stack) n Quand une page est utilisée, est mise au sommet de la pile. u donc la page la plus récemment utilisée est toujours au sommet, u la moins récemment utilisée est toujours au fond n Bonne implémentation du principe de localité, cependant… n La pile doit être mise à jour chaque fois qu’une page est utilisée u Inefficace, pas pratique

63 Autres détails Chap 1063

64 Chap 1064 Anomalie de Belady n Pour quelques algorithmes, dans quelques cas il pourrait avoir plus de défauts avec plus de mémoire! u p. ex. FIFO, mais pas LRU, OPT, CLOCK

65 Chap 1065 Situation considérée normale

66 Chap 1066 Anomalie de Belady (FIFO) Cas d’intérêt théorique: + de mémoire, + de fautes (v. livre)

67 Chap 1067 Le Chapitre 10 continue…

68 Le problème de la Cohérence n Quand une variable peut être stockée à plusieurs niveaux d’une hiérarchie de mémoire, nous avons le problème de la cohérence: u S’assurer que quand on obtient la valeur de cette variable, n’importe à quel niveau qu’on la trouve, elle soit toujours à jour F Nous avons vu comment ce problème est résolu dans le cas de mémoire virtuelle récriture de la dernière valeur de MP à MS F D’autres méthodes ont été développées pour des cas plus complexes Voir ‘cohérence de cache’ ou ‘cache coherence’ Chap 1068

69 Chap 1069


Télécharger ppt "Chap 101 Chapitre 10 Mémoire virtuelle / Virtuel est quelque chose qui n’est pas dans le matériel, elle est créée par le logiciel."

Présentations similaires


Annonces Google