[Alg] Hoe werkt een OS en hoe schrijf ik er zelf een?

Pagina: 1 2 Laatste
Acties:
  • 2.156 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
_the_crow_ schreef op 06 September 2003 @ 20:39:
PrisonerOfPain heeft gelijk. Hetgene wat er als eerst op gaat, gaat er als laatste af. Het knikkeridee in de buis, die aan 1 kant afgesloten is, is het beste voorbeeld daarvan.
Eigendunk++;
>:)
-List In First Out (LIFO)
de spelfout komt niet echt profi over :+

maar laten we nou niet van een mug een olifant gaan maken, want daar schieten we niets mee op :)

offtopic:
wieeeeeeeee 100 posts

@Oguz: ik denk niet dat iemand hier dit topic volgt
:+

[ Voor 6% gewijzigd door PrisonerOfPain op 06-09-2003 21:38 ]


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
PrisonerOfPain schreef op 06 September 2003 @ 21:32:
[...]


Eigendunk++;
>:)


[...]


de spelfout komt niet echt profecioneel over :+

maar laten we nou niet van een mug een olifant gaan maken, want daar schieten we niets mee op :)

offtopic:
wieeeeeeeee 100 posts
Nee klopt ;)

BTW tutorial 3 komt er morgen aan (voor de mensen die dit topic volgen) :)
We gaan dan een msdos-compatible floppy maken zodat we het in windows/dos/linux/etc kunnen lezen en onze kernel erop kunnen zetten :)

offtopic:
Nee, denk het ook niet :+ Volgens mij is een eigen os maken niet meer zo in...

[ Voor 37% gewijzigd door Oguz286 op 06-09-2003 21:42 ]


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 10-09 18:14

alienfruit

the alien you never expected

Trouwens, kun je ook VMWare gebruiken ipv. Bochs?
VMWare is bij mijn weten een volledige x86 emulator, dus in principe zou het dan wel moeten kunnen.

[ Voor 51% gewijzigd door alienfruit op 06-09-2003 21:51 ]


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
alienfruit schreef op 06 September 2003 @ 21:51:
Trouwens, kun je ook VMWare gebruiken ipv. Bochs?
VMWare is bij mijn weten een volledige x86 emulator, dus in principe zou het dan wel moeten kunnen.
Geen flauw idee, ik ga het wel uitproberen...
Post morgen wel (zelfs ik moet slapen :P )

* Oguz286 vraagt zich af of dat wel zo is...

[ Voor 8% gewijzigd door Oguz286 op 06-09-2003 22:07 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
alienfruit schreef op 06 september 2003 @ 21:51:
Trouwens, kun je ook VMWare gebruiken ipv. Bochs?
VMWare is bij mijn weten een volledige x86 emulator, dus in principe zou het dan wel moeten kunnen.
VMWare zou ook moeten, maar is bij mijn weten nogsteed geen freeware, waar Bochs dat wel is (speach, beer ;))

Acties:
  • 0 Henk 'm!

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03 14:35

_the_crow_

Rare vogel

Hier stond iets doms. |:( Nu niet meer. ;)
Sorry Alien. :)

[ Voor 99% gewijzigd door _the_crow_ op 06-09-2003 22:50 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 10-09 18:14

alienfruit

the alien you never expected

_the_crow_, dat weet ik daarom merkte ik ook dat VMWare dat óók is :)

Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
Ik heb geen flauw idee waar jullie het over hebben/hadden, maar ik wou ff zeggen dat ik nu probeer VMWare te gebruiken...

Ben zo terug... :)

EDIT: Ja hoor perfect! :*)

EDIT2: Nee dus, ik kan mijn A20 lijn niet enablen, terwijl het in bochs perfect werkt :( Weet iemand hoe dit en kan en misschien een oplossing?

EDIT3: Nee, sorrie, je moet natuurlijk wel keyboard input gebruiken hè als je op een toets moet drukken 8)7 Oftewel, ja het kan ook met VMWare (alleen kost dat geld...)

