Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - freeka

Seiten: [1]
1
OS-Design / scheduling verstaendnisfrage
« am: 25. March 2005, 12:10 »
yoa was interrupts sind weiss ich eigentlich; sie werden zb von der prepherie ausgeloest, wenn sie einen job fertig hat, damit die cpu ihre aktuelle arbeit unterbrechen kann und sich der prephierie bzw den process widmen kann, der die prephierie benutzt. oder so ;)

Zitat

nehmen wir mal dein beispiel vom user-thread, der ram haben will; der user-thread ruft, zb, malloc() auf und genau hier tritt dann der kernel in kraft, da die funktion wohl teil des kernels sein muesste.

malloc gehoert aber net zum kernel, das ist doch part der (g)libc oder nicht?! also user-libary oder wie man sie dann nennt.

Zitat

der einmal ausgefuehrt wird um die interrupts zu registrieren

wo werden die denn registriert? der pc muss ja auch wissen, was zu tun ist, wenn ein process drann ist. sind die entsprechenden sachen direkt in der cpu(register?) gespeichert?

Zitat

und einigen interrupts, die dann aufgerufen werden, wenn zb. eine gewisse zeitspanne um ist und der naechste thread dran ist.

yea, aber da kommt ja wieder kernelcode zum einsatz.
bei linux zb liegt der kernel im bereich zwischen _text und _etext, wobei _text 0x100000 ist, also nach dem erste mbyte des ram, und _etext ist halt das ende, also die groesse des kernel. da liegt nun der linux kernel in binaerform, und damit auch die ganzen anweisungen.

so, wenn nun also ein process mittels einen interrupt unterbrochen wird, weil seine zeitscheibe abgelaufen ist, muss ja direkt der kernel code am start sein, um die register zu sichern, die processstrukturen zu aktualisieren und einen neuen process auszuwaehlen. heisst das, das mittels des interrupt zu einer anderen stelle im code gesprugen wird, der dann ausgefuehrt wird (aber nicht als process?! wie gehtn das dann) und sagen wir mal dann der code ab 0x100000 ausgefuehrt wird (oder wo sich der kern und damit auch irgendwo der sheduler befindet)? aber woher weiss man dann, wo ab 0x100000 was (zb der scheduler) liegt?
2
OS-Design / scheduling verstaendnisfrage
« am: 25. March 2005, 00:41 »
Zitat

Das macht man über einen Interrupt, genauer gesagt ein Gate (glaub ich). Wenn man diesen Interrupt (unter Linux ist es AFAIK Int 0x80) aufruft, wird einfach in den Kernel gesprungen und der Kernelcode ausgeführt.

mh, also hier faengst schoa an, gehen wir mal langsam durch. nehmen wir mal den startup von gnu/linux, wobei es latten ist ich denke fast jedes os startet so

also pc an->bios->bootloader. der bootloader laedt das erste programm, den kernel. zu dem zeitpunkt rennt ja wirklich nur der kernel, er initialisiert die hardware usw, und wenn er fertig ist startet er den ersten userspace-process(in dem fall init). hier stellt sich die frage erstmal wie dieser gestartet wird. muss dazu der kernel von PL0 in PL3 wechseln? und wenn der kernel, der einzige process der auf der cpu momentan noch laeuft, in PL3 ist, wo kommt der userspace prozess dann her?

sagen wir der userspace prozess laeuft nun auf der cpu und moechte direkt erstmal ram. nun kommt dein erwaehnter interrupt; wo wurde der ueberhaupt festgelegt und wie wird erkannt (und wer erkennt es)? ich denke mal vom kernel oder? er sagt gut wenn ein process ram moechte soll interrupt 0x80 ausgefuehrt werden, sodass ich (der kernel) bescheid weiss und ram reservieren kann. aber wo wurde das dann gespeichert? ich meine es laeuft ja grade ein anderer process auf der cpu, der nichts von anderen processen weiss und auf keinen anderen speicherbereich zugreifen kann.
wenn nun der process zb ram moechte, ja woher weiss nun wer welcher interrupt wohin geschickt werden soll? es rennt doch nur dieser process der davon nichts weiss: der kernel, wo der interrupt handler etc sitzt, weiss das alles, aber der laeuft ja nicht.

