gpt4 book ai didi

kernel - 向 user_struct 添加另一个字段

转载 作者:行者123 更新时间:2023-12-01 00:56:19 26 4
gpt4 key购买 nike

我想向文件 linux-source/kernel/user.c 中的 user_struct 添加新字段(以存储此用户的就绪进程数)

struct user_struct {
atomic_t ready_processes; /* I add this field */
/* not important fields */
}

在哪里正确初始化这个字段?

最佳答案

为了向 user_struct 添加新字段,你需要做3件事:

  • user_struct的定义在文件 sched.h(include/linux/sched.h) 中
    您应该在该字段中添加您的字段 struct .

    struct user_struct {
    atomic_t ready_processes; /* I added this line! */
    /*Other fields*/
    };
  • 在 user.c (kernel/user.c) 第 51 行,user_structroot_user 实例化全局。在此处为您的字段赋值。

    struct user_struct root_user = {
    .ready_processes = ATOMIC_INIT(1), /* I added this line! */
    .__count = ATOMIC_INIT(2),
    .processes = ATOMIC_INIT(1),
    .files = ATOMIC_INIT(0),
    .sigpending = ATOMIC_INIT(0),
    .locked_shm = 0,
    .user_ns = &init_user_ns,
    };
  • 您已完成为 root 用户初始化您的字段,但您还应该为其他用户初始化它。
    为此,在 user.c 中,转到函数 alloc_uid新用户被分配和初始化的地方。例如,您看到有一行 atomic_set(&new->__count, 1);初始化 __count .在此旁边添加您的初始化代码。

    atomic_set(&new->__count, 1);
    atomic_set(&new->ready_processes, 1); /* I added this line! */

  • 注意:它适用于 linux 2.6.32.62。我不确定其他版本,但我认为它不应该有很大不同。

    关于kernel - 向 user_struct 添加另一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27594865/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com