• 2020-2021-1 20209320 《Linux内核原理与分析》第七周作业


    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第七周作业>
    这个作业的目标 <分析Linux内核创建一个新进程的过程>
    作业正文 https://www.cnblogs.com/dyyblog/p/14001867.html

    一.进程描述

    基本概念

    程序:
    为了完成特定任务的一系列指令的有序集合。存储在磁盘上,程序 : 代码 + 数据。
    进程:
    程序的一次动态执行过程,存储在内存中,每个程序都有自己的状态,每个进程都有自己的虚拟地址空间,进程 : 代码 + 数据 + 堆栈 + PCB。
    PCB (进程控制块)
    pid 进程标识符,pwd 进程标识符,ppid 父进程进程号

    进程状态转换

    fork注意点:

    • 1 、 fork 父子进程交替进行

    • 2 、父进程死亡,子进程将变成孤儿进程,由 1号 进程领养

    • 3 、 子进程死亡,成为僵尸进程

    二.跟踪分析进程创建过程

    删除menu,在github上克隆一份新的,

    git clone https://github.com/mengning/menu.git  
    

    把test.c覆盖,在menu下执行make rootfs

    启动内核,连接gdb

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    

    在sys_clone,do_fork,dup_task_struct,copy_process,copy_thread和ret_from_fork处设置断点

    总结

    设定完断点后执行fork,发现只输出了一个命令描述,后面没有执行,而是停在了sys_clone这里。如果继续执行,会停在do_fork的位置,从do_fork继续执行,停在copy_process,继续执行,停在dup_task_struct函数。进入dup_task_struct函数内部,将当前进程内核堆栈压的那一部分寄存器复制到子进程中,以及赋值子进程的起点,最后运行到ret_from_fork。

  • 相关阅读:
    跨域 反向解析
    人工智能-邮箱验证
    人工智能-Selenium
    人工智能-画图形(扩展)
    人工智能-画图形(2)
    人工智能—爬虫
    人工智能—图形
    在django中进行MySQL入库
    djang 过滤器和装饰器
    NGINX、HAProxy和Traefik负载均衡能力对比(转载)
  • 原文地址:https://www.cnblogs.com/dyyblog/p/14001867.html
Copyright © 2020-2023  润新知