zoukankan      html  css  js  c++  java
  • 2020-2021-1 20209307《Linux内核原理与分析》第七周作业

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

    一、知识点总结
    1、进程的描述
    1.1 操作系统三大功能:进程管理、内存管理、文件系统
    1.2进程描述符:为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。
    1.3Linux进程的状态
    在代码运行运行过程中,进程的可分为不同的状态,在linux下,进程分为三种主要状态状态:就绪态、运行态和阻塞状态。每种状态将会依据外部条件不断的切换。 刚开始创建的进程叫做就绪态,叫做task_running 当被调用之后,开始运行叫做运行态,也叫做task_running 这两个状态都用了task_runing同一个标志,可理解为可运行状态,是否运行要看时间片等信息。 如果进程终止后进入僵尸状态,最终被回收。 如果等待某件事情将进入阻塞状态。如果被唤醒重新进入就绪态。

    1.4进程链表:为了对给定类型的进程(比如所有在可运行状态下的进程)进行有效的搜索,内核维护了几个进程链表。

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

    二、实验六:分析Linux内核创建一个新进程的过程
    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,使用b在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork处各设置断点

    -(gdb)file linux-3.18.6/vmlinux
    -(gdb)target remote:1234
    -(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
    

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

    -(gdb)c
    -(gdb)n
    

    三、实验总结
    当子进程获得cpu控制权开始运行的时候,它的ret_from_fork可以做一系列工作,然后返回到用户态;此时的进程已经不是原来父进程的进程空间了。设置sp调度到子进程时的内核栈顶,ip转到子进程时的第一条指令地址之后,当子进程获得CPU的控制权开始运行的时候,ret _ form _ fork可以将后面的堆栈出栈,从iret返回到用户态,从而切换到子进程的用户空间,完成新进程的创建。在这个过程中fork()函数被调用一次,但是返回了两次。

  • 相关阅读:
    面向对象类成员之静态字段
    面向对象中,用super来联系父类的函数
    登录
    奇数偶数
    vue中播放音乐
    vue中的轮播图
    vue中的bind
    vue中的for
    django rest_framework中的APIView,ModelViewSet,认证,权限,频率,版本
    django rest_framework中的mixins,generics,ModelViewSet中的url简写
  • 原文地址:https://www.cnblogs.com/wzyxiaowang/p/14020866.html
Copyright © 2011-2022 走看看