[ Voor 67% gewijzigd door Oguz286 op 06-09-2003 23:23 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Zeg Oguz, je hebt nog een half uur, dan is het al morgen :P

edit:

tsja nu is het echt 12 uur geweest dusuh, k ben aan het wachten op de volgende tutorial
:+

[ Voor 49% gewijzigd door PrisonerOfPain op 07-09-2003 00:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

alienfruit:

VMWare is *geen* x86 emulator, Bochs wel. VMWare creeert wel een virtuele machine, net als Bochs, maar laat executie van code aan de CPU over; Bochs emuleert elke instructie.

Het verschil zit 'm daarmee vooral in het feit dat je met Bochs wel je OSje op een Sun/HP/etc bak kan testen, en met VMWare niet.

Overigens, VMWare ondersteunt niet elk OS (zoals bv Minix, OS/2, BeOS, QNX :(), dus het kan goed zijn dattie je eigen OS ook niet wil booten. Mja de enige manier om daarachter te komen is proberen :)

Acties:
  • 0 Henk 'm!

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
yeah...mijn bootstrapje werkt...was er al aan begonnen voor deze hele serie tutorials die ik vandeweek tegenkwam op zoek naar de A20 line helpjes....best een kick om 'm de eerste keer (en alle keren daarna) op 't scherm te zien komen.
Sta nu op 't punt om 't laden van een kernel (ASM, eerst realmode, dan PM) van schijf te gaan implementeren...eens ff kijken hoe ik dat ga aanpakken...heb nog aardig wat ruimte in de bootsector, dus kan nog aardig wat spelen, misschien eerst eens een 2nd stage loader bouwen zodat ik ruimte heb voor wat grafisch gespeel in mode 13h....doet me denken aan m'n TurboPascal gamecoding tijd, al die inline ASM die ik toen gebruikte.
Moet ook m'n code eens gaan opschonen...beetje rommeltje nog...routines/macro's die niet op alfabet staan enzo.

Acties:
  • 0 Henk 'm!

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03 14:35

_the_crow_

Rare vogel

MissingDog schreef op 07 september 2003 @ 17:32:
yeah...mijn bootstrapje werkt...was er al aan begonnen voor deze hele serie tutorials die ik vandeweek tegenkwam op zoek naar de A20 line helpjes....best een kick om 'm de eerste keer (en alle keren daarna) op 't scherm te zien komen.
Sta nu op 't punt om 't laden van een kernel (ASM, eerst realmode, dan PM) van schijf te gaan implementeren...eens ff kijken hoe ik dat ga aanpakken...heb nog aardig wat ruimte in de bootsector, dus kan nog aardig wat spelen, misschien eerst eens een 2nd stage loader bouwen zodat ik ruimte heb voor wat grafisch gespeel in mode 13h....doet me denken aan m'n TurboPascal gamecoding tijd, al die inline ASM die ik toen gebruikte.
Moet ook m'n code eens gaan opschonen...beetje rommeltje nog...routines/macro's die niet op alfabet staan enzo.
Als ik een kleine tip mag geven. ;)
Een 2nd stage bootloader is handig. Maar ik denk dat PM al genoeg gezeik met zich meebrengt, dus ik zou niet meteen de grafische modus in gaan.
Als je PM in gaat, zoek ff op de keywords GDT/IDT/LDT. Dat zijn namelijk essentiële tabelletjes om PM in te gaan. :)

[ Voor 5% gewijzigd door _the_crow_ op 07-09-2003 17:36 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Acties:
  • 0 Henk 'm!

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
_the_crow_ schreef op 07 September 2003 @ 17:35:
[...]

Als ik een kleine tip mag geven. ;)
Een 2nd stage bootloader is handig. Maar ik denk dat PM al genoeg gezeik met zich meebrengt, dus ik zou niet meteen de grafische modus in gaan.
Als je PM in gaat, zoek ff op de keywords GDT/IDT/LDT. Dat zijn namelijk essentiële tabelletjes om PM in te gaan. :)
Ik weet 't....fijne tabelletjes, ben daar ook al naar aan 't graven...maar misschien doe 'k 't grafische gespeel wel in een andere versie...realmode-only...beetje oldschool demotjes erin coden ofzo :)
Weet in elk geval dat 'k nog ff moet doorspeuren, hoop toch wel over 4 weken m'n eerste C-kernel te kunnen draaien...wordt nog flink coden voor die tijd. Moet ook m'n documentatie bij gaan werken en beetje gaan nadenken over driver-architectuur enzo :)

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Links naar documentatie is altijd welkom he :)

Acties:
  • 0 Henk 'm!

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03 14:35

_the_crow_

Rare vogel

