En cas de lecture ou d'écriture sur disque, où vont les données?
10
Je comprends qu'il existe un contrôleur de disque qui contient un tampon, mais je me demandais si le CPU lit directement à partir de ce tampon, ou si les données doivent d'abord aller à un emplacement spécifique en mémoire, puis se permettre d'être lues par le CPU?
Quelqu'un sait-il également comment s'appelle le tampon? Et comment le DMA s'intègre-t-il dans tout cela?
Pour une lecture de disque, le flux de données est essentiellement:
une fois que l'ensemble de lecture / écriture est au cylindre demandé, la tête r / w demandée est sélectionnée.
à chaque secteur, l'ID de secteur est lu. Si le numéro de secteur lu correspond au numéro de secteur demandé, les données de secteur sont lues.
les données de secteur sont lues comme un train de bits série et converties en octets.
les octets du secteur sont stockés dans un tampon de secteur (généralement SRAM dans le contrôleur); ce tampon de secteur est distinct du "cache disque".
une fois que tout le secteur a été lu, les données sont validées en utilisant ECC, et peut-être corrigées.
une fois validées, les données de secteur sont transférées du contrôleur au PC hôte. Remarque: l'existence de ce tampon de secteur n'est pas bien connue, et il est largement répandu que la vitesse de transfert sur l'interface hôte (egATA) est liée ou limitée par le débit binaire à la tête R / W. C'est complètement faux, car ces deux transferts de données sont des opérations indépendantes et séquentielles et non concurrentes.
lorsque le PC reçoit les données du contrôleur de disque via l'interface ATA, le PC peut utiliser des E / S programmées (le CPU lit à plusieurs reprises le registre de données du port ATA et copie la valeur dans la mémoire de destination) ou DMA (le contrôleur DMA est configuration pour copier N octets du registre de données du port ATA vers un tampon de mémoire sans autre intervention du processeur).
le "tampon" de mémoire du PC qui reçoit les données peut être le tampon de l'application (lors de l'utilisation d' un appel système de bloc d'E / S ), ou peut être un tampon système interne sous le contrôle du système de fichiers, ou même un programme ou une mémoire de données si les données proviennent du swap (ou fichier d'échange).
Une écriture sur le disque est similaire, sauf que les données sont transférées du PC au contrôleur de disque, l'ECC est calculé, le secteur demandé est localisé, puis les données sont écrites du tampon de secteur sur le plateau.
Pour un crédit supplémentaire:
Renseignez-vous sur les transferts « diffusion-collecte », qui utilisent le chaînage DMA et une liste de diffusion-collecte d'adresses mémoire et de longueurs de tampon. Au lieu d'un seul grand tampon de mémoire contigu, un transfert "scatter-recueillir" permet d'agréger l'utilisation de tampons de mémoire non contigus pour la demande d'E / S disque.
Pourrait peut-être être un peu moins spécifique sur les `` têtes r / w '' car les entraînements non mécaniques sont utilisés beaucoup plus fréquemment de nos jours, mais c'est une bonne réponse.
Shinrai
@Shinrai - Je n'ai qu'une expérience de programmation de première main avec des lecteurs de disque à bras mobile (et j'ai utilisé des lecteurs à tête fixe). Je choisis de ne pas spéculer ou répéter des informations de seconde ou de troisième main sur le fonctionnement des SSD.
sciure de bois
+1 pour cette excellente réponse, bien documentée et écrite. Très professionnel.
climenole
2
Il va dans une zone mémoire spécifique que le noyau a allouée au pilote du disque. Je ne pense pas qu'il soit spécifiquement nommé. Cette zone de mémoire est généralement configurée comme un tampon en anneau . Selon le système d'exploitation, cette mémoire peut être copiée une deuxième fois dans l'espace utilisateur pour l'application à utiliser.
Le DMA est un "accès direct à la mémoire", ce qui signifie que le contrôleur du lecteur de disque peut directement écrire dans la RAM sans que le CPU lui demande à plusieurs reprises si plus de données sont disponibles (appelées polling - la façon dont les choses étaient faites auparavant ). Au lieu de cela, lorsque l'intégralité du tampon a été transféré, le contrôleur interrompt alors le processeur pour lui faire savoir que les données sont désormais disponibles.
Si vous êtes curieux d'un niveau encore plus bas, le pilote passe des appels ioctl .
Les tampons en anneau sont généralement utilisés par les périphériques réseau (par exemple, un contrôleur Ethernet) car les données peuvent arriver non sollicitées (de manière inattendue sans demande de lecture en attente). Les données d'un lecteur / contrôleur de disque sont toujours en réponse à une demande de l'hôte. Les données sont sollicitées, il n'y a donc pas besoin de "tampon en anneau" dans un pilote de disque.
sciure
OK, je n'ai travaillé qu'avec des DAC au niveau du pilote et ils utilisent aussi des tampons en anneau, donc je l'avais supposé.
Il va dans une zone mémoire spécifique que le noyau a allouée au pilote du disque. Je ne pense pas qu'il soit spécifiquement nommé. Cette zone de mémoire est généralement configurée comme un tampon en anneau . Selon le système d'exploitation, cette mémoire peut être copiée une deuxième fois dans l'espace utilisateur pour l'application à utiliser.
Le DMA est un "accès direct à la mémoire", ce qui signifie que le contrôleur du lecteur de disque peut directement écrire dans la RAM sans que le CPU lui demande à plusieurs reprises si plus de données sont disponibles (appelées polling - la façon dont les choses étaient faites auparavant ). Au lieu de cela, lorsque l'intégralité du tampon a été transféré, le contrôleur interrompt alors le processeur pour lui faire savoir que les données sont désormais disponibles.
Si vous êtes curieux d'un niveau encore plus bas, le pilote passe des appels ioctl .
la source