[Theorie] Hoe is een controle mogelijk?

Pagina: 1
Acties:

  • Steven
  • Registratie: December 2000
  • Laatst online: 09:46
Even een taal onafhankelijke vraag waar ik al jaren over aan het nadenken ben; hoe is in hemelsnaam een controle van een verandering technisch mogelijk?

Laten we een simpel voorbeeld nemen;

Je wilt hebben dat er een actie gebeurd op het moment dat de gebruiker op de <ENTER>-toets drukt; dat kan heel simpel met iets van: (even in een voor iedereen (mezelf:p) begrijpelijke programmeer taal).

code:
1
2
3
4
5
6
while (true==true) {
   if (last_Key_door_User == enter) {
      play(poink);
      last_Key_door_User = NULL; 
   }
}

Dat zou gewoon werken; maar wat ik dan niet snap waarom dit niet alle CPU cycles op vreet :? Hij gaat toch de hele tijd door met controleren? En als hij klaar is doet hij dat nogmaals.. en nogmaals. Zo snel mogelijk. Dat gaat dus helemaal fout en kost je al je CPU-kracht.

maar dat lijkt te ondervangen door te zeggen doe deze controle elke 10 ms.

Daar gaat het echter spaak, want om dat te zeggen zal je PC (theoretisch dus) de hele tijd moeten controleren of "Aantal_ms % (modulo) 10 = 0" en op die manier zou hij ook gelijk op 100% CPU zitten. (hij blijft dus controleren of hij al moet controleren)

Ik moet ergens een denk fout maken... Maar waar? Ik zie hem niet. Of zie ik gewoon een feature van een processor over het hoofd?

Verwijderd

Ja, je ziet het concept "Interrupt" over het hoofd.

  • Steven
  • Registratie: December 2000
  • Laatst online: 09:46
Verwijderd schreef op 29 september 2002 @ 22:17:
Ja, je ziet het concept "Interrupt" over het hoofd.
Even een toevoeging op deze verhelderende uitleg ;) Whatis.com uitleg

Maar in het kader van "kip/ei-verhaal". Wie bepaalt wanneer een programma moet interruperen? Dat onderdeel heeft toch hetzelfde probleem?

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
blaat

[ Voor 0% gewijzigd door Ericston op 29-09-2002 22:36 . Reden: blaat weggehaald ]


Verwijderd

Je hebt software matige en hardware matige interrupt:

software matig: gewoon een instructie aan je processor. Processor komt deze vanzelf tegen.
hardware matig: een signaaltje via een kabeltje naar je processor. Bijvoorbeeld als je een toets op het toetsenbord indrukt (of als je harde schijf zegt dat er data beschikbaar is).

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ja, je ziet interrupts over het hoofd. Je hebt een apart klokje zeg maar in je computer, en de CPU kan dit klokje vertellen "geef me ff een signaal over 10ms". De CPU gaat dat gewoon door met waar hij mee bezig was, en dit klokje telt vrolijk af. Als de tijd verstreken is, geeft hij de CPU een signaal op een speciaal pinnetje, die stopt dan waar hij mee bezig was (slaat de context op zodat hij direct weer verder kan gaan) en voert een routine uit die hieraan gekoppeld was.
Nou kan je dit met meer dan alleen een clock doen, ook rand apparaten kunnen een interrupt afgeven (de cpu onderbreken). Zo zal je toetsenbord de CPU een signaal geven als er een toets wordt ingedrukt.

Verder kan in vrijwel elk OS een process gaan "slapen". De normale gang van zaken bij toetsenbord IO is dus: Het programma meld dat het geinteresseerd is in toets aanslagen, en gaat dan slapen. Als er een toets aanslag is, dan zal het OS het programma weer wakker maken.

Als er in totaal maar 1 process is, dan draait het OS in een "idle" process een loopje, de CPU is dus altijd 100% bezig! Kjik maar in je task manager in windows, je zal zien dat "system idle" heel vaak 99% CPU tijd pakt. En bv Kazaa rond de 7% op de achtergrond :P

Dit is een vrij simpele uitleg trouwens...het zit iets complexer, maar dit is het basis principe.

  • Steven
  • Registratie: December 2000
  • Laatst online: 09:46
Zoijar schreef op 29 september 2002 @ 22:23:
Ja, je ziet interrupts over het hoofd. Je hebt een apart klokje zeg maar in je computer, en de CPU kan dit klokje vertellen "geef me ff een signaal over 10ms". De CPU gaat dat gewoon door met waar hij mee bezig was, en dit klokje telt vrolijk af. Als de tijd verstreken is, geeft hij de CPU een signaal op een speciaal pinnetje, die stopt dan waar hij mee bezig was (slaat de context op zodat hij direct weer verder kan gaan) en voert een routine uit die hieraan gekoppeld was.
Nou kan je dit met meer dan alleen een clock doen, ook rand apparaten kunnen een interrupt afgeven (de cpu onderbreken). Zo zal je toetsenbord de CPU een signaal geven als er een toets wordt ingedrukt.

Verder kan in vrijwel elk OS een process gaan "slapen". De normale gang van zaken bij toetsenbord IO is dus: Het programma meld dat het geinteresseerd is in toets aanslagen, en gaat dan slapen. Als er een toets aanslag is, dan zal het OS het programma weer wakker maken.

Als er in totaal maar 1 process is, dan draait het OS in een "idle" process een loopje, de CPU is dus altijd 100% bezig! Kjik maar in je task manager in windows, je zal zien dat "system idle" heel vaak 99% CPU tijd pakt. En bv Kazaa rond de 7% op de achtergrond :P

Dit is een vrij simpele uitleg trouwens...het zit iets complexer, maar dit is het basis principe.
Tnx :) bedankt voor de goede uitleg.
Pagina: 1