Gå til innhold

Anbefalte innlegg

Webside:http://osproject.brinkster.net/

 

Prosjektet heter nå Dvorient

 

medlemmer:

GeirGrusom

staalezh

strykejern

norgul

Jaffe

chills

CronoMan

 

De som vil være med, kan enten si ifra på #[email protected] eller sende meg eller en annen medlem en PM

 

Vi bruker GNU GRUB som bootloader.

 

SourceForge.net prosjekt kommer i løpet av få dager.

 

worklog:

25.02.2007

Idéen er at alt i operativsystemet skal fungere som "devices"

alle mapper, alle filer, alle programmer, vil bli listet i "filsystemet" noe lignende unix

Men: all devices kan ha en rekke funksjoner, kun én er delt av alle:

enum

denne funksjonen viser alle funksjonene som denne devicen har, list, delete, close etc.

Så hvis et program eller brukeren vil vite hvor mange harddisker det er på maskinen, kan den kalle

sys/dev/hdd/list

Som så forer en stream med en liste over alle harddiskene

så kan man kalle sys/dev/hdd/hdd0/:freespace f.eks. for å få vite hvor mye ledig plass det er på disken

Mange devices har en funksjon som heter type, som forer en stream med all data i den devicen, f.eks:

sys/dev/hdd/hdd0/MyFolder/readme.txt/:type

 

18.03.2007:

Vi har funnet ut at alt av objekter vil bli definert med en XML fil, eller stream

Idéen er tatt fra Glade User Interface til GTK+ og Gnome

Dette gjør at alt av objekter som skal lages, defineres først i en XML fil, som blir parset av systemet.

Dette gjelder også GUI når det kommer på banen.

Men i første omgang, blir det for alt av objekt orientert programmering i C av drivere o.s.v.

Nærmere detaljer kommer etterhvert som vi får diskutert dette.

 

21.03.2007:

Shellet (når den tid kommer) vil i utgangspunktet bruke Python som språk.

Men vi vil begynne med en enkel sak skrevet i C, for å kunne behandle systemet i begynnelsen. Dette vil bare kunne drive filbehandling, og starte programmer.

Python shellet, vil ha full python syntax, og være istand til å kjøre "exposed" funksjoner.

Vær obs på at hvis man kjører "exposed" funksjoner fra moduler, så vil den modulen forbli i minnet til shellet avsluttes.

 

23.03.2007:

Vi vil i starten bruke FAT som filsystem, dels fordi det er enkelt, og dels fordi disketter bruker FAT12, dette skriver jeg på as we speak.

Vi skal ha et stream system for å lese og skrive til all slags devices, som det nå jobbes med av staale.

Jaffe har fått til IRQ nå, så dette blir bra.

 

25.03.2007:

Jaffe har fått til allokering av 4KB pages i kernelen, dette er første skritt mot dynamisk minneallokering.

Stor takk til Jaffe :)

Endret av GeirGrusom
Lenke til kommentar
Videoannonse
Annonse

Jeg holder på å lage en test-shell i C#, som skal fungere sånn som tanken er... bare litt mer jobb nå, så kan jeg vise dere

edit:

Jeg har bare litt problemer med å få IO streamene til å fungere på tvers av funksjonene.

 

Tenk for deg hvordan linux er, du har root/dev hvor alle devices ligger, idéen er at alt skal være devices for operativsystemet, så alle programmer som kjører, vil bli listet i en egen device f.eks.

/sys/dev/mem/app f.eks.

/sys/dev/mem/app/list vil lage en liste over alle programmer som er igang, inn i en stream, og gi det til enten ditt program, eller consolen.

Endret av GeirGrusom
Lenke til kommentar
Mange devices har en funksjon som heter type, som forer en stream med all data i den devicen, f.eks:

/sys/dev/hdd/hdd0/MyFolder/readme.txt/type

8023126[/snapback]

 

Hmm... og hva om jeg har 2 filer:

/sys/dev/hdd0/myfolder/readme.txt

og

/sys/dev/hdd0/myfolder/readme.txt/type

? :)

 

Kanskje det hadde vært bedre å brukt noe annet enn /. F.eks:

/sys/dev/hdd0/myfolder/readme.txt:type

 

?

 

 

Tror du har mye annet å tenke på om du skal skrive et OS igrunn.... Good luck! :cool:

Lenke til kommentar

Vel, tenkte at en kanskje kan skrive * foran funksjoner eller noe, for å skille dem fra filer i en mappe, men idéen er at current path = current device

Planen var også at operatiovsystemet internt, skulle ha alle funksjoner (som "dller" og slik) som en del av operativsystemet, så hvis du vil allokere minne, kan du kalle (i C)

device dev = GetDeviceHandle("sys/dev/mem");
int *ptr = AllocateMemory(dev, sizeof(int));

eller i C++:

MemoryDevice *dev = (MemoryDevice*)GetDeviceHandle("sys/dev/mem")

int *ptr = dev.alloc(sizeof(int));

 

tenkte også at programkode formatet skal støtte VM programmer, og flere prosessorer i samme fil.

Lenke til kommentar

Planen skal være et lite, effektivt OS, som er enkelt, og logisk (og det skal ikke Unix ha på seg at det er)

Jeg har laget en liten shell i C#, som fungerer nogenlunde sånn jeg hadde tenkt meg, foreløpig kan man slette filer, og mapper, og avslutte prosesser med den.

