Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/05/2021, à 14:56

Nuliel

adressage CHS

Bonjour,
J'aurais une petite question sur l'adressage CHS: je vois généralement 255 têtes, 63 secteurs par piste, et un nombre de cylindres dépendant de la taille du disque. Mais j'imagine qu'il y a pas 255 têtes par disques, ni 63 secteurs par piste tout le temps? Et du coup, comment connaître le nombre réel de têtes et de secteurs par piste d'un disque dur?
D'ailleurs le disque accepte t'il qu'on lui demande des secteurs avec adressage LBA ou il y a une conversion vers adressage CHS avant (par le noyau?)?
Je sais bien que l'adressage CHS a été remplacé par l'adressage LBA, mais je me demande en fait si l'adressage CHS est encore utilisé, que ce soit au sein du disque, ou ailleurs.

Hors ligne

#2 Le 14/05/2021, à 17:05

ares

Re : adressage CHS

Bonjour,

Hum ! revenons à l'époque de la préhistoire...
Chaque DD contient une Rom. Cette Rom envoie ses informations demandées par le Bios à l'initialisation.
Le Bios et l'OS n'accèdent pas au programme de la Rom¹ du DD.
Les valeurs « 255 têtes, 63 secteurs » sont un "masque" pour le Bios et L'OS.
Ce type « d'adressage » permet d'avoir un DD de 8Go.
Le BIOS a besoin des infos de la ROM pour initialiser la "table d’interruption" en mode réel.
Cette table d’interruption est "reconstruite" quand le CPU passe en mode protégé avec des OS type Unix, GNU/Linux...
Et en plus le BIOS "boot" en 0/0/1 = premier secteur du DD !

Au delà, c'est plutôt le mode LBA (adressage par bloc logique) qui est utilisé. C'est la méthode du ECHS.
Ou le plus simple est de masquer l'interface du DD avec un contrôleur SCSI et donc indépendant du BIOS.
L'OS fournissant le pilote SCSI.

Physiquement - sauf erreur - le maximum est de 4 plateaux 8 têtes.
La capacité d'un DD est une capacité "utile" et n'intègre pas les bits de synchronisations, etc.
En effet, la densité de stockage varie en fonction de la position des têtes de lecture/écriture.
le nombre de secteurs est plus élevé sur les cylindres extérieurs.

Et n'oublions pas des techniques d'enregistrement (MFM,ZBR, etc) qui ont formidablement augmenté (densité d’octets/mm²).

Et en 2021, le principe n'a pas changé avec les SSD :
* enregistrement des bits verticalement (porte NAND empilés)
* même principe (secteur/cylindres, etc)
* ROM¹

J'espère n'avoir pas trop écrit de conneries... l'histoire, c'est pas trop mon truc smile

@+

¹) Sauf en cas de mise à jour de la ROM

Hors ligne

#3 Le 14/05/2021, à 17:16

Nuliel

Re : adressage CHS

Merci ares pour ta réponse. Effectivement c'est la préhistoire smile
En fait je me suis posé cette question sur CHS parce que j'avais fait une copie d'un disque dur et j'avais pu remarquer un motif qui se répétait (un secteur défectueux puis des secteurs ok puis un secteur défectueux puis....), et je me demandais si on pouvait prévoir à partir de quelques secteurs défectueux les suivants. Mais c'est vrai que le nombre de secteurs est plus grand sur les cylindres extérieurs. D'où ma question sur l'utilisation actuelle de CHS.
Merci pour ces explications smile

Dernière modification par Nuliel (Le 14/05/2021, à 17:18)

Hors ligne

#4 Le 14/05/2021, à 18:23

ares

Re : adressage CHS

Nuliel a écrit :

(...) et j'avais pu remarquer un motif qui se répétait (un secteur défectueux puis des secteurs ok puis un secteur défectueux puis....), et je me demandais si on pouvait prévoir à partir de quelques secteurs défectueux les suivants.(...)

