OVH Cloud OVH Cloud

Linux : The sky is the limit (et encore, c'est pas sûr!)

117 réponses
Avatar
Inspecteur Morvandieu
http://www.bbspot.com/News/2008/12/linux-on-a-potato.html

Jusqu'où iront-ils nos génies ?

10 réponses

Avatar
Kojak
Le Thu, 07 Jan 2010 19:47:56 +0100,
NiKo a écrit :

Ce que je disais était quand même dans l'idée où j'ai tout faux ?
Le 68k change de tâche de façon 'hard', et non grâce à   un schedduler
géré dans le noyau comme ce qu'on trouve sur i386 ?



Heu ! Qu'entends-tu par «changer de tâche de façon hard » ? Et, question
subsidiaire, qu'entends-tu par «schedduler géré par le noyau » ?

--
Jacques.
Avatar
JKB
Le 07-01-2010, ? propos de
Re: Linux : The sky is the limit (et encore, c'est pas sûr!),
Kojak ?crivait dans fr.comp.os.linux.debats :
Le Thu, 7 Jan 2010 17:37:05 +0000 (UTC),
JKB a écrit :

Le 07-01-2010, ? propos de
Re: Linux : The sky is the limit (et encore, c'est pas sûr!),
Kojak ?crivait dans fr.comp.os.linux.debats :
> Le Thu, 07 Jan 2010 15:40:48 +0100,
> NiKo a écrit :
>> Sur le 68k, on peux effectuer une interruption directement sur une
>> patte du processeur par une horloge externe.
>
> Non.

Je ne vois pas pourquoi. J'ai conçu à l'époque des cartes de
codage qui embarquaient des 6809 et j'avais deux horloges, l'une pour
le processeur (8 MHz) et une autre qui devait être à 320 Hz si ma
mémoire est bonne pour passer d'une tâche à une autre
(réception/codage/émission), cette horloge étant directement
câblée sur la patte FIRQ (active sur front et non sur niveau).



Dans le cadre du 6809 oui...

n'empêche de coller une horloge sur une interruption.



... mais là il est question du 68000. Si tu colles ta sortie horloge
sur l'une des entrées ^IPL[0-2] tu risques d'avoir des surprises (ou
au mieux de limiter tes lignes d'interruptions). Tu dois passer par
un encodeur 8->3 et l'a on est plus dans le cas de «je branche mon
horloge sur une patte du processeur». Mais bon, ou on fait les choses
correctement, ou on bricole, à chacun de voir ;-)



J'ai aussi bricolé avec les 68k, et je ne vois toujours pas ce qui
empêche la génération d'interruptions par un timer externe. Par
ailleurs, à mon époque pas trop lointaine, on utilisait toutes les
astuces pour limiter le nombre de composants. Donc brancher une
horloge sur une patte d'interruption, ce n'est pas ce qui nous
faisait peur.

Je ne parlerais pas des x86 que je n'ai jamais mis en oeuvre (j'ai
des mauvais souvenirs avec les 8080, 8085 et dérivés 8031, 8051...).

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
talon
NiKo wrote:
Kojak a écrit :
>
> .... mais là il est question du 68000. Si tu colles ta sortie horloge
> sur l'une des entrées ^IPL[0-2] tu risques d'avoir des surprises (ou
> au mieux de limiter tes lignes d'interruptions). Tu dois passer par
> un encodeur 8->3 et l'a on est plus dans le cas de «je branche mon
> horloge sur une patte du processeur». Mais bon, ou on fait les choses
> correctement, ou on bricole, à chacun de voir ;-)
>

Ce que je disais était quand même dans l'idée où j'ai tout faux ?
Le 68k change de tâche de façon 'hard', et non grâce à un schedduler
géré dans le noyau comme ce qu'on trouve sur i386 ?



Je crois que c'est exactement pareil dans les deux cas. Il y a une
horloge qui envoie des interruptions au processeur. Recevant
l'interruption il se branche (dans les deux cas) sur la routine de
gestion de l'interruption qui a été installée au boot par l'OS. Cette
routine passe la main au scheduler à la fréquence programmée dans
le gestionnaire d'interruption.

--

Michel TALON
Avatar
Kojak
Le Thu, 07 Jan 2010 22:37:24 +0100,
NiKo a écrit :

J'entends par 'de façon hard' : (Pfuut, pas simple a expliquer)

Si tu as deux tâches en cours d'exécution, dans un monde idà ©al, le
processeur accorde la moitié de son temps à chaque tâche. Sur 68000
[...]
et avec la puissance d'aujourd'hui. Mais je ne cherche pas, je sais
que c'est du à l'architecture pourrie des PC.

Je sais pas si je suis clair, et je sais pas si j'ai raison.



N'étant pas encore encore bien éveillé, je ne porterais pas de jugement
sur la clarté de ta question... Ni de ma réponse d'ailleurs. :-)

Sinon, pour faire simple et rapide, quand ton réveil sonne, tu sais
que tu as quelque chose à faire. mais ce n'est pas le réveil qui te
dit quoi faire, c'est ton planning. Le timer est comme ton réveil,
il balance un «Ah que coucou !» sur ta ligne d'interruption pour
rappeler au CPU qu'il à quelque chose à faire. C'est tout ! Au CP U,
donc, de déterminer en fonction du type de sonnerie (interruption) ce
qu'il doit faire et la il lit et exécute le planning (scheduler) pour
gérer les changements de tâches.

Donc, pour rester dans le simple on dira :

sonnerie/timer = hardware
et
planning/scheduler = software.

Voilà, c'est très imagé, mais l'idée est là.

--
Jacques.
Avatar
Kojak
Le Thu, 7 Jan 2010 20:17:32 +0000 (UTC),
JKB a écrit :

J'ai aussi bricolé avec les 68k, et je ne vois toujours pas
ce qui empêche la génération d'interruptions par un timer externe. Par



Attention, je ne parlais pas de l'utilisation d'un timer externe en
soit, mais du bridage des lignes d'interruption.

Rien ne t'empêche, bien évidemment, de connecter ton timer, ou qu oi
que ce soit d'autre, directement sur les broches d'interruption. Si
tu n'as besoin de gérer qu'une, deux ou trois lignes d'interruption,
alors tu peux tout à fait utiliser les entrées brut de fonderies
modulo la compatibilité des signaux (fan-in/fan-out, ...) et, donc,
les vecteurs associés (ça m'est arrivé de faire ce genre de manip
dans le cadre de tests fonctionnels rapides ;-) ).


ailleurs, à mon époque pas trop lointaine, on utilisait
toutes les astuces pour limiter le nombre de composants. Donc
brancher une horloge sur une patte d'interruption, ce n'est pas ce
qui nous faisait peur.



Les économies de composants, j'ai connu aussi, jusqu'à adapter la
logique en fonction des composants dispos (j'aimais pas trop cette
partie de l'étude). Mais bon, pour des séries de quelques cartes à
une centaine (voire un millier) de cartes, l'ajout d'un encodeur ne
faisait pas une grosse différence sur le coût final de production et
surtout permettait d'avoir des lignes RUF (c'est toujours utiles, et
ça l'a été). De plus, dans certain cas (e.g. automates) avoi r plus
d'une ligne d'interruption avait des avantages indéniables (d'ailleurs
le 68000 était bien foutu pour ça).

Maintenant, je suis tout à fait d'accord qu'il est possible de limiter
à outrance la schématique et les coûts en utilisant le stric t minimum
fonctionnel, si ce strict minimum cadre avec le cahier des charges,
évidemment.

Je ne parlerais pas des x86 que je n'ai jamais mis en oeuvre



Beuark :-)

(j'ai des mauvais souvenirs avec les 8080, 8085 et dérivés 8031,
8051...).



Bah, j'ai développé des cartes à base de 8051 (contrainte im posée :-/ )
et finalement, je n'ai pas trouvé ce microcontrôleur trop mauvais pour
faire dans le tout-venant :-) Cela dit, je suis assez d'accord sur le
fait que ce n'est pas ce qui se fait de mieux dans le genre. De toute
façon, j'en ai pas gardé un souvenir impérissable non plus.

