Linux 内核堆栈
所有进程(包括内核进程和普通进程)都有一个内核栈,在x86的32位机器上内核栈大小可以为4KB或8KB,这个可以在编译内核的时候配置。内核栈的用 途有两个:1)当进程陷入内核态,即内核代表进程执行系统调用时,系统调用的参数就放在内核栈上,内核栈记录着进程的在内核中的调用链;2)在内核栈被配 置成8KB大小的情况下,当中断服务程序中断当前进程时,它将使用当前被中断进程的内核栈。对于用户进程,其既有用户地址空间中的栈,也有它自己的内核栈。而内核进程就只有内核栈。
每一个进程(包括普通进程和内核进程)的地址空间都分为用户地址空间和内核地址空间两部分,在32位的x86机器上,用户地址空间的范围是0~3G,内核 地址空间的范围是3G~4G.对于不同的进程,其用户地址空间会随着进程不同而不同,但所有进程的内核地址空间则都是一样的。对于内核进程,由于其始终运 行在内核态,所以没有用户地址空间,其对应的tast_struct结构体中的mm域也就被赋值为NULL。而堆的概念应该是只存在于进程的用户地址空间 中,所以内核进程是没有堆一说的。内核线程可以用kmalloc 或vmalloc在运行时申请内存。kmalloc或vmalloc申请到的内存在整个内核中都可以使用。比方说 内核线程a申请到了一块内存A, 只要把该内存的首地址传给另一个内核线程b,则在b中同样也可以使用这块内存。
相关推荐
omyrobin 2020-09-23
gocuber 2020-07-16
贤时间 2020-07-06
hickwu 2020-06-14
xushxbigbear微信 2020-06-12
shayuchaor 2020-06-07
乾坤一碼農 2020-05-19
平凡的程序员 2020-05-07
IT小牛的IT见解 2020-04-30
BlueSkyUSC 2020-03-22
淼寒儿 2020-03-12
范范 2020-02-26
渴望就奋力追寻 2020-01-28
alicelmx 2020-01-24
Joymine 2020-01-17
hitxueliang 2020-01-07
roseying 2019-12-28
cxcxrs 2019-12-21