Vireo II

m44rtn

Gevestigd lid
Lid geworden
23 sep 2016
Berichten
403
Waarderingsscore
22
Punten
0
Leeftijd
19
Introducing build 3xxx, het is zover.

Hier een TL;DR:
- Virtual memory allocation (paging)
- Kernel panic voor Page Faults (paging)
- Debug kernel panic om debuggen in sommige gevallen makkelijker te maken
- FAT32 lezen en schrijven van bestanden (met bugs)
- FAT32 hernoemen van bestanden
- Wat kleine verbeteringen

Virtual Memory Allocation – valloc() en vfree()
valloc() en vfree() zijn twee functies die het mogelijk maken om paging ook daadwerkelijk te gebruiken. Een paar updates terug had ik de basis voor paging geimplementeerd, maar dit deel was er toen nog niet.

De twee functies zijn directe tegenhangers van kmalloc() en kfree(), die bestonden sinds post #8. Waar de twee k..() functies bedoeld zijn voor tijdelijke kernel memory (dat bij elkaar niet groter dan 1 MB is) zij de v..() functies bedoeld voor meer permanente en grotere taken. De v..() functies zullen ook gebruikt worden voor alle programma’s en bestanden.

Dus waar we voorheen alleen tijdelijk geheugen hadden hebben we nu permanenter geheugen die gebruikt kan worden voor alles binnen het besturingssysteem.

Kernel panics
Daarnaast zijn er twee nieuwe dingen in kernel panic land aanwezig. Allereerst de nieuwe kernel panic voor Page Faults. Deze kernel panic is handig als er een geheugen probleem ontstaat. De Page Fault panic kan de lezer namelijk duidelijk maken of het probleem bij de kernel ligt of bij een programma.

Daarnaast is er nu ook een manier voor de kernel om een panic te laten zien die voornamelijk gebruikt zal worden voor debugging.
Een voorbeeld hiervan is de volgende kernel panic:

02b850d0f2825f619330d7ee0cdb98b9.png


Deze panic vertelt de lezer waar in de code deze panic vandaan komt en de locatie van de desbetreffende code in het geheugen. Dit kan het makkelijker maken om grote problemen te voorkomen en te ontdekken/op te lossen.

FAT32 support
Afgezien van wat bugs wordt FAT32 nu ondersteund op de volgende manieren:
- Lezen en scrhijven van bestanden.
- Het hernoemen van bestanden.

Delete werkt nog niet maar dat volgt een keer in de toekomst, op dit moment vind ik dat nog niet heel erg belangrijk.

Zoals bij de meeste grote milestones (want dat is dit) zijn we op het moment aangekomen waar ik je vertel dat de huidige implementatie beter is dan Vireo-I en veel meer kan, bla bla bla…

Om eerlijk te zijn, als er iets is wat ik haat om te programmeren is het wel dingen die te maken hebben met opslag (hardeschijven en bestandssystemen). En hoewel de huidige driver 100x beter is dan die van Vireo-I zijn er nog steeds dingen die toch echt beter kunnen. Opslag is helaas een ding dat het minst wordt aangepast nadat het eenmaal werkt.

De FAT32 driver van Vireo-I zat volledig vast gekoppeld aan de functionaliteit van het systeem. Dit is veranderd. De FAT32 driver van Vireo-II is net zoals de IDE driver in zekere zin losgekoppeld van het systeem. Het wordt behandeld als een apart programma, zoals alle andere drivers behandeld zullen worden.

De FAT32 driver kan twee hardeschijven, die elk vier partities hebben, ondersteunen. Dit betekent dat je in totaal acht partities kan hebben. Vireo-II zal vervolgens rekening houden met deze partities en waar deze op de hardeschijf staan. Dit is weer een verbetering ten opzichte van Vireo-I, die geen partities kon ondersteunen. Vireo-I ging ervan uit dat er geen partities waren en dat alles begon bij de eerste 512 bytes van de hardeschijf. Dit is eigenlijk nooit het geval.

Deze driver kan naast lezen, ook bestanden schrijven en hernoemen. Vireo-I kon alleen lezen en niet eens goed. Waar Vireo-II het hele bestand leest kon Vireo-I alleen de eerste paar sectoren lezen (afhankelijk van hoe FAT32 geinstalleerd is tussen de 1-8KB). En zelfs dat mislukte vaak.

Bestanden lezen
Hieronder kan je zien dat het bestand AUTOEXEC.BAT van FreeDOS 1.2 wordt gelezen en op het scherm uitgeprint wordt. De rare tekens tussendoor zijn normaal, aangezien ik de UTF-8 bestandsencoding niet ondersteun.