--
Jacques.
Avatar
Toxico Nimbus
Le Thu, 07 Jan 2010 18:27:14 +0100, Kojak a écrit :

Le Thu, 07 Jan 2010 15:40:48 +0100,
NiKo a écrit :

Sur le 68k, on peux effectuer une interruption directement sur une
patte du processeur par une horloge externe.



Non.



Si et tu donnes la solution plus loin. Il suffit de connecter ton horloge
sur les 3 pattes d'interruption. Le niveau 7 étant non masquable, tu peux
t'en servir pour faire de la préhemption et donc du task-switch.

De mémoire, c'est la patte STROBE



Non plus.

De ce que je me souviens, si on parle bien du 68000, il y a 3 lignes
d'interruption (actif bas) permettant 7 lignes d'interruption et donc
affectées à 7 vecteurs d'exception (25 à 31).

La ligne d'horloge externe sert simplement à cadencer le processeur.



--
Toxico Nimbus
Avatar
Toxico Nimbus
Le Thu, 07 Jan 2010 19:47:56 +0100, NiKo a écrit :

Kojak a écrit :

.... mais là il est question du 68000. Si tu colles ta sortie horloge
sur l'une des entrées ^IPL[0-2] tu risques d'avoir des surprises (ou au
mieux de limiter tes lignes d'interruptions). Tu dois passer par un
encodeur 8->3 et l'a on est plus dans le cas de «je branche mon horloge
sur une patte du processeur». Mais bon, ou on fait les choses
correctement, ou on bricole, à chacun de voir ;-)




