进程有自己的栈吗

dumbbell5kg · 2024-9-3 23:12:20 · 134 次点击
- CPU 的调度单位是线程,所以我认为只有线程有栈,而进程没有
- 如这个答案里的说法我是比较赞同的  https://stackoferflow.com/questions/2131832/whats-the-difference-between-a-threads-stack-and-a-processs-stack
- 但是看书的时候又经常看到进程栈这个词,比如《操作系统概念》、《 Linux 内核设计与实现》
- 书里说到 Linux 中进程和线程的实现仅是共享资源程度的不同,所以 Linux 中的进程和线程一样是有栈的?如果是这样,那进程的栈是用来做什么的?
举报· 134 次点击
登录 注册 站外分享
10 条回复  
lindt99cocoa 小成 2024-9-3 23:57:14
Linux 只有 task ,进程和线程都是在 task 的基础上抽象出来的,通常说的栈就是 task 的栈
GeekGao 小成 2024-9-4 01:58:45
进程作为容器,有自己的初始栈(每个进程至少包含一个线程,即主线程)也就是主线程的栈
每个线程都有自己的私有栈
所有的栈都在进程的地址空间内

我认为核心根结在于:在 Linux 中,进程和线程都是通过相同的数据结构( task_struct )表示。所以就有与教材不一致的理解。

很多系统对于进程设计,不同于 Linux ,例如早期的 Unix 、Plan 9 或是一些嵌入式系统等等。
restkhz 小成 2024-9-4 04:31:12
这个有点钻牛角尖,个人理解,我打个比方吼:

如果有项目组(进程),那么至少应该有一名员工在做事(执行流)。如果要有一名员工办事,那么至少应该给他一个办公桌(栈)。一个有办公桌能拿文档的能做事的员工叫做线程。

所以 OP 的问题可以当作:
项目组有自己的办公桌吗?
david98 小成 2024-9-4 07:42:28
linux 中进程相当于线程组,也就是一群共享内存地址空间的线程 线程之间都能看到对方内存数据 变量等。第一个线程的 id 就作为组 ID 也就是进程 ID 而已
gbw1992 小成 2024-9-4 09:09:57

进程有自己的栈吗

@restkhz #3 这比喻打的挺好,我看标题也一愣,赶紧点进来学习学习。
3apiosexual 初学 2024-9-4 09:13:02

进程有自己的栈吗

@restkhz 赞
PTLin 小成 2024-9-4 09:13:55

进程有自己的栈吗

@dumbbell5kg 不要进程线程这些被名词所困扰。
对于 Linux 来讲,可以理解为只有调度单位 task_struct ,每一个调度单位都有自己的内核栈,以供系统调用以及中断处理过程使用。
假如某几个调度单位共享了:地址空间,打开的文件,信号处理 handle ,等资源,那这一组调度单位的集合就是一个进程,集合中每一个都是一个线程。例如 pthread_create 的实现就是调用了 clone 设置了些共享资源。
whosesmile 小成 2024-9-4 10:56:33

进程有自己的栈吗

程序执行就要分配内存,内存里面是必须的数据,不管进程还是线程,都要有自己的堆栈来保存程序执行中的数据,然后语言会设计一套逻辑来查找和编辑数据。
至于说进程内新启动的线程是否可以共享进程的堆栈,要看你的程序设计和语言本身;而进程如果没有堆栈,它怎么管理自己的程序数据呢?
echoechoin 小成 2024-9-4 10:59:40

进程有自己的栈吗

进程肯定有栈了,切换进程的栈,就是在切换进程
12下一页
返回顶部