Ta réponse n'indique que j'ai oublié de préciser que depuis longtemps un DD intègre un CPU souvent programmable.
Cela permet d'avoir des compteurs et donc une table physique du DD.
En plus avec la mémoire cache, des algorithmes gèrent par le CPU l'écriture et la lecture du DD à chaque demande du BIOS ou de l'OS.

Dans le cas d'un SSD (quatre types de portes logiques pour stocker un bit) :
* mémoire cache temporaire (lecture & écriture)
* algorithmes de vidage/chargement cache mémoire vers les portes logiques de stockage contrôlé par le CPU.
* le CPU répond aux interruptions de l'OS en temps réel (TRIM)
* le CPU répond à ses interruptions prioritaires (dite non masquables) en cas de panne alimentation ou erreurs lecture/enregistrement.

L'écriture ou la lecture d'un bit se fait à des tensions différentes.
Comme un SSD repose sur la technologie du silicium ont connaît bien les principes physiques de vieillissement.
En milieu "pro" on utilise une technologie de portes logiques SLC pour 1 bit par cellule qui garantit un taux de panne sur 5 ans < à un DD mécanique "pro".
Souvent exprimé en X To/jour.

Hors ligne

#5 Le 14/05/2021, à 19:55

Nuliel

Re : adressage CHS

Que veux tu dire par programmable? Tu veux dire qu'il y a une puce flash pour contenir le code à exécuter?

En fait, je suis sur un projet pour récupérer plus facilement des données sur des disques durs en mauvais état (mon but est de faire un logiciel dans l'idée de ddrescue et testdisk, mais qui récupérerait plus intelligemment les données que ddrescue)

Dernière modification par Nuliel (Le 14/05/2021, à 19:56)

Hors ligne

#6 Le 15/05/2021, à 08:03

ares

Re : adressage CHS

Nuliel a écrit :

Que veux tu dire par programmable? Tu veux dire qu'il y a une puce flash pour contenir le code à exécuter?

Exactement !
C'est un ASIC(circuit intégré pour une application) ou SoC(système sur puce) dédié à un usage spécifique.
Circuit contenant un CPU, de la mémoire, interfaces(I/O), rom/flash (programme) etc.
Ce type de ASIC ou SoC est fabriqué pour des séries de 100 000 unités ou plus. Le coût de développement est cher.

Un DD¹ répond à des normes & protocoles d'entrée/sortie et d'adressage, tu ne « vois » pas l'ASIC/SoC².
Ton projet doit répondre à ces prérequis et te permet d'être « indifférent » aux marques des DD.
Ca c'était hier, aujourd'hui vu le coût d'un CPU on utilise peut-être un CPU plus une eprom et de la mémoire.
Je suis plus dans le "circuit",... un mec hasbeen.
D'ailleurs il me semble avoir lu que certain type de DD intègre en plus une puce de cryptage temps réel.

On retrouve ce même principe pour les imprimantes et c'est même plus complexe.
Une « imprimante » c'est du 10ppm³ à 300ppm (départ, transport, transfert, fixation et module de finition(brochure, agrafe,etc) en temps réel
Il existe une multitude de protocoles pour ordi, mini-informatique, mainframe.
Et si tu ajoutes la couleur (4 à 7 couleurs) avec contrôle temps réel de la gamme chromatique, température couleurs...
Pour une imprimante type "presse numérique" c'est plus de 3 cartes mère avec X micro-contrôleurs. Y a un serveur en interne pour le "client".
Pour un scanner bas de gamme > 100ppm c'est une option, idem pour la rom de reconnaissance(OCR).
Ce domaine a plus évolué que le DD. Évolution qui fait passer Apple et Lenovo, Samsung etc pour des "outils" du Moyen Âge smile

Bonne chance pour ton projet & dans l'attente de sa découverte smile


¹) il existe plusieurs types de DD en fonction des usages.
²) sauf pour le fabricant pour l'adressage d'une mise à jour.
³) impression page par minute(ppm)

Hors ligne

#7 Le 15/05/2021, à 10:55

Nuliel

Re : adressage CHS

