2010-12-09 30 views
1

Quelqu'un peut-il expliquer comment les opérations de lecture/écriture effectuées sur le noeud/dev en utilisant BSD read() write() parviennent au disque dur.POSIX lecture/écriture brute

-t-il passer par le système de fichiers ou il interagit directement à travers les pilotes de périphériques ....

Répondre

1

Il interagit directement avec le pilote de périphérique. Certains systèmes d'exploitation (pas certains sur OS X), utilisera le cache tampon, mais certains le contourneront. Dans certains cas, cela dépend même du nœud de périphérique. Par exemple, OS X a/dev/disk * ainsi que/dev/rdisk *, où les nœuds de périphérique rdisk * sont des accès bruts.

1

Par exemple, prenez le cas suivant. Vous ouvrez le périphérique fictif/dev/bd, qui est un disque dur. Le noyau, afin de servir la requête d'appel système, essaie d'abord de trouver l'inode associé au chemin/dev/bd. Après avoir réussi, il est déterminé, quel est le type de l'inode, a été lu tout à l'heure. Dans notre cas, le type de l'inode sera BLOC-SPECIFIC. À ce stade, le noyau sait que cet inode représente un pilote (pilote d'un périphérique spécifique au bloc). Chaque appareil est associé à une paire (major_id, minor_id) et identifie les différents appareils. Dans l'inode, il peut être trouvé, et le noyau sait exactement quel pilote peut servir la requête. Et dépend de la demande, la fonction appropriée du pilote sera invoquée (par exemple en lecture).