“ Programmation Système
”
1- Introduction à la programmation système
Pr. Abdelhay HAQIQ (ahaqiq@[Link])
2
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Préparer l’environnement
Pr. Abdelhay HAQIQ ESI Programmation Système
3
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Préparer l’environnement
Pr. Abdelhay HAQIQ ESI Programmation Système
4
Système d’exploitation
Un système d’exploitation “SE” (operating system en anglais) est un logiciel
spécialisé qui sert principalement à gérer le lien entre les ressources
matérielles d’un ordinateur (RAM, CPU et périphériques E/S) et les
applications informatiques de l’utilisateur.
Pr. Abdelhay HAQIQ ESI Programmation Système
5
Services proposés par l’OS
Gestionnaire de ressources matérielles
cache la complexité du matériel
gère les conflits de requêtes d’accès aux ressources, permet un usage
équitable
gère les erreurs
empêche les usages impropres de la machine
Facilite l’utilisation de la machine
ensemble de bibliothèques standard (fenêtrage par ex.)
Pr. Abdelhay HAQIQ ESI Programmation Système
6
Quelles ressources, quels services?
Temps CPU:
Ordonnancement des tâches sur le processeur (scheduling)
Mémoire:
Allocation
Protection mémoire
Entrées/sorties:
Système de fichiers et droits,
Gestion des diverses cartes et protocoles réseau,
Fenêtrage
Consommation d’énergie: réglage fréquence, . . .
Pr. Abdelhay HAQIQ ESI Programmation Système
7
Système d’exploitation
Lorsque l’on dispose d’un système d’exploitation, ce dernier permet de distinguer
deux types de programmes, à savoir:
Les programmes d’application des utilisateurs. Ces sont réalisés lors de la
programmation dite “classique”.
Exemple: les applications développées en langage C.
Les programmes systèmes qui permettent le fonctionnement de la machine
(ordinateur, tablette,...).
Exemples: L’accès aux fichiers, la gestion des processus, les entrées/sorties,
la gestion de la mémoire, la programmation réseau.
N.B. le langage C a été créé spécialement pour la programmation système, plus
précisément pour le développement de systèmes d’exploitation Unix.
Pr. Abdelhay HAQIQ ESI Programmation Système
8
Pourquoi la programmation système ?
Les principales applications :
La création de plusieurs processus
Tout ce qui a trait à l'accès de ressources de manière concurrente par plusieurs processus
s'exécutant sur le même processeur.
Partage de données entre plusieurs processus (un exemple classique est le
producteur/consommateur)
Partage de ressources entre plusieurs processus, avec une possible exclusion mutuelle.
...
Les communications entre processus (échanger des données qui ne sont pas partagées)
La synchronisation entre processus (ne pas lire des données qui ne sont pas complètement
écrite)
Pr. Abdelhay HAQIQ ESI Programmation Système
9
Composants d’un système d’exploitation
Pr. Abdelhay HAQIQ ESI Programmation Système
10
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Includes importants de la programmation système
❑ Compiler gcc
❑ Automatiser la compilation avec make
❑ Arguments d’un programme en C
Pr. Abdelhay HAQIQ ESI Programmation Système
11
Includes importants de la programmation système
La bibliothèque standard C de la norme ISO est minimaliste (24 includes
standards)
fonctions mathématiques,
manipulation de chaînes de caractères,
conversion de types,
entrée/sortie maniant les fichiers et les terminaux
Les fonctions habituellement classiques dans les autres langages (et donc ceux
de la prog système) et ne sont donc par des standards de la norme ISO !
Pr. Abdelhay HAQIQ ESI Programmation Système
12
Norme POSIX
Pour remédier à cela, la norme POSIX a été créée.
POSIX
famille de standards IEEE 1003 (début 1988)
POSIX : Portable Operating System Interface, X pour Unix
Interfaces utilisateurs, interfaces logicielle
Librairie POSIX C : donne les headers pour les fonctionnalités manquantes
dans l'ISO/ANSI
18 fichiers d'includes qui viennent compléter les fonctions systèmes déjà
ouertes.
Pr. Abdelhay HAQIQ ESI Programmation Système
13
Les includes POSIX
Pr. Abdelhay HAQIQ ESI Programmation Système
14
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Includes importants de la programmation système
❑ Compiler gcc
❑ Automatiser la compilation avec make
❑ Arguments d’un programme en C
Pr. Abdelhay HAQIQ ESI Programmation Système
15
GCC
Sous Linux, le compilateur de C est GCC. Il est installé de base sur plusieurs
distributions
GCC(GNU Compiler Collection) est le compilateur créé par le projet GNU. Il
s'agit d'une collection de logiciels libres intégrés capables de compiler divers
langages de programmation, dont C, C++, Objective-C, Java, Ada et Fortran.
GCC est utilisé pour le développement de la plupart des logiciels libres. Le
noyau Linux dépend notamment étroitement des fonctionnalités de GCC.
Pr. Abdelhay HAQIQ ESI Programmation Système
16
GCC
Le gcc effectue les tâches suivantes à partir d’un fichier «.c»
le préprocesseur (the preprocessing): nommé cpp, gère toutes les
directives (#include, #define, #ifdef, ...) du code source.
le compilateur (the compiling): traduit le code source en code
assembleur, un langage très proche du langage machine.
l’assembleur (the assembling): traduit le code assembleur en code
(langage) machine. On obtient alors le fichier objet.
l’éditeur de liens (the linking): assure le regroupement des fichiers objet et
des bibliothèques pour fournir enfin le fichier exécutable
Pr. Abdelhay HAQIQ ESI Programmation Système
17
GCC
Pratiquement, par exemple à partir d’un fichier «programme.c», la
compilation consiste à effectuer les étapes suivantes:
Passer le préprocesseur: générer le fichier «programme.i».
Générer un fichier assembleur «programme.s».
Faire l’assemblage de ce fichier pour obtenir «programme.o».
Faire l’édition de liens avec les bibliothèques utiles.
Pr. Abdelhay HAQIQ ESI Programmation Système
$ man gcc
18
GCC
Pr. Abdelhay HAQIQ ESI
ESI Programmation Système
19
GCC
Les options du compilateur gcc sont:
o : écrit la sortie de construction dans le fichier de sortie
c : compile les fichiers source en fichiers objet sans liaison, et crée un
fichier .o
Wall : active tous les messages d'avertissement du compilateur
g : génère les informations pour les debuggers
Pr. Abdelhay HAQIQ ESI Programmation Système
20
GCC
$ gcc -c -Wall main.c
main.c
#include <stdio.h>
int main()
$ gcc -o main main.o {
printf("Mon premier programme en C\n");
return 0;
}
OU $ gcc -o main main.c
$ ./main
Pr. Abdelhay HAQIQ ESI Programmation Système
21
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Includes importants de la programmation système
❑ Compiler gcc
❑ Automatiser la compilation avec make
❑ Arguments d’un programme en C
Pr. Abdelhay HAQIQ ESI Programmation Système
22
Automatiser la compilation avec make
Make : maintient la cohérence entre un programme exécutable et les fichiers source
permettant de le produire.
basé sur les dates de dernière modification de fichier nécessite un script contenant
des règles
chaque règle indique le moyen de construire une cible particulière à partir des
ressources dont il a besoin
si une cible est moins récente que une de ses cibles, elle est automatiquement
reconstruite.
Exécution : make -f [ fichier_script] [cible]
Si l'option -f est absente, le fichier du répertoire courant appelé Makefile ou makefile
est utilisé.
Si cible est absente, la première cible est considérée
Pr. Abdelhay HAQIQ ESI Programmation Système
23
makefile
Le makefile est un ensemble de règles qui décrivent les relations entre les
fichiers sources et les commandes nécessaires à la compilation.
Il contient aussi des règles permettant d'exécuter certaines actions utiles
comme par exemple nettoyer le répertoire, ou imprimer les sources.
Une règle rule a la forme suivante :
cible ... : dependance ...
action
...
...
Pr. Abdelhay HAQIQ ESI Programmation Système
24
makefile
Une cible (target) est en général le nom d'un fichier à générer. Ce peut être
aussi le nom d'une action à exécuter.
Il y a en général une seule cible par règle.
Une dépendance (dependency) est un fichier utilisé pour générer la cible. Plus
généralement les commandes correspondant à une cible sont exécutées
lorsque au moins une des dépendances de la cible a été modifiée depuis le
dernier appel de make. Une cible a en général plusieurs dépendances.
Une action (command) est une ligne de commande Unix qui sera exécutée par
make. Attention, dans la syntaxe du makefile, une action est toujours précédée
d'une tabulation
Pr. Abdelhay HAQIQ ESI Programmation Système
25
Exemple Makefile
$ vi makefile
$ make
$ ./mainp
Tutoriel : [Link]
Pr. Abdelhay HAQIQ ESI Programmation Système
26
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Includes importants de la programmation système
❑ Compiler gcc
❑ Automatiser la compilation avec make
❑ Arguments d’un programme en C
Pr. Abdelhay HAQIQ ESI Programmation Système
27
atoi, sprinf et sscanf
Convertir un nombre donné sous forme #include <stdio.h>
#include <stdlib.h>
de chaîne de caractère dont les int main()
caractères sont des chiffres. {
int a;
char s[50];
La fonction atoi permet de réaliser la
printf("Saisissez des chiffres : ");
conversion d’une chaîne vers un int scanf("%s", s);
a = atoi(s);
printf("Vous avez saisi : %d\n", a);
return 0;
}
Pr. Abdelhay HAQIQ ESI Programmation Système
28
atoi, sprinf et sscanf
la fonction sscanf permet de #include <stdio.h>
#include <stdlib.h>
lire des données formatées
int main()
dans une chaîne de {
float x;
caractère (de même que
char s[50];
scanf permet de lire des printf("Saisissez des chiffres (avec un point au milieu) : ");
/* saisie d'une chaîne de caractères */
données formatées au
scanf("%s", s);
clavier ou fscanf dans un /* lecture dans la chaîne */
fichier texte). sscanf(s, "%f", &x);
printf("Vous avez saisi : %f\n", x);
return 0;
}
Pr. Abdelhay HAQIQ ESI Programmation Système
29
atoi, sprinf et sscanf
#include <stdio.h>
#include <stdlib.h>
la fonction sprintf permet d’écrire void AfficheMessage(char *message)
int main()
des données formatées dans une { {
/* puts : permet d'écrire une chaîne
float x;
chaîne de caractères (de même int a;
de caractères sur un flux donné */
puts(message);
que printf permet d’écrire dans la char *s;
}
console ou fprintf dans un fichier printf("Saisissez un entier et un réel : ");
scanf("%d %f", &a, &x);
texte). sprintf(s, "Vous avez tapé : a = %d x = %f", a, x);
AfficheMessage(s);
return 0;
}
Pr. Abdelhay HAQIQ ESI Programmation Système
30
Arguments du main
La fonction main d’un programme peut prendre des arguments en ligne de
commande.
Pour récupérer les arguments dans le programme C, on utilise les paramètres argc
et argv du main.
L’entier argc donne le nombre d’arguments rentrés dans la ligne de commande
plus 1, et le paramètre argv est un tableau de chaînes de caractères qui contient
comme éléments :
Le premier élément argv[0] est une chaîne qui contient le nom du fichier
executable du programme ;
Les éléments suivants argv[1], argv[2], etc... sont des chaînes de caractères qui
contiennent les arguments passés en ligne de commande.
Le prototype de la fonction main est : int main(int argc, char**argv);
Pr. Abdelhay HAQIQ ESI Programmation Système
Exemple : Voici un programme longueurs, qui prend
en argument des mots, et affiche la longueur de ces 31
mots
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
int i;
printf("Vous avez entré %d mots\n", argc - 1);
puts("Leurs longueurs sont :");
for (i = 1; i < argc; i++)
{
GCC
printf("%s : %ld\n", argv[i], strlen(argv[i]));
}
return 0;
}
$ gcc -o argmain argmain.c
$ ./argmain salut tout le monde
Pr. Abdelhay HAQIQ ESI
ESI Programmation Système
32
Plan
❑ Introduction à la programmation système
❑ Programmer C sous linux
❑ Préparer l’environnement
Pr. Abdelhay HAQIQ ESI Programmation Système
33
Configurer la carte réseau de VirtualBox
Pr. Abdelhay HAQIQ ESI
Programmation Système
34
Configurer la le SSH avec MobaXterm
Pr. Abdelhay HAQIQ ESI
Programmation Système
35
Accéder à la session SSH
Pr. Abdelhay HAQIQ ESI
Programmation Système
36
Basculer vers la console pour libérer la
mémoire init 3 (init 5 pour revenir à GNU)
$ sudo init 3
Pr. Abdelhay HAQIQ ESI
Programmation Système