GEF 435 Principes des systèmes d’exploitation Segmentation (Tanenbaum 4.8)
Revue Qu’est-ce que l’anomalie de Belady? Quelle classe d’algorithmes ne souffre pas de l’anomalie de Belady? Pourquoi ces algorithmes ne souffrent pas de l’anomalie de Belady? Belady’s anomaly is the counterexample that showed some PRAs may have more page faults with more page frames than with less for particular reference strings The class of algorithms that do not suffer from Belady’s anomaly are called stack algorithms They don’t suffer from it since the pages in memory for x page frames at point r in a reference string are a subset of the pages in memory for x+1 page frames at the same reference point.
Synopsis Revue de la gestion de la mémoire Segmentation Segmentation avec pagination Utilisation dans les systèmes réels
L’histoire jusqu’à maintenant... Gestion de la mémoire: Monoprogrammation Multiprogrammation avec partitions fixes Même grandeur pour toutes les pages Différente grandeur (file(s) d’attente unique ou multiples) Permutations (multiprogrammation avec partition variables– tableaux de bits/listes chaînées) Mémoire virtuelle Pagination Tables de pages multiniveaux Répertoire des pages actives (RPA - Translation look-aside buffers) Table de pages inversée Algorithmes de remplacement de pages
L’histoire jusqu’à maintenant... La solution de la mémoire virtuelle jusqu’à maintenant est la pagination La pagination est un modèle de gestion de la mémoire qui est “plat” ce qui veut dire que les programmeurs voient les adresses qui commencent à 0 jusqu’à une adresse maximum Pour certaines applications, il pourrait être utile de permettre différents espaces de mémoire à l’intérieur d’un seul processus... Par exemple, dans un programme il pourrait y avoir des espaces de mémoire distincts pour le texte du programme, la pile et le tas
Rappel: Permutation Avec les permutations, des processus entiers sont déplacés entre le disque et des partitions de mémoire. Si les partitions ne sont pas de grandeur fixe, la fragmentation peut se produire Ask them about compaction.
Segmentation Similairement, la segmentation est une division de mémoire en segments, chacun commençant à une adresse de base dans la mémoire physique. Chaque processus peut avoir plusieurs segments Le programmeur doit maintenant spécifier un numéro de segment et un offset pour accéder à la mémoire Ceci signifie que le programmeur doit avoir connaissance du modèle de mémoire (au moins au niveau assembleur) contrairement à la pagination Référé en tant que mémoire à deux dimensions
Segmentation segment 0 segment 1 segment 2 segment 4 segment 3 1400 2400 3200 4300 4700 5700 6300 6700 Segmentation segment 0 segment 3 segment 2 segment 4 segment 1 Sous-routine segment 0 pile Programme principal limite base 1000 1400 1 400 6300 2 4300 3 1100 3200 4 4700 segment 1 Racine carrée segment 2 This diagram is from Silberschatz & Galvin It shows only for a single process how memory may be divided, but of course with larger memory we could have segments from other processes in at the same time. Note that Tanenbaum states that the advantage of segmentation is that segments can change size easily. If you run out of space in your stack, the segment can easily grow. As should be obvious from the diagram, it may not be that simple if segments are touching. They could be shuffled around in memory, but that would be at great expense... Table de symboles segment 4 segment 3 Espace d’adresses logiques Mémoire physique
Segmentation Comment est-ce que les adresses sont traduites? Mémoire limite base Table de segments Adresses logiques Segment Offset Mémoire Physique offset < limite? This is another diagram from Silberschatz and Galvin. Note how similar it is to our solution for paging. Instead of a page table, we have a segment table. The address is broken up into two pieces, just like with paging. The difference is that the addresses translated in a single segment result in linear addresses through physical memory. Increasing your virtual address when paging results in different pages continually and completely different locations in physical memory. Note also, that just like paging, a system may be developed with a large number of segments. In this case, the segment table may need to be kept in memory or even on disk. A Translation Lookaside buffer may be employed as with paging so segment lookups do not have to occur frequently. Finally, note that checking will have to be done to ensure a program is not trying to access another process’ memory. This can be done by having a registers (for each process) indicating where in the segment table they are to start (Segment Table Base Register) and how many entries are legal for that process (Segment Table Length Register). They should never access a segment outside of their allowed range. + Oui Non TRAP, erreur d’adressage
Segmentation Avantages: Il peut être possible d’agrandir ou de les rapetisser On peut donner à chaque segment sa propre information de protection ... Ceci est beaucoup plus facile que d’essayer de protéger chaque page en mémoire Lier les programmes (linking) est une tâche triviale Le code peut être partagé entre les processus plus facilement. On charge le segment de code seulement une fois. Les copies du même programme accède le même segment For linking programs...explain how object code is created for individual files...and then put together by the linker with all the address realignment and such.
Segmentation Désavantages: Les programmeurs doivent être au courrant de quel modèle de mémoire est utilisé (au moins durant l’assemblage) Tout comme les systèmes de permutation, la fragmentation peut gaspiller de la mémoire. Les segments peuvent être trop larges pour entrer dans la mémoire physique Nous connaissons déjà une solution pour adresser les programmes qui sont plus grands que la mémoire physique? The answer is paging!
Segmentation avec pagination! Pour obtenir le meilleur des deux mondes, les segments peuvent être paginés Élimine le problème de la fragmentation Permet à des segments larges à être partiellement en mémoire Requis: Chaque processus a besoin d’une table de segment Cette table même peut être segmentée et paginée! Chaque entrée dans la table de segment pointe à la table de pages pour ce segment Tout comme avant, ceci peut être une table de pages multiniveaux This is sort of similar to multi-level paging in that we’ll have to break the address into three components. The segment, the index into the page table, and the offset within the page.
Mémoire Physique + Segment Offset offset < limite? oui Offset non Adresse logique Segment Offset Mémoire Physique offset < limite? oui limite base de la table de pages table de segment Offset non TRAP Offset tbl de Pg Offset' This demonstrates the trivial case where the segment table and page tables can fit in registers The “limit” here is the length of the segment. Obviously, we cannot address deeper into the segment than the size we requested. Note that while physical memory will not be fragmented in this scheme, the programmer/compiler is still able to request segments that break up their virtual address space in a terrible way. That is why systems that have segments usually provide them in discrete chunks. Ajout de cadre Table de pages pour le segment + Ajout de cadre Offset'
Utilisation dans le monde courrant Depuis la puce 80386, Intel a supporté la segmentation et la pagination Pour le 386 il y a 8K de segments “partagés” et 8K de segments pour chaque processus Ajoutez 2 bits de protection et vous avez de l’adressage à 16 bits pour les segments – ce qui en laisse 16 pour l’offset OS/2 a utilisé toutes les caractéristiques que cela permet Pour la série des Pentiums, Windows rend cela trivial en donnant à chaque processus un grand segment qui est paginé, ce qui a pour effet ré-aplatir l’espace de mémoire
Quiz Time! Questions?