( bzt | 2024. 08. 24., szo – 16:01 )

OS nélkül a szál egy olyan utasítássorozat ami valamilyen külső hatásra fel tud függesztődni és utána folytatódni tud onnan ahol felfüggesztődött.
Semmi köze az OS-hez. A szálat így definiáltam: Ha ennek a regiszternek [PC] az értéke elmentődik a memóriába, és egy, a normál programfolyamtól eltérő érték kerül helyette bele, akkor többszálú programvégrehajtásról beszélünk.
Ha viszont van operációs rendszer akkor a szál definiciója kiegészül
Nem hiszem. A szál egy absztrakt fogalom, nem függ attól, hogy van-e OS, max. egy OS-ben többféleképp is bekövetkezhet a szálváltás. A hangsúly azon van, hogy az új PC érték a normál programfolyamtól független-e, nem azon, hogy honnan jön az új érték.
tehát az ISR csak szól a kernelnek, hogy izé van, rúgd be az IST-t
Nem, az ISR a kernel része, mindig (akár monolitikus pl Linux, akár mikrokernel pl Minix). Egyébként ne használjuk ebben a kontextusban az "IST"-t, mert piszkosul zavaró, ugyanis x86_64-on ugyanígy hívják az ISR veremváltó mechanizmust is (vissza oda, hogy már megint keverednek az IT terminológiák). Egész konkrétan x86_64 alatt így zajlik a dolog: - meghívódik egy megszakítás (hogy mi váltja ki, az most lényegtelen, lehet soft int vagy hard int is) - a CPU kiolvassa az Interrupt Descriptor Table megfelelő bejegyzéséből a típusát és az Interrupt Service Routine címét - a CPU kiolvassa a Task State Segment shadow másolatából az IST mezőket (már ha az IDT bejegyzés megfelelő bitjei be vannak állítva) - attól függően, hogy történt-e privilégiumszintváltás, a CPU más-más adatokat ment a (IST-től függően pontenciálisan új) verembe - attól függően, hogy mi volt a megszakítás típusa, a CPU további adatokat rakhat a verembe - a CPU az IP regiszterbe az ISR címét helyezi, így a továbbiakban az fog futni (típustól és privilégiumszinttől függően más rendszerregiszterek is változhatnak, nemcsak az IP) Aztán hogy ez az ISR tulajdonképpen mit is csinál, az már a kernel dolga, szoftveres implementáció csak, nem hardveres, mint a fentiek. Egy egyszerű kernel lekezelheti egyből a dolgokat, míg egy mikrokernel jellemzően csak üzenetet küld egy eszközvezérlő processznek (amiben a megszakításkezelő thread található) stb., ez már a kernel belügye.
Viszont mivel az IST a kernel része, ezért a kernel címterében fut
Ez egyáltalán nem biztos. Ez csak a monolitikus kernelekre jellemző (de ott sem mindig), mikrokernelek esetében meg kifejezetten nem igaz ez az állítás. Mondom, ez már a kernel belügye. Összefoglalva: - az ISR lekezelheti egyből a dolgot (tipikusan Linux 0.0.1) - az ISR felébreszthet egy kernel thread-et (tipikusan Linux, amióta van kthread) - az ISR üzenetet küldhet egy felhasználó módú processzben futó szálnak (pl. Minix)