Discussion: Paging obligatoire ?

  1. #1
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut Paging obligatoire ?

    Bonjour,

    je suis ceci pour me mettre en long mode avec un OS fait maison http://wiki.osdev.org/Setting_Up_Long_Mode, à la section "The Switch from Protected Mode" le point "Enabling paging" puis-je l'omettre sans craindre de répercutions sur l'emploi futur des instructions processeur et le bon fonctionnement du système d'exploitation si je n'utilise pas la pagination ? Aussi il est dit en fin de section "Now we're in compatibility mode." l'aurions-nous été si "Enabling paging" avait été omis ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 501
    Points : 13 644
    Points
    13 644

    Par défaut

    Je ne vois pas comment faire un OS digne de ce nom sans utiliser la pagination.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Dans mon cas j'aimerais juste adresser des octets spécifiques pour y écrire afin d'utiliser l'affichage de pixels bien déterminés à l'aide du standard VESA et d'une connectique et d'un écran VGA pour conclure si le programme ci-après est bien fonctionnel ou non:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    bit 16
     
    	mov ax, 0x7c00
    	mov ds, ax
    	mov es, ax
    	mov ax, 0x8000
    	mov ss, ax
    	mov sp, 0xf000
     
    	mov ecx, 0xC0000080    
          rdmsr                      
             or eax, 1 << 8              
          wrmsr 
     
            GDT64:                          
            .Null: equ $ - GDT64      
             dw 0                        
             dw 0                     
             db 0                      
             db 0                   
             db 0                    
             db 0                      
            .Code: equ $ - GDT64      
             dw 0                     
             dw 0                     
             db 0                    
             db 10011010b               
             db 00100000b                 
             db 0                        
            .Data: equ $ - GDT64        
             dw 0                         
             dw 0                       
             db 0                         
             db 10010010b                 
             db 00000000b                 
             db 0                         
            .Pointer:                   
             dw $ - GDT64 - 1             
             dq GDT64
     
           lgdt [GDT64.Pointer]  
            jmp GDT64.Code:Realm64
     
    	times 510-(&-&&) db 0 
    	dw 0xaa55
    Censé passer en long mode et un code pour afficher à l'écran par le biais du standard VESA (linear frame buffer) sera rajouter pour tester son bon fonctionnement (donc besoin d'écrire à des octets bien définis dans la RAM et je ne trouve pas d'info clair à ce sujet sur le net).

    En différents mots, Pourriez-vous m'aider à écrire dans un octet particulier dans la RAM qui dépasse les 4go chez moi dans le but d'afficher des pixels ?

  4. #4
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    J'ai du mal comprendre cette page http://stackoverflow.com/questions/4...-to-the-screen, je dois d'abord demander au bios où se situe le linear frame buffer et le VESA faisant partie intégrante du bios ne sera pas du tout traité dans la suite ? Est-ce donc ceci que j'ai à suivre http://wiki.osdev.org/VGA_Hardware pour afficher des pixel en long mode ? Me reste à savoir comment adresser un octet distinct dans la RAM, l'idéal serait de le faire directement sur 64 bits, serait-ce possible ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 501
    Points : 13 644
    Points
    13 644

    Par défaut

    Ton code ne peut pas marcher, tu mélanges les données et le code. Après l'écriture dans le registre MSR, ta GDT qui est une donnée va être interprétée comme du code.
    Une fois passé en mode protégé (au niveau de ton jump), tu dois sauter dans un segment 64 bits, tu as démarré en 16 bits.

    Par ailleurs, tu n'as pas de table de pages.
    http://forum.osdev.org/viewtopic.php?f=13&t=22330

    Une fois ce problème réglé, avant d'afficher de la vidéo, commences par afficher du texte.
    http://wiki.osdev.org/Printing_to_Screen

    Pour le mode vesa, il te faut passer par le framebuffer, celui-ci te permet d'écrire chaque pixel directement en mémoire, le plus simple étant d'activer un mode 32 bits (1 octet pour le rouge, 1 pour le vert, 1 pour le bleu, 1 non utilisé).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Merci beaucoup, je prenais la pagination pour la mémoire virtuelle qui elle sollicite le disque dur ce qui n'avait rien à voir. Si j'ai bien compris cette structure http://wiki.osdev.org/images/7/77/Paging_Structure.gif contenue dans le registre CR3 me permet l'accès à n'importe quel octet sur une plage de 2^32 emplacements. En long mode j'ai vu que ça fonctionnait à peu près pareil ce que je n'ai pas saisi c'est l'utilité de diviser ce registre CR3 en 3 blocs: page directory, page tables et 4k pages.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 501
    Points : 13 644
    Points
    13 644

    Par défaut

    La pagination correspond bien à la mémoire virtuelle.

    Mémoire vituelle ne veut pas forcément dire sur disque dur. L’adresse est virtuelle dans le sens ou elle est convertie par la MMU en adresse réelle ou swap disque. Cela sert aussi à la protection mémoire (cloisonnement des applications entre elle et du noyau, copy on write, partage zones mémoire entre application, partages des bibliothèques). 2 applications peuvent utiliser la même adresse mémoire virtuelle, correspondant à 2 emplacements physiques différents.

    Diviser la pagination en blocs permet de faire des tables de pages plus petites. Et en 64 bit, il me semble qu'il y a un niveau de plus.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Re,

    je n'ai toujours pas compris même après lecture du manuel d'utilisation Intel comment fonctionner cette pagination. J'écris une adresse dans le registre CR3, où vont être placés les octets s'y trouvant pour me permettre de les manipuler ? J'ai l'impression que ça touche aux registres de pointeur mais l'exacte fonctionnement je n'arrive pas à le saisir.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 501
    Points : 13 644
    Points
    13 644

    Par défaut

    Il te faut créer la table de pages à une adresse que tu mettras dans cr3 avant d’activer celle-ci.
    http://wiki.osdev.org/Paging#Example
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Débutant
    Homme Profil pro
    Ubuntu
    Inscrit en
    janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : janvier 2017
    Messages : 69
    Points : 0
    Points
    0

    Par défaut

    Pour le cas du 32bits, je mets une adresses 32bits dans CR3, en supposant que les pages entry ont toutes été créées, je fait alors défiler les octets avec les registres pointeurs ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    6 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 6 501
    Points : 13 644
    Points
    13 644
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. [Débutant] Sécurité Login Page Obligatoire
    Par Whippet dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/06/2015, 14h03
  2. [PHP 5.4] Rafraichissement de pages obligatoire
    Par Pyanepsion dans le forum Débuter
    Réponses: 1
    Dernier message: 17/08/2013, 15h51
  3. Rendre une page web obligatoire
    Par sorry60 dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 23/06/2006, 12h18
  4. Réponses: 4
    Dernier message: 15/05/2006, 00h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo