首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

进程及进程控制块

进程控制块 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关信息,Linux内核进程控制块是task_struct结构体。...task_struct是Linux内核一种数据结构,它会被装载到RAM里并包含进程信息。...记账信息:可能包括处理器时间总和,使用时钟总数,时间限制,记账号等。 保存进程信息数据结构叫做task_struct,并且可以在include/linux/sched.h里找到它。...linux 中ps命令是Process Status缩写。ps命令可以列出系统中当前运行进程,所列出进程是执行ps命令这个时刻正在运行进程。...附上task_struct所定义在头文件sched.h链接吧: http://lxr.free-electrons.com/source/include/linux/sched.h 版权声明:

40620

全新系列-Linux进程管理初探

该结构定义在include/linux/sched.h文件中,而且这个结构体有非常多属性,在《Linux内核设计与实现》一书中提到,在当时task_struct结构体就有1.7KB大小,现在内核只增不减...我们在这里挑选一些有代表性属性进行说明: //include/linux/sched.h L737 struct task_struct { unsigned int __state;...在include/linux/sched.h中,也定义了非常多进程状态: //include/linux/sched.h L84 /* Used in tsk->state: */ #define TASK_RUNNING...此外,还通过这些状态组合,定义了更多新状态: //include/linux/sched.h L 109 /* * DO NOT ADD ANY NEW USERS !...所谓不忘初心方得始终,我们在task_struct中看到了有关perf结构体成员: // include/linux/sched.h L1239 #ifdef CONFIG_PERF_EVENTS

21010

Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

| 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 ) 一、进程特殊形式 ( 内核线程 | 用户线程 ) 博客章节 , 有介绍内核线程..." ; 在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构体 进行描述 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct...结构体 ; task_struct " 进程描述符 " 结构体在 linux-5.6.18\include\linux\sched.h 头文件中 第 629 ~ 1300 行定义 ; mm...sched.h 四、内核线程主要用途 ---- 内核线程主要用途 : 内存同步 : 周期性执行如下同步操作 , 同步 " 修改内存页 " 与 " 页来源块设备 " , 如 : mmap 文件映射 ;...Action ; 系统日志 : 管理控制 文件系统 事务日志 生成 ; 五、内核线程创建函数 kernel_thread 源码 ---- 在 linux-5.6.18\kernel\fork.c 源码中

3.7K20

Linux 内核】实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | active、rt_nr_running、curr、next 字段 )