Oui, je me suis déjà cassé les dents sur un disque qui avait la mauvaise idée d'être chiffré avec un mot de passe par défaut (dont l'utilisateur n'a pas connaissance) et que le déchiffrement opère sur le bridge usb, et que le disque a une faiblesse au niveau du port du disque,... à se demander si c'est fait exprès...
Par normes et protocoles, j'imagine que tu parles de la norme SATA?
Sur un de mes disques externes relativement récent (WD my passport), il y a 2 puces flash (apparemment les deux sont pour le code à exécuter, d'ailleurs faudra que je fasse un dump pour voir ce qu'il y a dedans), une puce pour la RAM, une puce pour gérer le moteur, et une puce Marvell 88I9146-TFJ2 qui est le processeur/controller.

Pour mon projet, je compte pour l'instant me baser sur les fonctions classiques style fread... Mais plus tard je me renseignerai sur les fonctions de bas niveau.
Pour l'instant je n'ai que récupéré le premier secteur et parsé le MBR, je pense que dans les prochains mois je devrais avoir un truc en état de marche.

Dernière modification par Nuliel (Le 15/05/2021, à 10:56)

Hors ligne

#8 Le 15/05/2021, à 12:11

ares

Re : adressage CHS

Nuliel a écrit :

Oui, je me suis déjà cassé les dents sur un disque qui avait la mauvaise idée d'être chiffré avec un mot de passe par défaut (dont l'utilisateur n'a pas connaissance) et que le déchiffrement opère sur le bridge usb, et que le disque a une faiblesse au niveau du port du disque,... à se demander si c'est fait exprès...

C'est normal, car tu n'as pas le datasheet des composants.
Avec la doc, tu passes outre et réinitialise, mais avec perte des données.
Ou tu désassembles la ROM pour "casser" le mot de passe ou "sauter".

Nuliel a écrit :

Par normes et protocoles, j'imagine que tu parles de la norme SATA?

Oui wink

Nuliel a écrit :

Sur un de mes disques externes relativement récent (WD my passport), il y a 2 puces flash (apparemment les deux sont pour le code à exécuter, d'ailleurs faudra que je fasse un dump pour voir ce qu'il y a dedans), une puce pour la RAM, une puce pour gérer le moteur, et une puce Marvell 88I9146-TFJ2 qui est le processeur/controller.

our le Marvell on trouve le datasheet & PCB

Nuliel a écrit :

Pour mon projet, je compte pour l'instant me baser sur les fonctions classiques style fread... Mais plus tard je me renseignerai sur les fonctions de bas niveau.
Pour l'instant je n'ai que récupéré le premier secteur et parsé le MBR, je pense que dans les prochains mois je devrais avoir un truc en état de marche.

C'est le graal les fonctions "bas niveau"
Varie en fonction des fabricants, c'est les I/O qui sont importantes.
Le "dev" des composants & fabrication d'un ASIC/SoC coûte un bras.
Le composant ASIC/SoC est souvent vendu à la concurrence. Samsung est l'exemple type.

Les fonctions "bas niveaux", c'est le niveau 1 du SAV chez un client. Résolution de 99,99 % des problèmes
Au-delà  tu fais un "core dump" pour les "ingés"... et t'attends la mise à jour ou la procédure.
Comme le client ne paye pas, ça coûte un max. Audit, recherche du responsable pour la "charrette" sad

Exemple fonctions "bas niveau" :
Quand j'étais jeune beau, intelligent & modeste¹, j'avais trouvé la doc des cartes VGA.
À cette époque, le jeu DOOM monopolisait les joueurs.
J'avais reprogrammé les horloges de la carte VGA pour avoir un signal compatible avec une TV entrée péritel.
On pouvait jouer à DOOM sur un écran TV plus grand qu'un écran de PC.
J'avais refilé l'astuce à un collègue fana de ce jeu, car je suis pas joueur.
À cette époque, je voulais passer ma distri GNU/Linux sur TV, mais on m'a demandé d'autres trucs...

¹) qui a dit « et aussi très con !!! » lol

Dernière modification par ares (Le 15/05/2021, à 12:14)

Hors ligne

#9 Le 15/05/2021, à 13:33

Nuliel

Re : adressage CHS

