20233810《Linux内核原理与分析》第七周作业

1. task_struct 数据结构

task_struct 是 Linux 内核中表示进程的重要数据结构之一。它在内核中定义了进程的各种属性和状态信息,以及与进程管理相关的其他信息。task_struct 结构体定义在 <linux/sched.h> 头文件中,其结构如下(在不同版本的内核中可能会有些许变化):

struct task_struct {
    volatile long state;  // 进程状态
    struct thread_info *stack;  // 进程的内核栈
    atomic_t usage;
    int flags;  // 进程标志
    unsigned int ptrace;
    struct task_struct *real_parent;  // 真正的父进程
    struct task_struct *parent;  // 父进程
    ...
    // 更多字段,用于存储进程的各种信息
};
  1. state: 用于表示进程的状态,如运行、等待、睡眠等。可能的取值包括 TASK_RUNNING(运行中)、TASK_INTERRUPTIBLE(可中断等待)、TASK_UNINTERRUPTIBLE(不可中断等待)等。

  2. stack: 指向进程的内核栈的指针,用于执行内核代码。

  3. usage: 用于引用计数,表示有多少进程引用了该 task_struct

  4. flags: 包含有关进程属性的位标志,例如 PF_EXITING 表示进程正在退出。

  5. ptrace: 用于跟踪进程的 ptrace 标志,表示是否被其他进程跟踪。

  6. real_parentparent: 分别指向真正的父进程和当前父进程的 task_struct 结构。

2.实验内容

执行以下代码

ls
cd ~/LinuxKernel
rm menu -rf
git config --global http.sslVerify false
git clone https://github.com/mengning/menu.git
cd menu 
mv test_fork.c test.c
make rootfs  //主要功能在于编译增加了fork文件

启用gdb

file linux-3.18.6/vmlinux
target remote:1234
b sys_clone
b do_fork
b dup_task_struct
b copy_process
b copy_thread
b ret_from_fork

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值