• Aucun résultat trouvé

Principes Fondamentaux des Systèmes d’Exploita8on

N/A
N/A
Protected

Academic year: 2022

Partager "Principes Fondamentaux des Systèmes d’Exploita8on"

Copied!
52
0
0

Texte intégral

(1)

Principes  Fondamentaux  des   Systèmes  d’Exploita8on  

Romain  Raveaux  

(2)

Rôle  de  l'OS  

•  Gérer  les  ressources  

–   Processeur   –   Mémoire  

–   Périphériques  

•   Les  uniformiser  

•   Les  rendre  accessible  aux  applica8ons  

 

(3)

Différents  types  de  noyau  

•  Monolithique  :  un  seul  bloc  réalisant  toutes   les  fonc8onnalités  (ex:  Linux)  

•   Micro-­‐noyau  :  un  pe8t  noyau  et  de  nombreux   serveurs  communiquants  entre  eux  (ex:  Hurd)  

•   Systèmes  à  composants  

(4)

Le  plan  de  ceNe  par8e  

•  Mul8-­‐tâches/processus  

– Fork   – Execve   – Thread  

•  Communica8on  entre  tâches/processus  

– pipe,  signal,  mémoire  partagée,  socket  

•  Synchronisa8on  

– Mutex,  sémaphore  

(5)

Adresses  physiques/effec8ves  

En  mémoire  :  

Instruc8ons  (code)  

•  Données  

•  Pour  faire  du  mul8tâche  robuste,  2  types  d'adresses  :  

Adresses  physiques  

Adresses  «  effec/ves  »,  rela8ves  à  l'espace   d'adressage  courant  

Conversion  physique  =>  effec/ve  :  MMU.  

(6)

Adresses  effec8ves/physiques  

•  La  traduc8on  effec8ves  =>  physiques  

s'effectue  à  l'aide  de  tables  de  traduc/on,   fournie  par  le  système  d'exploita8on.  

•  Sur  x86,  deux  mécanismes  se  combinent  :  

–   segmenta8on   –   pagina8on  

(7)

Pe#t  retour  sur  x86  

•  Deux  modes  de  fonc8onnement  du  processeur  :  

•   réel  

–  disponible  depuis  le  8086,  20  bits  d'adresse,  1Mo   RAM  

–  segmenta8on  fixée  (segments  de  64  Ko)  

 protégé  

–  disponible  depuis  le  386,  32  bits  d'adresse,  4  Go  RAM   –  segmenta8on  “custom”  

(8)

x86  :  segmenta#on  (1)  

•  Segments  définis  par  des  tables  :  

GDT  (Global  Descriptor  Table)  

LDT  (Local  Descriptor  Table)  

Adresse  définie  par  segment:offset,  segment   étant  un  sélecteur  de  segment  dans  une  des   tables.  

Les  GDT  et  LDT  con8ennent  des  descripteurs  de   segments.  

(9)

Retour  à  la  programma8on  système  

(10)

Les  niveaux  d’un  SE  

N1  :  Appel  système  

N2  :  bibliothèque  standard  du  C  et  C++  

(11)

N2  vers  N1  

(12)

N2  -­‐>  N1  

(13)

Du  point  du  vue  Processeur  et  du  

point  de  vue  processus  

(14)

Tables  des  descripteurs  

(15)

Zones  mémoires  d’un  processus  

(16)

Zones  mémoires  d’un  processus  

(17)

Zones  mémoires  d’un  processus  

(18)

Thread  

•  Applica8on  =  un  ou  plusieurs  flots  d'instruc8on  

•  Processeur  =  exécute  un  flot  d'instruc8on  

•  Mul8tâche  =  illusion  d’exécu8on  en  parallèle  

•  Thread  =  un  flot  d'instruc8on  

•  Pour  passer  d'un  flot  à  l'autre  :  changement  de   contexte  

(19)

Thread  

Ges8on  des  threads  :  ordonnanceur  ou  scheduler  

État  du  thread  :  prêt,  bloqué  ou  en  éxécu8on,  en  fonc8on   des  ressources  demandées  et  disponibles.  

Sources  de  blocage  :    

 matérielles  

 logiques  

 virtuelles  

Mécanisme  de  synchronisa8on  logicielle  pour  protéger  les   ressources  matérielles  et  logiques.  

(20)

Thread    :  Synchronisa#on    

•  Solu/on  :  synchroniser  

•   Protec8on  de  ressources  partagées  

•   Points  de  rendez-­‐vous  temporels  

(21)

Thread  

•  Deux  types  de  threads  :  

–   Threads  noyau  :  mode  privilégié,  dans  n'importe   quel  espace  d'adressage.  Ex:  keventd,  kswap,  

