À propos du cours de programmation systèmes
Note: le calendrier des
enseignements est
disponible en
consultation ou en s'abonnant (iCal).
Important: ce
cours est référencé à travers la plateforme DidEL qu'il est
conseillé d'utiliser en premier lieu pour retrouver des informations
pédagogiques sur les cours.
L'essentiel du cours de programmation systèmes (ou cours Unix) est basé sur
la norme POSIX (Portable Operating
System Interface IEEE 1003.1, ISO / IEC
9945-1:1996(E)). Toutefois certaines caractéristiques d'implantation sont
décrites afin que chacun puisse réaliser comment peuvent être efficacement
construits des systèmes d'exploitation.
Who's DMR ?
Le programme de L3
- description générale d'un système d'exploitation (son rôle, son architecture, etc.)
- histoire des systèmes de la famille Unix (Plan9, Minix, Xinu).
- les différentes normes liées à Unix : Single UNIX Specification version 3 (POSIX 2001), XPG4, POSIX 1003.1, FIPS 151-2, ISO/IEC
9945-1:1996(E), SVID3 (ATT), AES (OSF)
- les principes généraux de la norme POSIX (conformité, etc.)
- quelques rappels sur le C et sa bibliothèque
standard (en particulier les entrées/sorties), ainsi que la compilation.
- rappels sur les outils de développement Unix (compilateur C, Makefile,
cvs, Emacs, vi, gdb)
- le système de fichier (inœuds, liens, références,
répertoires, fichiers, etc.)
- les opérations sur les répertoires (opendir(), readdir(),
rewinddir(), closedir(), mkdir(), rmdir())
- la résolution des références relatives (getcwd(), chdir())
- les opérations sur les fichiers (open(), creat(), umask(),
link(), mkfifo(), unlink(), rename(), access())
- les entrées/sorties (pipe(), dup(), dup2(), open(), close(),
read(), write(), fcntl(), lseek())
- la manipulation de la structure inœud (stat(), fstat(),
chmod(), chown(), utime())
- concepts de cache, E/S de blocs,
fragmentation, etc.
- divers (setlocale(), fileno(), fdopen(), sigsetjmp(), siglongjmp(),
tzset(), sysconf(), pathconf(), fpathconf())
Le programme de M1
les
processus :
- introduction aux concepts d'espace d'adressage, mémoire virtuelle,
etc.
- la manipulation des processus (fork(), execxx(),
wait(), waitpid(), _exit())
- la manipulation des signaux (kill(), sigemptyset(),
sigfillset(), sigaddset(), sigdelset(), sigismember(),
sigaction(), sigprocmask(), sigpending(), sigsuspend(),
alarm(), pause(), sleep())
- la manipulation de l'environnement des processus (getpid(),
getppid(), getuid(), geteuid(), getgid(), getegid(), setuid(),
setgid(), getgroups(), getlogin(), cuserid(), times(),
getenv(), ctermid(), ttyname(), isatty())
- les sessions et groupes de processus (getpgrp(), setsid(),
setpgid())
- la manipulation de l'environnement système (uname(), time())
- la gestion des terminaux (cfgetospeed(), cfsetospeed(),
cfgetispeed(), cfsetispeed(), tcgetattr(), tcsetattr(),
tcsendbreak(), tcdrain(), tcflush(), tcflow(), tcgetpgrp(),
tcsetpgrp())
- la manipulation des bases de données système (getgrgid(),
getgrnam(), getpwuid(), getpwnam())
les mécanismes de communication entre processus: IPC POSIX.
- les segments de mémoire partagée (shm_open(), shm_unlink())
- les sémaphores (sem_open(), sem_close(), sem_unlink(),
sem_post(), sem_wait(), sem_trywait(), sem_getvalue(), sem_init(),
sem_destroy())
- les files de messages (mq_open(), mq_close(), mq_unlink(),
mq_send(), mq_receive(), mq_setattr(), mq_getattr(), mq_notify())
la projection des objets en mémoire (extensions Temps-Réél de POSIX)
(mmap(), munmap()).
Un
exemple de copie de fichier par projection.
les mécanismes de communication entre processus: IPC SYSV (seule
entorse à la norme POSIX) (ftok())
- les sémaphores (semctl(), semget(), semop())
- les segments de mémoire partagée (shmctl(), shmget(),
shmat(), shmdt())
- les files de messages (msgget(), msgrcv(), msgsnd(), msgctl())
Certains sujets sont agrémentés d'une correction, d'autres
non. Il est absolument inutile d'en réclamer une, car l'auteur s'y refusera
(allez savoir pourquoi...).
D'anciens sujets (-2005)
Année | Systèmes
I | Systèmes II |
Janvier | Septembre | Juin | Septembre |
1998-1999 |
X |
X |
X |
X |
1999-2000 |
X |
X |
X |
X |
2000-2001 |
X |
X |
X |
X |
2001-2002 |
X |
X |
X |
X |
2002-2003 |
X |
X |
X |
X |
2003-2004 |
X |
X |
X |
X |
2004-2005 |
X |
X |
X |
X |
Des sujets plus récents (2006-)
Systèmes de gestion de fichiers
Processus
Divers (non classés)
2010-2011 : Sujets de Stéphane Gimenez et Julien Clément
2009-2010 : Sujets de Nataliya Guts
Anciens sujets
- C: langage (tableaux),
- C et outils Unix: make et gdb,
- C: allocation dynamique (pile),
- C: entrées/sorties standard (cat),
- POSIX: manipulation des répertoires
(ls)
- POSIX: manipulation des répertoires
(pwd),
- POSIX: manipulation des fichiers et
répertoires (find),
- POSIX: redirections, tubes nommés
(talk),
- POSIX: redirections, tubes nommés
(pipe),
- POSIX: création de processus,
- POSIX: création de processus
(shell),
- POSIX: création de processus
(shell),
- La page de Samuel
Hym.