Vireo II

m44rtn

Bekend Lid
Lid geworden
16 jan 2018
Reacties
489
Reaction score
93
Punten
28
Leeftijd
19
Website
github.com
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 Lid
Lid geworden
16 jan 2018
Reacties
489
Reaction score
93
Punten
28
Leeftijd
19
Website
github.com
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 Lid
Lid geworden
16 jan 2018
Reacties
489
Reaction score
93
Punten
28
Leeftijd
19
Website
github.com
* Daarmee wil ik niet zeggen dat een feature nooit toegevoegd zal of kan worden. Het is dan gewoon niet meer mijn hoofd project.
 
Bovenaan Onderaan