ksopirqd_CPU0  

–   Threads  u/lisateur  :  mode  u8lisateur,  dans  un   espace  d'adressage  donné.    

(22)

Synchronisa#on  pour  l'u#lisateur  

•  Sémaphores  

–  Même  principe  que  les  sémaphores  noyau   –  semget(),  semctl(),  semop()  (ipc/sem.c)  

•  Files  de  messages  

–  Mécanisme  de  synchro  et  de  communica8on   –  msgget(),  msgctl(),  msgsnd()  (ipc/msg.c)  

•  Fichiers  

–  Moyen  de  communica8on  (pipe  et  fifo)   –  Moyen  de  synchro  (fcntl)  

•  Signaux  

–  Communica8on  basique  :  déclenchement  d'une  rou8ne  dans  d'autres  processus.  

•  Mémoire  partagée  

–  Région  virtuelle  iden8que  dans  plusieurs  espaces  d'adressage.  

(23)

Processus  Lourd  

(24)

Processus  Lourd  

(25)

Processus  Lourd  

(26)

Zombie  or  not    

(27)

WAIT  

(28)

Processus  

EXEC  :  Recouvrement  

(29)

Processus  léger  :  Thread  

(30)

Thread  Basics  

•  sta8c  void  *task_a  (void  *p_data)  

•  {  

•       while(1){  

•         puts  ("Hello  world  A\n");  

•    puts  ("Hello  world  A\n");  

•         sleep(1);  

•       }  

•       (void)  p_data;  

•       return  NULL;  

•  }  

•  int  main  (void)  

•  {  

•       pthread_t  ta;  

•       puts  ("main  init");  

•       pthread_create  (&ta,  NULL,  task_a,  NULL);  

–  sleep(10);  

•       puts  ("main  end");  

•       return  0;  

•  }  

(31)

Thread  Pas  de  synchronisa8on  

•  sta8c  void  *task_b  (void  *p_data)  

•  {  

•    while(1){  

•       puts  ("Hello  world  B\n");  

•       puts  ("Hello  world  B\n");  

•       sleep(1);  

•           }  

•       (void)  p_data;  

•       return  NULL;  

•  }  

•  int  main  (void)  

•  {  

•       pthread_t  ta;  

•       pthread_t  tb;  

•       puts  ("main  init");  

•       pthread_create  (&ta,  NULL,  task_a,  NULL);  

•       pthread_create  (&tb,  NULL,  task_b,  NULL);  

•       sleep(10);  

•       puts  ("main  end");  

•       return  0;  

•  }  

(32)

Thread  Pas  de  synchronisa8on  

•  Hello  world  A  

Hello  world  A  

Hello  world  B  

Hello  world  B  

Hello  world  A  

Hello  world  B  

Hello  world  A  

Hello  world  B  

….  

(33)

Communica8on  inter-­‐processus  

•  Pipe()  

int  filedes[2];  

pipe(filedes);  

•  …  

•  read(filedes[0],&car,1)  

•  write(filedes[1],monmsg,strlen(monsg));  

(34)

Communica8on  inter-­‐processus  

•  Mémoire  partagée  

– Créa8on  de  la  zone  mémoire   – Récupéra8on  de  l’iden8fiant  

– ANachement  à  la  zone  mémoire  

•  Récupéra8on  d’un  pointeur  sur  la  zone  mémoire  

– Détachement  de  la  zone  mémoire  

(35)

•  if  ((mem_ID  =  shmget(CLEF,  sizeof(Data),  0666  

|  IPC_CREAT))  <  0)  

•  {  

•  perror("shmget");  

•  exit(1);  

•  }  

(36)

•  if  ((ptr_mem_partagee  =  shmat(mem_ID,   NULL,  0))  ==  (void*)  -­‐1)  

•  {  

•  perror("shmat");  

•  exit(1);  

•  }  

(37)

•  shmdt(ptr_mem_partagee);  

(38)

Mémoire  Partagée  

%  ipcs  –m  

−−−  Segments  de  mémoire  partagée  −−−  

clé                shmid          propriétaire  perms          octets      naNch  état  

•  0x00000000  1627649      user            640              25600          0  

%  ipcrm  shm  1627649  

(39)

Synchronisa8on    

•  Mutex  

(40)

Les  mutex  

•  Protéger  une  ressource  partagée:  

•  pthread_mutex_t  mutex1  =  

PTHREAD_MUTEX_INITIALIZER;  

•  pthread_mutex_lock(  &mutex1  );  

•  ….  Accès  à  la  ressource  partagée  …  

