Vous êtes sur la page 1sur 2

IUT De Villetaneuse 1999/2000 Cours 4 Appels systme

Cours systme 1re Anne

Qu'est-ce qu'un appel systme ? Dfinition : un fichier de bibliothque est une archive contenant un ensemble de fichiers objet qui peuvent tre extraits de l'archive pour tre lis un programme. Donc le code d'une fonction de bibliothque est dans l'excutable qui fait appel cette fonction. Un utilisateur peut toujours ajouter des fonctions de bibliothque. Dfinition : un appel systme est un point d'entre dans le code du noyau. Autrement dit, le code de l'appel systme n'est pas dans l'excutable qui fait cet appel, et aucun utilisateur ne peut ajouter d'appel systme. Quelques proprits : Le code du noyau est trs sensible. Tout usage incorrect peut dtriorer le matriel ou planter le systme (donc gcher beaucoup de temps de travail, perdre des donnes). Ce code est donc protg : On ne peut y accder autrement que par un appel systme (on ne peut faire par ex un call direct l'adresse d'une routine systme) Les paramtres de l'appel systme sont contrls avant que la fonction ne soit excute Les appels systmes disponibles ne sont pas les mmes suivant le systme (Windows, Unix, VMS, etc.) et, pour un mme systme, suivant l'architecture (ex : Unix sur PC, sur Sun, sur HP) Chaque langage spcifie les appels systmes qu'il utilise. En thorie, peu importe qu'ils varient d'une implmentation l'autre, s'ils rendent les mmes services. En fait Certains services ne sont pas disponibles sur certaines plates-formes. Certaines spcifications ne peuvent donc pas tre implmentes (ex : fork() sous Dos) Les normes sont des normes industrielles. L'importance des enjeux explique qu'il y en ait plusieurs divergentes (ex.: BSD, Systme V, OpenLook, Posix,) Le matriel et le logiciel voluent sans cesse. La conception de certains appels systme ne peut simplement pas encore tre stabilise (ex.: les procdures de communication entre machines travers un rseau).. Comment utiliser les appels systme La premire question se poser est : dans quel mesure le code crit doit-il tre portable ? Et combien de temps sera-t-il utilis ? Si le code risque de devoir un jour tre port sur d'autres machines ou d'autres systmes, il faut absolument reprer les appels non portables et les isoler dans quelques fonctions qui pourront tre testes et rcrites. Ex: lecture des informations sur un fichier. L'appel systme est : #include <stat.h> int stat(const char *path, struct stat *statbuf); Quand on regarde dans stat.h sous Linux ou sous Windows, on trouve les dfinitions suivantes (simple soulign = le champs existe sous Windows, mais n'a pas la mme signification; double soulign = il n'existe pas sous Windows.) : struct stat { dev_t ino_t mode_t nlink_t uid_t gid_t dev_t off_t unsigned long st_dev; st_ino; st_mode; st_nlink; st_uid; st_gid; st_rdev; st_size; st_blksize; /* /* /* /* /* /* /* /* /* le priphrique o le fichier est stock*/ numero de fichier sur ce priphrique */ droits d'accs */ nombre de liens physiques */ numro d'utilisateur (identifiant) du propritaire */ numro de groupe (identifiant) du propritaire */ type de priphrique (si fichier spcial)*/ taille, en octets */ taille de bloc pour les E/S du systme de fichiers */ /* gnu C sous Linux */

F. Lvy

Page 1/2

unsigned long st_blocks; time_t st_atime; time_t st_mtime; time_t st_ctime; }; struct stat { short st_dev, short st_mode, int st_uid, short st_rdev; long st_size, long st_mtime, }; st_ino; st_nlink; st_gid; st_atime; st_ctime;

/* /* /* /*

nombre de blocs allous */ date du dernier accs */ date de la dernire modification */ date du dernier changement (de nom, de droit,..) */

/* Borland C, Dos ou Window 95 */ /* st_ino sans signification */ /* st_nlink == 1 */ /* sans signification */ /* identique st_dev */ /* identiques st_atime */

Conclusion : tout ce qui concerne les propritaires, l'accs aux priphriques, les dates de modification doit pouvoir tre retrouv dans le code. Les principaux types d'appel systme. Sous Unix, le manuel donne environ 200 appels systme, dont certains sont prims et d'autres non implments. Il faut donc apprendre lire rapidement une description. Voici quelques exemples des principaux types sous Unix (les appels qui existent sous le mme nom sous Windows selon Borland C sont en italiques. Ils sont souligns quand le contenu prsente une grande diffrence). La commande man 2 nom_de_l'appel donne une description des appels systme. Administration : getuid(), getgid(), identification d'utilisateur, de groupe gethostname(), sethostname(), uname(), nom de la machine, systme getrlimit(), acct() ressources autorises, enregistrement de l'activit des utilisateurs Temps : alarm(), setitimer(), gettitimer(), stime(), time() gettimeofday(), settimeofday() temporisation date

Rseau : socket(), bind(), connect(), send(), communication entre machines listen(), select(), socketpair() ioctl() paramtrage des entres-sorties (locales ou rseau) getdomainname(), setdomainname() administration du rseau systme de fichier (cf. cours 7): open(), close(), create()1, lseek(), read(), write(), truncate(), link(), rename(), unlink(), chmod(), chown(), chroot(), umask(), stat() (fichier), statfs() (disques), chdir(), mkdir(), mknod(), flock(), fsync(), sync(), mount(), umount() processus : fork(),e x e c v e (), attente, terminaison mmap(), mprotect() nice(), ptrace() shutdown() system(), s l e e p (), pause(), e x i t () cration, mise en

copie d'une partie de fichier en mmoire, partage de mmoire priorit pour debuguer terminaison de tous les processus

creat en Dos Page 2/2

F. Lvy