【Linux】(1)—进程概念-③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 */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值