Linux操作系统之进程数据结构
Posted Dufre.WC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统之进程数据结构相关的知识,希望对你有一定的参考价值。
前言
操作系统对我来说很抽象的,学了几年,工作中天天打交道,却不懂它。偶然听了极客时间的一门课(这里就不打广告了),很有启发。其实操作系统就好比一个公司:
- 进程管理:可以理解为公司的项目管理
- 内存管理:可以理解为公共资源的管理,比如会议室
- 文件系统:可以理解为项目开发过程中文档的管理
- 输入输出系统:可以理解为售前售后体系
进程和线程
- 进程:相当于一个项目
- 线程:相当于一个项目中一个个的开发任务
就我的工作而言,一块开发板的软件开发(基于android/Linux)叫一个项目,一个项目的开始我们叫开案。客户会要求我们要有什么什么功能,所以会有各个功能的需求,有些功能彼此之间没有关联性,可以并行执行;有些功能需要从头做到尾。
在Linux内核里,无论是进程,还是线程,都统一叫做Task,由一个task_struct
进行管理。
任务管理
上节有说到task_struct
结构,它在include/linux/sched.h中定义,很长。
- 任务ID
pid
:process idtpid
: thread group id(主线程的pid,如果tpid == pid,说明是主线程)
- 任务状态
state
:通过bitset方式设置TASK_RUNNING
:进程正在运行TASK_INTERRUPTIBLE
:可中断的睡眠状态TASK_UNINTERRUPTIBLE
:不可中断的睡眠状态TASK_KILLABLE
:可以终止的新睡眠状态
exit_state
:flags
:
- 信号处理
blocked
:被阻塞暂不处理pending
:等待处理sighand
:正在通过信号处理函数进行处理
- 进程调度
- 运行统计信息
utime
:用户态消耗的CPU时间stime
:内核态消耗的CPU时间nvcsw
:自愿(voluntary)上下文切换nivcsw
:非自愿(involuntary)上下文切换start_time
:进程启动时间,不包含睡眠时间real_start_time
:进程启动时间,包含睡眠时间
- 进程亲缘关系
parent
:指向父进程,终止时,必须向父进程发送信号children
:表示链表的头部,链表中所有元素都是它的子进程sibling
:用户把当前进程插入到兄弟链表中
- 进程权限
real_cred
:谁能操作这个进程cred
:这个进程能操作谁
- 内存管理
mm
active_mm
- 文件与文件系统
fs
files
以上是关于Linux操作系统之进程数据结构的主要内容,如果未能解决你的问题,请参考以下文章
操作系统之三Linux下进程间通信-IPC(Inter-Process Communication)