码迷,mamicode.com
首页 > 系统相关 > 详细

2017-2018-1 20179219《Linux内核原理与设计》第七周作业

时间:2017-11-13 00:08:13      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:ejb   bis   poi   running   tts   scm   fft   pdh   cga   

一、实验操作

使用GDB跟踪创建新进程的过程

首先删除menu文件夹后从github重新克隆一个新的menu,用test_fork.c取代test.c

技术分享

编译后启动menuos,发现刚刚添加的命令fork已经能够使用了

技术分享

接下来进行调试

 技术分享

设置断点:  b sys_clone    
       b do_fork
       b dup_task_struct
       b copy_process
       b copy_thread
       b ret_from_fork

技术分享

 

fork显示结果如下:

技术分享

 技术分享

 

二、学习笔记

1.

//fork一个子进程的代码
#include <stdio.h>
#include <stdlib.h>
#incldue <unistd.h>
int main(int argc , char *argv[])
{
	int pid;
	pid=fork();//fork is a syscall,it‘s function is creat a son jincheng
in usertype
	if(pid<0)
{
	fprintf(stderr,"Fork Failed!");
	exit(-1);
}
else if(pid==0)
{
	printf("This is Child Process!\n);
}
else
{
	printf(‘This is Parent Process!\n");
	wait(NULL);
	printf("Child Complete!\n");
}
}
//父进程返回子进程ID,子进程返回pid=0,所以if else语句中后两个都会执行

 

2.linux通过赋值父进程来创建一个新进程,其想想框架为:
    1.复制一个PCB——task_struct        err=arch_dup_task_struct(tsk,orig);
    2.要给新进程分配一个新的内核堆栈    ti=alloc_thread_info_node
                        tsk->stack=ti;
                        setup+thread_stack(tsk,orig);//这里只是复制thread_info,而非复制内核堆栈
    3.修改复制过来的数据

3.操作系统的三大功能:进程管理/内存管理/文件系统

4.进程状态变换:进程刚创建时状态为:TASK_RUNNING,此为就绪态,但是没有在运行;当调度器选择此进程时状态切换为TASK_RUNNING状态,但正在运行;当一个正在运行的进程终止时将进入TASK_ZOMBIE状态,系统会将此进程处理掉;当一个进程在等待特定的资源或事件时将进入阻塞态TASK_INTERRUPTIBLE 或 TASK_UNINTERRUPTIBLE状态,此时如果事件发生或是资源可用则进程将被唤醒并放在运行队列上再次进入就绪态。

 

2017-2018-1 20179219《Linux内核原理与设计》第七周作业

标签:ejb   bis   poi   running   tts   scm   fft   pdh   cga   

原文地址:http://www.cnblogs.com/ghost00011011/p/7821000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!