2020-2021-1 20209307《Linux内核原理与分析》第七周作业
| 这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> | 
|---|---|
| 这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第七周作业> | 
| 这个作业的目标 | <分析Linux内核创建一个新进程的过程> | 
| 作业正文 | https://www.cnblogs.com/wzyxiaowang/p/14020866.html | 
一、知识点总结
1、进程的描述
1.1 操作系统三大功能:进程管理、内存管理、文件系统
1.2进程描述符:为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。
1.3Linux进程的状态
在代码运行运行过程中,进程的可分为不同的状态,在linux下,进程分为三种主要状态状态:就绪态、运行态和阻塞状态。每种状态将会依据外部条件不断的切换。 刚开始创建的进程叫做就绪态,叫做task_running 当被调用之后,开始运行叫做运行态,也叫做task_running 这两个状态都用了task_runing同一个标志,可理解为可运行状态,是否运行要看时间片等信息。 如果进程终止后进入僵尸状态,最终被回收。 如果等待某件事情将进入阻塞状态。如果被唤醒重新进入就绪态。

1.4进程链表:为了对给定类型的进程(比如所有在可运行状态下的进程)进行有效的搜索,内核维护了几个进程链表。

2、进程的创建过程
(1)Linux通过复制父进程来创建一个新进程:复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈。
(2)修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread。
(3)从ret_from_fork开始执行新进程。
二、实验六:分析Linux内核创建一个新进程的过程
1.删除之前的menu,再通过git克隆一份新的,使用mv把test.c覆盖掉,然后执行 make roofts
-rm -rf menu
-git clone http://github.com/mengning/menu.git

2.编译运行出来使用help可以看到列表中增加了fork
-make rootfs
-MenuOS>>help

3.使用水平分割,再开启一个shell窗口,启动gdb,把内核加载进来,连接到target remote:1234,使用b在sys_clone、do_fork、dup_task_struct、copy_process、copy_thread、ret_from_fork处各设置断点
-(gdb)file linux-3.18.6/vmlinux
-(gdb)target remote:1234
-(gdb)b sys_clone
-(gdb)b do_fork
-(gdb)b dup_task_struct
-(gdb)b copy_process
-(gdb)b copy_thread
-(gdb)b ret_from_fork

4.使用c继续执行,停到了 do_fork 位置,然后使用命令n
-(gdb)c
-(gdb)n


三、实验总结
当子进程获得cpu控制权开始运行的时候,它的ret_from_fork可以做一系列工作,然后返回到用户态;此时的进程已经不是原来父进程的进程空间了。设置sp调度到子进程时的内核栈顶,ip转到子进程时的第一条指令地址之后,当子进程获得CPU的控制权开始运行的时候,ret _ form _ fork可以将后面的堆栈出栈,从iret返回到用户态,从而切换到子进程的用户空间,完成新进程的创建。在这个过程中fork()函数被调用一次,但是返回了两次。
2020-2021-1 20209307《Linux内核原理与分析》第七周作业的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
		<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ... 
- 20169210《Linux内核原理与分析》第二周作业
		<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ... 
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
		2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ... 
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
		20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ... 
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
		<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ... 
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
		<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ... 
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
		2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ... 
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
		Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ... 
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
		这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ... 
- 《Linux内核原理与分析》第一周作业 20189210
		实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ... 
随机推荐
- python-网络安全编程第八天(实战高精度密码字典生成器)
			前言 emmmm 高精度密码字典源码 1.py import exrex import sys #url过滤处理 def host_para(host): if '://' in host: host ... 
- MathType如何输入微分上的点
			作为被老师们青睐的公式编辑器,MathType可以帮助插入各种数学符号和编辑数学公式,从而提高数学试卷的编写效率.但是作为新手,在编辑公式的时候难免有困难,比如就有人问:如何输入微分上的点?其实也是有 ... 
- 找回消失的IDM嗅探下载浮动条的方法
			我们之前讲了IDM资源嗅探的下载浮动条的设置方法,然而在有些时候,这个下载浮动条无法正常显示出来,影响了下载体验,这个问题该如何解决呢? 1.安装IDM扩展程序 一般来说,在IDM安装完成后,会在浏览 ... 
- (1)Hello World
			语出<论语·卫灵公>:子贡问为仁.子曰:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 2020年11月终于下定决心开始 Visual C++ 的 ... 
- 中级实训Android学习记录——Toast、AlertDialog、ProgressBar
			学习记录 2020/11/22 Toast Toast Toast是一个消息提示组件 我们可以设置其显示的位置 自定义其显示的内容 对Toast的简单封装可以达到不同的目的 Toast的默认用法 To ... 
- 近50种语言编写的“Hello, World”,你会几种?可不要贪杯哦~
			本文转自公众号CSDN(ID:CSDNnews)作者:Sylvain Saurel,译者:风车云马 
- 【NOIP2017提高A组模拟9.17】组合数问题
			[NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ... 
- 2016 ACM/ICPC ECNA Regional I.Waif Until Dark(最大流)
			这是一道ECNA的16年题,问有n个小朋友,m个玩具,不同孩子有不同喜好的玩具,每个玩具可能属于一个类别,同一类别的玩具最多只能用一定次数,问最大匹配 这个就很裸的二分图,掏出dinic板子,首先最后 ... 
- moviepy音视频剪辑:lum_contrast什么时候使用以及图像处理什么时候需要调整亮度与对比度
			☞ ░ 前往老猿Python博文目录 ░ 一.亮度.对比度的概念 图像的亮度(luminosity )也即对明度的度量(参考<音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概 ... 
- PyQt(Python+Qt)学习随笔:QTableWidgetItem项whatsThis、toolTip、statusTip提示信息访问方法
			老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件的QTableWidgetItem项提示信息包括工具栏提示.状态栏提 ... 
