歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux中的棧:用戶態棧/內核棧/中斷棧

Linux中有多種棧,很容易弄暈,簡單說明一下:
1、用戶態棧:在進程用戶態地址空間底部,跟平時我們簡單和理解的一樣,就是虛擬地址空間中的一段,不多說~
2、內核棧:
跟用戶態棧是獨立的,在用戶態和內核態切換時,需要進行切換。
默認8k,可以通過內核配置項修改
跟thread_info結構放在一起,公用一個union:thread_union,

 


點擊(此處)折疊或打開

1. union thread_union {

2. struct thread_info thread_info;

3. unsigned long stack[THREAD_SIZE/sizeof(long)];

4. };
放在特殊的段中:__(".data.init_task")))

 


點擊(此處)折疊或打開

1. union thread_union init_thread_union

2. __attribute__((__section__(".data.init_task"))) =

3. { INIT_THREAD_INFO(init_task) };

 

 

點擊(此處)折疊或打開

1. ENTRY(stack_start)

2. .long init_thread_union+THREAD_SIZE

3. .long __BOOT_DS

默認跟中斷棧共享,可以通過內核配置項修改
屬於進程,即每個進程都有自己的內核棧
3、中斷棧:
默認跟內核棧共享
與內核棧中的內容獨立,相互不可見
中斷、異常、軟中斷使用此棧
使用被打斷的進程的內核棧

Copyright © Linux教程網 All Rights Reserved