Sur un système UNIX, les utilisateurs UNIX ont des droits limités, c'est à dire que certaines commandes leurs sont interdites et ils n'ont pas accès à certaines parties du système. Les administrateurs systèmes ont par contre tous les droits sur le système.
Généralement sur un système UNIX, on limite volontairement le nombre d'administrateur (appelé ROOT ou super utilisateur).
Par exemple si vous travaillez sur une appli du genre base de données, vous lancez une requête (commande dans le langage base de données) coûteuse en temps, pour patienter rien ne vous empêche de vous lancer un Doom de derrière les fagots. Vous vous retrouvez donc avec deux process lancés en même temps, c'est le système d'exploitation qui est chargé de faire en sorte que les deux process puissent utiliser les ressources de manière équitable et que le deuxième process lancé n'attende pas la terminaison du premier pour se lancer.
Le fait de pouvoir exécuter plusieurs process ou tâches en même temps, en parallèle, est appelé multitâches. UNIX est multitâches.
Tout programme qui s'exécute, ou process, a besoin de mémoire pour y stocker notamment les données qui manipulent. Malheureusement l'ordinateur dispose généralement d'une quantité de mémoire limitée et non extensible. UNIX doit donc faire en sorte que la mémoire soit bien partagée entre tous les process, un process ne doit pas s'accaparer toute la mémoire, sans quoi les autres process ne pourraient plus fonctionner.
La mémoire est vue comme une ressource matérielle, UNIX doit donc vérifier qu'aucun process accède à la mémoire directement ou ne se réserve une zone de la mémoire.
UNIX fournit, en outre, un mécanisme de protection des fichiers. Plusieurs utilisateurs peuvent travailler en même temps sur la même machine, c'est la notion de multi-utilisateurs. Chaque utilisateur du système dispose de ses fichiers, UNIX lui donne le moyen de protéger ses fichiers, et d'accorder le droit ou non à d'autres utilisateurs d'accéder à ses fichiers.
Applications | ----------------------------------------------------------- | Appels système UNIX | ----------------------------------------------------------- | | ------------------------------ --------------------------- | Gestion de processus | | Système de gestion de | | | | fichiers | ----------------------------- --------------------------- | | | --------------------------- | | driver périphérique | | --------------------------- | | ------------------------------------------------------------- | Contrôle matériel | ------------------------------------------------------------ | ------------------------------ | Matériel | ------------------------------Concrètement le système d'exploitation est lui aussi un ensemble de programme et de sous programmes regroupés dans ce qu'on appelle un noyau (kernel en anglais).
On a vu auparavant que les process ne pouvaient pas accéder directement aux ressources matériels, en fait les process passent par le noyau pour y accéder, pour cela ils disposent d'un ensemble de commandes appelées " appels système " UNIX .
Ces appels systèmes commandent deux composantes principales du noyau, le gestionnaire de processus et le système de gestion de fichiers. Le premier a pour rôle de faire en sorte que les process s'exécutent et accèdent à la mémoire de manière équitable, on le nomme aussi scheduler. Le deuxième a pour rôle la gestion du système de fichiers, notamment pour ce qui concerne les droits d'accès.
Ce sont ces deux derniers composants du noyau qui accèdent directement au matériel.
Il existe plusieurs types de shell, ils se différencient par la syntaxe et la richesse des commandes. Le plus commun est le Bourne-Shell, on trouve aussi le C-Shell qui s'apparente au langage de programmation C, le Korn Shell, le Posix Shell, et sous Linux le bash-shell.