Chap. X : Ordonnancement poinsot/save/L2 Archi/Cours/Cours 11.pdf · PDF fileRappels :...

Click here to load reader

  • date post

    15-Sep-2018
  • Category

    Documents

  • view

    218
  • download

    2

Embed Size (px)

Transcript of Chap. X : Ordonnancement poinsot/save/L2 Archi/Cours/Cours 11.pdf · PDF fileRappels :...

  • Rappels : piles et tasOrdonnancement (scheduling)

    Chap. X : Ordonnancement

    Laurent Poinsot

    UMR 7030 - Universit Paris 13 - Institut Galile

    Cours Architecture et Systme

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Le compilateur spare les diffrents objets apparaissant dans unprogramme dans des zones mmoires (code, donnes, librairies, pile).Prcisons cela par un exemple concret.#include#include#include/* Variables globales */const int nbMois=12;int gi=5;int Tab[]={1,2,3}char Titre[50];

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Le compilateur spare les diffrents objets apparaissant dans unprogramme dans des zones mmoires (code, donnes, librairies, pile).Prcisons cela par un exemple concret.#include#include#include/* Variables globales */const int nbMois=12;int gi=5;int Tab[]={1,2,3}char Titre[50];

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Le compilateur spare les diffrents objets apparaissant dans unprogramme dans des zones mmoires (code, donnes, librairies, pile).Prcisons cela par un exemple concret.#include#include#include/* Variables globales */const int nbMois=12;int gi=5;int Tab[]={1,2,3}char Titre[50];

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Puis le main :main (){/*Variables locales du main ()donc dans la pile*/int t=2;int *pti=&i;char *mes="il fait beau";char *ad;/*Pour allocation dynamique*/int T[2];char c;ad=(char*)malloc(512);strcpy(Titre,"***********");

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Puis le main :main (){/*Variables locales du main ()donc dans la pile*/int t=2;int *pti=&i;char *mes="il fait beau";char *ad;/*Pour allocation dynamique*/int T[2];char c;ad=(char*)malloc(512);strcpy(Titre,"***********");

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Suite du main() :printf("&nbMois : %p\n",&nbMois);printf("&gi : %p, Tab : %p, Titre :%p\n",&gi,Tab,Titre);printf("&i : %p, pti : %p, &pti :%p\n",&i,pti,&pti);printf("mes : %p, &mes : %p\n, mes,&mes);printf("ad : %p, &ad : %p\n",ad,&ad);printf("T : %p\n",T);printf("strcpy : %p\n,strcpy);printf("strcmp : %p\n",strcmp);}

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Rsultat de lexcution du programme :&nbMois : 0x8048600&gi : 0x8049810, Tab : 0x8049614, Titre :0x8049c80&i : 0xbffffc84, pti : 0xbffffc84, &pti :0xbffffc80mes : 0x80489e0, &mes : 0xbffffc7cad : 0x8049e50, &ad : 0xbffffc78T : 0xbffffc70strcpy : 0x8048788strcmp : 0x8048708

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    Rsultat de lexcution du programme :&nbMois : 0x8048600&gi : 0x8049810, Tab : 0x8049614, Titre :0x8049c80&i : 0xbffffc84, pti : 0xbffffc84, &pti :0xbffffc80mes : 0x80489e0, &mes : 0xbffffc7cad : 0x8049e50, &ad : 0xbffffc78T : 0xbffffc70strcpy : 0x8048788strcmp : 0x8048708

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denvironnement sont galement mmoriss dans lapile (en bas de celle-ci). Enfin entre le tas et la pile, il y a la zonerserve aux librairies utilises.

    Laurent Poinsot Chap. X : Ordonnancement

  • Rappels : piles et tasOrdonnancement (scheduling)

    On schmatise maintenant limplmentation par rgion mmoire pourcet exemple. Il y a tout dabord la rgion du code qui contient lesconstantes 12 (nbMois) et "il fait beau". Ces donnes sontprotges en criture : si on essaie par exemple dexcuterlinstruction mes[0]=*;, alors il y a une erreur de segmentation.Puis les donnes globales initialises (gi, Tab) se trouvent avant ladonne globale non intialise Titre. Les variables du main ()sont implmentes dans la pile ; leurs adresses sont dcroissantes (i,pti, mes, ad, T, c). malloc() a permis dallouer une zonedont ladresse est dans la variable ad (soit 08049e50). Cette zonealloue se trouve dans le tas. Les arguments du main (quand il y ena) et les variables denv