Qu'est-ce qu'un kernel?

J'apprends Unix du livre Unix Architecture de Maurice J Bach. Donc, si ma question semble trop stupide, veuillez en tenir count. J'ai lu quelques questions connexes mais j'aimerais une explication plus simple, avec un exemple.

Ma confusion est avec le concept de kernel. Qu'est-ce qu'un kernel? Je comprends que c'est le operating system et c'est un process.

Mais quand mon professeur enseigne qu'il dit un appel système (), il en résulte un process allant du mode user au mode kernel.

Que se passe-t-il réellement dans un appel système? Le process user se met-il en veille et le operating system l'exécute-t-il au nom du process user et renvoie-t-il la valeur au process user ou le process user s'exécute-t-il en mode kernel? Si ce dernier est correct, qu'est-ce que cela signifie?

Qu'est-ce qu'un kernel?

Dans le sens de votre question, il s'agit d'un seul grand programme qui fonctionne à un niveau de privilège spécial sur le processeur. Il fournit toutes les fonctionnalités du operating system de base: multitâche , IPC , filesystems , etc. C'est également le process qui exécute les pilotes de périphériques , qui à leur tour contrôlent le matériel de l'ordinateur au nom du kernel.

Je comprends que c'est le operating system

En fait non. Un operating system est beaucoup plus que le kernel .

Même à l'époque où Maurice Bach écrivait son livre, l'OS comprenait des coquillages , des compilateurs , des utilitaires , des éditeurs de text , etc.

Au fil du time, le terme OS est venu à inclure encore plus de choses, comme le sous-système GUI .

C'est une décision personnelle où vous tracez la ligne entre le operating system et les programmes user normaux. La plupart des gens seraient d'accord qu'un processeur de text GUI ne fait pas partie du operating system même s'il a été installé avec le operating system proprement dit. Mais, beaucoup seraient également d'accord que l'éditeur de text brut fourni avec le operating system fait partie du operating system. Beaucoup dans ce camp seraient également d'accord pour dire que les processeurs de balisage fournis avec OS – troff, TeX, etc. – sont également considérés comme des équipements OS ces jours-ci. Mais combiner un éditeur de text et un processeur de balisage, et vous avez quelque chose d'indiscernable d'un traitement de text à certains égards.

Tracer une ligne dure que tout le monde peut s'entendre dans l'impossible.

c'est un process.

Non, pas vraiment.

Une architecture à micro-kernel est aussi proche que possible de la vérité. Même alors, le kernel est une collection de process, dont l'un est spécial en ce sens qu'il est capable d'exécuter tous les autres process. Donc même dans ce cas, il y a toujours un kernel – un petit kernel – qui ne peut pas être considéré comme un process normal.

Dans le cas d'un kernel monolithique , le kernel est dans une position spéciale, et il exécute tous les process.

Que se passe-t-il réellement dans un appel système?

Lis le rest du livre de Bach.

Vous remarquerez que cette réponse comporte de nombreux liens Wikipédia, et la plupart des articles auxquels je lier sont longs et compliqués, avec beaucoup plus de liens qui partent. C'est parce que vous nous avez essentiellement demandé de passer d'un sujet très compliqué à une réponse simple. Il n'y a pas de réponse simple, alors j'ai essayé de fournir un guide des réponses, pluriel.

Le process user se met-il en veille et le operating system l'exécute au nom du process user et renvoie la valeur au process user …?

Dans un kernel monolithique classique tel que discuté par Bach, oui.

Les systèmes modernes fuzz cette image simple, cependant.

Tout d'abord, le "operating system" n'exécute pas l'appel système, le kernel le fait. Je ne suis pas seulement pédant. Étant donné que l'énorme masse d'un operating system moderne est composé de plusieurs programmes d'espace user et que les systèmes d'exploitation modernes sont multitâches, vous ne pouvez pas dire que le operating system s'arrête et exécute l'appel système. Le operating system peut faire beaucoup de choses en même time, dont l'un gère l'appel système d'un seul programme user.

Mais en second lieu, et cela est beaucoup plus important, les kernelx d'OS modernes ne sont plus des programmes à tâche unique qui traitent un appel système à la fois. Un OS peut être au milieu de nombreux appels système à la fois. Un programme d'espace user à tâche unique qui effectue un appel système peut percevoir que le monde s'arrête jusqu'à la fin de l'appel système, mais le kernel peut faire beaucoup d'autres choses pendant que cet appel système se poursuit.

Même dans le cas d'un kernel monotâche à l'ancienne, vous disposiez de choses comme les parties supérieure et inférieure du pilote, ce qui permettait au kernel de fonctionner et de gérer des choses comme les E / S sur disque afin de fournir un service de bas niveau à un appel système relativement haut niveau comme open(2) .

ou le process user s'exécute en mode kernel?

Vous pouvez le regarder de cette façon, mais ce n'est que de la même façon que mon browser Web et Stack Exchange sont le même programme parce qu'ils interagissent pour offrir une expérience unique et cohérente.