Pour l'histoire du mot de passe, je pense que cela s'explique par le fait que lorsque l'utilisateur met un mot de passe sur un disque dur, il ne va pas attendre que le disque entier se chiffre avec son mot de passe, mais il doit probablement y avoir dérivation d'une clé à partir du mot de passe de l'utilisateur, possiblement basé sur une clé maître ne changeant pas pour un modèle donné.
Je crois pas que la clé soit dans la ROM, mais vraiment dans le bridge usb.

Ok pour les fonctions de bas niveau, il est probable que je doive faire un peu de reverse du coup

Pas mal l'idée de passer DOOM sur la TV! (pour ma part j'ai jamais joué à DOOM, uniquement à DOOM 2016)

Dernière modification par Nuliel (Le 15/05/2021, à 13:33)

Hors ligne

#10 Le 15/05/2021, à 14:59

Nuliel

Re : adressage CHS

Dans les trucs de la préhistoire: https://en.wikipedia.org/wiki/Design_of … ile_system (je me casse actuellement là tête dessus)

Hors ligne

#11 Le 15/05/2021, à 17:42

ares

Re : adressage CHS

Nuliel a écrit :

Ok pour les fonctions de bas niveau, il est probable que je doive faire un peu de reverse du coup

Heureusement il n'existe que 2 familles de CPU RICS/CISC.
Et comme on réinvente pas la roue dans le silicium c'est toujours les mêmes blocs de portes logiques.
Tu trouves chez les constructeurs des outils de "dev" pour leurs ASIC/SoC.

Nuliel a écrit :

(je me casse actuellement là tête dessus)

De mémoire et sauf erreur, il te manque aussi le tableau d'appel de int 13h du BIOS

Exemple :

global      _start
_start:
mov ax, 0001h	;correspond à une fonction (ex : renvoie les valeurs CHS du lecteur sélectionner en ah)
int 13h		; appel int BIOS
; retour du résultat dans les registres bx, cx, dx
; bx = nbr cylindres
; cx = nbr de têtes
; dx = nbr de secteurs
; ax = 0 = appel terminé sans erreur
; ax > 0 voir tableau des codes erreurs (ex : 0001h pas de lecteur détecté, etc)

Bon courage dans le Jurassic !

Hors ligne

#12 Le 15/05/2021, à 17:57

Nuliel

Re : adressage CHS

