bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009
-
3 mai 2008 à 15:53
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008
-
30 juil. 2008 à 13:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 30 juil. 2008 à 13:49
Salut,
L'effet de bord, c'est ce que tu as très bien expliqué avec les caches de segment !
Car en effet, pour ne pas aller en permanence relire la gdt, le cpu garde les segments en cache. En théorie, cela n'est sensé rester actif après être revenu en mode réel. Apparement, sur une machine réel, le cache n'est pas vidé. Mais c'est un effet de bord.
Un autre exemple d'effet de bord, serait de prend un registre tel que ax par exemple, lui affecter 65535, la valeur maximum, puis de l'incrémenter de 1. L'effet de bord sera que le registre reviendra à 0.
Le compteur, on dit plutôt le timer. Me rappelle plus du numéro de PIC non plus.
Pour ce qui est du système de fichier, la FAT12, FAT16 et FAT32 possède quelques avantages pour commencer : C'est simple à comprendre et à implémenter, et beaucoup d'outils existe pour vérifier la valider des FAT.
Oublie pas le DMA pour les accès disquettes et disques dur. Mais un conseil, travaille avec une machine virtuelle, si possible qemu, avec gdb connecter pour déboguer par exemple. C'est vraiment pratique. Et pour pouvoir retrouver les symbols du code (Les labels en assembleur), je te conseille de compiler un objet de type ELF en parallèle du binaire et de charger ce dernier ELF dans gdb.
Enfin, je te recommande chaudement de passer au C pour coder ton OS, c'est vraiment plus productif et plus efficace.
Si tu veux, envoie moi ton mail par mp, nous pourrons continuer à discuter tranquillement.
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 30 juil. 2008 à 08:08
je croie que c'est dût en fait a un registre caché du processeur
pour chaque selecteur de segment il y a un registre caché qui contient la limite du segment, en mode réel la limite n'est pas modifié mais en mode protégé ce registre est chargé avec la valeur contenue dans le descripteur de segment
en fait dans mortimer j'essaye de coder les drivers moi même, pour le moment j'ai déja codé des pilote pour le clavier, les port com, le compteur (un 8??? je me rapelle plus), et le disque dur. il me reste le lecteur disquette, le cdrom et le port lpt pour avoir un bon petit système de base
je cherche aussi a créer un système de fichier propre a mon os (pour le moment j'uttilise fat12 mais c'est pas terrible, ça limite aux disquettes)
question: qu'est ce qu'un effet de bord?
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 29 juil. 2008 à 17:07
En effet, c'est une bidouille, qui marche par hasard sur la plupart des PC réels, mais ça ne doit pas être exempt d'effet de bord. C'est probablement dû aux systèmes de caches mémoire et compagnies.
Évidemment, quand tu passe en 32/64 bits, tu peux plus compter sur le BIOS, et il faut coder tous les drivers. D'un autre coté, c'est un challenge amusant ;)
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 29 juil. 2008 à 09:05
lorsque que l'on charge un selecteur de segment avec une limite de 4Go et que l'on revient en mode réel les limite reste 4Go! (sous réserve que j'ai bien comprit)
en fait le système a été conçu pour le mode réel et j'en prépare un en mode protégé, là c'est une bidouille pour avoir 4Go de donnée
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 29 juil. 2008 à 00:36
Tu n'as pas besoin de modifier le registre cr0 alors. Je n'avais pas vu que tu activais le mode protégé avant de... le désactiver. C'est inutile. Ne me dis pas que t'espère que cs reste en mode protégé. C'est un effet de bord sur les machines réelle, pas dans les émulateurs.
Par contre, tu peux effectivement passer en mode protéger, mais ne pas activer le mode 32 bit du cpu. Ainsi, tu reste en mode réel, mais avec des adresse 32 bit... jusqu'au moment où tu feras un farjump avec selecteur de segment.
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 28 juil. 2008 à 14:45
en fait le but de ce bout de code n'est pas de passer en mode protégé mais de débloquer la taille des segment de données de 64Ko à 4Go
pour la compatibilité avec l'emulateur je vais voir mais c'est pas vraiment ma priorité
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 28 juil. 2008 à 10:24
Salut,
Dans SYST.ASL:
Le passage en mode protégé peut être corrigé comme suis :
Original :
mov cx,8
mov eax,cr0
mov ebx,eax
or ebx,1
jmp $+2
mov cr0,ebx ;passe en mode protégé
mov ds,cx
mov es,cx
mov fs,cx
mov gs,cx
mov cr0,eax ;mode en mode réel flat ;
^^^^^^^^^^^^^ Ceci ne veut rien dire, le mode flat, c'est une organisation de la mémoire qui consiste à avor deux segement englobant chacun toute la RAM, un pour le code, un pour les données. En réalité à ce moment là, tu demande au CPU de passer en mode protégé, c'est à dire que tu va pouvoir profiter des fonctionnalités de droits et autres sur les pages mémoires.
jmp $+2
Correction:
; Indique au CPU de passer en mode protégé.
mov eax, cr0
or ax, 1
mov cr0, eax
; Réinitialise le segment de code.
; un jmp $2 marche aussi, mais je trouve plus propre d'indiquer clairement ce que l'on fait.
; Ce saut va forcer le processeur à vérifier le registre cs, et charger dedans le segment de code comme définit dans la gdt. Nous avons donc accès à 4go de ram, tout en étant encore en mode d'instruction 16bits.
jmp .CS_OK
.CS_OK
; Mise en place des selecteurs de DS, ES, FS, GS et SS.
mov ax, 8
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
; Plus bas, le "jmp 1000h:0000h" passera le CPU en mode d'instruction 32 bit.
Au sujet de tes problèmes de boot dans un émulateur, essaye d'intervertir l'ordre du chargement de la GDT et l'activation de la ligne A20. Cela parait complètement irrationnel, mais un vague souvenir d'avoir eu ce problème.
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 18 juin 2008 à 21:52
j'ai cherché et j'ai pas trouvé
je l'ai aussi testé sur qemu et j'ais eu le meme résultat
je l'ai testé sur plein de vrai ordi et j'ai eu aucun bug de ce genre
je sèche
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 30 mai 2008 à 15:05
c'est un bug inconnue car je n'uttilise pas d'emulateur
je ne sait pas d'ou ça pet venir mais je vais chercher
hypothèse: le pic émulé n'as pas put etre modifié par mortimer et les irq pointe au mauvais endroit
steckdenis
Messages postés19Date d'inscriptionsamedi 2 décembre 2000StatutMembreDernière intervention27 juillet 2008 30 mai 2008 à 14:53
Bonjour,
J'ai t?l?charg? l'image IMG.BIN et je l'ai lanc'e dans Qemu, en mode disquette.
L'OS d?marre, affiche le caract?re ">", puis bloque. Quand je tappe sur des touches, elles ne s'affichent pas.
Pouvez-vous me dire si le probl?me est connu ou si c'est un bug.
A plus.
steckdenis
Messages postés19Date d'inscriptionsamedi 2 décembre 2000StatutMembreDernière intervention27 juillet 2008 3 mai 2008 à 20:03
Bonjour,
Bravo pour ce magnifique système d'exploitation, certe simple, mais complet (gestion des applications et API). Les sources sont bien, même si pas beaucoup commentées, et le principe est bien trouvé. J'aime bien l'interface d'appel des fonctions systèmes, directement par des call, même si une petite manipulation de la table des INT pourrait rendre cet OS plus comptatible avec ses futures version.
En tout cas très bonne source, et bonne continuation.
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 3 mai 2008 à 15:53
j'ai oublier de dire le plus important
pour tester les programme: copier le dossier "acopier" dans une disquette vide et executer amorc4 du répertoire "uttilitaire"
et ensuite rebooter avec la disquette dans le lecteur
30 juil. 2008 à 13:49
L'effet de bord, c'est ce que tu as très bien expliqué avec les caches de segment !
Car en effet, pour ne pas aller en permanence relire la gdt, le cpu garde les segments en cache. En théorie, cela n'est sensé rester actif après être revenu en mode réel. Apparement, sur une machine réel, le cache n'est pas vidé. Mais c'est un effet de bord.
Un autre exemple d'effet de bord, serait de prend un registre tel que ax par exemple, lui affecter 65535, la valeur maximum, puis de l'incrémenter de 1. L'effet de bord sera que le registre reviendra à 0.
Le compteur, on dit plutôt le timer. Me rappelle plus du numéro de PIC non plus.
Pour ce qui est du système de fichier, la FAT12, FAT16 et FAT32 possède quelques avantages pour commencer : C'est simple à comprendre et à implémenter, et beaucoup d'outils existe pour vérifier la valider des FAT.
Oublie pas le DMA pour les accès disquettes et disques dur. Mais un conseil, travaille avec une machine virtuelle, si possible qemu, avec gdb connecter pour déboguer par exemple. C'est vraiment pratique. Et pour pouvoir retrouver les symbols du code (Les labels en assembleur), je te conseille de compiler un objet de type ELF en parallèle du binaire et de charger ce dernier ELF dans gdb.
Enfin, je te recommande chaudement de passer au C pour coder ton OS, c'est vraiment plus productif et plus efficace.
Si tu veux, envoie moi ton mail par mp, nous pourrons continuer à discuter tranquillement.
30 juil. 2008 à 08:08
pour chaque selecteur de segment il y a un registre caché qui contient la limite du segment, en mode réel la limite n'est pas modifié mais en mode protégé ce registre est chargé avec la valeur contenue dans le descripteur de segment
en fait dans mortimer j'essaye de coder les drivers moi même, pour le moment j'ai déja codé des pilote pour le clavier, les port com, le compteur (un 8??? je me rapelle plus), et le disque dur. il me reste le lecteur disquette, le cdrom et le port lpt pour avoir un bon petit système de base
je cherche aussi a créer un système de fichier propre a mon os (pour le moment j'uttilise fat12 mais c'est pas terrible, ça limite aux disquettes)
question: qu'est ce qu'un effet de bord?
29 juil. 2008 à 17:07
Évidemment, quand tu passe en 32/64 bits, tu peux plus compter sur le BIOS, et il faut coder tous les drivers. D'un autre coté, c'est un challenge amusant ;)
29 juil. 2008 à 09:05
en fait le système a été conçu pour le mode réel et j'en prépare un en mode protégé, là c'est une bidouille pour avoir 4Go de donnée
29 juil. 2008 à 00:36
Par contre, tu peux effectivement passer en mode protéger, mais ne pas activer le mode 32 bit du cpu. Ainsi, tu reste en mode réel, mais avec des adresse 32 bit... jusqu'au moment où tu feras un farjump avec selecteur de segment.
28 juil. 2008 à 14:45
pour la compatibilité avec l'emulateur je vais voir mais c'est pas vraiment ma priorité
28 juil. 2008 à 10:24
Dans SYST.ASL:
Le passage en mode protégé peut être corrigé comme suis :
Original :
mov cx,8
mov eax,cr0
mov ebx,eax
or ebx,1
jmp $+2
mov cr0,ebx ;passe en mode protégé
mov ds,cx
mov es,cx
mov fs,cx
mov gs,cx
mov cr0,eax ;mode en mode réel flat ;
^^^^^^^^^^^^^ Ceci ne veut rien dire, le mode flat, c'est une organisation de la mémoire qui consiste à avor deux segement englobant chacun toute la RAM, un pour le code, un pour les données. En réalité à ce moment là, tu demande au CPU de passer en mode protégé, c'est à dire que tu va pouvoir profiter des fonctionnalités de droits et autres sur les pages mémoires.
jmp $+2
Correction:
; Indique au CPU de passer en mode protégé.
mov eax, cr0
or ax, 1
mov cr0, eax
; Réinitialise le segment de code.
; un jmp $2 marche aussi, mais je trouve plus propre d'indiquer clairement ce que l'on fait.
; Ce saut va forcer le processeur à vérifier le registre cs, et charger dedans le segment de code comme définit dans la gdt. Nous avons donc accès à 4go de ram, tout en étant encore en mode d'instruction 16bits.
jmp .CS_OK
.CS_OK
; Mise en place des selecteurs de DS, ES, FS, GS et SS.
mov ax, 8
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
; Plus bas, le "jmp 1000h:0000h" passera le CPU en mode d'instruction 32 bit.
Au sujet de tes problèmes de boot dans un émulateur, essaye d'intervertir l'ordre du chargement de la GDT et l'activation de la ligne A20. Cela parait complètement irrationnel, mais un vague souvenir d'avoir eu ce problème.
18 juin 2008 à 21:52
je l'ai aussi testé sur qemu et j'ais eu le meme résultat
je l'ai testé sur plein de vrai ordi et j'ai eu aucun bug de ce genre
je sèche
30 mai 2008 à 15:05
je ne sait pas d'ou ça pet venir mais je vais chercher
hypothèse: le pic émulé n'as pas put etre modifié par mortimer et les irq pointe au mauvais endroit
30 mai 2008 à 14:53
J'ai t?l?charg? l'image IMG.BIN et je l'ai lanc'e dans Qemu, en mode disquette.
L'OS d?marre, affiche le caract?re ">", puis bloque. Quand je tappe sur des touches, elles ne s'affichent pas.
Pouvez-vous me dire si le probl?me est connu ou si c'est un bug.
A plus.
3 mai 2008 à 20:03
Bravo pour ce magnifique système d'exploitation, certe simple, mais complet (gestion des applications et API). Les sources sont bien, même si pas beaucoup commentées, et le principe est bien trouvé. J'aime bien l'interface d'appel des fonctions systèmes, directement par des call, même si une petite manipulation de la table des INT pourrait rendre cet OS plus comptatible avec ses futures version.
En tout cas très bonne source, et bonne continuation.
3 mai 2008 à 15:53
pour tester les programme: copier le dossier "acopier" dans une disquette vide et executer amorc4 du répertoire "uttilitaire"
et ensuite rebooter avec la disquette dans le lecteur