当前位置:首页 » 操作系统 » linux栈空间

linux栈空间

发布时间: 2025-05-07 12:59:23

linux 设置堆栈大小 为无限制

你好。

执行命令ulimit -a,查看栈大小的限制。

通过使用 ulimit -s 数字 进行设置。

② Linux内核中用户空间栈和内核栈的区别

您好,很高兴为您解答。

1.进程的堆栈

内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。

2.进程用户栈和内核栈的切换

当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈。

进程陷入内核态后,先把用户态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了用户栈向内核栈的转换;当进程从内核态恢复到用户态之行时,在内核态之行的最后将保存在内核栈里面的用户栈的地址恢复到堆栈指针寄存器即可。这样就实现了内核栈和用户栈的互转。

那么,我们知道从内核转到用户态时用户栈的地址是在陷入内核的时候保存在内核栈里面的,但是在陷入内核的时候,我们是如何知道内核栈的地址的呢?

关键在进程从用户态转到内核态的时候,进程的内核栈总是空的。这是因为,当进程在用户态运行时,使用的是用户栈,当进程陷入到内核态时,内核栈保存进程在内核态运行的相关信心,但是一旦进程返回到用户态后,内核栈中保存的信息无效,会全部恢复,因此每次进程从用户态陷入内核的时候得到的内核栈都是空的。所以在进程陷入内核的时候,直接把内核栈的栈顶地址给堆栈指针寄存器就可以了。

3.内核栈的实现

内核栈在kernel-2.4和kernel-2.6里面的实现方式是不一样的。

在kernel-2.4内核里面,内核栈的实现是:

Uniontask_union{
Structtask_structtask;
Unsignedlongstack[INIT_STACK_SIZE/sizeof(long)];
};

其中,INIT_STACK_SIZE的大小只能是8K。

内核为每个进程分配task_struct结构体的时候,实际上分配两个连续的物理页面,底部用作task_struct结构体,结构上面的用作堆栈。使用current()宏能够访问当前正在运行的进程描述符。

注意:这个时候task_struct结构是在内核栈里面的,内核栈的实际能用大小大概有7K。

内核栈在kernel-2.6里面的实现是(kernel-2.6.32):

Unionthread_union{
Structthread_infothread_info;
Unsignedlongstack[THREAD_SIZE/sizeof(long)];
};

其中THREAD_SIZE的大小可以是4K,也可以是8K,thread_info占52bytes。

当内核栈为8K时,Thread_info在这块内存的起始地址,内核栈从堆栈末端向下增长。所以此时,kernel-2.6中的current宏是需要更改的。要通过thread_info结构体中的task_struct域来获得于thread_info相关联的task。更详细的参考相应的current宏的实现。

structthread_info{
structtask_struct*task;
structexec_domain*exec_domain;
__u32flags;
__u32status;
__u32cpu;
…..
};

注意:此时的task_struct结构体已经不在内核栈空间里面了。


如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

热点内容
实时上传视频软件 发布:2025-05-08 03:01:20 浏览:756
腾讯缓存地址在哪里 发布:2025-05-08 02:46:56 浏览:881
java培训全套教程 发布:2025-05-08 02:36:57 浏览:372
编程铣床 发布:2025-05-08 02:36:21 浏览:43
数控编程编程代码 发布:2025-05-08 02:35:24 浏览:332
checkboxandroid图片 发布:2025-05-08 02:12:07 浏览:670
微信dat数据反编译 发布:2025-05-08 02:11:32 浏览:298
2级c语言软件 发布:2025-05-08 01:55:45 浏览:490
服务器光驱占用d盘如何改变 发布:2025-05-08 01:43:33 浏览:857
全民农场服务器关闭什么时间开启 发布:2025-05-08 01:29:20 浏览:677