12 | 进程数据结构(上):项目多了就需要项目管理系统
刘超
该思维导图由 AI 生成,仅供参考
前面两节,我们讲了如何使用系统调用,创建进程和线程。你是不是觉得进程和线程管理,还挺复杂的呢?如此复杂的体系,在内核里面应该如何管理呢?
有的进程只有一个线程,有的进程有多个线程,它们都需要由内核分配 CPU 来干活。可是 CPU 总共就这么几个,应该怎么管理,怎么调度呢?你是老板,这个事儿得你来操心。
首先,我们得明确,公司的项目售前售后人员,接来了这么多的项目,这是个好事儿。这些项目都通过办事大厅立了项的,有的需要整个项目组一起开发,有的是一个项目组分成多个小组并行开发。无论哪种模式,到你这个老板这里,都需要有一个项目管理体系,进行统一排期、统一管理和统一协调。这样,你才能对公司的业务了如指掌。
那具体应该怎么做呢?还记得咱们平时开发的时候,用的项目管理软件 Jira 吧?它的办法对我们来讲,就很有参考意义。
我们这么来看,其实,无论是一个大的项目组一起完成一个大的功能(单体应用模式),还是把一个大的功能拆成小的功能并行开发(微服务模式),这些都是开发组根据客户的需求来定的,项目经理没办法决定,但是从项目经理的角度来看,这些都是任务,需要同样关注进度、协调资源等等。
同样在 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。这个结构非常复杂,但你也不用怕,我们慢慢来解析。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文以项目管理系统为比喻,介绍了Linux内核中进程数据结构的管理方式。作者将进程和线程比作项目和小组,通过task_struct结构来管理任务。文章首先讨论了任务ID的管理,包括pid、tgid和group_leader字段的作用。然后详细讨论了任务状态的管理,包括不同状态的含义和相应的处理方式。进一步介绍了进程调度相关的字段,包括进程在运行队列上的状态、优先级、调度器类、调度实体等。通过生动的比喻和清晰的技术解释,读者可以初步了解Linux内核中任务的管理方式,以及进程和线程的区别和联系。整体而言,本文通过深入浅出的方式,帮助读者快速了解进程数据结构的管理方式,为进一步深入学习提供了良好的基础。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(52)
- 最新
- 精选
- 第十人tgid和threadleader都是进程的主线程,那这两个参数不就重复了么?有其他的含义么?
作者回复: 一个是id,一个是指针,只知道ID,不得一个个找么
2019-04-22219 - 唐稳介绍的很详细,赞一个。 有个问题一直纠结,信号处理函数到底是在哪个线程中运行的?
作者回复: 不在任何一个线程中,后面会详细解析信号处理的过程
2019-05-01216 - ECHOLOG举一反三一下,因为线程和进程都是task_struct表示的,所以有僵尸进程,那就有僵尸线程
作者回复: 对的pthread_join
2019-08-1915 - 勤劳的小胖子-libo任何一个进程,如果只有主线程,那 pid 是自己,tgid 是自己,group_leader 指向的还是自己。 但是有多个线程就不一样了,pid是这个子线程,tgid和group_leader都是指向主线程。 好奇,tgid与group_leader不就相同作用吗?在上面的二种情况下,为什么需要二个相同功能的域?
作者回复: 一个是id,一个是地址,有地址就能直接找到了
2019-05-119 - Egos看文章理解的task_struct 是Thread 的一个链表?
作者回复: 进程和线程在一起的链表
2019-04-2229 - 一笔一画老师,请教一下,之前看书上说用户进程和内核线程是多对多的模型?这个怎么理解,我们常用的发行版又是什么样的模型?
作者回复: 操作系统的理论是有多种模型的,多对一,一对一,多对多,Linux是一对一。
2019-04-238 - 中翅Lzc如果进程创建了其他多个线程,那么tpid就是主线程id,pid就是其他线程id了,两者肯定不相等啊
作者回复: 对的
2019-04-227 - Dracula老师好,有个疑惑所有的task_struct为什么用链表串联起来而不是用数组
作者回复: 很多插入和删除
2019-04-226 - fangxuan如果一个进程只有主线程,那么task_struct是一个还是两个?如果是一个还好,这个task_struct既代表进程也代表主线程;如果是两个,进程的pid,tgid都指向自己,那怎么知道主线程是谁?
作者回复: 一个。
2019-05-095 - jnh1983源码是:include/linux/sched.h 老师把代码归纳了一下,方便理解
作者回复: 赞
2020-05-2724
收起评论