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

    进程的描述和进程的创建

    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/11511045.html#第七周作业
    这个作业的目标 <对Linux系统如何创建一个新进程进行追踪>
    作业正文 https://www.cnblogs.com/augusts/p/14021367.html

    实验楼实验六

    1.进程的描述

    操作系统内核实现操作系统的三大管理功能:进程管理,内核管理和文件系统,其中最核心的功能是进程管理。
    在操作系统原理中,我们通过进程控制块PCB描述进程,通常采用一个数据结构struct task_struct来描述进程,其中比较常见的属性如state是进程状态,常见状态有就绪态,运行态和阻塞态,其运行过程如图所示:

    操作系统内核实现操作系统的三大管理功能,即进程管理、内存管理和文件系统,对应操作系统原理课程中最重要的3个抽象概念是进程、虚报内存和文件。其中,我作系统内核中最核心的功能是进程管理。谈到进程管理就要涉及一个问题:进程是怎样描述的? 进程的描述有提纲挈领的作用,它可以把内存管理、文件系统、信号、 进程间通信等概念 和内容串起来。Linux 内核中的进程是非常复杂的,在操作系统原理中,我们通过进程控制块PCB描述进程。为了管理进程,内核要描述进程的结构,我们也称其为进程描述符,进程描述符提供了进程相关的所有信息。

    2.进程的创建

    先对实验楼环境进行修改,删除menu,在github上克隆一份新的,并且把test.c覆盖,在menu下执行make rootfs,编译运行结果如下所示:

      cd ~/LinuxKernel
      rm menu -rf
      git clone https://github.com/mengning/menu.git
      cd menu 
      mv test_fork.c test.c
      make rootfs  
    

    退出menu目录,在LinuxKernel目录下执行

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

    然后打开shell2,进行gdb追踪

      file linux-3.18.6/vmlinux
      target remote:1234
    


    在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork等处设置断点:

      b sys_clone
      b do_fork
      b dup_task_struct
      b copy_process
      b copy_thread
      b ret_from_fork
    


    设置完断点后执行,停在了do_fork处,继续执行,找到其余断点

    总结

    本文主要学习了Linux内核系统创建新子进程,并通过gdb和代码分析了调用过程。一般情况下,调用系统调用需在当前内核linux-3.18.6/arch/x86/syscalls/syscall_32.tbl中查找调用号,库函数sys_fork是用户态创建子进程的系统调用,此外可能会使用到sys_vfork sys_clone系统调用,但是这三个系统调用都会调用do_fork函数,本文中使用了sys_clone。do_fork会调用copy_process来复制父进程的资源给子进程。在copy_process中有各种函数来进行复制初始化工作。完成各项工作之后会执行ret_from_fork,这是子进程的起点,运行,子进程可以执行并显示在终端中。总结来讲,进程的创建过程大致是赋值进程描述符,复制其他进程资源,分配子进程的内核堆栈并对内核堆栈关键信息进行初始化。

  • 相关阅读:
    IP地址 子网掩码 默认网关和DNS服务器的关系
    ios下微信浏览器如何唤醒app?app已上架应用宝
    iOS: 零误差或极小误差的定时执行或延迟执行?
    iOS单例创建的一点疑惑
    Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式
    相机拍照友盟检测crash是为什么?
    使用google API之前需要對input 做什麼 安全性的處理?
    关于node的聊天室错误
    Node+Deployd+MongoDB安装问题
    array.fliter无法正确过滤出我想要的数组
  • 原文地址:https://www.cnblogs.com/augusts/p/14021367.html
Copyright © 2011-2022 走看看