Je ne comprends pas, pourquoi faut il passer par un appel au BIOS pour lire/écrire des secteurs du disque? (en mettant AH à 02h dans https://en.wikipedia.org/wiki/INT_13H#L … h_services ).
Ah non c'est normal, je viens de lire https://en.wikipedia.org/wiki/BIOS_inte … BIOS_calls

Bon courage dans le Jurassic !

Merci smile

Dernière modification par Nuliel (Le 15/05/2021, à 18:04)

Hors ligne

#13 Le 15/05/2021, à 18:17

ares

Re : adressage CHS

Désolé, je comprends pas trop le « casse tête ». Tu as le tableau des définitions FAT.
Sauf erreur sous DOS, c’était : int 21h (API). Tu ne devrais pas avoir de prb pour obtenir la liste des API DOS

Tu peux donner un exemple du « casse tête » ? wink

Hors ligne

#14 Le 15/05/2021, à 18:23

Nuliel

Re : adressage CHS

En fait la page wikipedia est assez longue, et ce genre de trucs

wikipedia a écrit :

Since DOS 2.0, valid x86-bootable disks must start with either a short jump followed by a NOP (opstring sequence 0xEB 0x?? 0x90[13][14] as seen since DOS 3.0[nb 3]—and on DOS 1.1[15][16]) or a near jump (0xE9 0x?? 0x??[13][14] as seen on most (Compaq, TeleVideo) DOS 2.x formatted disks as well as on some (Epson, Olivetti) DOS 3.1 disks). For backward compatibility MS-DOS, PC DOS and DR-DOS also accept a jump (0x69 0x?? 0x??)[13][14][17] on removable disks. On hard disks, DR DOS additionally accepts the swapped JMPS sequence starting with a NOP (0x90 0xEB 0x??),[17] whereas MS-DOS/PC DOS do not. (See below for Atari ST compatibility.) The presence of one of these opstring patterns (in combination with a test for a valid media descriptor value at offset 0x015) serves as indicator to DOS 3.3 and higher that some kind of BPB is present (although the exact size should not be determined from the jump target since some boot sectors contain private boot loader data following the BPB), while for DOS 1.x (and some DOS 3.0) volumes, they will have to fall back to the DOS 1.x method to detect the format via the media byte in the FAT (in logical sector 1).

c'est assez indigeste, et ça c'est un champ seulement

Dernière modification par Nuliel (Le 15/05/2021, à 18:24)

Hors ligne

#15 Le 15/05/2021, à 20:03

ares

Re : adressage CHS

Si j'ai bien compris... je suis pas spécialiste du DOS smile

boot depuis BIOS ou OS, On lit CHS = 0/0/1 = premier secteur
On doit trouver :
* jmp 0x?? ; opcode hexa de l'instruction = e9h et longueur du saut =  ??h
la prochaine instruction est :
* nop ; opcode hexa de l'instruction = 90h

Donc on a :
* initialisation du BIOS, puis le BIOS charge CHS (0/0/1) dans une zone mémoire et le BIOS « passe la main » qui est obligatoirement un saut(jmp)
DS,ES pointent sur la zone mémoire, idem pour EP & BP.
Je suppose que si le BIOS ne trouve aucun secteur, donc pas de périphérique de stockage, alors le BIOS affiche un message

Exemple :

global      _start
_start:
jmp ??h
nop

; exemple d'un début du programme boot pourave
		jmp	version_init
		nop	; obligatoire !
version_init:		; c'est un exemple ! :)
		xor ax,ax
		mov 0eh,ah
		mov $mes_ver,si	;DS est déjà initialisé sur la zone mémoire
		mov cl,$long_mess ; et non le registre "al" !
print_char:
		lodsb
		cmp 0h, cl
		je suite
                dec cl
		int 10h
		jmp print_char

suite:
(etc)

mes_ver: "C'est ma version !"

On commence toujours par jmp (il existe plusieurs types de sauts)
Le reste c'est les exceptions constructeurs qui livre un OS modifié.
Et c'est uniquement valable pour DOS !

Nuliel a écrit :

c'est assez indigeste, (...)

- Oui, bon appétit...
- non merci, j'en ai déjà beaucoup trop mangé... et je voudrais pas te priver, mets-le au congélo, ça se conserve longtemps... c'est impérissable wink

Édite : erreur de registre, cl est bien le compteur...  y a plus simple avec un "loop" !

Dernière modification par ares (Le 15/05/2021, à 22:06)

Hors ligne

#16 Le 15/05/2021, à 20:41

Nuliel

Re : adressage CHS

Ok, merci pour les explications.
Plus qu'à comprendre tout et coder un parseur smile

Hors ligne

#17 Le 17/05/2021, à 11:41

Nasman

Re : adressage CHS

Pour comprendre comment fonctionnent les interruptions du bios, j'utilise le site http://www.ctyme.com/intr/int.htm

Concernant le fat, j'ai été à me pencher dessus le jour où :
- j'ai cloné un (très) vieux disque avec un Win95 sur lequel était un programme de pilotage de manip (dont on n'avait plus les sources pour réinstaller). Le clonage effectué (il fallait trouver un disque de moins de 8 Gio pour cause de bios très vieux). Le W95 refusait de démarrer en raison d'une géométrie de disque différente de l'original; J'ai du tripatouiller dans les en-tête de la partition fat32 pour modifier le nombre de têtes du disque.
La correction faite, le système a démarré. Les infos que j'ai utilisées se trouvent par exemple sur https://fr.wikipedia.org/wiki/File_Allocation_Table


PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#18 Le 17/05/2021, à 13:11

Nasman

Re : adressage CHS