also um diese grundlegende sache ging es mir erstmal; in linux kernelarchitktur zb wird ganz toll beschrieben wie der kernel aufgebaut ist, welche strukturen und buddy memory allocater und scheduler und queries und IPC und was weiss ich, aber das alles nuetzt mir irgendwie nix wenn ich das oben genannte nicht begreife, da ich ja quasi ueberhaupt nicht weiss wie der kernel und die processe laufen

und sorry wenn das nix mit dem scheduler ansich zu tun hat, dachte das fasst man dadrunter ;D
3
OS-Design / scheduling verstaendnisfrage
« am: 24. March 2005, 23:52 »
moin moin

ich lese momentan linux kernelarchitektur, und vom beginn an plagt mich eine verstaendnisfrage, die einen staendig verfolgt, und jetz bei kapitel 5 mag ich nicht mehr weiterzulesen bevor ich das verstanden habe :D

ich hab in verschiedenen, meist programmiertechnischen oder linux bezogenen foren gefragt, aber nie eine zufriedenstellende antwort bekommen; vielleicht bin ich ja hier richtig, wo sich doch hier alle mit os dev beschaeftigen :)

ok, also folgendes: der kernel, oder halt das betriebssystem, managed den verfuegbaren ram, verteilt die rechenzeit der cpu, ermoeglicht den zugriff auf I/O usw. pro cpu kann aber immer nur ein process laufen.

am anfang war mein verstaendnis so: der kernel ist ebenfalls ein process, und immer wenn ein programm was will, zb ram reservieren oder eine datei oeffnen, wird der sheduler irgendwie aktiv (wie wusste ich auch net, da die cpu ja den einen process rennt, der keinen scheduler kennt), welcher den kernel auswaehlt, welche den ram fuer den process organisiert, und dann wird zurueckgewechselt

damit bin ich erstmal in foren fragen gegangen, aber irgendwie konnte mir da keiner was zu sagen.

grade, wo ich durch die linux ml gucke, sehe ich folgendes:

Zitat

The kernel is not a separate task. If you call read() for example, you change
from user to kernel space,[...]

aha, der kernel ist kein seperater process. und die geschichte mit dem kernelspace und dem userspace gibts ja auch noch... das verstehe ich allerdings dann garnicht mehr... wie kann denn ein process bzw ein programm von userspace in den kernel space wechseln (ich nehme mal an PM is das dann? irgendwo mal sowas in den lowlevel magazin gelesen *g*) und dann zb ram reservieren?

keine ahnung wie ich das ausdruecken soll... nehmen wa wieder ein beispiel:

auf nem singleprocessor system laeuft process A. dieser process will speicher. er wechselt von userspace in kernelspace (das sag ich jetz einfach mal so, obwohl ich nicht verstehe wie das geht und worin dieser wechsel besteht), so und nun, im kernelspace, kriegt er speicher.
aber wie? ich mein im kernel gibts ja funktionen usw dafuer, das buddy system blah kenne ich ja alles, aber wie wird das aufgerufen wenn der kernel garkein process ist?

ich hoffe ihr versteht was ich meine, wenn nicht hole ich nochmal weiter aus, will aber keinen mit nem zulangen text abschrecken ; )

ich habe mir jetz viel zu scheduling usw und sogar den einstieg zu os dev angeguckt, aber es ist mir einfach immer noch nicht klar.

und da es ja hier einige gibt, die ihr eigenes os schreiben/geschrieben haben/mitgeschrieben haben, koennt ihr mir das evtl ganz gut erklaeren *hoff*  ich meine ihr habt ja auch irgendwie nen scheduler implementiert fuer multitasking

danke fuer jede antwort & erklaerungshilfe
Seiten: [1]

Einloggen