Quelle est la Mémoire Virtuelle du Noyau de chaque processus contenir?
Quand on dit 3 logiciels (exécutables) sont chargés en mémoire la mise en page pourrait ressembler à quelque chose comme ceci:
le texte d'alt http://img97.imageshack.us/img97/3460/processesm.jpg
J'ai les questions suivantes:
-
Est le concept de Mémoire Virtuelle limitée pour les processus utilisateur? Parce que, je me demande où en est le Noyau du Système d'Exploitation, les Pilotes de vivre? Comment est sa disposition de la mémoire? Je veux en savoir plus sur le noyau du côté de la mémoire. Je sais que son système d'exploitation spécifique à faire votre choix (windows/linux).
-
Est le concept de Mémoire Virtuelle par le processus de base? Je veux dire, est-il correct pour moi de dire que 4 go de fabrication1 + 4 GO de process2 + 4 GO de process3 = 12 GO de mémoire virtuelle (pour tous les processus). Ce n'est pas son droit. Ou à partir d'un total de 4 go d'espace de 1 GO est prise par le noyau & reste 3 go est partagé b/w tous les processus.
-
Disent-ils, sur un ordinateur 32 bits 4GO d'espace d'adresse. La moitié de celui-ci (ou, plus récemment, de 1 go) est occupé par le noyau. Je peux le voir sur ce schéma que "la mémoire Virtuelle du Noyau" occupe 0xc0000000 - 0xffffffff (= 1 GO). Sont-ils de parler de cela? ou est-ce autre chose? Tiens simplement à confirmer.
-
Ce exactement ne le
Kernel Virtual Memory
de chacun de ces processus contenir? Qu'est-ce que sa mise en page? -
Quand nous faisons de l'IPC, nous parlons de la mémoire partagée. Je ne vois pas de mémoire partagée entre ces processus. Où vit-il?
-
Les ressources (fichiers, registres de windows) sont globales à tous les processus. Ainsi, la ressource/table de descripteurs de fichier doit être dans un certain espace mondial. Le domaine dans lequel serait-il?
-
Où puis-je en savoir plus sur ce noyau côté des choses.
- Cassé lien de l'image
Vous devez vous connecter pour publier un commentaire.
Lorsqu'un système utilise la mémoire virtuelle, le noyau utilise la mémoire virtuelle en tant que bien. Windows va utiliser la partie supérieure de 2 go (ou 1 go si vous avez spécifié le commutateur /3GB dans le bootloader de Windows) pour son propre usage. Cela comprend le code du noyau, les données (ou au moins les données paginées en -- c'est vrai, Windows peut page des parties de l'espace d'adressage du noyau sur le disque dur), et les tables de pages.
Chaque processus a son propre machine virtuelle de l'espace d'adresse. Lorsqu'un processus de changement, les tables de page sont généralement échangé avec un autre processus de la table des pages. C'est simple de le faire sur un processeur x86 - modification de la page de base de la table d'adresses dans le
CR3
registre de contrôle suffira. L'ensemble de 4 GO d'espace d'adresse, est remplacé par des tableaux de remplacement d'un de complètement différent de l'espace d'adressage de 4 go. Ayant dit que, généralement, il y aura des régions de l'espace d'adressage qui sont partagées entre les processus. Ces régions sont marquées dans la page des tables avec des indicateurs qui indiquent le processeur que ces zones n'ont pas besoin d'être invalidée dans le processeur de translation lookaside buffer.Comme je l'ai mentionné plus tôt, le noyau du code, les données et les tables de pages eux-mêmes besoin d'être situé quelque part. Cette information se trouve dans l'espace d'adressage du noyau. Il est possible que certaines parties du noyau du code, des données et des tables de page peuvent eux-mêmes être transférée sur le disque en tant que de besoin. Certaines parties sont jugés plus essentiels que d'autres et ne sont jamais échangé au tout.
Voir (3)
Il dépend. En mode utilisateur, la mémoire partagée est situé dans le mode utilisateur, l'adresse de l'espace. Les pièces de la mode noyau de l'espace d'adresse pourrait très bien être partagé entre les processus. Par exemple, il ne serait pas rare que le noyau du code qui doit être partagé entre tous les processus dans le système. Où que la mémoire est situé n'est pas précise. Je suis en utilisant des adresses arbitraires ici, mais de mémoire partagée situé à
0x100000
dans un processus pourrait être situé à0x101000
l'intérieur d'un autre processus. Deux pages dans les différents espaces d'adressage, tout à fait différents les adresses, peuvent pointer vers le même mémoire physique.Je ne suis pas sûr de ce que vous voulez dire ici. Des descripteurs de fichiers ouverts ne sont pas globaux à tous les processus. Le système de fichiers stockés sur le disque dur est globale pour tous les processus. Sous Windows, les descripteurs de fichiers sont gérés par le noyau, et les objets sont stockés dans l'espace d'adressage du noyau et géré par le noyau du gestionnaire d'objets.
Pour les systèmes basés sur Windows NT, je le recommande Windows Internals, 5ed par Mark Russinovich et David Solomon
Réponse au commentaire:
Cela dépend de l'OS. Certains noyaux (comme le
L4
micro-noyau) utilisent la même table des pages pour de multiples processus et séparer les espaces d'adressage à l'aide de la segmentation. Sur Windows chaque processus a sa propre page de tableaux. Rappelez-vous que même si chaque processus peut obtenir son propre virtuel de l'espace d'adresse, cela ne signifie pas que la physique la mémoire est toujours différent. Pour exemple, l'image dekernel32.dll
chargé dans Un processus est partagé aveckernel32.dll
dans le processus de B. une grande partie de l'espace d'adressage du noyau est également partagée entre les processus.La meilleure façon de penser, c'est de se demander "Comment un noyau de travail si il ne s'est pas exécuté à l'aide de la mémoire virtuelle?" Dans cette situation hypothétique, à chaque fois que votre programme a provoqué un changement de contexte dans le noyau (disons que vous faites un appel système), la mémoire virtuelle devront être désactivés pendant que le PROCESSEUR était en cours d'exécution dans l'espace du noyau. Il y a un coût à faire et il y a un coût pour le rallumer lorsque vous revenez à l'espace utilisateur.
En outre, supposons que le programme de l'utilisateur passé en un pointeur à certaines données de son système d'appel. Ce pointeur est une adresse virtuelle. Vous avez de la mémoire virtuelle hors tension, de sorte que le pointeur doit être traduit en une adresse physique avant que le noyau ne peut rien faire avec elle. Si vous aviez la mémoire virtuelle est activée, vous devez obtenir gratuitement grâce à la gestion de la mémoire de l'unité sur le CPU. Au lieu de cela, vous auriez à traduire manuellement les adresses dans le logiciel. Il y a toutes sortes d'exemples et des scénarios que j'ai pu décrire (certains impliquant des matériels, certains impliquant la page entretien de la table, et ainsi de suite), mais l'essentiel, c'est qu'il est beaucoup plus facile d'avoir un groupe homogène de gestion de la mémoire système. Si l'utilisateur de l'espace est à l'aide de la mémoire virtuelle, il va être plus facile à écrire un noyau si vous maintenir ce régime dans l'espace du noyau. Au moins cela a été mon expérience.
Comme je l'ai mentionné ci-dessus, tout à fait un peu de cet espace d'adressage sera partagée par tous les processus. Il y a par-de traiter des données qui est dans le noyau espace qui est échangé lors d'un changement de contexte entre les processus, mais beaucoup sont partagés, car il y a un seul noyau.
Pour répondre à votre question, vous devez comprendre plus sur le Noyau et les techniques qu'il emploie pour gérer les ressources (CPU, mémoire, ...) et de fournir une élégante abstraction de l'Application des programmes.
Tout d'abord je tiens à préciser que " de la Mémoire Virtuelle' est une gestion de la mémoire technique employée par les systèmes d'exploitation modernes; qui fournit de nombreux avantages comme l'isolation des processus, par la protection, permet l'exécution de plusieurs programmes de concert, permet à des programmes dont la taille est plus grande que la mémoire physique du système.
En vertu de cette technique, il y a deux termes "Mémoire Virtuelle" et "l'Espace d'adressage Virtuel" qui ne sont pas les mêmes, mais toujours étroitement liés.
(Vous pouvez vous demander comment est la mémoire Virtuelle est à la fois une technique ainsi qu'un concept de vertu, mais oui, c'est exact et vous comprendrez que ci-dessous)
En informatique, le mot " mémoire' a 2 significations. La première, est quelque chose que vous pouvez utiliser pour stocker des données (registres, cache, RAM, ROM, disque dur, etc). La deuxième, est synonyme de la mémoire primaire (c'est à dire, RAM).
Lorsque vous remplacez le mot-à-mot, " Virtuel Mémoire' est rien mais " Virtuel RAM'. C'est le montant total de l'espace disponible à tout moment dans le système, dans lequel les programmes sont chargés de l'exécution. Donc, ce n'est rien, mais la Physique de la mémoire RAM + swap de la mémoire sur le secondaire de stockage alloué par le noyau.
Donc si vous avez 2 go de RAM et 4 GO d'espace de swap mis de côté par le noyau au moment de l'installation, puis la mémoire Virtuelle de votre système est de 6 go. Je ne vais pas vous expliquer plus sur le swap de la mémoire ici, car ce serait s'écarter de plus à partir de la rubrique.
De passer à l'Espace d'adressage Virtuel.
Alors pour mieux comprendre ce que vous devez ajuster votre esprit un peu. Comme le nom lui-même "Virtuel", dit, l'espace d'adressage n'est pas présent dans la réalité! Ce n'est qu'une illusion créée par le noyau de l'application des programmeurs (pour obtenir beaucoup d'avantages, comme je l'ai mentionné dans le paragraphe 2)
Ainsi, chaque processus dispose d'une distinct de l'espace d'adressage virtuel par le noyau. (Si il n'y a pas de Noyau dans le système et a vous exécutez votre programme d'application sur le matériel, alors il aurait utilisé l'adresse physique de l'espace, c'est à dire, de la mémoire vive que son espace d'adressage)
Ainsi, sur une machine 32 bits registres d'adresse, le noyau pourrait fournir un espace d'adressage virtuel de 2^32 = 4 go pour chaque processus. (Si cet espace d'adresse virtuelle des modifications de portée avec le HW architecture. Les derniers processeurs de 48 bits de l'adresse de registres, de sorte qu'ils peuvent fournir un espace d'adressage virtuel de 2^48 = 256TB)
Et, surtout, cet espace d'adressage virtuel est un peu en l'air!! Vous serait de penser maintenant, si c'est juste dans l'air, comment peut-on le code, les données du processus même être exécuté. Oui, ce besoin d'être relié à la mémoire physique. Leur correspondance avec la mémoire physique est géré par le noyau en utilisant le concept de l'échange.
Alors maintenant, vous pouvez voir comment le noyau a réalisé l'isolation des processus à l'aide de l'espace d'adressage virtuel. Si l'adresse de chaque processus peut générer est entre 0 à 4 go (en supposant que le système est 32 bits de l'adresse de registre par souci de simplicité), de sorte que ce qui est dans son intégralité. Et il ne sait rien à propos de tout autre processus en cours d'exécution dans le système. C'est comme si chaque processus est emballé dans un espace séparé.
Donc le code du noyau est aussi comme un autre processus ou d'une entité. Donc, si le noyau ont été à résider dans un tout autre espace d'adressage. Ensuite, il n'y avait pas de moyens pour les programmes d'application pour interagir avec le noyau. Si l'application cant communiquer avec le noyau et cant communiquer avec application puis il n'y a pas d'utilité du noyau sur le disque du système.
Donc la question est maintenant de savoir - Comment faire une demande de processus d'interagir avec le noyau?
Une option serait, Si le code du noyau était présent dans l'espace d'adressage virtuel du processus de demande, alors ils peuvent interagir les uns avec les autres. C'est la raison pour laquelle le code du noyau est présent dans chacun des processus de l'espace d'adressage virtuel parce que chaque processus a besoin pour communiquer avec le noyau. Ne vous inquiétez pas de code noyau n'est pas physiquement présente pour chaque processus. Comme je l'ai mentionné plus tôt VAS est juste une illusion, donc il y aura juste une copie du code du noyau présent dans la mémoire physique, et il sera la référence par l'ensemble de l'espace d'adressage virtuel (par le biais de la pagination).
Dans le cas de linux, le noyau devrait être placé sur la partie supérieure de l'espace d'adresse entre C000 0000 à FFFF FFFF (c'est à dire la raison de 1 go est réservé pour le noyau de l'EVA) et reste 3 GO (de 0000 0000 à BFFF FFFF) est autorisé pour le programme d'application à utiliser. L'espace d'adressage virtuel où noyau réside est connu en tant que noyau de l'espace et où le programme d'application se trouve est appelé l'espace utilisateur.
Si vous aviez observé avec soin, alors se poser la question que si à la fois le code de l'application et le code du noyau est, résidant dans le même espace d'adressage virtuel, et puisque le noyau se trouve dans une bien pré-défini de l'adresse de localisation, puis il n'est pas possible pour l'application du code de corrompre le code du noyau! Oups, au premier abord, il semble être possible, mais il ne peut pas.
Raison d'être - ce qui est protégé à l'aide de l'aide de HW. Il y aura drapeau sur le processeur qui indique si le mode d'exécution est en MODE SUPERVISEUR ou le MODE UTILISATEUR. L'espace du noyau de code doit s'exécuter en MODE SUPERVISEUR (paramètre indicateur de façon appropriée) et de l'espace utilisateur de code doit s'exécuter en MODE UTILISATEUR. Donc, si vous êtes en MODE UTILISATEUR tente d'accéder/modifier le code dans l'espace noyau, alors une exception est levée! (processeur obtient le savoir en fonction de l'adresse de l'instruction est d'essayer d'accès. Si elle est plus élevée que C000 0000 ensuite, on peut facilement détecter qu'il est en train d'essayer d'accéder à l'espace du noyau de code et l'actuel mode d'exécution n'ont pas l'autorisation appropriée, puisque l'indicateur est défini par l'UTILISATEUR MODE d'autorisation). Juste une remarque: En mode SUPERVISEUR, le processeur permet d'accéder aux autres ensemble de jeu d'instructions.
J'espère que si vous comprenez ce concept vous pourriez répondre vous-même à votre question. J'ai répondu directement à plusieurs de vos questions, tout en expliquant le concept lui-même.