Path: asterix.local!nnrp5.proxad.net!feeder2-1.proxad.net!proxad.net!wanadoo.fr!opentransit.net!jussieu.fr!ens.fr!not-for-mail From: pornin@bolet.ens.fr (Thomas Pornin) Newsgroups: fr.comp.sys.mac,fr.comp.os.linux.debats Subject: Re: linus en remet une couche Followup-To: fr.comp.os.linux.debats Date: 28 Jun 2001 08:28:56 GMT Organization: Ecole Normale Superieure, Paris Lines: 75 Message-ID: <9heps8$315d$1@nef.ens.fr> References: <1evigrp.1jnech14e708aN%azathoth@club-internet.fr> <1evogfs.qnocs410jmh52N%p99dreyf@criens.u-psud.fr> <9hdcj1$1eul$1@nef.ens.fr> <1evp929.18qrvw72z2vhqN%p99dreyf@criens.u-psud.fr> NNTP-Posting-Host: bolet.ens.fr X-Trace: nef.ens.fr 993716936 99501 129.199.99.10 (28 Jun 2001 08:28:56 GMT) X-Complaints-To: abuse@ens.fr NNTP-Posting-Date: 28 Jun 2001 08:28:56 GMT X-Newsreader: trn 4.0-test69 (20 September 1998) Xref: asterix.local fr.comp.os.linux.debats:4882 According to Emmanuel Dreyfus : > Là je suis super étonné. Pourtant il me semble bien avoir entendu Linux > se plaindre du fait que le kernel etait trop gros, meme avec bzImage. Bon, voilà toute l'histoire : Dans les premiers temps de l'histoire de Linux, le noyau était non compressé, chargé tel quel en "mode réel", c'est-à-dire dans les 640 premiers kilo-octets, et c'était une limite absolue pour sa taille. Assez rapidement (quelque part vers les version 0.99), il a été mis au point un système plus fin, où le noyau est chargé toujours dans ces 640 Ko, mais compressé ; l'image commence par un code capable d'activer le "mode protégé", donc d'utiliser la mémoire haute (au-delà du premier méga-octet), puis de faire la décompression. C'est le "zImage". À partir de ce moment, il faut que la machine dispose d'au moins 2 Mo de ram, car il en faut 1 au-dessus du premier méga-octet pour accueillir le noyau décompressé. Bien sûr, la zone contenant le noyau compressé est libérée après coup. La limite pour la taille du noyau compressée en zImage est de 508 Ko (le reste est pris par les fioritures du genre mémoire pour le bios, et la mémoire utilisée par le code de décompression). Le noyau Linux étant un logiciel, il a tendance à l'obésité, et ces 508 Ko qui semblaient suffisant se sont avérés un peu serrés (à ce sujet, dans les sources du noyau, linux/arch/i386/boot/bootsect.S, on trouve ceci : "currently system is at most (8*65536-4096) bytes long. This should be no problem, even in the future. I want to keep it simple. This 508 kB kernel size should be enough" ; comme quoi Linus Torvalds peut faire la même bévue que Bill Gates, plus de 10 ans plus tard ; surtout que ces contorsions sont une conséquence directe de ladite bévue antérieure). Du coup, il a été inventé une variante du zImage, nommée "bzImage". Là encore, le noyau est compressé, mais prévu pour être chargé directement au-delà du premier méga-octet. Cela suppose une "intelligence" supérieure de la part du bootloader, notamment lilo ne savait pas faire avant une certaine version (la 19, je crois). Mais ça fait sauter la limitation de taille, qui désormais est plutôt du type : noyau compressé + noyau décompressé, ça doit tenir dans la mémoire au-delà du premier méga-octet. > Mais alors pourquoi on ne fait pas de gros kernel avec les protocoles > réseaux et les drivers de cartes réseau dedans? Y'a des jours où ca > serait hachement plus pratique. -- D'abord, ça se fait. Du moins, les distributeurs ont tendance à faire des noyaux assez gros. -- Si le noyau doit aller sur une disquette de boot, il ne doit pas être trop gros. -- La mémoire prise par le noyau (décompressé) est chère : je rappelle que c'est une zone de mémoire non swappable. -- Pour ce qui est du matériel, si tout est dans le noyau, ça veut dire détection de plein de trucs au boot ; les PC étant ce qu'ils sont, cette détection va ramer, voire planter la machine (la détection, c'est un peu du "on envoie quelques commandes sur les ports possibles, on voit ce qui répond"). -- Si tu veux faire un énorme noyau, juste fais-le. Bon, j'enlève fcsm du crosspost (ça m'étonnerait que ça les intéresse ; sur les Mac, qui sont une architecture décente comparée aux PC [mais quelle architecture ne serait pas un bonheur comparée aux PC ?], il n'y a pas ce genre de limitations). Une fois n'est pas coutume, je rajoute une signature. -- Thomas Pornin "640 kB ought to be enough for everyone" -- Bill Gates, 1981 "This 508 kB kernel size should be enough" -- Linus Torvalds, 1991