天天看點

linux 線程有自己獨立的核心棧(核心棧中存儲着pcb)嗎?

疑問:首先,我們知道所有線程共享主線程的虛拟位址空間(current->mm指向同一個位址),且都有自己的使用者态堆棧(共享父程序的位址空間,再在裡面配置設定自己的獨立棧,預設2M)。這是毫無疑問的,但還有一點我沒搞明白,核心棧是共享還是獨立的?

回答:獨立的。理由:要不然核心棧對應的thread_info中的tast_struct(pcb程序控制塊)沒有辦法與每個線程對應起來,因為現在已經有多個task_struct了,但儲存核心棧的thread_info(其實是thread_union聯合體)中隻能儲存一個task_struct。是以理論上分析,雖然可以共享位址空間,但每個線程還是需要一個單獨的核心棧的。