Het besturingssysteem genaamd BirdOS

maarten70

Gevestigd lid
Ahhh... Het was me niet opgevallen dat we al op post 140 zaten. Naja bij deze: YAY! we hebben de 140 gehaald. :)
-------------------------------------------UPDATE------------------------------------------------------------

Ik heb me totaal niet gehouden aan de belofte dat er de 23e een update kwam, sorry daarvoor... Anyway, een update! Eindelijk, na 60 jaar wachten.

Introducing:
KMM --> Kernel Memory Manager
SATA apparaten kunnen worden gedetecteerd! (kunnen nog niet worden gelezen of geschreven)
Error 58 --> Unable to find specified PCI device (niet in staat het gespecificeerde PCI apparaat te vinden)

Bug fixes en optimalisaties:
Keyboard handler [optimalisatie]
v0.4.13.0 deed er ~2,088 seconden over om op te starten, huidige versies niet meer [bug fix]
Het verkeerde adres werd gelezen voor info over SATA apparaten, nu niet meer [bug fix]
Een data set voor het geven van commando's aan SATA apparaten was incompleet, nu niet meer [bug fix]

Huidige known issues:
KMM is in sommige gevallen niet in staat een vrije plek te vinden, terwijl deze er wel is, en geeft een error
De functie die SATA apparaten probeert te lezen en faalt, de error die gegeven wordt door het systeem bestaat niet in de functie (komt dus van 'buitenaf', zo lijkt het)
De functie die de fabrikant van de CPU zou moeten ontdekken is niet in staat deze te verkrijgen

KMM
De KMM is een nieuwe soort memory manager, deze regelt enkele memory management taken voor de kernel. Deze is in sommige gevallen succesvol, maar in andere niet en geeft in zo'n geval error 57 ("Failed allocating memory"). Deze memory manager is een extra manager die erbij komt die de kritieke data voor het systeem een plek in de RAM geeft, de oudere memory manager (nu genaamd de GMM, of Global Memory Manager) neemt enkele andere taken op zich en regelt de minder belangrijke data.

SATA apparaten gedetecteerd
Sinds versie 0.4.13.1 is het systeem in staat SATA apparaten te detecteren. Hieronder vallen onder andere HDDs/SSDs en CD-ROMs. Op de afbeelding zie je dat SATA en SATAPI apparaten gedetecteerd zijn, dit zijn respectievelijk HDDs en CD-ROMs. De afbeelding is een afbeelding van versie 0.4.13.2, maar deze versie doet hetzelfde.



Op deze afbeelding zie je ook gelijk de CPU fabrikant bug, in plaats van de fabrikant wordt S gegeven (dit is in de meeste gevallen NULL, oftewel niks). In nieuwere versies van Vireo (het systeem) wordt er maar een deel van de naam van de fabrikant weergegeven.

Error 58
Deze error ontstaat wanneer het systeem de opdracht geeft om een apparaat te zoeken, maar dit apparaat niet gevonden kan worden. Deze error heb ik te vaak gezien toen we dat probleem hadden met dat we PCI niet aan de praat konden krijgen, maar hij heeft wel geholpen (en helpt af en toe nog steeds).

Optimalisatie keyboard handler
Wanneer er op een toets gedrukt wordt op het toetsenbord gaat het systeem die afhandelen, de oude functie had 80+ regels aan code nodig om dit voor elkaar te krijgen. Het werkte ongeveer zo: ga elk karakter af, tot je weet welke het was en geef die door aan de juiste functie en doe er wat mee. Dit is heel inefficiënt omdat je eerst 26 letters, 10 cijfers en ongeveer 8 andere toetsen (dit waren de ondersteunde toetsen) moet vergelijken met de door jou ingedrukte toets. Dit deed ik eigenlijk door veel ja-nee vragen te stellen. Dus voor elke toets die je indrukte werden er in het ergste geval 44 ja-nee vragen gesteld om erachter te komen welke toets je had ingedrukt voor er ook maar iets mee gedaan werd. De nieuwe versie doet dat niet meer. Deze versie zet de code van de toets in een variabele, zo kan elke functie ermee doen wat ze willen en slaan we dus de stap met 44 ja-nee vragen over. De huidige versie ondersteund typen op het scherm niet meer, maar ondersteund bijvoorbeeld wel het wachten tot een toets is ingedrukt. Dit deed de vorige versie ook, maar dan met de 44 ja-nee vragen. Vergelijkend met hoeveel regels dit kost qua het schrijven van code, met behulp van een voorbeeld... Waar de oude versie 80+ regels nodig had voor het wachten tot je op enter hebt gedrukt, doet deze versie dat in 5 regels. Dat is stukke minder. :)