Om alleen lay-outs van bepaalde tabellen te bekijken is Sandpile wel handig. Je moet hier overigens niet heen gaan om uitgebreide uitleg te krijgen.

Verder kan je altijd googelen. ;)

Ook kan je zoeken op de nieuwsgroepen alt.os.development en alt.os.assembly.

[ Voor 18% gewijzigd door _the_crow_ op 07-09-2003 18:02 ]

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
MissingDog schreef op 07 September 2003 @ 17:32:
yeah...mijn bootstrapje werkt...was er al aan begonnen voor deze hele serie tutorials die ik vandeweek tegenkwam op zoek naar de A20 line helpjes....best een kick om 'm de eerste keer (en alle keren daarna) op 't scherm te zien komen.
Sta nu op 't punt om 't laden van een kernel (ASM, eerst realmode, dan PM) van schijf te gaan implementeren...eens ff kijken hoe ik dat ga aanpakken...heb nog aardig wat ruimte in de bootsector, dus kan nog aardig wat spelen, misschien eerst eens een 2nd stage loader bouwen zodat ik ruimte heb voor wat grafisch gespeel in mode 13h....doet me denken aan m'n TurboPascal gamecoding tijd, al die inline ASM die ik toen gebruikte.
Moet ook m'n code eens gaan opschonen...beetje rommeltje nog...routines/macro's die niet op alfabet staan enzo.
Als je ons zou willen helpen zou dat geweldig zijn (daar zijn we ongeveer ook beland)

Mail me anders ff :)

Acties:
  • 0 Henk 'm!

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
Oguz286 schreef op 07 September 2003 @ 18:03:
[...]


Als je ons zou willen helpen zou dat geweldig zijn (daar zijn we ongeveer ook beland)

Mail me anders ff :)
Alles wat ik bereik, vind etc en hier nog niet gepost is wil ik zeker wel met jullie delen. Ik ben nu eerst bezig alles weer op te frissen, heb 6 jaar geen asm meer gecode...en da's behoorlijk lang voor mijn doen en sowieso is een OS coden wel iets anders dan game-code, maar ik zal m'n best doen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 07 September 2003 @ 16:17:
alienfruit:

VMWare is *geen* x86 emulator, Bochs wel. VMWare creeert wel een virtuele machine, net als Bochs, maar laat executie van code aan de CPU over; Bochs emuleert elke instructie.
VMWare emuleert ook. Moet wel, want je moet instructies kunnen uitvoeren waar het VMWare proces op de host pc geen rechten toe heeft. Denk bijvoorbeeld aan het laden van de GDT e.d.

VMWare is dus * wel * een emulator, alleen een slimme die grote delen code op de CPU zelf uit laat voeren. Maar voor hij dat moet doen moet hij die code wel eerst analyseren, omdat die instructies erin kunnen zitten waar hij geen rechten toe heeft
Overigens, VMWare ondersteunt niet elk OS (zoals bv Minix, OS/2, BeOS, QNX :(), dus het kan goed zijn dattie je eigen OS ook niet wil booten. Mja de enige manier om daarachter te komen is proberen :)
Bochs overigens ook niet, maar wat is de echte reden dat VMWare dat niet ondersteunt? (serieuze vraag). Volgens mij levert het devteam van VMWare geen 'support' voor die OS'en, maar draaien ze wel gewoon onder VMware

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

Alsjeblieft, een donatie van een snapshot van een oud os'je wat ik voor de fun heb geschreven. Ik zag em toevallig op een ouwe backup staan dus dump ik em maar bij jullie neer.

Ik heb geen FLAUW idee wat werkt en wat niet, aangezien het een snapshot is, dus ga er maar vanuit dat je er veel aan moet gaan doen.

Voordeel wel is dat het een werkende bootloader heeft, en dat het een C-kernel heeft met een eigen stdlib die (volgens mij) werkt. Het geraamte van het OS is dus al klaar en je kunt em mooi gebruiken als naslagwerk..

Als je vragen over het os hebt mag je proberen om ze te sturen, maar ik beloof niet dat ik nog weet wat alles precies doet :p

download het hier: http://www.goldenrose.org/cvs-cybos-150401.tgz


have fun...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
JayTaph schreef op 07 September 2003 @ 23:23:
Alsjeblieft, een donatie van een snapshot van een oud os'je wat ik voor de fun heb geschreven. Ik zag em toevallig op een ouwe backup staan dus dump ik em maar bij jullie neer.

