8
votes

Curiosité Au-delà des abstractions: comment est-ce que ByTecode est exécuté? Comment fonctionnent les conducteurs d'appareils?

Tout ce que j'ai vu sur * Nix a été un ensemble d'abstractions hors du matériel, mais je suis curieux de savoir comment fonctionne le matériel.
J'ai programmé en montage, mais ce n'est toujours qu'un ensemble d'abstractions.

Comment un processeur comprend-il les opcodes d'assemblage (comme bytecode)?

Comment les conducteurs de périphérique fonctionnent (avec une explication à un niveau inférieur (d'abstraction))?


3 commentaires

Je n'ai pas lu le livre moi-même, mais Amazon.com/ Code-Langue-Language-Computer-Hardware-Logiciels / ... Code prétend répondre à certaines de vos questions, du moins de manière basique.


Je pense que vous devez franchir cette question en deux ou plus, car votre pilote de périphérique fonctionne et comment le processeur gère ByTecode est de vastes sujets différents et plutôt grandes et d'eux-mêmes. Ou ... vous pourriez faire ta clavier "et quel est le sens de la vie" là-bas pour être complet.


Le livre de Tanenbaum est une bonne ressource pour la deuxième partie de la question: Amazon.com/structured-Computer-Oronganisation-Adraw-tanenbaum / dp / ... Je me souviens qu'il comprend la construction d'un processeur proche du matériel avec son propre jeu d'instructions, etc.


4 Réponses :


1
votes

wow .... question énorme! Au niveau de la racine même, le processeur peut communiquer avec le matériel via des instructions spéciales. E.G. Dans et dehors des ports d'E / S sur le matériel X86 et / ou une forme de régions d'E / S mappées de mémoire.

Différents matériels a alors des protocoles / règles très différents sur la manière de communiquer sur ces canaux et, en général, échouera probablement horriblement si ces règles ne sont pas suivies. Un exemple serait un dispositif de sortie qui ne peut gérer qu'un nombre limité de transmetteurs par seconde, de sorte que le conducteur doit vérifier si le matériel est prêt à envoyer plus de données avant d'essayer de transmettre n'importe quoi. Vous devez également vous assurer qu'il n'existe aucune tentative simultanée d'accéder au même dispositif, une des nombreuses bonnes raisons pour lesquelles les systèmes d'exploitation n'autorisent pas les programmes de mode utilisateur d'accéder directement au matériel chaque fois qu'ils le ressentent.

Pourquoi ne pas regarder le code source Linux pour satisfaire votre curiosité?

Pilotes de noyau Linux

Notez que la majeure partie de celle-ci est écrite en C, pas la langue d'assemblage. Il n'existait aucune exigence stricte d'utiliser le langage de montage pour écrire des pilotes de périphérique, vous disposez des instructions disponibles pour communiquer avec le matériel (qui est vrai en C, mais pourrait ne pas être vrai dans certaines langues de niveau supérieur).


0 commentaires

2
votes

Les appareils ont une "interruption" - ce qu'ils signalent qu'ils veulent l'attention du processeur.

Les pilotes de périphérique ont une "routine de service d'interruption" - qui est le code qui est exécuté lorsqu'une interruption se produit sur ce périphérique.

Les pilotes de périphérique, puis lisent ou écrivent des données dans une forme de niveau bas qui correspond au périphérique - typiquement des caractères ou des blocs de données. Les niveaux les plus élevés du pilote de périphérique gèrent l'emballage, le déballage, la mise en mémoire tamponnage et la traduction des données de niveau inférieur aux données de niveau supérieur, telles que des lignes de caractères texte, par exemple.

assez simple dans ses bases, mais il est compliqué de manière réelle lorsque vous ajoutez plusieurs périphériques, plusieurs utilisateurs, en gardant une trace de l'état pour les deux et de nombreuses autres abstractions, comme un système de fichiers, au-dessus du périphérique orienté bloc de base i / O.


1 commentaires

Bons points - Il convient de noter que de nombreux appareils n'utilisent pas d'interruption, que ce soit parce qu'ils sont des périphériques simples uniquement des sorties ou, car ils nécessitent le processeur de sondage pour l'entrée.



3
votes

Les pilotes de périphérique forment une interface entre l'API d'appareil d'un système d'exploitation et les registres matériels réels.

Le modèle API de périphérique Linux est une continuation du concept de Linux plus large que tout est un fichier, et qu'une application peut accomplir tout ce dont il a besoin avec l'ouverture (), lire (), écrire (), ioctl (), et interface proche (). Sous la hotte, il y a une routine d'installation (), mais l'OS décide quand appeler cela.

L'autre côté de la pièce est matériel. La CPU accède à des registres de périphérique avec des instructions spéciales d'E / S, ou des accès à la mémoire ordinaire à des emplacements de mémoire spéciaux connectés au matériel. Bien que les registres matériels puissent agir comme une mémoire, ils peuvent faire des choses que la mémoire ne peut pas. Très souvent, l'écriture sur l'un des registres d'un périphérique peut modifier certaines de ses autres registres et, au point, peut changer ou être modifié par une activité électrique dans le matériel connecté.

Les conducteurs de périphérique pontent cet écart. Étant donné que les possibilités de types de périphériques sont presque illimitées, il est difficile de généraliser comment les fonctions sont mappées, au-delà de quelques points. La routine d'installation () est touchée au temps de démarrage du système, configure des registres pour un fonctionnement correct, cela inclut normalement la configuration du service d'interruption et de la manipulation; La routine Open () donne une application une connexion logique à l'appareil; Il y a généralement un effort pour faire lire () et écrire () déplacer des données de manière raisonnable, bien que parfois, vous voyez ces personnes implémentées comme non-op; et les paramètres de périphérique à vol sont actionnés via IOCTL (). Et bien sûr, le travail principal de près () est d'annuler le travail d'ouverture (), de prendre des précautions spéciales pour libérer les ressources système saisies par Open ().

Eh bien, c'est la prise de Linux-Centric, de toute façon. Le modèle Windows, au moins celui que je connais (probablement daté), a tendance à offrir des bibliothèques d'appels de fonction spécifiques à un périphérique.


0 commentaires

2
votes

"L'art de l'assemblage" est un bon livre obsolète, et pourtant obsolète avec des explications sur à peu près tout au matériel et à faible niveau. Vous devriez lui donner une lecture.

Il est disponible légalement en ligne et sous forme imprimée.

Le livre, en ligne

sur Amazon

Edit: Commentateur Samoz mentionne une nouvelle édition, alors maintenant, il est probablement à jour!


0 commentaires