20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
概述
这周主要讲解的是进程。首先老师就讲解了PCB进程结构块的数据结构,PCB进程控制块的代码包含了很多信息,最开始就是进程的状态信息
,然后是进程状态符,进程调度相关信息等等很多部分。然后老师讲解了用fork()创建进程的过程,然后用gdb调试,跟踪创建进程的过程。
本周学习的内容在上个学期娄老师的课程中有涉及,所以难度不是非常大,但是老师的讲解更加详细,更加细致,也更加深入。对于我们理解操作系统中的进程有着非常重要的作用。
课本内容总结
一、进程的描述
- 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。
1. 进程控制块PCB——task_struct
操作系统的三大管理功能
- 进程管理
- 内存管理
- 文件系统
PCB task_struct中包含
- 进程状态
- 进程打开的文件
- 进程优先级信息
struct task_struct数据结构很庞大
二、进程的创建
进程借助创建原语实现创建一个新进程。首先为被创建进程在进程表集中区建立一个PCB--UNIX系统还要为进程创建U区和内存映像,从进程表索取一个空白PCB表目,记录它的下标;然后,把调用者提供的所有参数(见PCB块的内容),操作系统分配给新进程的PID和调用者的PID,就绪状态和CPU记账数据填入该PCB块;最后,把此PCB块分别列置到就绪队列RQ和进程隶属关系族群中。
UNIX系统使用fork()函数创建新进程时,为子进程复制EP进程的内存映像并不是主要目标。这时,若用exec()执行一个新程序,则子进程的正文段将全部更换,而数据段也将更新。
创建原语可描述如下:
Procedurecreate(n,S0,K0,M0,R0,acc)
begin
i:=getinternalname(n);//进程表下标
i.id:=n;i.priority:=K0;//进程PID,进程优先级
i.CPUstate=S0;i.mainstore:=M0;//初始CPU状态,内存地址
i.resources:=R0;i.status:=readys;//资源清单,就绪状态
j:=EP;i.parent:=j;i.progeny:=φ;//父进程是EP进程,子进程空
j.progeny:=i;//进程隶属关系
i.sdata=RQ;insert(RQ,i);//到就绪进程队列排队
continue
end
三、实验内容
实验内容概述
- 阅读理解task_struct数据结构;
- 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构;
- 使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone
实验步骤
1、启动MenuOS
cd LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs

2、2. gdb调试fork命令
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
在新窗口中启动调试:
$ gdb
$ file linux-3.18.6/vmlinux
$ target remote:1234
并设置断点

- b sys_clone
- b do_fork
- b dup_task_struct
- b copy_process
- b copy_thread
- b ret_from_for
在Menu系统中输入fork指令,可以看到只输出了fork功能的描述,在断点处sys_clone处停止了。继续运行,观察每个断点出的结果。


总结
创建一个新进程的执行过程
1.通过调用do_fork来实现进程的创建;
2.复制父进程PCB--task_struct来创建一个新进程,要给新进程分配一个新的内核堆栈;
3.修改复制过来的进程数据,比如pid、进程链表等等执行copy_process和copy_thread
4、成功创建新进程
20135320赵瀚青LINUX第六周学习笔记的更多相关文章
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20135320赵瀚青LINUX第五周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 按照刘老师的周从三个角 ...
- 20135320赵瀚青LINUX第八周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的是linux ...
- 20135320赵瀚青LINUX第四章读书笔记
概述 什么是进程调度 进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统. 一.调度策略 4.1进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状 ...
- 20135320赵瀚青LINUX第三章读书笔记
第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...
- 20135320赵瀚青LINUX第十八章读书笔记
概述:调试工作艰难是内核级开发区别于用户级开发的一个显著特点 18.1准备开始 内核调试往往是一个令人挠头不已的漫长过程.幸运的是,在这些费劲的问题中也有不少比较简单而且容易消灭的小bug,运气好你可 ...
- 20135320赵瀚青LINUX第五章读书笔记
第五章--系统调用 5.1 与内核通信 作用 1.为用户空间提供一种硬件的抽象接口 2.保证系统稳定和安全 3.除异常和陷入,是内核唯一的合法入口. API.POSIX和C库 关于Unix接口设计:提 ...
- 期末总结20135320赵瀚青LINUX内核分析与设计期末总结
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...
- 20135320赵瀚青LINUX内核分析第一周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...
随机推荐
- js如何遍历并取出对象的属性名?
js如何遍历并取出对象的属性名? dataObj = {name : su,age : 26,height : 18cm }; for(var st in dataObj) {console.dir( ...
- 元素隐藏 css
参考:http://www.zhangxinxu.com/wordpress/2011/03/css-%E7%9B%B8%E5%AF%B9%E7%BB%9D%E5%AF%B9relativeabsol ...
- protobuf在java应用中通过反射动态创建对象(DynamicMessage)
---恢复内容开始--- 最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是需要数据类型的如xxx.parseForm(...),这样就要求服务器在接 ...
- closure--- 闭包与并行运算
闭包有效的减少了函数所需定义的参数数目.这对于并行运算来说有重要的意义.在并行运算的环境下,我们可以让每台电脑负责一个函数,然后将一台电脑的输出和下一台电脑的输入串联起来.最终,我们像流水线一样工 ...
- vue-router路由懒加载
正常配置 import Vue from 'vue' import Router from 'vue-router' import Login from '@/components/pages/log ...
- MapReduce分析流量汇总
一.MapReduce编程规范 一.MapReduce编程规范 用户编写mr程序主要分为三个部分:Mapper,Reducer,Driver 1.Mapper阶段 (1)用户自定义Mapper类 要继 ...
- replace未全局替换的坑
今天是名副其实的周六.悠闲了一早上(太阳). 真是人在家中坐,BUG自天上来.哈哈其实也不是自天上来,还是自己之前埋下的雷. 所以修复完线上的bug,我脑中立刻浮现出两件还需要做的事情: 一,就是我现 ...
- Python下的正则表达式原理和优化笔记
摘要: 本文旨在总结一些编写表达式的技巧和原理.鉴于介绍python中re模块的使用方法的文章太多.所以本文在基础方面都是略过,而在回溯原理和一些技巧方面记录一点点学习总结. 目录:[ - ] 基础规 ...
- Linux ssh服务
关于ssh服务不多说就提几句,1,机房的服务器一般都是通过远程连接登录的,远程登录就必然少不了ssh客户端.2,虚拟机每次都要点击进去,每次退出来也需要按Ctrl+Alt+Enter,也比较麻烦,有时 ...
- SDUT3165:Round Robina(循环链表)
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3165 题意分析: 比赛时这题没有A真伤心 ...