Ik heb geen FLAUW idee wat werkt en wat niet, aangezien het een snapshot is, dus ga er maar vanuit dat je er veel aan moet gaan doen.

Voordeel wel is dat het een werkende bootloader heeft, en dat het een C-kernel heeft met een eigen stdlib die (volgens mij) werkt. Het geraamte van het OS is dus al klaar en je kunt em mooi gebruiken als naslagwerk..

Als je vragen over het os hebt mag je proberen om ze te sturen, maar ik beloof niet dat ik nog weet wat alles precies doet :p

download het hier: http://www.goldenrose.org/cvs-cybos-150401.tgz


have fun...
Mijn held: _/-\o_
Ik ga het even doornemen :) DANKJEWEL :D

Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
Oguz286 schreef op 08 september 2003 @ 15:51:
[...]


Mijn held: _/-\o_
Ik ga het even doornemen :) DANKJEWEL :D
EDIT: hoe compile ik dit in hemelsnaam :?

OMG HEB IK MEZELF GEQUOTE 8)7
Sorrie Modjes... :'(

[ Voor 12% gewijzigd door Oguz286 op 08-09-2003 15:54 ]


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
Niemand? Weet niemand hoe ik die source van JayTaph moet compilen? (ik heb geen tijd om dat uit te vogelen, omdat ik met persoonlijke dingen te druk ben :( )

Ik krijg allemaal .v bestanden :?
Moet ik dat in linux compilen ofzo ?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oguz286 schreef op 09 September 2003 @ 16:00:
(ik heb geen tijd om dat uit te vogelen, omdat ik met persoonlijke dingen te druk ben :( )
ja sorry hoor, maar dat gaan wij natuurlijk niet voor jou doen. Als jij er geen tijd voor hebt dan heb je natuurlijk gewoon pech gehad

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
.oisyn schreef op 09 September 2003 @ 16:06:
[...]


ja sorry hoor, maar dat gaan wij natuurlijk niet voor jou doen. Als jij er geen tijd voor hebt dan heb je natuurlijk gewoon pech gehad
Ik vraag jullie niet of jullie het voor me willen compilen 8)7
Ik wou alleen weten hoe? ;)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:30
Het is een CVS repository dump. Je moet de hele zut dus ergens uitpakken, daarna je CVS root instellen op de locatie waarin je de boel hebt uitgepakt, en met je favoriete CVS tooltje de boel uitchecken.

Details zoek je maar op in de CVS handleiding. Onder de meeste Linux/UNIX-achtige systemen is wel een CVS systeem geinstalleerd; voor Windows vind ik TortoiseCVS wel prettig (maar WinCVS wordt ook wel gebruikt).

edit:
Ik ben even vriendelijk geweest en heb 'm voor je uitgecheckt (niet geheel zonder eigenbelang :P).
cybos-150401.tar.gz

[ Voor 24% gewijzigd door Soultaker op 10-09-2003 00:45 . Reden: URL fix0rt ]


Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
dankjewel :D alleen werkt die link niet :P

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 10:39

Reptile209

- gers -

Deze doet het wel. Miste een U in de URL. :)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

euh, cvs idd.. as said, tis een ouwe backup.

Ik ben er zelf weer ffkes mee bezig geweest (er zijn her en der dingetjes die gewoon niet werken) en vanuit een dos-port omgezet naar een linux port (wat aanpassingen in de makefiles voornamelijk).

Ik heb hier een werkende versie in bochs draaien met een kernel-interpreter (basicer dan basic) en 2 tasks die afzonderlijk van elkaar draaien..

Helaas gaan de virtuele consoles (ctrl-tab) nog niet helemaal lekker (niet alle chars komen op de goeie console terecht), en dat probleem is ooit opgelost geweest.. grote vraag alleen is: wat was het ook alweer :p (jammer :))


tis geen code geschikt voor een coding-keurmerk, maar het is redelijk te begrijpen wat er allemaal staat en ik zal dan mijn (nieuwe) tarfile die wel werkt straks ffkes online gooien.


maar aan sich geeft de source een goed (en redelijk eenvoudig) inzicht in hoe je vanuit een bootloader naar een C-source gaat, hoe multitasking werkt etc... maar het is en blijft vrij basic dus misschien een leuke start...

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Acties:
  • 0 Henk 'm!

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