Pour information, lors du démarrage en mode bios, grub-pc (en fait boot.img) fait appel à des fonctions du bios pour détecter les capacités de ce dernier. Selon la présence ou la prise en charge de certaines fonction du bios le chargement s'effectuera en utilisant des fonctions axées LBA comme le disk packet address (ensemble d'octets contenant entre autre l'adresse LBA du secteur à charger) soit en transformant l'adresse LBA en données CHS en utilisant les données de géométrie du disque. Une portion de code du mbr est chargé de cette tâche. Voir ici


PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#19 Le 17/05/2021, à 16:40

ares

Re : adressage CHS

Nasman a écrit :

Pour comprendre comment fonctionnent les interruptions du bios, j'utilise le site http://www.ctyme.com/intr/int.htm

Non ! wink
Moins de 25 interruptions pour le BIOS avant 2000.

@+

Hors ligne

#20 Le 17/05/2021, à 17:06

Nuliel

Re : adressage CHS

Les interruptions listées dans le lien sont bien toujours d'actualité sur des pc récents? J'imagine qu'il y a des standards pour ça

Dernière modification par Nuliel (Le 17/05/2021, à 17:06)

Hors ligne

#21 Le 17/05/2021, à 17:31

ares

Re : adressage CHS

La liste de mon lien a certainement évolué en 20 ans.
Il manque la prise en charge PXE, périphériques USB, WAN, etc.

Les fournisseurs de BIOS travaillent sur des prérequis qu'ils ont eus même défini.
C'est eux qui font le « standard ». Pareille dans d'autres secteurs de l'industrie.

Hors ligne

#22 Le 17/05/2021, à 19:12

Nuliel

Re : adressage CHS

Ok.
Tite question: pour le secteur FS info, il y a dans le secteur de boot son emplacement (plus précisément son cluster), on a aussi le premier cluster du répertoire racine, mais comment trouver t'on l'emplacement de la/les FAT?

Hors ligne

#23 Le 17/05/2021, à 22:00

Nuliel

Re : adressage CHS

Ah c'est bon, j'ai trouvé: il y a des secteurs réservés entre le secteur de boot de la partition FAT32 et la FAT.

Hors ligne

#24 Le 17/05/2021, à 22:50

ares

Re : adressage CHS

@Nuliel

Je suis pas spécialiste... pas taper smile

La FAT est entre le premier secteur de boot & le secteur racine.
Comme il faut compter en cluster :
La FAT est entre le premier secteur n°1 du cluster n°1 de boot & le secteur n°1 du premier cluster "racine".

* Pour la copie du secteur de boot ?
Comme c'est sur deux octets, sur une disquette j'aurais placé la copie à la fin.
Sur un DD, la copie pourrait être placée en fin de FAT.

* Pour le nombre de secteurs réservés plus boot ?
On peut supposer qu'ils sont entre la FAT et la "racine"

* Pour les secteurs cachés (0 si pas partitionné)
On peut supposer qu'ils se trouvent après le boot
Valeurs a ajouté pour un DD pour l'emplacement de la FAT de la partition n°1 du DD

Avec des multiples 512, 1024, etc les instructions de décalages (logiques) doivent être plus efficaces que des instructions arithmétiques.

Pas taper, hein ? smile

Édit : Oups, ta réponse est plus rapide smile
Tu peux me confirmer et détailler SVP ? Merci.

Dernière modification par ares (Le 17/05/2021, à 22:52)

Hors ligne

#25 Le 18/05/2021, à 09:05

Nuliel

Re : adressage CHS

Alors la structure de FAT32 est la suivante (on trouve le premier secteur de la partition FAT32 dans le MBR):

secteur de boot | secteurs réservés (le secteur FS info est dedans?) | FAT1 | FAT2 | clusters de données       (représente la majeure partie de la partition)        | un peu d'espace inutilisé
La FAT2 est une copie de la FAT1, histoire d'avoir de la redondance (par contre pourquoi les avoir collés...)

Le secteur racine commence au début du cluster de données.

Il peut y avoir des secteurs cachés, avant le secteur de boot?

Voilà où j'en suis dans mon avancement sur FAT32. Mon disque virtuel de test est foireux, il faut que je le refasse pour tester correctement mon programme.

Hors ligne