博客
关于我
Processes
阅读量:796 次
发布时间:2023-03-04

本文共 1226 字,大约阅读时间需要 4 分钟。

进程管理

1 进程描述符

关于进程描述符的实现,系统采用了约1.7KB大小的数据结构,在内核中以列表形式存储,命名为task list。该数据结构定义于include/linux/sched.h文件中,具体如下:

struct task_struct {    volatile long state;  /* -1: 不可执行,0: 可执行,>0: 停止状态 */    void *stack;        /* 任务的堆栈指针 */    atomic_t usage;      /* 任务使用次数计数 */    unsigned int flags;  /* 任务相关标志位 */    unsigned int ptrace; /* ptrace跟踪标志 */    int lock_depth;     /* BKL锁的深度 */    #ifdef CONFIG_SMP        #ifdef __ARCH_WANT_UNLOCKED_CTXSW            int oncpu;  /* 当前执行的CPU */        #endif    #endif    int prio, static_prio, normal_prio; /* 任务的优先级标志 */    unsigned int rt_priority; /* 实时优先级 */    ...};

2 分配进程描述符

在2.6版本的slab内核中,进程描述符task_struct采用了slab内核管理的方式分配。这种分配机制支持动态大小和灵活管理,能够更高效地分配和释放任务结构体。

此外,在特定的架构下,如ARM平台,任务描述符的分配和管理由arch/arm/include/asm/thread_info.h文件定义。该文件中定义了thread_info结构体,主要用于管理线程任务相关信息,具体内容如下:

struct thread_info {    struct task_struct *task; /* 任务的主结构体指针 */    struct exec_domain *exec_domain; /* 执行域信息 */    unsigned long flags; /* 线程信息标志 */    mm_segment_t addr_limit; /* 用户地址空间限制 */    __u32 cpu; /* 当前执行的CPU */    int preempt_count; /* 0: 可中断,<0: 错误状态 */    struct restart_block restart_block; /* 复制块信息 */};

在实际实现中,线程的堆栈增长机制支持灵活配置。当堆栈空间不足时,只需在栈底部创建一个thread_info结构体,此时sp指针将直接指向task_struct结构体,实现了高效的内存管理。

转载地址:http://eqxfk.baihongyu.com/

你可能感兴趣的文章
Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用
查看>>
Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x
查看>>
Prometheus 介绍
查看>>
Prometheus 安全配置详解
查看>>
prometheus 安装node_exporter, node_exporter 安装最新版 普罗米修思安装监控服务器client
查看>>
Prometheus 安装部署实战
查看>>
prometheus 持久化存储方案
查看>>
Prometheus 监控系统企业级实战
查看>>
Prometheus 监控系统简介
查看>>
Prometheus 配置详解
查看>>
Prometheus 采集器使用详解
查看>>
Prometheus 黑盒监控实战
查看>>
prometheus+alertmanager+grafana监控部署教程
查看>>
Prometheus+Grafana构建智能化Kubernetes监控系统实战
查看>>
Prometheus+SpringBoot应用监控全过程详解
查看>>
Prometheus+SpringBoot应用监控全过程详解
查看>>
prometheus安装
查看>>
Prometheus实战教程:监控Kafka消息
查看>>
Prometheus实战教程:监控mysql数据库
查看>>
Prometheus实战教程:监控Nginx状态
查看>>