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

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

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

    一、实验:分析Linux内核创建一个新进程的过程

    1、初始化MenuOs,输入fork可以看到menuos触发了一个fork系统调用

    2、

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    file linux-3.18.6/vmlinux
    target remote:1234
    

    启动gdb调试
    在几个函数接口打断点

    3、然后进入调试

    4、调试结果
    例如执行到copy_process()

    二、学习知识

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

    内核的第一个进程0号进程iinit_task的进程描述符结构体变量的初始化是通过硬编码方式确定下来的,所有其他的进程都是通过do_fork的方式复制父进程来初始化的。

    • 进程的创建
    • 用户态创建进程的方法-fork系统调用
      fork,vfork,clone 都是通过do_fork()函数创建进程
      fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。
      fork()函数最大的特点就是被调用一次,返回两次

    三、总结

    1、 fork,vfork,clone都是linux的系统调用,这三个函数分别调用了sys_fork、sys_vfork、sys_clone,最终都调用了do_fork函数,差别在于参数的传递和一些基本的准备工作不同,主要用来linux创建新的子进程或线程(vfork创造出来的是线程)。

    2、问题:clone和fork的区别:
    (1) clone和fork的调用方式很不相同,clone调用需要传入一个函数,该函数在子进程中执行。
    (2)clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的。 (void *child_stack,)也就是第二个参数,需要分配栈指针的空间大小,所以它不再是继承或者复制,而是全新的创造。

  • 相关阅读:
    veil-evasion免杀处理
    对程序"加料"
    堆栈溢出
    ICMP隧道 ptunnle
    socat流量操控
    DNS隧道 iodns
    dns隧道 dns2tcpd
    ssh X协议转发
    ssh动态端口转发
    ssh远程端口转发
  • 原文地址:https://www.cnblogs.com/camusxd/p/13997186.html
Copyright © 2011-2022 走看看