back-alt
rechercher

unix_parts

Les systèmes d’exploitation et leur noyau (kernel)

 

Plan

1            Introduction. 2

2            Définitions. 2

2.1               Une définition. 3

2.2               Organisation d’un système d’exploitation. 4

3            L’historique des systèmes d'exploitation. 5

3.1               1re génération (jusqu’à 1955) 6

3.2               2e génération (1955-1965) : transistors et traitement par lot 7

3.3               3e génération (1965-1980) : circuits intégrés. 9

3.4               4e génération (1980-2000) : explosion de la micro-informatique. 9

3.5               Génération actuelle. 10

4            Les grands systèmes d’exploitation. 11

4.1               Unix. 11

4.2               LINUX, le petit grand frère de UNIX.. 11

4.3               Mac OS X.. 12

4.4               Windows : la vache à lait de Microsoft 12

5            Les commandes de base sous Linux. 13

5.1               Pour se connecter sur notre serveur Linux : ssh.. 14

5.2               Le shell d’ariel : bash.. 14

5.3               Le système de fichiers. 14

6            Exercices. 15

6.1               Introduction et historique. 15

6.2               Shell Linux. 15

6.3               Shell Windows. 17

6.4               Compilation d’un programme C.. 18

7            Travail hors cours. 18

8            Pour en savoir davantage. 19

 

1      Introduction

Tout au long de la session, nous apprendrons comment fonctionnent les systèmes d'exploitation. Mais, avant d’approfondir nos connaissances de Linux et Windows, deux des plus fascinants systèmes d’exploitation, nous allons définir ce qu’est un système d’exploitation et en voir les composantes.

2      Définitions

Qu’est-ce qu’un système d’exploitation (operating system – OS) ?

Vous en connaissez déjà plusieurs.

Leopard_Desktop

Apple Mac OS X Leopard

 

750px-Windows_7

Microsoft Windows 7

800px-Ubuntu_Linux_9.04_screenshot

Linux – Ubuntu

215px-Playstation3vector.svg

PlayStation 3 software version 2.80

 

Et il y a maintenant la guerre entre Microsoft et Google à propos de leur OS respectif...

2.1    Une définition

Un système d’exploitation est un programme (logiciel) qui joue un rôle d’interface entre le matériel et l’utilisateur.

Un système d'exploitation permet :

  • de présenter une machine virtuelle ;
  • de partager des ressources.

Être une machine virtuelle signifie transformer un assemblage de chips et de circuits en un appareil plus utilisable. C'est-à-dire de travailler avec un outil moderne qui offre une abstraction simple au niveau des entrées/sorties, de l'utilisation de la mémoire, de la gestion des fichiers, de la protection et du contrôle des erreurs, de l'interaction des programmes entre eux et de leur contrôle.

En deux mots : d'éviter au programmeur de connaître les détails électroniques de tel ou tels chips et de permettre à l'utilisateur de sauvegarder ses fichiers sans se soucier du type de modulation de fréquence utilisée pour stocker les informations.

L'autre fonction première du système d'exploitation, c'est le partage des ressources. Il se fait entre les programmes appelés plus justement les processus. Ce rôle de policier du système d'exploitation permet d'éviter les conflits d'utilisation de la mémoire, des périphériques d'entrées/sorties, des interfaces réseau... etc. On peut facilement imaginer ce qui arriverait si trois programmes essayaient d'imprimer en même temps sans qu'un certain ordre ne soit respecté. Ce travail d'alternance assuré par le système d'exploitation permet de mettre de l'ordre dans un chaos potentiel.

De plus, lorsque l'ordinateur est utilisé par plusieurs usagers (presque tout le temps), le partage de la mémoire et surtout sa protection demeure une priorité absolue. En tout temps, un bon système d'exploitation connaît l'utilisateur d'une ressource, ses droits d'accès, son niveau de priorité.

2.2    Organisation d’un système d’exploitation

http://www.commentcamarche.net/systemes/images/se.gif

Les différentes couches logicielles qui constituent un ordinateur

 

