Portál AbcLinuxu, 9. srpna 2025 00:00
Windows garantuje pro kernel mód 12 KB zásobník pro thread a 32/64 KB zásobník pro GUI thread. Windows vnitřně rozlišuje thready na "lehkotonážní" a GUI (to jsou ty, které nějakým způsobem využívají uživatelské rozhraní). Kernel ve Windows automaticky bez jakéhokoli zásahu programátora zkonvertuje "lehkotonážní" thread na GUI při volání první funkce API GUI rozhraní. Jinak ve Windows se dá zásobník zvětšit, například ve Vistách je v kernelu volání KeExpandKernelStackAndCallout.Díky za informaci, měl jsem o tom jen velmi matné povědomí.
Osobně si myslím, že 4 KB v Linux kernelu není šťastné řešení, a že by tam měla být minimálně možnost ho zvětšit na požádání.Možnost zvětšit zásobník by tam určitě měla být. Tím spíš, že by nešlo o velký zásah do implementace (klidně by se tato možnost - stejně jako se dnes zapíná 4K zásobník - mohla zakompilovávat jen volitelně).
Tím spíš, že by nešlo o velký zásah do implementace (klidně by se tato možnost - stejně jako se dnes zapíná 4K zásobník - mohla zakompilovávat jen volitelně).Zakompilovávat volitelně by to šlo, ale zásah do implementace by to určitě byl - teď jádro předpokládá stejnou (a konstantní) velikost zásobníku u všech vláken (a například Miroslavem Ponkrácem uváděný hack s globálním polem je nekorektní).
zásah do implementace by to určitě byl - teď jádro předpokládá stejnou (a konstantní) velikost zásobníku u všech vlákenOn by ten zásah (z hlediska provedených změn) nebyl až tak drastický. Větším problémem by ale byla analýza, kterou by bylo potřeba provést, aby se podchytilo vše, na co by měl nastavitelný zásobník dopady.
například Miroslavem Ponkrácem uváděný hack s globálním polem je nekorektníTo by byla především obrovská prasárna a nedokážu si představit, že by nějaký takový modul prošel do hlavního stromu.
4 KB zásobník je dost málo a dokážu si představit nějaký sofistikovanější driver - třeba složitého filesystému, nebo složitého hw, že 4 KB překročí.Jenže on je ten prostor 4 KB vyhrazen celý pro zásobník vlákna v jádře (kromě krátkého
thread_info
na začátku). Hardwarová a softwarová přerušení mají vlastní zásobníky. Nepřipadá mi to o tolik horší než starý model, kde bylo min. 1,5 KB užráno prostřednictvím task_struct
a přerušení se obsluhovala na témže zásobníku.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.