Ce que je disais était quand même dans l'idée où j'ai tout faux ? Le 68k
change de tâche de façon 'hard', et non grâce à un schedduler géré dans
le noyau comme ce qu'on trouve sur i386 ?



C'est plutôt faux pour moi. Si tu peux effectivement déclencher une
préhemption absolue via les lignes d'interruption du processeur, il te
faudra toujours un bout de soft pour gérer le scheduler et l'empilement
de contexte. Tout ce que fera le processeur pour toi, c'est switcher la
pile pour la pile d'interruption et lancé le code du vecteur
d'interruption idoine.

--
Toxico Nimbus
Avatar
Toxico Nimbus
Le Thu, 07 Jan 2010 22:37:24 +0100, NiKo a écrit :

Kojak a écrit :
Le Thu, 07 Jan 2010 19:47:56 +0100,
NiKo a écrit :

Ce que je disais était quand même dans l'idée où j'ai tout faux ? Le
68k change de tâche de façon 'hard', et non grâce à un schedduler géré
dans le noyau comme ce qu'on trouve sur i386 ?



Heu ! Qu'entends-tu par «changer de tâche de façon hard» ? Et, question
subsidiaire, qu'entends-tu par «schedduler géré par le noyau» ?




J'entends par 'de façon hard' : (Pfuut, pas simple a expliquer)

Si tu as deux tâches en cours d'exécution, dans un monde idéal, le
processeur accorde la moitié de son temps à chaque tâche. Sur 68000
(Tout du moins sur l'Amiga) c'est un 'timer' qui demande au processeur
de changer de tâche. Ce n'est en aucun cas le programme qui s'attribue
du temps, ni même l'os qui décide de quel programme doit utiliser le
processeur (Ça c'est le fonctionnement des OS sur i386 tels Linux, qui
as au sein de son noyau un ordonnanceur). La différence, c'est que sous
i386, un programme peut demander plus ou moins de temps cpu, et peux
aisément déborder sur ce qu'on lui donne (Blocage I/O etc ...) et mettre
en pause tout ou partie du système. Alors que sous 68000, le programme à
beau vouloir bouffer plus de CPU, le proc reçois un 'top' sur une patte
(Ça c'est un image à pas prendre au pied de la lettre), et passe à la
tâche suivante. C'est pourquoi un Amiga à toujours (Ça n'engage que moi)
donné une sensation de fluidité en utilisation multitâche que je ne
retrouve pas, même dans les linux et avec la puissance d'aujourd'hui.
Mais je ne cherche pas, je sais que c'est du à l'architecture pourrie
des PC.

Je sais pas si je suis clair, et je sais pas si j'ai raison.



Dans le cas de l'Amiga, le top dont tu parles était déclenché par le
chipset (les deux horloges des CIA), mais un programme pouvait
parfaitement bloquer le multitâche.

--
Toxico Nimbus
Avatar
JKB
Le 08-01-2010, ? propos de
Re: Linux : The sky is the limit (et encore, c'est pas sûr!),
Kojak ?crivait dans fr.comp.os.linux.debats :
Le Thu, 7 Jan 2010 20:17:32 +0000 (UTC),
JKB a écrit :

J'ai aussi bricolé avec les 68k, et je ne vois toujours pas
ce qui empêche la génération d'interruptions par un timer externe. Par



Attention, je ne parlais pas de l'utilisation d'un timer externe en
soit, mais du bridage des lignes d'interruption.

Rien ne t'empêche, bien évidemment, de connecter ton timer, ou quoi
que ce soit d'autre, directement sur les broches d'interruption. Si
tu n'as besoin de gérer qu'une, deux ou trois lignes d'interruption,
alors tu peux tout à fait utiliser les entrées brut de fonderies
modulo la compatibilité des signaux (fan-in/fan-out, ...) et, donc,
les vecteurs associés (ça m'est arrivé de faire ce genre de manip
dans le cadre de tests fonctionnels rapides ;-) ).



Moi, c'était sur des cartes de prod ;-) Il fallait oser le décodeur
de Reed-Muller sur un 68000... parce que la mise en oeuvre du bousin
est absconse avec les deux parties du bus de données parfaitement
asynchrones...

ailleurs, à mon époque pas trop lointaine, on utilisait
toutes les astuces pour limiter le nombre de composants. Donc
brancher une horloge sur une patte d'interruption, ce n'est pas ce
qui nous faisait peur.



Les économies de composants, j'ai connu aussi, jusqu'à adapter la
logique en fonction des composants dispos (j'aimais pas trop cette
partie de l'étude). Mais bon, pour des séries de quelques cartes à
une centaine (voire un millier) de cartes, l'ajout d'un encodeur ne
faisait pas une grosse différence sur le coût final de production et
surtout permettait d'avoir des lignes RUF (c'est toujours utiles, et
ça l'a été). De plus, dans certain cas (e.g. automates) avoir plus
d'une ligne d'interruption avait des avantages indéniables (d'ailleurs
le 68000 était bien foutu pour ça).



Le problème est un problème de contraintes. Pour ma part, c'était
consommation et intégration maximale avec la technologie de
grand'papa (les télécoms, c'est très souvent ça). Donc processeur
éprouvé (6x09, 68000...) et technologie 74xxx.

Maintenant, je suis tout à fait d'accord qu'il est possible de limiter
à outrance la schématique et les coûts en utilisant le strict minimum
fonctionnel, si ce strict minimum cadre avec le cahier des charges,
évidemment.

Je ne parlerais pas des x86 que je n'ai jamais mis en oeuvre



Beuark :-)



