Vireo II

Zoals aangegeven in het voorgaande topic Vireo kernel, wilde ik beginnen aan een nieuwe, verbeterde Vireo kernel. Hier wil ik graag in dit nieuwe topic dieper op in gaan. Verder wil ik ook graag vragen beantwoorden, en naar feedback luisteren. Voor feedback hoef je niks te weten over programmeren en alle feedback is welkom: kwaliteit van de documentatie bij Vireo, de doelen van Vireo, wat jullie zelf graag zouden willen zien, etc. Zelfs feedback over de updates op dit forum mag je hier kwijt.

De Vireo kernel bestaat sinds deze maand uit twee smaken: de oude Vireo I en de nieuwe Vireo II. Ik wil in deze post weer even kort herhalen wat er nou aan de hand was met Vireo I en daarnaast ook nog wat extra informatie geven over waar je het nu kan vinden en wat ermee gaat gebeuren. De rest van deze post ga ik besteden aan Vireo II en hoe ik daar verder mee wil gaan.

Vireo I: in het kort
De eerste kernel, Vireo I, bestaat sinds 2015. Ik heb met die kernel leren programmeren, wat betekent dat er veel problemen mee zijn. Als je net begint met houtbewerken zal je eerste bijzet tafeltje ook niet de mooiste zijn. Dit principe zie je terug in Vireo I.

Een aantal problemen met Vireo I was dat er niet van tevoren gepland werd wat ik nou van de kernel wilde, of hoe het ging werken. Ik had ook geen documentatie geschreven voor mijn code, wat soms betekende dat ik niet meer goed wist hoe het werkte of wat het verwachte. Door al deze dingen was ik meer bezig met onderhoud van de kernel dan nieuwe dingen schrijven, en het is ook gewoon niet fijn om in een rommelige kernel te werken en dat je soms niet eens meer weet wat je zelf gemaakt hebt.

Vireo I: Hoe nu verder?
Vireo I is niet meer ondersteund en er zal niet meer actief aan gewerkt worden. De code en binaries zijn nog wel verkrijgbaar op GitHub, alleen ergens anders (master branch op GitHub is niet meer de default branch). Dit betekent verder niet zoveel. Zelf zou je het kunnen downloaden en aanpassen, kunnen verbeteren of er iets nieuws mee maken. Je kan het ook een keer uitproberen in een virtuele machine, ook al zal het niet zo heel erg interessant zijn.

Vireo I kon al best veel, alleen was er niet iets voor gebruikers zodat ze het konden gebruiken.

Vireo II: Wat is het?
Vireo II is een verbeterde versie van Vireo I, die zal bestaan uit (op)nieuw gechreven code en ge-re- of ge-upcyclede code. Er zijn ook wat verbeteringen op de achtergrond die het voor mij makkelijker maken om het te maken.

Vireo II: Status update
Vireo II kan ook gevonden worden op GitHub: https://github.com/m44rtn/vireo-kernel. Er is voor Vireo II documentatie: de vireo_kernel_refman.html (Engels), de refman tot nu toe kan je vinden op GitHub. In de bijlage kan je ook de refman vinden tot nu toe. De kernel kan weer simpele text mode dingen op het scherm doen, met een resolutie van 80x25x2. Die resolutie is standaard en wordt geinitialiseerd door de BIOS. Met text mode kan je alleen maar tekst laten zien. Afbeelding:

6a01b045c8200b7b04d5fe43f6e68af9.png


Vireo II stopt ook met de versie nummers die Vireo I gebruikte (zoals de release.major.minor.build en major.minor.build nummers). In plaats daarvan zal er alleen een build nummer zijn bij Vireo II.


Vireo II: Hoe nu verder?
Ik ga me bezig houden met alles wat in Vireo I zat weer in Vireo II te proppen. Ik kan me voorstellen dat dit saai is, aangezien jullie het al een keer gezien hebben. Daarom zal ik gedurende die tijd minder updates plaatsen, en misschien af en toe een keertje een progress report. Wanneer alles er weer in zit, ga ik kijken hoe ik de updates verder ga brengen (of dat weer eens per maand is, op de 23ste, of op een andere manier zoals met elke nieuwe interessante toevoeging). Misschien hebben jullie hier ideeen over?


Als er vragen zijn beantwoord ik ze graag, als er feedback is hoor ik het graag. Dit topic heeft niet voor niets de discussie prefix. ;)
 
Laatst bewerkt door een moderator:

m44rtn

Bekend Gezicht
Lid geworden
16 jan 2018
Berichten
492
Leeftijd
19
Website
github.com
OS
Windows, Linux en Vireo
Ik ben nu bezig met FAT32, waarvan het lezen van bestanden werkt. Voordat ik de volgende update schrijf wil ik in ieder geval het kunnen schrijven van bestanden ook (in ieder geval een soort van) werkend krijgen.

Sneak peek:

1a36769cabceaf1b371b950d3d9eb67d.png


De rare tekens tussendoor die horen daar, aangezien ik nog geen file encodings ondersteun (denk aan UTF-8)
 

m44rtn

Bekend Gezicht
Lid geworden
16 jan 2018
Berichten
492
Leeftijd
19
Website
github.com
OS
Windows, Linux en Vireo
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

Bekend Gezicht
Lid geworden
16 jan 2018
Berichten
492
Leeftijd
19
Website
github.com
OS
Windows, Linux en Vireo
* Daarmee wil ik niet zeggen dat een feature nooit toegevoegd zal of kan worden. Het is dan gewoon niet meer mijn hoofd project.
 

m44rtn

Bekend Gezicht
Lid geworden
16 jan 2018
Berichten
492
Leeftijd
19
Website
github.com
OS
Windows, Linux en Vireo
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: https://github.com/m44rtn/vireo-kernel/releases
 
Bovenaan Onderaan