Linux操作系统之进程数据结构

Posted Dufre.WC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统之进程数据结构相关的知识,希望对你有一定的参考价值。

前言

操作系统对我来说很抽象的,学了几年,工作中天天打交道,却不懂它。偶然听了极客时间的一门课(这里就不打广告了),很有启发。其实操作系统就好比一个公司:

  • 进程管理:可以理解为公司的项目管理
  • 内存管理:可以理解为公共资源的管理,比如会议室
  • 文件系统:可以理解为项目开发过程中文档的管理
  • 输入输出系统:可以理解为售前售后体系

进程和线程

  • 进程:相当于一个项目
  • 线程:相当于一个项目中一个个的开发任务
    就我的工作而言,一块开发板的软件开发(基于android/Linux)叫一个项目,一个项目的开始我们叫开案。客户会要求我们要有什么什么功能,所以会有各个功能的需求,有些功能彼此之间没有关联性,可以并行执行;有些功能需要从头做到尾。
    在Linux内核里,无论是进程,还是线程,都统一叫做Task,由一个task_struct进行管理。

任务管理

上节有说到task_struct结构,它在include/linux/sched.h中定义,很长。

  • 任务ID
    • pid:process id
    • tpid: 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)

简述Linux进程间通信之命名管道FIFO

思考总结Linux系统框架进程间通信

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

Linux 进程间通信之管道(pipe),(fifo)

Linux进程间通信之管道(pipe)命名管道(FIFO)与信号(Signal)