2019-2020-1 20199302《Linux内核原理与分析》第七周作业
第六章 进程的描述和进程的创建
(一)进程的描述
1、OS的三大管理功能:(1)进程管理(进程)(2)内存管理(虚拟内存)(3)文件系统(文件)
2、进程的描述:进程控制块PCB
3、在Linux内核中,struct task_struct描述进程,其中的变量state为进程状态,stack是堆栈。结构关系:进程状态,进程双向链表的管理,控制台tty,文件系统fs的描述,进程打开文件的文件描述符:files、内存管理的描述mm,进程间通讯的信号signal的描述等。
4、Linux进程的状态与操作系统原理中的进程状态的主要区别在于,Linux内核中的就绪态和运行态都
被称作TASK_RUNNING,在阻塞态的进程分为两种,一种是TASK_INTERUPTIBLE,可以被信号以及wake_up()唤醒,另一种是TASK_UNINTERUPTIBLE只能被wake_up()唤醒。i

5、进程的标识符PID,在进程描述符中用pid和tgid标识进程。
6、双向链表struct list_head tasks用于管理进程数据结构。
(二)进程的创建
1、init_task是第一个进程(0号进程)的进程描述结构体变量,它的初始化通过硬编码的方式固定下来,而其他进程的初始化都是通过do_fork复制父进程的方式初始化的。
2、内存管理相关代码。
mm和active_mm是和进程地址空间、内存管理相关的数据结构指针,包含多个数据段,代码段,堆栈段。
3、进程之间的父子、兄弟关系
struct task_struct数据结构中记录当前进程的父进程real_parent、parent,记录当前进程的子进程的是双向链表struct list_head children,记录当前进程的兄弟进程的是双向链表struct list_head sibling。父子兄弟之间复杂的链表关系都通过指针或者双向链表关联起来。
4、保存进程上下文中CPU相关一些状态信息的数据结构
struct thread_struct保存进程上下文中CPU相关的一些状态信息的数据结构。其中最重要的是sp和ip,在x86-32位系统中,sp用来保存进程上下文中的ESP寄存器状态,ip用来保存进程上下文中的EIP机寄存器状态。
5、进程的创建和过程分析
进程的创建大概就是把当前进程的描述符等相关进程资源复制一份,产生一个子进程,根据子进程的需要对复制的进程描述符做一些修改,然后将创建好的子进程放入运行队列(对应操作系统中的就绪队列)。
(三)分析进程创建过程

给menuOS添加断点,分别在sys_clone do_fork dup_task_struct copy_process``copy_thread处


在命令行中输入fork发现停在sys_clone处,说明系统调用函数是sys_clone继续执行会停在do_fork中
2019-2020-1 20199302《Linux内核原理与分析》第七周作业的更多相关文章
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 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 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- 长乐国庆集训Day5-2
T1 彩虹 题目 [题目描述] Mr.Raju和他的一个大家庭外出度假,他们想要乘着彩虹欣赏周围的景色,但是这样最会有一些问题. 在他们家族中,如果一个人想要骑上彩虹,那么他喜欢的所有人和喜欢他的所有 ...
- python 之 面向对象(反射、__str__、__del__)
7.10 反射 下述四个函数是专门用来操作类与对象属性的.通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def __ ...
- vue3 createComponent
这个函数不是必须的,除非你想要完美结合 TypeScript 提供的类型推断来进行项目的开发. 这个函数仅仅提供了类型推断,方便在结合 TypeScript 书写代码时,能为 setup() 中的 p ...
- SpringBoot中使用Interceptor
https://www.cnblogs.com/chao555/p/9573102.html 1.创建自定义的拦截器并实现HandlerInterceptor接口 package com.demo.c ...
- Object类的toString()和equals()方法
我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默 ...
- 华为 mate30 安装谷歌助手
最近入手了 华为 mate30 pro, 作为一个8年的老果粉,在使用2天 mate30p 之后,给了耳目一新的感觉,不得不说这款手机真的很强大,各种优点我也不多说了,可以看网上各种专业的测评 但是手 ...
- sublime中Vue高亮插件安装
1.准备语法高亮插件vue-syntax-highlight. 下载地址: https://github.com/vuejs/vue-syntax-highlight 下载页面并下载: 解开压缩包vu ...
- python之路第一天
2018-07-11星期三 创建自己的博客(博客园): 登陆 我的博客 随笔:所有人在博客中都能看见的文章 文章:别人看不见,只能URL访问--我把网页地址发给你,你才能看到 日志:别人看不到,URL ...
- Walle实现自动发布
walle是啥?能干啥?有啥用?这些我都不会去一一道来,如果你还没有明白前面提出的三个问题就不用往下看了,这里这回将walle安装了怎么去使用.如果都要面面俱到不是一两篇博客可以解决的问题,如果希望将 ...
- ovirt平台新建kvm操作
登录后点击管理门户,随后计算-->虚拟机--> 新建 一般情况下需要操作的选项如下: 普通: 操作系统:linux 优化目标:服务器 描述:自定义 nic1:选择默认的网络 系统: 内存, ...