1 / 16

Architecture Système d’Unix I

Architecture Système d’Unix I. Exemple de fonctionnalités fournies par un système d’exploitation moderne Par Gilles Grimaud U niversité des S ciences et T echnologies de L ille http://www.lifl.fr/~grimaud/Cours. Plan du cours. 1. Rôle et historique des systèmes Unix ;

coty
Download Presentation

Architecture Système d’Unix I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architecture Système d’UnixI Exemple de fonctionnalités fournies par un système d’exploitation moderne Par Gilles Grimaud Université des Sciences et Technologies de Lille http://www.lifl.fr/~grimaud/Cours

  2. Plan du cours 1. Rôle et historique des systèmes Unix ; • Architecture des systèmes Unix ; • Fondamentaux Unix ; • Les processus Unix ; 5. Processus et Mémoires.

  3. Historique des systèmes Unix 1969 – Création du premier système Unix : Ken Thompson, Dennis Richie,Bell Labs. 1972 – Intégration d’un protocole réseau : TCP/IP 1979 – Variantes d’Unix : SunOS, Unix system V,Unix BSD,… 1986 – Normalisation : POSIX 1987 – Intégration des systèmes graphiques : X-Windows 1991 – Systèmes Unix Libres : Linux et FreeBSD 1997 – « Démocratisation » des systèmes Unix : Solaris, BeOS, MacOS X

  4. Principe des systèmes Unix • Un langage de programmation avancé : –– le langage C –– • Assurer la portabilité du code • Simplifier la production des applications 2. Un découpage système / applications : ––selon les modèles des systèmes monolithiques –– • Sécurisation/Fiabilisation du système d’exploitation • Base de confiance « au dessus » du système • Isolation des applications 3. Un modèle d’échange de données privilégié : ––les flux de données « nommés » –– • Fichiers, sockets, pipes, …

  5. Système d’exploitation Unix Interface machine de haut niveau : • Accès aux fichiers (open, read, write, …) • Gestion des processus (fork, signal, pause,…) • Accès au réseau (bind, accept, …) Mais aussi : • Système multi-utilisateur (login,contrôle d’accès,…) • Shell (application de base pour l’utilisateur, sh, bsh,csh, ksh,bash,… ) • Interface graphique (X-Windows, X11-R6)

  6. Architecture des systèmes Unix Applications utilisateur emacs xclock bash Processus Shell Démons systèmes login Serveur FTP Serveur HTTP Système unix Matériel

  7. Commandes de contrôle usuelles La configuration des flux d’un processus Unix : Un processus Unix dispose de flux de communication par défaut : "stdin""stdout" et "stderr" • >, >>, |, <, • 2> , 2| (redéfinir stderr)

  8. Commandes de contrôle usuelles Manipulation du système de liaison des flux : • mount, ls, cd, mkdir, rm, ln, ... Outils de base pour la manipulation des flux : • echo, cat, sort, cut, seed, awk, …

  9. Commandes de contrôle usuelles Administrer les processus : • ps, (voir aussi top) Exemple : $ ps aux Bad syntax, perhaps a bogus '-'? USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1264 436 ? S Sep26 0:41 init [2] root 5 0.0 0.0 0 0 ? SW Sep26 0:33 [kswapd] daemon 101 0.0 0.0 1376 504 ? S Sep26 0:09 /sbin/portmap root 977 0.0 0.0 1292 472 ? S Sep26 0:00 /usr/sbin/inetd daemon 1609 0.0 0.0 1288 472 ? S Oct01 0:00 /usr/sbin/atd Hauspie 362 0.0 0.1 2960 944 pts/0 S Oct08 0:00 -csh deville 242 0.0 0.4 4464 2364 ? S 10:33 0:01 /usr/X11/xterm [...]

  10. Commandes de contrôle usuelles Administrer les processus : • kill -signal pid, Exemples : $ kill -9 ’ps aux | grep deville | grep xterm | cut –d’ ’ –f3’ $ killall netscape Endormir et réveiller un processus : $ kill –STOP 1347 $ kill –CONT 1347 Et bien d’autres : $ man kill

  11. Les processus Unix Exécutables : • Fichiers .o : binaires « relogeables » • Obtenir la table des symboles d’un .o : nm test.o • Exécutables : binaires « absolus » (symboles résolus) • Préservation des informations de relocation : ld -r • Format des fichiers exécutables • Type du fichier (deux premiers octets) • Zone text, Zone data, Zone bss • Taille d’un exécutable § size /vmunix text data bss dec hex 3243344 494336 856864 4594544 461b70 • Zone stack • A l’exécution uniquement • Variables locales & Arguments des fonctions

  12. Création de processus Unix • Primitive : fork(2) • Duplication du processus • Héritage : mémoire, fichiers, environnement, etc. • Valeur de retour : 0 (fils) et pid du fils (père) • Substitution de processus :execl(2), execv(2), execle(2), execve(2), execlp(2), execvp(2). • Exemple : démarrage du daemontelnet(1) #include <stdio.h> #include <unistd.h> int main(int argc, char **argv){ pid_t pid; if ((pid == fork()) == 0) { /* Fils. */ char* argv[3]; argv[0]="telnetd";argv[2]="23";argv[2]=NULL; execvp("telnetd",argv); fprintf(stderr,"execvp failed\n"); exit(1); } if(pid == -1) { fprintf(stderr,"fork failed\n"); exit(1); } return 0; }

  13. Structure de processus • Identificateur unique pid : getpid(2), getppid(2) • Mémoire • Mémoire virtuelle • Protection des accès (Read, Write, R/W, Copy on Write) • Communication • flux par défaut : stdin, stdout, stderr • Un nombre limité de flux annexes • Environnement : getenv(3), setenv(3) • extern char* getenv(char *name) • extern int setenv(char *name, char *value, int owr) • Communication inter-processus • Interruptions asynchrones (signaux) • Synchronisation (fichiers, etc) • Mémoire partagée (échange de données) • Tubes et Tubes nommés (Pipe)

  14. Processus et mémoires Allocation de la mémoire : • Bas niveau : brk, sbrk,(aussi kalloc) • Haut niveau : malloc, realloc, free • Exemple : lecture d’une chaîne de caractères char * ReadLine(FILE* f) { int c,n = 0, size = 2; char *s = (char *) malloc(size); assert(s != NULL); while ((c=fgetc(f)) != EOF) { if (n == size) { size *= 2; s = (char *) realloc(s,size); assert(s != NULL); } if (c == ‘\n’) { s[n] = ‘\0’; return s;} else { s[n++] = c; } } free(s) ; return NULL; }

  15. Processus et mémoires Limites des processus : • Accès en C : getrlimit(2), ulimit(3) • Accès en sh : malloc(3), realloc(3), free(1) $ ulimit –a (commande bash) time(seconds) unlimited file(blocks) unlimited data(kbytes) 1048576 stack(kbytes) 32768 memory(kbytes) 122152 coredump(blocks) unlimited nofiles(descriptors) 4096 vmemory(kbytes) 1048576 $ ulimit –c 0 $ ulimit –a [...] coredump(blocks) 0

  16. Processus Unix Groupe de processus • Traitement uniforme des groupes de processus • Identificateur de groupe : gid • Session : (1) Groupe des processus au premier plan (2) Groupe des processus en tâche de fond • ^C : interrompt le groupe • Interface C : setpgid(2), setpgrp(2), getpgrp(2).

More Related