我有一个SH4板,这是规格..。
uname -a
Linux LINUX7109 2.6.23.17_stm23_A18B-HMP_7109-STSDK #1 PREEMPT Fri Aug 6 16:08:19 ART 2010
sh4 unknown
假设我已经吃光了几乎所有的内存,只剩下9MB。
free
total used free shared buffers cached
Mem: 48072 42276 5796 0 172 3264
-/+ bu
关于pthread_attr_setstacksize 的手册页
A thread's stack size is fixed at the time of thread creation. Only the main thread can dynamically grow its stack.
我对linux线程的理解是,主线程堆栈的大小仅限于主线程创建上的ulimit -s值。虽然它可以根据堆栈使用的需要映射到virt,但其大小不再增长。
动态增长在这里意味着什么?这是否意味着主线程堆栈的大小可以超过ulimit -s
我想确切地知道异步信号处理程序在Linux上是如何执行的。首先,我不清楚哪个线程执行信号处理程序。其次,我想知道让线程执行信号处理程序所遵循的步骤。
关于第一个问题,我读到了两种不同的、似乎相互矛盾的解释:
The Linux Kernel,作者: Andries Brouwer,:
当信号到达时,进程中断,保存当前寄存器,并调用信号处理程序。当信号处理程序返回时,中断的活动将继续。
让我认为Linux的行为是:
当一个信号被传递到一个进程时,如果它被捕获了,它将由一个且只有一个满足以下条件的线程来处理:
1. A thread blocked in a [**sigwait**(2)](h
在浏览glibc代码时,观察到一行描述“注意,我们没有重置'tid‘字段中的'used’标志,这是由内核在第760行的glibc_source (Version2.21) ()中完成的。”
根据我的理解,glibc重用缓存堆栈列表中维护的T2线程堆栈。但是在重用该堆栈之前,它会检查T1的线程描述符中的tid字段(在pthread_join of T1之后已经将其重置为-1 )。
T1 - First thread.
T2 - Second thread created after T1 exited.
根据在文件中的注释(allocatestack.c:760),结构线程的