IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Paging obligatoire ?


Sujet :

Programmation d'OS Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    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
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 287
    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 le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre actif
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    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
    Membre actif
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    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
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 287
    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 le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre actif
    Homme Profil pro
    Ubuntu
    Inscrit en
    Janvier 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ubuntu

    Informations forums :
    Inscription : Janvier 2017
    Messages : 69
    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.

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 Langage
    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