打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
内核进程的堆栈

http://topic.csdn.net/u/20100412/20/3ecdba18-321e-45ba-8b40-74e228061e47.html

 

每一个进程(包括普通进程和内核进程)的地址空间都分为用户地址空间和内核地址空间两部分,在32位的x86机器上,用户地址空间的范围是0~3G,内核地址空间的范围是3G~4G.对于不同的进程,其用户地址空间会随着进程不同而不同,但所有进程的内核地址空间则都是一样的。对于内核进程,由于其始终运行在内核态,所以没有用户地址空间,其对应的tast_struct结构体中的mm域也就被赋值为NULL。而堆的概念应该是只存在于进程的用户地址空间中,所以内核进程是没有堆一说的。内核线程可以用kmalloc 或vmalloc在运行时申请内存。kmalloc或vmalloc申请到的内存在整个内核中都可以使用。比方说 内核线程a申请到了一块内存A, 只要把该内存的首地址传给另一个内核线程b,则在b中同样也可以使用这块内存。

 

所有进程(包括内核进程和普通进程)都有一个内核栈,在x86的32位机器上内核栈大小可以为4KB或8KB,这个可以在编译内核的时候配置。内核栈的用途有两个:1)当进程陷入内核态,即内核代表进程执行系统调用时,系统调用的参数就放在内核栈上,内核栈记录着进程的在内核中的调用链;2)在内核栈被配置成8KB大小的情况下,当中断服务程序中断当前进程时,它将使用当前被中断进程的内核栈。
对于用户进程,其既有用户地址空间中的栈,也有它自己的内核栈。而内核进程就只有内核栈。

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
专栏:谈谈Windows核心编程系列
Windows CE 进程、线程和内存管理
驱动面试、笔试常见问题
[note]N种内核注入DLL的思路及实现
作业、进程、线程
linux内核分析笔记----进程地址空间
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服