ok, de ouwe cvs-file is weg (gereplaced door een symlink naar onderstaand).


http://www.goldenrose.org/jayos-090903.tgz


Ik heb de naam wat aangepast, (jeeej), gezorgd dat de code (althans, bij mij) compiled en draait, wat aanpassingen gedaan aan de makefiles en wat code die niet werkte gekicked.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
JayTaph schreef op 09 september 2003 @ 19:58:
ok, de ouwe cvs-file is weg (gereplaced door een symlink naar onderstaand).


http://www.goldenrose.org/jayos-090903.tgz


Ik heb de naam wat aangepast, (jeeej), gezorgd dat de code (althans, bij mij) compiled en draait, wat aanpassingen gedaan aan de makefiles en wat code die niet werkte gekicked.
OK ik ga er naar kijken
Mag ik er stukken uit gebruiken voor een tutorial?

TnX :D

  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03 14:35

_the_crow_

Rare vogel

@Jaytaph: Heb jij de Protected-Mode INT-handlers opnieuw gemaakt?? Of gebruik je de 16-bit routines uit RM?

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

Wat bedoel je met opnieuw maken? Zodra het systeem eenmaal in pmode draait maak ik geen gebruik meer van bestaande interrupts.

In idt_init (idt.c) maak ik een IDT aan met 256 default handlers (uit israsm.S en deze doet niets) en hang ik aan de irq functies de handle_irqX routines uit israsm.S).
Deze routines zetten een stackje op, springen naar de do_irqX functies van idt.c.

De meeste van deze irq-handlers doen niets, maar een aantal zijn belangrijk, bijvoorbeeld do_irq0, waar de scheduler/timer op zit, do_irq1 waar de keyboard handler aan hangt en do_irq13 waarmee je general protection faults kunt afvangen.

Verder kun je nog een systemlibrary hangen aan een int (zoiets als een DOS 21h of linux 0x80). Persoonlijk vind ik dit een lelijke manier van werken maar da's ook weer ieder voor zich.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • _the_crow_
  • Registratie: September 2000
  • Laatst online: 30-03 14:35

_the_crow_

Rare vogel

En als je iets van je hd/fd wil lezen dan? Dan lijkt me dat je INT 13h wil gebruiken. Of doe je dat dan via aparte functies?

Schrödingers cat: In this case there are three determinate states the cat could be in: these being Alive, Dead, and Bloody Furious.


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

Dat gaat straks via aparte functies, eventueel kun je er trap/gates voor gebruiken en terugschakelen naar realmode als het echt moet.

Maar op dit moment zijn die nog niet van belang dus zitten ze er nog niet in.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 11-09 16:28

johnwoo

3S-GTE

JayTaph schreef op 11 September 2003 @ 14:04:
Wat bedoel je met opnieuw maken? Zodra het systeem eenmaal in pmode draait maak ik geen gebruik meer van bestaande interrupts.

In idt_init (idt.c) maak ik een IDT aan met 256 default handlers (uit israsm.S en deze doet niets) en hang ik aan de irq functies de handle_irqX routines uit israsm.S).
Deze routines zetten een stackje op, springen naar de do_irqX functies van idt.c.

De meeste van deze irq-handlers doen niets, maar een aantal zijn belangrijk, bijvoorbeeld do_irq0, waar de scheduler/timer op zit, do_irq1 waar de keyboard handler aan hangt en do_irq13 waarmee je general protection faults kunt afvangen.

Verder kun je nog een systemlibrary hangen aan een int (zoiets als een DOS 21h of linux 0x80). Persoonlijk vind ik dit een lelijke manier van werken maar da's ook weer ieder voor zich.
Hoe doe je system calls dan? Ik zie in stdlib/os dat je een SYSCALL_INT gebruikt voor os_write, maar ik kan die verder niet terugvinden in de interrupt routines 8)7 Hoe maak je je kernel duidelijk dat-ie iets moet doen?

Overigens wel bere-interessant om door te lezen, de principes snap ik allemaal wel, alleen de implementatiedetails zijn me nog onduidelijk (waarom bepaalde getalletjes op bepaalde plaatsen), maar daar helpt je OSje me weer een eindje verder mee _/-\o_