Mon thérapeute me l'interdit car il a peur pour ma santé mentale.

(j'ai des mauvais souvenirs avec les 8080, 8085 et dérivés 8031,
8051...).



Bah, j'ai développé des cartes à base de 8051 (contrainte imposée :-/ )
et finalement, je n'ai pas trouvé ce microcontrôleur trop mauvais pour
faire dans le tout-venant :-) Cela dit, je suis assez d'accord sur le
fait que ce n'est pas ce qui se fait de mieux dans le genre. De toute
façon, j'en ai pas gardé un souvenir impérissable non plus.



J'ai une sainte horreur les MCU. Je me suis toujours retrouvé avec
plus de composants sur une carte à base de MCU que sur la même à
base de MPU. En plus, je trouve très con le multiplexage de bus à la
Intel. Autant ça pouvait encore se justifier sur un 8086, parce 16
bits sur un boitier DIL, ce n'est pas vraiment évident (d'autant que
si le 68K avait 64 pattes, le 8086 en avait beaucoup moins), autant
sur un MCU plus récent, c'est une connerie sans nom !

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Kojak
Le 08 Jan 2010 08:25:54 GMT,
Toxico Nimbus a écrit :

Le Thu, 07 Jan 2010 18:27:14 +0100, Kojak a écrit :
> Le Thu, 07 Jan 2010 15:40:48 +0100,
> NiKo a écrit :
>
>> Sur le 68k, on peux effectuer une interruption directement sur une
>> patte du processeur par une horloge externe.
>
> Non.



Si et tu donnes la solution plus loin. Il suffit de connecter ton
horloge sur les 3 pattes d'interruption.



Rontudju d'rontudju ! :-)

Bien sûr qu'on peut toujours. Mais pourtant je maintiens le «NON ».

Si tu veux bosser comme un sagouin, fait ça avec de l'Intel ! J'ai eu
droit à ce genre de connerie avec les I/O du bus ISA sur l'XT où on
se retrouvait avec 700 adresses (et des brouettes) alors que le CPU
et censé en supporter 64k. Tout ça pour grappiller quelques kopec ks !
Alors un peu plus, un peu moins...

Le niveau 7 étant non
masquable, tu peux t'en servir pour faire de la préhemption et donc
du task-switch.



Donc, faisons comme tu dis ! Maintenant explique moi, comment fais-tu
pour gérer les autres interruptions nécessaires au bon fonctionne ment
du système ? Je suis tout ouïe.

--
Jacques.