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


    进程的描述和进程的创建

    知识点总结

    进程的描述

    1.操作系统三大功能:进程管理、内存管理、文件系统

    2.在操作系统下,对一个进程管理,使用结构体来表示一个进程叫做PCB(process control block进程控制块)。在linux下定义结构体task_struct来表示一个进程,或被成为任务结构体。

    3.Linux进程的状态
    在代码运行运行过程中,进程的可分为不同的状态,在linux下,进程分为三种主要状态状态:就绪态、运行态和阻塞状态。每种状态将会依据外部条件不断的切换。 刚开始创建的进程叫做就绪态,叫做task_running 当被调用之后,开始运行叫做运行态,也叫做task_running 这两个状态都用了task_runing同一个标志,可理解为可运行状态,是否运行要看时间片等信息。 如果进程终止后进入僵尸状态,最终被回收。 如果等待某件事情将进入阻塞状态。如果被唤醒重新进入就绪态。

    进程的创建

    进程的父子、兄弟关系示意图:

    创建进程的系统调用有3个,它们首先在进入核心态运行后就各司其职,各自调用自己的内核函数sys_fork、sys_clone、sys_vfork进行处理。这三个函数最终都是调用do_fork函数进行创建子进程的工作,只不过使用的参数有所不同。

    创建过程如下:
    1.Linux通过复制父进程来创建一个新进程:复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈。
    2.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread。
    3.从ret_from_fork开始执行新进程。

    通过实验跟踪分析进程创建的过程

    1.删除之前的menu,再通过git克隆一份新的,使用mv把test.c覆盖掉,然后执行 make roofts

        -rm -rf menu
        -git clone http://github.com/mengning/menu.git
    

    2.编译运行出来使用help可以看到列表中增加了fork。

        -make rootfs
        -MenuOS>>help
    

    3.使用水平分割,再开启一个shell窗口,启动gdb,把内核加载进来,连接到target remote 1234

        -(gdb)file linux-3.18.6/vmlinux
        -(gdb)target remote:1234
    

    4.使用b在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork处各设置断点。

        -(gdb)b sys_clone
        -(gdb)b do_fork
        -(gdb)b dup_task_struct
        -(gdb)b copy_process
        -(gdb)b copy_thread
        -(gdb)b ret_from_fork
    

    5.使用c继续执行,停到了 do_fork 位置,然后使用命令n

        -(gdb)c
        -(gdb)n
    
    

    6.到 copy_process() 函数。继续执行

    7.使用c继续执行,到断点copy_thread

    总结

    本实验中,我了解到Linux是通过复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈。修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread。设置sp调度到子进程时的内核栈顶,ip转到子进程时的第一条指令地址之后,当子进程获得CPU的控制权开始运行的时候,ret _ form _ fork可以将后面的堆栈出栈,从iret返回到用户态,从而切换到子进程的用户空间,完成新进程的创建。在这个过程中fork()函数被调用一次,但是返回了两次。

  • 相关阅读:
    学习进度条
    阅读计划
    程序:随机生成30道四则运算题
    自我介绍
    构建之法阅读笔记05
    学习进度条 第十一周
    构建之法阅读笔记04
    学习进度条 第十周
    构建之法阅读笔记03
    学习进度条 第九周
  • 原文地址:https://www.cnblogs.com/j1551163790/p/11783087.html
Copyright © 2020-2023  润新知