Il arrive que quelques extraterrestres échouent sur notre planète, qui sans eux serait parfois monotone.
Il y a 20 ans déjà Henry Massalin s'est amusé à créer sa propre machine autour d'un 68000, la quamachine, en l'honneur de son compagnon koala, dont l'onomatopée lui servant de communication se résume souvent à un "Qua !".
Basée à quelques années plus tard sur deux 68030, elle disposait de 256 Ko de Rom, 2,5 Mo de Ram, 4ko de mémoire vidéo, un circuit son maison, et poussait jusqu'à 50 Mhz les deux 68030, grace à un système tordu permettant de multiplexer la mémoire.
Il a créé Synthesis, son propre OS, écrit avec amour en assembleur 68000. Synthesis est conçu comme une sorte de Noyau Mach avec des fonctionalités de type Unix.
Mais le plus intéressant est certainement la capacité de ce noyau à réécrire son code à la volée.
Henry Massalin, créateur de musique électronique souhaitait disposer d'un OS capable de tenir la charge face à ses besoins créatifs, il lui fallait donc un OS sur optimisé, disposant de fonctionalités temps réelles performantes.
L'optimisation de son code repose sur plusieurs idées.
Par exemple, il va détecter un calcul dans lequel un paramètre est un 1 ou un 0, dans ce cas
A=1
B*A+A*A devient B+1, on économise 2 multiplications.
Plus généralement, il propose le raisonnement suivant :
Suposons que l'on doive exécuter une fonction
Fbig(p1,...,pn)
On détecte que p1 est une constante.
On va donc chercher à factoriser Fbig pour écrire
F2(p1) qui renvoi une fonction Fsmall prenant (p2,..., pn) en paramètres.
Le but est que l'on ait pour m exécutions:
Cout(F2)+m*Fsmall(p2,...,pn) < m*Fbig(p1,...,pn)
Autre idée est de supprimer les jump dans le code dus à une structuration de celui-ci basée sur des spécifications. Autrement dit, il inline le code à la volée.
Le noyau est basé sur des sortes d'objets, les Quajets, ces objets ne supportent pas l'héritage, et sont codés en assembleur.
cela permet de structurer le code de belle façon.
La thèse de Massalin resselle aussi une intéressante contribution sur la concurrence et la synchronisation.
Il désirait en effet éviter de désactiver les interruptions à tout bout de champ sur son système, éviter d'utiliser des systèmes à verrou pour gérer la concurence sur sa machine dotée de deux 68030.
J'ai pas encore tout lu et donc compris, je n'en dirai donc pas plus.
Il développe aussi une conception intéressante de l'ordonancement à "gain fin", qui consiste d'après ce que j'ai compris, à ne plus baser l'ordonancement sur le temps, mais sur les interruptions. Ce qui semble être une bonne idée.
Pareil, je n'ai pas lu, je n'en dirai pas plus.
Tout cela n'est pas tout jeune, le document a été écrit en 1992.
Le lien : http://www.cs.columbia.edu/~library/TR-repository/reports/re(...)
# Curryfication
Posté par Zakath (site web personnel) . Évalué à 10.
Ca s'appelle la curryfication, et c'est aussi ce qui explique qu'une fonction prenant deux entiers et renvoyant un entier ait usuellement le type int → int → int au lieu de (int * int) → int.
Enfin bref, functional programming rulez da world, rien de nouveau sous le soleil :-)
[^] # Re: Curryfication
Posté par moramarth . Évalué à -2.
Je n'ai pas tout compris. Ça signifie que tu crois que les langages objets ce n'est que de la fumisterie amenée à domination par Sun avec Java et étendue par Microsoft avec C# ?
[^] # Re: Curryfication
Posté par Zakath (site web personnel) . Évalué à 2.
Sinon, smalltalk et ruby sont très chouettes et il y a de bonnes idées dedans, mais ça ne vaut pas haskell ou ocaml niveau élégance ou efficacité.
Quant à java et assimilés, la raison pour laquelle ils sont si répandus est la même que l'explication de pourquoi les chefs sont toujours les gens les plus médiocres.
[^] # Re: Curryfication
Posté par amadeus029 . Évalué à 8.
Le framework en particulier est bien plus important que les qualités intrinséques du langage à l'heure du choix.
[^] # Re: Curryfication
Posté par Zakath (site web personnel) . Évalué à 1.
Merci d'avoir marché dedans, j'espère que c'était le pied gauche.
[^] # Re: Curryfication
Posté par Calvin0c7 . Évalué à 7.
Java et C# sont des langages médiocres parce qu'ils sont répandus.
smalltak, ocaml ou haskell sont très chouettes parce qu'ils ne sont utilisé que par une poignée de vrai geek (ou nerds, je ne sais plus la différence maintenant)
[^] # Re: Curryfication
Posté par 태 (site web personnel) . Évalué à 3.
Bref, ça n'a rien de propre aux langages fonctionnels...
*: fr.wikipedia connait ce théorème sous le nom de "théorème d'itération" de Kleene.
[^] # Re: Curryfication
Posté par Zakath (site web personnel) . Évalué à 2.
En l'occurence, pour que la curryfication ait un sens, il faut que les fonctions soient des objets de première classe, sinon tu n'auras même pas la notion de "renvoyer une fonction". D'où les liens avec langages fonctionnels.
[^] # Re: Curryfication
Posté par Gmooron . Évalué à 1.
[^] # Re: Curryfication
Posté par z a . Évalué à 1.
# OS ou compilateur ?
Posté par Victor STINNER (site web personnel) . Évalué à 2.
[^] # Re: OS ou compilateur ?
Posté par Ontologia (site web personnel) . Évalué à 3.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: OS ou compilateur ?
Posté par Dr BG . Évalué à 3.
temps(optimisation) + temps(exécution_code_optimisée) < temps(execution_code_pas_optimisé)
[^] # Re: OS ou compilateur ?
Posté par Olivier Serve (site web personnel) . Évalué à 5.
temps(optimisation) + n * temps(exécution_code_optimisé) < n * temps(exécution_code_pas_optimisé)
quelque soit n entier naturel non nul.
C'est ce principe qui est utilisé par le compilateur JIT des JVMs modernes.
[^] # Re: OS ou compilateur ?
Posté par Pat _ . Évalué à 5.
ou plutot pour tout n superieur a un N qu'on espère exister et le plus petit possible...
# Hum...
Posté par ThesmallgamerS . Évalué à 4.
Je m'explique. Avec les avancés techniques dans le domaines de l'intelligence artificielles (programme générationnelle adaptatifs, etc) il devient possible de specifier la forme d'un code, son utilisation, de faire mouler le tout sur quelques centaines de milliers de générations et d'avoir finalement un truc pas mal codé. Cela se fait depuis un certains temps avec les algorithmes génétiques, (et certaines autres métaheuristiques), alors pourquoi ne pas généraliser ?
Deux catégories particulières se prêtent bien a ce type de réecritures : D'abord les parties nécéssitant une forte optimisation (piles, gestionnaire de priorité, parties hard du noyeau), et les drivers. En effet, ces derniers ne sont finalement qu'une interface entrée/sortie. Il n'y aurait qu'a specifier l'entrée, la sortie, et mouliner le tout.
Bref, bref...
[^] # Re: Hum...
Posté par Ontologia (site web personnel) . Évalué à 1.
Il y a un américain qui a travaillé sur l'évolution d'algorithme par génie génétique (je ne retrouve plus le numéro de Pour la Science contenant l'article en question), au bout de 1000 h de calcul, il arrivait à obtenir quelque chose. C'était avec des PII 300 en cluster...
Je pense que c'est une voie intéressante, mais qu'il faudrait peut être y connecter nu filtre, une taxinomie en particulier, qui permette de filtrer la recherche à taton que feront les algo génétique dans l'espace solutions.
Ca permettrait à un algo génétique de faire évoluer un tri par insertion en tri à bulle, voire un tri alpha. Pour cela il faudrait qu'il "comprenne" la notion d'ordre que l'on trouve dans une liste de données, et pour cela il faut une taxinomie qui "explicite" les structures de bases du langage (booléen, entier, tableaux, arbre, etc...) en les associant avec des propriétés mathématique (les propriétés d'entiers, le fait qu'un tableau est ordoné dans ses indices, l'arithmétique booléenne, toussa).
C'est bien joli tout ça, mais ça prendrai plus de temps à générer du code performant qu' à exécuter l'existant...
Et de toutes façons, on commence à avoir des compilateurs à analyse de flot qui rend inutile la moitié des optimisations à la volée, qui sont détectées à la compilation.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Hum...
Posté par VTTiste . Évalué à 10.
C'était mouliner je suppose...
L'abus de tribune nuit gravement à la santé orthographique ;-)
# Multidesk OS...
Posté par Aefron . Évalué à 9.
[^] # Re: Multidesk OS...
Posté par Jean Canazzi . Évalué à 9.
# 68k
Posté par Joris Dedieu (site web personnel) . Évalué à 10.
Le 68k et suivant (aujourd'hui les Coldfire principalement), sont conçus pour être facile à programmer.
Ils disposent d'un jeu d'instruction simple et efficace. Ils sont logiques et abordables et c'est d'ailleurs pour ça qu'ils me semble-t-il ont longtemps résisté au C.
L'exemple que tu cites est frappant. Je monte ma machine en bidouillant un système bi-proc, je code un OS en assembleur et au finale j'ai quelque chose d'hyper intéressant.
J'irais pas jusqu'à dire que sur 68k on savait s'amuser :-p Je remarque juste en passant que certains processeurs portent une certaine façon de coder.
Bref je trouve mais peut-être ai-je tord que les questions de fond sur le modèle de programmation des machines est un peut trop absente des débats sur les langages et les OS.
[^] # Re: 68k
Posté par Mildred (site web personnel) . Évalué à 2.
[^] # Re: 68k
Posté par BAud (site web personnel) . Évalué à 10.
[^] # Re: 68k
Posté par Grumbl . Évalué à 3.
[^] # Re: 68k
Posté par lasher . Évalué à 6.
[^] # Re: 68k
Posté par Vador Dark (site web personnel) . Évalué à 3.
[^] # Re: 68k
Posté par Vador Dark (site web personnel) . Évalué à 2.
[^] # Re: 68k
Posté par Matthieu Lemerre . Évalué à 1.
Il faut savoir justement que le 68k a une instruction DCAS (double compare and swap), ce qui la rend particulierement interessante pour programmer des multiprocesseurs. En particulier, synthethis est completement lock-free (i.e. sans verrou)
Les processeurs modernes n'incluent pas cette instruction, ce qui rend la chose encore plus difficile, ce qui fait que tres peu de systemes d'exploitation empruntent cette voie.
[^] # Re: 68k
Posté par lasher . Évalué à 2.
[^] # Re: 68k
Posté par Tonton Th (Mastodon) . Évalué à 1.
En fait, si, coder en assembleur sur le 68k, c'est fun et (presque) facile. A fortiori si tu connais le C, et que tu prends le temps d'étudier le code généré.
Ensuite tu t'inspires de ça pour gérer les variables locales et les passages de paramètres. Un peu de rigueur là-dessus, et c'est parti....
Ah, le bon vieux temps du Metacomco...
# Et Windows (3.1|98|Me|2000|XP|Vista) alors ?
Posté par jigso . Évalué à 10.
P'tit joueur, va...
[^] # Re: Et Windows (3.1|98|Me|2000|XP|Vista) alors ?
Posté par Axel R. (site web personnel) . Évalué à 1.
C'est surtout quand je l'ai acheté que je me suis fait (à la) volé...
[^] # Re: Et Windows (3.1|98|Me|2000|XP|Vista) alors ?
Posté par eon2004 . Évalué à 5.
[^] # Re: Et Windows (3.1|98|Me|2000|XP|Vista) alors ?
Posté par inico (site web personnel) . Évalué à 5.
lsass.exe ou svchost.exe sont patchable à distance sans reboot.
Le client est même écris en ruby !
# Et au final...
Posté par Moogle . Évalué à 5.
Faut se méfier avec ces petites bêtes là !
---> []
[^] # Re: Et au final...
Posté par Jak . Évalué à 6.
[^] # Re: Et au final...
Posté par Snarky . Évalué à 7.
"Kikou ! Tte RzistanC sRé Futil ! \o/"
Les machines extermineuses d'orthographe........
[^] # Re: Et au final...
Posté par kowalsky . Évalué à 6.
Elles agissent deja sur LinuxFr ...!
:)
[^] # Re: Et au final...
Posté par Aldoo . Évalué à 2.
(Sinon, Matrix, ce n'est pas la suite logique de Terminator ?)
[^] # Re: Et au final...
Posté par Samaty Tramo . Évalué à 1.
"Saloperie d'imprimante, toujours à me bouffer mes cartouches d'encre à un prix monstrueux. On est toujours au même point."
[^] # Re: Et au final...
Posté par Obsidian . Évalué à 2.
Perso, pas de problème. Je veux bien leur laisser ...
# JIT
Posté par M . Évalué à 5.
Bon apres le journal est assez confu, surtout que c'est bien beau toute ces optimisations a la volée, mais ca a un coup.
Par exemple inliner le code à la voler, signifie plus ou moins reloger tout le code. Sur un bytecode fait pour ca, c'est pas trop dur, sur de l'assembleur bon courage.
[^] # Re: JIT
Posté par Jacquot Raphael . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.