neoISA

wie ich im home schon beschrieben hatte, verstärken sich immer mehr meine zweifel, das wirklich eine neue isa benötigt wird. jede isa ist per se der zugang zu der dahinter liegenden hardware und deren architektur. abstrakt betrachtet sind sich diese aber ähnlicher als so manchem lieb ist, denn der großteil der arbeit ist immer noch alu, vergleich und sprünge. bei risc noch laden und speichern, und bei wissenschaftlich basierten programmen noch floating point operationen. was passiert, wenn versucht wir eine isa am leben zu halten aus kompatibilitätsgründen, sieht man am besten bei der x86 isa. anstelle alte zöpfe abzuschneiden da sie zukünftige entwicklungen behindern, wird aus besagten kompatibilitätsgründen an vielen dingen festgehalten, was die hardware, die performance und entsprechend die leistungsaufnahme stark negativ beeinflussen. andererseits benötigt eine cpu nunmal maschinencode den sie ausführen kann. und genau hier beginnt der neo ansatz.


zwischensprache


marek und ich hatten genau diese gedanken endlos diskutiert, das eine allgemeingültige zwischensprache benötigt wird, so eine abstrakte isa, die noch genügend informationen beinhaltet um aus ihr dann noch gut eine ziel isa, mit all den möglichen und nötigen optimierungen, zu übersetzen. allerdings sollten schon alle sprach relevanten und sonstige optimierungen, vorher erledigt sein. somit wären dann die zeitfressenden optimierungen durch und der sourcecode ist nicht mehr zu erkennen, was für viele firmen noch immer sehr relevant ist. letztendlich ging es aus heutiger sicht darum einen DAG zu generieren. leider hatten wir das konzept nicht weiter verfolgt.
aber kaum wartet man ein paar dekaden, und schwups, gibt es soetwas schon. die zwischensprachen der compiler von gnu und llvm sind genau das was wir seinerzeit brauchten.
also warum nehmen wir nicht genau eine von diesen als isa?
genau diese diskussion würde ich gerne führen wollen. was hält uns davon ab, die llvm-ir, denn ich stehe mehr auf llvm, als die ultimative distributions isa zu benutzen? wenn betriebssysteme nicht zu x86 oder arm compiliert werden würden, sondern zu llvm-ir, dann wäre es egal, wie die cpu dahinter aussehen würde. selbiges für programme, treiber, apps, was auch immer. alle würden llvm-ir code erzeugen. was sie ja, wenn llvm zum kompilieren benutz wird, ja im grundegenommen auch tun, blos das sie dann noch einen schritt weiter gehen, und in die zielarchitektur übersetzen. genau diesen letzten schritt kann man dann aber dem hersteller der hardware überlassen. dieser könnte dann so transmeta artig den llvm-ir code in die spezielle vom hersteller benötigte architektur übersetzen. dieser hätte dann aber die freiheit diese architektur jederzeit den bedürfnissen des marktes anzupassen. z.b. könnte in rechenzentren eine andere architektur benutzt werden, als in allgemein werkelnden heimcomputern, oder in tablets oder telefonen.
der hersteller könnte dann einen sehr speziellen compiler in seinen geräten einsetzen, der ausschließlich die eingesetzte hardware maximal unterstützt. auch künftige erkenntnisse zur performance steigerung könnten mit updates nachgepflegt werden. auch sicherheitsprobleme lassen sich so leichter in den griff bekommen, weil es keine möglichkeit gibt maschinencode direkt auszuführen, und der llvm-ir code getestet werden kann, bevor er übersetzt wird.


pre bios oder microkernel oder nanokernel


im gegensatz zu transmeta, stelle ich mir vor ein mini betriebssystem zu etablieren, welches sich darum kümmert den llvm-ir code zu übersetzen, zu cachen und auszuführen. wichtig dabei ist, das es sich um eine technik handelt, welche die maximale sicherheit bietet. ich persönlich neige zur zeit dazu zu sagen das es sinnvoll wäre einen microkernel zu etablieren, der dann auch gleich die abstraktionsschicht zu den wichtigen ressourcen bildet. klein und absolut stabil, wie ein l4 oder besser ein sel4


linux mit llvm-ir


als harte nuss wäre dann gleich als nächstes zu versuchen einen linux kernel zum laufen zu bewegen. das schöne ist, das es eine variante des linux kernels gibt, die unter einem l4 läuft, das l4-linux. denn die mit abstand größte herausforderung wird es sein maschinencode aus aktuellen programmen los zu werden. auch der linux kernel hat noch teile in maschinencode, allerdings ist dieser in der l4 variante so gut wie weg, und somit steht auch dem linux kernel fast nichts mehr im weg ihn unter llvm-ir laufen zu lassen.


tja, das ist die idee hinter neoisa. also doch keine neue isa, keine wirklich neue idee, nichts wirklich innovatives. nichts desto trotz glaube ich, wenn eine möglichkeit besteht so etwas zu etablieren, dann bietet es ein sehr großes potential für weitere hardware entwicklungen, die nicht mehr auf einer speziellen isa basieren, und sehr agil ablaufen kann.