zoukankan      html  css  js  c++  java
  • 20135337朱荟潼 Linux第六周学习总结——进程的描述和进程的创建

    朱荟潼 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课http://mooc.study.163.com/course/USTC 1000029000

    第六周 进程的描述和进程的创建

    一、 进程的描述

    1、 进程控制块PCB——task_struct

    1.操作系统的三大管理功能包括

    进程管理
    内存管理
    文件系统
    

    2.PCB task_struct中包含

    进程状态
    进程打开的文件
    进程优先级信息
    

    3.通过唯一的进程标识PID来区别每个进程。

    4.进程状态

    5.理解task_struct数据结构



    二、 进程的创建

    1.分析fork函数。

    2.创建一个新进程

    通过调用fork()来创建一个新进程----->通过复制当前进程来实现的------>先复制一个PCB——task_struct------>再给新进程分配一个新的内核堆栈------>修改复制过来的进程数据(如pid、进程链表等)
    

    3.新进程执行起点:return_from_fork,只复制了内核堆栈一部分,int指令和save_all压到内核栈的内容,参数、系统调用号等都进行压栈。

    三、实践

    使用gdb跟踪创建新进程



    由于虚拟机是32位转化为64位发生溢出现象。


    总结

    创建一个新进程在内核中的执行过程

    1.使用系统调用clone、fork、vfork均可创建一个新进程,但都是通过调用do_fork来实现进程的创建;
    2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈;
    3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread
    4.p->thread.sp = (unsigned long) childregs; //调度到子进程时的内核栈顶
      p->thread.ip = (unsigned long) ret_from_fork; //调度到子进程时的第一条指令地址
  • 相关阅读:
    竞赛备考建议
    谷山丰的一生
    从首个IMO季军谈起 作者 : 付云皓
    孔庆东:单刀赴高考
    LaTeX 技巧 802:国内期刊 CCT 模板编译经验
    数学书籍推荐
    翻译
    printf中用法详解
    黎活明给程序员的忠告【转】
    log4j2配置文件log4j2.xml详解(转载)
  • 原文地址:https://www.cnblogs.com/zzzz5/p/5330144.html
Copyright © 2011-2022 走看看