Dans le deuxième exemple, je vais vous montrer comment un processus peut importer une mémoire externe, disons
un fichier texte sur le disque, dans son espace d'adressage virtuel.
D'accord.
Puis effectuer certaines opérations sur cette mémoire virtuelle.
Toutes les modifications apportées par le processus à cette mémoire virtuelle seront finalement répercutées dans
la mémoire externe, c'est-à-dire dans le fichier texte.
D'accord.
Voici donc l'exemple que nous allions aborder.
Dans l'exemple suivant, je vous montrerai comment plusieurs processus peuvent importer le même fichier
externe dans leurs espaces d'adressage virtuels respectifs et finalement mettre en œuvre le concept de mémoire
partagée.
Pour l'instant, laissons de côté la mémoire partagée.
Me voici donc dans le fichier et le fichier de cartes, d'accord.
Démocratie.
Dans cet exemple, j'ai simplement choisi un étudiant structurel dans lequel j'ai ces champs.
D'accord.
Je vais donc commencer par ouvrir notre fichier, le fichier texte, qui se trouve
sur le disque dur.
Pour exécuter ce programme, l'utilisateur doit donc spécifier le chemin d'accès au fichier sur le disque dur,
qui est situé sur le disque dur, puis ouvrir le fichier à l'aide de l'appel système open.
D'accord.
Et comme nous allons effectuer des opérations de lecture et d'écriture sur le fichier, il faut donc
passer ce drapeau.
Le fichier a donc été ouvert à l'aide de l'appel système open.
Maintenant, ce que nous allons faire, c'est que la prochaine chose à faire est d'extraire la taille
du fichier.
Dans ce cas, le fichier que j'allais utiliser est file ou txt, et il ne doit pas s'agir d'un fichier vide.
Créez un fichier texte sur votre disque et insérez-y n'importe quelle donnée indésirable afin que ce fichier occupe
un espace fini sur le disque.
Dans mon cas, j'ai simplement inséré certains espaces dans ce fichier et rien de plus.
Supposons que j'ouvre le fichier et que je supprime tout ce qui s'y trouve, et que j'insère simplement des espaces ou des blancs, tout
ce que vous pouvez insérer dans ce fichier.
Notre objectif est que ce fichier occupe un espace fini sur le disque.
Dans ce cas, il faut donc 539 octets.
L'étape suivante consiste à extraire la taille du fichier.
Comment faire ?
Nous prenons simplement une variable de type struct stat.
D'accord.
Il suffit ensuite d'appeler la fonction F start.
Tout ce que nous essayons de faire, c'est d'extraire la taille du fichier et donc, après
cet appel à stat, la taille du fichier peut être utilisée en utilisant la variable SD size de la barre stat.
Vous obtiendrez ainsi la taille du fichier présent sur le disque.
Ainsi, en connaissant la taille du fichier présent sur le bureau et le fichier a déjà été
ouvert.
Ce descripteur de fichier représente donc la mémoire externe présente sur le disque.
Dans ce cas, il s'agit d'un fichier texte, mais il peut s'agir de n'importe quoi.
Il peut s'agir de votre carte SD, de la mémoire de votre appareil photo, de n'importe quoi.
L'appel au système ouvert est un appel très générique.
Il peut être utilisé non seulement pour ouvrir un fichier texte, mais aussi pour ouvrir n'importe quelle ressource matérielle
qui est de toute façon attachée à votre système.
Maintenant que je connais la taille du fichier et que j'ai déjà le descripteur du fichier ouvert, je suis
en mesure d'exporter le fichier texte externe présent sur le disque en tant que mémoire virtuelle dans l'espace d'adressage
virtuel de mon processus.
Une fois de plus, je passerai le pointeur null ici.
Je transmettrai la taille du fichier parce que je veux importer le fichier entier dans mon monde, dans mon processus, dans l'espace
d'adressage virtuel.
Et je veux effectuer des opérations de lecture et d'écriture sur le fichier.
Passez donc les deux drapeaux à chaque fois que vous devez effectuer une opération d'écriture.
Maintenant, si mon programme fait des modifications dans la mémoire culturelle qui serait retournée par l'appel système
map et si vous voulez que ces modifications se reflètent dans le fichier texte qui est présent sur ce disque, alors
vous devez passer ici la valeur map shared.
Vous ne pouvez pas passer la carte en privé.
Que vous souhaitiez ou non partager cette mémoire virtuelle particulière avec d'autres processus, toutes les modifications
effectuées par votre programme dans la mémoire virtuelle de la carte seront reflétées dans le fichier texte sur le disque.
Très bien, dans ce cas également, le partage de la carte doit être adopté.
Il faut ensuite passer le pointeur, puis la valeur du descripteur de fichier de la ressource externe, qui est
un fichier.
Le dernier argument peut être égal à zéro.
Le dernier argument est l'offset dans le fichier texte à partir duquel le mapping doit être commencé.
Il se peut que vous ne souhaitiez importer que la dernière ligne du fichier texte sur le disque.
D'accord.
Ou bien vous voulez importer dans votre processus la moitié seulement du fichier présent sur le disque, ce qui permet de
gagner de l'espace.
Il faut donc passer cette valeur ici.
Cette valeur représente le décalage en termes d'octets dans le fichier texte.
Il s'agit donc à nouveau d'une condition d'erreur.
Et une fois que l'appel au système de cartographie a réussi, vous pouvez toujours fermer le descripteur de fichier d'une
ressource externe.
Ce descripteur de fichier n'est plus nécessaire.
D'accord.
Nous avons déjà réussi à importer la mémoire externe en tant que mémoire virtuelle dans le processus.
Espace d'adressage virtuel.
J'ai maintenant une mémoire qui a été allouée à mon programme.
Je peux faire ce que je veux de cette mémoire.
Je me contente donc d'initialiser la structure et d'utiliser mon opération CP VI.
J'écris les informations dans ce fichier ou cette mémoire mappée.
C'est donc ici que se produit la modification des pages de mémoire virtuelle importées.
Ainsi, selon ce diagramme, vous avez modifié ces pages de mémoire virtuelle de couleur verte.
D'accord.
Ces changements se répercutent immédiatement sur les pages physiques chargées dans la mémoire
vive, mais le fichier texte externe n'a pas encore été modifié.
Pour cela, vous devez appeler le système MX Sync.
Dès que vous appelez le système AMP Sync, les pages physiques chargées dans la RAM synchronisent
leur contenu avec la mémoire externe qui a été mappée.
Une fois les modifications envoyées, vous pouvez détruire les pages de mémoire virtuelle importées à l'aide
de l'appel système map.
D'accord.
Et le tour est joué.
Permettez-moi maintenant d'exécuter ce programme et de vous montrer la démonstration.
Donc, comme je l'ai dit, je vais utiliser le fichier demo text comme mémoire externe et ce fichier est vide.
Remarquez donc que la taille de ce fichier sur le disque doit être une valeur finie, qui est de 539 octets.
J'ai compilé mon programme.
Qui est map file write demo two dot C.
Je vais exécuter l'exécutable et passer.
Le fichier demo two dot txt comme argument.
Voyons maintenant quel est le contenu de ce fichier.
Nous pouvons donc voir que vous avez imprimé Abhishek et Bangalore conformément aux informations, au numéro de matricule
et au masque, car il s'agit de données binaires.
Ils ont donc été imprimés dans le fichier au format binaire, que vous ne pouvez pas lire.
Ainsi, dans un fichier texte, si vous écrivez des données binaires, vous ne pourrez pas les lire.
Mais vous avez compris que notre programme fonctionne bien.
D'accord.
Nous avons donc importé avec succès la mémoire externe, qui est un fichier texte dans le processus, l'espace d'adressage
virtuel à l'aide d'une carte.
Nous avons écrit les données dans cette mémoire virtuelle.
Nous avons ensuite détruit cette cartographie à l'aide d'un appel de carte.
Nous synchronisons l'ensemble des données de la mémoire physique avec le fichier externe à l'aide de HM sync.
Enfin, nous vérifions manuellement ce qui se trouve dans notre fichier texte et nous constatons que les données s'y trouvent.
Notre programme fonctionne donc parfaitement.