|
|
|
|
Strumenti |
10-07-2016, 13:42 | #21 | |||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
Per esempio per scrivere un valore in un registro non viene fatta una "move" (da dove?) ma viene usato l'operatore =, mentre nella versione XS si usa il metodo "Set" che oggettivamente ha più senso di Move. Però sì c'è ancora molto da lavorare su X# e - ovviamente - si accettano suggerimenti. Quote:
Certo puoi fare "casini" con unsafe e X# (in assembler puoi corrompere lo stack in un attimo e tanti saluti al kernel ), ma quello sarà codice - molto poco e specifico - relegato al livello 0. Se qualcuno "osa" scrivere una libreria SSL in Cosmos e si mette a fare "truschi" con l'assembler perché deve essere veloce beh allora abbiamo fallito l'obbiettivo Quote:
http://joeduffyblog.com/2015/11/19/a...us-everything/ in particolare quoto questo paragrafo: It was pretty common to be running the Midori system at 100% CPU utilization, because it was doing useful stuff, which is pretty rare on PCs and traditional apps. Cioè normalmente quando la CPU è al 100% siamo piene di rotelle / palle / clessidre, vero? In Midori, no! Era al 100%, ma il sistema era sempre responsivo... non esisteva alcun IDLE Comunque oggi si continua con i lavori: Conv.U8!
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
|||
10-07-2016, 14:21 | #22 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Mah mi chiedo, ma i float / double servono davvero a qualcosa?
double aDouble = 9223372036854775849d; ulong value = (ulong)aDouble; Print(value); 9223372036854775808 Cioè ma sta facendo casino anche a convertire un numero intero? E il C fa uguale quindi non è qualche casino nostro... Chissà se usando le SSE su un sistema a 64 bit avrebbe funzionato meglio? Vado a cercarmi un Linux a 64 bit...
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
10-07-2016, 19:04 | #23 | |||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Ma il resto, sì. E presta particolare attenzione a certe istruzioni di stringa, perché sebbene sian da tempo considerate legacy, negli ultimi anni sono state notevolmente potenziate nei processori Intel, tanto da essere preferite alle equivalenti che fanno uso di istruzioni SIMD per riempire o copiare la memoria. Quote:
IMO dovreste partire proprio da come funziona l'inline di GCC, ma cercate di semplificare al massimo il tutto. Ad esempio evitare di usare il # in Codice:
EDX = #constantForEDX Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||||||
10-07-2016, 19:47 | #24 | ||||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
Certo che a tendere dovremo trovare un modo per usare "=" con X# embeddato in C#, il codice con XS.func() è un passo intermedio... dobbiamo riuscire a fare come LINQ scrivere codice in un altro linguaggio dentro C#! Un altra cosa che va fatta ASAP è come dichiarare le variabili dentro assembler... Per ora mi tocca fare così: Codice:
DataMembers.Add(new DataMember(@"__doublesignbit", 0x8000000000000000)); Codice:
XS.LiteralCode(@"pxor XMM0, [__floatsignbit]"); Codice:
XS.PXOR(XMM0, "__floatsignbit", destinationIsIndirect: true); Codice:
XS.PXOR(XMM0, 0x80000000, destinationIsIndirect: true); Quote:
Quote:
X# / Assembler deve ovviamente esistere solo a livello 0 per quelle poche cose che ne necessitano (per esempio scrivere sulle porte hardware della VGA? Far spegnere la CPU con l'istruzione HLT?). E' chiaro che come accade con C# unsafe ci si costruisce tutta una classe intorno che rende usabile la cosa... Quote:
Quote:
Capisci il mio unit test ora non ha molto senso io metto in un double un valore intero "preciso" per me essere umano, lo converto in ulong ed ottengo un numero diverso? La mia Assertion è false, ma dovrebbe essere true! Hanno senso per disegnare grafica forse? Dove in fondo è meglio disegnare velocemente e se poi i punti non si toccano si spera nell'aliasing o nell'occhio umano difettoso? Se io volessi fare una calcolatrice per esempio non potrei usarli (0.2 * 3 != 0.6?), per l'uso che ne faccio io sul lavoro non hanno senso per me rappresentano valori monetari e a volte devo calcolare il cambio e con i double vengono numeri "causali" dopo già la III cifra decimale, con _Decimal32 e il decimal di C# ho valori corretti! (Lo stesso caso dell'unit test passa senza problemi usando il tipo decimal infatti). A proposito Intel ha pensato di accelerare il tipo decimal con IBM ha fatto per i suoi sistemi con CPU Power? Questo è l'unico difetto i decimal sono molto più lenti dei double perché sono implementati in software... Quote:
Altra cosa che ho notato come differenza tra SSE e x87: SSE non ha un'istruzione diretta per negare un float / double, mentre x87 aveva fchs. Nulla di complicato da "simulare" con SSE basta infatti fare uno XOR con -0.0 (ovvero 0x800....) e il segno "flippa", però perché non hanno implementato tutto in modo che potesse davvero sostituire x87? Perché non c'è un modo diretto per operare sugli Int64 con SSE su x86, mentre con x87 sì? Perché non ci sono le funzioni trigonometriche in SSE?
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 10-07-2016 alle 19:51. |
||||||
11-07-2016, 00:04 | #25 | |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4905
|
Quote:
Molto, perché hanno ottime prestazioni ma soprattutto occupano poco spazio. La precisione limitata va presa in considerazione, ma è un compromesso accettabile; come per la CPU, anche per la GPU un collo di bottiglia molto comune è l'accesso alla memoria. |
|
11-07-2016, 06:26 | #26 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Trovate un'altra soluzione/sintassi. Quote:
Quote:
Per il resto, pensate di far girare qualunque cosa nel ring-0 del processore, visto che le applicazioni / codice utente dovrebbero essere del tutto "safe"? Perché in linea teorica non vi servirebbe dividere il codice in kernel e user mode, per quanto hai detto finora, ed evitare un paio di context switch fra le due modalità fa sempre comodo in termini di velocità. Quote:
Ma un decimal a 128 bit complica notevolmente le cose. Non capisco perché Microsoft non ne abbia fornito una versione "single"/64-bit e una "double"/128 bit. Comunque non conosco l'implementazione di IBM, ma Intel ha introdotto alcune istruzioni per eseguire più agevolmente somme e moltiplicazioni a precisione elevata, che dovrebbero aiutare per i decimal a 128 bit. Ma rimarranno sempre molto più lenti da gestire. Quote:
Nel corso del tempo sono state introdotte nuove istruzioni che in parte colmano il gap, ma mancano ancora diverse corse, e... te le devi emulare. Le nuove AVX-512 che arriveranno con Cannonlake (ma per settore server saranno disponibili già con Skylake) hanno delle estensioni (solo per i processori che le implementano) che ampliano le possibilità di manipolazione degli interi, ma adesso non ricordo quali migliorie siano state apportate. In ogni caso non penso che abbiate voglia di scrivere già adesso il backend per AVX-512. Purtroppo con le SSE dovete arrangiarvi in qualche modo.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||
11-07-2016, 13:42 | #27 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Quote:
Quali controlli esegue l'OS e come, sulle istruzioni eseguite dai programmi? Non essendoci più le trap dovute ai ring hardware, mi chiedo come faccia l'OS ad intercettare chiamate privilegiate. Mi pare assurdo fare un nuovo OS orientato alla sicurezza che poi cade come un castello di carte se qualcuno modifica a mano un eseguibile. Quote:
Quote:
Infine stackalloc non è unsafe? |
|||
11-07-2016, 14:21 | #28 | ||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
Since Cosmos can control execution and rebuild its compiler and recompile all code at any time, Cosmos can be much more flexible and most restrictions can be enforced at compile or installation time rather than the need to perform such CPU checks in live CPU code. Quindi al momento dell'installazione quando - come ho già detto - il codice è ancora in formato IL viene verificato che l'applicazione che gira a livello utente non abbia al suo interno codice che non possa eseguire (per esempio codice unsafe, assembler o anche normale codice C#, ma che fa cosa che si è deciso di black listare...). Una volta che ci si è assicurati di questo si crea la versione nativa che andrà scritta da qualche parte (dentro l'eseguibile stesso?) e non più scrivibile. Quote:
Tu cosa proponi? Quote:
Quote:
https://github.com/CosmosOS/Cosmos/b...Memory/Heap.cs
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
||||
12-07-2016, 13:57 | #29 | ||||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Quote:
Quote:
Se puoi modificare l'eseguibile, puoi anche modificare il checksum di conseguenza no? Per un sistema di antitampering gli eseguibili andrebbero firmati. Ma anche in quel caso se sono in possesso di una chiave valida di cifratura (e tutti gli sviluppatori dovrebbero averne una) posso rimpacchettare il tutto e farlo digerire al sistema. Insomma si finisce in un sistema alla Apple dove puoi installare solo da un market place certificato in cui la chiave riconduce ad un ben preciso sviluppatore. Quote:
Il GC dealloca memoria, se è scritto in C# ci deve essere un meccanismo che consente di gestire direttamente la memoria, meccanismo non presente rimanendo in puro C# (e non citiamo il PInvoke che se l'OS è scritto in C# siamo punto e a capo ) Mi sapresti indicare dove sta il codice Cosmos relativo al GC? Quote:
|
||||
13-07-2016, 12:16 | #30 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Allora ieri ho fatto una chiaccherata con Matthijs ter Woord (uno dei lead developer di Cosmos, ci sarebbe anche Chad Z. Hower (Kudzu), ma lo si deve molto raramente in chat!) riguardo X# beh la risposta sul perché il cancelletto davanti alle costanti mi ha lasciato un po' con l'amaro in bocca: "beh perché a noi piace così"
(no, nemmeno a me piace!). Riguardo embeddare X# dentro C# c'è un problema facendo come fa GCC che dal punto di vista di Visual Studio sarebbe una stringa quindi:
Io credo che C# potesse embeddare altri linguaggi dentro di sè come fatto con LINQ, ma sembra che fosse l'eccezione non la regola: https://github.com/dotnet/roslyn/issues/1746 Si potrebbe fare modificando Roslyn, ma è un po' un casino! Riguardo il discorso come facciamo ad essere sicuri che un programma utente non faccia cose illecite? Beh intanto per iniziare i programmi utenti sono sempre in formato IL (e Matthijs ter Woord ha tenuto a stressare questo: in Cosmos i programmi sono sempre in formato IL, mai in formato nativo) e quindi prima di essere compilati per essere eseguiti possono e dovranno essere verificati. Il nostro compilatore avrà una black list delle istruzioni che sono "pericolose" e quindi mostrerà una gloriosa eccezzione e l'utente butterà nel cestino l'applicazione Anche un subset di unsafe sarà accettato perché in realtà un subset di unsafe è safe ed infatti con C# 7 la stessa Microsoft sta esponendo cose parzialmente unsafe senza bisogno di taggare la classe come unsafe come per esempio: Span, Slice, Ref return. Codice unsafe C# non può comunque fare gli stessi danni che può nelle mani di un hacker esperto fare codice C/C++: quello che è stato fatto per crackare la PS4 e fargli girare sopra Linux (poveretta ) accedendo a strutture del kernel da un programma utente non sarebbe possibile se l'OS di PS4 fosse basato su Cosmos. (Sì un dispositivo blindato come PS4 è un possibile target di Cosmos: ricordate la licenza MIT? Sony potrebbe riscriverlo completamente e rendere il tutto closed source e il tutto sarebbe perfettamente legale). Codice automodificante non può esistere usando C#, da vedere se anche Reflection per quanto sia comoda, possa essere accettabile (correggetemi se sbaglio, ma con Reflection io posso chiamare impunemente metodi privati di una classe vero?). Forse un sistema di signature del binario potrebbe anche non essere necessario, ma ci penseremo nel momento in cui ci occuperemo di come gestire le applicazioni per ora: "Cart before horses" @tomminno questo è il codice (parziale ci stanno ancora lavorando) di RAT che è in realtà la classe che si occupa di allocare / deallocare memoria, il GC vero e proprio non c'è ancora (sì Cosmos leaka memoria ): https://github.com/CosmosOS/Cosmos/b...ry.Test/RAT.cs come vedi è codice C# è unsafe perché usa i puntatori anche il GC sarà ovviamente scritto in C# (dovrebbe essere un thread che gira insieme all'applicazione / applicazioni, e userà le funzioni di allocazione / deallocazione di RAT quindi il GC potrebbe essere scritto in safe C# e quindi girerà a un livello più alto visto che non dovrà accedere direttamente a una risorsa privelegiata come la RAM).
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
14-07-2016, 06:08 | #31 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Purtroppo C# ha capacità limitate per implementare roba così nuova. Non è un linguaggio che mette a disposizione funzionalità di tipo DSL. Vi tocca estenderlo, se volete una soluzione elegante e robusta, oppure inventarvi un'altra soluzione: X# è troppo verboso così com'è. Quote:
Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||
15-07-2016, 08:45 | #32 | ||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Sì diciamo che come risposta non l'ho molto capita (sospetto che non abbia capito la domanda, in fondo lui è Olandese, io sono Italiano e ci parliamo in Inglese )
Quote:
Quote:
Purtroppo la Microsoft non ne vuole sapere d'implementarlo e Roslyn non sembra molto semplice da modificare... Non ho capito se quei file .xs in cui il vero X# vivo sono chiamabili da C# altrimenti uno potrebbe scrivere una funzione e poi chiamarla da C#, ma non è veramente codice .NET il '#' è solo pubblicità è più un "macro paster" X# che un vero è proprio linguaggio. Quote:
La cosa migliore è fare come le grandi corporation avere in casa un hacker e metterlo a stressare l'OS finché non lo buca (e poi risolvere il bug)! Così almeno mi ha detto Matthijs, ma ha senso per quello per cui è stato pensato C#: questa cosa taglia fuori molti virus / malware.... Quote:
Comunque non è che gli .EXE scaricati dovranno essere firmati (non sarebbe possibile visto che vogliamo essere compatibili il più possibile con normali applicazioni .NET): la firma avverrà all'interno di Cosmos al momento dell'installazione / prima avvio quando l'IL viene compilato e l'immagine nativa generata: è l'immagine nativa che dovrà essere firmata!
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
||||
25-07-2016, 11:52 | #33 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Questo Domenica non ho potuto lavorare su Cosmos perché ho deciso finalmente di farmi coraggio e di aggiornare da Windows 8.1 a Windows 10 mica per altro, ma perché è l'ultima settimana che è gratis (e da buon genovese se una cosa è gratis ).
Vi aggiorno un po' su quello che stanno facendo gli altri:
Se gli impegni lavorativi (ultimamente torno a casa dopo le 21!) non mi stressano troppo voglio studiare in questa settimana un metodo migliore per dichiarare le variabili in X#, attualmente sono aggiunte nel posto sbagliato: dovrebbero essere vicino all'implementazione degli OpCode stessi invece sono all'inizio del kernel. Comunque qualcuno di voi ha deciso di voler collaborare al progetto? Vi aspettiamo numerosi!
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 25-07-2016 alle 11:55. |
25-07-2016, 13:23 | #34 |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Ma in tutto cio' la domanda e': perche' non l'avete chiamato AlphaWinUX?
|
25-07-2016, 13:37 | #35 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Perché questo è un progetto serio ecco perché!
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
25-07-2016, 14:25 | #36 |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Si, ma se l'aveste chiamato AlphaWinUX avreste avuto un follower in piu'!
|
25-07-2016, 16:17 | #37 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Beh Cosmos è solo il nome del Kernel se uno volesse fare un OS "satanico" che mixa Windows con Linux e con una punta di Mac OSX e chiamarlo AlphaWinUX potrebbe pure farlo
(Magari si riesce ad avere qualcosa che funziona mischiandoli tutti!)
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
25-07-2016, 19:29 | #38 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4905
|
Si riferiva al leggendario AlphaWinUX.
|
26-07-2016, 17:20 | #39 | |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quote:
|
|
07-08-2016, 14:36 | #40 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Ieri mentre browsavo sono incappavo in un'antica (?) diatriba l'istruzione IDIV è lenta tanto che alcuni compilatori cercano di evitarla ad ogni costo! Per esempio quando la divisione è per un multiplo di 2 si preferisce fare uno shift piuttosto che chiamare IDIV, altri arrivano all'estremo di usare il reciproco e fare la moltiplicazione
Mi chiedo ma con le ultime CPU è ancora così o è solo una leggenda metropolitana? Ho fatto un po' di prove con VC++ e questa semplice funzione: Codice:
static void DivideBy2(int val) { int result = val / 2; } Codice:
00E616BE mov eax,dword ptr [val] 00E616C1 cdq 00E616C2 sub eax,edx 00E616C4 sar eax,1 00E616C6 mov dword ptr [result],eax Codice:
057EE8D8 mov eax,dword ptr [ebp-3Ch] 057EE8DB mov ecx,2 057EE8E0 cdq 057EE8E1 idiv eax,ecx 057EE8E3 mov dword ptr [ebp-40h],eax Mi sto anche chiedendo, ma la CPU non potrebbe da sola cambiare IDIV con SAR quando appropriato? Probabilmente sono cose che un AOT compiler come .NET Native, CoreRT e IL2CPU dovranno fare insieme ad altri "trucchetti" (eliminazioni di costanti, trasformazioni di divisioni con multipli di 2 in Right Shift, di moltiplicazioni in Left Shift, Loop Unrolling, Auto Vettorizzazione, ecc...) se si vuole arrivare vicini al livello di C/C++... Un'idea che mi è venuta è un IL2IL compiler che trasforme l'IL della Microsoft in una nuova versione "Machine dependent" che IL2CPU a sua volta ri-mastica per trasformarlo in assembler:
Questo è quanto avveniva in Midori e quanto viene fatto in .NET Native (il secondo IL è chiamato appunto MDIL Machine Dependent IL) peccato che non vogliano rendere Open Source quel compilatore Comunque tornando al Cosmos di oggi non quelli di anni ed anni nel futuro mi faceva schifo come dovevo dichiarare le costanti per le operazione con i floating point (attualmente deve esser fatto in tutt'altro file rispetto a dove sono usati e finiscono in una sezione chiamata "kernel stack" ) così mi hanno suggerito che per adesso potremmo anche metterle nello stack così ho provato a cambiare il codice in questo modo: Codice:
// There is no direct float negate instruction in SSE simply we do a XOR with 0x80000000 to flip the sign bit XS.SSE.MoveSS(XMM0, ESP, sourceIsIndirect: true); //XS.SSE.MoveSS(XMM1, "__floatsignbit", sourceIsIndirect: true); XS.Set(ESP, 0x80000000); XS.SSE.MoveSS(XMM1, ESP, sourceIsIndirect: true); XS.SSE.XorPS(XMM0, XMM1); XS.SSE.MoveSS(ESP, XMM0, destinationIsIndirect: true);
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 07-08-2016 alle 14:41. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:37.