Le système d'exploitation est le programme fondamental des logiciels système: il contrôle les ressources de l’ordinateur et fournit la base essentielle sur laquelle sont échafaudés les logiciels application.  Le système d'exploitation opère sur un ordinateur constitué d'un ou plusieurs processeurs, d'une mémoire principale, d'horloges, de disques, de périphériques E/S, d'interfaces de connexion à des réseaux... etc.  C'est la complexité toujours croissante du matériel qui a entraîné au cours des années, un développement rapide et spectaculaire des systèmes d'exploitation.  Aujourd’hui, on parle de virtualité à tous égards ce qui permet aux usagers et aux programmeurs (de plus en plus) d'utiliser l'ordinateur avec un niveau d’abstraction élevé.

Tous les systèmes d’exploitation sont donc segmentés en couches pour permettre un meilleur contrôle de l’ensemble de l'ordinateur. Examinons les trois premières sections du lien suivant.

unix_parts

Les parties d’un système Unix.

On retient notamment la présence de deux éléments :

  • Le noyau (en anglais kernel) représentant les fonctions fondamentales du système d'exploitation telles que la gestion de la mémoire, des processus, des fichiers, des entrées-sorties principales, et des fonctionnalités de communication.
  • L'interpréteur de commande (en anglais shell, traduisez «coquille» par opposition au noyau) permettant la communication avec le système d'exploitation par l'intermédiaire d'un langage de commandes, afin de permettre à l'utilisateur de piloter les périphériques en ignorant tout des caractéristiques du matériel qu'il utilise, de la gestion des adresses physiques, etc. (plus là-dessus aux prochains cours).

3      L’historique des systèmes d'exploitation

L’historique des systèmes d'exploitation est intimement lié à l'évolution des systèmes. On peut toutefois le diviser en cinq générations.

3.1    1re génération (jusqu’à 1955)

http://histoire.info.free.fr/images/eniac6.jpeg

  • Vers le milieu des années 1940, les premières machines à calculer sont construites au moyen de tubes électroniques (tubes à vides);
  • Ces machines énormes remplissaient des salles et étaient moins rapides qu’une calculatrice moderne;
  • Toute la préparation se faisait manuellement;
  • Les E/S étaient limitées;
  • Le programmeur opère avec la machine par interaction directe (beaucoup de manipulation et beaucoup de lourdeur);
  • Concepteur = constructeur = programmeur = opérateur;
  • Un programme dispose toujours de toute la mémoire disponible;

3.2    2e génération (1955-1965) : transistors et traitement par lot

C’est le début des systèmes d’exploitation en tant que tels.

  • Apparition des cartes perforées;
  • Séparation des rôles : le programmeur n’est pas l’opérateur;
  • Enchaînement automatique des travaux (« jobs »), c’est le traitement par lots (« batch processing »);
  • Sous-programmes d'E/S (chargement et déchargement des cartes);
  • Apparition des assembleurs;
  • Le système d'exploitation gère la mémoire, les processus et les E/S;
  • Gestion par limitation de temps;
  • Introduction de la notion d’ordonnancement : dans quel ordre sont effectuées les jobs;
  • Lors des E/S, le processeur est inactif;

istockphoto_2831963_punch_card

http://histoire.info.free.fr/images/univac5.jpeg

3.3    3e génération (1965-1980) : circuits intégrés

ibm_360_500px

  • Apparition des circuits intégrés;
  • Apparition des disques magnétiques;
  • Notion de familles d’ordinateurs compatibles (IBM System/360);
  • Multiprogrammation : pendant qu’un processus effectue ses E/S, le processeur est inactif, il peut donc travailler sur un autre processus;
  • Multiprogrammation rendue possible par le « spooling », qui met à la disposition du CPU un ensemble de jobs (pool) prêtes à être exécutées;

3.4    4e génération (1980-2000) : explosion de la micro-informatique

allen-gates

  • Apparition des micro-ordinateurs grand public (IBM PC, p.ex.), de MS-DOS, des consoles de jeu;
  • Motorola 68000;
  • Internet;
  • Applications multimédia;
  • Maturation des systèmes d’exploitation vers ceux que l’on connaît aujourd’hui;

3.5    Génération actuelle

gmail

3.5.1    Réseaux et machines individuelles

  • appareils personnels remplacent les terminaux;
  • interconnexion de systèmes hétérogènes;
  • développement des réseaux locaux haute performance et Internet;
  • partage des ressources et des fichiers entre machines de divers types;

