V
Verwijderd lid 166773
Gast
Ik zit met een probleem, multitasking. Ik heb jullie ideeën nodig, niet in alle detail of zeer technisch (al is dat natuurlijk wel toegestaan), meer abstract of schetsend. Deze vraag is voor iedereen die zich hierin wilt mengen.
Stel, de software ('jij') is het enige wat je hebt. Jij, bent hetgeen dat de hele computer in zijn macht heeft. Je hebt geen libraries of besturingssysteem om je te helpen. Jij bent verantwoordelijk voor het geheugen, de opslag, de CPU en alle taken of processen. Kortom, jij bent het besturingssysteem.
Als je een externe taak CPU tijd hebt gegeven, kan jij niks meer doen. Het is wachten tot de taak om jouw hulp vraagt of dat de interne klok een interrupt stuurt naar de processor zodat jij die moet afhandelen. De enige die nu de CPU kan gebruiken is de externe taak.
Jij moet echter wel bijhouden wanneer de volgende taak CPU tijd mag krijgen. Dit doe je door elk proces een beetje tijd te geven, wat je gelukkig kan bijhouden door de interne klok van de computer (die ene die een interrupt stuurt). Na die tijd, mag de volgende taak.
Het is tijd om de huidige taak bij de CPU weg te halen (zodat een volgende taak CPU tijd kan krijgen), alle informatie op te slaan en het aan de kant te zetten voor later. Maar, is de taak al klaar met alles wat het moest doen? Als het klaar is hoef je het niet meer in de wachtrij te zetten voor de volgende ronde. Maar toen stuitte je op een probleem.
Hoe had je kunnen weten of de taak klaar was? Tenslotte kan je het niet aan een besturingssysteem vragen, want dat ben je zelf. Je hebt alleen maar de volgende gegevens en middelen:
Dan kan je nog bij de gestuurde hulpmiddelen een variabele neer zetten die de taak moet invullen als het klaar is. Maar is dat de beste oplossing? Misschien wel. Maar is het betrouwbaar? Als er ook maar iets mis gaat kunnen er vervelende dingen gebeuren. En dan heb je nog de vuistregel binnen programmeren: "Never trust user input".
Wat zou jij doen? Misschien heb je een beter idee? Zou je toch voor een van de opties hierboven gaan?
Als er vragen of onduidelijkheden zijn, hoor ik het graag. Ik hoop dat dit al duidelijk genoeg is, maar ik kan me voorstellen dat dat in de praktijk niet zo is. Ik ben niet de beste in uitleggen namelijk.
Stel, de software ('jij') is het enige wat je hebt. Jij, bent hetgeen dat de hele computer in zijn macht heeft. Je hebt geen libraries of besturingssysteem om je te helpen. Jij bent verantwoordelijk voor het geheugen, de opslag, de CPU en alle taken of processen. Kortom, jij bent het besturingssysteem.
Als je een externe taak CPU tijd hebt gegeven, kan jij niks meer doen. Het is wachten tot de taak om jouw hulp vraagt of dat de interne klok een interrupt stuurt naar de processor zodat jij die moet afhandelen. De enige die nu de CPU kan gebruiken is de externe taak.
"In system programming, an interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention."
-Wikipedia
Jij moet echter wel bijhouden wanneer de volgende taak CPU tijd mag krijgen. Dit doe je door elk proces een beetje tijd te geven, wat je gelukkig kan bijhouden door de interne klok van de computer (die ene die een interrupt stuurt). Na die tijd, mag de volgende taak.
Het is tijd om de huidige taak bij de CPU weg te halen (zodat een volgende taak CPU tijd kan krijgen), alle informatie op te slaan en het aan de kant te zetten voor later. Maar, is de taak al klaar met alles wat het moest doen? Als het klaar is hoef je het niet meer in de wachtrij te zetten voor de volgende ronde. Maar toen stuitte je op een probleem.
Hoe had je kunnen weten of de taak klaar was? Tenslotte kan je het niet aan een besturingssysteem vragen, want dat ben je zelf. Je hebt alleen maar de volgende gegevens en middelen:
- ~3 waarden, waar de taak mee bezig was om dingen te berekenen
- De locatie van het laatst uitgevoerde commando
- Het geheugen van de taak (RAM)
- Locaties van mogelijke hulpmiddelen die je de taak hebt gegeven
Dan kan je nog bij de gestuurde hulpmiddelen een variabele neer zetten die de taak moet invullen als het klaar is. Maar is dat de beste oplossing? Misschien wel. Maar is het betrouwbaar? Als er ook maar iets mis gaat kunnen er vervelende dingen gebeuren. En dan heb je nog de vuistregel binnen programmeren: "Never trust user input".
Wat zou jij doen? Misschien heb je een beter idee? Zou je toch voor een van de opties hierboven gaan?
Als er vragen of onduidelijkheden zijn, hoor ik het graag. Ik hoop dat dit al duidelijk genoeg is, maar ik kan me voorstellen dat dat in de praktijk niet zo is. Ik ben niet de beste in uitleggen namelijk.