Sida 1 av 1

x86 interrupt i realmode?

Postat: 4 maj 2011, 17:11:56
av blueint
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?

Postat: 4 maj 2011, 17:18:45
av sodjan
Du menar om ISR'en pushar 6 egna värden ?
Då får den poppa dom innan IRET.
Eller vad menar du med "processorn" ??

Re: x86 interrupt i realmode?

Postat: 4 maj 2011, 17:23:10
av johano
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

Re: x86 interrupt i realmode?

Postat: 4 maj 2011, 17:30:47
av blueint
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?

Postat: 4 maj 2011, 17:47:53
av johano
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

Re: x86 interrupt i realmode?

Postat: 4 maj 2011, 17:49:02
av sodjan
"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ö.

Re: x86 interrupt i realmode?

Postat: 4 maj 2011, 18:28:08
av blueint
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?

Postat: 4 maj 2011, 19:33:32
av sodjan
"Stack overflow". Fortfarande feldesignat från grunden.
Spelar igen roll hur stor stacken är, tar den slut så gör den.

Re: x86 interrupt i realmode?

Postat: 6 maj 2011, 17:57:11
av blueint
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?

Postat: 6 maj 2011, 18:00:24
av sodjan
Ä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.

Re: x86 interrupt i realmode?

Postat: 6 maj 2011, 23:28:19
av kimmen
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.

Re: x86 interrupt i realmode?

Postat: 6 maj 2011, 23:41:31
av Swech
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

Re: x86 interrupt i realmode?

Postat: 7 maj 2011, 00:13:06
av TomasL
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".
Hmm, det är väl bara typ vissa PIC som har HW-stack, till allas förtretelse.
du är ute och reser