Autore Topic: SuperKernel !  (Letto 5525 volte)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #30 il: 07 ſettembre 2013, 18:46:15 »
Ci dovremmo accontantare di x86, ARM, PPC e MIPS allora, che comunque non sono poche per dimostrare la validità del concetto! :D
Sopratutto sono abbastanza diverse tra di loro (anche un po' più di abbastanza), quindi aiuta a testare la portabilità del kernel.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #31 il: 07 ſettembre 2013, 22:07:24 »
non ti preoccupare del C
al porting in C per il bsp della 68060 ci penso io

Ma come fai? "Portarlo" vorrebbe dire riscriverlo praticamente da capo... (a meno che non hai un qualche convertitore C++ -> C intermedio...)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #32 il: 07 ſettembre 2013, 22:47:30 »
questa constraint rilassala o annichiliscila del tutto: non e' un Kernel general purpose tipo linux, e' una roba molto + mirata, no ?

Eh no, l'idea del progetto è proprio quella di fare un kernel general purpose, ma che sia molto flessibile nella sua struttura, potendo scegliere quali moduli includere e ottenere alla fine o un sistema operativo desktop, o qualcosa di anche molto compatto.

Quindi nello sviluppo cerco di prendere in considerazione tutti i lati, sia il desktop che l'embedded, però alle volte bisogna decidere tra due scelte mutualmente esclusive; una di queste è proprio stata la scelta di svilupparlo in C++, sacrificando la portabilità su sistemi più piccoli ma guadagnandoci in sanità mentale io e maggior ristrettezza nella sintassi e tipizzazione.

Intanto mi ha incuriosito la conversione C++ -> C: so che LLVM ha un backend per generare codice C (poco leggibile, ma ci interessa solo come linguaggio intermedio), quindi lo devo provare.
L'unico compilatore commerciale che può generare codice C è Comeau C++, che addirittura fa solo quello perchè si appoggia a un altro compilatore per completare il binario.

In più ho trovato i sorgenti di cfront 3.0.3; come interessante esperimento, sto cercando di compilarlo su un moderno Linux e vedere quanto arriva a fare sui sorgenti del kernel. Certamente non sarà proprio una soluzione ottimale (non voglio mica dovermi limitare a C++ '89!), ma lo faccio giusto per sport. :D

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #33 il: 07 ſettembre 2013, 23:03:30 »
Beh, l'esperimento è stato veloce... cfront è troppo strambo per essere compilato in un moderno sistema, e hanno rimosso il backend C da LLVM nella versione 3.1 perchè non funzionava bene.

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #34 il: 08 ſettembre 2013, 18:47:47 »
MMU o TLB le consideri o si puo' forzare compilazione a salti relativi ?

Ci stavo pensando; praticamente dipende dal riuscire a fare funzionare il kernel sia con memoria virtuale, sia senza.
La *protezione* della memoria non è un gran problema (praticamente quando il kernel dice "imposta a sola lettura per il livello 3 questa area", il driver della cpu ignora la richiesta o riporta errore), mentre per la paginazione è un po' più complesso.

Cioè, non è che sia un gran problema fare un kernel che lavora in un singolo grande spazio di indirizzamento, ma è farlo in modo che sia più trasparente possibile.
Il kernel è diviso in 3 categorie: arch/platform/kernel. In kernel ci va tutto quello che è indipendente dalla piattaforma (scheduler, allocazione memoria, filesystem, ipc, network etc), in arch ci va tutto quello che è dipendente dall'architettura (i386, x86_64, ARM, PPC etc), e in platform ci va tutto quello che è dipendente dalla piattaforma (IBM PC, la tua board di fiducia... praticamente dove puoi fare più assunzioni possibili sull'hardware).

Il trick qua è poter spostare il più possibile della gestione dell'MMU nel driver CPU in arch/ in modo che il codice in kernel/ possa essere più generico possibile. Forse possiamo aggirare il problema fornendo in kernel/ 2 tipi di gestore di memoria (quello da usare può essere scelto durante la compilazione): uno che lavora con MMU, e l'altro che lavora senza; dato che tutti i bisogni di allocazione e gestione passano per questo modulo, la restante parte di kernel/ non deve pensarci su.

La famosa scheda UDOO che ho ordinato (che dovrebbe arrivare a settembre, ma vista la quantità di ordini arriverà probabilmente a inizio ottobre) monta sia un iMX.6 di architettura Cortex-A9, sia un SAM3X di architettura embedded Cortex-M3, perciò avrò l'hardware per testare anche contemporaneamente le due strategie.


Giusto per avere un'idea, che caratteristiche di memoria hanno le schede su cui vorresti eseguirlo?

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1669
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:SuperKernel !
« Risposta #35 il: 09 ſettembre 2013, 00:09:00 »
Credo si riesca a fare. :D

Tags: