Que fait un PC qui démarre? POST, BIOS, BOOT, lancement d'os 129
Mise sous tension le processeur démarre en mode réel avec CS=FFFF et IP=0000 ou CS=F000 IP=FFF0 l'adresse physique est donc FFFF0 (fin du premier Mbyte de mémoire) on y trouve généralement un saut sur une adresse du BIOS qui doit être en mémoire non-volatile le programme qui s'y trouve est exécuté, traditionnellement il s'appelle POST (Power On Self Test) 130
Que fait le POST détection du hardware (processeur, mémoire disponible, périphériques) initialisations des périphériques identifiés par un mapping de leur ROM en mémoire selon la configuration CMOS (non-volatile) de la machine, passe la main à d'autres programmes du BIOS "setup" qui permet de modifier la configuration "boot" pour lancer un OS peut demander des mots de passe pour continuer 131
Setup du BIOS s'active généralement sur pression d'une touche (F2, DEL) permet de modifier la configuration CMOS très variable d'une machine à l'autre à modifier avec prudence car dans certaines configurations la machine ne fonctionne plus! 132
Exemples d'options CMOS vitesse d'horloge activation/désactivation des périphériques attribution IRQ état de la touche "Num lock" géométrie des disques mot de passe périphériques de boot ce qui nous intéresse aujourd'hui 133
Périphériques de boot ce dont le BIOS à besoin à ce moment c'est d'un programme à charger en RAM et à exécuter d'où peut venir ce programme? disque dur, CD-ROM, floppy, réseau,... la configuration permet souvent de définir une séquence de périphériques à essayer dans l'ordre si un périphérique échoue (pas de CD-ROM dans le lecteur, disque dur vide...), le BIOS passe au suivant 134
Cas du boot sur réseau 1. le BIOS transfère le contrôle à la carte réseau (CALL dans un programme qui se trouve dans la ROM de la carte) 2. la carte réseau essaie d'obtenir une adresse IP (protocole DHCP) 3. la carte réseau essaie d'obtenir un programme à exécuter (standard PXE) 135
DHCP (Dynamic Host Configuration Protocol) protocole utilisé pour l'attribution des adresses IP de manière centralisée la carte réseau de la machine qui démarre envoie un paquet spécial sur le réseau un programme "serveur DHCP" sait reconnaître un paquet provenant d'une machine qui démarre selon sa configuration, il peut attribuer une adresse IP à cette machine et lui répondre dans la réponse il peut lui indiquer ce qu'elle doit faire ensuite 136
PXE (Pre-boot execution Environment) standard que doit implémenter la carte réseau pour permettre le démarrage avec un programme téléchargé Si le serveur DHCP le lui demande, la carte réseau va envoyer d'autres paquets pour trouver un serveur de boot Le serveur de boot sait reconnaître ces paquets et envoyer un programme Le programme est chargé en RAM et commence à s'exécuter 137
Démarrage de la machine reçoit un mini OS optimisé pour les tâches de gestion de parc et de configurations ce n'est ni DOS, ni Windows, ni Linux... l'administrateur effectue les changements sur le serveur de boot la configuration de chaque machine du parc peut être ajustée lors de chaque boot, par le mini OS qui a un contrôle total de la machine 138
Utilisation typique (clonage) l'administrateur configure entièrement un poste il stocke une image complète du disque sur son serveur il dit à son serveur quels autres postes doivent être configurés de la même manière les postes reçoivent le mini OS à chaque boot le mini OS vérifie que le poste a la bonne image possibilité de réinstaller complètement le poste à chaque boot 139
Cas du boot sur disque le tout premier secteur du disque (512 bytes) s'appelle MBR (Master Boot Record) il peut contenir la description de max. 4 partitions [position, taille, type, flag "bootable"] ainsi qu'un petit programme le boot loader (max. 446 bytes) le BIOS charge le boot loader en RAM (0:7C00h) et commence à l'exécuter registre DL dit sur quel disque on a booté 140
Spécification MBR Taille totale : 512 bytes (200h) offset 0 programme "boot loader" offset 1BEh, 1CEh, 1DEh, 1EEh descripteurs des 4 partitions primaires : offset 0 (1BEh) : 80h si la partition est active offset 1 (1BFh) : start head offset 2 (1C0h) : start sector (bits 0-5) offset 3 (1C1h) : start track (bits 8,9 donnés par 6,7 de "start sector") offset 4 (1C2h) : operating system indicator 1= FAT12, 7=NTFS, 0Bh=FAT32, 0FH=partition étendue, 81h=linux, 82h=linux swap,83h=ext2fs... offset 5 (1C3h) : end head offset 6 (1C4h) : end sector (bits 0-5) offset 7 (1C5h) : end track (bits 8,9 donnés par 6,7 de "end sector") offset 8 (1C6h) : secteurs avant la partition (32 bit, little endian) offset 0Ch (1CAh) : taille de partition en secteurs (32 bit, little endian) offset 1FEh signature 55h,0AAh 141
Démarrage de Windows 1) le boot loader recherche une partition active 2) il charge le premier secteur appelé boot sector en RAM et saute sur ce programme 3) le programme du boot sector contient juste ce qu'il faut pour retrouver le fichier ntldr dans la partition active, pour le charger en RAM et pour commencer à l'exécuter 4) ntldr effectue le passage du mode réel au mode protégé ce qui lui permet d'accéder à toute la mémoire, il active aussi la pagination 142
Démarrage de Windows (2) 5) ntldr lit le fichier boot.ini qui peut offrir plusieurs choix d'os à l'utilisateur [OS, paramètres d'os, partition et répertoire, p.ex. /SOS liste les drivers, /BOOTLOG,...] 6) pour démarrer MS-DOS ou Win95/98/Me il charge un fichier bootsect.dos en RAM et repasse en mode réel, comme si on était au point 2) 7) ntldr execute ntdetect.com qui interroge le BIOS pour connaître l'heure, les bus, les disques, souris, ports parallèles, etc. 143
Démarrage de Windows (3) 8) ntldr charge ntoskrnl.exe et hal.dll ntosknrl.exe = noyau qui sait gérer base de registre, processus, securité, I/O et device drivers, PnP, alimentation, WMI, cache fichiers, mémoire virtuelle, objets, LPC ( RPC), runtime library, mutex... hal.dll = Hardware Abstraction Layer gérer les variantes de PC (ACPI, APIC, Multiprocesseur) 9) ntldr propose un menu si l'utilisateur presse F8 10) ntldr charge les "boot device drivers" et passe la main à ntoskrnl.exe 144
Démarrage de Windows (4) 11) ntoskrnl.exe initialise le système (structures de données), les interruptions sont désactivées en phase 0 et activées en phase 1 12) les drivers sont initialisés en phase 1 (détection) 13) le gestionnaire de sessions smss.exe démarre 14) il lance les programmes natifs de BootExecute 15) il initialise Win32 (csrss.exe) et winlogon.exe 16) winlogon.exe lance les services et le gestionnaire de sécurité lsass.exe, l'utilisateur peut ouvrir sa session 145
F8: le mode sans échec une exception dans un driver stoppe tout! parce que les drivers fonctionnent en niveau de privilège 0 et pourraient faire trop de dégâts... mais c'est gênant si le système ne boote plus... le mode sans échec permet de démarrer avec un minimum de drivers et de services mode sans échec mode sans échec avec prise en charge du réseau invite de commande en mode sans échec (au lieu de l'interface graphique "explorer") 146
F8: autres modes inscrire les événements dans un journal (%SYSTEMROOT%\ntbtlog.txt) démarrage en mode VGA dernière bonne configuration mode débogage Référence: Solomon, D.A., Russinovich, M.E., "Inside Microsoft Windows 2000", 3 rd Edition, 2000 147
Simuler un PC dans un PC Le logiciel libre Bochs 148
Qu'est-ce que un programme qui simule un ordinateur Intel x86 configurable du 386 au Pentium Pro simule les périphériques: clavier, souris, VGA, disques, CD-ROM, carte réseau, etc. capable d'exécuter Linux, Windows 95,98,NT, etc. fonctionne sur x86, PPC, Alpha, Sun, MIPS historique projet commercial en 1994 racheté et rendu public par Mandrakesoft en 2000 activement développé sur SourceForge actuellement 149
Version actuelle la version "stable" actuelle est 2.1.1 une nouvelle version 2.2 est annoncée (prerelease) mais n'a pas été testée pour ce cours 150
Simulation simple avec bochs.exe Fenêtre du processus bochs.exe, affiche ce qu'on verrait sur l'écran du PC simulé (Linux mode texte) 151
Ficher bochsrc.bxrc fichier de configuration chargé au démarrage cherché par bochs.exe dans le répertoire courant lancement simplifié si les deux sont dans le même répertoire principales options choix du proc, de la mémoire, des ROM (BIOS, VIDEO), des périphériques (floppy, HD, CD-ROM) définis par fichiers binaires: BIOS-bochs..., VGABIOS-..., disk.img, cdrom.iso, etc. que faire en cas d'erreur p. ex. "panic: action=ask", "error: action=ignore"... 152
Variable d'environnement BXSHARE pour retrouver le répertoire d'installation utilisée dans bochsrc.bxrc exemple, dans un fichier run.bat: set BXSHARE=c:\program files\bochs-2.1.1 bochsdbg -q option pour démarrer directement avec bochsrc.bxrc, sinon mode interactif 153
Simulation avec debugger Fenêtre supplémentaire du processus bochsdbg.exe 154
Debugger visuel pour Windows processus bfe.exe utilise bfehook.dll et bochsdbg.exe, mettre tous ces fichiers au même endroit! 155
Debugger visuel aussi des versions pour OS non-microsoft possibilité de debugger avec le source (lst,map) mode "Bochs immediate" qui permet de taper les commandes pour bochsdbg et voir les résultats directement dans la fenêtre 156
Principales commandes bochsdbg help : liste les commandes possibles help 'commande' : aide spécifique à la commande b 0x7c00 : met un point d'arrêt en CS=0, IP=7C00h c : continue l'exécution jusqu'au prochain point d'arrêt s : exécute 1 instruction n : exécute jusqu'à la ligne suivante dump_cpu : affiche tous les registres q : quitter x /512xb 0x7c00 : affiche 512 bytes en hex à partir de l'adresse 0x7c00 info flags : décode le registre de flags u /20 0x7c00 : désassemble 20 instructions à partir de l'adresse donnée, penser à utiliser tasm /la 157
Documentation Bochs bon "user manual" en ligne et sur le share "softwares" principes de Bochs installation sur différents OS, compilation configuration des différents périphériques référence du debugger comment faire fonctionner un OS donné dans Bochs... 158
Les alternatives commercial : VMWare, Microsoft Virtual PC logiciel libre : plex86 solutions hardware (ICE = In Circuit Emulator) probablement quelques problèmes de performance pour être utilisable en production, mais très intéressant comme produit de "labo" sources disponibles très instructif 159