、实时运行队列 rt_rq 结构体字段分析 1、active 字段 2、rt_nr_running 字段 3、curr 字段 4、next 字段 一、实时运行队列 rt_rq 源码 ---- 在 【Linux...实时调度类 ② ( 实时调度实体 sched_rt_entity 源码分析 | run_list、timeout、watchdog_stamp、time_slice 字段 ) 博客中 , 简单介绍了 在 linux...-5.6.18\include\linux\sched.h 头文件中定义 实时调度实体 sched_rt_entity 源码 , struct sched_rt_entity { struct list_head...rt_rq 和 my_q 字段 , 分别表示一个 " 实时运行队列 " , 是 rt_rq 结构体类型 ; rt_rq 结构体 , 定义在 Linux 内核源码 linux-5.6.18\kernel...\sched\sched.h 头文件中 ; /* Real-Time classes' related field in a runqueue: */ struct rt_rq { struct rt_prio_array

58630

Linux 内核】进程管理 task_struct 结构体 ⑤ ( files 字段 | nsproxy 字段 | 信号处理相关字段 | 信号量和共享内存相关字段 )

文章目录 一、task_struct 结构体字段分析 1、files 字段 2、nsproxy 字段 3、信号处理相关字段 4、信号量和共享内存相关字段 在 Linux 内核 中 , " 进程控制块..." 是通过 task_struct 结构体 进行描述 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体 ; task_struct " 进程描述符..." 结构体在 linux-5.6.18\include\linux\sched.h 头文件中 第 629 ~ 1300 行定义 ; 一、task_struct 结构体字段分析 ---- 1、files...字段 files 字段 , 是一个指针 , 指向 " 打开文件表 " ; /* Open file information: */ struct files_struct *files; 2、

1.3K30

Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

, " 完全公平调度算法 " 是 基于时间片轮询 调度算法 , 每个进程 都会获得一段 相同大小 CPU 时间片 来运行 ; CFS 调度器 没有 时间片概念 , 该调度器会 公平地 分配 CPU...使用时间 ; 举例说明 : 如果有 4 个相同 优先级 进程运行在 同一个 CPU 上 , 每个进程都会被 公平 分配到 25\% 运行时间 ; 二、CFS 调度器虚拟时钟概念 ( Virtual...| rt_priority 实时优先级 ) 博客 , 在 linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义了...-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义 sched_class 字段 , 表示该进程所属调度类 ; const...struct sched_class *sched_class; 源码地址 : linux-5.6.18\include\linux\sched.h#680 上述可设置调度类参考 【Linux 内核

1.7K40

Linux线程调度

Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程调度是按照进程调度方式来进行调度,也就是说线程是调度单元...Linux这样实现线程好处之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内线程调度器。...下面介绍几种常见调度策略: SCHED_OTHER:该策略是是默认Linux分时调度(time-sharing scheduling)策略,它是Linux线程默认调度策略。...在Linux中,与调度相关常见接口如下: #include int sched_get_priority_max(int policy); 该接口获取指定调度策略可以设置最大优先级...如果当前线程是最高优先级队列中唯一线程,则在调用sched_yield后,该线程继续保持运行: #include int sched_setaffinity(pid_t pid,

4K20

Linux 内核】进程管理 - 进程优先级 ① ( 限期进程 | 实时进程 | 普通进程 | 进程优先级相关字段 )

文章目录 一、进程分类 ( 限期进程 | 实时进程 | 普通进程 ) 二、进程优先级相关字段 一、进程分类 ( 限期进程 | 实时进程 | 普通进程 ) ---- Linux 进程 分为 3 种类型...进程优先级 " 角度对比 , 优先级从高到低分别是 : 限期进程 > 实时进程 > 普通进程 ; 限期进程 : 优先级为 -1 ; 实时进程 : 优先级为 1 ~ 99 ; 实时进程 中 优先级数值越大..., 优先级越高 ; 普通进程 : 优先级为 100 ~ 139 ; 普通进程 中 优先级数值越小 , 优先级越高 ; 在 " 普通进程 " 中 , 可以通过 修改 nice 字段值 , 进而...修改 普通进程优先级 , 计算公式如下 : 普通进程优先级 = \rm nice + 120 二、进程优先级相关字段 ---- 在 linux-5.6.18\include\linux\sched.h

6.1K20

Linux 内核】调度器 ⑨ ( Linux 内核调度策略 | SCHED_NORMAL 策略 | SCHED_FIFO 策略 | SCHED_NORMAL 策略 | SCHED_BATCH策略 )

文章目录 一、Linux 内核调度策略源码 二、SCHED_NORMAL 策略 三、SCHED_FIFO 策略 四、SCHED_NORMAL 策略 五、SCHED_BATCH 策略 六、SCHED_IDLE...策略 七、SCHED_DEADLINE 策略 一、Linux 内核调度策略源码 ---- " Linux 应用进程 " 可以根据 " Linux 内核 " 提供 " 调度策略 " 选择 " 调度器..." ; Linux 内核 " 调度策略 " 源码在 linux-5.6.18\include\uapi\linux\sched.h 头文件中 , /* * Scheduling policies *..., 只能 等待其它进程主动释放 CPU 资源 ; 四、SCHED_NORMAL 策略 ---- SCHED_RR 是 " 实时进程调度策略 " , 使用是 时间片轮转 机制 ; 进程 使用完 CPU...时间片 后 , 会加入到 与 进程优先级 相应 执行队列 末尾 ; 同时 , 释放 CPU 资源 , CPU 时间片会被轮转给 相同进程优先级 其它进程 ; 五、SCHED_BATCH 策略

1.4K20

手把手教你获取Linux所有进程信息

即便可以使用 flip_open 函数和加 vfs_read 内核函数去读写 /proc 节点文件,但 Linux 本身不建议这样做,这会破坏节点(驱动)之间独立性,如果产生依赖关系,很可能产生各种各样问题...所以我们一般直接从 Linux 内核本身获取信息,去分析 Linux 内核源码,从他本身数据结构(结构体、变量、链表)中获取信息。 今天教大家如何在驱动中直接获取 linux 系统中所有进程信息。...linux 内核源码 linux/include/linux/sched.h 中。...task.c # include # include # include # include...note:编译之前记得准备好你 Linux 内核源码,因为编译需要引用头文件,所以我们在 Makefile 中写明 Linux 内核源码目录(源码必须是编译过源码,编译 Linux 大概需要半个多小时

2.4K20

Linux 内核】进程管理 task_struct 结构体 ④ ( comm 字段 | 进程优先级字段 | cpus_ptr 字段 | mm、active_mm 字段 | fs 字段 )

文章目录 一、task_struct 结构体字段分析 1、comm 字段 2、进程优先级字段 3、cpus_ptr 字段 4、mm、active_mm 字段 5、 fs 字段 在 Linux 内核 中..., " 进程控制块 " 是通过 task_struct 结构体 进行描述 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体 ; task_struct..." 进程描述符 " 结构体在 linux-5.6.18\include\linux\sched.h 头文件中 第 629 ~ 1300 行定义 ; 一、task_struct 结构体字段分析...---- 1、comm 字段 comm 字段 , 用于存储 进程名称 ; /* * 进程名称 * 可执行文件名,不包括路径。...[TASK_COMM_LEN]; 2、进程优先级字段 prio , static_prio , normal_prio , rt_priority 字段 , 是 进程调度策略 中 , 与 优先级 相关字段

1.1K40

Linux 内核】进程管理 task_struct 结构体 ② ( state 字段 | stack 字段 | pid 字段 | tgid 字段 | pid_links 字段 )

文章目录 一、task_struct 结构体字段分析 1、state 字段 2、stack 字段 3、pid字段 4、tgid 字段 5、pid_links 字段 在 Linux 内核 中 , " 进程控制块..." 是通过 task_struct 结构体 进行描述 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体 ; task_struct 结构体在...linux-5.6.18\include\linux\sched.h 头文件中 第 629 ~ 1300 行定义 ; 一、task_struct 结构体字段分析 ---- 1、state 字段...: */ volatile long state; 2、stack 字段 stack 是一个指针 , 指向 " 内核栈 " ; void *stack; 3、pid字段 pid 表示该进程...; #endif 4、tgid 字段 tgid 表示 " 全局线程组 " 标志 ; pid_t tgid; 5、pid_links 字段 pid_links 字段 是一个 哈希表 , 其中存放

3.6K30

Linux 内核】进程管理 task_struct 结构体 ③ ( real_parent 字段 | parent 字段 | group_leader 字段 | real_cred、cred字段 )

文章目录 一、task_struct 结构体字段分析 1、real_parent 字段 2、parent 字段 3、group_leader 字段 4、real_cred 字段 5、cred 字段 在 Linux...内核 中 , " 进程控制块 " 是通过 task_struct 结构体 进行描述 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体 ; task_struct..." 进程描述符 " 结构体在 linux-5.6.18\include\linux\sched.h 头文件中 第 629 ~ 1300 行定义 ; 一、task_struct 结构体字段分析...real_parent 相同 ; 如果 进程 被 另外一个进程 使用 系统调用 ptrace 方法 跟踪调试 了 , 其 父进程 就是 跟踪进程 ; 其它情况下 , parent 字段与 real_parent 字段值都是相同..., 一般情况下 , real_cred 与 cred 指向位置是相同 ; /* Effective (overridable) subjective task credentials (COW)

83130

Linux Clone函数

#define _GNU_SOURCE #include int clone(int (*fn)(void *), void *stack, int flags, void *arg...运行linux所有处理器栈都是向下生长(HP PA 处理器除外),因此stack通常指向为子进程栈设置内存空间最顶端地址。...只有特权进程(CAP_SYS_ADMIN)才可以设置CLONE_NEWCGROUP 测试代码如下(由于本环境上sched.h头文件中没有CLONE_NEWCGROUP定义,因此直接使用了其值) #define...CLONE_NEWUSER 此标志最先在Linux 2.6.23中clone()中启用,当前clone()语义已在Linux 3.5中合入,而完整可用用户空间功能在Linux 3.8中合入。...该标志在Linux 2.6.25之后废弃,并在Linux 2.6.38中移除,从此之后,Linux会忽略该标志,从Linux 4.6开始,该标志对应比特位被CLONE_NEWCGROUP复用。

6.6K31

Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )

文章目录 一、next 字段 ( 指向链表中下一个调度类 ) 二、enqueue_task 函数 ( 将进程加入执行队列 ) 三、dequeue_task 函数 ( 从执行队列中删除进程 ) Linux...内核源码 linux-5.6.18\kernel\sched\sched.h 中 , 定义 struct sched_class 调度类结构体 , 就是 " 调度器 " 对应类 ; 一、next...字段 ( 指向链表中下一个调度类 ) ---- 整个 Linux 系统中有 多个 " 调度类 " , 按照 优先级进行排序 , 这些 " 调度类 " 放在一个 " 链表 " 中 , 优先级高 " 调度类..." 先执行 , 优先级低后执行 ; sched_class 调度类结构体 中 next 字段 , 就是指向 " 调度类 " 链表 中 下一个 " 调度类 " ; ( 优先级低于本调度类 ) const...struct sched_class *next; 源码路径 : linux-5.6.18\kernel\sched\sched.h#1709 ; 二、enqueue_task 函数 ( 将进程加入执行队列

59430
领券