进程学习笔记(一)

本文是关于内核进程学习的第一部分,主要介绍了进程的概念,包括进程与轻量级线程的区别,重点讲解了进程描述符task_struct,特别是其状态标识如TASK_RUNNING、TASK_INTERRUPTIBLE等,并提及了pid管理和线程组的相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天初步学习了一下内核进程设计思想 , 简单的做一下记录。
(1)概念
     进程:程序执行程度以及信息的数据结构的结合。
     轻量级线程:线程之间可以共享资源,两个线程修改共享资源,双方都能查看到修改。当然,每个线程,都可以由内核独立调度。
(2)进程描述符
     task_struct结构体,在sched.h中,内容多,咱们就不贴在这里了。

     但是,书上面写的thread_info,指的是stack,#define task_thread_info(task)    ((struct thread_info *)(task)->stack)
     
     我们先看state,这里有几种,我们贴出来:
     #define TASK_RUNNING        0
#define TASK_INTERRUPTIBLE    1
#define TASK_UNINTERRUPTIBLE    2
#define __TASK_STOPPED        4
#define __TASK_TRACED        8
/* in tsk->exit_state */
#define EXIT_DEAD        16
#define EXIT_ZOMBIE        32
#define EXIT_TRACE        (EXIT_ZOMBIE | EXIT_DEAD)
/* in tsk->state again */
#define TASK_DEAD        64
#define TASK_WAKEKILL        128
#define TASK_WAKING        256
#define TASK_PARKED        512
#define TASK_STATE_MAX        1024

#define TASK_STATE_TO_CHAR_STR "RSDTtXZxKWP"

extern char ___assert_task_state[1 - 2*!!(
        sizeof(TASK_STATE_TO_CHAR_STR)-1 != ilog2(TASK_STATE_MAX)+1)];

/* Convenience macros for the sake of set_task_state */
#define TASK_KILLABLE        (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
#define TASK_STOPPED        (TASK_WAKEKILL | __TASK_STOPPED)
#define TASK_TRACED        (TASK_WAKEKILL | __TASK_TRACED)

/* Convenience macros for the sake of wake_up */
#define TASK_NORMAL        (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
#define TASK_ALL        (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)

/* get_task_state() */
#define TASK_REPORT        (TASK_RUNNING | TASK_INTERRUPTIBLE | \
                 TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
                 __TASK_TRACED | EXIT_ZOMBIE | EXIT_DEAD)

当内核需要对进程进行引用的时候,通过对进程描述符指针来操作。
对于pid,上限设置的位置在/proc/sys/kernel/pid_max
pidmap_array是内核管理的一个位图,用来管理已分配的pid和闲置 的pid。
同一线程组的tgid是相同的,即第一个线程的pid号。

一般,将thread_info和stack放在两个相邻的叶匡之内。
current_thread_info()获取thread_info
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值