thread_info&内核栈】的更多相关文章

转载:http://blog.chinaunix.net/uid-22548820-id-2125152.html 之所以将thread_info结构称之为小型的进程描述符,是因为在这个结构中并没有直接包含与进程相关的字段,而是通过task字段指向具体某个进程描述符.通常这块内存区域的大小是8KB,也就是两个页的大小(有时候也使用一个页来存储,即4KB).一个进程的内核栈和thread_info结构之间的逻辑关系如下图所示: 从上图可知,内核栈是从该内存区域的顶层向下(从高地址到低地址)增长的,…
1. 内核栈的分配,即thread_info的分配,是在do_fork->dup_task_struct中分配(默认为2个pages),并赋值给task_struct->stack: 2. 用户栈的分配分两种: 一是pthread create会事先mmap分配好用户栈,传给do_fork->copy_thread:用户栈起始地址会赋值给pt_regs->sp,接着设置内核栈底p->thread.cpu_context.sp = (unsigned long)childreg…
1.什么是进程的内核栈? 在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进程的内核栈 2.进程的内核栈在计算机中是如何描述的? linux中进程使用task_struct数据结构描述,其中有一个stack指针 struct task_struct { // ... void *stack; // 指向内核栈的指针 // ... }; task_struct数据结构中的stack成员指向thread_union结构(L…
本文转载自内核栈与thread_info结构详解 什么是进程的内核栈? 在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进程的内核栈 进程的内核栈在计算机中是如何描述的? linux中进程使用task_struct数据结构描述,其中有一个stack指针 struct task_struct { // ... void *stack; // 指向内核栈的指针 // ... }; task_struct数据结构中的stac…
转自:http://blog.csdn.net/u011279649/article/details/18795547 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 应用层怎样使用fork and execve fork的返回值怎样区分0pid fork系统调用的入口参数来自哪里 how to implement do_fork copy_process How to check the kernel stack correctivity How to set the…
需要考证 考证结果: 其内核栈是独立的 206 static struct task_struct *dup_task_struct(struct task_struct *orig) 207 { 208 struct task_struct *tsk; 209 struct thread_info *ti; 210 int err; 211 212 prepare_to_copy(orig); 213 214 tsk = alloc_task_struct(); 215 if (!tsk) 2…
Linux 进程栈和线程栈的区别 http://www.cnblogs.com/luosongchao/p/3680312.html 总结:线程栈的空间开辟在所属进程的堆区,线程与其所属的进程共享进程的用户空间,所以线程栈之间可以互访.线程栈的起始地址和大小存放在pthread_attr_t 中,栈的大小并不是用来判断栈是否越界,而是用来初始化避免栈溢出的缓冲区的大小(或者说安全间隙的大小) 进程内核栈.用户栈 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同事,会为进程创…
在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB.这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linux/sched.h): union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; }; THREAD_SIZE值为8KB,因此内核为进程的异常栈(内核栈)分配…
http://blog.chinaunix.net/uid-14528823-id-4136760.html Linux中有多种栈,很容易弄晕,简单说明一下: 1.用户态栈:在进程用户态地址空间底部,跟平时我们简单和理解的一样,就是虚拟地址空间中的一段,不多说~ 2.内核栈:     跟用户态栈是独立的,在用户态和内核态切换时,需要进行切换.     默认8k,可以通过内核配置项修改     跟thread_info结构放在一起,公用一个union:thread_union, 点击(此处)折叠或…
有个同事看3.10代码中,看着两个结构,会混淆,所以我简单答复了一下. thread_info是和内核栈放一块的,网上到处都是thread_info的资料,但thread_struct的资料比较少,在此记录下,以备忘 struct thread_info { struct task_struct *task; /* main task structure */ struct exec_domain *exec_domain; /* execution domain */ __u32 flags;…