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
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:
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