Je me demande comment Windows fait la distinction entre différents lecteurs et modules de mémoire, je veux dire comment Windows peut-il écrire quelque chose spécifiquement sur le disque C ou le disque D.Dans chaque langage de programmation, lorsque vous déclarez une variable, elle est enregistrée dans la mémoire, et lorsque vous devez stocker quelque chose pour hdd, vous devez utiliser une bibliothèque. Alors, comment Windows gère-t-il cela? Traite-t-il tous les disques et modules de mémoire comme une seule ligne de données et enregistre-t-il uniquement l'adresse de début de chaque support? - comme 0x00000 est l'endroit où le disque C commence, 0x15616 est l'endroit où le disque D commence.

0
Dave F. 12 mars 2021 à 14:24

2 réponses

Meilleure réponse

Comme @MSalters l'a dit,

C: est un lien symbolique vers quelque chose comme Device \ HarddiskVolume1.

Cela signifie que les pilotes de disque sous Windows sont implémentés comme des systèmes de fichiers virtuels un peu comme sous Linux. Je vais expliquer pour Linux car il y a beaucoup plus de documentation, mais la réponse est assez similaire pour Windows même si les deux systèmes d'exploitation font les choses différemment.

Fondamentalement, sous Linux, tout est un fichier. Linux est livré avec des pilotes de disque car ils sont à la base de chaque ordinateur. Linux expose un modèle de pilote comme chaque système d'exploitation. Le modèle de pilote Linux pour les fichiers (y compris les disques durs) expose les fonctions qui seront appelées par le noyau pour lire / écrire sur le disque. Il existe des fonctions d'ouverture, de lecture et d'écriture que le noyau s'attend à être présentes pour un pilote de fichier.

Si vous le souhaitez, vous pouvez écrire un pilote de disque et remplacer celui existant. Vous écrivez des pilotes sous forme de modules que vous pouvez ensuite charger dans le noyau à l'aide de certains utilitaires fournis avec Linux. Je ne partagerai pas plus de détails car je ne suis pas très au courant. Une fois votre code chargé dans le noyau, il a accès à tout le code du noyau et à tout le matériel puisqu'il fonctionne en mode noyau.

Aujourd'hui, les pilotes de disque utilisent probablement PCI DMA qui est un contrôleur connecté au bus PCI qui permet d'effectuer des opérations de disque qui ignorent le CPU et chargent directement les données du disque dans la RAM. La convention PCI stipule que tous les périphériques compatibles (comme les contrôleurs PCI DMA) doivent exposer une certaine interface à l'ordinateur. Cette interface est principalement constituée de registres mappés en mémoire qui peuvent être utilisés pour envoyer des commandes au contrôleur. Le système d'exploitation écrira des données dans ces registres pour indiquer au contrôleur DMA d'effectuer des opérations sur le disque. Ensuite, le contrôleur DMA déclenchera une interruption une fois que cela sera fait. Le système d'exploitation saura alors que les données sont facilement chargées dans la RAM et prêtes à être utilisées. Il en va de même pour l'écriture

Le système d'exploitation connaît l'emplacement de ces registres en consultant les tables ACPI au démarrage.

1
user123 13 mars 2021 à 11:05

Dans Windows moderne (2000 ou plus récent), C: est un lien symbolique vers quelque chose comme Device\HarddiskVolume1. Le nombre peut varier. Typiquement, \Device\Bootpartition est également un lien symbolique vers le même HarddiskVolume.

Windows n'utilise pas de bibliothèques pour écrire sur le disque. Au lieu de cela, il utilise des pilotes . La principale différence est que les pilotes fonctionnent dans le cadre du noyau du système d'exploitation, tandis que les bibliothèques fonctionnent dans le cadre d'applications.

0
MSalters 12 mars 2021 à 12:11