Ce qui suit est un doute que j'ai rencontré lors d'une affectation à domicile du système d'exploitation - cependant, il semble plus basé sur le concept qu'une question de codage simple, donc à mon humble avis, je ne pense pas que la balise de devoirs soit appropriée pour cela.
Dans un schéma de pagination à la demande pure pour plusieurs processus exécutés en même temps, étant donné une quantité fixe de RAM et de mémoire de swap, ce qui se passe dans les 2 cas suivants par rapport à l'espace de swap, lorsque
Un processus rencontre un défaut de page, et il n'y a pas de cadres libres disponibles dans la RAM, d'où la nécessité d'écrire l'une des pages du bloc de cadres du noyau pour l'échanger (pour simplifier, je ne considère pas la copie - cas d'écriture). Explicitement, où dans l'espace Swap cette trame serait-elle écrite et quelles structures de données doivent être mises à jour pour cela?
Lorsqu'un processus doit insérer une page dans une page particulière, à quoi ressemble-t-il dans la mémoire Swap et comment pourrait-il savoir si cette page particulière est présente dans Swap?
Comme vous pouvez l'imaginer, j'ai du mal à comprendre de quelle manière gérer l'espace Swap pendant un schéma de gestion de la demande pure, et quelles structures de données seraient essentielles. Ce serait formidable si vous pouviez vous référer à des liens dans votre réponse (j'ai cherché dans "Operating System Concepts - 8th edition by Silberschatz, je n'ai pas pu trouver de réponse explicite à ma question).
Réponses:
Pour répondre à cette question, je vais visiter une certaine compréhension préalable. La pagination de la demande pure ne peut pas être accomplie sans support matériel. Toutes les architectures informatiques modernes prennent en charge la pagination, mais beaucoup ont des détails d'implémentation différents.
Les processeurs x86 utilisent ce qu'on appelle une table de pages pour garder une trace des espaces d'adressage virtuels et des mappages de pages, ainsi que des bits sur les privilèges d'accès et, plus pertinent, si cette page est même présente dans la mémoire physique. Les violations déclenchent des défauts de page qui sont piégés par le système d'exploitation.
Pour plus d'informations à ce sujet, consultez cet article .
Afin de répondre à la question de l'échange de pages, nous devons d'abord visiter la question de savoir comment le système d'exploitation garde la trace des pages utilisées par quel processus et de la façon dont elles sont allouées. Il existe de nombreuses structures de données différentes qui peuvent être utilisées pour cela. Un tableau de bits plats indiquant si une trame est allouée ou non est à sens unique. Les listes ou piles liées en sont une autre. Avec la pagination de la demande pure, les pages allouées ne sont pas réellement marquées comme présentes lorsqu'elles sont allouées. Cela a pour effet qu'aucun bélier physique n'est mis de côté pour un processus jusqu'à ce qu'il y écrive réellement. Une fois qu'il le fait, le matériel lance une erreur que le système d'exploitation intercepte, puis le système d'exploitation utilise un algorithme de permutation s'il n'y a pas de pages physiques disponibles à affecter à la page virtuelle déjà allouée.
Pour plus d'informations sur l'allocation des cadres de page, voir ici . Vous y verrez un aperçu général de certaines infrastructures de données appropriées.
Une fois qu'un algorithme approprié pour l'allocation de pages est implémenté, un autre pour l'allocation d'espace disque pour l'échange doit être choisi. Windows, par exemple, a historiquement utilisé un fichier plat dans le système de fichiers pour l'échange de pages. J'imagine que pour chaque nœud de la structure de données assurant le suivi des pages allouées, il existe un pointeur associé à un décalage dans le fichier, indiquant la position de la page sur le disque. Les systèmes d'exploitation de type Unix ont traditionnellement utilisé des partitions distinctes pour l'échange de pages, ce qui est sans doute plus rapide car il n'y a pas de couche de système de fichiers.
Il est également possible de séparer les infrastructures de données de l'algorithme de permutation de celles de l'algorithme d'allocation, mais les deux sont liées, ce qui n'est probablement pas souvent fait.
J'espère que cela répond à votre question malgré la brièveté relative avec laquelle je l'ai traitée. J'ai trouvé que la meilleure façon de se renseigner sur les systèmes d'exploitation est de plonger dans les détails architecturaux parfois désagréables que l'on peut trouver dans des sites comme wiki.osdev.org et www.osdever.net qui traitent spécifiquement de la création de systèmes d'exploitation amateurs et fournissent d'excellents tutoriels. sur ces détails.
la source