Wat?! 2,088 seconden!
In normale omstandigheden halen alle versies de 0,5 seconden (500ms) niet eens, maar bij deze versie (0.4.13.0) was dat anders. Met vijf keer testen kwam deze versie gemiddeld uit op 2,088 seconden. De kortste tijd met opstarten was 2,057 seconden, de langste was 3,021 seconden. De versie erop was alles weer normaal, wat best raar is. Het is waarschijnlijk verkeerd gegaan bij het omzetten van de menselijke leesbare code in computertaal, dit is vaker het geval geweest.

Bug verkeerde adres SATA info & incomplete data set
Deze waren best simpel, bij het verkeerde adres lezen had ik het verkeerde getal gegeven. Het systeem moet op decimaal adres 36 lezen maar ik gaf het systeem de waarde 9, wat dus het verkeerde adres was dat werd gebruikt. De incomplete data set kwam doordat ik een naam was vergeten in te tikken ergens, dit maakte het voor mij lastig om dingen te doen, maar het klopt weer.
 

maarten70

Gevestigd lid
Niet zo heel erg veel gedaan deze maand.

Ik kan wel vertellen dat ik besloten heb om SATA (AHCI) voorlopig naast me neer te leggen aangezien dat een absolute hel is (veel read errors en je komt er niet echt uit). Ik ben begonnen aan ATA, ofwel IDE, hiervan kan ik vandaag detecteren of het een CD-ROM of een HDD/SSD is. Hoewel AHCI niet ondersteund wordt zoekt de kernel nog wel naar de informatie daarvan en zet dat ook op het scherm.

Screenshot van versie v0.4.14.0:



master type = 1 houdt in dat de master een hardeschijf is.
slave type = 3 houdt in dat de slave een CD-ROM is.

Nieuw in deze versie:
- ATA apparaten worden gedetecteerd (alleen de PRIMARY bus)
- Trace functie, deze zet tekst op het scherm en kan gelijk ook een getal naar keuze erin zetten (hieronder meer)
- Errors en berichten van het zoeken naar een PCI apparaat kunnen genegeerd worden naar keuze (hieronder meer)

Trace, eerst moest ik een zin op het scherm zetten en dan pas kon ik een getal neer zetten dit kost veel ruimte en nu kan het anders. Zie de voorbeelden.
C:
//Oude versie
//print is de functie om zinnen neer te zetten en hexstr zet variabelen om in tekst

print("Dit is een getal:");
print(hexstr(10)); //zet 10 om, zodat de computer weet dat het tekst is
print("\n"); //nieuwe regel
C:
//Nieuwe versie
//Zoals je ziet zijn dit twee regels minder om te schrijven

trace("dit is een getal: %i", 10); //%i is gewoon de plek waar '10' neergezet moet worden
PCI zoeken, het kan natuurlijk zo zijn dat een bepaald apparaat niet aanwezig is waarvan je nou eenmaal moet weten of die er is ja of nee. Bijvoorbeeld een ethernet kaart, als je hem niet hebt dan is er geen probleem maar het systeem moet wel weten of 'ie er is. Voorheen als het dan niet gevonden kon worden zag je een error verschijnen met dat hij dat niet kon vinden, nu kan die genegeerd worden zodat je geen error ziet (om bijvoorbeeld paniek te voorkomen :)).

Verbeteringen in deze versie:
- Kmemset werkt nu wel, ik dacht veel te moeilijk na
- Het scherm wordt nu voordat er iets op het scherm gezet wordt eerst leeggemaakt (meer hieronder)

Scherm leeggemaakt, niet alle machines maken het scherm leeg als ze klaar zijn met hun tekst laten zien, zo kan dus tekst van het systeem en van de computer voor het opstarten door elkaar gehusseld worden. Dit wordt al gauw onleesbaar.

Dat was het wel zo'n beetje. ATA blijkt WEL makkelijk te zijn, ik hoop het maar, en als dat zo is zie je (hopelijk volgende maand) een update verschijnen ermee en dan kan ik je vertellen dat we van versie 0.4.x.x (waar we nu bijna een heel jaar op zitten) gelijk doorgaan naar versie 0.5.x.x. Wanneer we het halen is dat een hele grote mijlpaal.