3.5.2    Systèmes répartis

  • plusieurs processeurs sur un même appareil;
  • plusieurs processeurs disponibles sur des appareils différents pour un même programme;
  • plusieurs « cores » sur un même processeur;
  • systèmes de client/serveur;
  • connectivité inter-serveurs;

4      Les grands systèmes d’exploitation

4.1    Unix

180px-Pdp7-oslo-2005

Unix a été développé initialement en 1969 par un groupe d’employés d’AT&T (incluant les créateurs du langage C). Ce système d’exploitation rudimentaire mais bien fait tournait sur le PDP-7 (ci-contre).

Unix est l’ancêtre de bien des systèmes d’exploitation, notamment Linux. On notera BSD, Solaris, AIX.

Contient une interface par ligne de commande.

 

Ci-contre : Unix et le bureau X-Windows vers le début des années 1990.

720px-X-Window-System

4.2    LINUX, le petit grand frère de UNIX

http://www.colvir.net/prof/yves.bergeron/infc32/image51.gif

La naissance des Linux, un descendant d’Unix, est fascinante : un « hobby » d’un étudiant finlandais (Linus Torvalds) qui cherche à porter le système d’exploitation Unix sur son PC Intel 386. Ce hobby débouche sur un des systèmes d’exploitation les plus importants de l’histoire, première version en 1991. Lisez les débuts ici.

 From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
 Newsgroups: comp.os.minix
 Subject: What would you like to see most in minix?
 Summary: small poll for my new operating system
 Message-ID:
 Date: 25 Aug 91 20:57:08 GMT
 Organization: University of Helsinki
 
 
 Hello everybody out there using minix -
 
 I'm doing a (free) operating system (just a hobby, won't be big and
 professional like gnu) for 386(486) AT clones.  This has been brewing
 since april, and is starting to get ready.  I'd like any feedback on
 things people like/dislike in minix, as my OS resembles it somewhat
 (same physical layout of the file-system (due to practical reasons)
 among other things).
 
 I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
 This implies that I'll get something practical within a few months, and
 I'd like to know what features most people would want.  Any suggestions
 are welcome, but I won't promise I'll implement them :-)

Source : l’archive Usenet de Google

 

GNU est un projet de création de logiciels libres de droits, souvent associé à Linux.

Une distribution Linux (ou distro), est un ensemble cohérent de logiciels (souvent du GNU) assemblé autour d’un cœur Linux. Il existe plusieurs distributions, dont les principales sont celles-ci. Nous utiliserons surtout Debian et Knoppix au Collège. Si vous le voulez, vous pouvez vous installer Ubuntu à la maison, la distro à la mode ces temps-ci.

4.3    Mac OS X

OSXLeopard

Le système d’exploitation des ordinateurs Macintosh d’Apple est Mac OS X. Certaines parties de FreeBSD (une saveur d’Unix) ont été réutilisées par Apple dans ce système d’exploitation.

4.4    Windows : la vache à lait de Microsoft

L'histoire de Windows est tout aussi fascinante, quoiqu’un peu plus mercantile.

800px-Windows_Family_Tree

5      Les commandes de base sous Linux

Le premier concept important à garder en mémoire avant de travailler avec Linux est qu'il s'agit d'un système multiutilisateur. L'accès à la machine Linux doit donc être contrôlé par un compte utilisateur (login, mot de passe) créé par l'administrateur du système.

Chaque usager est connu dans le système par son nom d'utilisateur et son identificateur unique (un nombre entier) qui lui sont attribués par l'administrateur du système.

Il est également affecté à un groupe (associé lui-même à un identificateur de groupe unique). Il existe un utilisateur particulier qui dispose de tous les droits : root ou superutilisateur. Le groupe sert généralement à grouper des utilisateurs qui ont un centre d'intérêt commun (projet, facturation) et à en gérer efficacement tous les membres.

5.1    Pour se connecter sur notre serveur Linux : ssh

ssh est le protocole permettant de se connecter sur une machine distante en tant qu'utilisateur. ssh suppose que la machine sur laquelle vous vous connectez est un serveur. La machine depuis laquelle vous vous connectez est un client ssh (p.ex. Putty). Pour bien comprendre l'utilisation de SSH et du branchement aux serveurs Linux, Unix ou Mac, utilisez le lien suivant.

