0% ont trouvé ce document utile (0 vote)
9 vues36 pages

Chapitre 1

Ce document présente une introduction à la programmation système, en mettant l'accent sur la programmation en C sous Linux. Il aborde les concepts de systèmes d'exploitation, les services fournis, et les outils nécessaires comme le compilateur GCC et le système de construction 'make'. Des exemples pratiques et des fonctions de manipulation de chaînes de caractères sont également fournis.

Transféré par

mohamedamine.seboub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues36 pages

Chapitre 1

Ce document présente une introduction à la programmation système, en mettant l'accent sur la programmation en C sous Linux. Il aborde les concepts de systèmes d'exploitation, les services fournis, et les outils nécessaires comme le compilateur GCC et le système de construction 'make'. Des exemples pratiques et des fonctions de manipulation de chaînes de caractères sont également fournis.

Transféré par

mohamedamine.seboub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

“ 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

Vous aimerez peut-être aussi