Qu'est-ce que c'est CPinti Core ?
English version by MicrosoftTranslator or Google Translator
CPinti CoreTM for Cpcdos OSx
Un coeur, une innovation
A core, an innovation
par Sébastien FAVIER
Contributeurs
Mickael BANDVILLE
Johann GRAF
Léo VACHET
Qu'est-ce que CPinti ?
CPinti est un composant en cours de développement qui sera intégré au projet du coKernel, Cpcdos OSx. La prochaine version qui intègrera ce composant sera la version Cpcdos OS2.0.5 Alpha 4.0 qui est prévu pour fin 2016-2(date non précise). Ce composant est écrit principalement en C/C++14, Assembleur et FreeBasic pur et dur, il sera intégré tant que librairie interne au cpcdos. Il sera en mesure de gérer l'ordonnancement préemptif. La machine virtuel LLVM et le rendu 3D via GZE.
Etant donné que les versions antérieures à Cpcdos OS2.0.5 Alpha 3.9.5 fonctionnait sur un principe multitâche + dovents emulé, les performances n'étaient pas au top, par ce que Cpcdos OS2.0.5 Alpha 3.9.5 et antérieure, était fait de manière que les threads émulés devaient absolument finir leur opérations avant d'en traiter d'autres, et dans certains cas très hazardeux, le thread n'avait pas le temps de finir leur opérations et finissait par crasher complètement.... CPinti est là pour rajeunir tout cela!
CPinti ayant de vrais threads étudié, travaillé, et structuré à partir de zéro, il devrait théoriquement doubler même triplier les performances de vos OS basé sur Cpcdos. Vous aurez aussi un bel avantage, c'est avoir nativement du réseau TCP/IP. et la lecture/écriture de fichiers, du rendu 3D natif, et bien autre encore)
Nouvelle interface de la console Cpcdos V3.0 pour Cpcdos OS2.0.5 Alpha 4.0
Oui mais.... à quoi sert-il ?
Ce composant sera le principal "gestionnaire de tâches sur demande" et non ce n'est pas comme vous le pensez, il s'agit tout simplement à Cpcdos d'être accompagné d'un composant DE BASE très performant qui gère le multi-threading, le réseau, la lecture des fichiers, le 3D et le LLVM et désalloue les fonctions propre. Ce qui permet d'être aussi découpé en plusieurs parties ( Réseau, graphique, interaction utilisateur, IRQ, Virtualisation, etc... ). Chaque parties sont placée dans un ou plusieurs thread(s), chaque thread est exécuté "quasi en parallèle" avec une priorité personnalisable, tous soumis à une routine ISR avec ou sans IRQ. (Dans certain cas, l'exclusion mutuelle (Mutex) et de sémaphores y sont présent pour certains threads).
Chaque thread ont un emplacement mémoire publique qui permet de partager des données pour les autres threads
> Et pour répondre à la question, il sert au final, apporter des fonctionnalités, des possibilités supplémentaires, optimiser et améliorer les performances de vos systèmes d'exploitations Cpcdos en la multipliant par .. x3.
Hmm ok.. et plus simplement ..?
Pour faire bref, CPinti est là pour découper des grandes opérations. Ces grandes opérations sont les suivantes :
- Réseau -> http téléchargement de fichier web
- Réseau -> serveur TCP/IP sockets TCP pour créer un serveur de x sur le réseau
- Réseau -> ping trame icmp pour tester une machine à distance
- Lecture et écriture de fichiers
- Clavier / souris
- Interface graphique 1 Gestion des fenêtres + déplacements
- Interface graphique 2 Gestion des effets de survole, animations..
- Interface graphique 3 Gestion des événements graphiques
- Java
- Rendu 3D - GZE
- LLVM (Low-level-Virtual-Machine)
- Gestions des tâches & processus
- Moteur CpcdosC+ 1 Gestion des commandes & paramètres
- Moteur CpcdosC+ 2 "Directeur" des opérations de lectures
- Moteur CpcdosC+ 3 Console CpcdosC+
- etc...
Ces ~15 grandes opérations sont chacunes placés dans 1 ou pluieurs threads (Ou sur plusieurs). Chaque thread ont une priorité d'exécution [Très important; important; peut important; moyen; minimal]. Ils sont exécutés en parallèle, enfin presque en parallèle.. c'est à dire que si un thread n'a pas finit ses opérations, c'est pas grave pour lui, il se "met en pause" et laisse les autres threads prioritaires s'exécuter pendant un certain temps PUIS, il remet en lecture le thread précédemment mis en pause et vis versa. La vitesse dépendra des performances du CPU.
Un exemple avec le réseau :
Nous avons définit en priorité très importante, le serveur TCP/IP qui par exemple est un serveur Minecraft. Il doit très vite, répondre aux joueurs qui y sont connectés et en même temps, vous téléchargez en http, une vidéo AVI.
Du coup que fait CPinti ? Et bien CPinti s'arrange pour mixer les deux opérations, qui elles utilisent la même carte réseau MAIS, en laissant plus de temps d'exécution pour le serveur serveur TCP/IP pour qu'il ne soit pas perturbé pendant le téléchargement de votre vidéo mais (logiquement) le téléchargement de votre vidéo est ralentie, mais vous l'aurez ! ;-)
> Au final, (Prenons exemples avec les véhicules automobiles), CPinti va permettre de découper les opérations du kernel cpcdos sur plusieurs autoroutes. Pour améliorer la répartition des voitures, et la vitesse de circulation.
- 3 routes pour le réseau.
- 3 routes pour le graphisme.
- 3 routes pour le CpcdosC+.
- 1 pour le java.
- etc....
CPinti a pour but de découper les différentes opérations qu'effectue le kernel cpcdos. Il a pour but de maximiser ses performances, ainsi que de gagner en rapidité et en stabilité sur vos systèmes d'exploitation, codé en CpcdosC+ et/ou Java. Au final, cela aura pour but d'optimiser votre système.
et non je n'es pas de problèmes de but
Ses avantages ?
- Système optimisé, cœur principalement écrit en C/C++14 et Assembleur.
- Système plus fiable niveau performances comparé à cpcdos OS2.0.5 Alpha 3.9. (Répartition des tâches).
- Crashs corrigés. (Meilleure gestion de la mémoire RAM) --> Cause principale des crashs précédents
- Gestion utf 8 et police en console LC ou IUG (GUI).
- Rendu 3D vectoriel
- Machine virtuel LLVM
- Réseau tcp/ip nativement écrit dans CPinti + accès aux sockets avec possibilité de créer son propre serveur TCP/IP de x
+ Possibilité de communiquer en TCP/IP avec n’importe qu'elle appareil ( Windows phone, Android, PC, PS3 ... )
+ http/ftp..
J'ai déjà fais un système d'exploitation avec cpcdos OS2.0.5 Alpha 3.9, es ce que je dois le refaire de zéro ?? :-(
La réponse est : Pas totalement. Je m'expliques,
Le langage CpcdosC+ va évoluer, va passer à la version CpcdosC+ 3.0, et certaines choses venant de la Alpha 3.9 et antérieure ne fonctionnera plus correctement. Tout comme la commande FIX/ qui par défaut créera des variables type PRIVE avec 5 niveaux différents
Variable privé / public niveau :
- [1] Procédures / fonctions
- [2] Applications / processus
- [3] Utilisateur(s)
- [4] Système(s) d'exploitation
- [5] Kernel
Le CpcdosC+ aura une programmation orienté objet et avec les " notions de variables / procédures et fonctions privés / publics " du coup vos variables étant public de partout, bah... Il faudra bidouiller votre OS afin que ceci soit compatible !
Quel est l’intérêt de ce changement ?
L’intérêt principal c'est d'élargir les possibilités et se rapprocher au maximum des performances, la portabilité et l'organisation d'un programme, avec les langages actuels, s'approcher au maximum à la programmation orienté objet. Votre OS sera beaucoup mieux organisé niveau du code et en harmonie avec Cpcdos et CPinti. Des nouveaux tutoriels et exemples seront bien sûre à votre disposition. Et surtout pouvoir "faire communiquer" votre propre OS sur un système existant comme microsoft Windows, PS3, 4, Linux, mac, andoid en utilisant le même protocole réseau. Et bien evidement communiquer sur l'internet !
Quelles sont les grandes fonctionnalités actuels avec Cpcdos ? La différence avec la version précédente ?
* Rendu 3D, grâce au moteur GZE créer par Maeiky, capable d'utiliser le rendu hardware/CPU pour du rendu d'image vectoriel ce moteur vous permet de créer du rendu 3D dans votre OS, et bien évidement des jeux vidéos. Son développeur est très actif, aucune puce graphique est exigée, seulement 64-128Mo de carte graphique est fortement conseillé, un exemple en vidéo ici de deux images en rotation dans l'espace. Il sera programmable depuis le CpcdosC+ et/ou depuis son propre langage en développement.
* Un langage hybride, cet à dire qu'il à des syntaxes Françaises (comme vous le connaissiez tous) et des syntaxes anglaises.
vous pourrez mixer du CpcdosC+ Français/Anglais sur le même code, ou la même ligne sans problèmes! Et vous pourrez configurer la langue générale du noyau en 1 seule commande afin d'avoir les messages d'erreurs, avertissement ou autre dans la langue choisie sans redémarrer le système. Ce qui permet d'étendre le projet du Cpcdos dans le monde. Comme par exemple, vous avez définit la langue en Français, si vous tapez la commande aide/ ou help/ il aura la même fonctionnalité tout en affichant l'aide en Français. Puis si vous avez définit la langue en Anglais, si vous tapez la commande aide/ ou help/ il aura la même fonctionnalité tout en affichant cette fois, l'aide en Anglais.
* LLVM (Low Level Virtual Machine) Vous permet de coder des application en C/C++ depuis Windows ou Linux. Grâce au compilateur Clang, ce dernier crée un fichier bitecoded exécutable depuis une LLVM via une compilation à la volée (voir JIT). Etant très proche du processeur, ce dernier va vous garantir des performances extrêmement proche du natif à l'architecture.
Voici les étapes de compilation de Clang :
Ce dernier génère un fichier "TEST.LL" et ce fichier est exécutable par Cpcdos! :)
* Une programmation avec un niveau de de visibilité à 5 niveaux Vous pourrez programmer une application A qui crée une variable toto, et une autre application B qui crée aussi la variable toto ça ne sera plus comme les version de Cpcdos antérieure à la Alpha 3.9.5, cet à dire que la variable toto de l'application B ne touchera pas la variable toto de l'application A, en gros, chaque application aura dans sa bulle privée, ses propres variables :-) Si vous voulez que l'Application B modifie la variable toto, il faut que l'Application A crée la variable toto avec un niveau de publicité plus haute. Augmenter le niveau de publicité permet aux autre applications de s'échanger des informations, dont les variables. Problématique, le compte utilisateur TONTON ne voit pas la variable toto que l'application A ou B dans l'utilisateur TATA à crée. Il faut alors encore augmenter le niveau de publicité pour qu'ils puissent s'échanger les informations, dont les variables. Cette évolution à pour avantage, de pouvoir exécuter en plusieurs instance, la même application CpcdosC+ (ou java) dans le même ou dans plusieurs compte utilisateurs. Et porte intérêt à la sécurité et à la fiabilité de vos OS ou vos programmes. Tout cela grâce à un système de clé 28bits qui permet l'identification propre de chaque procedures&Fonctions/applications/utilisateur/OS qui correspond à t-elle ou t-elle variables/procedures qui permettra au final d’exécuter théoriquement 14.745.375 applications/variables. Et en plusieurs instances!
* L'exécution/Lecture du CpcdosC+ "multi-threadé" permettra l’exécution en parallèle de programmes CpcdosC+. Vous connaissiez quasiment tous la commande suivante :
Exe/ & MonProgramme.cpc
Ce qui permet d'exécuter un programme CpcdosC+ dans un autre thread (émulé) mais il faut attendre la fin de ce dernier. Désormais il y aura aussi la possibilité d'utiliser une commande du type :
Exe/ &+ MonProgramme.cpc
Ce qui permet de créer un nouveau thread qui lui serai capable de lire et d'exécuter du code CpcdosC+ en même temps que le précédent qui vient de l’exécuter :-)
Un autre avantage est présent dans le cœur de CPinti, c'est l'exécution du code CpcdosC+ non compilé en mémoire RAM, ce qui boosterai théoriquement x20 la vitesse d'exécution d'un programme CpcdosC+ comparé à la version précédente du moteur CpcdosC+ de la Alpha 3.9.
* Lecture et affichage utf-8 et polices personnalisées qui permettra d'étendre le nombre affichage des caractères universels et personnaliser votre OS avec des polices de votre choix n’importe où et de n’importe quelle taille.
* Réseau natif Avec possibilité d'utiliser le protocole http, ftp et accès aux socket TCP qui permettra l'accès étendu au réseau. Pour montrer un exemple, j'ai développé une application Windows Phone qui permet d'envoyer des commandes CpcdosC+ à partir du téléphone, et le serveur CPinti en écoute, réceptionne les requêtes et les exécutes. (Une ancienne photo ci-dessous). La portabilité sur Android est possible.
Le protocole http est aussi présente dans le cœur de CPinti. Ceci permettra d'effectuer des requêtes sur le web, télécharger des fichiers etc... (Un exemple avec un serveur Apache à la maison). Ce protocole, comme tous les autres, sont multi-threadés, il y aura donc possibilité de réceptionner plusieurs requêtes différentes provenant de plusieurs serveurs. (En gros, télécharger plusieurs fichiers à la fois).
< en cours de rédaction >
Cpcdos OS2.0.5 Alpha 4.0 & CPinti Core(tm) en vidéo --> https://www.youtube.com/watch?v=H1RmurTQeVE
Sébastien FAVIER. Calculs et tests des performances de Cpcdos Alpha 4.0 sur 4 PC x86 (09/05/2015)
Commentaires (7)
- 1. | 16/03/2016
- | 16/03/2016
- 2. | 16/12/2015
J'espère que la police et la couleur des label, textbox ect.... seront disponible ;-) .
- 3. | 07/11/2015
Il serait bien de créé Office pour Crafty Os.
- | 07/11/2015
- 4. | 07/06/2015
Maxime.
- | 08/06/2015
Ajouter un commentaire
Date de dernière mise à jour : 01/06/2016
Pour le décodage rien de plus simple que de recoder la fonction regexp avec un système de split, que tu devra coder en C avec des vector, ensuite quand tu dit "decodage" enfaite y a aucun décodage, tu va devoir coder un navigateur mes pas un décoder.
Enfin je sais pas mais il me semble quand C il y a "strsplit". Coder un moteur de rendu html sa va vous prendre des années si vous voulez qu'il sois compatible avec la première version du html, après vous allez bloquer sur l’exécution du js et il est fort probable que vous abandonniez à partir de l’interpréter de js.
Moi je vous proposes de vous lancez dans la création d'un interpréter de fichier PE fonctionnel à 100% et d'utiliser l'API ou même le programme de firefox.
Oulahahahah pour la parti réseau vous allez devoir recoder tout les drivers qui éxiste sur se monde... donc trouver un moyen d'émuler les drivers du kernel linux, mais la il vous faudra émuler en plus les fichiers ELF ... donc un gros bordel tout sa.
Il y a certaines marque de produit qui font leurs propres drivers pour chaque matériel comme D-LINK, Broadband, Gigabyte, Asus, AMD( et ATI), Nvidia etc......
Allez salou bonne chance