Ik ben als oefening aan het proberen om er kernel waits in te bouwen, zodat ik een task kan laten sleepen :) Ik hou in de kernel een aantal waitable 'objecten' bij, om het maar even op de Windows manier te zeggen :P Tot nu toe heb ik twee typen 'objecten': een countdown timer (de scheduler geeft de task vrij zodra de timer op 0 komt; hiermee kan je sleepen) en een flag (de scheduler geeft de task vrij zodra een andere task de flag omgooit; hiermee kan je taken synchroniseren). In de JAYOS_TASK struct prop ik een extra byte waarin de index van een van die waitables staat. Kijken of dit me gaat lukken :Y) Alleen moet ik dus nog zien uit te vissen hoe ik vanuit een task, een syscall kan doen...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

johnwoo schreef op 11 september 2003 @ 19:57:
[...]

Hoe doe je system calls dan? Ik zie in stdlib/os dat je een SYSCALL_INT gebruikt voor os_write, maar ik kan die verder niet terugvinden in de interrupt routines 8)7 Hoe maak je je kernel duidelijk dat-ie iets moet doen?
een callgate (nee niet de tandpasta ;)) is daarvoor het handigst. Bij een callgate kun je specificeren dat de cpu een aantal bytes die op dat moment op de stack staan moet kopieren naar de stack van de kernel zelf, zodat je voor de ring0 en de ring3 aparte stacks kunt houden. Ideaal dus, aangezien het doorgeven van functieargumenten over het algemeen via de stack gebeurd. Niet alles past tenslotte in registers

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 11-09 16:28

johnwoo

3S-GTE

.oisyn schreef op 11 September 2003 @ 21:25:
[...]


een callgate (nee niet de tandpasta ;)) is daarvoor het handigst. Bij een callgate kun je specificeren dat de cpu een aantal bytes die op dat moment op de stack staan moet kopieren naar de stack van de kernel zelf, zodat je voor de ring0 en de ring3 aparte stacks kunt houden. Ideaal dus, aangezien het doorgeven van functieargumenten over het algemeen via de stack gebeurd. Niet alles past tenslotte in registers
Klinkt handig idd, maar toch nog enkele vraagjes :P
Je kan de CPU dus die stack data laten kopieren naar je kernel stack... Is dat een bepaalde IA32 instructie, of hoe gaat dat in z'n werk? En dan, wat gebeurt er nadat die data gekopieerd is? Dan moet de kernel daar iets mee doen. Als eerste moet de CPU dus je kernel code gaan uitvoeren. De task die het gebeuren in gang zette kan verder toch niets nuttigs meer doen voordat de kernel de request afgehandeld heeft. Hoe krijg je die CPU dan zover dat ie (zonder interrupt voor zover ik begrijp) automagisch naar je kernel switcht? En de data die gekopieerd is kan vanalles zijn, hoe weet je kernel wat ie precies met die nieuwe data op z'n stack aanmoet? Bepaal je daar zelf een format voor, of is er hardware mee gemoeid?

* johnwoo interessante materie vindt *

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou ja dit staat natuurlijk allemaal beschreven in de intel docs, ik ga niet uitleggen wat nou precies de werking is.

Maar in grote lijnen is een callgate gedefinieerd in de descriptor table. Je roept een call gate routine aan door simpelweg een FAR call te doen naar de betreffende selector, het offset gedeelte van de FAR pointer wordt genegeerd. De callgate descriptor beschrijft de code selector, de offset, privilege level en het aantal parameters dat gekopieerd moet worden. De stack registers voor de privilege level waar je naartoe springt worden uit het huidige task register gehaald

[ Voor 6% gewijzigd door .oisyn op 11-09-2003 23:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 11-09 16:28

johnwoo

3S-GTE

.oisyn schreef op 11 September 2003 @ 23:06:
Nou ja dit staat natuurlijk allemaal beschreven in de intel docs, ik ga niet uitleggen wat nou precies de werking is.

Maar in grote lijnen is een callgate gedefinieerd in de descriptor table. Je roept een call gate routine aan door simpelweg een FAR call te doen naar de betreffende selector, het offset gedeelte van de FAR pointer wordt genegeerd. De callgate descriptor beschrijft de code selector, de offset, privilege level en het aantal parameters dat gekopieerd moet worden. De stack registers voor de privilege level waar je naartoe springt worden uit het huidige task register gehaald
Ja, maar de Intel docs hebben een hogere drempel. Jij legt het in wat makkelijker te snappen bewoordingen uit :) En ik hoef zeker niet alles voorgekauwd te hebben, maar wat je dus postte (de principiele werking, niet de droge specs) is precies wat ik graag wil weten :) Dus tnx :>

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Acties:
  • 0 Henk 'm!

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