fbc4a40aae0caa9684b4c9f9962f7283.png


Bestanden schrijven
De driver kan een bestand schrijven. Dit is lastig te bewijzen met afbeeldingen, dus je moet me maar geloven. :)

De tijd wordt niet op de juiste manier opgeslagen (datum is 1980, eerste datum mogelijk bij FAT32, tijd 12:00). Dit komt omdat Vireo geen tijd en datum ondersteund. Dus dit is normaal voor Vireo.

Soms is het zo dat de inhoud van het bestand ook apart wordt opgeslagen als een apart bestand met dezelfde bestandsnaam als de inhoud. Dit moet nog opgelost worden

Hernoemen van bestanden
Ook dit moet je maar geloven.

Hoe werken bestandspaden
Door deze driver is nu officieel bepaald hoe je bestandspaden aangeeft bij Vireo.

Zoals voor velen bekend zal zijn is bij Windows dit de manier:
[drive_letter]:\voorbeeld\bestand.txt

En bij Unix-achtigen:
sd[drive_letter][partitienummer]/voorbeeld/bestand.txt

Bij Vireo is dit anders, namelijk als volgt:
HD[drive_nummer]P[partitienummer]/VOORBEELD/BESTAND.TXT

En in de toekomst bij CD’s:
CD[drive_nummer]/BESTAND.TXT

HD staat voor harddrive en P staat voor partition. Ofwel je schrijft altijd op (ook al is het met afkortingen) wat je bedoelt.

Op dit moment is HD0 niet per se de systeemhardeschijf. Vireo geeft op dit moment een nummer aan de hardeschijf op basis van waar of wanneer het gevonden is. De eerste hardeschijf die het vindt krijgt de naam HD0 en de eerste CD-drive de naam CD0. De partities staan ook op volgorde van hoe ze op de hardeschijf aangetroffen worden.

Dit betekent dat een PC met 1 HDD en 1 CD de volgende apparaten kent in de ogen van Vireo:
- CD0
- HD0

What’s next
Ik heb een paar doelen voor Vireo, soms komen er wat bij en soms gaan er een paar weg maar het komt eigenlijk altijd op hetzelfde neer. Wat ik wil van Vireo is dat ik er veel van geleerd heb, het op oudere computers draait, dat ik er wat mee kan en dat het altijd een soort ‘platform’ is. Met platform bedoel ik dat het er is en dat er in de toekomst altijd wat toegevoegd kan worden mocht dat nodig zijn.

Ik heb veel nagedacht over waar ik Vireo uiteindelijk heen wil brengen. Voor mij is het belangrijk dat ik niet voor eeuwig bezig ben met Vireo, maar dat er ook een keer een eind aan komt (zodat er ruimte is voor nieuwe projecten bijvoorbeeld).

Ik ben tot de volgende planning gekomen, die ik hopelijk eind volgend jaar af heb:

5a41b9b13bb484b5620575405b962191.png


Zoals je ziet geen grafische user interface, (U)EFI ondersteuning of 64-bits versie. In de huidige planning is alleen rekening gehouden met de v0.1 en v0.2 versies die eraan komen en die sowieso een werkend, erg aanpasbaar en relatief bruikbaar systeem opleveren. Voor deze twee versies zal sowieso een User Manual (wel engels) geschreven worden.

Vireo wordt een monotaskend systeem met een command line die hopelijk makkelijk in de omgang is. Er zullen wat basis drivers meegeleverd worden en het kan flat en ELF binaries uitvoeren, zichzelf installeren (m.u.v. het formatteren van hdd’s) en wat oudere poorten ondersteunen zoals serieel en parallel.

Na v0.2 zal Vireo niet meer een actief project zijn. Echter, bugfixes zullen zeker gedaan worden en eventuele extra features zullen toegevoegd worden wanneer dit voor mij of anderen nodig is.

Dus mocht de toekomstige lezer hier komen, en het een toekomst is waar ik ook daadwerkelijk Vireo afgekregen heb. Je mag bugs altijd doorgeven. :)
 

m44rtn

Gevestigd lid
Lid geworden
23 sep 2016
Berichten
403
Waarderingsscore
22
Punten
0
Leeftijd
19
* Daarmee wil ik niet zeggen dat een feature nooit toegevoegd zal of kan worden. Het is dan gewoon niet meer mijn hoofd project.
 

Rubensky

NCF Goeroe
Forumleiding
Administrator
Lid geworden
17 okt 2011
Berichten
20.608
Waarderingsscore
288
Punten
0
Wat hoop je na versie 0.2 dan met het systeem te gaan doen? Of wie moet het gaan gebruiken?

