【kernel】进程与线程
进程栈与线程栈
同一进程间的线程共享的资源有
1.堆
2.全局变量,静态变量
3.文件设备资源等
4.进程的代码段,打开的文件描述符,进程的当前目录。
独享的有
1.栈
2.寄存器,程序计数器pc
3.线程id,线程优先级
4.错误返回码
ulimit指令的使用:可以修改和查看栈的大小
线程栈默认大小是8M,而且线程栈实际上是在进程的 映射段(mmap段) 上进行分配的,所以线程栈的大小是固定的,用完就没了,不像进程栈那样有动态增长的空间。线程栈的最后会有一个4k的保护页,当访问到这个保护页的时候,说明出现了OOB(out of boundary)
进程栈的初始化大小是由编译器和链接器计算出来的,但是栈的实时大小并不是固定的,Linux 内核会根据入栈情况对栈区进行动态增长(其实也就是添加新的页表)。但是并不是说栈区可以无限增长,它也有最大限制 RLIMIT_STACK (一般为 8M),我们可以通过 ulimit 来查看或更改 RLIMIT_STACK 的值