x86 interrupt i realmode?
x86 interrupt i realmode?
När en interrupt inträffar i realmode på en x86 processor så sparas flaggorna, CS, och IP på stacken. Och plockas tillbaks med IRET instruktionen. Men stacken är ju definierad med SS:SP av det program som körs och som råkar bli avbrutet. Så om processorn på eget bevåg slänger in 6 bytes extra på stacken borde det kunna bli problem. Så var lägger processorn dessa värden ..?
Re: x86 interrupt i realmode?
Du menar om ISR'en pushar 6 egna värden ?
Då får den poppa dom innan IRET.
Eller vad menar du med "processorn" ??
Då får den poppa dom innan IRET.
Eller vad menar du med "processorn" ??
Re: x86 interrupt i realmode?
Ja, om det inte finns 6 bytes ledigt på stacken, eller om SP pekar åt helsike fel
när interruptet sker kan det säkert inträffa något intressant...
/johan
när interruptet sker kan det säkert inträffa något intressant...
/johan
Re: x86 interrupt i realmode?
Nja.. säg att du behöver 4 bytes stor stack. Och trycker in t.ex 2 bytes. Och så sker ett hårdvaruinterrupt. Då lär väl processorn lägga in sina egna 6 extra bytes på stacken? och isåfall skriva 4 bytes utanför det reserverade utrymmet?
Re: x86 interrupt i realmode?
Exakt, och därför behöver stacken ju vara minst 6bytes stor - eller så får man avaktivera interrupt
under tiden man har mindre stack än så...
Men varför ha en 4-byte stor stack på x86???
/johan
under tiden man har mindre stack än så...
Men varför ha en 4-byte stor stack på x86???
/johan
Re: x86 interrupt i realmode?
"Stack overflow".
Får man det är hela lösningen fel-designad.
Och det finns 1000-tals sätt att designa system fel,
inget unikt med stack-fel i det avseendet...
> säg att du behöver 4 bytes stor stack.
Väldigt orealistiskt i en x86 miljö.
Får man det är hela lösningen fel-designad.
Och det finns 1000-tals sätt att designa system fel,
inget unikt med stack-fel i det avseendet...
> säg att du behöver 4 bytes stor stack.
Väldigt orealistiskt i en x86 miljö.
Re: x86 interrupt i realmode?
johano, Säg att man har en stack på 512 bytes och råkar använda 508 bytes, och precis då kommer ett hårdvaruinterrupt..
Re: x86 interrupt i realmode?
"Stack overflow". Fortfarande feldesignat från grunden.
Spelar igen roll hur stor stacken är, tar den slut så gör den.
Spelar igen roll hur stor stacken är, tar den slut så gör den.
Re: x86 interrupt i realmode?
Feldesignad processor isåfall. Eftersom den utgår från att alla program den avbryter ska reservera extra utrymme ifall det inträffar. Istället för att ha 6-byte extra "on-die".
Re: x86 interrupt i realmode?
Är exakt likadant på alla arkitekturer som har en minnesmappad stack.
Vilket är i princip alla. Man får helt enkelt se till att ha stack så det räcker.
Vilket är i princip alla. Man får helt enkelt se till att ha stack så det räcker.
Re: x86 interrupt i realmode?
Med tanke på att real mode är konstruerat för att köra ett enda program i taget är det inte alls konstigt. Interruptrutinen lär ändå behöva mer stackutrymme för att kunna göra något vettigt, och varifrån skulle det komma om inte från stacken? Och vad händer om ett interrupt avbryter ett interrupt? Då behövs mer utrymme.
Moderna multitaskingsystem har normalt en eller flera systemstackar som används för sådant. I protected mode på x86 kan processorn vad jag förstått byta stack när ett interrupt kommer och processorn går över till ring 0. Eller, det måste ju vara så för annars skulle program kunna krascha systemet väldigt enkelt.
Moderna multitaskingsystem har normalt en eller flera systemstackar som används för sådant. I protected mode på x86 kan processorn vad jag förstått byta stack när ett interrupt kommer och processorn går över till ring 0. Eller, det måste ju vara så för annars skulle program kunna krascha systemet väldigt enkelt.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: x86 interrupt i realmode?
680xx familjen tryckte in en jämrans massa på stacken vid interrupts,
visserligen med en separat stackpekare. Men x86, och liknande
förutsätter ju att man har rejält med RAM (i jämförelse med PIC /AVR och liknande)
Så problemet verkar mest vara av akademisk natur
Swech
visserligen med en separat stackpekare. Men x86, och liknande
förutsätter ju att man har rejält med RAM (i jämförelse med PIC /AVR och liknande)
Så problemet verkar mest vara av akademisk natur
Swech
Re: x86 interrupt i realmode?
Hmm, det är väl bara typ vissa PIC som har HW-stack, till allas förtretelse.blueint skrev:Feldesignad processor isåfall. Eftersom den utgår från att alla program den avbryter ska reservera extra utrymme ifall det inträffar. Istället för att ha 6-byte extra "on-die".
du är ute och reser