Daarnaast vraag ik mij in hoeverre 32 bit architectuur nog zal worden gebruikt tegen de tijd dat jij klaar bent.
 

m44rtn

Gevestigd lid
Lid geworden
23 sep 2016
Berichten
403
Waarderingsscore
22
Punten
0
Leeftijd
19
Allereerst is het zo dat na v0.2 er nog wel gewerkt wordt aan Vireo maar alleen wanneer ik iets extra's nodig heb, of iemand anders, of er een bug is (ook als die bug door iemand anders gevonden wordt).

Na v0.2 kan dit systeem draaien op 32-bits computers, met een seriele of parallele poort (optioneel), IDE hardeschijf/CD-speler en een BIOS . Deze seriele en parallele poorten zijn soms nodig voor het programmeren van externe dingen en zijn dus handig om te hebben. Windows maakt het tegenwoordig al erg lastig om een van die poorten te gebruiken. Ik heb Vireo in principe zo gemaakt dat als er iets extra's bij gemaakt moet worden dat dat altijd kan.

v0.2 wordt in ieder geval een systeem waar je standaard commando's hebt (zoals dir/ls, type/cat, ver/uname, etc.) daarnaast kunnen binaries erop draaien. Dit betekent dus dat als je iets mist, en je kan programmeren, je in principe een applicatie kan toevoegen. Mocht je iets willen kan je ook mij vragen, maar of het dan ook gemaakt wordt hangt af of het voor mij en/of meerdere mensen nuttig is.

32-bits systemen zijn misschien minder populair en zoals ik al meerdere keren in het verleden heb aangegeven is Vireo niet bedoeld om je dagelijkse systeem mee te vervangen. Dit is ook niet mogelijk als ik dit systeem ooit af wil hebben. Ik wil ook niet een 64-bits versie compleet uitsluiten, het is zeker niet lastig om toe te voegen, maar ik zie dit niet gebeuren in de nabije toekomst. Ik vind dit simpelweg niet nodig om toe te voegen om mijn doel te behalen.

Maar als je kan programmeren in C kan je ook altijd dingen toevoegen aan het systeem. Het is open source, en als je Github hebt kan je zelfs een Pull-Request maken zodat dingen aan Vireo worden toegevoegd.

Een voorbeeld van de dingen die ik ermee wil kunnen doen is om het te gebruiken met een andere oudere computer die een bi-directional poort ondersteund zodat je bestanden kan overzetten. Denk aan mijn IBM PC-XT. Helaas heb ik geen ISA kaart die bi-directional is, maar ik zou in ieder geval een aantal bestanden van de XT naar een andere computer over kunnen zetten.

Ik heb ook een soort motor driver die wordt aangestuurd met een seriele poort. Daarvoor is Vireo dus ook handig.

Bij v0.2 zal een handleiding komen en een soort devkit. Die devkit bestaat dan uit een aantal libraries e.d. die je kan gebruiken om een programma te maken.

Ik hoop dat ik je vraag een beetje beantwoord heb.
 

m44rtn

Gevestigd lid
Lid geworden
23 sep 2016
Berichten
403
Waarderingsscore
22
Punten
0
Leeftijd
19
Uitleg komt later.

 

m44rtn

Gevestigd lid
Lid geworden
23 sep 2016
Berichten
403
Waarderingsscore
22
Punten
0
Leeftijd
19
Uitleg komt NU! :)

Sinds vandaag kan Vireo programmaatjes laden en uitvoeren. Op dit moment moet het programma alles zelf doen en dat is niet ideaal dus er moet nog een API komen - een manier waarop programma's iets kunnen opvragen van de kernel (bijvoorbeeld een bestand). Zo hoeft het programma niet zelf ook nog code te hebben om een bestand van de hardeschijf te lezen, want dat kan de kernel dan doen.

Daarnaast skipt Vireo op dit moment nog wat veiligheids dingetjes die het wel zou moeten gaan doen, dus dat moet ook nog een keer gedaan worden (bijvoorbeeld het scheiden van gebruikers programma's en het besturingssysteem zelf, op dit moment kunnen ze elkaar beïnvloeden).

Er is een release hiervoor te verkrijgen op GitHub, er valt niet zoveel te zien: het is eigenlijk gewoon wat je in de video hierboven ziet, maar dan zie je het zelf. De release is build 3658, ook wel bekend als v0.1-pre1. Dat is dus nog niet v0.1 maar een release dat voor v0.1 zit.

Op de milestone kaart van een paar posts terug zitten we dan nu rond 'Installing...', waarvoor eerst wat voorbereidend werk gedaan moet worden, zoals een API maken.

De release is hier te krijgen: Releases · m44rtn/vireo-kernel
 
Bovenaan Onderaan