QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1569|回复: 11

怎样扩展系统stack的size?

[复制链接]
发表于 2005-1-28 13:14:18 | 显示全部楼层 |阅读模式
如题?
 楼主| 发表于 2005-1-28 13:17:59 | 显示全部楼层
应该是:怎样扩展系统Thread stack的size?
回复

使用道具 举报

发表于 2005-2-2 18:20:02 | 显示全部楼层
man setrlimit?
回复

使用道具 举报

 楼主| 发表于 2005-2-3 10:08:32 | 显示全部楼层
ulimit -s XXX 可以扩展系统stack size。但我不清楚这里扩展的是否是thread stack.
setrlimit也是基于上述原理。
现在我不理解thread stack 和普通stack的区别?

|     |0x00000000
|               |
|               |
|               |
--------------
|  text       |
--------------
|  data      |
--------------
|  bss        |
--------------
|  heap      |
--------------
|                |
|                |
|   stack     |
-------------- 0xc0000000
|                |
|                |
|   Kernel   |
-------------- 0xffffffff

thread stack属于stack中吗?
回复

使用道具 举报

发表于 2005-2-3 10:27:32 | 显示全部楼层
我记得内核只对进程分成 text data stack三段。

线程的stack是共有进程的stack,它通过再细分进程的stack来完成,好像是由线程库来划分的
回复

使用道具 举报

发表于 2005-2-3 17:10:59 | 显示全部楼层
pthread库似乎如下管理stack
按照分区:
stack-start  0xc000 0000
main-thread
------------------------------0xbf80 0000
pthread 1
------------------------------0xbf60 0000
pthread 2
------------------------------0xbf40 0000
pthread 3
....
如果pthread m退出,pthread n(n>m)就可以重复占用

setrlimit似乎只对process  main thread起作用.
pthread不知道如何调整stack分配策略
回复

使用道具 举报

发表于 2005-2-4 00:23:24 | 显示全部楼层
在Windows下面用VC++的cl编译的时候似乎可以指定每个thread的栈的大小,不过那个是核心支持的线程,在Linux下面好像线程库不是很统一,对于纯粹的用户级线程来说,那么好象应该用线程库提供的函数来指定,而对于内核提供支持的线程库来说,恐怕要用编译选项(也有可能是函数)来决定
回复

使用道具 举报

发表于 2005-2-4 11:54:38 | 显示全部楼层
win32 API的CreateThread是可以指定thread size的.
win32连接器选项也可以指定进程的stack size,
是因为PE文件格式可以描述stack大小.
linux的__clone
int  __clone(int (*fn) (void *arg), void *child_stack, int  flags, void *arg)
可以指定stack指针位置.
另外,ELF好象没有可以描述stack大小的地方,
那么linux的连接器恐怕也无能为力?
回复

使用道具 举报

 楼主| 发表于 2005-2-15 16:54:13 | 显示全部楼层
thread 使用pthread_attr_setstack(3) 来设置thread stack
但是,那是在thread创建时的工作。我目前要对其他应用程序的thread stack进行扩展。不知道从哪里入手。
回复

使用道具 举报

 楼主| 发表于 2005-2-21 13:56:22 | 显示全部楼层
解决了process stack使用Huge TLB页的问题
但还没有解决thread stack使用Huge TLB的问题。
想获取thread stack的BP, SP.怎样获取?怎样得到thread stack的bottom top?
回复

使用道具 举报

发表于 2005-3-2 10:23:30 | 显示全部楼层
有几个函数可以使用,但是试的时候没有成功
pthread_attr_getstack (&attr, &stacksize, &stackaddr);
根本就没有得到stackaddr,返回值stackaddr里面是nil空,不知道怎么用这个函数??

帮不顶一下!
回复

使用道具 举报

 楼主| 发表于 2005-3-7 11:29:09 | 显示全部楼层
需要重新写pthread_create.在该函数中使用pthread_attr_setstack.
目前已经实现了。但是对thread stack的自动扩展,还在调查
感谢各位对偶得问题的大力支持
希望大家继续关注偶的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 13:59 , Processed in 0.045716 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表