( micsa | 2024. 08. 22., cs – 16:24 )

szerintem meg ne keverjük a dolgokat...

 

multithreading azt jelenti, hogy EGY PROCESSZEN belül az oprendszer megengedi, hogy több szálon futtassunk dolgokat... Ezek a threadek márpedig MEGOSZTJÁK az address space-t. Ezt írja a két link, amit bepészteltél.

az, hogy ez hogy van megimplementálva, kernelben-e vagy userspace-ben, hogy egy IO-ra vagy condition variable-re váró threadet signalokkal ébreszt-e fel a kernel vagy füstjelekkel, a schedulingre timer interrupt-ot vagy varázslatot használ-e, az már implementáció kérdése és a futó programot nem érdekli és ne is érdekelje.

 

Persze, semmi köze a programhoz, :) (de van) Főleg, hogy a programban valósították meg, és pl 20 ms-onként lefut egy megszakítás, pl a képernyőhöz időzítve, ami a program része, és program érdekében végez dolgokat. :) (egy példa volt)

a te user módú "programodban" sosem fog lefutni egy megszakítás... az mindig kernelben fut le, kernel módban és kernel stackkel... s annak akkor is le kell futnia, amikor az a cpu pont egy kernel threaden dolgozik. És ez a megszakítás nem a te programod érdekében végez dolgokat, hanem a rendszer érdekében, elsősorban. persze, a kernel ad mechanizmusokat, hogy a te programod is valamelyest szinkronizálhasson  egy ilyen eventtel...

 

És miből gondolod, hogy egy interrupt hatására induló, futó (program-)szál nem tudja megosztani mindazt, amit írtál: "share process instructions, and share data transparently with the other threads"? - elég korlátozottak lennének a lehetőségek.

ezt nem értem. mi az, hogy "interrupt hatására induló, futó szál"?  te el is olvastad, amit kérdeztél? ez az angol mondat egész pontosan azt mondja, hogy a threadek megosztják az address space-t: a kódot és az adatokat... WITHIN THE PROCESS (amit levágtál a mondat végéről).

De a te programod SOSEM fogja elérni a kernel adatait (ahol a megszakítás fut) és az interrupt handlerből sem nagyon lehet matatni az éppen futó user módú taszk memóriájában (mert lehet, hogy az a page pont ki van swappelve... linuxon van copy_from_user(), de azt nem lehet ISR-ből használni, hanem ehhez kell kérni egy tasklet, workqueue, bottom-half, stb. és majd abban).

 

A thread lényegében annyi, amit írtam, azt hidd el, hogy nem szabja meg senki a mikéntjét. Ezért írtam, hogy logikai dolog. Persze én elhiszem, hogy ha valaki "thread"-et említ, akkor leginkább az OS thread-re gondolnak először (ma).

nem értem, mit akarsz ezzel mondani.

 

Én nem filozofálgatásnak gondolom, hanem alapfogalomnak (ahogy az oracle, és a priceton is, de csak a két első weblapot belinkeltem ami megjelent a "definition of thread" keresésre, és leírták azt).

én is ezt mondom...  szerintem meg ti filozófálgattok az interruptokról és a signalokról, amikor multithreadingről beszélünk... bzt szerint az a "multithreadingnek" egy formája...  lol (én erre kértem forrást)

szóval, thread=szál, interrupt=system related mechanism, sometimes used for sheduling threads, signaling = limited form of inter process communication