Den krever .NET 2.0 for å fungere

 

Jeg har også fundert mye på programfilformatet, at den faktisk støtter VM kode i exe filen, samt flere typer prosessorer i samme fil.

 

For å kalle funksjoner, skriver du : foran, f.eks. :enum viser alle funksjoner som er tilgjengelig i den aktive devicen.

:list lister alle undergrupper

:delete sletter,

:kill avslutter prosesser

:getfilename får tak i filnavnet til moduler

 

prøv selv

ngos.zip

Lenke til kommentar
For å kalle funksjoner, skriver du : foran, f.eks. :enum viser alle funksjoner som er tilgjengelig i den aktive devicen.

:list lister alle undergrupper

:delete sletter,

:kill avslutter prosesser

:getfilename får tak i filnavnet til moduler

Så... det du har nå er et shell, skrevet i C#. Veien fra en kommandotolker til et operativsystem er ganske lang og inkluderer flere språk enn C# :) Hvis du virkelig vil skrive et OS (jeg har gjort det selv og det er veldig gøy!) så er det en del mer man bør tenke gjennom enn akkurat hvordan shellet skal fungere.

Lenke til kommentar

Jeg er klar over dette, jeg har selv drevet mye med Assembly og C++ og lest blant annet lest litt fra Realtime Operating Systems

Jeg har ikke tid til å drive med dette nå, siden jeg begynner å få litt dårlig tid på et prosjekt som skal være i beta stadiet i løpet av mars, så jeg har bare luftet idéen med dere.

 

Glemte å nevne at < tar deg tilbake én, samme som cd.. i DOS

Endret av GeirGrusom
Lenke til kommentar

ChrisitanW: Jeg er klar over det, sjekk ut ngos.zip i en av mine forrige poster, det er et shell jeg laget i C# for dette, grunnen er at det jeg nevner er beste forklart gjennom et shell.

Idéen er ikke selve shellet, men at hele Operativsystemet sitt driversystem, og programmeringsinterface skal fungere på den måten, at shellet skal kunne ha full kontroll (i teorien) over operativsystemet.

 

Tenkte også at alle programmer har en liste over securitytokens, som sier hva dette programmet trenger for å kjøre (nettverk, GUI, filsystem, minnekontroll, hardware access etc.) for å kunne gjøre to ting:

hindre brukeren i å starte et eventuelt skadelig program, eller å kjøre programmet "exclusive"

Operativsystemet laster kun driver og slikt som trengs for at det programmet skal kjøre, ikke noe mer, for å gi dette programmet alle ressursene det trenger.

 

Alle programfiler skal eksportere minst én funksjon: int main

og at denne vil bli listet når du er inne på f.eks.

/sys/dev/hdd/hdd0/programs/winamp/winamp.exe/main

Alle funksjoner må deklarere hva slags datatype de tar imot, sånn at en i shellet faktisk kan kalle spesifikke funksjoner, hvor parameterne kan være av type

byte, word, dword, qword, dqword, ptr, eller float80

Dette kan med enkelhet implementeres, men jeg tror ikke jeg har sett det før noen steder.

 

Så hvis en modul eksporterer "int get_something(int hello, byte hei, char *halla)

Så skal shellen være istand til å pushe riktig datatyper til stacken

før programkoden startes, i forhold til hva slags data brukeren har skrevet.

Dette er ikke mulig å få til med et script, men det er mulig å få til i Windows med C/C++ og litt inline assembly, eller rett i assembly eller D

Men jeg er ikke interresert i et shell, jeg har tenkt mye på GUI og grafikk også.

Jeg er fullstendig imot å bruke 3D aksellerator for grafikken på et OS, siden det er å kaste ressurser rett i søpla, mens det ikke egentlig tilfører noe man ikke kunne klart seg uten, det gjør det bare mye lettere for programmereren.

Lenke til kommentar
Vis du gjennomfører prosjektet og lager et nytt OS, kan jeg få en kopi? Alltid spennende med et nytt OS :p  Jeg og syns at vista krever litt for mye og "misbruker" ressurser. Så jeg liker idèen din ;)

 

Edit: Skrive feil...

8047274[/snapback]

 

For å si det sånn, dette blir vel i beste fall et hobbyprosjekt med støtte av lite hardware, støtte for få programmer, osv. Se på f.eks. Linux, så ser du at selv om tusenvis av folk arbeider på det, er det lite brukt sammenlignet med Windows.

Lenke til kommentar

Du har nok rett... men var det ikke slik Linux begynte også da? :p

Selvsagt vil all kode jeg lager, og binærfiler, være helt gratis på alle mulige måter.

Men som sagt har jeg et stort program som er inne i en litt kritisk fase nå, som jeg må bli ferdig med, så jeg får ikke begynt noe før det.

edit: det hadde vært gøy hvis noen andre er interresert i å hjelpe til også :)

Endret av GeirGrusom
Lenke til kommentar
Du har nok rett... men var det ikke slik Linux begynte også da? :p

Selvsagt vil all kode jeg lager, og binærfiler, være helt gratis på alle mulige måter.

Men som sagt har jeg et stort program som er inne i en litt kritisk fase nå, som jeg må bli ferdig med, så jeg får ikke begynt noe før det.

edit: det hadde vært gøy hvis noen andre er interresert i å hjelpe til også :)

8048342[/snapback]

 

Det jeg ville få frem er at han kan se langt etter en Windows/Linux-erstatter.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...