Linux进程知识点总结

本文详细介绍了Linux操作系统中的进程概念,包括进程在内存中的存储结构(虚拟内存、页表、物理内存),进程的生命周期状态(如运行、等待、暂停等),以及进程的创建(fork、exec家族)、终止(exit、_exit、信号)和管理(wait函数)。还探讨了进程间的通信,如IPC工具分类。内容深入浅出,适合Linux系统管理员和开发者学习。
摘要由CSDN通过智能技术生成

零.基本概念

1.进程是可执行程序在内存中的实例,是系统进行资源分配(cpu使用时间、次数和内存等等)的基本单位。
2.程序是存储在磁盘中的文件,包含和创建进程所需要的各种信息
3.在Linux中使用task_struct结构体来描述进程的相关信息

1.进程在内存中的存储结构

下图是进程在内存中的存储结构(虚拟内存)
进程控制块pcb位于kernel区。
进程通过页表将虚拟内存的页映射到实际的物理内存上。
虚拟内存->页表->物理内存。
在这里插入图片描述

2.进程的结构体

Linux进程的结构体 task_struct存储在 sched.h头文件中

结构体的内容

内容比较多,大概看一下就好,可略过
1.进程运行的状态
1) TASK_RUNNING: 可运行状态。状态下的进程又分两种状态:
a.正在运行 b.正在准备运行(得到CPU即可运行)
2) TASK_INTERRUPTIBLE 可中断的等待状态
针对等待某事件或其他资源的睡眠进程设置的,在内核发送信号给该进程表明事件已经发生时,进程状态变为TASK_RUNNING,它只要调度器选中该进程即可恢复执行
3) TASK_UNINTERRUPTIBLE:不可中断的等待状态 D状态
处于该状态的进程正在等待某个事件(event)或某个资源,它肯定位于系统中的某个等待(wait_queue)中,处于不可中断等待态的进程是因为硬件环境不能满足而等待,例如等待特定的系统资源,它在任何情况下都不能被打断,只能用特定的方式来唤醒它,例如唤醒函数wake_up()等它们不能由外部信号唤醒,只能由内核亲自唤醒
4) TASK_ZOMBIE: 僵死
进程虽然已经终止,但由于某种原因**,父进程还没有执行wait()系统调用,终止进程的信息也还没有回收**。顾名思义,处于该状态的进程就是死进程,这种进程实际上是系统中的垃圾,必须进行相应处理以释放其占用的资源。
5) TASK_STOPPED: 暂停
此时的进程暂时停止运行来接受某种特殊处理。通常当进程接收到SIGSTOP、SIGTSTP、SIGTTIN或 SIGTTOU信号后就处于这种状态。例如,正接受调试的进程就处于这种状态
6) TASK_TRACED
从本质上来说,这属于TASK_STOPPED状态,用于从停止的进程中,将当前被调试的进程与常规的进程区分开来
7) TASK_DEAD
父进程wait系统调用发出后,当子进程退出时,父进程负责回收子进程的全部资源,子进程进入TASK_DEAD状态
8) TASK_SWAPPING: 换入/换出
2.stack
进程内核栈,进程通过alloc_thread_info函数分配它的内核栈,通过free_thread_info函数释放所分配的内核栈
3. usage
进程描述符使用计数,被置为2时,表示进程描述符正在被使用而且其相应的进程处于活动状态
4. flags
flags是进程当前的状态标志(注意和运行状态区分)
5. ptrace
ptrace系统调用,成员ptrace被设置为0时表示不需要被跟踪
6. lock_depth
用于表示获取大内核锁的次数,如果进程未获得过锁,则置为-1
7. oncpu
在SMP上帮助实现无加锁的进程切换(unlocked contextswitches)
8. 进程调度
9. preempt_notifier 结构体链表
10. fpu_counter FPU使用计数
11. btrace_seq blktrace是一个针对Linux内核中块设备I/O层的跟踪工具
12. policy
policy表示进程的调度策略,目前主要有五种:1.普通进程的完全公平调度2.FIFO调度3.时间片轮转调度4.用于非交互、CPU使用密集的批处理进程,通过完全公平调度器来处理,调度决策对
此类进程给与"冷处理",它们绝不会抢占CFS调度器处理的另一个进程,因此不会干扰交互式进程,如果不打算用nice降低进程的静态优先级,同时又不希望该进程影响系统的交互性,最适合用该调度策略 5.可用于次要的进程,其相对权重总是最小的,也通过完全公平调度器来处理。要注意的
是,SCHED_IDLE不负责调度空闲进程,空闲进程由内核提供单独的机制来处理
13. cpus_allowed
cpus_allowed是一个位域,在多处理器系统上使用,用于控制进程可以在哪里处理器上运行
14. RCU同步原语
15. sched_info
用于调度器统计进程的运行信息
16. tasks
通过list_head将当前进程的task_struct串联进内核的进程列表中,构建;linux进程链表
17. pushable_tasks
limit pushing to one attempt
18. 进程地址空间

  1. mm: 指向进程所拥有的内存描述符
  2. active_mm: active_mm指向进程运行时所使用的内存描述符
  1. exit_state
    进程退出状态码
  2. 判断标志
  3. 进程标识符(PID)在CONFIG_BASE_SMALL配置为0的情况下,PID的取值范围是0到32767,即系统中的进程数最大为32768个。在Linux系统中,一个线程组中的所有线程使用和该线程组的领头线程(该组中的第一个轻量级进程)相同的PID,并被存放在tgid成员中。只有线程组的领头线程的pid成员才会被设置为与tgid相同的值。注意,getpid()系统调用返回的是当前进程的tgid值而不是pid值
  4. stack_canary
    23. 表示进程亲属关系的成员
  1. real_parent: 指向其父进程,如果创建它的父进程不再存在&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值