5.2     Le shell d’ariel : bash

Sous ariel, votre shell (« coquille ») s’appelle bash et vous permet de piloter Linux via son interface de ligne de commande (CLI : command-line interface).

Par exemple, si vous entrez la très philosophique commande who am i, vous aurez une description de l’utilisateur que vous êtes.

Vous avez déjà vu les commandes sous Linux, voici un rappel :

MCj04125080000[1]

En cas de problème avec une commande, faites man nom_commande, par exemple man ls. Faites q pour sortir.

Si vous cherchez une commande contenant un mot clé, faites man -k mot_clef. Ceci listera les commandes appropriées.

5.3    Le système de fichiers

Un système multiutilisateur se doit de ranger ses fichiers correctement pour éviter un désastre.

Sous LINUX, ils sont organisés en une structure hiérarchique appelée arborescence, et rangés dans des répertoires.

Quelques recommandations pour organiser vos répertoires

L’arborescence des fichiers sous Linux

Droit d'accès aux fichiers

Vous vous êtes égarés dans les répertoires? Utilisez alors la commande pwd qui affichera le nom du répertoire.

La commande who permet de connaître les différentes personnes qui sont connectées au système.

Où suis-je ? Qui suis-je ?

6      Exercices

Aidez-vous de ces notes et de vos recherches sur le Web pour répondre aux questions suivantes.

Gardez la trace de votre travail et de vos réponses..

6.1    Introduction et historique

1)      Dans un système d’exploitation multiutilisateur, plusieurs graves problèmes de sécurité peuvent survenir. Donnez un exemple de ce genre de problème et une solution possible.

2)      Dans les systèmes d’exploitation, on retrouve deux modes d’utilisation du processeur : le mode utilisateur et le mode privilégié. En utilisant cette page, répondez aux questions suivantes :

a)      Comment appelle-t-on ces modes en anglais ?

b)      Quelle est la principale différence entre le fonctionnement dans les deux modes ?

c)      Le noyau du SE tourne dans quel mode, à votre avis ?

3)      Un ami vous demande s’il est possible d’installer un autre SE sur sa PlayStation 3.

a)      Quel est le nom d’un SE qui pourrait répondre à sa question ?

b)      Retracer les ancêtres de ce SE le plus loin que vous le pouvez dans le temps.

 3 bis) Quels sont les éléments révolutionnaires du COCO (pour l’époque !) qu'on retrouve encore dans les ordinateurs et les consoles de jeux d'aujourd'hui ?   (ajout pour le cours de vendredi)
http://fr.wikipedia.org/wiki/Ordinateur_Couleur

6.2    Shell Linux

4)      Branchez-vous sur le serveur ariel à l’aide de putty (déjà installé au collège) avec votre numéro de compte et répondez aux questions suivantes :
Astuce : la flèche vers le haut vous permet de rappeler les commandes que vous avez tapées plus tôt.

a)      Affichez les utilisateurs connectés en utilisant les commandes who, w et finger.

b)      À l’aide de man, trouvez la commande qui peut vous donner le uptime de ariel (le temps depuis qu’on l’a redémarré la dernière fois).

c)      Affichez le répertoire courant.

d)      Dans votre répertoire « home » (accessible en faisant cd), créez un répertoire cours, et un sous-répertoire c32 à l’intérieur de ce répertoire. Ajoutez un répertoire cours1 à l’intérieur de c32. C’est ici que nous créerons nos fichiers d’exercice aujourd’hui.

e)      Déplacez-vous dans ce répertoire. Créez-y un répertoire trash et détruisez-le ensuite.

f)        Déplacez-vous dans le répertoire /usr/bin et listez-en le contenu. Trouvez les options de ls pour lister les fichiers en ordre lexicographique inverse.

g)      Listez tous les fichiers dans /usr/bin commençant par t et se terminant par i.

h)      Placez-vous dans votre répertoire cours/c32/cours1 sur votre compte et créez-y un petit fichier texte appelé test avec le programme nano. Copiez-y toutes les questions de cette question 4). Sauvegardez votre fichier.

