首页 > 系统服务 > 详细

2018-2019-1 20189210 《LInux内核原理与分析》第七周作业

时间:2018-11-25 23:20:23      阅读:199      评论:0      收藏:0      [点我收藏+]

一 、Linux内核创建一个新进程的过程
1、操作系统内核三大功能是进程管理,内存管理,文件系统,最核心的是进程管理。
2、对应的三个抽象的概念是进程,虚拟内存和文件。其中,操作系统最核心的功能是进程管理。
3、fork 被调用一次,能够返回两次。在父进程中返回新创建子进程的 pid;在子进程中返回 0
4、TASK_RUNNING有两个状态,一个是就绪态但是没有运行,另一个是运行态,这两个状态的转换依赖于内核中的调度器。
TASK_RUNNING处运行态取决于它是否获得了CPU的控制权;如果被内核调度出去,就在等待队列中。
对于正在运行的进程,调用用户态库函数exit()会陷入内核执行do_exit()进入TASK_ZOMBIE状态。
5、进程控制块PCB:task_struct
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped 进程状态,-1表示不可执行,0表示可执行,大于1表示停止/
void
stack; //内核堆栈
atomic_t usage;
unsigned int flags; /* per process flags, defined below 进程标识符 * /
unsigned int ptrace;
6、Linux中创建进程一共有三个函数:fork,创建子进程 vfork,与fork类似,但是父子进程共享地址空间,而且子进程先于父进程运行。Linux中所有的进程创建都是基于复制式,Linux通过复制父进程来创建一个新进程,通过调用do_ fork来实现。然后对子进程做一些特殊的处理。

do_fork

       long do_fork(unsigned long clone_flags, unsigned long stack_start,
            unsigned long stack_size, int __user *parent_tidptr,
            int __user *child_tidptr)
clone_flags:子进程创建相关标志,通过此标志可以对父进程的资源进行有选择的复制。
stack_start:子进程用户态堆栈的地址。
regs:指向 pt_regs 结构体(当系统发生系统调用时,pt_regs 结构体保存寄存器中的值并按顺序压入内核栈)的指针。
stack_size:用户态栈的大小,通常是不必要的,总被设置为0。
parent_tidptr 和 child_tidptr:父进程、子进程用户态下 pid 地址。

其主要作用为:调用copy_process,将当期进程复制一份出来为子进程,并且为子进程设置相应地上下文信息。初始化vfork的完成处理信息(如果是vfork调用)调用wake_up_new_task,将子进程放入调度器的队列中,此时的子进程就可以被调度进程选中,得以运行。如果是vfork调用,需要阻塞父进程,知道子进程执行exec。
copy_process 复制父进程的所有信息给子进程,调用 dup_task_struct 复制当前的 task_struct,进行信息检查、初始化、把进程状态设置为 TASK_RUNNING,调用 copy_thread 初始化子进程内核栈,设置子进程pid。
dup_task_struct中为子进程分配了新的堆栈。
copy_thread系统调用函数完成赋值功能。
二、实验
1.添加命令
技术分享图片
2、打开gdb调试
技术分享图片
3、设置断点
技术分享图片
4、do_fork系统内核调用
技术分享图片
5、copy_process复制信息
技术分享图片
6、copy_thread系统调用赋值
技术分享图片
总结:
本章深入了解了系统创建进程的过程,使用fork,vfork,clone等调用创建进程,都是通过调用do_fork来实现的。
整体系统调用嵌套顺序:Sys_clone , Do_fork, Copy_process, Dup_talk_struct, Copy_thread, Ret_from_fork.
copy_thread中将子进程的ip设置为ret_form_fork的首地址,所以子进程是从ret_form_fork开始执行的。

2018-2019-1 20189210 《LInux内核原理与分析》第七周作业

原文:https://www.cnblogs.com/20189210mujian/p/10017672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!