•   pthread_mutex_unlock(  &mutex1  );  

(41)

Synchronisa8on    

•  Sémaphore  

(42)

Les  sémaphores  

•  sem_t  *monsem;  

•  monsem=  sem_open(SEMNAME,  O_CREAT|

O_EXCL,  0777,  NBTOKEN);  

•   /*  Close  the  semaphore  */  

•       sem_close(monsem);  

•       /*  Remove  the  semaphore  */  

•       sem_unlink(SEMNAME);  

(43)

Les  sémaphores  

•  sem_wait(monsem);      

•  sem_post(monsem);    

(44)

Informa8on  supplémentaire  

(45)

Droit    

•  Rwx  =  trois  bits  :  000,  100,  110,  001,  ….  

R=lire  

W  =  écrire  

X  =  exécuter  

Rwx  =  moi  

Rwx  =  le  groupe  

Rwx  =  les  restes  du  monde  

Un  fichier  =  3  x  3  bits  

chmod  744  toto.txt  

(46)

Le  langage  C  

•  int  i  =10;  

•  int  *j  =  NULL;  

•  j  =  &i;  

•  *j  :  la  valeur  pointée  par  j  

•  &i  :  adresse  de  i.  

•  j  :    adresse  de  j.  

(47)

Les  includes  u8les  

•  #include    <stdio.h>  

•  #include    <stdlib.h>  

•  #include    <sys/types.h>  

•  #include    <unistd.h>  

(48)

Nombre  aléatoire  

•  int  printalea(){  

•       int  nombre_aleatoire  =  0;  

•    nombre_aleatoire  =  rand();  

•    prin‡("%d  \n",nombre_aleatoire);  

•     

•    return  nombre_aleatoire  ;  

•  }  

(49)

Dormir  

•  Sleep(nombre_alea);  

•  Suspend  l’execu8on  du  programme.  

(50)

DUP2  et  sauvegarde  des  flux  

•  #include<stdio.h>  

•  int  main(void)  

•  {  

•  int  a;  

•  int  pfd[2];  

•  //  backup  stdin  

•  int  stdin_bak  =  dup(0);  

•  //  create  pipe  and  redirect  stdin  to  the  pipe  end  

•  pipe(pfd);  

•  dup2(pfd[0],0);  

•  //  say  we're  finished  with  it,  clean  up  and  restore  stdin  

•  close(0);  

•  close(pfd[0]);  

•  dup2(stdin_bak,0);  

•  close(stdin_bak);  

•  //  to  test  it  s8ll  works,  do  a  getchar  

•  a  =  getchar();  

•  prin‡("%c\n",  a);  

•  return  0;  

•  }  

(51)

Références  

•  Programma8on  Système  -­‐  Maîtrisez  les   interfaces  système  avec  le  langage  C  sous   Linux  de  Jean-­‐Paul  GOURRET    

•  Editeur  :  Edi8ons  ENI;  Édi8on  :2012  

•  Simple  OS  :    

– Thomas  Petazzoni  –  Lolut  -­‐  hNp://lolut.utbm.info    

 

(52)

Simple  OS  

Série  complète  sur  la  

construc8on  d'un  OS  simple  :   SOS.  A  par8r  de  ce  mois-­‐ci  

(numéro  62)  et  pendant  10  ou   11  numéros.  

Références

Documents relatifs

Le tâtonnement expérimental, la métho- de naturelle, la libre expression, sont des principes de comportements psycholo- giques (ils sont même considérés com- me des principes

la sommation s’étendant à tous les éléments dw de la surface déformable du La somme des travaux virtuels effectués dans la déformation considérée par toutes les

2° La différence des pressions en deux points pris à l'intérieur d'un liquide est égale au poids d'une colonne liquide, ayant pour base l'unité de surface et pour hau- teur

► Liberté de l’enseignement écoles publiques ou écoles privées, au choix des familles les diplômes sont délivrés par l’État (reconnaissance nationale).. ► Liberté

,.. LES PRINCIPES FONDAMENTAUX DE LA GÉOMÉTRIE. Des raisonnements analogues à ceux que.. 45 toute différente. De même, la considération des triangles CDF et CD'F' fait voir que 0, F,

La Statue et la forme du culte de la Lumière sont avant tout un support pour la concentration et la pratique du rituel sacré, qui est une offrande et un hommage à Dieu..

Par conséquent, pour les systèmes à débit variable, le point de sélection doit se trouver dans le premier tiers de droite, car le point de fonctionnement de la pompe de

- propriété exclusion multuelle : un seul processus peut être actif dans un moniteur - il dispose des variables de condition et deux opérations sur ces variables : WAIT pour mettre