Peut-être le principal travail d'un système d'exploitation est de cacher la complexité d'un véritable morceau de matériel à partir de l'application de l'écrivain. Par conséquent, toute description de la façon dont le système d'exploitation fonctionne court le risque d'être vraiment compliqué, vraiment rapide. En conséquence, je ne vais pas traiter toutes les "et si ... " et oui mais" que d'un véritable système d'exploitation, les besoins à traiter. Je vais juste décrire, à un haut niveau conceptuel, ce qui est un processus, ce que le planificateur, comment la minuterie de la file d'attente de travaux. Espérons que cela est utile.
Qu'est ce qu'un processus:
Pensez à un processus--parlons simplement sur les processus, et d'obtenir des fils plus tard, comme "la chose du système d'exploitation annexes". Un processus a une ID--pensez à un nombre entier, et vous pouvez penser que les entier comme un index dans une table contenant tout le contexte de ce processus.
Le contexte est le matériel de l'information-registres, la mémoire, l'unité de gestion de contenu, d'autres matériels de l'état, qui, lorsqu'il est chargé dans la machine, permettra le processus de "go". Il y a d'autres composants dans le contexte: les listes de fichiers ouverts, état des gestionnaires de signaux, et, le plus important ici, les choses le processus est en attente pour.
Les processus de passer beaucoup de temps à dormir (un.k.un. d'attente)
Un processus de passe le plus clair de son temps à attendre. Par exemple, un processus qui lit ou écrit sur le disque dur de passer beaucoup de temps à attendre pour que les données arrivent ou être reconnu pour être sur le disque. OS des gens utilisent les termes "en attente" et "sommeil" (et "bloqué") un peu de façon interchangeable--tous les sens que le processus est en attente de quelque chose à faire avant qu'il puisse continuer son petit bonhomme de chemin. Il est juste confus que le système d'exploitation de l'API sleep() qui arrive à utiliser l'OS sous-jacent des mécanismes pour dormir processus.
Les processus peuvent être en attente pour d'autres choses: les paquets réseau à arriver, la fenêtre de sélection des événements, ou un timer expire, par exemple.
Des processus et de la Planification
Les processus qui sont en attente sont dites non-exécutable. Ils ne vont pas sur la file d'attente d'exécution du système d'exploitation. Mais lorsque l'événement survient, le processus est en attente pour les, il provoque le système d'exploitation pour déplacer le processus de la non-exécutables à l'état exécutable. Dans le même temps, le système d'exploitation met le processus de la file d'attente d'exécution, qui n'est vraiment pas une file d'attente, il est plus d'une pile de tous les processus, le système d'exploitation de décider de le faire, pourrait exécuter.
La planification:
le système d'exploitation décide, à intervalles réguliers, les processus qui doit s'exécuter. L'algorithme par lequel le système d'exploitation décide de le faire est appelé, un peu sans surprise, l'algorithme d'ordonnancement. Algorithmes de planification de la gamme de morts-simple ("tout le monde apprend à fonctionner pendant 10 ms, et puis le gars à côté, sur la file d'attente arrive à exécuter") est beaucoup plus compliqué (en tenant compte de la priorité du processus, de la fréquence d'exécution, d'exécution les délais, inter-processus de dépendances, enchaînés les serrures et toutes sortes d'autres compliqué objet).
La Minuterie De La File D'Attente
Un ordinateur dispose d'une minuterie à l'intérieur. Il existe de nombreuses façons cela peut être mis en œuvre, mais la manière classique est appelée un minuteur périodique. Un minuteur périodique des tiques, à intervalle régulier--dans la plupart des systèmes d'exploitation d'aujourd'hui, je crois que ce taux est de 100 fois par seconde--100 Hz--toutes les 10 millisecondes. Je vais utiliser cette valeur dans ce qui suit, comme le béton, mais sachez que la plupart des systèmes d'exploitation en valeur leur sel peut être configuré avec les différentes espèces de tiques--et beaucoup de ne pas utiliser ce mécanisme et peut fournir beaucoup mieux minuterie de précision. Mais je m'égare.
Chaque tick entraîne une interruption du système d'exploitation.
Lorsque le système d'exploitation gère ce timer interrupt, il incrémente son idée de système de temps de 10 ms. Puis, il regarde la file d'attente du minuteur et décide des événements de cette file d'attente doivent être traitées.
La minuterie de la file d'attente vraiment est une file d'attente de "choses qui doivent être traitées", que nous appellerons des événements. Cette file d'attente est commandé par le temps de l'expiration, la plus proche des événements de la première.
Un "événement" peut être quelque chose comme, "processus d'éveil X", ou "aller à coup de pied d'I/O disque là-bas, car il peut-être coincée", ou "envoyer un paquet persistant sur que fibrechannel lien là-bas". Quel que soit le système d'exploitation a besoin de l'avoir fait.
Lorsque vous avez une file d'attente ordonnée de cette façon, il est facile de gérer la file d'attente. L'OS a tout simplement l'air à la tête de la file d'attente, et décrémente le "moment d'expiration" de l'événement, de 10 ms à chaque tick. Lorsque le délai d'expiration arrive à zéro, le système d'exploitation retire cet événement, et en fait ce qui est demandé.
Dans le cas d'un processus en mode veille, il fait tout simplement le processus de nouveau praticable.
Simple, hein?