- 论坛徽章:
- 15
|
qq471876425 发表于 2014-01-10 22:51 ![]()
那进程本身有权利进行上下文切换的权限么?上下文切换肯定是有内核参与的,内核桟空间没有谁来管理么? ...
上下文切换发生在很多情况下,比如系统调用、中断、调度等,当然可以有进程自身主动发起。
内核栈跟thread_info结构放在一起,
union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
在进程创建时,会调用alloc_thread_info分配内核栈空间,默认情况下THREAD_ORDER=1,即直接分配2页,也就是8k,这8k空间即用于内核栈和thread_info。所以,内核栈空间实际就是一段8k的普通内存,与其他内存无异,所以,无需特别的管理,由伙伴系统和进程地址空间相关机制管理即可。
#define alloc_thread_info(tsk) \
((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
|
|