当前位置: 首页 > article >正文

【Linux】(1)—进程概念-③Linux进程概念与PCB

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Linux进程概念与PCB

前言


提示:以下是本篇文章正文内容,下面案例可供参考

什么是进程?

进程可以理解为"正在执行的程序",它是程序的一次动态执行过程。与静态的程序不同,进程具有生命周期,会经历创建、运行、等待和终止等不同阶段。

从内核角度看,进程是分配系统资源(CPU时间、内存等)的实体。操作系统通过进程来管理和调度程序的执行,使多个程序能够"同时"运行(并发执行)。

进程控制块(PCB)

操作系统要管理进程,首先需要描述进程。Linux内核通过一个称为进程控制块(Process Control Block, PCB)的数据结构来记录进程的所有信息。在Linux中,PCB的具体实现是task_struct结构体。

task_struct结构体

task_struct是Linux内核中非常复杂的一个数据结构,定义在include/linux/sched.h头文件中。它包含了管理一个进程所需的全部信息,会被装载到内存(RAM)中。

task_struct的主要内容包括:

  1. 标识符(PID):唯一标识进程的ID,用于区分不同进程

  2. 状态:记录进程当前状态(运行、睡眠、停止等)

  3. 优先级:进程调度的优先级

  4. 程序计数器:下一条要执行的指令地址

  5. 内存指针:指向程序代码和进程相关数据的指针

  6. 上下文数据:进程执行时CPU寄存器的数据

  7. I/O状态信息:进程使用的I/O设备和文件列表

  8. 记账信息:CPU使用时间、时钟数等统计信息

进程的组织方式

Linux内核中所有运行的进程都以task_struct链表的形式存在。内核维护着一个进程链表,每个task_struct都包含指向链表前驱和后继的指针:

c

复制

下载

struct task_struct {//...struct list_head tasks;  // 进程链表//...
};

这种组织方式使得内核能够高效地遍历和管理所有进程。此外,Linux还使用红黑树等数据结构来加速进程查找。

进程状态

在Linux内核中,进程可能处于以下几种主要状态:

  • R (Running):进程正在运行或在运行队列中等待

  • S (Sleeping):可中断的睡眠状态,等待事件完成

  • D (Disk sleep):不可中断的睡眠状态,通常等待I/O操作

  • T (Stopped):进程被信号暂停执行

  • Z (Zombie):僵尸进程,已终止但未被父进程回收

  • X (Dead):进程完全终止,等待被清除

这些状态定义在内核源代码的task_state_array数组中:

c

复制

下载

static const char *const task_state_array[] = {"R (running)",        /* 0 */"S (sleeping)",       /* 1 */"D (disk sleep)",     /* 2 */"T (stopped)",        /* 4 */"t (tracing stop)",   /* 8 */"X (dead)",           /* 16 */"Z (zombie)",         /* 32 */
};
http://www.lryc.cn/news/2396833.html

相关文章:

  • 神经网络中的梯度消失与梯度爆炸
  • 深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
  • 系统架构设计师案例分析----经典架构风格特点
  • 基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
  • HTML实战:爱心图的实现
  • 定时任务:springboot集成xxl-job-core(二)
  • DeviceNET转EtherCAT网关:医院药房自动化的智能升级神经中枢
  • 一:UML类图
  • 数据库三范式的理解
  • Java 中 MySQL 索引深度解析:面试核心知识点与实战
  • DeepSeek 部署中的常见问题及解决方案
  • Nvidia Intern 笔试回忆
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • 设计模式之结构型:装饰器模式
  • mysql分布式教程
  • MySQL安装及启用详细教程(Windows版)
  • Vue3.5 企业级管理系统实战(二十一):菜单权限
  • kafka幂等生产者和事务生产者区别
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库
  • 批量导出CAD属性块信息生成到excel——CAD C#二次开发(插件实现)
  • 可视化大屏如何制作
  • Goreplay最新版本的安装和简单使用
  • Android Studio 解决报错 not support JCEF 记录
  • SMT高速贴片机核心技术深度剖析
  • sigmastar实现SD卡升级
  • kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)
  • yarn、pnpm、npm
  • JVM——Truffle:语言实现框架
  • C++ STL vector容器详解:从原理到实践
  • 视频压制(Video Encoding/Compression)