i)        Comptez le nombre de lignes du fichier avec l’utilitaire approprié.

j)        Copiez votre fichier test sous le nom test2.

k)      Renommez test2 en test3. Utilisez mv pour ceci.

l)        Détruisez (attention) le fichier test3.

m)    Toujours à l’aide de man, trouvez comment créer un fichier zip appelé test.zip qui contiendra les fichiers test et test2.

n)      Détruisez les fichiers test et test2. Êtes-vous capable de restaurer vos fichiers test et test2 en dézippant votre fichier test.zip ?

o)      Toujours dans le même répertoire, faites ls -l et observez les droits des fichiers et des répertoires. Ils sont classés dans l’ordre {utilisateur, groupe, autres}, r étant le droit de lecture, w le droit d'écriture et x celui d’exécution.

p)      Ajoutez à votre groupe le droit de lecture du fichier test avec la commande chmod (voir la référence plus haut).

q)      Restaurez les anciens droits d’accès.

r)       Avec la commande cat, more ou less voyez le contenu du fichier /usr/include/utime.h.

s)       Pour quitter un terminal, faites simplement exit.

6.3    Shell Windows

5)      Windows a également son shell (bien que moins élaboré). Ouvrez une fenêtre d’invite de commande sous Windows et expérimentez quelques commandes « caractères » Windows à partir de la référence sur le site de Microsoft ou de celle-ci. Sur la plupart des stations Windows XP, vous avez également accès à cette référence avec l’aide en ligne (dans le fichier C:\WINDOWS\Help\ntcmds.chm, choisissez « Référence de A à Z »).

a)      À l'aide de la console, copiez un fichier de votre bureau vers le répertoire C:\WINDOWS\Temp.

b)      Utilisez les commandes suivantes pour obtenir les données fondamentales de la réseautique de votre poste :  ipconfig /all,  netstat -nao,  netstat -nat,  net users,  net share,  net file,  net localgroup.  Quelle est l’utilité de ces petites commandes ?

c)      Faites une recherche vous permettant de lister toutes les options des commandes start et ping. Essayez-les !

 

6.4    Compilation d’un programme C

6)      Dans notre cours, nous allons utiliser le langage C pour créer des programmes qui exploitent les services offerts par les kernel de Windows et Linux. Utilisez le code source suivant, éditez-le et compilez-le sous linux et sous Windows pour vous rafraîchir la mémoire. Quelques rappels sur le C et sa compilation sous Linux.

#include <windows.h>
#include <stdio.h>
#include <errno.h>
#define BUF_SIZE 256
 
int main (int argc, char *argv [])
{
        FILE *in_file, *out_file;
        char rec [BUF_SIZE];
        size_t bytes_in, bytes_out;
 
        if (argc != 3) {
                printf ("Usage: cp fichier1 fichier2\n");
                return 1;
        }
        in_file = fopen (argv [1], "rb");
 
        if (in_file == NULL) {
                perror (argv [1]);
                return 2;
        }
        out_file = fopen (argv [2], "wb");
 
        if (out_file == NULL) {
                perror (argv [2]);
                return 3;
        }
 
        while ((bytes_in = fread (rec, 1, BUF_SIZE, in_file)) > 0) {
                bytes_out = fwrite (rec, 1, bytes_in, out_file);
                if (bytes_out != bytes_in) {
                        perror ("Erreur fatale d'ecriture.");
                        return 4;
                }
        }
        fclose (in_file);
        fclose (out_file);
        return 0;
}
 

7      Travail hors cours

Complétez les exercices si vous n’avez pas eu le temps de les terminer.

Les lectures obligatoires guident votre étude pour ce cours. Lisez

  • Les notes précédentes
  • Les trois premières sections du lien suivant.
  • Lisez les débuts de Linux ici.

La maîtrise des outils de la ligne de commande est essentielle pour devenir un bon informaticien. Connaissez les commandes que nous avons vues ici et celles que vous avez déjà étudiées.


Télécharger un logiciel SSH pour la maison

8      Pour en savoir davantage

Linux en français

Les HOWTOs

Les MAN

Les MAN français

Les bugs par lignes de code

 

2135912790_ec2c58b465

 

Dernière mise à jour le 9 septembre 2009 à 23h08 par Fabrizio Gotti