johnwoo schreef op 11 September 2003 @ 19:57:
[...]

Hoe doe je system calls dan? Ik zie in stdlib/os dat je een SYSCALL_INT gebruikt voor os_write, maar ik kan die verder niet terugvinden in de interrupt routines 8)7 Hoe maak je je kernel duidelijk dat-ie iets moet doen?

Overigens wel bere-interessant om door te lezen, de principes snap ik allemaal wel, alleen de implementatiedetails zijn me nog onduidelijk (waarom bepaalde getalletjes op bepaalde plaatsen), maar daar helpt je OSje me weer een eindje verder mee _/-\o_

Ik ben als oefening aan het proberen om er kernel waits in te bouwen, zodat ik een task kan laten sleepen :) Ik hou in de kernel een aantal waitable 'objecten' bij, om het maar even op de Windows manier te zeggen :P Tot nu toe heb ik twee typen 'objecten': een countdown timer (de scheduler geeft de task vrij zodra de timer op 0 komt; hiermee kan je sleepen) en een flag (de scheduler geeft de task vrij zodra een andere task de flag omgooit; hiermee kan je taken synchroniseren). In de JAYOS_TASK struct prop ik een extra byte waarin de index van een van die waitables staat. Kijken of dit me gaat lukken :Y) Alleen moet ik dus nog zien uit te vissen hoe ik vanuit een task, een syscall kan doen...
Dat klopt, er zitten callgates in die niet geimplementeerd zijn. De stdlib stamt af van een anders os die ik toendertijd gebruikt heb omdat ik weinig zin had om een complete stdlib voor mezelf te schrijven. De meeste van die routines zijn dus niet door mijzelf geschreven en sommige werken ook gewoon niet goed samen. de write-functies en dergelijke werken niet, omdat ze een unsupported interrupt gebruiken.

Mijn huidige printf() functies maken onderhands gebruik van de conio_* functies. Een beetje vooruitziende blik vertelt ons dat je dus flink in de knoei gaat komen zodra je op een andere ring gaat werken.. :)

aan de andere kant: ik heb ook nooit gezegd dat dit een goed doordacht, laat staan fucntioneel, os is :) dat sommige dingen gewoonweg niet kloppen of wanneer je denkt dat het gewoonweg niet gaat werken,.. dan zul je eens best gelijk kunnen hebben :-)

maar een beetje alles uitbreiden op het bestaande is wel een goed idee om wat ervaring op te bouwen.. vastlopen ga je vanzelf en vanaf dat punt zul je waarschijnlijk ondertussen de ervaring hebben om een goed OS duidelijk vanaf de grond op te bouwen

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het jammerlijke van een eigen OS bouwen is dat je op een gegeven moment gewoonweg niet verder komt... je moet drivers gaan schrijven voor je hardware om er wat leuks mee te doen. En bovendien kun je er verder niets mee.

Het was voor mijzelf erg leuk om ermee bezig te zijn, maar daarna had ik het ook wel weer gezien. Niet unlike een van mijn andere projectjes overigens, maar die hebben tenminste nog de potentie om af te komen :+

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 30-09-2023

JayTaph

Portability is for canoes.

.oisyn schreef op 12 September 2003 @ 01:11:
Het jammerlijke van een eigen OS bouwen is dat je op een gegeven moment gewoonweg niet verder komt... je moet drivers gaan schrijven voor je hardware om er wat leuks mee te doen. En bovendien kun je er verder niets mee.
Gelukkig dat een zekere meneer Torvalds niet hetzelfde dacht.. :p
Het was voor mijzelf erg leuk om ermee bezig te zijn, maar daarna had ik het ook wel weer gezien. Niet unlike een van mijn andere projectjes overigens, maar die hebben tenminste nog de potentie om af te komen :+
Niemand heeft ooit gezegd dat een project het algemeen nut moet dienen. Bijna alle projecten zijn van mij zijn ter leringh ende vermaeck. Als ik ga denken over "what's the use of this" dan zal ik weinig achter me computer doen..

"I code because I can"

Yo dawg, I heard you like posts so I posted below your post so you can post again.

Pagina: 1 2 Laatste